diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000000..5b252e1475 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,32 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Build and Test Commands +- Build: `cargo make debug` (debug) or `cargo make release` (optimized) +- Format: `cargo make format` or check with `cargo make format-check` +- Lint: `cargo make clippy` +- Test: `cargo make test` (standard) or `cargo make test-all` (all backends) +- Unit tests only: `cargo make unit` +- Single test: `cargo nextest run -p sos-integration-tests test_name` +- CLI tests: `cargo make test-cli` or `cargo make test-shell` +- Documentation: `cargo make doc` + +## Code Style +- Use the Rust 2018 edition style +- Maximum line width: 78 characters +- Prefer `thiserror` for error handling with clear, specific error types +- Use doc comments (`///`) for public APIs +- Add `#![deny(missing_docs)]` and `#![forbid(unsafe_code)]` to crate roots +- Prefer `Result` with custom error types for error handling +- Implement informative Display/Debug traits for public types +- Use bitflags for flag-based enums +- Ensure proper serialization/deserialization for custom types + +## Naming and Structure +- Use snake_case for variables, functions, and modules +- Use PascalCase for types and traits +- Group related functionality in modules +- Re-export important types in crate root +- Use clear, descriptive names that reflect domain concepts +- Follow vault, folder, secret terminology as defined in documentation diff --git a/Cargo.lock b/Cargo.lock index 385cc603bb..d7d914e1b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,9 +13,9 @@ dependencies = [ [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aead" @@ -33,7 +33,7 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "cipher", "cpufeatures", ] @@ -99,14 +99,14 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "once_cell", "version_check", - "zerocopy 0.7.35", + "zerocopy", ] [[package]] @@ -132,19 +132,13 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-build" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a133d38cebf328adaea4bc1891d9568e14a394b50e4f4ba5f63dc14e8beaaee9" +checksum = "8cac4c64175d504608cf239756339c07f6384a476f97f20a7043f92920b0b8fd" dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -156,9 +150,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -171,37 +165,37 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", - "once_cell", - "windows-sys 0.59.0", + "once_cell_polyfill", + "windows-sys 0.60.2", ] [[package]] @@ -236,22 +230,24 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.97" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "arboard" -version = "3.4.1" +version = "3.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df099ccb16cd014ff054ac1bf392c67feeef57164b05c42f037cd40f5d4357f4" +checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" dependencies = [ "clipboard-win", "log", - "objc2", + "objc2 0.6.2", "objc2-app-kit", - "objc2-foundation", + "objc2-foundation 0.3.1", "parking_lot", + "percent-encoding", + "windows-sys 0.60.2", "x11rb", ] @@ -297,7 +293,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", "synstructure", ] @@ -309,19 +305,19 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] name = "async-compression" -version = "0.4.20" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "310c9bcae737a48ef5cdee3174184e6d548b292739ede61a1f955ef76a738861" +checksum = "977eb15ea9efd848bb8a4a1a2500347ed7f0bf794edf0dc3ddcf439f43d36b23" dependencies = [ - "flate2", + "compression-codecs", + "compression-core", "futures-core", "futures-io", - "memchr", "pin-project-lite", ] @@ -332,7 +328,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7569377d7062165f6f7834d9cb3051974a2d141433cc201c2f94c149e993cccf" dependencies = [ "async-trait", - "cfg-if 1.0.0", + "cfg-if 1.0.3", "pin-project", "rustix 0.38.44", "thiserror 1.0.69", @@ -348,7 +344,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -365,13 +361,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.87" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d556ec1359574147ec0c4fc5eb525f3f23263a592b1a9c07e0a75b427de55c97" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -397,15 +393,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "axum" -version = "0.8.1" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d6fd624c75e18b3b4c6b9caf42b1afe24437daaee904069137d8bab077be8b8" +checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" dependencies = [ "axum-core", "base64 0.22.1", @@ -432,7 +428,7 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-tungstenite", - "tower 0.5.2", + "tower", "tower-layer", "tower-service", "tracing", @@ -440,12 +436,12 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1362f362fd16024ae199c1970ce98f9661bf5ef94b9808fee734bc3698b733" +checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" dependencies = [ "bytes", - "futures-util", + "futures-core", "http", "http-body", "http-body-util", @@ -460,9 +456,9 @@ dependencies = [ [[package]] name = "axum-extra" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fc6f625a1f7705c6cf62d0d070794e94668988b1c38111baeec177c715f7b" +checksum = "45bf463831f5131b7d3c756525b305d40f1185b688565648a92e1392ca35713d" dependencies = [ "axum", "axum-core", @@ -474,8 +470,9 @@ dependencies = [ "http-body-util", "mime", "pin-project-lite", + "rustversion", "serde", - "tower 0.5.2", + "tower", "tower-layer", "tower-service", ] @@ -496,22 +493,21 @@ dependencies = [ "metrics-exporter-prometheus", "pin-project", "tokio", - "tower 0.5.2", + "tower", "tower-http", ] [[package]] name = "axum-server" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56bac90848f6a9393ac03c63c640925c4b7c8ca21654de40d53f55964667c7d8" +checksum = "495c05f60d6df0093e8fb6e74aa5846a0ad06abaf96d76166283720bf740f8ab" dependencies = [ "arc-swap", "bytes", - "futures-util", + "fs-err", "http", "http-body", - "http-body-util", "hyper", "hyper-util", "pin-project-lite", @@ -520,18 +516,17 @@ dependencies = [ "rustls-pki-types", "tokio", "tokio-rustls", - "tower 0.4.13", "tower-service", ] [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", - "cfg-if 1.0.0", + "cfg-if 1.0.3", "libc", "miniz_oxide", "object", @@ -558,9 +553,9 @@ checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base32" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa" +checksum = "022dfe9eb35f19ebbcb51e0b40a5ab759f46ad60cadf7297e0bd085afb50e076" [[package]] name = "base64" @@ -576,9 +571,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "basic-toml" @@ -636,9 +631,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.0" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" dependencies = [ "serde", ] @@ -667,7 +662,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" dependencies = [ - "objc2", + "objc2 0.5.2", ] [[package]] @@ -678,15 +673,15 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytemuck" -version = "1.22.0" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" [[package]] name = "byteorder" @@ -708,10 +703,11 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.2.16" +version = "1.2.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" +checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9" dependencies = [ + "find-msvc-tools", "shlex", ] @@ -739,9 +735,9 @@ checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -763,7 +759,7 @@ checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -772,7 +768,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "cipher", "cpufeatures", ] @@ -797,24 +793,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45a7298287f1443f422d3f46e8ce9f855e75f0e43c06605adb4c52a262faeabd" dependencies = [ "derive_builder 0.10.2", - "getrandom 0.2.15", + "getrandom 0.2.16", "rand 0.8.5", "thiserror 1.0.69", ] [[package]] name = "chrono" -version = "0.4.40" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.0", ] [[package]] @@ -830,9 +825,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.31" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767" +checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" dependencies = [ "clap_builder", "clap_derive", @@ -840,9 +835,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.31" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863" +checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" dependencies = [ "anstream", "anstyle", @@ -853,36 +848,36 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.28" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" +checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "clipboard-win" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" +checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" dependencies = [ "error-code", ] [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "colored" @@ -910,6 +905,22 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55b672471b4e9f9e95499ea597ff64941a309b2cdbffcc46f2cc5e2d971fd335" +[[package]] +name = "compression-codecs" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "485abf41ac0c8047c07c87c72c8fb3eb5197f6e9d7ded615dfd1a00ae00a0f64" +dependencies = [ + "compression-core", + "flate2", +] + +[[package]] +name = "compression-core" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" + [[package]] name = "conpty" version = "0.5.1" @@ -927,9 +938,9 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "constant_time_eq" -version = "0.2.6" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "cookie-factory" @@ -961,9 +972,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ "core-foundation-sys", "libc", @@ -986,11 +997,11 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", ] [[package]] @@ -1023,7 +1034,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "crossterm_winapi", "mio", "parking_lot", @@ -1067,11 +1078,11 @@ dependencies = [ [[package]] name = "csv-async" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d37fe5b0d07f4a8260ce1e9a81413e88f459af0f2dfc55c15e96868a2f99c0f0" +checksum = "888dbb0f640d2c4c04e50f933885c7e9c95995d93cec90aba8735b4c610f26f1" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "csv-core", "futures", "itoa", @@ -1101,12 +1112,13 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.4.5" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90eeab0aa92f3f9b4e87f258c72b139c207d251f9cbc1080a0086b86a8870dd3" +checksum = "881c5d0a13b2f1498e2306e82cbada78390e152d4b1378fb28a84f4dcd0dc4f3" dependencies = [ - "nix 0.29.0", - "windows-sys 0.59.0", + "dispatch", + "nix 0.30.1", + "windows-sys 0.61.0", ] [[package]] @@ -1115,7 +1127,7 @@ version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "cpufeatures", "curve25519-dalek-derive", "digest", @@ -1133,7 +1145,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -1148,12 +1160,22 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.10" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ - "darling_core 0.20.10", - "darling_macro 0.20.10", + "darling_core 0.21.3", + "darling_macro 0.21.3", ] [[package]] @@ -1172,16 +1194,30 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.99", + "syn 2.0.106", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.106", ] [[package]] @@ -1197,64 +1233,58 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core 0.20.10", + "darling_core 0.20.11", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] -name = "dashmap" -version = "6.1.0" +name = "darling_macro" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", + "darling_core 0.21.3", + "quote", + "syn 2.0.106", ] [[package]] name = "data-encoding" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "dbus" -version = "0.9.7" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b" +checksum = "190b6255e8ab55a7b568df5a883e9497edc3e4821c06396612048b430e5ad1e9" dependencies = [ "libc", "libdbus-sys", - "winapi", + "windows-sys 0.59.0", ] [[package]] name = "dbus-secret-service" -version = "4.0.3" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42a16374481d92aed73ae45b1f120207d8e71d24fb89f357fadbd8f946fd84b" +checksum = "708b509edf7889e53d7efb0ffadd994cc6c2345ccb62f55cfd6b0682165e4fa6" dependencies = [ "dbus", - "futures-util", - "num", - "once_cell", - "rand 0.8.5", + "zeroize", ] [[package]] name = "der" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", "zeroize", @@ -1276,9 +1306,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.11" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" dependencies = [ "powerfmt", "serde", @@ -1320,10 +1350,10 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" dependencies = [ - "darling 0.20.10", + "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -1343,7 +1373,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core 0.20.2", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -1364,6 +1394,22 @@ dependencies = [ "subtle", ] +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.9.4", + "objc2 0.6.2", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -1372,9 +1418,21 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] +[[package]] +name = "doctest-file" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + [[package]] name = "ecdsa" version = "0.16.9" @@ -1401,9 +1459,9 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ "curve25519-dalek", "ed25519", @@ -1447,22 +1505,22 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "enum-iterator" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c280b9e6b3ae19e152d8e31cf47f18389781e119d4013a2a2bb0180e5facc635" +checksum = "a4549325971814bda7a44061bf3fe7e487d447cba01e4220a4b454d630d7a016" dependencies = [ "enum-iterator-derive", ] [[package]] name = "enum-iterator-derive" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" +checksum = "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -1473,19 +1531,19 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.0", ] [[package]] name = "error-code" -version = "3.3.1" +version = "3.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" +checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" [[package]] name = "etcetera" @@ -1493,7 +1551,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "home", "windows-sys 0.48.0", ] @@ -1517,8 +1575,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2" dependencies = [ "bit-set", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", ] [[package]] @@ -1529,12 +1587,12 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fd-lock" -version = "4.0.3" +version = "4.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c44818c96aec5cadc9dacfb97bbcbcfc19a0de75b218412d56f57fbaab94e439" +checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78" dependencies = [ - "cfg-if 1.0.0", - "rustix 0.38.44", + "cfg-if 1.0.3", + "rustix 1.1.2", "windows-sys 0.59.0", ] @@ -1549,9 +1607,9 @@ dependencies = [ [[package]] name = "ff" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ "rand_core 0.6.4", "subtle", @@ -1565,14 +1623,14 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "libc", "libredox", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -1584,6 +1642,12 @@ dependencies = [ "toml 0.5.11", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" + [[package]] name = "fixedbitset" version = "0.5.7" @@ -1592,9 +1656,9 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", "miniz_oxide", @@ -1652,19 +1716,29 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] +[[package]] +name = "fs-err" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44f150ffc8782f35521cec2b23727707cb4045706ba3c854e86bef66b3a8cdbd" +dependencies = [ + "autocfg", + "tokio", +] + [[package]] name = "fsevent-sys" version = "4.1.0" @@ -1724,9 +1798,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "fastrand", "futures-core", @@ -1743,7 +1817,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -1789,37 +1863,39 @@ dependencies = [ [[package]] name = "gethostname" -version = "0.4.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" dependencies = [ - "libc", - "windows-targets 0.48.5", + "rustix 1.1.2", + "windows-targets 0.52.6", ] [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", + "js-sys", "libc", - "wasi 0.13.3+wasi-0.2.2", - "windows-targets 0.52.6", + "r-efi", + "wasi 0.14.7+wasi-0.2.4", + "wasm-bindgen", ] [[package]] @@ -1943,9 +2019,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.8" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", @@ -1953,7 +2029,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.7.1", + "indexmap 2.11.4", "slab", "tokio", "tokio-util", @@ -1978,13 +2054,19 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "foldhash", ] +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + [[package]] name = "hashlink" version = "0.9.1" @@ -1996,11 +2078,11 @@ dependencies = [ [[package]] name = "headers" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322106e6bd0cba2d5ead589ddb8150a13d7c4217cf80d7c4f682ca994ccc6aa9" +checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "bytes", "headers-core", "http", @@ -2068,9 +2150,9 @@ dependencies = [ [[package]] name = "http" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", @@ -2089,12 +2171,12 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", - "futures-util", + "futures-core", "http", "http-body", "pin-project-lite", @@ -2120,13 +2202,14 @@ checksum = "91f255a4535024abf7640cb288260811fc14794f62b063652ed349f9a6c2348e" [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", "h2", "http", "http-body", @@ -2134,6 +2217,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -2141,11 +2225,10 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.5" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "futures-util", "http", "hyper", "hyper-util", @@ -2154,21 +2237,26 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots", + "webpki-roots 1.0.2", ] [[package]] name = "hyper-util" -version = "0.1.10" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ + "base64 0.22.1", "bytes", "futures-channel", + "futures-core", "futures-util", "http", "http-body", "hyper", + "ipnet", + "libc", + "percent-encoding", "pin-project-lite", "socket2", "tokio", @@ -2178,9 +2266,9 @@ dependencies = [ [[package]] name = "i18n-config" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e88074831c0be5b89181b05e6748c4915f77769ecc9a4c372f88b169a8509c9" +checksum = "3e06b90c8a0d252e203c94344b21e35a30f3a3a85dc7db5af8f8df9f3e0c63ef" dependencies = [ "basic-toml", "log", @@ -2192,9 +2280,9 @@ dependencies = [ [[package]] name = "i18n-embed" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0454970a5853f498e686cbd7bf9391aac2244928194780cb7a0af0f41937db6" +checksum = "669ffc2c93f97e6ddf06ddbe999fcd6782e3342978bb85f7d3c087c7978404c4" dependencies = [ "arc-swap", "fluent", @@ -2212,11 +2300,10 @@ dependencies = [ [[package]] name = "i18n-embed-fl" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7578cee2940492a648bd60fb49ca85ee8c821a63790e0ef5b604cfed353b2a" +checksum = "04b2969d0b3fc6143776c535184c19722032b43e6a642d710fa3f88faec53c2d" dependencies = [ - "dashmap", "find-crate", "fluent", "fluent-syntax", @@ -2226,7 +2313,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.99", + "syn 2.0.106", "unic-langid", ] @@ -2240,21 +2327,22 @@ dependencies = [ "i18n-config", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", - "windows-core 0.52.0", + "windows-core 0.62.0", ] [[package]] @@ -2268,21 +2356,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -2291,31 +2380,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -2323,67 +2392,54 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.99", -] - [[package]] name = "ident_case" version = "1.0.1" @@ -2392,9 +2448,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -2403,9 +2459,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -2413,12 +2469,13 @@ dependencies = [ [[package]] name = "image" -version = "0.25.5" +version = "0.25.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" +checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" dependencies = [ "bytemuck", "byteorder-lite", + "moxcms", "num-traits", "png", ] @@ -2436,13 +2493,14 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.1" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.16.0", "serde", + "serde_core", ] [[package]] @@ -2480,14 +2538,29 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", +] + +[[package]] +name = "interprocess" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d941b405bd2322993887859a8ee6ac9134945a24ec5ec763a8a962fc64dfec2d" +dependencies = [ + "doctest-file", + "futures-core", + "libc", + "recvmsg", + "tokio", + "widestring", + "windows-sys 0.52.0", ] [[package]] name = "intl-memoizer" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe22e020fce238ae18a6d5d8c502ee76a52a6e880d99477657e6acc30ec57bda" +checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f" dependencies = [ "type-map", "unic-langid", @@ -2504,13 +2577,24 @@ dependencies = [ [[package]] name = "inventory" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab08d7cd2c5897f2c949e5383ea7c7db03fb19130ffcfbf7eda795137ae3cb83" +checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" dependencies = [ "rustversion", ] +[[package]] +name = "io-uring" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" +dependencies = [ + "bitflags 2.9.4", + "cfg-if 1.0.3", + "libc", +] + [[package]] name = "io_tee" version = "0.1.1" @@ -2523,6 +2607,16 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "is-docker" version = "0.2.0" @@ -2579,7 +2673,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" dependencies = [ "cesu8", - "cfg-if 1.0.0", + "cfg-if 1.0.3", "combine", "jni-sys", "log", @@ -2596,9 +2690,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e" dependencies = [ "once_cell", "wasm-bindgen", @@ -2610,7 +2704,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "ecdsa", "elliptic-curve", "once_cell", @@ -2620,9 +2714,9 @@ dependencies = [ [[package]] name = "kdam" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ed2186610f797a95b55e61c420a81d3b9079ac9776d382f41cf35ce0643a90a" +checksum = "5740f66a8d86a086ebcacfb937070e8be6eb2f8fb45e4ae7fa428ca2a98a7b1f" dependencies = [ "kdam_derive", "terminal_size", @@ -2631,12 +2725,12 @@ dependencies = [ [[package]] name = "kdam_derive" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5e25f9b861a88faa9d272ca4376e1a13c9a37d36de623f013c7bbb0ae2baa1" +checksum = "affc90b6daa52dc928055e8f0d5611ee9d15073469f3d2f682498b092747503b" dependencies = [ "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -2652,30 +2746,31 @@ dependencies = [ name = "keychain_parser" version = "0.1.2" dependencies = [ - "logos 0.15.0", + "logos 0.15.1", "plist", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] name = "keyring" -version = "3.6.2" +version = "3.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1961983669d57bdfe6c0f3ef8e4c229b5ef751afcc7d87e4271d2f71f6ccfa8b" +checksum = "eebcc3aff044e5944a8fbaf69eb277d11986064cba30c468730e8b9909fb551c" dependencies = [ "byteorder", "dbus-secret-service", "log", "security-framework 2.11.1", - "security-framework 3.2.0", - "windows-sys 0.59.0", + "security-framework 3.5.0", + "windows-sys 0.60.2", + "zeroize", ] [[package]] name = "kqueue" -version = "1.0.8" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" +checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" dependencies = [ "kqueue-sys", "libc", @@ -2708,32 +2803,32 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.170" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libdbus-sys" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72" +checksum = "5cbe856efeb50e4681f010e9aaa2bf0a644e10139e54cde10fc83a307c23bd9f" dependencies = [ "pkg-config", ] [[package]] name = "libm" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "libc", "redox_syscall", ] @@ -2757,21 +2852,21 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9c683daf087dc577b7506e9695b3d556a9f3849903fa28186283afd6809e9" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -2779,9 +2874,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.26" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "logos" @@ -2794,11 +2889,11 @@ dependencies = [ [[package]] name = "logos" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab6f536c1af4c7cc81edf73da1f8029896e7e1e16a219ef09b184e76a296f3db" +checksum = "ff472f899b4ec2d99161c51f60ff7075eeb3097069a36050d8037a6325eb8154" dependencies = [ - "logos-derive 0.15.0", + "logos-derive 0.15.1", ] [[package]] @@ -2812,24 +2907,24 @@ dependencies = [ "lazy_static", "proc-macro2", "quote", - "regex-syntax 0.8.5", - "syn 2.0.99", + "regex-syntax", + "syn 2.0.106", ] [[package]] name = "logos-codegen" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "189bbfd0b61330abea797e5e9276408f2edbe4f822d7ad08685d67419aafb34e" +checksum = "192a3a2b90b0c05b27a0b2c43eecdb7c415e29243acc3f89cc8247a5b693045c" dependencies = [ "beef", "fnv", "lazy_static", "proc-macro2", "quote", - "regex-syntax 0.8.5", + "regex-syntax", "rustc_version", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -2843,13 +2938,19 @@ dependencies = [ [[package]] name = "logos-derive" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebfe8e1a19049ddbfccbd14ac834b215e11b85b90bab0c2dba7c7b92fb5d5cba" +checksum = "605d9697bcd5ef3a42d38efc51541aa3d6a4a25f7ab6d1ed0da5ac632a26b470" dependencies = [ - "logos-codegen 0.15.0", + "logos-codegen 0.15.1", ] +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "maplit2" version = "1.0.5" @@ -2858,11 +2959,11 @@ checksum = "5be3fc94901ceb513dfa964ae5b0d7ef231f964ace599ccf048bb9aeaea4d9d9" [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -2879,9 +2980,9 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memoffset" @@ -2894,9 +2995,9 @@ dependencies = [ [[package]] name = "metrics" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a7deb012b3b2767169ff203fadb4c6b0b82b947512e5eb9e0b78c2e186ad9e3" +checksum = "25dea7ac8057892855ec285c440160265225438c3c45072613c25a4b26e98ef5" dependencies = [ "ahash", "portable-atomic", @@ -2909,7 +3010,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd7399781913e5393588a8d8c6a2867bf85fb38eaf2502fdce465aad2dc6f034" dependencies = [ "base64 0.22.1", - "indexmap 2.7.1", + "indexmap 2.11.4", "metrics", "metrics-util", "quanta", @@ -2918,16 +3019,16 @@ dependencies = [ [[package]] name = "metrics-util" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd4884b1dd24f7d6628274a2f5ae22465c337c5ba065ec9b6edccddf8acc673" +checksum = "b8496cc523d1f94c1385dd8f0f0c2c480b2b8aeccb5b7e4485ad6365523ae376" dependencies = [ "crossbeam-epoch", "crossbeam-utils", - "hashbrown 0.15.2", + "hashbrown 0.15.5", "metrics", "quanta", - "rand 0.8.5", + "rand 0.9.2", "rand_xoshiro", "sketches-ddsketch", ] @@ -2956,9 +3057,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.5" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", "simd-adler32", @@ -2966,21 +3067,31 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", +] + +[[package]] +name = "moxcms" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd32fa8935aeadb8a8a6b6b351e40225570a37c43de67690383d87ef170cd08" +dependencies = [ + "num-traits", + "pxfm", ] [[package]] name = "multimap" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" [[package]] name = "ndk-context" @@ -3004,7 +3115,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ "bitflags 1.3.2", - "cfg-if 1.0.0", + "cfg-if 1.0.3", "libc", "memoffset", "pin-utils", @@ -3016,20 +3127,20 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" dependencies = [ - "bitflags 2.9.0", - "cfg-if 1.0.0", + "bitflags 2.9.4", + "cfg-if 1.0.3", "cfg_aliases 0.1.1", "libc", ] [[package]] name = "nix" -version = "0.29.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.0", - "cfg-if 1.0.0", + "bitflags 2.9.4", + "cfg-if 1.0.3", "cfg_aliases 0.2.1", "libc", ] @@ -3056,7 +3167,7 @@ version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c533b4c39709f9ba5005d8002048266593c1cfaf3c5f0739d5b8ab0c6c504009" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "filetime", "fsevent-sys", "inotify", @@ -3081,26 +3192,11 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num" -version = "0.4.3" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", + "windows-sys 0.52.0", ] [[package]] @@ -3113,15 +3209,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - [[package]] name = "num-conv" version = "0.1.0" @@ -3137,28 +3224,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -3193,44 +3258,49 @@ dependencies = [ "objc2-encode", ] +[[package]] +name = "objc2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc" +dependencies = [ + "objc2-encode", +] + [[package]] name = "objc2-app-kit" -version = "0.2.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" dependencies = [ - "bitflags 2.9.0", - "block2", - "libc", - "objc2", - "objc2-core-data", - "objc2-core-image", - "objc2-foundation", - "objc2-quartz-core", + "bitflags 2.9.4", + "objc2 0.6.2", + "objc2-core-graphics", + "objc2-foundation 0.3.1", ] [[package]] -name = "objc2-core-data" -version = "0.2.2" +name = "objc2-core-foundation" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ - "bitflags 2.9.0", - "block2", - "objc2", - "objc2-foundation", + "bitflags 2.9.4", + "dispatch2", + "objc2 0.6.2", ] [[package]] -name = "objc2-core-image" -version = "0.2.2" +name = "objc2-core-graphics" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ - "block2", - "objc2", - "objc2-foundation", - "objc2-metal", + "bitflags 2.9.4", + "dispatch2", + "objc2 0.6.2", + "objc2-core-foundation", + "objc2-io-surface", ] [[package]] @@ -3245,46 +3315,43 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "block2", "libc", - "objc2", + "objc2 0.5.2", ] [[package]] -name = "objc2-local-authentication" -version = "0.2.2" +name = "objc2-foundation" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "430605e43490dc3837b7d50d8daedacb9f7926da3935a8cd09651a6a9d071b71" +checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ - "block2", - "objc2", - "objc2-foundation", + "bitflags 2.9.4", + "objc2 0.6.2", + "objc2-core-foundation", ] [[package]] -name = "objc2-metal" -version = "0.2.2" +name = "objc2-io-surface" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" dependencies = [ - "bitflags 2.9.0", - "block2", - "objc2", - "objc2-foundation", + "bitflags 2.9.4", + "objc2 0.6.2", + "objc2-core-foundation", ] [[package]] -name = "objc2-quartz-core" +name = "objc2-local-authentication" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +checksum = "430605e43490dc3837b7d50d8daedacb9f7926da3935a8cd09651a6a9d071b71" dependencies = [ - "bitflags 2.9.0", "block2", - "objc2", - "objc2-foundation", - "objc2-metal", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -3307,9 +3374,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.3" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "opaque-debug" @@ -3349,15 +3422,9 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.99", + "syn 2.0.106", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "parking" version = "2.2.1" @@ -3366,9 +3433,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -3376,11 +3443,11 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "libc", "redox_syscall", "smallvec", @@ -3435,9 +3502,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petgraph" @@ -3446,7 +3513,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset", - "indexmap 2.7.1", + "indexmap 2.11.4", ] [[package]] @@ -3504,7 +3571,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -3537,12 +3604,12 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plist" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" +checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" dependencies = [ "base64 0.22.1", - "indexmap 2.7.1", + "indexmap 2.11.4", "quick-xml", "serde", "time", @@ -3550,11 +3617,11 @@ dependencies = [ [[package]] name = "png" -version = "0.17.16" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.4", "crc32fast", "fdeflate", "flate2", @@ -3603,7 +3670,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "cpufeatures", "opaque-debug", "universal-hash", @@ -3611,9 +3678,18 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.11.0" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "potential_utf" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +dependencies = [ + "zerovec", +] [[package]] name = "powerfmt" @@ -3623,11 +3699,11 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.7.35", + "zerocopy", ] [[package]] @@ -3642,12 +3718,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.30" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1ccf34da56fc294e7d4ccf69a85992b7dfb826b7cf57bac6a70bba3494cc08a" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -3723,14 +3799,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -3743,7 +3819,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", "version_check", "yansi", ] @@ -3774,7 +3850,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.99", + "syn 2.0.106", "tempfile", ] @@ -3788,7 +3864,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -3802,12 +3878,13 @@ dependencies = [ [[package]] name = "protoc-bin-vendored" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd89a830d0eab2502c81a9b8226d446a52998bb78e5e33cb2637c0cdd6068d99" +checksum = "d1c381df33c98266b5f08186583660090a4ffa0889e76c7e9a5e175f645a67fa" dependencies = [ "protoc-bin-vendored-linux-aarch_64", "protoc-bin-vendored-linux-ppcle_64", + "protoc-bin-vendored-linux-s390_64", "protoc-bin-vendored-linux-x86_32", "protoc-bin-vendored-linux-x86_64", "protoc-bin-vendored-macos-aarch_64", @@ -3817,45 +3894,51 @@ dependencies = [ [[package]] name = "protoc-bin-vendored-linux-aarch_64" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f563627339f1653ea1453dfbcb4398a7369b768925eb14499457aeaa45afe22c" +checksum = "c350df4d49b5b9e3ca79f7e646fde2377b199e13cfa87320308397e1f37e1a4c" [[package]] name = "protoc-bin-vendored-linux-ppcle_64" -version = "3.1.0" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a55a63e6c7244f19b5c6393f025017eb5d793fd5467823a099740a7a4222440c" + +[[package]] +name = "protoc-bin-vendored-linux-s390_64" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5025c949a02cd3b60c02501dd0f348c16e8fff464f2a7f27db8a9732c608b746" +checksum = "1dba5565db4288e935d5330a07c264a4ee8e4a5b4a4e6f4e83fad824cc32f3b0" [[package]] name = "protoc-bin-vendored-linux-x86_32" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9500ce67d132c2f3b572504088712db715755eb9adf69d55641caa2cb68a07" +checksum = "8854774b24ee28b7868cd71dccaae8e02a2365e67a4a87a6cd11ee6cdbdf9cf5" [[package]] name = "protoc-bin-vendored-linux-x86_64" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5462592380cefdc9f1f14635bcce70ba9c91c1c2464c7feb2ce564726614cc41" +checksum = "b38b07546580df720fa464ce124c4b03630a6fb83e05c336fea2a241df7e5d78" [[package]] name = "protoc-bin-vendored-macos-aarch_64" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c637745681b68b4435484543667a37606c95ddacf15e917710801a0877506030" +checksum = "89278a9926ce312e51f1d999fee8825d324d603213344a9a706daa009f1d8092" [[package]] name = "protoc-bin-vendored-macos-x86_64" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38943f3c90319d522f94a6dfd4a134ba5e36148b9506d2d9723a82ebc57c8b55" +checksum = "81745feda7ccfb9471d7a4de888f0652e806d5795b61480605d4943176299756" [[package]] name = "protoc-bin-vendored-win32" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dc55d7dec32ecaf61e0bd90b3d2392d721a28b95cfd23c3e176eccefbeab2f2" +checksum = "95067976aca6421a523e491fce939a3e65249bac4b977adee0ee9771568e8aa3" [[package]] name = "ptyprocess" @@ -3866,6 +3949,15 @@ dependencies = [ "nix 0.26.4", ] +[[package]] +name = "pxfm" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83f9b339b02259ada5c0f4a389b7fb472f933aa17ce176fd2ad98f28bb401fde" +dependencies = [ + "num-traits", +] + [[package]] name = "qrcodegen" version = "1.8.0" @@ -3885,61 +3977,64 @@ dependencies = [ [[package]] name = "quanta" -version = "0.12.5" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" +checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7" dependencies = [ "crossbeam-utils", "libc", "once_cell", "raw-cpuid", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "web-sys", "winapi", ] [[package]] name = "quick-xml" -version = "0.32.0" +version = "0.38.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" +checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89" dependencies = [ "memchr", ] [[package]] name = "quinn" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", + "cfg_aliases 0.2.1", "pin-project-lite", "quinn-proto", "quinn-udp", "rustc-hash 2.1.1", "rustls", "socket2", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tracing", + "web-time", ] [[package]] name = "quinn-proto" -version = "0.11.9" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", - "getrandom 0.2.15", - "rand 0.8.5", + "getrandom 0.3.3", + "lru-slab", + "rand 0.9.2", "ring", "rustc-hash 2.1.1", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.16", "tinyvec", "tracing", "web-time", @@ -3947,27 +4042,33 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.10" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases 0.2.1", "libc", "once_cell", "socket2", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "radix_trie" version = "0.2.1" @@ -3991,13 +4092,12 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", - "zerocopy 0.8.23", ] [[package]] @@ -4026,7 +4126,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] @@ -4035,16 +4135,16 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.1", + "getrandom 0.3.3", ] [[package]] name = "rand_xoshiro" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +checksum = "f703f4665700daf5512dcca5f43afa6af89f09db47fb56be587f80636bda2d41" dependencies = [ - "rand_core 0.6.4", + "rand_core 0.9.3", ] [[package]] @@ -4055,11 +4155,11 @@ checksum = "474c42c904f04dfe2a595a02f71e1a0e5e92ffb5761cc9a4c02140b93b8dd504" [[package]] name = "raw-cpuid" -version = "11.5.0" +version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", ] [[package]] @@ -4075,13 +4175,39 @@ dependencies = [ "yasna", ] +[[package]] +name = "recvmsg" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175" + [[package]] name = "redox_syscall" -version = "0.5.10" +version = "0.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "ref-cast" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" +checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ - "bitflags 2.9.0", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] @@ -4101,7 +4227,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a83581f18c1a4c3a6ebd7a174bdc665f17f618d79f7edccb6a0ac67e660b319" dependencies = [ "async-trait", - "cfg-if 1.0.0", + "cfg-if 1.0.3", "log", "regex", "rusqlite", @@ -4109,7 +4235,7 @@ dependencies = [ "siphasher", "thiserror 1.0.69", "time", - "toml 0.8.20", + "toml 0.8.23", "url", "walkdir", ] @@ -4125,58 +4251,43 @@ dependencies = [ "quote", "refinery-core", "regex", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "reqwest" -version = "0.12.12" +version = "0.12.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" dependencies = [ "base64 0.22.1", "bytes", @@ -4188,16 +4299,12 @@ dependencies = [ "hyper", "hyper-rustls", "hyper-util", - "ipnet", "js-sys", "log", - "mime", - "once_cell", "percent-encoding", "pin-project-lite", "quinn", "rustls", - "rustls-pemfile", "rustls-pki-types", "serde", "serde_json", @@ -4206,24 +4313,24 @@ dependencies = [ "tokio", "tokio-rustls", "tokio-util", - "tower 0.5.2", + "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots", - "windows-registry", + "webpki-roots 1.0.2", ] [[package]] name = "retry" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9166d72162de3575f950507683fac47e30f6f2c3836b71b7fbc61aa517c9c5f4" +checksum = "a1e211f878258887b3e65dd3c8ff9f530fe109f441a117ee0cdc27f341355032" dependencies = [ - "rand 0.8.5", + "rand 0.9.2", ] [[package]] @@ -4247,13 +4354,13 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.13" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ac5d832aa16abd7d1def883a8545280c20a60f523a370aa3a9617c2b8550ee" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", - "cfg-if 1.0.0", - "getrandom 0.2.15", + "cfg-if 1.0.3", + "getrandom 0.2.16", "libc", "untrusted", "windows-sys 0.52.0", @@ -4277,12 +4384,12 @@ checksum = "28907f02c4dfd480f1dfff498f9f574fe71271f09f7e1e00fe527e20e72f5061" dependencies = [ "android-build", "block2", - "cfg-if 1.0.0", + "cfg-if 1.0.3", "gio", "jni", "log", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", "objc2-local-authentication", "polkit", "retry", @@ -4306,7 +4413,7 @@ version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -4316,9 +4423,9 @@ dependencies = [ [[package]] name = "rust-embed" -version = "8.6.0" +version = "8.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b3aba5104622db5c9fc61098de54708feb732e7763d7faa2fa625899f00bf6f" +checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a" dependencies = [ "rust-embed-impl", "rust-embed-utils", @@ -4327,22 +4434,22 @@ dependencies = [ [[package]] name = "rust-embed-impl" -version = "8.6.0" +version = "8.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f198c73be048d2c5aa8e12f7960ad08443e56fd39cc26336719fdb4ea0ebaae" +checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c" dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.99", + "syn 2.0.106", "walkdir", ] [[package]] name = "rust-embed-utils" -version = "8.6.0" +version = "8.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a2fcdc9f40c8dc2922842ca9add611ad19f332227fc651d015881ad1552bd9a" +checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594" dependencies = [ "sha2", "walkdir", @@ -4350,9 +4457,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" @@ -4390,7 +4497,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys 0.4.15", @@ -4399,22 +4506,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dade4812df5c384711475be5fcd8c162555352945401aed22a35bffeab61f657" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "errno", "libc", - "linux-raw-sys 0.9.2", - "windows-sys 0.59.0", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.0", ] [[package]] name = "rustls" -version = "0.23.23" +version = "0.23.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" +checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" dependencies = [ "once_cell", "ring", @@ -4435,18 +4542,19 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ "web-time", + "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.102.8" +version = "0.103.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "8572f3c2cb9934231157b45499fc41e1f58c589fdfb81a844ba873265e80f8eb" dependencies = [ "ring", "rustls-pki-types", @@ -4455,9 +4563,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rustyline" @@ -4465,8 +4573,8 @@ version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7803e8936da37efd9b6d4478277f4b2b9bb5cdb37a113e8d63222e58da647e63" dependencies = [ - "bitflags 2.9.0", - "cfg-if 1.0.0", + "bitflags 2.9.4", + "cfg-if 1.0.3", "clipboard-win", "fd-lock", "home", @@ -4483,13 +4591,13 @@ dependencies = [ [[package]] name = "rustyline-derive" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327e9d075f6df7e25fbf594f1be7ef55cf0d567a6cb5112eeccbbd51ceb48e0d" +checksum = "5d66de233f908aebf9cc30ac75ef9103185b4b715c6f2fb7a626aa5e5ede53ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -4525,6 +4633,30 @@ dependencies = [ "regex", ] +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -4572,7 +4704,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -4581,12 +4713,12 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.2.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +checksum = "cc198e42d9b7510827939c9a15f5062a0c913f3371d765977e586d2fe6c16f4a" dependencies = [ - "bitflags 2.9.0", - "core-foundation 0.10.0", + "bitflags 2.9.4", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -4594,9 +4726,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -4608,30 +4740,32 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d" dependencies = [ - "self_cell 1.1.0", + "self_cell 1.2.0", ] [[package]] name = "self_cell" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2fdfc24bc566f839a2da4c4295b82db7d25a24253867d5c64355abb5799bdbe" +checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" dependencies = [ "serde", + "serde_core", ] [[package]] name = "serde" -version = "1.0.218" +version = "1.0.226" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" +checksum = "0dca6411025b24b60bfa7ec1fe1f8e710ac09782dca409ee8237ba74b51295fd" dependencies = [ + "serde_core", "serde_derive", ] @@ -4647,27 +4781,37 @@ dependencies = [ "xml-rs", ] +[[package]] +name = "serde_core" +version = "1.0.226" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba2ba63999edb9dac981fb34b3e5c0d111a69b0924e253ed29d83f7c99e966a4" +dependencies = [ + "serde_derive", +] + [[package]] name = "serde_derive" -version = "1.0.218" +version = "1.0.226" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" +checksum = "8db53ae22f34573731bafa1db20f04027b2d25e02d8205921b569171699cdb33" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] @@ -4683,7 +4827,7 @@ dependencies = [ "serde_json", "serde_json_path_core", "serde_json_path_macros", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -4695,7 +4839,7 @@ dependencies = [ "inventory", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -4717,24 +4861,25 @@ checksum = "aafbefbe175fa9bf03ca83ef89beecff7d2a95aaacd5732325b90ac8c3bd7b90" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] name = "serde_path_to_error" -version = "0.1.17" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ "itoa", "serde", + "serde_core", ] [[package]] name = "serde_spanned" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ "serde", ] @@ -4753,15 +4898,17 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.12.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +checksum = "c522100790450cf78eeac1507263d0a350d4d5b30df0c8e1fe051a10c22b376e" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.7.1", + "indexmap 2.11.4", + "schemars 0.9.0", + "schemars 1.0.4", "serde", "serde_derive", "serde_json", @@ -4771,14 +4918,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.12.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" +checksum = "327ada00f7d64abaac1e55a6911e90cf665aa051b9a561c7006c157f4633135e" dependencies = [ - "darling 0.20.10", + "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -4787,18 +4934,18 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "cpufeatures", "digest", ] [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "cpufeatures", "digest", ] @@ -4836,9 +4983,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" dependencies = [ "libc", "signal-hook-registry", @@ -4857,9 +5004,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -4894,18 +5041,15 @@ checksum = "c1e9a774a6c28142ac54bb25d25562e6bcf957493a184f15ad4eebccb23e410a" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "smallvec" -version = "1.14.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "smawk" @@ -4931,17 +5075,17 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.8" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "sos" -version = "0.17.0" +version = "0.17.3" dependencies = [ "arboard", "async-recursion", @@ -4973,6 +5117,7 @@ dependencies = [ "sos-core", "sos-database", "sos-database-upgrader", + "sos-debug-snapshot", "sos-external-files", "sos-integrity", "sos-login", @@ -4990,13 +5135,13 @@ dependencies = [ "sos-vfs", "tempfile", "terminal-banner", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tokio-rustls", - "toml 0.8.20", + "toml 0.8.23", "tracing", "tracing-subscriber", - "unicode-width 0.2.0", + "unicode-width 0.2.1", "url", "vcard4", "zxcvbn", @@ -5004,13 +5149,13 @@ dependencies = [ [[package]] name = "sos-account" -version = "0.17.3" +version = "0.17.6" dependencies = [ "async-trait", "futures", "futures-util", "hex", - "indexmap 2.7.1", + "indexmap 2.11.4", "rustc_version", "secrecy", "serde", @@ -5033,7 +5178,7 @@ dependencies = [ "sos-sync", "sos-vault", "sos-vfs", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", "time-tz", "tokio", @@ -5046,13 +5191,13 @@ dependencies = [ [[package]] name = "sos-archive" -version = "0.17.0" +version = "0.17.2" dependencies = [ "async_zip", "sanitize-filename", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", "tokio", "tokio-util", @@ -5061,23 +5206,23 @@ dependencies = [ [[package]] name = "sos-artifact" -version = "0.8.9" +version = "0.8.10" dependencies = [ "hex", "semver", "serde", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", "url", ] [[package]] name = "sos-audit" -version = "0.17.0" +version = "0.17.1" dependencies = [ "async-trait", "binary-stream", - "bitflags 2.9.0", + "bitflags 2.9.4", "futures", "rustc_version", "serde", @@ -5088,12 +5233,12 @@ dependencies = [ [[package]] name = "sos-backend" -version = "0.17.1" +version = "0.17.2" dependencies = [ "async-trait", "binary-stream", "futures", - "indexmap 2.7.1", + "indexmap 2.11.4", "rustc_version", "serde", "sos-archive", @@ -5108,16 +5253,31 @@ dependencies = [ "sos-vault", "sos-vfs", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tokio-util", "tracing", "urn", ] +[[package]] +name = "sos-changes" +version = "0.17.2" +dependencies = [ + "futures", + "interprocess", + "rustc_version", + "serde_json", + "sos-core", + "thiserror 2.0.16", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "sos-cli-helpers" -version = "0.1.1" +version = "0.1.3" dependencies = [ "clap", "colored", @@ -5126,14 +5286,14 @@ dependencies = [ [[package]] name = "sos-client-storage" -version = "0.17.1" +version = "0.17.2" dependencies = [ "age", "async-trait", "binary-stream", "futures", "hex", - "indexmap 2.7.1", + "indexmap 2.11.4", "parking_lot", "rustc_version", "secrecy", @@ -5153,7 +5313,7 @@ dependencies = [ "sos-sync", "sos-vault", "sos-vfs", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tokio-util", "tracing", @@ -5174,7 +5334,7 @@ dependencies = [ [[package]] name = "sos-core" -version = "0.17.1" +version = "0.17.3" dependencies = [ "aes-gcm", "age", @@ -5182,7 +5342,7 @@ dependencies = [ "async-trait", "balloon-hash", "binary-stream", - "bitflags 2.9.0", + "bitflags 2.9.4", "bs58", "chacha20poly1305", "etcetera", @@ -5199,7 +5359,7 @@ dependencies = [ "serde_with", "sha2", "sos-vfs", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", "time-tz", "tokio", @@ -5210,13 +5370,13 @@ dependencies = [ [[package]] name = "sos-database" -version = "0.17.0" +version = "0.17.1" dependencies = [ "async-sqlite", "async-trait", "binary-stream", "futures", - "indexmap 2.7.1", + "indexmap 2.11.4", "refinery", "rustc_version", "secrecy", @@ -5233,7 +5393,7 @@ dependencies = [ "sos-vfs", "sql_query_builder", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tokio-stream", "tracing", @@ -5244,12 +5404,12 @@ dependencies = [ [[package]] name = "sos-database-upgrader" -version = "0.17.1" +version = "0.17.2" dependencies = [ "async-trait", "binary-stream", "futures", - "indexmap 2.7.1", + "indexmap 2.11.4", "rustc_version", "secrecy", "serde", @@ -5269,7 +5429,7 @@ dependencies = [ "sos-vault", "sos-vfs", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tokio-stream", "tracing", @@ -5277,25 +5437,42 @@ dependencies = [ "uuid", ] +[[package]] +name = "sos-debug-snapshot" +version = "0.17.1" +dependencies = [ + "futures", + "serde_json", + "sos-archive", + "sos-backend", + "sos-client-storage", + "sos-logs", + "sos-sync", + "sos-vfs", + "thiserror 2.0.16", +] + [[package]] name = "sos-extension-service" -version = "0.17.0" +version = "0.17.1" dependencies = [ "anyhow", "sos-account", "sos-backend", + "sos-changes", "sos-core", "sos-ipc", "sos-net", "tokio", + "tracing", "xclipboard", ] [[package]] name = "sos-external-files" -version = "0.17.0" +version = "0.17.1" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.11.4", "rustc_version", "sos-core", "sos-vault", @@ -5305,7 +5482,7 @@ dependencies = [ [[package]] name = "sos-filesystem" -version = "0.17.0" +version = "0.17.1" dependencies = [ "async-fd-lock", "async-trait", @@ -5313,7 +5490,7 @@ dependencies = [ "futures", "futures-util", "hex", - "indexmap 2.7.1", + "indexmap 2.11.4", "parking_lot", "rustc_version", "serde", @@ -5328,7 +5505,7 @@ dependencies = [ "sos-system-messages", "sos-vault", "sos-vfs", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", "tokio", "tokio-stream", @@ -5350,7 +5527,7 @@ dependencies = [ "futures", "hex", "http", - "indexmap 2.7.1", + "indexmap 2.11.4", "maplit2", "parking_lot", "pretty_assertions", @@ -5360,6 +5537,7 @@ dependencies = [ "sos-account", "sos-audit", "sos-backend", + "sos-changes", "sos-client-storage", "sos-core", "sos-database", @@ -5387,7 +5565,7 @@ dependencies = [ "sos-vfs", "sos-web", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tracing", "tracing-subscriber", @@ -5397,12 +5575,12 @@ dependencies = [ [[package]] name = "sos-integrity" -version = "0.17.1" +version = "0.17.2" dependencies = [ "binary-stream", "futures", "hex", - "indexmap 2.7.1", + "indexmap 2.11.4", "rustc_version", "sha2", "sos-backend", @@ -5411,7 +5589,7 @@ dependencies = [ "sos-filesystem", "sos-vault", "sos-vfs", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tokio-stream", "tokio-util", @@ -5421,7 +5599,7 @@ dependencies = [ [[package]] name = "sos-ipc" -version = "0.17.0" +version = "0.17.1" dependencies = [ "async-trait", "base64 0.22.1", @@ -5443,6 +5621,7 @@ dependencies = [ "serde_with", "sos-account", "sos-backend", + "sos-changes", "sos-client-storage", "sos-core", "sos-database", @@ -5454,10 +5633,10 @@ dependencies = [ "sos-search", "sos-sync", "sos-vault", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tokio-util", - "tower 0.5.2", + "tower", "tracing", "typeshare", "url", @@ -5466,7 +5645,7 @@ dependencies = [ [[package]] name = "sos-login" -version = "0.17.2" +version = "0.17.3" dependencies = [ "age", "async-trait", @@ -5482,7 +5661,7 @@ dependencies = [ "sos-signer", "sos-vault", "sos-vfs", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tracing", "typeshare", @@ -5491,12 +5670,12 @@ dependencies = [ [[package]] name = "sos-logs" -version = "0.17.0" +version = "0.17.2" dependencies = [ "rev_buf_reader", "rustc_version", "sos-core", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", "tracing-appender", "tracing-subscriber", @@ -5504,7 +5683,7 @@ dependencies = [ [[package]] name = "sos-migrate" -version = "0.17.0" +version = "0.17.1" dependencies = [ "async-trait", "async_zip", @@ -5515,7 +5694,7 @@ dependencies = [ "keychain_parser", "rustc_version", "secrecy", - "security-framework 3.2.0", + "security-framework 3.5.0", "serde", "serde_json", "sos-backend", @@ -5524,7 +5703,7 @@ dependencies = [ "sos-search", "sos-vault", "sos-vfs", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", "tokio", "tokio-util", @@ -5535,7 +5714,7 @@ dependencies = [ [[package]] name = "sos-net" -version = "0.17.3" +version = "0.17.5" dependencies = [ "async-recursion", "async-trait", @@ -5543,7 +5722,7 @@ dependencies = [ "futures", "hex", "http", - "indexmap 2.7.1", + "indexmap 2.11.4", "prost", "rand 0.8.5", "rs_merkle", @@ -5574,7 +5753,7 @@ dependencies = [ "sos-sync", "sos-vault", "sos-vfs", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tokio-util", "tracing", @@ -5585,46 +5764,46 @@ dependencies = [ [[package]] name = "sos-password" -version = "0.17.0" +version = "0.17.1" dependencies = [ "chbs", "rand 0.8.5", "rustc_version", "secrecy", "sos-core", - "thiserror 2.0.12", + "thiserror 2.0.16", "zxcvbn", ] [[package]] name = "sos-platform-authenticator" -version = "0.17.0" +version = "0.17.1" dependencies = [ "http", "keyring", "robius-authentication", "rustc_version", "secrecy", - "security-framework 3.2.0", - "thiserror 2.0.12", + "security-framework 3.5.0", + "thiserror 2.0.16", "tracing", ] [[package]] name = "sos-preferences" -version = "0.17.0" +version = "0.17.1" dependencies = [ "async-trait", "rustc_version", "serde", "sos-core", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", ] [[package]] name = "sos-protocol" -version = "0.17.0" +version = "0.17.1" dependencies = [ "async-trait", "binary-stream", @@ -5633,7 +5812,7 @@ dependencies = [ "futures", "hex", "http", - "indexmap 2.7.1", + "indexmap 2.11.4", "prost", "prost-build", "protoc-bin-vendored", @@ -5649,7 +5828,7 @@ dependencies = [ "sos-signer", "sos-sync", "sos-vfs", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", "tokio", "tokio-stream", @@ -5663,10 +5842,10 @@ dependencies = [ [[package]] name = "sos-reducers" -version = "0.17.0" +version = "0.17.1" dependencies = [ "futures", - "indexmap 2.7.1", + "indexmap 2.11.4", "rustc_version", "sos-core", "sos-vault", @@ -5675,10 +5854,10 @@ dependencies = [ [[package]] name = "sos-remote-sync" -version = "0.17.0" +version = "0.17.1" dependencies = [ "async-trait", - "indexmap 2.7.1", + "indexmap 2.11.4", "rustc_version", "sos-account", "sos-backend", @@ -5686,14 +5865,14 @@ dependencies = [ "sos-protocol", "sos-sync", "sos-vfs", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tracing", ] [[package]] name = "sos-sdk" -version = "0.17.1" +version = "0.17.2" dependencies = [ "rustc_version", "sos-core", @@ -5706,7 +5885,7 @@ dependencies = [ [[package]] name = "sos-search" -version = "0.17.1" +version = "0.17.2" dependencies = [ "probly-search", "rustc_version", @@ -5714,7 +5893,7 @@ dependencies = [ "sos-backend", "sos-core", "sos-vault", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tracing", "typeshare", @@ -5725,7 +5904,7 @@ dependencies = [ [[package]] name = "sos-security-report" -version = "0.17.1" +version = "0.17.2" dependencies = [ "hex", "secrecy", @@ -5742,7 +5921,7 @@ dependencies = [ [[package]] name = "sos-server" -version = "0.17.0" +version = "0.17.2" dependencies = [ "async-trait", "axum", @@ -5756,7 +5935,7 @@ dependencies = [ "futures", "hex", "http", - "indexmap 2.7.1", + "indexmap 2.11.4", "k256", "rustc_version", "rustls", @@ -5776,13 +5955,13 @@ dependencies = [ "sos-signer", "sos-sync", "sos-vfs", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tokio-rustls", "tokio-rustls-acme", "tokio-stream", "tokio-util", - "toml 0.8.20", + "toml 0.8.23", "tower-http", "tracing", "tracing-subscriber", @@ -5794,12 +5973,12 @@ dependencies = [ [[package]] name = "sos-server-storage" -version = "0.17.1" +version = "0.17.4" dependencies = [ "async-trait", "binary-stream", "futures", - "indexmap 2.7.1", + "indexmap 2.11.4", "rustc_version", "secrecy", "serde", @@ -5816,7 +5995,7 @@ dependencies = [ "sos-sync", "sos-vault", "sos-vfs", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tracing", "uuid", @@ -5824,7 +6003,7 @@ dependencies = [ [[package]] name = "sos-signer" -version = "0.17.0" +version = "0.17.2" dependencies = [ "async-trait", "binary-stream", @@ -5838,36 +6017,36 @@ dependencies = [ "sha2", "sha3", "sos-core", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", ] [[package]] name = "sos-sync" -version = "0.17.0" +version = "0.17.3" dependencies = [ "async-trait", - "indexmap 2.7.1", + "indexmap 2.11.4", "rustc_version", "serde", "sos-backend", "sos-core", "sos-reducers", "sos-vault", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tracing", ] [[package]] name = "sos-system-messages" -version = "0.17.0" +version = "0.17.3" dependencies = [ "async-trait", "rustc_version", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", "tokio", "tracing", @@ -5933,7 +6112,7 @@ dependencies = [ "bytes", "futures", "hex", - "indexmap 2.7.1", + "indexmap 2.11.4", "k256", "keychain_parser", "pem", @@ -5977,16 +6156,16 @@ dependencies = [ [[package]] name = "sos-vault" -version = "0.17.1" +version = "0.17.4" dependencies = [ "age", "async-trait", "binary-stream", - "bitflags 2.9.0", + "bitflags 2.9.4", "ed25519-dalek", "futures", "hex", - "indexmap 2.7.1", + "indexmap 2.11.4", "pem", "rustc_version", "secrecy", @@ -5996,7 +6175,7 @@ dependencies = [ "sos-core", "sos-signer", "sos-vfs", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "totp-rs", "tracing", @@ -6013,7 +6192,7 @@ version = "0.3.2" dependencies = [ "anyhow", "async-recursion", - "bitflags 2.9.0", + "bitflags 2.9.4", "futures", "parking_lot", "tokio", @@ -6021,10 +6200,10 @@ dependencies = [ [[package]] name = "sos-web" -version = "0.17.0" +version = "0.17.2" dependencies = [ "async-trait", - "indexmap 2.7.1", + "indexmap 2.11.4", "rustc_version", "secrecy", "sos-account", @@ -6043,7 +6222,7 @@ dependencies = [ "sos-sync", "sos-vault", "sos-vfs", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tracing", ] @@ -6069,9 +6248,9 @@ dependencies = [ [[package]] name = "sql_query_builder" -version = "2.4.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "635f6bb07a64bf4a9a55251b965fd3c7998ecb56f2aaa59f3a6abca6f3f07974" +checksum = "2651412ae7213fc4eb36349c204614c0aee7d7cef23328e10101413781b4b200" [[package]] name = "stable_deref_trait" @@ -6116,9 +6295,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.99" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02e925281e18ffd9d640e234264753c43edc62d64b2d4cf898f1bc5e75f3fc2" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -6136,13 +6315,13 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -6154,7 +6333,7 @@ dependencies = [ "cfg-expr", "heck 0.5.0", "pkg-config", - "toml 0.8.20", + "toml 0.8.23", "version-compare", ] @@ -6166,16 +6345,15 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.18.0" +version = "3.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c317e0a526ee6120d8dabad239c8dadca62b24b6f168914bbbc8e2fb1f0e567" +checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" dependencies = [ - "cfg-if 1.0.0", "fastrand", - "getrandom 0.3.1", + "getrandom 0.3.3", "once_cell", - "rustix 1.0.1", - "windows-sys 0.59.0", + "rustix 1.1.2", + "windows-sys 0.61.0", ] [[package]] @@ -6191,12 +6369,12 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.4.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5352447f921fda68cf61b4101566c0bdb5104eff6804d0678e5227580ab6a4e9" +checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" dependencies = [ - "rustix 0.38.44", - "windows-sys 0.59.0", + "rustix 1.1.2", + "windows-sys 0.60.2", ] [[package]] @@ -6208,7 +6386,7 @@ dependencies = [ "smawk", "terminal_size", "unicode-linebreak", - "unicode-width 0.2.0", + "unicode-width 0.2.1", ] [[package]] @@ -6222,11 +6400,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.16", ] [[package]] @@ -6237,35 +6415,34 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ - "cfg-if 1.0.0", - "once_cell", + "cfg-if 1.0.3", ] [[package]] name = "time" -version = "0.3.39" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad298b01a40a23aac4580b67e3dbedb7cc8402f3592d7f49469de2ea4aecdd8" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", @@ -6281,15 +6458,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765c97a5b985b7c11d7bc27fa927dc4fe6af3a6dfb021d28deb60d3bf51e76ef" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.20" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8093bc3e81c3bc5f7879de09619d06c9a5a5e45ca44dfeeb7225bae38005c5c" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -6301,7 +6478,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "733bc522e97980eb421cbf381160ff225bd14262a48a739110f6653c6258d625" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "js-sys", "parse-zoneinfo", "phf", @@ -6316,9 +6493,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", @@ -6326,9 +6503,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -6341,19 +6518,21 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.1" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", "mio", "pin-project-lite", "signal-hook-registry", + "slab", "socket2", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -6364,14 +6543,14 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "05f63835928ca123f1bef57abbcd23bb2ba0ac9ae1235f1e65bda0d06e7786bd" dependencies = [ "rustls", "tokio", @@ -6398,11 +6577,11 @@ dependencies = [ "rustls", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", "tokio", "tokio-rustls", - "webpki-roots", + "webpki-roots 0.26.11", "x509-parser", ] @@ -6430,14 +6609,14 @@ dependencies = [ "tokio", "tokio-rustls", "tungstenite", - "webpki-roots", + "webpki-roots 0.26.11", ] [[package]] name = "tokio-util" -version = "0.7.13" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", @@ -6458,21 +6637,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.20" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.24", + "toml_edit 0.22.27", ] [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ "serde", ] @@ -6483,29 +6662,36 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.11.4", "toml_datetime", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.22.24" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.11.4", "serde", "serde_spanned", "toml_datetime", - "winnow 0.7.3", + "toml_write", + "winnow 0.7.13", ] +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + [[package]] name = "totp-rs" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b2f27dad992486c26b4e7455f38aa487e838d6d61b57e72906ee2b8c287a90" +checksum = "f124352108f58ef88299e909f6e9470f1cdc8d2a1397963901b4a6366206bf72" dependencies = [ "base32", "constant_time_eq", @@ -6519,21 +6705,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tower-layer", - "tower-service", - "tracing", -] - [[package]] name = "tower" version = "0.5.2" @@ -6552,15 +6723,18 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.2" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "bytes", + "futures-util", "http", "http-body", + "iri-string", "pin-project-lite", + "tower", "tower-layer", "tower-service", "tracing", @@ -6604,20 +6778,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", "valuable", @@ -6646,14 +6820,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "serde", "serde_json", "sharded-slab", @@ -6682,28 +6856,28 @@ dependencies = [ "http", "httparse", "log", - "rand 0.9.0", + "rand 0.9.2", "rustls", "rustls-pki-types", "sha1", - "thiserror 2.0.12", + "thiserror 2.0.16", "utf-8", ] [[package]] name = "type-map" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" +checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" dependencies = [ - "rustc-hash 1.1.0", + "rustc-hash 2.1.1", ] [[package]] name = "typed-generational-arena" -version = "0.2.6" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3478ec5cc6caaa9ed86791e8970e320841c3362a7a14b81a5c5c3f9e254b8a44" +checksum = "23107afb81ff70f7588dca56c1eeab4dad8b3a141b0e85d2a61fb575d1f12d62" dependencies = [ "cfg-if 0.1.10", "nonzero_ext", @@ -6735,23 +6909,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a615d6c2764852a2e88a4f16e9ce1ea49bb776b5872956309e170d63a042a34f" dependencies = [ "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] name = "unic-langid" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dd9d1e72a73b25e07123a80776aae3e7b0ec461ef94f9151eed6ec88005a44" +checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" dependencies = [ "unic-langid-impl", ] [[package]] name = "unic-langid-impl" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5422c1f65949306c99240b81de9f3f15929f5a8bfe05bb44b034cc8bf593e5" +checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" dependencies = [ "serde", "tinystr", @@ -6765,9 +6939,9 @@ checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-linebreak" @@ -6789,9 +6963,9 @@ checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" [[package]] name = "universal-hash" @@ -6821,9 +6995,9 @@ dependencies = [ [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -6852,12 +7026,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -6872,11 +7040,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "utoipa" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435c6f69ef38c9017b4b4eea965dfb91e71e53d869e896db40d1cf2441dd75c0" +checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.11.4", "serde", "serde_json", "utoipa-gen", @@ -6884,13 +7052,13 @@ dependencies = [ [[package]] name = "utoipa-gen" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77d306bc75294fd52f3e99b13ece67c02c1a2789190a6f31d32f736624326f7" +checksum = "6d79d08d92ab8af4c5e8a6da20c47ae3f61a0f1dabc1997cdf2d082b757ca08b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", "uuid", ] @@ -6908,12 +7076,14 @@ dependencies = [ [[package]] name = "uuid" -version = "1.15.1" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f540e3240398cce6128b64ba83fdbdd86129c16a3aa1a3a252efd66eb3d587" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.1", + "getrandom 0.3.3", + "js-sys", "serde", + "wasm-bindgen", ] [[package]] @@ -6924,18 +7094,18 @@ checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "vcard4" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f37cbf15f76a5cb6bf6a4d7d6004471cfe0974eac80605fee1cb8c837c9df5d" +checksum = "a7529ce5655c3d5da5e738bb887ae158ed70009baa3591fc58b12358d0adb0bd" dependencies = [ "aho-corasick", "base64 0.22.1", "cfg_eval", "language-tags", - "logos 0.15.0", + "logos 0.15.1", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.16", "time", "unicode-segmentation", "uriparse", @@ -6981,52 +7151,62 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.13.3+wasi-0.2.2" +version = "0.14.7+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "ab10a69fbd0a177f5f649ad4d8d3305499c42bab9aef2f7ff592d0ec8f833819" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "0bb702423545a6007bbc368fde243ba47ca275e549c8a28617f56f6ba53b1d1c" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "a0b221ff421256839509adbb55998214a70d829d3a28c69b4a6672e9d2a42f67" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 1.0.3", "js-sys", "once_cell", "wasm-bindgen", @@ -7035,9 +7215,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "fc65f4f411d91494355917b605e1480033152658d71f722a90647f56a70c88a0" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7045,22 +7225,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "ffc003a991398a8ee604a401e194b6b3a39677b3173d6e74495eb51b82e99a32" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "293c37f4efa430ca14db3721dfbe48d8c33308096bd44d80ebaa775ab71ba1cf" dependencies = [ "unicode-ident", ] @@ -7080,9 +7260,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "fbe734895e869dc429d78c4b433f8d17d95f8d05317440b4fad5ab2d33e596dc" dependencies = [ "js-sys", "wasm-bindgen", @@ -7100,13 +7280,28 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.8" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.2", +] + +[[package]] +name = "webpki-roots" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" +checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" dependencies = [ "rustls-pki-types", ] +[[package]] +name = "widestring" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" + [[package]] name = "winapi" version = "0.3.9" @@ -7125,11 +7320,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.0", ] [[package]] @@ -7159,23 +7354,27 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.52.0" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "4698e52ed2d08f8658ab0c39512a7c00ee5fe2688c65f8c0a4f06750d729f2a6" dependencies = [ + "windows-implement 0.56.0", + "windows-interface 0.56.0", + "windows-result 0.1.2", "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.56.0" +version = "0.62.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4698e52ed2d08f8658ab0c39512a7c00ee5fe2688c65f8c0a4f06750d729f2a6" +checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" dependencies = [ - "windows-implement", - "windows-interface", - "windows-result 0.1.2", - "windows-targets 0.52.6", + "windows-implement 0.60.0", + "windows-interface 0.59.1", + "windows-link 0.2.0", + "windows-result 0.4.0", + "windows-strings", ] [[package]] @@ -7186,7 +7385,18 @@ checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] @@ -7197,25 +7407,31 @@ checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] name = "windows-link" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] -name = "windows-registry" +name = "windows-link" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" -dependencies = [ - "windows-result 0.2.0", - "windows-strings", - "windows-targets 0.52.6", -] +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" [[package]] name = "windows-result" @@ -7228,21 +7444,20 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" dependencies = [ - "windows-targets 0.52.6", + "windows-link 0.2.0", ] [[package]] name = "windows-strings" -version = "0.1.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", + "windows-link 0.2.0", ] [[package]] @@ -7294,6 +7509,24 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.3", +] + +[[package]] +name = "windows-sys" +version = "0.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +dependencies = [ + "windows-link 0.2.0", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -7333,13 +7566,30 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.53.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +dependencies = [ + "windows-link 0.1.3", + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -7358,6 +7608,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.32.0" @@ -7382,6 +7638,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.32.0" @@ -7406,12 +7668,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.32.0" @@ -7436,6 +7710,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.32.0" @@ -7460,6 +7740,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -7478,6 +7764,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.32.0" @@ -7502,6 +7794,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + [[package]] name = "winnow" version = "0.5.40" @@ -7513,50 +7811,41 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.3" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] [[package]] -name = "wit-bindgen-rt" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" -dependencies = [ - "bitflags 2.9.0", -] - -[[package]] -name = "write16" -version = "1.0.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "x11rb" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" dependencies = [ "gethostname", - "rustix 0.38.44", + "rustix 1.1.2", "x11rb-protocol", ] [[package]] name = "x11rb-protocol" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" [[package]] name = "x25519-dalek" @@ -7589,11 +7878,11 @@ dependencies = [ [[package]] name = "xclipboard" -version = "0.16.1" +version = "0.16.3" dependencies = [ "arboard", "rustc_version", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tracing", "zeroize", @@ -7601,9 +7890,9 @@ dependencies = [ [[package]] name = "xml-rs" -version = "0.8.25" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4" +checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" [[package]] name = "yansi" @@ -7622,9 +7911,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -7634,55 +7923,34 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", "synstructure", ] [[package]] name = "zerocopy" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" -dependencies = [ - "byteorder", - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6" -dependencies = [ - "zerocopy-derive 0.8.23", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.99", + "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.23" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] @@ -7702,7 +7970,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", "synstructure", ] @@ -7723,14 +7991,25 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", +] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", ] [[package]] name = "zerovec" -version = "0.10.4" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -7739,13 +8018,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.99", + "syn 2.0.106", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 5db4e10f15..c65de384f7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,11 +6,13 @@ members = [ "crates/artifact", "crates/audit", "crates/backend", + "crates/changes", "crates/cli_helpers", "crates/clipboard", "crates/core", "crates/database", "crates/database_upgrader", + "crates/debug_snapshot", "crates/extension_service", "crates/external_files", "crates/filesystem", @@ -45,7 +47,7 @@ members = [ "tests/command_line", "tests/integration", "tests/unit", - "tests/utils", + "tests/utils", ] [workspace.dependencies] @@ -56,9 +58,11 @@ sos-archive = { version = "0.17", path = "crates/archive" } sos-backend = { version = "0.17", path = "crates/backend" } sos-cli-helpers = { version = "0.1", path = "crates/cli_helpers" } sos-core = { version = "0.17", path = "crates/core" } +sos-changes = { version = "0.17", path = "crates/changes" } sos-database = { version = "0.17", path = "crates/database" } sos-database-upgrader = { version = "0.17", path = "crates/database_upgrader" } -sos-external-files = { version = "0.17.0", path = "crates/external_files" } +sos-debug-snapshot = { version = "0.17", path = "crates/debug_snapshot" } +sos-external-files = { version = "0.17.1", path = "crates/external_files" } sos-filesystem = { version = "0.17", path = "crates/filesystem" } sos-integrity = { version = "0.17", path = "crates/integrity" } sos-ipc = { version = "0.17", path = "crates/ipc" } @@ -136,6 +140,9 @@ hex = { version = "0.4", features = ["serde"] } k256 = { version = "0.13.1", features = ["ecdsa"] } ed25519-dalek = { version = "2.1.1", features = ["rand_core"] } +# ipc changes +interprocess = "2" + # matches the version in k256 sha1 = "0.10.6" sha2 = "0.10.6" diff --git a/Makefile.toml b/Makefile.toml index 68f3ad5d7b..f97224bfb0 100644 --- a/Makefile.toml +++ b/Makefile.toml @@ -110,6 +110,7 @@ mkdir -p target/demo ''' [tasks.test-command-line] +script_runner = "@shell" script = ''' export SOS_TEST=1 export PATH="../../target/debug:$PATH" @@ -136,17 +137,20 @@ command = "cargo" args = ["build", "-p", "sos-integration-tests"] [tasks.clean-tests] +script_runner = "@shell" script = ''' rm -rf target/integration-test ''' [tasks.test] +script_runner = "@shell" script = ''' cargo nextest run -p sos-integration-tests -p sos-unit-tests ''' dependencies = ["clean-tests", "build-test"] [tasks.test-all] +script_runner = "@shell" script = ''' cargo nextest run \ -p sos-integration-tests -p sos-unit-tests @@ -160,6 +164,7 @@ SOS_TEST_CLIENT_DB=1 SOS_TEST_SERVER_DB=1 cargo nextest run \ dependencies = ["clean-tests", "build-test"] [tasks.ci] +script_runner = "@shell" script = ''' cargo nextest run --profile ci \ -p sos-integration-tests -p sos-unit-tests @@ -173,6 +178,7 @@ SOS_TEST_CLIENT_DB=1 SOS_TEST_SERVER_DB=1 cargo nextest run --profile ci \ dependencies = ["clean-tests", "build-test"] [tasks.cover] +script_runner = "@shell" script = ''' cargo llvm-cov clean --workspace cargo llvm-cov nextest \ diff --git a/clippy.toml b/clippy.toml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/crates/account/Cargo.toml b/crates/account/Cargo.toml index b455064155..b743110c99 100644 --- a/crates/account/Cargo.toml +++ b/crates/account/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-account" -version = "0.17.3" +version = "0.17.6" edition = "2021" description = "Local accounts for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/account/src/account_switcher.rs b/crates/account/src/account_switcher.rs index a54dfead9d..9e754232a8 100644 --- a/crates/account/src/account_switcher.rs +++ b/crates/account/src/account_switcher.rs @@ -1,10 +1,10 @@ use crate::{Account, Error, LocalAccount, Result}; +use sos_backend::BackendTarget; use sos_core::{AccountId, Paths}; use sos_login::PublicIdentity; -use sos_vault::list_accounts; use std::pin::Pin; +use std::sync::Arc; use std::{collections::HashMap, future::Future}; -use std::{path::PathBuf, sync::Arc}; #[cfg(feature = "search")] use sos_search::{ArchiveFilter, Document, DocumentView, QueryFilter}; @@ -101,7 +101,7 @@ where pub async fn load_accounts( &mut self, builder: B, - data_dir: Option<&PathBuf>, + target: BackendTarget, ) -> Result<()> where B: Fn( @@ -109,24 +109,11 @@ where ) -> Pin>>>, { - Paths::scaffold(data_dir).await?; - - let paths = if let Some(data_dir) = data_dir { - Paths::new_client(data_dir) - } else { - Paths::new_client(Paths::data_dir()?) - }; - - let identities = list_accounts(Some(&paths)).await?; - + let identities = target.list_accounts().await?; for identity in identities { tracing::info!( account_id = %identity.account_id(), "add_account"); let account = builder(identity).await.unwrap(); - - let paths = account.paths(); - // tracing::info!(paths = ?paths); - paths.ensure().await?; self.add_account(account); } Ok(()) diff --git a/crates/account/src/builder.rs b/crates/account/src/builder.rs index ded592c1bf..ca8cff4be0 100644 --- a/crates/account/src/builder.rs +++ b/crates/account/src/builder.rs @@ -9,7 +9,7 @@ use sos_core::{ DEFAULT_CONTACTS_VAULT_NAME, }, crypto::AccessKey, - AccountId, Paths, SecretId, VaultFlags, VaultId, + AccountId, SecretId, VaultFlags, VaultId, }; use sos_login::{DelegatedAccess, FolderKeys, Identity, IdentityFolder}; use sos_vault::{ @@ -300,12 +300,6 @@ impl AccountBuilder { /// Create a new account and write the identity /// folder to backend storage. pub async fn finish(mut self) -> Result { - // TODO: remove this and always scaffold in test specs - #[cfg(debug_assertions)] - if let BackendTarget::FileSystem(paths) = &self.target { - Paths::scaffold(paths.documents_dir()).await?; - } - // Prepare the identity folder let identity_folder = IdentityFolder::new( self.target.clone(), diff --git a/crates/account/src/local_account.rs b/crates/account/src/local_account.rs index 5d549c4fac..a0cff9ec38 100644 --- a/crates/account/src/local_account.rs +++ b/crates/account/src/local_account.rs @@ -23,8 +23,8 @@ use sos_core::{ device::{DevicePublicKey, TrustedDevice}, encode, events::{ - AccountEvent, DeviceEvent, Event, EventKind, EventLog, EventRecord, - ReadEvent, WriteEvent, + changes_feed, AccountEvent, DeviceEvent, Event, EventKind, EventLog, + EventRecord, LocalChangeEvent, ReadEvent, WriteEvent, }, AccountId, AccountRef, AuthenticationError, FolderRef, Paths, SecretId, UtcDateTime, VaultCommit, VaultFlags, VaultId, @@ -188,6 +188,9 @@ impl LocalAccount { storage.create_account(&public_account).await?; tracing::debug!("new_account::created"); + changes_feed() + .send_replace(LocalChangeEvent::AccountCreated(account_id)); + Ok(Self { account_id, paths: target.paths(), @@ -941,7 +944,6 @@ impl Account for LocalAccount { // Ensure all paths before sign_in let paths = self.paths().with_account_id(account_id); - paths.ensure().await?; tracing::debug!( account_id = %account_id, @@ -1071,6 +1073,11 @@ impl Account for LocalAccount { } self.sign_out().await?; + + changes_feed().send_replace(LocalChangeEvent::AccountDeleted( + *self.account_id(), + )); + Ok(()) } @@ -1161,7 +1168,8 @@ impl Account for LocalAccount { let vault = { let event_log = self.identity_log().await?; let mut log_file = event_log.write().await; - compact_folder(identity.id(), &mut *log_file).await?; + compact_folder(self.account_id(), identity.id(), &mut *log_file) + .await?; let vault = FolderReducer::new() .reduce(&*log_file) @@ -1172,8 +1180,6 @@ impl Account for LocalAccount { vault }; - // TODO: do we need to re-import the identity vault here? - let event = { let event = AccountEvent::UpdateIdentity(encode(&vault).await?); let log = self.account_log().await?; diff --git a/crates/archive/Cargo.toml b/crates/archive/Cargo.toml index 03abd38b10..5c059f0032 100644 --- a/crates/archive/Cargo.toml +++ b/crates/archive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-archive" -version = "0.17.0" +version = "0.17.2" edition = "2021" description = "ZIP archive reader and writer for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/archive/src/writer.rs b/crates/archive/src/writer.rs index f3f10b8a0a..6cfc03b233 100644 --- a/crates/archive/src/writer.rs +++ b/crates/archive/src/writer.rs @@ -1,33 +1,25 @@ -use crate::{Result, ARCHIVE_MANIFEST}; +use crate::Result; use async_zip::{ tokio::write::ZipFileWriter, Compression, ZipDateTimeBuilder, ZipEntryBuilder, }; -use serde::Serialize; use time::OffsetDateTime; use tokio::io::AsyncWrite; use tokio_util::compat::Compat; /// Write to an archive. -pub struct Writer { +pub struct Writer { writer: ZipFileWriter, - manifest: M, } -impl Writer { - /// Create a new writer. - pub fn new(inner: W, manifest: M) -> Self { +impl Writer { + /// Create a new writer with a manifest. + pub fn new(inner: W) -> Self { Self { writer: ZipFileWriter::with_tokio(inner), - manifest, } } - /// Mutable archive manifest. - pub fn manifest_mut(&mut self) -> &mut M { - &mut self.manifest - } - /// Add a file to the archive. pub async fn add_file( &mut self, @@ -42,14 +34,6 @@ impl Writer { self.append_file_buffer(path, content).await } - /// Add the manifest and finish building the archive. - pub async fn finish(mut self) -> Result> { - let manifest = serde_json::to_vec_pretty(&self.manifest)?; - self.append_file_buffer(ARCHIVE_MANIFEST, manifest.as_slice()) - .await?; - Ok(self.writer.close().await?) - } - async fn append_file_buffer( &mut self, path: &str, @@ -60,7 +44,7 @@ impl Writer { let month: u8 = now.month().into(); let dt = ZipDateTimeBuilder::new() - .year(now.year().into()) + .year(now.year()) .month(month.into()) .day(now.day().into()) .hour(hours.into()) @@ -73,4 +57,9 @@ impl Writer { self.writer.write_entry_whole(entry, buffer).await?; Ok(()) } + + /// Finish building the archive. + pub async fn finish(self) -> Result> { + Ok(self.writer.close().await?) + } } diff --git a/crates/artifact/Cargo.toml b/crates/artifact/Cargo.toml index dbf7477cdb..c1f3b7472b 100644 --- a/crates/artifact/Cargo.toml +++ b/crates/artifact/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-artifact" -version = "0.8.9" +version = "0.8.10" edition = "2021" description = "Types for release artifact meta data" homepage = "https://saveoursecrets.com" diff --git a/crates/audit/Cargo.toml b/crates/audit/Cargo.toml index 483970994d..feec661367 100644 --- a/crates/audit/Cargo.toml +++ b/crates/audit/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-audit" -version = "0.17.0" +version = "0.17.1" edition = "2021" description = "Audit trail for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/audit/src/encoding.rs b/crates/audit/src/encoding.rs index 7d680a44be..ca67425431 100644 --- a/crates/audit/src/encoding.rs +++ b/crates/audit/src/encoding.rs @@ -7,7 +7,7 @@ use sos_core::{ encoding::{decode_uuid, encoding_error}, UtcDateTime, }; -use std::io::{Error, ErrorKind, Result}; +use std::io::{Error, Result}; use tokio::io::{AsyncRead, AsyncSeek, AsyncWrite}; #[async_trait] @@ -79,8 +79,7 @@ impl Decodable for AuditEvent { } } } else { - return Err(Error::new( - ErrorKind::Other, + return Err(Error::other( "log data flags has bad bits", )); } diff --git a/crates/audit/src/event.rs b/crates/audit/src/event.rs index 9b4be48bd9..6fb6dfa935 100644 --- a/crates/audit/src/event.rs +++ b/crates/audit/src/event.rs @@ -40,6 +40,7 @@ bitflags! { /// * 20 bytes for the public account_id. /// * 16, 32 or 64 bytes for the context data (one, two or four UUIDs). #[derive(Clone, Debug, Default, Serialize, Deserialize, Eq, PartialEq)] +#[serde(rename_all = "camelCase")] pub struct AuditEvent { /// Time the event was created. pub(crate) time: UtcDateTime, @@ -202,7 +203,7 @@ impl From<(&AccountId, &AccountEvent)> for AuditEvent { /// Associated data for an audit log record. #[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)] -#[serde(rename_all = "lowercase")] +#[serde(rename_all = "camelCase")] pub enum AuditData { /// Data for an associated vault. Vault(VaultId), diff --git a/crates/backend/Cargo.toml b/crates/backend/Cargo.toml index cef56b5011..7a1faa2ebf 100644 --- a/crates/backend/Cargo.toml +++ b/crates/backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-backend" -version = "0.17.1" +version = "0.17.2" edition = "2021" description = "Backend storage abstraction for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/backend/src/audit.rs b/crates/backend/src/audit.rs index d45e568141..103b1ad514 100644 --- a/crates/backend/src/audit.rs +++ b/crates/backend/src/audit.rs @@ -26,17 +26,17 @@ pub fn providers<'a>() -> Option<&'a AuditProviders> { pub async fn append_audit_events(events: &[AuditEvent]) -> Result<()> { #[cfg(not(debug_assertions))] { - let providers = PROVIDERS - .get() - .ok_or_else(|| Error::AuditProvidersNotConfigured)?; + let providers = + providers().ok_or_else(|| Error::AuditProvidersNotConfigured)?; for provider in providers { provider.append_audit_events(events).await?; } } + + // For test specs we don't require an audit trail #[cfg(debug_assertions)] { - let providers = PROVIDERS.get(); - if let Some(providers) = providers { + if let Some(providers) = providers() { for provider in providers { provider.append_audit_events(events).await?; } diff --git a/crates/backend/src/compact.rs b/crates/backend/src/compact.rs index b3e73cfa58..feb6004737 100644 --- a/crates/backend/src/compact.rs +++ b/crates/backend/src/compact.rs @@ -3,7 +3,7 @@ use crate::{BackendEventLog, Error, FolderEventLog, Result}; use sos_core::{ events::{ patch::{FolderDiff, Patch}, - EventLog, EventRecord, + EventLog, EventLogType, EventRecord, }, AccountId, VaultId, }; @@ -20,6 +20,7 @@ use tempfile::NamedTempFile; /// Compact a folder event log. pub async fn compact_folder( + account_id: &AccountId, folder_id: &VaultId, event_log: &mut FolderEventLog, ) -> Result<()> { @@ -38,12 +39,9 @@ pub async fn compact_folder( // Ensure the foreign key constrains exist // in the temporary database - let temp_account_id = AccountId::random(); let temp_name = "compact_temp"; - let account_row = AccountRow::new_insert( - &temp_account_id, - temp_name.to_owned(), - )?; + let account_row = + AccountRow::new_insert(account_id, temp_name.to_owned())?; let mut vault = Vault::default(); *vault.header_mut().id_mut() = *folder_id; let folder_row = FolderRow::new_insert(&vault).await?; @@ -64,7 +62,7 @@ pub async fn compact_folder( // Copy the event log using the new temporary owner let mut temp_event_log = event_log.with_new_client( client, - Some(EventLogOwner::Folder(folder_record)), + Some(EventLogOwner::Folder(*account_id, folder_record)), ); temp_event_log.apply(events.as_slice()).await?; @@ -92,8 +90,12 @@ pub async fn compact_folder( // Apply them to a temporary event log file let temp = NamedTempFile::new()?; - let mut temp_event_log = - FsFolderEventLog::::new_folder(temp.path()).await?; + let mut temp_event_log = FsFolderEventLog::::new_folder( + temp.path(), + *account_id, + EventLogType::Folder(*folder_id), + ) + .await?; temp_event_log.apply(events.as_slice()).await?; let mut records = Vec::new(); diff --git a/crates/backend/src/event_log.rs b/crates/backend/src/event_log.rs index d89566be8b..c60cf8c93f 100644 --- a/crates/backend/src/event_log.rs +++ b/crates/backend/src/event_log.rs @@ -6,7 +6,8 @@ use sos_core::{ commit::{CommitHash, CommitProof, CommitTree}, events::{ patch::{CheckedPatch, Diff, Patch}, - AccountEvent, DeviceEvent, EventLog, EventRecord, WriteEvent, + AccountEvent, DeviceEvent, EventLog, EventLogType, EventRecord, + WriteEvent, }, AccountId, VaultId, }; @@ -50,6 +51,7 @@ impl BackendEventLog { BackendTarget::FileSystem(paths) => BackendEventLog::FileSystem( FileSystemEventLog::::new_account( paths.with_account_id(account_id).account_events(), + *account_id, ) .await?, ), @@ -77,6 +79,8 @@ impl BackendEventLog { paths .with_account_id(account_id) .event_log_path(folder_id), + *account_id, + EventLogType::Folder(*folder_id), ) .await?, ), @@ -100,6 +104,8 @@ impl BackendEventLog { BackendTarget::FileSystem(paths) => BackendEventLog::FileSystem( FileSystemEventLog::::new_folder( paths.with_account_id(account_id).identity_events(), + *account_id, + EventLogType::Identity, ) .await?, ), @@ -139,6 +145,7 @@ impl BackendEventLog { BackendTarget::FileSystem(paths) => BackendEventLog::FileSystem( FileSystemEventLog::::new_device( paths.with_account_id(account_id).device_events(), + *account_id, ) .await?, ), @@ -164,6 +171,7 @@ impl BackendEventLog { BackendTarget::FileSystem(paths) => BackendEventLog::FileSystem( FileSystemEventLog::::new_file( paths.with_account_id(account_id).file_events(), + *account_id, ) .await?, ), diff --git a/crates/backend/src/folder.rs b/crates/backend/src/folder.rs index 11c3962225..97380480f5 100644 --- a/crates/backend/src/folder.rs +++ b/crates/backend/src/folder.rs @@ -4,7 +4,7 @@ use sos_core::{ commit::{CommitHash, CommitState}, crypto::AccessKey, encode, - events::{EventLog, EventRecord, ReadEvent, WriteEvent}, + events::{EventLog, EventLogType, EventRecord, ReadEvent, WriteEvent}, AccountId, VaultFlags, VaultId, }; use sos_core::{constants::EVENT_LOG_EXT, decode, VaultCommit}; @@ -43,6 +43,8 @@ impl Folder { BackendTarget::FileSystem(paths) => { Self::from_path( paths.with_account_id(account_id).vault_path(folder_id), + account_id, + EventLogType::Folder(*folder_id), ) .await } @@ -132,13 +134,21 @@ impl Folder { /// and if an event log does not exist it is created. /// /// If an event log exists the commit tree is loaded into memory. - pub async fn from_path(path: impl AsRef) -> Result { + pub async fn from_path( + path: impl AsRef, + account_id: &AccountId, + log_type: EventLogType, + ) -> Result { let mut events_path = path.as_ref().to_owned(); events_path.set_extension(EVENT_LOG_EXT); let mut event_log = - sos_filesystem::FolderEventLog::::new_folder(events_path) - .await?; + sos_filesystem::FolderEventLog::::new_folder( + events_path, + *account_id, + log_type, + ) + .await?; event_log.load_tree().await?; let needs_init = event_log.tree().root().is_none(); diff --git a/crates/backend/src/lib.rs b/crates/backend/src/lib.rs index d653ea8353..1863d2cce7 100644 --- a/crates/backend/src/lib.rs +++ b/crates/backend/src/lib.rs @@ -98,6 +98,23 @@ impl fmt::Display for BackendTarget { } } +impl fmt::Debug for BackendTarget { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", { + match self { + Self::FileSystem(paths) => format!( + "file:{}", + paths.documents_dir().to_string_lossy() + ), + Self::Database(paths, _) => format!( + "sqlite:{}", + paths.database_file().to_string_lossy() + ), + } + }) + } +} + impl BackendTarget { /// Infer and initialize a new backend target. /// @@ -168,7 +185,6 @@ impl BackendTarget { pub async fn dump_info(&self) -> Result<()> { tracing::debug!( backend_target = %self, - data_dir = %self.paths().documents_dir().display(), "backend::dump_info", ); diff --git a/crates/changes/Cargo.toml b/crates/changes/Cargo.toml new file mode 100644 index 0000000000..ace982fc59 --- /dev/null +++ b/crates/changes/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "sos-changes" +version = "0.17.2" +edition = "2021" +description = "Local socket change event producer and consumer for the Save Our Secrets SDK." +homepage = "https://saveoursecrets.com" +license = "MIT OR Apache-2.0" +repository = "https://github.com/saveoursecrets/sdk" + +[package.metadata.docs.rs] +all-features = true +rustdoc-args = ["--cfg", "docsrs"] + +[features] +changes-consumer = ["dep:interprocess", "tokio-util"] +changes-producer = ["dep:interprocess", "tokio-util"] + +[dependencies] +thiserror.workspace = true +sos-core.workspace = true +tracing.workspace = true +futures.workspace = true +tokio.workspace = true +serde_json.workspace = true +interprocess = { workspace = true, optional = true, features = ["tokio"] } +tokio-util = { workspace = true, optional = true, features = ["codec"] } + +[build-dependencies] +rustc_version.workspace = true diff --git a/crates/changes/build.rs b/crates/changes/build.rs new file mode 100644 index 0000000000..5976a1c6d5 --- /dev/null +++ b/crates/changes/build.rs @@ -0,0 +1,14 @@ +use rustc_version::{version_meta, Channel}; + +fn main() { + println!("cargo::rustc-check-cfg=cfg(CHANNEL_NIGHTLY)"); + + // Set cfg flags depending on release channel + let channel = match version_meta().unwrap().channel { + Channel::Stable => "CHANNEL_STABLE", + Channel::Beta => "CHANNEL_BETA", + Channel::Nightly => "CHANNEL_NIGHTLY", + Channel::Dev => "CHANNEL_DEV", + }; + println!("cargo:rustc-cfg={}", channel); +} diff --git a/crates/changes/src/consumer.rs b/crates/changes/src/consumer.rs new file mode 100644 index 0000000000..73d6020cbe --- /dev/null +++ b/crates/changes/src/consumer.rs @@ -0,0 +1,128 @@ +//! Consumer for change notifications on a local socket. +use crate::{Error, Result, SocketFile}; +use futures::stream::StreamExt; +use interprocess::local_socket::{ + tokio::prelude::*, GenericNamespaced, ListenerOptions, +}; +use sos_core::{events::LocalChangeEvent, Paths}; +use std::{path::PathBuf, sync::Arc}; +use tokio::{ + select, + sync::{mpsc, watch}, +}; +use tokio_util::codec::LengthDelimitedCodec; + +/// Handle to a consumer. +/// +/// Provides access to a receive channel for +/// incoming change events and can also be +/// used to cancel the listener. +pub struct ConsumerHandle { + receiver: mpsc::Receiver, + cancel_tx: watch::Sender, +} + +impl ConsumerHandle { + /// Channel for change events. + pub fn changes(&mut self) -> &mut mpsc::Receiver { + &mut self.receiver + } + + /// Stop listening for incoming events. + pub fn cancel(&self) { + self.cancel_tx.send_replace(true); + } +} + +/// Consumer socket connection for change events. +pub struct ChangeConsumer; + +impl ChangeConsumer { + /// Listen for incoming change events. + /// + /// Returns a handle that can be used to consume the + /// incoming events and stop listening. + pub fn listen(paths: Arc) -> Result { + let path = socket_file(paths)?; + tracing::trace!( + socket_file = %path.display(), + "changes::consumer::listen", + ); + let ps_name = std::process::id().to_string(); + let file = SocketFile::from(path); + let name = ps_name.to_ns_name::()?; + let opts = ListenerOptions::new().name(name); + let listener = match opts.create_tokio() { + Err(e) if e.kind() == std::io::ErrorKind::AddrInUse => { + tracing::error!( + socket_file = %file.as_ref().display(), + "changes::consumer::listen::addr_in_use", + ); + return Err(e.into()); + } + x => x?, + }; + + let (cancel_tx, mut cancel_rx) = watch::channel(false); + let (tx, rx) = mpsc::channel(32); + + // Create the marker file so producers know + // which processes to send change events to + std::fs::File::create(file.as_ref())?; + + #[allow(unreachable_code)] + tokio::task::spawn(async move { + // Keep the RAII file guard alive + let _guard = file; + loop { + select! { + _ = cancel_rx.changed() => { + if *cancel_rx.borrow_and_update() { + break; + } + } + socket = listener.accept() => { + let socket = socket?; + let tx = tx.clone(); + tokio::task::spawn(async move { + let mut reader = LengthDelimitedCodec::builder() + .native_endian() + .new_read(socket); + while let Some(Ok(buffer)) = reader.next().await { + let event: LocalChangeEvent = + serde_json::from_slice(&buffer)?; + if let Err(e) = tx.send(event).await { + tracing::warn!( + error = %e, + "changes::consumer::send_error"); + } + } + + Ok::<_, Error>(()) + }); + } + } + } + Ok::<_, Error>(()) + }); + Ok(ConsumerHandle { + receiver: rx, + cancel_tx, + }) + } +} + +/// Standard path for a consumer socket file. +/// +/// If the parent directory for socket files does not +/// exist it is created. +fn socket_file(paths: std::sync::Arc) -> Result { + let socks = paths.documents_dir().join(crate::SOCKS); + if !socks.exists() { + std::fs::create_dir(&socks)?; + } + let pid = std::process::id(); + let mut path = socks.join(pid.to_string()); + path.set_extension(crate::SOCK_EXT); + Ok(path) +} diff --git a/crates/changes/src/error.rs b/crates/changes/src/error.rs new file mode 100644 index 0000000000..d77fe62b1b --- /dev/null +++ b/crates/changes/src/error.rs @@ -0,0 +1,13 @@ +use thiserror::Error; + +/// Errors generated by the library. +#[derive(Debug, Error)] +pub enum Error { + /// Errors generated by the IO module. + #[error(transparent)] + Io(#[from] std::io::Error), + + /// Errors generated by the JSON module. + #[error(transparent)] + Json(#[from] serde_json::Error), +} diff --git a/crates/changes/src/lib.rs b/crates/changes/src/lib.rs new file mode 100644 index 0000000000..02cdb4d93a --- /dev/null +++ b/crates/changes/src/lib.rs @@ -0,0 +1,44 @@ +//! Local socket change notification producer and consumer. +#![deny(missing_docs)] +#![forbid(unsafe_code)] +#![cfg_attr(all(doc, CHANNEL_NIGHTLY), feature(doc_auto_cfg))] + +mod error; +pub use error::Error; + +#[cfg(feature = "changes-consumer")] +pub mod consumer; +#[cfg(feature = "changes-producer")] +pub mod producer; + +pub(crate) type Result = std::result::Result; + +use std::path::PathBuf; + +pub(crate) const SOCKS: &str = "socks"; +pub(crate) const SOCK_EXT: &str = "sock"; + +/// Socket file. +pub(crate) struct SocketFile(PathBuf); + +impl From for SocketFile { + fn from(value: PathBuf) -> Self { + Self(value) + } +} + +impl AsRef for SocketFile { + fn as_ref(&self) -> &PathBuf { + &self.0 + } +} + +impl Drop for SocketFile { + fn drop(&mut self) { + tracing::debug!( + file = %self.0.display(), + "changes::socket_file::drop", + ); + let _ = std::fs::remove_file(&self.0); + } +} diff --git a/crates/changes/src/producer.rs b/crates/changes/src/producer.rs new file mode 100644 index 0000000000..4a5e4ba3ad --- /dev/null +++ b/crates/changes/src/producer.rs @@ -0,0 +1,163 @@ +//! Producer for change notifications on a local socket. +use crate::{Error, Result}; +use futures::sink::SinkExt; +use interprocess::local_socket::{tokio::prelude::*, GenericNamespaced}; +use sos_core::{ + events::{changes_feed, LocalChangeEvent}, + Paths, +}; +use std::{path::PathBuf, sync::Arc, time::Duration}; +use tokio::{ + select, + sync::{watch, Mutex}, + time, +}; +use tokio_util::codec::LengthDelimitedCodec; + +/// Handle to a producer. +pub struct ProducerHandle { + cancel_tx: watch::Sender, +} + +impl ProducerHandle { + /// Stop listening for change events. + pub fn cancel(&self) { + self.cancel_tx.send_replace(true); + } +} + +/// Producer socket connection for change events. +pub struct ChangeProducer; + +impl ChangeProducer { + /// Listen to the changes feed and send change events to + /// active sockets. + /// + /// The poll interval determines how frequently the socket + /// directory is inspected. The directory is searched for files + /// ending in .sock and with valid PIDs as the file stem. + /// + /// If `sysinfo` is supported it is checked to see if the process + /// is running before being included in the list of socket file paths + /// to attempt to notify of change events. + /// + /// Returns a handle that can be used to cancel the listener. + #[allow(unreachable_code)] + pub async fn listen( + paths: Arc, + poll_interval: Duration, + ) -> Result { + tracing::debug!( + documents_dir = %paths.documents_dir().display(), + poll_interval = ?poll_interval, + "changes::producer::listen", + ); + let (cancel_tx, mut cancel_rx) = watch::channel(false); + let tx = changes_feed(); + let mut rx = tx.subscribe(); + let sockets = find_active_sockets(paths.clone()).await?; + let sockets = Mutex::new(sockets); + let mut interval = time::interval(poll_interval); + tokio::task::spawn(async move { + loop { + let paths = paths.clone(); + select! { + // Explicit cancel notification + _ = cancel_rx.changed() => { + if *cancel_rx.borrow_and_update() { + break; + } + } + // Periodically refresh the list of consumer sockets + // to dispatch change events to + _ = interval.tick() => { + let active = find_active_sockets(paths).await?; + let mut sockets = sockets.lock().await; + *sockets = active; + } + // Proxy the change events to the consumer sockets + event = rx.changed() => { + match event { + Ok(_) => { + let event = rx.borrow_and_update().clone(); + let sockets = sockets.lock().await; + dispatch_sockets(event, &sockets).await?; + } + Err(_) => {} + } + } + } + } + Ok::<_, Error>(()) + }); + Ok(ProducerHandle { cancel_tx }) + } +} + +async fn dispatch_sockets( + event: LocalChangeEvent, + sockets: &[(u32, PathBuf)], +) -> Result<()> { + for (pid, file) in sockets { + let ps_name = pid.to_string(); + let name = ps_name.to_ns_name::()?; + match LocalSocketStream::connect(name).await { + Ok(socket) => { + let mut writer = LengthDelimitedCodec::builder() + .native_endian() + .new_write(socket); + let message = serde_json::to_vec(&event)?; + writer.send(message.into()).await?; + } + Err(e) => { + // If we can't connect to the socket + // then treat the file as stale and + // remove from disc. + // + // This could happen if the consumer + // process aborted abnormally and + // wasn't able to cleanly remove the file. + let _ = std::fs::remove_file(file)?; + tracing::warn!( + pid = %pid, + error = %e, + "changes::producer::connect_error"); + } + } + } + Ok(()) +} + +/// Find active socket files for a producer. +async fn find_active_sockets( + paths: Arc, +) -> Result> { + use std::fs::read_dir; + let mut sockets = Vec::new(); + let socks = paths.documents_dir().join(crate::SOCKS); + if socks.exists() { + tracing::debug!( + socks_dir = %socks.display(), + "changes::producer::find_active_sockets", + ); + for entry in read_dir(&socks)? { + let entry = entry?; + if let Some(stem) = entry.path().file_stem() { + if let Ok(pid) = + stem.to_string_lossy().as_ref().parse::() + { + tracing::debug!( + sock_file_pid = %pid, + "changes::producer::find_active_sockets", + ); + sockets.push((pid, entry.path().to_owned())); + } + } + } + } + tracing::debug!( + sockets_len = %sockets.len(), + "changes::producer::find_active_sockets", + ); + Ok(sockets) +} diff --git a/crates/cli_helpers/Cargo.toml b/crates/cli_helpers/Cargo.toml index 85b1c39c14..20b26eb6cf 100644 --- a/crates/cli_helpers/Cargo.toml +++ b/crates/cli_helpers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-cli-helpers" -version = "0.1.1" +version = "0.1.3" edition = "2021" description = "Shared helpers for command line executables." homepage = "https://saveoursecrets.com" diff --git a/crates/clipboard/Cargo.toml b/crates/clipboard/Cargo.toml index 660e7eef7b..c42154a0ec 100644 --- a/crates/clipboard/Cargo.toml +++ b/crates/clipboard/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "xclipboard" -version = "0.16.1" +version = "0.16.3" edition = "2021" description = "Cross-platform clipboard with extra features." homepage = "https://saveoursecrets.com" diff --git a/crates/clipboard/src/desktop.rs b/crates/clipboard/src/desktop.rs index 771b91f5db..1050df52c2 100644 --- a/crates/clipboard/src/desktop.rs +++ b/crates/clipboard/src/desktop.rs @@ -94,7 +94,7 @@ impl Clipboard { Ok(mut clipboard) => match clipboard.get_text() { Ok(text) => { let mut reader = source_text.lock().await; - if &*reader == &text { + if *reader == text { let source = &mut *reader; source.zeroize(); diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 7dfd290b92..b1803c5bc1 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-core" -version = "0.17.1" +version = "0.17.3" edition = "2021" description = "Core types for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/core/src/account.rs b/crates/core/src/account.rs index cb4cf170f9..3d6a7863ab 100644 --- a/crates/core/src/account.rs +++ b/crates/core/src/account.rs @@ -7,7 +7,7 @@ use std::{fmt, str::FromStr}; /// /// String encoding starts with 0x and is followed with /// 20 bytes hex-encoded. -#[derive(Debug, Serialize, Deserialize, Clone, Copy, Hash, Eq, PartialEq)] +#[derive(Debug, Default, Serialize, Deserialize, Clone, Copy, Hash, Eq, PartialEq)] #[serde(try_from = "String", into = "String")] pub struct AccountId([u8; 20]); @@ -25,12 +25,6 @@ impl fmt::Display for AccountId { } } -impl Default for AccountId { - fn default() -> Self { - Self([0u8; 20]) - } -} - impl AsRef<[u8]> for AccountId { fn as_ref(&self) -> &[u8] { &self.0 diff --git a/crates/core/src/commit/mod.rs b/crates/core/src/commit/mod.rs index 46b1bfd758..69c6d617a0 100644 --- a/crates/core/src/commit/mod.rs +++ b/crates/core/src/commit/mod.rs @@ -16,5 +16,18 @@ pub use tree::CommitTree; /// Commit state combines the last commit hash with /// a commit proof. -#[derive(Default, Debug, Clone, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Serialize, Deserialize, Default, Debug, Clone, Eq, PartialEq)] pub struct CommitState(pub CommitHash, pub CommitProof); + +/// Commit span represents a section of an event log. +/// +/// There can be no before commit hash when applying the first +/// collection of events to an event log. If an empty collection +/// was passed the after commit hash will be `None`. +#[derive(Serialize, Deserialize, Default, Debug, Clone, Eq, PartialEq)] +pub struct CommitSpan { + /// Commit hash before changes were applied. + pub before: Option, + /// Commit hash after changes were applied. + pub after: Option, +} diff --git a/crates/core/src/events/change.rs b/crates/core/src/events/change.rs new file mode 100644 index 0000000000..675c433d1f --- /dev/null +++ b/crates/core/src/events/change.rs @@ -0,0 +1,44 @@ +use crate::{commit::CommitSpan, events::EventLogType, AccountId}; +use serde::{Deserialize, Serialize}; +use std::sync::OnceLock; +use tokio::sync::watch; + +static CHANGES_FEED: OnceLock> = + OnceLock::new(); + +/// Change event. +/// +/// Used for IPC communication when a process needs +/// to know if changes have been made externally, +/// +/// For example, the browser extension helper executable +/// can detect changes made by the app and update it's +/// view. +#[derive(Serialize, Deserialize, Default, Debug, Clone)] +#[serde(rename_all = "camelCase")] +pub enum LocalChangeEvent { + /// Changes feed was initialized. + #[default] + Init, + /// Account was created. + AccountCreated(AccountId), + /// Account was modified. + AccountModified { + /// Account identifier. + account_id: AccountId, + /// Type of the event log. + log_type: EventLogType, + /// Span of commit hashes. + commit_span: CommitSpan, + }, + /// Account was deleted. + AccountDeleted(AccountId), +} + +/// Feed of change events. +pub fn changes_feed<'a>() -> &'a watch::Sender { + CHANGES_FEED.get_or_init(|| { + let (tx, _) = watch::channel(LocalChangeEvent::default()); + tx + }) +} diff --git a/crates/core/src/events/mod.rs b/crates/core/src/events/mod.rs index b29ddc7536..e3aa51355e 100644 --- a/crates/core/src/events/mod.rs +++ b/crates/core/src/events/mod.rs @@ -9,6 +9,7 @@ //! an audit trail of actions. mod account; +mod change; mod device; mod event; mod event_kind; @@ -21,6 +22,7 @@ mod record; mod write; pub use account::AccountEvent; +pub use change::{changes_feed, LocalChangeEvent}; pub use device::DeviceEvent; pub use event::Event; pub use event_kind::EventKind; @@ -31,8 +33,11 @@ pub use read::ReadEvent; pub use record::EventRecord; pub use write::WriteEvent; +use serde::{Deserialize, Serialize}; + /// Types of event logs. -#[derive(Debug, Copy, Clone, PartialEq, Eq)] +#[derive(Serialize, Deserialize, Debug, Copy, Clone, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] pub enum EventLogType { /// Identity folder event log. Identity, diff --git a/crates/core/src/paths.rs b/crates/core/src/paths.rs index 2862ade3c1..a0c722175b 100644 --- a/crates/core/src/paths.rs +++ b/crates/core/src/paths.rs @@ -338,6 +338,13 @@ impl Paths { path } + /// Path to the global preferences file. + pub fn global_preferences_file(&self) -> PathBuf { + let mut path = self.documents_dir().join(PREFERENCES_FILE); + path.set_extension(JSON_EXT); + path + } + /// Path to the file used to store account-level system messages. /// /// # Panics diff --git a/crates/database/Cargo.toml b/crates/database/Cargo.toml index 45ae917450..d5c89ec552 100644 --- a/crates/database/Cargo.toml +++ b/crates/database/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-database" -version = "0.17.0" +version = "0.17.1" edition = "2021" description = "Database backend for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/database/sql_migrations/V2__global_config.sql b/crates/database/sql_migrations/V2__global_config.sql new file mode 100644 index 0000000000..bd5880ae42 --- /dev/null +++ b/crates/database/sql_migrations/V2__global_config.sql @@ -0,0 +1,16 @@ +-- Global config. +-- +-- Application wide configuration settings such as the binary encoding +-- version. We also include an encoding version for vaults but we should +-- always be using the same encoding across the app so it's better to +-- store it here. +CREATE TABLE IF NOT EXISTS global_config +( + config_id INTEGER PRIMARY KEY NOT NULL, + created_at DATETIME NOT NULL, + modified_at DATETIME NOT NULL, + -- Binary encoding version + -- Version 1 is the binary stream implementation + -- Version 2 is protobuf encoding + binary_encoding INTEGER NOT NULL DEFAULT 1 +); diff --git a/crates/database/src/archive/error.rs b/crates/database/src/archive/error.rs index ce11cf1a2e..5318b41c12 100644 --- a/crates/database/src/archive/error.rs +++ b/crates/database/src/archive/error.rs @@ -24,13 +24,15 @@ pub enum Error { NoDatabaseFile(PathBuf, String), /// Error generated attempting to import an account that - /// already exists in the target database. - #[error("import failed, account '{0}' does not exist in source db")] + /// does not exist in the source database. + #[error( + "import failed, account '{0}' does not exist in the backup archive" + )] ImportSourceNotExists(AccountId), /// Error generated attempting to import an account that /// already exists in the target database. - #[error("import failed, account '{0}' already exists in target db")] + #[error("import failed, account '{0}' already exists")] ImportTargetExists(AccountId), /// Error generated when the checksum for a database does not diff --git a/crates/database/src/archive/export.rs b/crates/database/src/archive/export.rs index bb591eac72..0ee3417d96 100644 --- a/crates/database/src/archive/export.rs +++ b/crates/database/src/archive/export.rs @@ -2,7 +2,7 @@ use super::{types::ManifestVersion3, Error, Result}; use crate::entity::{AccountEntity, AccountRecord, AccountRow}; use async_sqlite::rusqlite::{backup, Connection}; use sha2::{Digest, Sha256}; -use sos_archive::ZipWriter; +use sos_archive::{ZipWriter, ARCHIVE_MANIFEST}; use sos_core::{ commit::CommitHash, constants::{BLOBS_DIR, DATABASE_FILE}, @@ -34,7 +34,8 @@ pub(crate) async fn create( } let zip_file = vfs::File::create(output.as_ref()).await?; - let mut zip_writer = ZipWriter::new(zip_file, ManifestVersion3::new_v3()); + let mut manifest = ManifestVersion3::new_v3(); + let mut zip_writer = ZipWriter::new(zip_file); // Find blobs that we need to add to the archive let accounts = list_accounts(source_db.as_ref())?; @@ -45,8 +46,7 @@ pub(crate) async fn create( let db_buffer = vfs::read(db_temp.path()).await?; let db_checksum = Sha256::digest(&db_buffer); - zip_writer.manifest_mut().checksum = - CommitHash(db_checksum.as_slice().try_into()?); + manifest.checksum = CommitHash(db_checksum.as_slice().try_into()?); zip_writer.add_file(DATABASE_FILE, &db_buffer).await?; // Add external file blobs to the archive @@ -68,6 +68,11 @@ pub(crate) async fn create( } } + let manifest = serde_json::to_vec_pretty(&manifest)?; + zip_writer + .add_file(ARCHIVE_MANIFEST, manifest.as_slice()) + .await?; + zip_writer.finish().await?; Ok(()) } diff --git a/crates/database/src/audit_provider.rs b/crates/database/src/audit_provider.rs index 9d7ac7573d..2cac910e04 100644 --- a/crates/database/src/audit_provider.rs +++ b/crates/database/src/audit_provider.rs @@ -84,35 +84,43 @@ where std::result::Result, >(16); - self.client - .conn_and_then(move |conn| { - let mut stmt = if reverse { - conn.prepare( - "SELECT * FROM audit_logs ORDER BY log_id DESC", - )? - } else { - conn.prepare( - "SELECT * FROM audit_logs ORDER BY log_id ASC", - )? - }; - let mut rows = stmt.query([])?; + let client = self.client.clone(); + tokio::task::spawn(async move { + client + .conn_and_then(move |conn| { + let mut stmt = if reverse { + conn.prepare( + "SELECT * FROM audit_logs ORDER BY log_id DESC", + )? + } else { + conn.prepare( + "SELECT * FROM audit_logs ORDER BY log_id ASC", + )? + }; + let mut rows = stmt.query([])?; - while let Some(row) = rows.next()? { - let row: AuditRow = row.try_into()?; - let record: AuditRecord = row.try_into()?; - let inner_tx = tx.clone(); - futures::executor::block_on(async move { - if let Err(e) = inner_tx.send(Ok(record.event)).await - { + while let Some(row) = rows.next()? { + if tx.is_closed() { + break; + } + let row: AuditRow = row.try_into()?; + let record: AuditRecord = row.try_into()?; + let inner_tx = tx.clone(); + let res = futures::executor::block_on(async move { + inner_tx.send(Ok(record.event)).await + }); + if let Err(e) = res { tracing::error!(error = %e); + break; } - }); - } + } - Ok::<_, Error>(()) - }) - .await - .map_err(Error::from)?; + Ok::<_, Error>(()) + }) + .await + .map_err(Error::from)?; + Ok::<_, Self::Error>(()) + }); Ok(Box::pin(ReceiverStream::new(rx))) } diff --git a/crates/database/src/entity/account.rs b/crates/database/src/entity/account.rs index b8657a7785..0bf148d07b 100644 --- a/crates/database/src/entity/account.rs +++ b/crates/database/src/entity/account.rs @@ -287,8 +287,8 @@ where .from("accounts") .where_clause("identifier = ?1"); let mut stmt = self.conn.prepare_cached(&query.as_string())?; - Ok(stmt - .query_row([account_id.to_string()], |row| Ok(row.try_into()?))?) + stmt + .query_row([account_id.to_string()], |row| row.try_into()) } /// Find an optional account in the database. @@ -301,9 +301,9 @@ where .from("accounts") .where_clause("identifier = ?1"); let mut stmt = self.conn.prepare_cached(&query.as_string())?; - Ok(stmt - .query_row([account_id.to_string()], |row| Ok(row.try_into()?)) - .optional()?) + stmt + .query_row([account_id.to_string()], |row| row.try_into()) + .optional() } /// List accounts. @@ -318,9 +318,7 @@ where Ok(row.try_into()?) } - let rows = stmt.query_and_then([], |row| { - Ok::<_, crate::Error>(convert_row(row)?) - })?; + let rows = stmt.query_and_then([], convert_row)?; let mut accounts = Vec::new(); for row in rows { accounts.push(row?); diff --git a/crates/database/src/entity/event.rs b/crates/database/src/entity/event.rs index 01e6150d6d..5e1d867fec 100644 --- a/crates/database/src/entity/event.rs +++ b/crates/database/src/entity/event.rs @@ -202,7 +202,7 @@ where .from(table.as_str()) .where_clause("event_id=?1"); let mut stmt = self.conn.prepare_cached(&query.as_string())?; - Ok(stmt.query_row([event_id], |row| Ok(row.try_into()?))?) + stmt.query_row([event_id], |row| row.try_into()) } /// Delete an event from the database table. @@ -298,9 +298,7 @@ where Ok(row.try_into()?) } - let rows = stmt.query_and_then([id], |row| { - Ok::<_, crate::Error>(convert_row(row)?) - })?; + let rows = stmt.query_and_then([id], convert_row)?; let mut events = Vec::new(); for row in rows { @@ -328,9 +326,7 @@ where Ok(row.try_into()?) } - let rows = stmt.query_and_then([account_or_folder_id], |row| { - Ok::<_, crate::Error>(convert_row(row)?) - })?; + let rows = stmt.query_and_then([account_or_folder_id], convert_row)?; let mut commits = Vec::new(); for row in rows { @@ -350,7 +346,7 @@ where .delete_from(table.as_str()) .where_clause(&format!("{}=?1", table.id_column())); let mut stmt = self.conn.prepare_cached(&query.as_string())?; - Ok(stmt.execute([account_or_folder_id])?) + stmt.execute([account_or_folder_id]) } fn create_events( diff --git a/crates/database/src/entity/folder.rs b/crates/database/src/entity/folder.rs index 5e4f6aeb69..5ec838d0a0 100644 --- a/crates/database/src/entity/folder.rs +++ b/crates/database/src/entity/folder.rs @@ -181,11 +181,7 @@ impl FolderRecord { let flags = VaultFlags::from_bits(bits) .ok_or(sos_vault::Error::InvalidVaultFlags)?; - let salt = if let Some(salt) = value.salt { - Some(salt) - } else { - None - }; + let salt = value.salt; let meta = if let Some(meta) = &value.meta { Some(decode(meta).await?) @@ -219,7 +215,7 @@ impl FolderRecord { let mut vault: Vault = self.summary.clone().into(); vault.header_mut().set_meta(self.meta.clone()); vault.header_mut().set_salt(self.salt.clone()); - vault.header_mut().set_seed(self.seed.clone()); + vault.header_mut().set_seed(self.seed); Ok(vault) } } @@ -399,7 +395,7 @@ impl<'conn> FolderEntity<'conn, Transaction<'conn>> { secret_rows.push(SecretRow::new(secret_id, commit, entry).await?); } - Ok(client + client .conn_mut_and_then(move |conn| { let tx = conn.transaction()?; let folder_entity = FolderEntity::new(&tx); @@ -421,7 +417,7 @@ impl<'conn> FolderEntity<'conn, Transaction<'conn>> { tx.commit()?; Ok::<_, Error>((folder_id, secret_ids)) }) - .await?) + .await } /// Replace all secrets for a folder using a transaction. @@ -430,7 +426,7 @@ impl<'conn> FolderEntity<'conn, Transaction<'conn>> { folder_id: &VaultId, vault: &Vault, ) -> Result<()> { - let folder_id = folder_id.clone(); + let folder_id = *folder_id; let mut insert_secrets = Vec::new(); for (secret_id, commit) in vault.iter() { let VaultCommit(commit, entry) = commit; @@ -470,10 +466,10 @@ where Self { conn } } - fn select_folder( - &self, + fn select_folder<'a>( + &'a self, use_identifier: bool, - ) -> StdResult { + ) -> StdResult, SqlError> { let query = folder_select_columns(sql::Select::new()).from("folders"); let query = if use_identifier { @@ -481,7 +477,7 @@ where } else { query.where_clause("folder_id = ?1") }; - Ok(self.conn.prepare_cached(&query.as_string())?) + self.conn.prepare_cached(&query.as_string()) } /// Find a folder in the database. @@ -491,8 +487,8 @@ where folder_id: &VaultId, ) -> StdResult { let mut stmt = self.select_folder(true)?; - Ok(stmt - .query_row([folder_id.to_string()], |row| Ok(row.try_into()?))?) + stmt + .query_row([folder_id.to_string()], |row| row.try_into()) } /// Find an optional folder in the database. @@ -502,12 +498,12 @@ where folder_id: &VaultId, ) -> StdResult, SqlError> { let mut stmt = self.select_folder(true)?; - Ok(stmt + stmt .query_row([folder_id.to_string()], |row| { let row: FolderRow = row.try_into()?; Ok(row) }) - .optional()?) + .optional() } /// Find a folder in the database by primary key. @@ -516,14 +512,14 @@ where folder_id: i64, ) -> StdResult { let mut stmt = self.select_folder(false)?; - Ok(stmt.query_row([folder_id], |row| Ok(row.try_into()?))?) + stmt.query_row([folder_id], |row| row.try_into()) } /// Try to find a login folder for an account. pub fn find_login_folder(&self, account_id: i64) -> Result { - Ok(self + self .find_login_folder_optional(account_id)? - .ok_or_else(|| Error::NoLoginFolder(account_id))?) + .ok_or_else(|| Error::NoLoginFolder(account_id)) } /// Try to find an optional login folder for an account. @@ -540,9 +536,9 @@ where .where_and("login.account_id=?1"); let mut stmt = self.conn.prepare_cached(&query.as_string())?; - Ok(stmt - .query_row([account_id], |row| Ok(row.try_into()?)) - .optional()?) + stmt + .query_row([account_id], |row| row.try_into()) + .optional() } /// Try to find a device folder for an account. @@ -559,9 +555,9 @@ where .where_and("device.account_id=?1"); let mut stmt = self.conn.prepare_cached(&query.as_string())?; - Ok(stmt - .query_row([account_id], |row| Ok(row.try_into()?)) - .optional()?) + stmt + .query_row([account_id], |row| row.try_into()) + .optional() } /// List user folders for an account. @@ -589,9 +585,7 @@ where Ok(row.try_into()?) } - let rows = stmt.query_and_then([account_id], |row| { - Ok::<_, crate::Error>(convert_row(row)?) - })?; + let rows = stmt.query_and_then([account_id], convert_row)?; let mut folders = Vec::new(); for row in rows { folders.push(row?); @@ -742,7 +736,7 @@ where for secret_row in rows { let identifier: SecretId = secret_row.identifier.parse()?; let secret_id = - self.insert_secret_by_row_id(folder_id, &secret_row)?; + self.insert_secret_by_row_id(folder_id, secret_row)?; secret_ids.insert(identifier, secret_id); } Ok(secret_ids) @@ -755,7 +749,7 @@ where secret_row: &SecretRow, ) -> StdResult { let row = self.find_one(folder_id)?; - Ok(self.insert_secret_by_row_id(row.row_id, secret_row)?) + self.insert_secret_by_row_id(row.row_id, secret_row) } /// Insert a secret using the folder row id. @@ -806,12 +800,12 @@ where .where_and("identifier=?2"); let mut stmt = self.conn.prepare_cached(&query.as_string())?; - Ok(stmt + stmt .query_row((row.row_id, secret_id.to_string()), |row| { let row: SecretRow = row.try_into()?; Ok(row) }) - .optional()?) + .optional() } /// Update a folder secret. @@ -859,9 +853,7 @@ where Ok(row.try_into()?) } - let rows = stmt.query_and_then([folder_row_id], |row| { - Ok::<_, crate::Error>(convert_row(row)?) - })?; + let rows = stmt.query_and_then([folder_row_id], convert_row)?; let mut secrets = Vec::new(); for row in rows { secrets.push(row?); @@ -886,9 +878,7 @@ where Ok(id.parse()?) } - let rows = stmt.query_and_then([folder.row_id], |row| { - Ok::<_, crate::Error>(convert_row(row)?) - })?; + let rows = stmt.query_and_then([folder.row_id], convert_row)?; let mut secrets = Vec::new(); for row in rows { secrets.push(row?); @@ -936,6 +926,6 @@ where .delete_from("folder_secrets") .where_clause("folder_id = ?1"); let mut stmt = self.conn.prepare_cached(&query.as_string())?; - Ok(stmt.execute([folder_id])?) + stmt.execute([folder_id]) } } diff --git a/crates/database/src/entity/server.rs b/crates/database/src/entity/server.rs index d3119184f5..1abb6ac4b1 100644 --- a/crates/database/src/entity/server.rs +++ b/crates/database/src/entity/server.rs @@ -96,9 +96,9 @@ where let mut stmt = self .conn .prepare_cached(&self.find_server_select(true).as_string())?; - Ok(stmt.query_row((account_id, url.to_string()), |row| { - Ok(row.try_into()?) - })?) + stmt.query_row((account_id, url.to_string()), |row| { + row.try_into() + }) } /// Find an optional server in the database. @@ -110,11 +110,11 @@ where let mut stmt = self .conn .prepare_cached(&self.find_server_select(true).as_string())?; - Ok(stmt + stmt .query_row((account_id, url.to_string()), |row| { - Ok(row.try_into()?) + row.try_into() }) - .optional()?) + .optional() } /// Load servers for an account. @@ -127,7 +127,7 @@ where } let rows = stmt.query_and_then([account_id], |row| { - Ok::<_, crate::Error>(convert_row(row)?) + convert_row(row) })?; let mut servers = Vec::new(); for row in rows { diff --git a/crates/database/src/event_log.rs b/crates/database/src/event_log.rs index 8917230f2b..3b569e0d05 100644 --- a/crates/database/src/event_log.rs +++ b/crates/database/src/event_log.rs @@ -22,12 +22,13 @@ use futures::{ stream::{BoxStream, StreamExt, TryStreamExt}, }; use sos_core::{ - commit::{CommitHash, CommitProof, CommitTree, Comparison}, + commit::{CommitHash, CommitProof, CommitSpan, CommitTree, Comparison}, encoding::VERSION1, events::{ + changes_feed, patch::{CheckedPatch, Diff, Patch}, AccountEvent, DeviceEvent, EventLog, EventLogType, EventRecord, - WriteEvent, + LocalChangeEvent, WriteEvent, }, AccountId, VaultId, }; @@ -37,16 +38,26 @@ use sos_core::{ #[doc(hidden)] pub enum EventLogOwner { /// Event log owned by an account. - Account(i64), + Account(AccountId, i64), /// Event log owned by a folder. - Folder(FolderRecord), + Folder(AccountId, FolderRecord), +} + +impl EventLogOwner { + /// Account idenifier. + pub fn account_id(&self) -> &AccountId { + match self { + EventLogOwner::Account(account_id, _) => account_id, + EventLogOwner::Folder(account_id, _) => account_id, + } + } } impl From<&EventLogOwner> for i64 { fn from(value: &EventLogOwner) -> Self { match value { - EventLogOwner::Account(id) => *id, - EventLogOwner::Folder(folder) => folder.row_id, + EventLogOwner::Account(_, id) => *id, + EventLogOwner::Folder(_, folder) => folder.row_id, } } } @@ -143,8 +154,11 @@ where .await?; Ok(match result { - (account_row, None) => EventLogOwner::Account(account_row.row_id), + (account_row, None) => { + EventLogOwner::Account(account_id, account_row.row_id) + } (_, Some(folder_row)) => EventLogOwner::Folder( + account_id, FolderRecord::from_row(folder_row).await?, ), }) @@ -155,12 +169,21 @@ where records: &[EventRecord], delete_before: bool, ) -> Result<(), E> { - let log_type = self.log_type.clone(); + if records.is_empty() { + return Ok(()); + } + + let mut span = CommitSpan { + before: self.tree.last_commit(), + after: None, + }; + + let log_type = self.log_type; let mut insert_rows = Vec::new(); let mut commits = Vec::new(); for record in records { commits.push(*record.commit()); - insert_rows.push(EventRecordRow::new(&record)?); + insert_rows.push(EventRecordRow::new(record)?); } let id = (&self.owner).into(); @@ -194,6 +217,14 @@ where self.tree.append(&mut hashes); self.tree.commit(); + span.after = self.tree.last_commit(); + + changes_feed().send_replace(LocalChangeEvent::AccountModified { + account_id: *self.owner.account_id(), + log_type: self.log_type, + commit_span: span, + }); + Ok(()) } } @@ -339,7 +370,7 @@ where let (tx, rx) = tokio::sync::mpsc::channel(8); let id: i64 = (&self.owner).into(); - let log_type = self.log_type.clone(); + let log_type = self.log_type; let client = self.client.clone(); tokio::spawn(async move { @@ -358,18 +389,23 @@ where } let rows = stmt.query_and_then([id], |row| { - Ok::<_, crate::Error>(convert_row(row)?) + convert_row(row) })?; for row in rows { + if tx.is_closed() { + break; + } let row = row?; let record: EventRecord = row.try_into()?; - let sender = tx.clone(); - futures::executor::block_on(async move { - if let Err(err) = sender.send(Ok(record)).await { - tracing::error!(error = %err); - } + let inner_tx = tx.clone(); + let res = futures::executor::block_on(async move { + inner_tx.send(Ok(record)).await }); + if let Err(e) = res { + tracing::error!(error = %e); + break; + } } Ok::<_, Error>(()) @@ -466,7 +502,7 @@ where records.iter().map(|r| *r.commit()).collect::>(); // Delete from the database - let log_type = self.log_type.clone(); + let log_type = self.log_type; self.client .conn_mut(move |conn| { let tx = conn.transaction()?; @@ -487,7 +523,7 @@ where } async fn load_tree(&mut self) -> Result<(), Self::Error> { - let log_type = self.log_type.clone(); + let log_type = self.log_type; let id = (&self.owner).into(); let commits = self .client @@ -508,7 +544,7 @@ where } async fn clear(&mut self) -> Result<(), Self::Error> { - let log_type = self.log_type.clone(); + let log_type = self.log_type; let id = (&self.owner).into(); self.client .conn_mut(move |conn| { @@ -630,8 +666,8 @@ where fn version(&self) -> u16 { match &self.owner { - EventLogOwner::Folder(folder) => *folder.summary.version(), - EventLogOwner::Account(_) => VERSION1, + EventLogOwner::Folder(_, folder) => *folder.summary.version(), + EventLogOwner::Account(_, _) => VERSION1, } } } diff --git a/crates/database/src/migrations.rs b/crates/database/src/migrations.rs index 16050d8620..9ac19eb099 100644 --- a/crates/database/src/migrations.rs +++ b/crates/database/src/migrations.rs @@ -13,7 +13,20 @@ mod embedded { pub fn migrate_connection( conn: &mut Connection, ) -> std::result::Result { - embedded::migrations::runner().run(conn) + tracing::debug!("migration::started"); + let report = embedded::migrations::runner().run(conn)?; + let applied = report.applied_migrations(); + for migration in applied { + tracing::debug!( + name = %migration.name(), + version = %migration.version(), + "migration::applied", + ); + } + tracing::debug!( + applied_migrations = %applied.len(), + "migration::finished"); + Ok(report) } /// Run migrations for a client. @@ -22,7 +35,7 @@ pub async fn migrate_client(client: &mut Client) -> Result { oneshot::channel::>(); client .conn_mut(|conn| { - let result = embedded::migrations::runner().run(conn); + let result = migrate_connection(conn); tx.send(result).unwrap(); Ok(()) }) diff --git a/crates/database/src/server_origins.rs b/crates/database/src/server_origins.rs index 27576a97a9..a7016a0398 100644 --- a/crates/database/src/server_origins.rs +++ b/crates/database/src/server_origins.rs @@ -41,14 +41,14 @@ where } async fn list_origins(&self) -> Result, E> { - let account_id = self.account_id.clone(); + let account_id = self.account_id; let servers = self .client .conn_and_then(move |conn| { let accounts = AccountEntity::new(&conn); let account_row = accounts.find_one(&account_id)?; let servers = ServerEntity::new(&conn); - Ok(servers.load_servers(account_row.row_id)?) + servers.load_servers(account_row.row_id) }) .await?; let mut set = HashSet::new(); @@ -63,7 +63,7 @@ where origin: Origin, remove: Option<&Origin>, ) -> Result<(), E> { - let account_id = self.account_id.clone(); + let account_id = self.account_id; let remove = remove.cloned(); let server_row: ServerRow = origin.try_into()?; self.client @@ -110,7 +110,7 @@ where &mut self, origin: Origin, ) -> Result<(), Self::Error> { - let account_id = self.account_id.clone(); + let account_id = self.account_id; let url = origin.url().clone(); let server_row = self .client @@ -118,7 +118,7 @@ where let accounts = AccountEntity::new(&conn); let account_row = accounts.find_one(&account_id)?; let servers = ServerEntity::new(&conn); - Ok(servers.find_optional(account_row.row_id, &url)?) + servers.find_optional(account_row.row_id, &url) }) .await .map_err(Error::from)?; @@ -144,7 +144,7 @@ where &mut self, origin: &Origin, ) -> Result<(), Self::Error> { - let account_id = self.account_id.clone(); + let account_id = self.account_id; let origin = origin.clone(); self.client .conn_mut(move |conn| { diff --git a/crates/database/src/vault_writer.rs b/crates/database/src/vault_writer.rs index 2b9a0aa9a2..bb36fce880 100644 --- a/crates/database/src/vault_writer.rs +++ b/crates/database/src/vault_writer.rs @@ -68,7 +68,7 @@ where type Error = E; async fn summary(&self) -> Result { - let folder_id = self.folder_id.clone(); + let folder_id = self.folder_id; let row = self .client .conn(move |conn| { @@ -92,7 +92,7 @@ where &mut self, name: String, ) -> Result { - let folder_id = self.folder_id.clone(); + let folder_id = self.folder_id; let folder_name = name.clone(); self.client .conn_and_then(move |conn| { @@ -107,7 +107,7 @@ where &mut self, flags: VaultFlags, ) -> Result { - let folder_id = self.folder_id.clone(); + let folder_id = self.folder_id; let folder_flags = flags.clone(); self.client .conn_and_then(move |conn| { @@ -122,7 +122,7 @@ where &mut self, meta_data: AeadPack, ) -> Result { - let folder_id = self.folder_id.clone(); + let folder_id = self.folder_id; let folder_meta = encode(&meta_data).await?; self.client .conn_and_then(move |conn| { @@ -147,7 +147,7 @@ where commit: CommitHash, secret: VaultEntry, ) -> Result { - let folder_id = self.folder_id.clone(); + let folder_id = self.folder_id; let secret_row = SecretRow::new(&secret_id, &commit, &secret).await?; self.client .conn(move |conn| { @@ -167,13 +167,13 @@ where &'a self, secret_id: &SecretId, ) -> Result, ReadEvent)>, Self::Error> { - let folder_id = self.folder_id.clone(); + let folder_id = self.folder_id; let folder_secret_id = *secret_id; let secret_row = self .client .conn(move |conn| { let folder = FolderEntity::new(&conn); - Ok(folder.find_secret(&folder_id, &folder_secret_id)?) + folder.find_secret(&folder_id, &folder_secret_id) }) .await .map_err(Error::from)?; @@ -193,7 +193,7 @@ where commit: CommitHash, secret: VaultEntry, ) -> Result, Self::Error> { - let folder_id = self.folder_id.clone(); + let folder_id = self.folder_id; let secret_row = SecretRow::new(secret_id, &commit, &secret).await?; let updated = self .client @@ -212,13 +212,13 @@ where &mut self, secret_id: &SecretId, ) -> Result, Self::Error> { - let folder_id = self.folder_id.clone(); + let folder_id = self.folder_id; let folder_secret_id = *secret_id; let deleted = self .client .conn(move |conn| { let folder = FolderEntity::new(&conn); - Ok(folder.delete_secret(&folder_id, &folder_secret_id)?) + folder.delete_secret(&folder_id, &folder_secret_id) }) .await .map_err(Error::from)?; diff --git a/crates/database_upgrader/Cargo.toml b/crates/database_upgrader/Cargo.toml index 0f7526344f..3801c1e22a 100644 --- a/crates/database_upgrader/Cargo.toml +++ b/crates/database_upgrader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-database-upgrader" -version = "0.17.1" +version = "0.17.2" edition = "2021" description = "Upgrade from file system to database storage for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/database_upgrader/src/upgrader/mod.rs b/crates/database_upgrader/src/upgrader/mod.rs index 34c4295bb2..c475450faf 100644 --- a/crates/database_upgrader/src/upgrader/mod.rs +++ b/crates/database_upgrader/src/upgrader/mod.rs @@ -114,13 +114,7 @@ async fn import_accounts( let mut client = open_file_with_journal_mode(db_file, JournalMode::Memory).await?; - let report = migrate_client(&mut client).await?; - for migration in report.applied_migrations() { - tracing::debug!( - name = %migration.name(), - version = %migration.version(), - "import_accounts::migration",); - } + migrate_client(&mut client).await?; client } else { open_memory().await? @@ -221,13 +215,6 @@ pub async fn upgrade_accounts( copy_file_blobs(accounts.as_slice(), &options).await?; } - if !options.keep_stale_files { - tracing::debug!("upgrade_accounts::delete_stale_files"); - - result.deleted_files = - delete_stale_files(accounts.as_slice(), &options).await?; - } - result.accounts = accounts; result.database_file = options.paths.database_file().to_owned(); @@ -241,6 +228,13 @@ pub async fn upgrade_accounts( vfs::rename(db_temp.path(), options.paths.database_file()).await?; } + if !options.keep_stale_files { + tracing::debug!("upgrade_accounts::delete_stale_files"); + + result.deleted_files = + delete_stale_files(result.accounts.as_slice(), &options).await?; + } + Ok(result) } @@ -435,6 +429,8 @@ async fn delete_stale_files( let mut files = vec![ options.paths.identity_dir().to_owned(), options.paths.audit_file().to_owned(), + options.paths.global_preferences_file(), + options.paths.local_dir().join(".DS_Store"), ]; for account in accounts { @@ -461,5 +457,12 @@ async fn delete_stale_files( } } + // Can error if the local directory is not empty! + if let Err(error) = vfs::remove_dir(options.paths.local_dir()).await { + tracing::error!( + error = %error, + "upgrade_accounts::remove_local_dir"); + } + Ok(files) } diff --git a/crates/debug_snapshot/Cargo.toml b/crates/debug_snapshot/Cargo.toml new file mode 100644 index 0000000000..4f75d1e7ce --- /dev/null +++ b/crates/debug_snapshot/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "sos-debug-snapshot" +version = "0.17.1" +edition = "2021" +description = "Create debug snapshot ZIP archives for the Save Our Secrets SDK" +homepage = "https://saveoursecrets.com" +license = "MIT OR Apache-2.0" +repository = "https://github.com/saveoursecrets/sdk" + +[features] +audit = [ + "sos-backend/audit", +] + +[dependencies] +thiserror.workspace = true +futures.workspace = true +sos-backend.workspace = true +sos-client-storage.workspace = true +sos-archive.workspace = true +sos-logs.workspace = true +sos-sync.workspace = true +sos-vfs.workspace = true +serde_json.workspace = true diff --git a/crates/debug_snapshot/src/error.rs b/crates/debug_snapshot/src/error.rs new file mode 100644 index 0000000000..5d729fe3e7 --- /dev/null +++ b/crates/debug_snapshot/src/error.rs @@ -0,0 +1,25 @@ +use thiserror::Error; + +/// Errors generated by the library. +#[derive(Debug, Error)] +pub enum Error { + /// Errors generated by the IO module. + #[error(transparent)] + Io(#[from] std::io::Error), + + /// Errors generated by the JSON library. + #[error(transparent)] + Json(#[from] serde_json::Error), + + /// Errors generated by the backend library. + #[error(transparent)] + Backend(#[from] sos_backend::Error), + + /// Errors generated by the client storage library. + #[error(transparent)] + ClientStorage(#[from] sos_client_storage::Error), + + /// Errors generated by the archive library. + #[error(transparent)] + Archive(#[from] sos_archive::Error), +} diff --git a/crates/debug_snapshot/src/lib.rs b/crates/debug_snapshot/src/lib.rs new file mode 100644 index 0000000000..d8a74ccb33 --- /dev/null +++ b/crates/debug_snapshot/src/lib.rs @@ -0,0 +1,115 @@ +use futures::{pin_mut, StreamExt}; +use sos_archive::ZipWriter; +use sos_client_storage::{ + ClientBaseStorage, ClientFolderStorage, ClientStorage, +}; +use sos_logs::LOG_FILE_NAME; +use sos_sync::SyncStorage; +use sos_vfs as vfs; +use std::path::Path; + +mod error; +pub use error::Error; + +/// Options for debug snapshots. +#[derive(Debug)] +pub struct DebugSnapshotOptions { + /// Include log files in the archive. + pub include_log_files: bool, + /// Include audit trail for the first configured + /// audit provider. + pub include_audit_trail: bool, +} + +impl Default for DebugSnapshotOptions { + fn default() -> Self { + Self { + include_log_files: true, + include_audit_trail: false, + } + } +} + +/// Export a ZIP archive containing a snapshot of an +/// account state; if the file exists it is overwritten. +/// +/// # Privacy +/// +/// No secret information is included but it does include the +/// account identifier and folder names. +pub async fn export_debug_snapshot( + source: &ClientStorage, + file: impl AsRef, + options: DebugSnapshotOptions, +) -> Result<(), Error> { + let zip_file = vfs::File::create(file.as_ref()).await?; + let mut zip_writer = ZipWriter::new(zip_file); + + let account_id = *source.account_id(); + let debug_tree = source.debug_account_tree(account_id).await?; + + let buffer = serde_json::to_vec_pretty(&debug_tree)?; + zip_writer.add_file("account.json", &buffer).await?; + + let login = source.read_login_vault().await?; + let buffer = serde_json::to_vec_pretty(login.summary())?; + zip_writer.add_file("login.json", &buffer).await?; + + if let Some(device) = source.read_device_vault().await? { + let buffer = serde_json::to_vec_pretty(device.summary())?; + zip_writer.add_file("device.json", &buffer).await?; + } + + let target = source.backend_target(); + let paths = target.paths(); + + if options.include_log_files { + let logs = paths.logs_dir(); + let mut dir = vfs::read_dir(logs).await?; + while let Some(entry) = dir.next_entry().await? { + let path = entry.path(); + if let Some(name) = path.file_name() { + if name.to_string_lossy().starts_with(LOG_FILE_NAME) { + let buffer = vfs::read(&path).await?; + zip_writer + .add_file( + &format!("logs/{}.jsonl", name.to_string_lossy()), + &buffer, + ) + .await?; + } + } + } + } + + #[cfg(feature = "audit")] + if options.include_audit_trail { + if let Some(providers) = sos_backend::audit::providers() { + for (index, provider) in providers.iter().enumerate() { + let stream = provider.audit_stream(false).await?; + pin_mut!(stream); + + let events = stream + .filter_map(|e| async move { e.ok() }) + .filter_map(|e| async move { + if e.account_id() == &account_id { + Some(e) + } else { + None + } + }) + .collect::>() + .await; + + let buffer = serde_json::to_vec_pretty(&events)?; + zip_writer + .add_file(&format!("audit/{}.json", index), &buffer) + .await?; + } + } + } + + zip_writer.finish().await?; + + Ok(()) +} diff --git a/crates/extension_service/Cargo.toml b/crates/extension_service/Cargo.toml index bcfa18ca3c..e5c81e4b2a 100644 --- a/crates/extension_service/Cargo.toml +++ b/crates/extension_service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-extension-service" -version = "0.17.0" +version = "0.17.1" edition = "2021" description = "Browser extension service for the Save Our Secrets SDK." homepage = "https://saveoursecrets.com" @@ -11,11 +11,13 @@ repository = "https://github.com/saveoursecrets/sdk" sos-account = { workspace = true, features = ["clipboard", "search"] } sos-backend.workspace = true sos-core.workspace = true -sos-ipc = { workspace = true, features = ["extension-helper-server", "search", "clipboard"] } +sos-ipc = { workspace = true, features = ["extension-helper-server", "search", "clipboard", "files"] } sos-net = { workspace = true, features = ["clipboard", "search"] } +sos-changes = { workspace = true, features = ["changes-consumer"] } tokio.workspace = true anyhow.workspace = true xclipboard.workspace = true +tracing.workspace = true [[bin]] name = "sos-extension-helper" diff --git a/crates/extension_service/src/lib.rs b/crates/extension_service/src/lib.rs index 81302020b5..e32f7e3a28 100644 --- a/crates/extension_service/src/lib.rs +++ b/crates/extension_service/src/lib.rs @@ -1,6 +1,6 @@ use sos_account::AccountSwitcherOptions; use sos_backend::{BackendTarget, InferOptions}; -use sos_core::Paths; +use sos_core::{events::changes_feed, Paths}; use sos_ipc::{ extension_helper::server::{ ExtensionHelperOptions, ExtensionHelperServer, @@ -29,6 +29,7 @@ pub async fn run() -> anyhow::Result<()> { args.pop(); let extension_id = args.pop().unwrap_or_else(String::new).to_string(); + let changes_feed = changes_feed(); let mut accounts = NetworkAccountSwitcher::new_with_options(AccountSwitcherOptions { @@ -36,9 +37,17 @@ pub async fn run() -> anyhow::Result<()> { ..Default::default() }); + let paths = Paths::new_client(Paths::data_dir()?); + let target = BackendTarget::infer(paths, InferOptions::default()).await?; + + tracing::info!(backend_target = %target, "extension_service"); + accounts .load_accounts( |identity| { + tracing::debug!( + account_id = %identity.account_id(), + "extension::load_account"); Box::pin(async move { let paths = Paths::new_client(Paths::data_dir()?) .with_account_id(identity.account_id()); @@ -53,7 +62,7 @@ pub async fn run() -> anyhow::Result<()> { .await?) }) }, - None, + target, ) .await?; @@ -64,7 +73,10 @@ pub async fn run() -> anyhow::Result<()> { let accounts = Arc::new(RwLock::new(accounts)); let options = ExtensionHelperOptions::new(extension_id, info); - let server = ExtensionHelperServer::new(options, accounts).await?; + let server = ExtensionHelperServer::new(options, accounts, |event| { + changes_feed.send_replace(event); + }) + .await?; server.listen().await; Ok(()) } diff --git a/crates/external_files/Cargo.toml b/crates/external_files/Cargo.toml index bd6b9b1c46..f14e7e4195 100644 --- a/crates/external_files/Cargo.toml +++ b/crates/external_files/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-external-files" -version = "0.17.0" +version = "0.17.1" edition = "2021" description = "External file blob support for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/filesystem/Cargo.toml b/crates/filesystem/Cargo.toml index f99ba089be..9feaff5337 100644 --- a/crates/filesystem/Cargo.toml +++ b/crates/filesystem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-filesystem" -version = "0.17.0" +version = "0.17.1" edition = "2021" description = "Filesystem backend for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/filesystem/src/archive/export.rs b/crates/filesystem/src/archive/export.rs index 659c94ea07..06b07e8566 100644 --- a/crates/filesystem/src/archive/export.rs +++ b/crates/filesystem/src/archive/export.rs @@ -2,7 +2,7 @@ use crate::archive::{Error, ManifestVersion1, Result}; use hex; use sha2::{Digest, Sha256}; -use sos_archive::ZipWriter; +use sos_archive::{ZipWriter, ARCHIVE_MANIFEST}; use sos_core::{ constants::{ ACCOUNT_EVENTS, DEVICE_FILE, EVENT_LOG_EXT, FILE_EVENTS, JSON_EXT, @@ -43,13 +43,13 @@ async fn export_archive_buffer( let vaults = list_local_folders(paths).await?; let mut archive = Vec::new(); - let mut writer = - ZipWriter::new(Cursor::new(&mut archive), ManifestVersion1::new_v2()); - set_identity(&mut writer, address, &identity).await?; + let mut manifest = ManifestVersion1::new_v2(); + let mut writer = ZipWriter::new(Cursor::new(&mut archive)); + set_identity(&mut writer, &mut manifest, address, &identity).await?; for (summary, path) in vaults { let buffer = vfs::read(path).await?; - add_vault(&mut writer, *summary.id(), &buffer).await?; + add_vault(&mut writer, &mut manifest, *summary.id(), &buffer).await?; } let device_info = if vfs::try_exists(paths.device_file()).await? @@ -63,27 +63,37 @@ async fn export_archive_buffer( }; if let Some((vault, events)) = device_info { - add_devices(&mut writer, vault.as_slice(), events.as_slice()).await?; + add_devices( + &mut writer, + &mut manifest, + vault.as_slice(), + events.as_slice(), + ) + .await?; } if vfs::try_exists(paths.account_events()).await? { let buffer = vfs::read(paths.account_events()).await?; - add_account_events(&mut writer, buffer.as_slice()).await?; + add_account_events(&mut writer, &mut manifest, buffer.as_slice()) + .await?; } if vfs::try_exists(paths.file_events()).await? { let buffer = vfs::read(paths.file_events()).await?; - add_file_events(&mut writer, buffer.as_slice()).await?; + add_file_events(&mut writer, &mut manifest, buffer.as_slice()) + .await?; } if vfs::try_exists(paths.preferences_file()).await? { let buffer = vfs::read(paths.preferences_file()).await?; - add_preferences(&mut writer, buffer.as_slice()).await?; + add_preferences(&mut writer, &mut manifest, buffer.as_slice()) + .await?; } if vfs::try_exists(paths.remote_origins()).await? { let buffer = vfs::read(paths.remote_origins()).await?; - add_remote_servers(&mut writer, buffer.as_slice()).await?; + add_remote_servers(&mut writer, &mut manifest, buffer.as_slice()) + .await?; } let external_files = @@ -96,22 +106,27 @@ async fn export_archive_buffer( .await?; } + let manifest = serde_json::to_vec_pretty(&manifest)?; + writer + .add_file(ARCHIVE_MANIFEST, manifest.as_slice()) + .await?; + writer.finish().await?; Ok(archive) } /// Set the identity vault for the archive. async fn set_identity( - writer: &mut ZipWriter>, ManifestVersion1>, + writer: &mut ZipWriter>>, + manifest: &mut ManifestVersion1, account_id: &AccountId, vault: &[u8], ) -> Result<()> { let mut path = PathBuf::from(account_id.to_string()); path.set_extension(VAULT_EXT); - writer.manifest_mut().account_id = *account_id; - writer.manifest_mut().checksum = - hex::encode(Sha256::digest(vault).as_slice()); + manifest.account_id = *account_id; + manifest.checksum = hex::encode(Sha256::digest(vault).as_slice()); writer .add_file(path.to_string_lossy().as_ref(), vault) .await?; @@ -121,7 +136,8 @@ async fn set_identity( /// Add a vault to the archive. async fn add_vault( - writer: &mut ZipWriter>, ManifestVersion1>, + writer: &mut ZipWriter>>, + manifest: &mut ManifestVersion1, vault_id: VaultId, vault: &[u8], ) -> Result<()> { @@ -129,7 +145,7 @@ async fn add_vault( path.set_extension(VAULT_EXT); let checksum = hex::encode(Sha256::digest(vault).as_slice()); - writer.manifest_mut().vaults.insert(vault_id, checksum); + manifest.vaults.insert(vault_id, checksum); writer .add_file(path.to_string_lossy().as_ref(), vault) .await?; @@ -139,13 +155,14 @@ async fn add_vault( /// Add a devices vault to the archive. async fn add_devices( - writer: &mut ZipWriter>, ManifestVersion1>, + writer: &mut ZipWriter>>, + manifest: &mut ManifestVersion1, vault: &[u8], events: &[u8], ) -> Result<()> { let vault_checksum = hex::encode(Sha256::digest(vault).as_slice()); let event_checksum = hex::encode(Sha256::digest(events).as_slice()); - writer.manifest_mut().devices = Some((vault_checksum, event_checksum)); + manifest.devices = Some((vault_checksum, event_checksum)); // Create the device vault file let mut path = PathBuf::from(DEVICE_FILE); @@ -166,11 +183,12 @@ async fn add_devices( /// Add account events to the archive. async fn add_account_events( - writer: &mut ZipWriter>, ManifestVersion1>, + writer: &mut ZipWriter>>, + manifest: &mut ManifestVersion1, events: &[u8], ) -> Result<()> { let event_checksum = hex::encode(Sha256::digest(events).as_slice()); - writer.manifest_mut().account = Some(event_checksum); + manifest.account = Some(event_checksum); // Create the account events file let mut path = PathBuf::from(ACCOUNT_EVENTS); @@ -184,11 +202,12 @@ async fn add_account_events( /// Add file events to the archive. async fn add_file_events( - writer: &mut ZipWriter>, ManifestVersion1>, + writer: &mut ZipWriter>>, + manifest: &mut ManifestVersion1, events: &[u8], ) -> Result<()> { let event_checksum = hex::encode(Sha256::digest(events).as_slice()); - writer.manifest_mut().files = Some(event_checksum); + manifest.files = Some(event_checksum); // Create the file events file let mut path = PathBuf::from(FILE_EVENTS); @@ -202,11 +221,12 @@ async fn add_file_events( /// Add account-specific preferences. async fn add_preferences( - writer: &mut ZipWriter>, ManifestVersion1>, + writer: &mut ZipWriter>>, + manifest: &mut ManifestVersion1, prefs: &[u8], ) -> Result<()> { let checksum = hex::encode(Sha256::digest(prefs).as_slice()); - writer.manifest_mut().preferences = Some(checksum); + manifest.preferences = Some(checksum); // Create the file events file let mut path = PathBuf::from(PREFERENCES_FILE); @@ -221,11 +241,12 @@ async fn add_preferences( /// Add remote server settings. async fn add_remote_servers( - writer: &mut ZipWriter>, ManifestVersion1>, + writer: &mut ZipWriter>>, + manifest: &mut ManifestVersion1, remotes: &[u8], ) -> Result<()> { let checksum = hex::encode(Sha256::digest(remotes).as_slice()); - writer.manifest_mut().remotes = Some(checksum); + manifest.remotes = Some(checksum); // Create the file events file let mut path = PathBuf::from(REMOTES_FILE); diff --git a/crates/filesystem/src/archive/import.rs b/crates/filesystem/src/archive/import.rs index 616c80c096..85ced1333c 100644 --- a/crates/filesystem/src/archive/import.rs +++ b/crates/filesystem/src/archive/import.rs @@ -6,6 +6,8 @@ use crate::{write_exclusive, FolderEventLog, VaultFileWriter}; use hex; use sha2::{Digest, Sha256}; use sos_archive::{sanitize_file_path, ZipReader}; +use sos_core::events::EventLogType; +use sos_core::AccountId; use sos_core::{ constants::{ ACCOUNT_EVENTS, DEVICE_FILE, EVENT_LOG_EXT, FILES_DIR, FILE_EVENTS, @@ -55,8 +57,8 @@ async fn import_archive_reader( )); } - let address_path = restore_targets.manifest.account_id; - let paths = paths.with_account_id(&address_path); + let account_id = restore_targets.manifest.account_id; + let paths = paths.with_account_id(&account_id); // Write out the identity vault let identity_vault: Vault = decode(&restore_targets.identity.1).await?; @@ -65,8 +67,12 @@ async fn import_archive_reader( // Write out the identity event log file let (_, events) = FolderReducer::split::(identity_vault).await?; - let mut event_log = - FolderEventLog::::new_folder(paths.identity_events()).await?; + let mut event_log = FolderEventLog::::new_folder( + paths.identity_events(), + account_id, + EventLogType::Identity, + ) + .await?; event_log.apply(events.as_slice()).await?; // Check if the identity name already exists @@ -97,7 +103,8 @@ async fn import_archive_reader( vfs::create_dir_all(&vaults_dir).await?; restore_system(&paths, &restore_targets).await?; - restore_user_folders(&paths, &restore_targets.vaults).await?; + restore_user_folders(&paths, &account_id, &restore_targets.vaults) + .await?; let account = PublicIdentity::new(restore_targets.manifest.account_id, label); Ok(account) @@ -105,12 +112,14 @@ async fn import_archive_reader( async fn restore_user_folders( paths: &Paths, + account_id: &AccountId, vaults: &Vec<(Vec, Vault)>, ) -> Result<()> { // Write out each vault and the event log for (buffer, vault) in vaults { - let vault_path = paths.vault_path(vault.id()); - let event_log_path = paths.event_log_path(vault.id()); + let folder_id = *vault.id(); + let vault_path = paths.vault_path(&folder_id); + let event_log_path = paths.event_log_path(&folder_id); // Write out the vault buffer write_exclusive(&vault_path, buffer).await?; @@ -119,8 +128,12 @@ async fn restore_user_folders( FolderReducer::split::(vault.clone()).await?; // Write out the event log file - let mut event_log = - FolderEventLog::::new_folder(event_log_path).await?; + let mut event_log = FolderEventLog::::new_folder( + event_log_path, + *account_id, + EventLogType::Folder(folder_id), + ) + .await?; event_log.apply(events.as_slice()).await?; } diff --git a/crates/filesystem/src/audit_provider.rs b/crates/filesystem/src/audit_provider.rs index f7b5b7f752..4424a09dad 100644 --- a/crates/filesystem/src/audit_provider.rs +++ b/crates/filesystem/src/audit_provider.rs @@ -222,6 +222,9 @@ where let it_file = self.file.clone(); tokio::task::spawn(async move { while let Some(record) = it.next().await? { + if tx.is_closed() { + break; + } let mut inner = it_file.lock().await; let event = inner.read_event(&record).await?; if let Err(e) = tx.send(Ok(event)).await { diff --git a/crates/filesystem/src/event_log.rs b/crates/filesystem/src/event_log.rs index c371450ebf..495ca0ef17 100644 --- a/crates/filesystem/src/event_log.rs +++ b/crates/filesystem/src/event_log.rs @@ -25,13 +25,16 @@ use async_trait::async_trait; use binary_stream::futures::{BinaryReader, Decodable, Encodable}; use futures::{stream::BoxStream, StreamExt, TryStreamExt}; use sos_core::{ - commit::{CommitHash, CommitProof, CommitTree, Comparison}, + commit::{CommitHash, CommitProof, CommitSpan, CommitTree, Comparison}, encode, encoding::{encoding_options, VERSION1}, events::{ + changes_feed, patch::{CheckedPatch, Diff, Patch}, - AccountEvent, DeviceEvent, EventRecord, WriteEvent, + AccountEvent, DeviceEvent, EventLogType, EventRecord, + LocalChangeEvent, WriteEvent, }, + AccountId, }; use sos_vfs::{self as vfs, File, OpenOptions}; use std::result::Result as StdResult; @@ -103,6 +106,8 @@ where + Sync + 'static, { + account_id: AccountId, + log_type: EventLogType, tree: CommitTree, data: PathBuf, identity: &'static [u8], @@ -137,6 +142,9 @@ where let file_path = self.data.clone(); tokio::task::spawn(async move { while let Some(record) = it.next().await? { + if tx.is_closed() { + break; + } let event_buffer = read_event_buffer(file_path.clone(), &record).await?; let event_record = record.into_event_record(event_buffer); @@ -291,6 +299,15 @@ where &mut self, records: Vec, ) -> StdResult<(), Self::Error> { + if records.is_empty() { + return Ok(()); + } + + let mut span = CommitSpan { + before: self.tree.last_commit(), + after: None, + }; + let mut buffer: Vec = Vec::new(); let mut commits = Vec::new(); let mut last_commit_hash = self.tree().last_commit(); @@ -328,6 +345,17 @@ where commits.iter().map(|c| *c.as_ref()).collect::>(); self.tree.append(&mut hashes); self.tree.commit(); + + span.after = self.tree.last_commit(); + + changes_feed().send_replace( + LocalChangeEvent::AccountModified { + account_id: self.account_id, + log_type: self.log_type, + commit_span: span, + }, + ); + Ok(()) } Err(e) => Err(e.into()), @@ -662,7 +690,11 @@ where + 'static, { /// Create a new folder event log file. - pub async fn new_folder>(path: P) -> StdResult { + pub async fn new_folder>( + path: P, + account_id: AccountId, + log_type: EventLogType, + ) -> StdResult { use sos_core::constants::FOLDER_EVENT_LOG_IDENTITY; // Note that for backwards compatibility we don't // encode a version, later we will need to upgrade @@ -680,6 +712,8 @@ where Ok(Self { data: path.as_ref().to_path_buf(), tree: Default::default(), + log_type, + account_id, identity: &FOLDER_EVENT_LOG_IDENTITY, version: None, phantom: std::marker::PhantomData, @@ -699,7 +733,10 @@ where + 'static, { /// Create a new account event log file. - pub async fn new_account>(path: P) -> StdResult { + pub async fn new_account>( + path: P, + account_id: AccountId, + ) -> StdResult { use sos_core::{ constants::ACCOUNT_EVENT_LOG_IDENTITY, encoding::VERSION, }; @@ -714,6 +751,8 @@ where .await?; Ok(Self { + account_id, + log_type: EventLogType::Account, data: path.as_ref().to_path_buf(), tree: Default::default(), identity: &ACCOUNT_EVENT_LOG_IDENTITY, @@ -735,7 +774,10 @@ where + 'static, { /// Create a new device event log file. - pub async fn new_device(path: impl AsRef) -> StdResult { + pub async fn new_device( + path: impl AsRef, + account_id: AccountId, + ) -> StdResult { use sos_core::{ constants::DEVICE_EVENT_LOG_IDENTITY, encoding::VERSION, }; @@ -751,6 +793,8 @@ where .await?; Ok(Self { + log_type: EventLogType::Device, + account_id, data: path.as_ref().to_path_buf(), tree: Default::default(), identity: &DEVICE_EVENT_LOG_IDENTITY, @@ -773,7 +817,10 @@ where + 'static, { /// Create a new file event log file. - pub async fn new_file(path: impl AsRef) -> StdResult { + pub async fn new_file( + path: impl AsRef, + account_id: AccountId, + ) -> StdResult { use sos_core::{ constants::FILE_EVENT_LOG_IDENTITY, encoding::VERSION, }; @@ -789,6 +836,8 @@ where .await?; Ok(Self { + account_id, + log_type: EventLogType::Files, data: path.as_ref().to_path_buf(), tree: Default::default(), identity: &FILE_EVENT_LOG_IDENTITY, diff --git a/crates/integrity/Cargo.toml b/crates/integrity/Cargo.toml index 4e7862343b..607fe43dce 100644 --- a/crates/integrity/Cargo.toml +++ b/crates/integrity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-integrity" -version = "0.17.1" +version = "0.17.2" edition = "2021" description = "Integrity checks for the Save Our Secrets SDK." homepage = "https://saveoursecrets.com" diff --git a/crates/ipc/Cargo.toml b/crates/ipc/Cargo.toml index 69008fda30..19f8536589 100644 --- a/crates/ipc/Cargo.toml +++ b/crates/ipc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-ipc" -version = "0.17.0" +version = "0.17.1" edition = "2021" description = "Inter-process communication for the Save Our Secrets SDK." homepage = "https://saveoursecrets.com" @@ -16,6 +16,7 @@ local-transport = [ "serde_with", "async-trait", ] + memory-http-server = [] clipboard = ["sos-account/clipboard"] contacts = ["sos-protocol/contacts"] @@ -57,6 +58,7 @@ extension-helper-client = [ [dependencies] sos-account.workspace = true sos-core.workspace = true +sos-changes.workspace = true sos-client-storage.workspace = true sos-backend.workspace = true sos-database.workspace = true diff --git a/crates/ipc/src/error.rs b/crates/ipc/src/error.rs index 598003bf10..6c681c543a 100644 --- a/crates/ipc/src/error.rs +++ b/crates/ipc/src/error.rs @@ -75,6 +75,10 @@ pub enum Error { #[error(transparent)] Network(#[from] sos_protocol::NetworkError), + /// Errors generated by the changes library. + #[error(transparent)] + Changes(#[from] sos_changes::Error), + /// Errors generated on conflict. #[error(transparent)] Conflict(#[from] sos_protocol::ConflictError), diff --git a/crates/ipc/src/extension_helper/server.rs b/crates/ipc/src/extension_helper/server.rs index a5e27e4ca7..b47a7b1fcd 100644 --- a/crates/ipc/src/extension_helper/server.rs +++ b/crates/ipc/src/extension_helper/server.rs @@ -12,7 +12,8 @@ use http::{ StatusCode, }; use sos_account::{Account, AccountSwitcher}; -use sos_core::ErrorExt; +use sos_changes::consumer::ChangeConsumer; +use sos_core::{events::LocalChangeEvent, ErrorExt, Paths}; use sos_login::DelegatedAccess; use sos_logs::Logger; use sos_protocol::{constants::MIME_TYPE_JSON, ErrorReply}; @@ -98,6 +99,7 @@ where pub async fn new( options: ExtensionHelperOptions, accounts: Arc>>, + change_handler: impl Fn(LocalChangeEvent) + Send + Sync + 'static, ) -> Result { let log_level = std::env::var("SOS_NATIVE_BRIDGE_LOG_LEVEL") .map(|s| s.to_string()) @@ -113,8 +115,15 @@ where } tracing::info!(options = ?options, "extension_helper"); - + let paths = { + let accounts = accounts.read().await; + accounts.paths().unwrap_or_else(|| { + Paths::new_client(Paths::data_dir().unwrap()) + }) + }; let accounts = WebAccounts::new(accounts); + let changes_consumer = ChangeConsumer::listen(paths.clone())?; + accounts.listen_changes(changes_consumer, paths, change_handler)?; let client = LocalMemoryServer::listen( accounts.clone(), options.service_info.clone(), diff --git a/crates/ipc/src/memory_server.rs b/crates/ipc/src/memory_server.rs index c5c4032a93..bca2976cf3 100644 --- a/crates/ipc/src/memory_server.rs +++ b/crates/ipc/src/memory_server.rs @@ -72,35 +72,6 @@ impl LocalMemoryClient { let response = Response::from_parts(header, Full::new(bytes)); Ok(response) } - - /* - /// Get application information. - pub async fn info(&mut self) -> Result { - let response = self.send_request(Default::default()).await?; - let status = response.status()?; - if status.is_success() { - let app_info: ServiceAppInfo = - serde_json::from_slice(&response.body)?; - Ok(app_info) - } else { - Err(NetworkError::ResponseCode(status).into()) - } - } - - /// List accounts. - pub async fn list_accounts(&mut self) -> Result> { - let request = LocalRequest::get("/accounts".parse()?); - let response = self.send_request(request).await?; - let status = response.status()?; - if status.is_success() { - let accounts: Vec = - serde_json::from_slice(&response.body)?; - Ok(accounts) - } else { - Err(NetworkError::ResponseCode(status).into()) - } - } - */ } /// Server for in-memory communication. diff --git a/crates/ipc/src/web_service/account.rs b/crates/ipc/src/web_service/account.rs index 77590b2f28..540770308a 100644 --- a/crates/ipc/src/web_service/account.rs +++ b/crates/ipc/src/web_service/account.rs @@ -215,6 +215,8 @@ where keyring_password_supported = %keyring_password::supported(), ); + tracing::info!(account_id = %account_id, "sign_in"); + match find_account_credential(&account_id.to_string()).await { Ok(password) => { sign_in_password(accounts, account_id, password, false).await @@ -232,7 +234,7 @@ where /// Sign in to an account pub async fn sign_in_password( - accounts: WebAccounts, + mut accounts: WebAccounts, account_id: AccountId, password: SecretString, save_password: bool, @@ -257,52 +259,43 @@ where + 'static, { use sos_platform_authenticator::keyring_password; + { + let mut user_accounts = accounts.as_ref().write().await; + let Some(account) = user_accounts + .iter_mut() + .find(|a| a.account_id() == &account_id) + else { + return status(StatusCode::NOT_FOUND); + }; - let mut user_accounts = accounts.as_ref().write().await; - let Some(account) = user_accounts - .iter_mut() - .find(|a| a.account_id() == &account_id) - else { - return status(StatusCode::NOT_FOUND); - }; - - let key: AccessKey = password.clone().into(); - - let folder_ids = if let Ok(folders) = account.list_folders().await { - folders.into_iter().map(|f| *f.id()).collect::>() - } else { - vec![] - }; + let key: AccessKey = password.clone().into(); - match account.sign_in(&key).await { - Ok(_) => { - if let Err(e) = - accounts.watch(account_id, account.paths(), folder_ids) - { - tracing::error!(error = ?e); + match account.sign_in(&key).await { + Ok(_) => {} + Err(e) => { + if e.is_permission_denied() { + return status(StatusCode::FORBIDDEN); + } else { + return internal_server_error(e); + } } } - Err(e) => { - if e.is_permission_denied() { - return status(StatusCode::FORBIDDEN); - } else { + + if let Err(e) = account.initialize_search_index().await { + return internal_server_error(e); + } + + if save_password && keyring_password::supported() { + if let Err(e) = keyring_password::save_account_password( + &account_id.to_string(), + password, + ) { return internal_server_error(e); } } } - if let Err(e) = account.initialize_search_index().await { - return internal_server_error(e); - } - - if save_password && keyring_password::supported() { - if let Err(e) = keyring_password::save_account_password( - &account_id.to_string(), - password, - ) { - return internal_server_error(e); - } - } + accounts.watch(account_id); status(StatusCode::OK) } @@ -373,7 +366,7 @@ where /// Sign out of an account pub async fn sign_out( - accounts: WebAccounts, + mut accounts: WebAccounts, account_id: Option, ) -> hyper::Result> where @@ -395,61 +388,55 @@ where + Sync + 'static, { - let mut user_accounts = accounts.as_ref().write().await; if let Some(account_id) = account_id { - let Some(account) = user_accounts - .iter_mut() - .find(|a| a.account_id() == &account_id) - else { - return status(StatusCode::NOT_FOUND); - }; - - let folder_ids = if let Ok(folders) = account.list_folders().await { - folders.into_iter().map(|f| *f.id()).collect::>() - } else { - vec![] - }; + { + let mut user_accounts = accounts.as_ref().write().await; + let Some(account) = user_accounts + .iter_mut() + .find(|a| a.account_id() == &account_id) + else { + return status(StatusCode::NOT_FOUND); + }; - match account.sign_out().await { - Ok(_) => { - if let Err(e) = - accounts.unwatch(&account_id, account.paths(), folder_ids) - { - return internal_server_error(e); - } - status(StatusCode::OK) + match account.sign_out().await { + Ok(_) => {} + Err(e) => return internal_server_error(e), } - Err(e) => internal_server_error(e), } + + accounts.unwatch(&account_id); + status(StatusCode::OK) } else { - let mut account_info = Vec::new(); - for account in user_accounts.iter() { - let folder_ids = if let Ok(folders) = account.list_folders().await - { - folders.into_iter().map(|f| *f.id()).collect::>() - } else { - vec![] - }; + let account_info = { + let mut user_accounts = accounts.as_ref().write().await; + let mut account_info = Vec::new(); + for account in user_accounts.iter() { + let folder_ids = if let Ok(folders) = + account.list_folders().await + { + folders.into_iter().map(|f| *f.id()).collect::>() + } else { + vec![] + }; - account_info.push(( - *account.account_id(), - account.paths(), - folder_ids, - )); - } + account_info.push(( + *account.account_id(), + account.paths(), + folder_ids, + )); + } - match user_accounts.sign_out_all().await { - Ok(_) => { - for (account_id, paths, folder_ids) in account_info { - if let Err(e) = - accounts.unwatch(&account_id, paths, folder_ids) - { - return internal_server_error(e); - } - } - status(StatusCode::OK) + match user_accounts.sign_out_all().await { + Ok(_) => {} + Err(e) => return internal_server_error(e), } - Err(e) => internal_server_error(e), + account_info + }; + + for (account_id, _, _) in account_info { + accounts.unwatch(&account_id); } + + status(StatusCode::OK) } } diff --git a/crates/ipc/src/web_service/mod.rs b/crates/ipc/src/web_service/mod.rs index 695f86be39..7221cc7cde 100644 --- a/crates/ipc/src/web_service/mod.rs +++ b/crates/ipc/src/web_service/mod.rs @@ -28,14 +28,16 @@ mod common; mod helpers; mod search; mod secret; -mod web_accounts; +// mod web_accounts; +mod web_accounts2; use account::*; use common::*; use helpers::*; use search::*; use secret::*; -pub use web_accounts::*; +// pub use web_accounts::*; +pub use web_accounts2::*; async fn index( app_info: Arc, diff --git a/crates/ipc/src/web_service/web_accounts2.rs b/crates/ipc/src/web_service/web_accounts2.rs new file mode 100644 index 0000000000..81589031e8 --- /dev/null +++ b/crates/ipc/src/web_service/web_accounts2.rs @@ -0,0 +1,578 @@ +use crate::{Error, FileEventError, Result}; +use serde::{Deserialize, Serialize}; +use sos_account::{Account, AccountSwitcher}; +use sos_backend::BackendTarget; +use sos_changes::consumer::ConsumerHandle; +use sos_core::{ + events::{ + AccountEvent, EventLog, EventLogType, LocalChangeEvent, WriteEvent, + }, + AccountId, ErrorExt, Paths, VaultId, +}; +use sos_login::DelegatedAccess; +use sos_sync::SyncStorage; +use sos_vault::SecretAccess; +use std::{collections::HashSet, sync::Arc}; +use tokio::sync::{broadcast, RwLock}; + +/// Event broadcast when an account changes. +#[typeshare::typeshare] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct AccountChangeEvent { + /// Account identifier. + pub account_id: AccountId, + /// Event records with information about the changes. + pub records: ChangeRecords, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub enum ChangeRecords { + /// Account level events. + Account(Vec), + /// Folder level events. + Folder(VaultId, Vec), +} + +impl ChangeRecords { + /// Determine if the records are empty. + pub fn is_empty(&self) -> bool { + match self { + Self::Account(records) => records.is_empty(), + Self::Folder(_, records) => records.is_empty(), + } + } +} + +/// User accounts for the web service. +pub struct WebAccounts +where + A: Account + SyncStorage, + R: 'static, + E: std::fmt::Debug + + std::error::Error + + ErrorExt + + From + + From + + From + + From + + From + + From + + From + + Send + + Sync + + 'static, +{ + accounts: Arc>>, + watched_accounts: HashSet, + channel: broadcast::Sender, +} + +impl Clone for WebAccounts +where + A: Account + SyncStorage, + R: 'static, + E: std::fmt::Debug + + std::error::Error + + ErrorExt + + From + + From + + From + + From + + From + + From + + From + + Send + + Sync + + 'static, +{ + fn clone(&self) -> Self { + Self { + accounts: self.accounts.clone(), + watched_accounts: self.watched_accounts.clone(), + channel: self.channel.clone(), + } + } +} + +impl WebAccounts +where + A: Account + + SyncStorage + + DelegatedAccess, + R: 'static, + E: std::fmt::Debug + + std::error::Error + + ErrorExt + + From + + From + + From + + From + + From + + From + + From + + Send + + Sync + + 'static, +{ + /// Create new accounts. + pub fn new(accounts: Arc>>) -> Self { + let (tx, _) = broadcast::channel::(64); + Self { + accounts, + watched_accounts: HashSet::new(), + channel: tx, + } + } + + /// Create a backend target for the accounts. + pub async fn backend_target(&self) -> Result { + let accounts = self.accounts.read().await; + let paths = if let Some(paths) = accounts.paths() { + paths + } else { + Paths::new_client(Paths::data_dir().unwrap()) + }; + Ok(BackendTarget::from_paths(&paths).await?) + } + + /// Subscribe to change events. + pub fn subscribe(&self) -> broadcast::Receiver { + self.channel.subscribe() + } + + /// Start listening for changes. + pub fn listen_changes( + &self, + mut changes_consumer: ConsumerHandle, + paths: Arc, + change_handler: impl Fn(LocalChangeEvent) + Send + Sync + 'static, + ) -> Result<()> { + // Start a background task to listen for change events + let channel = self.channel.clone(); + let task_accounts = self.accounts.clone(); + + tokio::task::spawn(async move { + let receiver = changes_consumer.changes(); + + while let Some(event) = receiver.recv().await { + tracing::debug!( + event = ?event, + "change_consumer::event_received" + ); + + if let Err(e) = process_change_event( + &event, + AccountId::default(), + paths.clone(), + task_accounts.clone(), + channel.clone(), + ) + .await + { + tracing::error!(error = %e, "process_change_event"); + } + + change_handler(event); + } + + tracing::debug!("consumer_task_completed"); + }); + + Ok(()) + } + + /// Start watching an account for changes. + pub fn watch(&mut self, account_id: AccountId) { + self.watched_accounts.insert(account_id); + } + + /// Stop watching for changes. + pub fn unwatch(&mut self, account_id: &AccountId) { + self.watched_accounts.remove(account_id); + } +} + +impl AsRef>>> + for WebAccounts +where + A: Account + SyncStorage, + R: 'static, + E: std::fmt::Debug + + std::error::Error + + ErrorExt + + From + + From + + From + + From + + From + + From + + From + + Send + + Sync + + 'static, +{ + fn as_ref(&self) -> &Arc>> { + &self.accounts + } +} + +/// Process change events and update the system state accordingly +async fn process_change_event( + event: &LocalChangeEvent, + _account_id: AccountId, + _paths: Arc, + accounts: Arc>>, + channel: broadcast::Sender, +) -> Result<()> +where + A: Account + + SyncStorage + + DelegatedAccess + + Sync + + Send + + 'static, + R: 'static, + E: std::fmt::Debug + + std::error::Error + + ErrorExt + + From + + From + + From + + From + + From + + From + + From + + Send + + Sync + + 'static, +{ + match event { + LocalChangeEvent::Init => { + // Just initialization, nothing to do + Ok(()) + } + LocalChangeEvent::AccountCreated(account_id) => { + // New account created + // NOTE: This would need implementation if we want to handle new accounts + tracing::debug!(account_id = %account_id, "account_created_event"); + // TODO: Implement account creation handling if needed + Ok(()) + } + LocalChangeEvent::AccountDeleted(account_id) => { + // Account deleted + tracing::debug!(account_id = %account_id, "account_deleted_event"); + // TODO: Implement account deletion handling if needed + Ok(()) + } + LocalChangeEvent::AccountModified { + account_id, + log_type, + commit_span: _, + } => { + // Account was modified - process changes based on log_type + tracing::debug!(account_id = %account_id, log_type = ?log_type, "account_modified_event"); + + match log_type { + EventLogType::Identity + | EventLogType::Account + | EventLogType::Device => { + // Account-level changes + let mut accounts_lock = accounts.write().await; + let account = accounts_lock + .iter_mut() + .find(|a| a.account_id() == account_id) + .ok_or(Error::from(FileEventError::NoAccount( + account_id.clone(), + )))?; + + // Reload the identity folder for account-level changes + account.reload_login_folder().await.map_err(|e| { + Error::from(FileEventError::ReloadIdentityFolder( + e.to_string(), + )) + })?; + + // Load account events + let records = load_account_records(account).await?; + + // Update folders in memory + tracing::debug!("account_change::load_folders"); + if let Err(e) = account.load_folders().await { + tracing::error!(error = %e, "load_folders_error"); + } + + // Update search index + let records_clone = + ChangeRecords::Account(records.clone()); + update_account_search_index(account, &records_clone) + .await + .map_err(|e| { + Error::from(FileEventError::UpdateSearchIndex( + e.to_string(), + )) + })?; + + // Send event if there are records + if !records.is_empty() { + let evt = AccountChangeEvent { + account_id: account_id.clone(), + records: ChangeRecords::Account(records), + }; + if let Err(e) = channel.send(evt) { + tracing::error!(error = ?e, "account_channel::send"); + } + } + Ok(()) + } + EventLogType::Folder(folder_id) => { + // Folder-level changes + let accounts_lock = accounts.read().await; + let account = accounts_lock + .iter() + .find(|a| a.account_id() == account_id) + .ok_or(Error::from(FileEventError::NoAccount( + account_id.clone(), + )))?; + + let folder = + account.folder(&folder_id).await.ok().ok_or( + Error::from(FileEventError::NoFolder(*folder_id)), + )?; + + let event_log = folder.event_log(); + let mut event_log = event_log.write().await; + let commit = event_log.tree().last_commit(); + let patch = + event_log.diff_events(commit.as_ref()).await?; + let records = patch.into_events::().await?; + + event_log.load_tree().await?; + + // Update search index for folder changes + { + let mut accounts_lock = accounts.write().await; + if let Some(account) = accounts_lock + .iter_mut() + .find(|a| a.account_id() == account_id) + { + let records_clone = ChangeRecords::Folder( + *folder_id, + records.clone(), + ); + update_account_search_index( + account, + &records_clone, + ) + .await + .map_err(|e| { + Error::from( + FileEventError::UpdateSearchIndex( + e.to_string(), + ), + ) + })?; + } + } + + // Send event if there are records + if !records.is_empty() { + let evt = AccountChangeEvent { + account_id: account_id.clone(), + records: ChangeRecords::Folder( + *folder_id, records, + ), + }; + if let Err(e) = channel.send(evt) { + tracing::error!(error = ?e, "account_channel::send"); + } + } + + Ok(()) + } + #[cfg(feature = "files")] + EventLogType::Files => { + // No need to handle file change events + Ok(()) + } + } + } + } +} + +/// Update the search index for an account. +async fn update_account_search_index( + account: &mut A, + records: &ChangeRecords, +) -> std::result::Result<(), E> +where + A: Account + + SyncStorage + + DelegatedAccess, + R: 'static, + E: std::fmt::Debug + + std::error::Error + + ErrorExt + + From + + From + + From + + From + + From + + From + + From + + Send + + Sync + + 'static, +{ + let paths = account.paths(); + let index = account.search_index().await?; + + let folder_ids = match records { + ChangeRecords::Account(events) => { + let mut folder_ids = Vec::new(); + for event in events { + match event { + AccountEvent::CreateFolder(folder_id, _) => { + folder_ids.push(*folder_id); + } + AccountEvent::DeleteFolder(folder_id) => { + folder_ids.push(*folder_id) + } + _ => {} + } + } + folder_ids + } + ChangeRecords::Folder(folder_id, _) => vec![*folder_id], + }; + + for folder_id in folder_ids { + match records { + ChangeRecords::Account(events) => { + for event in events { + match event { + AccountEvent::CreateFolder(_, _) => { + // Find the folder password which should be available + // as the identity folder has been reloaded already + let key = account + .find_folder_password(&folder_id) + .await? + .ok_or( + sos_account::Error::NoFolderPassword( + folder_id, + ), + )?; + // Import the vault into the account + account + .import_folder( + paths.vault_path(&folder_id), + key, + true, + ) + .await?; + + // Now the storage should have the folder so + // we can access the access point and add it to + // the search index + if let Some(folder) = + account.folder(&folder_id).await.ok() + { + let access_point = folder.access_point(); + let access_point = access_point.lock().await; + let mut index = index.write().await; + index.add_folder(&*access_point).await?; + } + } + AccountEvent::DeleteFolder(_) => { + let mut index = index.write().await; + index.remove_vault(&folder_id); + } + _ => {} + } + } + } + ChangeRecords::Folder(folder_id, events) => { + if let Some(folder) = account.folder(&folder_id).await.ok() { + let access_point = folder.access_point(); + let mut access_point = access_point.lock().await; + + // Must reload the vault before updating the + // search index + let path = paths.vault_path(folder_id); + access_point.reload_vault(path).await?; + + for event in events { + match event { + WriteEvent::CreateSecret(secret_id, _) => { + if let Some((meta, secret, _)) = access_point + .read_secret(secret_id) + .await? + { + let mut index = index.write().await; + index.add( + folder_id, secret_id, &meta, &secret, + ); + } + } + WriteEvent::UpdateSecret(secret_id, _) => { + if let Some((meta, secret, _)) = access_point + .read_secret(secret_id) + .await? + { + let mut index = index.write().await; + index.update( + folder_id, secret_id, &meta, &secret, + ); + } + } + WriteEvent::DeleteSecret(secret_id) => { + let mut index = index.write().await; + index.remove(folder_id, secret_id); + } + _ => {} + } + } + } + } + } + } + + Ok(()) +} + +async fn load_account_records( + account: &A, +) -> Result> +where + A: Account + + SyncStorage + + Sync + + Send + + 'static, + R: 'static, + E: std::fmt::Debug + + std::error::Error + + ErrorExt + + From + + From + + From + + From + + From + + From + + From + + Send + + Sync + + 'static, +{ + // FIXME: update the error handling to avoid the unwrap + let account_log = account.account_log().await.unwrap(); + let mut event_log = account_log.write().await; + let commit = event_log.tree().last_commit(); + + let patch = event_log.diff_events(commit.as_ref()).await?; + let records = patch.into_events::().await?; + + event_log.load_tree().await?; + Ok(records) +} diff --git a/crates/keychain_parser/src/parser.rs b/crates/keychain_parser/src/parser.rs index da0b18fc60..3f02922862 100644 --- a/crates/keychain_parser/src/parser.rs +++ b/crates/keychain_parser/src/parser.rs @@ -54,10 +54,10 @@ pub fn unescape_octal(value: &str) -> Result> { } /// Parse a plist and extract the value for a secure note. -pub fn plist_secure_note( - value: &str, +pub fn plist_secure_note<'a>( + value: &'a str, unescape: bool, -) -> Result>> { +) -> Result>> { let plist = if unescape { unescape_octal(value)? } else { @@ -528,7 +528,7 @@ impl<'s> KeychainEntry<'s> { /// Attempt to get the entry data as a string /// for the generic password class. - pub fn generic_data(&self) -> Result>> { + pub fn generic_data<'a>(&'a self) -> Result>> { if let Some(data) = &self.data { if let Some(EntryClass::GenericPassword) = self.class { if self.is_note() { diff --git a/crates/login/Cargo.toml b/crates/login/Cargo.toml index 0159cb58a5..df19a17228 100644 --- a/crates/login/Cargo.toml +++ b/crates/login/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-login" -version = "0.17.2" +version = "0.17.3" edition = "2021" description = "Login authentication for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/login/src/identity_folder.rs b/crates/login/src/identity_folder.rs index 51a4549dd4..8f9f0ca334 100644 --- a/crates/login/src/identity_folder.rs +++ b/crates/login/src/identity_folder.rs @@ -14,8 +14,9 @@ use sos_backend::{ AccessPoint, BackendTarget, Folder, FolderEventLog, }; use sos_core::{ - constants::LOGIN_AGE_KEY_URN, crypto::AccessKey, encode, AccountId, - AuthenticationError, VaultFlags, VaultId, + constants::LOGIN_AGE_KEY_URN, crypto::AccessKey, encode, + events::EventLogType, AccountId, AuthenticationError, VaultFlags, + VaultId, }; use sos_filesystem::write_exclusive; use sos_vault::Summary; @@ -66,7 +67,12 @@ impl IdentityFolder { BackendTarget::FileSystem(paths) => { let buffer = encode(&vault).await?; write_exclusive(paths.identity_vault(), buffer).await?; - Folder::from_path(paths.identity_vault()).await? + Folder::from_path( + paths.identity_vault(), + &account_id, + EventLogType::Identity, + ) + .await? } BackendTarget::Database(_, client) => { let account_row = AccountRow::new_insert(&account_id, name)?; @@ -466,7 +472,12 @@ impl IdentityFolder { let target = target.clone().with_account_id(account_id); let mut folder = match &target { BackendTarget::FileSystem(paths) => { - Folder::from_path(paths.identity_vault()).await? + Folder::from_path( + paths.identity_vault(), + account_id, + EventLogType::Identity, + ) + .await? } BackendTarget::Database(_, client) => { let (_, login_folder) = diff --git a/crates/logs/Cargo.toml b/crates/logs/Cargo.toml index db00036010..42cbdddacb 100644 --- a/crates/logs/Cargo.toml +++ b/crates/logs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-logs" -version = "0.17.0" +version = "0.17.2" edition = "2021" description = "Log file helpers for the Save Our Secrets SDK." homepage = "https://saveoursecrets.com" diff --git a/crates/logs/src/lib.rs b/crates/logs/src/lib.rs index 3f851d6335..91895260b3 100644 --- a/crates/logs/src/lib.rs +++ b/crates/logs/src/lib.rs @@ -6,6 +6,6 @@ mod error; mod logger; pub use error::Error; -pub use logger::{LogFileStatus, Logger}; +pub use logger::{LogFileStatus, Logger, LOG_FILE_NAME}; pub(crate) type Result = std::result::Result; diff --git a/crates/logs/src/logger.rs b/crates/logs/src/logger.rs index a8fc45807a..9f87942631 100644 --- a/crates/logs/src/logger.rs +++ b/crates/logs/src/logger.rs @@ -12,9 +12,12 @@ use time::OffsetDateTime; use tracing_appender::rolling::{RollingFileAppender, Rotation}; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; -const LOG_FILE_NAME: &str = "saveoursecrets.log"; +/// File name prefix for log files. +#[doc(hidden)] +pub const LOG_FILE_NAME: &str = "saveoursecrets.log"; + const DEFAULT_LOG_LEVEL: &str = - "sos=info,sos_sdk=debug,sos_net=debug,sos_bindings=debug"; + "sos=info,sos_net=debug,sos_bindings=debug,sos_backend=debug,sos_database=debug,sos_protocol=debug,sos_app=debug,sos_database_upgrader=debug"; /// State of the log files on disc. pub struct LogFileStatus { diff --git a/crates/migrate/Cargo.toml b/crates/migrate/Cargo.toml index c2d266f30c..a2e7dc11c6 100644 --- a/crates/migrate/Cargo.toml +++ b/crates/migrate/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-migrate" -version = "0.17.0" +version = "0.17.1" edition = "2021" description = "Import and export for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/net/Cargo.toml b/crates/net/Cargo.toml index ba24dda58f..842fe368b1 100644 --- a/crates/net/Cargo.toml +++ b/crates/net/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-net" -version = "0.17.3" +version = "0.17.5" edition = "2021" description = "Networking library for the Save Our Secrets SDK." homepage = "https://saveoursecrets.com" diff --git a/crates/net/src/account/file_transfers/mod.rs b/crates/net/src/account/file_transfers/mod.rs index 1fbeb30f01..d361bc7c7f 100644 --- a/crates/net/src/account/file_transfers/mod.rs +++ b/crates/net/src/account/file_transfers/mod.rs @@ -194,21 +194,27 @@ impl FileTransfersHandle { /// Send a collection of items to be added to the queue. pub async fn send(&self, items: FileTransferQueueRequest) { - let res = self.queue_tx.send(items).await; - if let Err(error) = res { - tracing::warn!(error = ?error); + if let Err(error) = self.queue_tx.send(items).await { + tracing::warn!( + error = ?error, + "file_transfers::queue_send_error", + ); } } /// Shutdown the file transfers loop. pub async fn shutdown(self) { - let res = self.shutdown_tx.send(()).await; - if let Err(error) = res { - tracing::warn!(error = ?error); + if let Err(error) = self.shutdown_tx.send(()).await { + tracing::warn!( + error = ?error, + "file_transfers::shutdown_tx::send_error", + ); } - let res = self.shutdown_rx.await; - if let Err(error) = res { - tracing::warn!(error = ?error); + if let Err(error) = self.shutdown_rx.await { + tracing::warn!( + error = ?error, + "file_transfers::shutdown_tx::recv_error", + ); } } } diff --git a/crates/net/src/account/listen.rs b/crates/net/src/account/listen.rs index 5aee907df9..89b5a6c3dc 100644 --- a/crates/net/src/account/listen.rs +++ b/crates/net/src/account/listen.rs @@ -3,7 +3,7 @@ use crate::{Error, NetworkAccount, Result}; use sos_core::Origin; use sos_protocol::{ - network_client::ListenOptions, ChangeNotification, RemoteResult, + network_client::ListenOptions, NetworkChangeEvent, RemoteResult, RemoteSync, }; use sos_sync::SyncStorage; @@ -40,7 +40,7 @@ impl NetworkAccount { origin: &Origin, options: ListenOptions, listener: Option< - mpsc::Sender<(ChangeNotification, RemoteResult)>, + mpsc::Sender<(NetworkChangeEvent, RemoteResult)>, >, ) -> Result<()> { let remotes = self.remotes.read().await; @@ -48,7 +48,7 @@ impl NetworkAccount { self.stop_listening(&origin).await; let remote = Arc::new(remote.clone()); - let (tx, mut rx) = mpsc::channel::(32); + let (tx, mut rx) = mpsc::channel::(32); let local_account = Arc::clone(&self.account); let sync_lock = Arc::clone(&self.sync_lock); diff --git a/crates/net/src/account/remote.rs b/crates/net/src/account/remote.rs index 92c5f48510..b424f2a4df 100644 --- a/crates/net/src/account/remote.rs +++ b/crates/net/src/account/remote.rs @@ -204,7 +204,7 @@ mod listen { use crate::RemoteBridge; use sos_protocol::{ network_client::{ListenOptions, WebSocketHandle}, - ChangeNotification, + NetworkChangeEvent, }; use tokio::sync::mpsc; @@ -223,7 +223,7 @@ mod listen { pub(crate) fn listen( &self, options: ListenOptions, - channel: mpsc::Sender, + channel: mpsc::Sender, ) -> WebSocketHandle { let handle = self.client.listen(options, move |notification| { let tx = channel.clone(); diff --git a/crates/net/src/pairing/websocket.rs b/crates/net/src/pairing/websocket.rs index fb9e0cf406..95e2c22fcc 100644 --- a/crates/net/src/pairing/websocket.rs +++ b/crates/net/src/pairing/websocket.rs @@ -2,9 +2,8 @@ use super::{DeviceEnrollment, Error, Result, ServerPairUrl}; use crate::NetworkAccount; use futures::{ - select, stream::{SplitSink, SplitStream}, - FutureExt, SinkExt, StreamExt, + SinkExt, StreamExt, }; use prost::bytes::Bytes; use snow::{Builder, HandshakeState, Keypair, TransportState}; @@ -70,7 +69,7 @@ enum IncomingAction { HandleMessage(PairingMessage), } -/// Listen for incoming messages on the stream. +/// Listen for incoming messages on the websocket stream. async fn listen( mut rx: WsStream, tx: mpsc::Sender, @@ -102,6 +101,7 @@ async fn listen( } } } + tracing::debug!("pairing::websocket::connection_closed"); } /// Offer is the device that is authenticated and can @@ -217,26 +217,29 @@ impl<'a> OfferPairing<'a> { let (close_tx, mut close_rx) = mpsc::channel::<()>(1); tokio::task::spawn(listen(stream, offer_tx, close_tx)); loop { - select! { - event = offer_rx.recv().fuse() => { - if let Some(event) = event { - self.incoming(event).await?; - if self.is_finished() { - break; - } + tokio::select! { + biased; + // Explicit shutdown notification + Some(_) = shutdown_rx.recv() => { + tracing::debug!("pairing::offer::shutdown_received"); + if let Err(error) = self.tx.send(Message::Close(Some(CloseFrame { + code: CloseCode::Normal, + reason: Utf8Bytes::from_static("closed"), + }))).await { + tracing::error!( + error = %error, + "pairing::offer::websocket_close_frame::error"); } + break; } - event = close_rx.recv().fuse() => { - if event.is_some() { - break; - } + // Close signal from the websocket stream + Some(_) = close_rx.recv() => { + break; } - event = shutdown_rx.recv().fuse() => { - if event.is_some() { - let _ = self.tx.send(Message::Close(Some(CloseFrame { - code: CloseCode::Normal, - reason: Utf8Bytes::from_static("closed"), - }))).await; + // Incoming event + Some(event) = offer_rx.recv() => { + self.incoming(event).await?; + if self.is_finished() { break; } } @@ -633,8 +636,18 @@ impl<'a> AcceptPairing<'a> { tokio::task::spawn(listen(stream, offer_tx, close_tx)); loop { - select! { - event = offer_rx.recv().fuse() => { + tokio::select! { + biased; + event = shutdown_rx.recv() => { + if event.is_some() { + let _ = self.tx.send(Message::Close(Some(CloseFrame { + code: CloseCode::Normal, + reason: Utf8Bytes::from_static("closed"), + }))).await; + break; + } + } + event = offer_rx.recv() => { if let Some(event) = event { self.incoming(event).await?; if self.is_finished() { @@ -642,17 +655,8 @@ impl<'a> AcceptPairing<'a> { } } } - event = close_rx.recv().fuse() => { - if event.is_some() { - break; - } - } - event = shutdown_rx.recv().fuse() => { + event = close_rx.recv() => { if event.is_some() { - let _ = self.tx.send(Message::Close(Some(CloseFrame { - code: CloseCode::Normal, - reason: Utf8Bytes::from_static("closed"), - }))).await; break; } } diff --git a/crates/password/Cargo.toml b/crates/password/Cargo.toml index ea482938eb..8dafaf23ba 100644 --- a/crates/password/Cargo.toml +++ b/crates/password/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-password" -version = "0.17.0" +version = "0.17.1" edition = "2021" description = "Password generation and helpers for the Save Our Secrets SDK." homepage = "https://saveoursecrets.com" diff --git a/crates/platform_authenticator/Cargo.toml b/crates/platform_authenticator/Cargo.toml index d909e1d735..6e142b8ca0 100644 --- a/crates/platform_authenticator/Cargo.toml +++ b/crates/platform_authenticator/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-platform-authenticator" -version = "0.17.0" +version = "0.17.1" edition = "2021" description = "Platform authenticator and keyring suppport for the Save Our Secrets SDK." homepage = "https://saveoursecrets.com" diff --git a/crates/preferences/Cargo.toml b/crates/preferences/Cargo.toml index 27ba996f03..ac94f602b5 100644 --- a/crates/preferences/Cargo.toml +++ b/crates/preferences/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-preferences" -version = "0.17.0" +version = "0.17.1" edition = "2021" description = "Preferences for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/protocol/Cargo.toml b/crates/protocol/Cargo.toml index 3e7059b85e..580de800ee 100644 --- a/crates/protocol/Cargo.toml +++ b/crates/protocol/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-protocol" -version = "0.17.0" +version = "0.17.1" edition = "2021" description = "Networking and sync protocol types for the Save Our Secrets SDK." homepage = "https://saveoursecrets.com" diff --git a/crates/protocol/src/bindings/mod.rs b/crates/protocol/src/bindings/mod.rs index 8288a365ac..0297988653 100644 --- a/crates/protocol/src/bindings/mod.rs +++ b/crates/protocol/src/bindings/mod.rs @@ -11,7 +11,7 @@ mod sync; pub use diff::{DiffRequest, DiffResponse}; #[cfg(feature = "listen")] -pub use notifications::ChangeNotification; +pub use notifications::NetworkChangeEvent; pub use patch::{PatchRequest, PatchResponse}; #[cfg(feature = "pairing")] #[doc(hidden)] diff --git a/crates/protocol/src/bindings/notifications.rs b/crates/protocol/src/bindings/notifications.rs index bfaa0369bf..c517904cef 100644 --- a/crates/protocol/src/bindings/notifications.rs +++ b/crates/protocol/src/bindings/notifications.rs @@ -6,7 +6,7 @@ use sos_sync::MergeOutcome; /// Notification sent by the server when changes were made. #[derive(Debug, Clone, PartialEq, Eq)] -pub struct ChangeNotification { +pub struct NetworkChangeEvent { /// Account identifier. account_id: AccountId, /// Connection identifier that made the change. @@ -17,7 +17,7 @@ pub struct ChangeNotification { outcome: MergeOutcome, } -impl ChangeNotification { +impl NetworkChangeEvent { /// Create a new change notification. pub fn new( account_id: &AccountId, @@ -54,10 +54,10 @@ impl ChangeNotification { } } -impl From +impl From for (AccountId, String, CommitHash, MergeOutcome) { - fn from(value: ChangeNotification) -> Self { + fn from(value: NetworkChangeEvent) -> Self { ( value.account_id, value.connection_id, @@ -67,14 +67,14 @@ impl From } } -impl ProtoBinding for ChangeNotification { - type Inner = WireChangeNotification; +impl ProtoBinding for NetworkChangeEvent { + type Inner = WireNetworkChangeEvent; } -impl TryFrom for ChangeNotification { +impl TryFrom for NetworkChangeEvent { type Error = Error; - fn try_from(value: WireChangeNotification) -> Result { + fn try_from(value: WireNetworkChangeEvent) -> Result { let account_id: [u8; 20] = value.account_id.as_slice().try_into()?; Ok(Self { account_id: account_id.into(), @@ -85,8 +85,8 @@ impl TryFrom for ChangeNotification { } } -impl From for WireChangeNotification { - fn from(value: ChangeNotification) -> WireChangeNotification { +impl From for WireNetworkChangeEvent { + fn from(value: NetworkChangeEvent) -> WireNetworkChangeEvent { Self { account_id: value.account_id().as_ref().to_vec(), connection_id: value.connection_id, diff --git a/crates/protocol/src/network_client/http.rs b/crates/protocol/src/network_client/http.rs index a22b89558e..aa27584e0f 100644 --- a/crates/protocol/src/network_client/http.rs +++ b/crates/protocol/src/network_client/http.rs @@ -34,7 +34,7 @@ use crate::{ network_client::websocket::{ ListenOptions, WebSocketChangeListener, WebSocketHandle, }, - ChangeNotification, + NetworkChangeEvent, }; #[cfg(feature = "files")] @@ -118,7 +118,7 @@ impl HttpClient { pub fn listen( &self, options: ListenOptions, - handler: impl Fn(ChangeNotification) -> F + Send + Sync + 'static, + handler: impl Fn(NetworkChangeEvent) -> F + Send + Sync + 'static, ) -> WebSocketHandle where F: Future + Send + 'static, @@ -473,32 +473,51 @@ impl FileSyncClient for HttpClient { let mut bytes_sent = 0; if let Err(error) = progress.send((bytes_sent, Some(file_size))).await { - tracing::warn!(error = ?error); + tracing::warn!( + error = ?error, + "http::progress_send_initial_size", + ); } - let mut reader_stream = ReaderStream::new(file); - - let (tx, rx) = mpsc::channel(8); + let (tx, rx) = mpsc::channel(128); tokio::task::spawn(async move { + let mut reader_stream = ReaderStream::new(file); + let upload_channel = tx.clone(); loop { tokio::select! { biased; - _ = cancel.changed() => { - let reason = cancel.borrow().clone(); - tracing::debug!(reason = ?reason, "upload::canceled"); - if let Err(e) = tx.send(Err(Error::TransferCanceled(reason))).await { - tracing::warn!(error = %e); + _= cancel.changed() => { + let reason = cancel.borrow_and_update().clone(); + if reason != crate::transfer::CancelReason::default() { + tracing::debug!( + reason = ?reason, + "upload::canceled", + ); + if let Err(error) = upload_channel.send(Err(Error::TransferCanceled(reason))).await { + tracing::warn!( + error = %error, + "http::send_transfer_canceled", + ); + } + + break; } } Some(chunk) = reader_stream.next() => { if let Ok(bytes) = &chunk { bytes_sent += bytes.len() as u64; - if let Err(e) = progress.send((bytes_sent, Some(file_size))).await { - tracing::warn!(error = %e); + if let Err(error) = progress.send((bytes_sent, Some(file_size))).await { + tracing::warn!( + error = %error, + "http::send_transfer_progress_update", + ); } } - if let Err(e) = tx.send(chunk.map_err(Error::from)).await { - tracing::error!(error = %e); + if let Err(error) = upload_channel.send(chunk.map_err(Error::from)).await { + tracing::error!( + error = %error, + "http::send_transfer_chunk", + ); break; } } @@ -506,7 +525,7 @@ impl FileSyncClient for HttpClient { } }); - let progress_stream = ReceiverStream::new(rx); + let upload_stream = ReceiverStream::new(rx); // Use a client without the read timeout // as this may be a long running request @@ -522,7 +541,7 @@ impl FileSyncClient for HttpClient { self.request_headers(request, sign_url.as_bytes()).await?; let response = request - .body(Body::wrap_stream(progress_stream)) + .body(Body::wrap_stream(upload_stream)) .send() .await?; let status = response.status(); diff --git a/crates/protocol/src/network_client/mod.rs b/crates/protocol/src/network_client/mod.rs index dc6cc03e02..cee22d89e6 100644 --- a/crates/protocol/src/network_client/mod.rs +++ b/crates/protocol/src/network_client/mod.rs @@ -118,17 +118,15 @@ impl NetworkRetry { "retry", ); - loop { - tokio::select! { - _ = cancel.changed() => { - let reason = cancel.borrow(); - tracing::debug!(id = %id, "retry::canceled"); - return Err(Error::RetryCanceled(reason.clone())); - } - _ = tokio::time::sleep(Duration::from_millis(delay)) => { - return Ok(callback.await) - } - }; + tokio::select! { + _ = cancel.changed() => { + let reason = cancel.borrow(); + tracing::debug!(id = %id, "retry::canceled"); + Err(Error::RetryCanceled(reason.clone())) + } + _ = tokio::time::sleep(Duration::from_millis(delay)) => { + Ok(callback.await) + } } } } diff --git a/crates/protocol/src/network_client/websocket.rs b/crates/protocol/src/network_client/websocket.rs index d99227563e..46c5cc05f0 100644 --- a/crates/protocol/src/network_client/websocket.rs +++ b/crates/protocol/src/network_client/websocket.rs @@ -2,7 +2,7 @@ use crate::{ network_client::{NetworkRetry, WebSocketRequest}, transfer::CancelReason, - ChangeNotification, Error, Result, WireEncodeDecode, + Error, NetworkChangeEvent, Result, WireEncodeDecode, }; use futures::{ stream::{Map, SplitStream}, @@ -123,13 +123,13 @@ pub fn changes( impl FnMut( std::result::Result, ) -> Result< - Pin> + Send>>, + Pin> + Send>>, >, > { let (_, read) = stream.split(); read.map( move |message| -> Result< - Pin> + Send>>, + Pin> + Send>>, > { match message { Ok(message) => Ok(Box::pin(async move { @@ -141,11 +141,11 @@ pub fn changes( ) } -async fn decode_notification(message: Message) -> Result { +async fn decode_notification(message: Message) -> Result { match message { Message::Binary(buffer) => { let buf: Bytes = buffer.into(); - let notification = ChangeNotification::decode(buf).await?; + let notification = NetworkChangeEvent::decode(buf).await?; Ok(notification) } _ => Err(Error::NotBinaryWebsocketMessageType), @@ -210,7 +210,7 @@ impl WebSocketChangeListener { /// the handler with the notifications. pub fn spawn( self, - handler: impl Fn(ChangeNotification) -> F + Send + Sync + 'static, + handler: impl Fn(NetworkChangeEvent) -> F + Send + Sync + 'static, ) -> WebSocketHandle where F: Future + Send + 'static, @@ -229,7 +229,7 @@ impl WebSocketChangeListener { async fn listen( &self, mut stream: WsStream, - handler: &(impl Fn(ChangeNotification) -> F + Send + Sync + 'static), + handler: &(impl Fn(NetworkChangeEvent) -> F + Send + Sync + 'static), ) -> Result<()> where F: Future + Send + 'static, @@ -246,7 +246,10 @@ impl WebSocketChangeListener { code: CloseCode::Normal, reason: Utf8Bytes::from_static("closed"), })).await { - tracing::warn!(error = ?error); + tracing::warn!( + error = ?error, + "ws_client::websocket::close_error", + ); } tracing::debug!("ws_client::shutdown"); return Ok(()); @@ -289,7 +292,7 @@ impl WebSocketChangeListener { async fn connect_loop( &self, - handler: &(impl Fn(ChangeNotification) -> F + Send + Sync + 'static), + handler: &(impl Fn(NetworkChangeEvent) -> F + Send + Sync + 'static), ) -> Result<()> where F: Future + Send + 'static, diff --git a/crates/protocol/src/protobuf/notifications.proto b/crates/protocol/src/protobuf/notifications.proto index 1933deac53..49ceacbf7d 100644 --- a/crates/protocol/src/protobuf/notifications.proto +++ b/crates/protocol/src/protobuf/notifications.proto @@ -5,7 +5,7 @@ package notifications; import "protobuf/common.proto"; import "protobuf/sync.proto"; -message WireChangeNotification { +message WireNetworkChangeEvent { // Account identifier. bytes account_id = 1; // Connection identifier. diff --git a/crates/reducers/Cargo.toml b/crates/reducers/Cargo.toml index 70d26f3907..8d8eb62e74 100644 --- a/crates/reducers/Cargo.toml +++ b/crates/reducers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-reducers" -version = "0.17.0" +version = "0.17.1" edition = "2021" description = "Event log reducers for the Save Our Secrets SDK." homepage = "https://saveoursecrets.com" diff --git a/crates/remote_sync/Cargo.toml b/crates/remote_sync/Cargo.toml index 0e989903d9..292f82fc1b 100644 --- a/crates/remote_sync/Cargo.toml +++ b/crates/remote_sync/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-remote-sync" -version = "0.17.0" +version = "0.17.1" edition = "2021" description = "Sync protocol implementation for the Save Our Secrets SDK." homepage = "https://saveoursecrets.com" diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml index 5645fd5e60..378d0e83d2 100644 --- a/crates/sdk/Cargo.toml +++ b/crates/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-sdk" -version = "0.17.1" +version = "0.17.2" edition = "2021" description = "Distributed, encrypted database for private secrets." homepage = "https://saveoursecrets.com" diff --git a/crates/sdk/README.md b/crates/sdk/README.md index 0a534b00ec..e13f659955 100644 --- a/crates/sdk/README.md +++ b/crates/sdk/README.md @@ -27,6 +27,7 @@ This crate exports a prelude of common types for low-level access but we encoura | [sos-core](https://docs.rs/sos-core/latest/sos_core/) | Core types and traits; cryptography functions, commit trees and event definitions. | | [sos-database](https://docs.rs/sos-database/latest/sos_database/) | SQLite database backend | | [sos-database-upgrader](https://docs.rs/sos-database-upgrader/latest/sos_database_upgrader/) | Upgrade filesystem backend to database backend | +| [sos-debug-snapshot](https://docs.rs/sos-debug-snapshot/latest/sos_debug_snapshot/) | Create debug snapshot ZIP archives | | [sos-extension-service](https://docs.rs/sos-extension-service/latest/sos_extension_service/) | Browser extension helper service | | [sos-external-files](https://docs.rs/sos-external-files/latest/sos_external_files/) | Helper functions for managing external encrypted file blobs | | [sos-filesystem](https://docs.rs/sos-filesystem/latest/sos_filesystem/) | Legacy filesystem backend | diff --git a/crates/search/Cargo.toml b/crates/search/Cargo.toml index c2db600b31..25e315c212 100644 --- a/crates/search/Cargo.toml +++ b/crates/search/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-search" -version = "0.17.1" +version = "0.17.2" edition = "2021" description = "In-memory meta data search index the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/security_report/Cargo.toml b/crates/security_report/Cargo.toml index 816c975d67..8397d3c75d 100644 --- a/crates/security_report/Cargo.toml +++ b/crates/security_report/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-security-report" -version = "0.17.1" +version = "0.17.2" edition = "2021" description = "Generate a security report for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/server/Cargo.toml b/crates/server/Cargo.toml index dc7b7fed9b..dd09b929b4 100644 --- a/crates/server/Cargo.toml +++ b/crates/server/Cargo.toml @@ -1,10 +1,10 @@ [package] name = "sos-server" -version = "0.17.0" +version = "0.17.2" edition = "2021" description = "Server for the Save Our Secrets sync protocol." homepage = "https://saveoursecrets.com" -license = "AGPL-3.0" +license = "AGPL-3.0-or-later" repository = "https://github.com/saveoursecrets/sdk" [package.metadata.docs.rs] diff --git a/crates/server/src/handlers/account.rs b/crates/server/src/handlers/account.rs index bb8cb95465..5dae50502e 100644 --- a/crates/server/src/handlers/account.rs +++ b/crates/server/src/handlers/account.rs @@ -624,7 +624,7 @@ mod handlers { use std::sync::Arc; #[cfg(feature = "listen")] - use sos_protocol::ChangeNotification; + use sos_protocol::NetworkChangeEvent; #[cfg(feature = "listen")] use crate::handlers::send_notification; @@ -818,7 +818,7 @@ mod handlers { if let Some(conn_id) = caller.connection_id() { let reader = account.read().await; let local_status = reader.sync_status().await?; - let notification = ChangeNotification::new( + let notification = NetworkChangeEvent::new( caller.account_id(), conn_id.to_string(), local_status.root, @@ -868,7 +868,7 @@ mod handlers { #[cfg(feature = "listen")] if outcome.changes > 0 { if let Some(conn_id) = caller.connection_id() { - let notification = ChangeNotification::new( + let notification = NetworkChangeEvent::new( caller.account_id(), conn_id.to_string(), packet.status.root, diff --git a/crates/server/src/handlers/mod.rs b/crates/server/src/handlers/mod.rs index 286442aa0d..08da77cdb9 100644 --- a/crates/server/src/handlers/mod.rs +++ b/crates/server/src/handlers/mod.rs @@ -28,7 +28,7 @@ pub(crate) mod websocket; const BODY_LIMIT: usize = 33554432; #[cfg(feature = "listen")] -use sos_protocol::{ChangeNotification, WireEncodeDecode}; +use sos_protocol::{NetworkChangeEvent, WireEncodeDecode}; use crate::server::{ServerState, State}; @@ -133,7 +133,7 @@ async fn authenticate_endpoint( pub(crate) async fn send_notification( reader: &State, caller: &Caller, - notification: ChangeNotification, + notification: NetworkChangeEvent, ) { // Send notification on the websockets channel match notification.encode().await { diff --git a/crates/signer/Cargo.toml b/crates/signer/Cargo.toml index 64a866a225..d7343f3483 100644 --- a/crates/signer/Cargo.toml +++ b/crates/signer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-signer" -version = "0.17.0" +version = "0.17.2" edition = "2021" description = "Message signing for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/sos/Cargo.toml b/crates/sos/Cargo.toml index ab526d184a..0eb4e44542 100644 --- a/crates/sos/Cargo.toml +++ b/crates/sos/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos" -version = "0.17.0" +version = "0.17.3" edition = "2021" description = "Distributed, encrypted database for private secrets." homepage = "https://saveoursecrets.com" @@ -21,6 +21,7 @@ sos-cli-helpers.workspace = true sos-client-storage = { workspace = true, features = ["full"] } sos-database = { workspace = true, features = ["full"] } sos-database-upgrader = { workspace = true, features = ["full"] } +sos-debug-snapshot.workspace = true sos-external-files.workspace = true sos-integrity.workspace = true sos-login = { workspace = true, features = ["full"] } diff --git a/crates/sos/src/commands/tools/debug.rs b/crates/sos/src/commands/tools/debug.rs index 4ad292aabf..4200f48e18 100644 --- a/crates/sos/src/commands/tools/debug.rs +++ b/crates/sos/src/commands/tools/debug.rs @@ -3,7 +3,9 @@ use clap::Subcommand; use sos_backend::BackendTarget; use sos_client_storage::ClientStorage; use sos_core::{AccountRef, Paths}; +use sos_debug_snapshot::{export_debug_snapshot, DebugSnapshotOptions}; use sos_sync::SyncStorage; +use std::path::PathBuf; #[derive(Subcommand, Debug)] pub enum Command { @@ -13,6 +15,19 @@ pub enum Command { #[clap(short, long)] account: AccountRef, }, + /// Create a debug snapshot ZIP bundle. + Snapshot { + /// Account name or identifier. + #[clap(short, long)] + account: AccountRef, + + /// Include audit trail. + #[clap(long)] + include_audit_trail: bool, + + /// Output ZIP file. + file: PathBuf, + }, } pub async fn run(cmd: Command) -> Result<()> { @@ -30,6 +45,26 @@ pub async fn run(cmd: Command) -> Result<()> { let debug_tree = storage.debug_account_tree(account_id).await?; serde_json::to_writer_pretty(std::io::stdout(), &debug_tree)?; } + Command::Snapshot { + account, + include_audit_trail, + file, + } => { + let account_id = resolve_account_address(Some(&account)).await?; + let paths = Paths::new_client(Paths::data_dir()?) + .with_account_id(&account_id); + let target = BackendTarget::from_paths(&paths).await?; + + let storage = + ClientStorage::new_unauthenticated(target, &account_id) + .await?; + + let options = DebugSnapshotOptions { + include_audit_trail, + ..Default::default() + }; + export_debug_snapshot(&storage, file, options).await?; + } } Ok(()) diff --git a/crates/sos/src/error.rs b/crates/sos/src/error.rs index 8afeac1121..212e328018 100644 --- a/crates/sos/src/error.rs +++ b/crates/sos/src/error.rs @@ -211,6 +211,10 @@ pub enum Error { #[error(transparent)] Backend(#[from] sos_backend::Error), + /// Error generated by the debug snapshot library. + #[error(transparent)] + DebugSnapshot(#[from] sos_debug_snapshot::Error), + /// Error generated by the backend storage. #[error(transparent)] BackendStorage(#[from] sos_backend::StorageError), diff --git a/crates/sos/src/helpers/editor.rs b/crates/sos/src/helpers/editor.rs index 839790ae3b..9cfe97e8c8 100644 --- a/crates/sos/src/helpers/editor.rs +++ b/crates/sos/src/helpers/editor.rs @@ -206,7 +206,7 @@ async fn edit_secret<'a>( } /// Edit text. -pub async fn edit_text(text: &str) -> Result> { +pub async fn edit_text<'a>(text: &'a str) -> Result> { let result = editor(text.as_bytes(), ".txt").await?; match result { Cow::Borrowed(_) => Ok(Cow::Borrowed(text)), diff --git a/crates/storage/client/Cargo.toml b/crates/storage/client/Cargo.toml index deea0ad239..94a1f5a027 100644 --- a/crates/storage/client/Cargo.toml +++ b/crates/storage/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-client-storage" -version = "0.17.1" +version = "0.17.2" edition = "2021" description = "Client storage for the Save Our Secrets SDK." homepage = "https://saveoursecrets.com" diff --git a/crates/storage/client/src/filesystem.rs b/crates/storage/client/src/filesystem.rs index 342a3ae380..8b10089350 100644 --- a/crates/storage/client/src/filesystem.rs +++ b/crates/storage/client/src/filesystem.rs @@ -16,7 +16,7 @@ use sos_core::{ decode, device::TrustedDevice, encode, - events::{DeviceEvent, Event, EventLog, ReadEvent}, + events::{DeviceEvent, Event, EventLog, EventLogType, ReadEvent}, AccountId, Paths, SecretId, VaultFlags, VaultId, }; use sos_filesystem::write_exclusive; @@ -324,8 +324,14 @@ impl ClientFolderStorage for ClientFileSystemStorage { } async fn new_folder(&self, vault: &Vault, _: Internal) -> Result { - let vault_path = self.paths.vault_path(vault.id()); - Ok(Folder::from_path(&vault_path).await?) + let folder_id = *vault.id(); + let vault_path = self.paths.vault_path(&folder_id); + Ok(Folder::from_path( + &vault_path, + self.account_id(), + EventLogType::Folder(folder_id), + ) + .await?) } async fn read_vault(&self, id: &VaultId) -> Result { diff --git a/crates/storage/client/src/traits.rs b/crates/storage/client/src/traits.rs index eab86ca5ff..f797cc1a74 100644 --- a/crates/storage/client/src/traits.rs +++ b/crates/storage/client/src/traits.rs @@ -570,7 +570,8 @@ pub trait ClientFolderStorage: let event_log = folder.event_log(); let mut log_file = event_log.write().await; - compact_folder(folder_id, &mut *log_file).await?; + compact_folder(self.account_id(), folder_id, &mut *log_file) + .await?; } // Refresh in-memory vault and mirrored copy diff --git a/crates/storage/server/Cargo.toml b/crates/storage/server/Cargo.toml index 291250aea2..abae252603 100644 --- a/crates/storage/server/Cargo.toml +++ b/crates/storage/server/Cargo.toml @@ -1,10 +1,10 @@ [package] name = "sos-server-storage" -version = "0.17.1" +version = "0.17.4" edition = "2021" description = "Server storage for the Save Our Secrets SDK." homepage = "https://saveoursecrets.com" -license = "AGPL-3.0" +license = "AGPL-3.0-or-later" repository = "https://github.com/saveoursecrets/sdk" [features] diff --git a/crates/sync/Cargo.toml b/crates/sync/Cargo.toml index 759babd1ef..5e6ed7987c 100644 --- a/crates/sync/Cargo.toml +++ b/crates/sync/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-sync" -version = "0.17.0" +version = "0.17.3" edition = "2021" description = "Sync types and traits for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/system_messages/Cargo.toml b/crates/system_messages/Cargo.toml index cb7932fc68..7f3ead68b8 100644 --- a/crates/system_messages/Cargo.toml +++ b/crates/system_messages/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-system-messages" -version = "0.17.0" +version = "0.17.3" edition = "2021" description = "System message notifications for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/system_messages/src/system_messages.rs b/crates/system_messages/src/system_messages.rs index 7244d24f3b..7343524709 100644 --- a/crates/system_messages/src/system_messages.rs +++ b/crates/system_messages/src/system_messages.rs @@ -307,8 +307,7 @@ where } fn counts(&self) -> SysMessageCount { - let mut counts: SysMessageCount = Default::default(); - counts.total = self.messages.0.len(); + let mut counts = SysMessageCount { total: self.messages.0.len(), ..Default::default() }; for item in self.messages.0.values() { if !item.is_read { counts.unread += 1; diff --git a/crates/vault/Cargo.toml b/crates/vault/Cargo.toml index f7dcdc8437..d51e1f59fb 100644 --- a/crates/vault/Cargo.toml +++ b/crates/vault/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-vault" -version = "0.17.1" +version = "0.17.4" edition = "2021" description = "Vault encrypted storage for the Save Our Secrets SDK" homepage = "https://saveoursecrets.com" diff --git a/crates/web/Cargo.toml b/crates/web/Cargo.toml index f0191cdc1f..48c76506de 100644 --- a/crates/web/Cargo.toml +++ b/crates/web/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sos-web" -version = "0.17.0" +version = "0.17.2" edition = "2021" description = "Thin client for webassembly bindings to the Save Our Secrets SDK." homepage = "https://saveoursecrets.com" diff --git a/deny.toml b/deny.toml index 4bce831012..c6486add7a 100644 --- a/deny.toml +++ b/deny.toml @@ -52,10 +52,7 @@ allow = [ "BSD-3-Clause", "0BSD", "Unicode-3.0", - # OpenSSL is Apache License v2.0 (ASL v2) - # https://www.openssl.org/blog/blog/2017/03/22/license/ - # ring crate is ISC & MIT - "OpenSSL", + "CDLA-Permissive-2.0", "CC0-1.0", "Zlib", ] @@ -67,12 +64,12 @@ confidence-threshold = 0.8 # Allow 1 or more licenses on a per-crate basis, so that particular licenses # aren't accepted for every possible crate as with the normal allow list [[licenses.exceptions]] -allow = ["AGPL-3.0"] +allow = ["AGPL-3.0-or-later"] name = "sos-server" version = "*" [[licenses.exceptions]] -allow = ["AGPL-3.0"] +allow = ["AGPL-3.0-or-later"] name = "sos-server-storage" version = "*" diff --git a/doc/rust-1.90-timings/cargo-1.89-downgrade.html b/doc/rust-1.90-timings/cargo-1.89-downgrade.html new file mode 100644 index 0000000000..34babcd5f4 --- /dev/null +++ b/doc/rust-1.90-timings/cargo-1.89-downgrade.html @@ -0,0 +1,41107 @@ + + + + Cargo Build Timings — sos-system-messages 0.17.0, sos-backend 0.17.1, xclipboard 0.16.1, sos-sdk 0.17.1, sos-vault 0.17.1, sos-net 0.17.3, sos-debug-snapshot 0.17.0, sos-account 0.17.4, sos-security-report 0.17.1, sos-server-storage 0.17.1, sos-vfs 0.3.2, sos-sync 0.17.0, sos-login 0.17.2, sos-external-files 0.17.0, sos-logs 0.17.0, sos-audit 0.17.0, sos-ipc 0.17.0, sos-integration-tests 0.17.0, sos-remote-sync 0.17.0, sos-artifact 0.8.9, sos-preferences 0.17.0, sos-platform-authenticator 0.17.0, keychain_parser 0.1.2, sos-integrity 0.17.1, sos-filesystem 0.17.0, sos-archive 0.17.0, sos 0.17.0, sos-changes 0.17.0, sos-cli-helpers 0.1.1, sos-database 0.17.0, sos-database-upgrader 0.17.1, sos-migrate 0.17.0, sos-server 0.17.0, sos-test-utils 0.17.0, sos-web 0.17.0, sos-client-storage 0.17.1, sos-protocol 0.17.0, sos-command-line-tests 0.17.0, sos-password 0.17.0, sos-search 0.17.1, sos-extension-service 0.17.0, sos-core 0.17.1, sos-reducers 0.17.0, sos-signer 0.17.0, sos-unit-tests 0.17.0 + + + + + +

Cargo Build Timings

+See Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Targets:sos-system-messages 0.17.0 (lib)
sos-backend 0.17.1 (lib)
xclipboard 0.16.1 (lib)
sos-sdk 0.17.1 (lib)
sos-vault 0.17.1 (lib)
sos-net 0.17.3 (lib)
sos-debug-snapshot 0.17.0 (lib)
sos-account 0.17.4 (lib)
sos-security-report 0.17.1 (lib)
sos-server-storage 0.17.1 (lib)
sos-vfs 0.3.2 (lib)
sos-sync 0.17.0 (lib)
sos-login 0.17.2 (lib)
sos-external-files 0.17.0 (lib)
sos-logs 0.17.0 (lib)
sos-audit 0.17.0 (lib)
sos-ipc 0.17.0 (lib)
sos-integration-tests 0.17.0 (lib, bin "db-compile-options", bin "make-v3-backup-fixtures", bin "test-extension-helper", bin "test-preferences-concurrency")
sos-remote-sync 0.17.0 (lib)
sos-artifact 0.8.9 (lib)
sos-preferences 0.17.0 (lib)
sos-platform-authenticator 0.17.0 (lib)
keychain_parser 0.1.2 (lib)
sos-integrity 0.17.1 (lib)
sos-filesystem 0.17.0 (lib)
sos-archive 0.17.0 (lib)
sos 0.17.0 (lib, bin "sos")
sos-changes 0.17.0 (lib)
sos-cli-helpers 0.1.1 (lib)
sos-database 0.17.0 (lib)
sos-database-upgrader 0.17.1 (lib)
sos-migrate 0.17.0 (lib)
sos-server 0.17.0 (lib, bin "sos-server")
sos-test-utils 0.17.0 (lib)
sos-web 0.17.0 (lib)
sos-client-storage 0.17.1 (lib)
sos-protocol 0.17.0 (lib)
sos-command-line-tests 0.17.0 (lib)
sos-password 0.17.0 (lib)
sos-search 0.17.1 (lib)
sos-extension-service 0.17.0 (lib, bin "sos-extension-helper")
sos-core 0.17.1 (lib)
sos-reducers 0.17.0 (lib)
sos-signer 0.17.0 (lib)
sos-unit-tests 0.17.0 (lib)
Profile:release
Fresh units:0
Dirty units:827
Total units:827
Max concurrency:16 (jobs=16 ncpu=16)
Build start:2025-09-19T00:14:18.946646693Z
Total time:283.6s (4m 43.6s)
rustc:rustc 1.89.0 (29483883e 2025-08-04)
Host: x86_64-unknown-linux-gnu
Target: x86_64-unknown-linux-gnu
+ + + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UnitTotalCodegenFeatures
1.sos v0.17.0 bin "sos"159.1s
2.sos-server v0.17.0 bin "sos-server"142.3sacme, audit, default, listen, pairing, sos-audit
3.sos-extension-service v0.17.0 bin "sos-extension-helper"138.4s
4.sos-integration-tests v0.17.0 bin "make-v3-backup-fixtures"127.2s
5.sos-integration-tests v0.17.0 bin "test-extension-helper"114.7s
6.libsqlite3-sys v0.30.1 build script (run)78.3sbundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
7.vcard4 v0.7.246.0s31.0s (67%)default, serde, zeroize
8.sos-integration-tests v0.17.0 bin "db-compile-options"33.9s
9.x11rb-protocol v0.13.133.8s20.0s (59%)std
10.rustls v0.23.2731.0s23.6s (76%)ring, std, tls12
11.sos-integration-tests v0.17.0 bin "test-preferences-concurrency"29.5s
12.axum v0.8.427.4s3.4s (12%)default, form, http1, json, matched-path, original-uri, query, tokio, tower-log, tracing, ws
13.reqwest v0.12.1823.0s19.0s (83%)__rustls, __rustls-ring, __tls, json, rustls-tls, rustls-tls-webpki-roots, rustls-tls-webpki-roots-no-provider, stream
14.sos-net v0.17.323.0s14.0s (61%)archive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
15.utoipa-gen v5.3.120.4suuid
16.h2 v0.4.1018.1s9.8s (54%)
17.sos v0.17.017.5s9.4s (54%)
18.clap_builder v4.5.3917.0s11.2s (66%)color, env, error-context, help, std, suggestions, usage, wrap_help
19.dbus v0.9.715.8s9.9s (63%)
20.tracing-subscriber v0.3.1915.1s6.2s (41%)alloc, ansi, default, env-filter, fmt, json, matchers, nu-ansi-term, once_cell, regex, registry, serde, serde_json, sharded-slab, smallvec, std, thread_local, tracing, tracing-log, tracing-serde
21.sos-core v0.17.114.8s8.0s (54%)files
22.tokio v1.45.114.7s7.2s (49%)bytes, default, fs, io-std, io-util, libc, macros, mio, net, process, rt, rt-multi-thread, signal-hook-registry, socket2, sync, time, tokio-macros
23.x509-parser v0.16.014.2s11.5s (81%)default
24.sos-server v0.17.013.5s10.4s (77%)acme, audit, default, listen, pairing, sos-audit
25.nix v0.26.413.5s1.5s (11%)acct, aio, default, dir, env, event, feature, fs, hostname, inotify, ioctl, kmod, memoffset, mman, mount, mqueue, net, personality, pin-utils, poll, process, pthread, ptrace, quota, reboot, resource, sched, signal, socket, term, time, ucontext, uio, user, zerocopy
26.sos-test-utils v0.17.013.0s10.6s (82%)
27.toml_edit v0.22.2612.2s8.0s (66%)display, parse, serde
28.sos-client-storage v0.17.111.8s7.3s (62%)archive, audit, files, full, search, sos-audit, sos-external-files, sos-search
29.sos-vault v0.17.111.7s3.5s (30%)
30.sos-account v0.17.411.6s7.2s (62%)archive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
31.hyper-util v0.1.1310.1s2.3s (23%)client, client-legacy, client-proxy, default, http1, http2, server, server-auto, service, tokio
32.regex-automata v0.4.99.6s6.3s (66%)alloc, dfa, dfa-build, dfa-onepass, dfa-search, hybrid, meta, nfa, nfa-backtrack, nfa-pikevm, nfa-thompson, perf, perf-inline, perf-literal, perf-literal-multisubstring, perf-literal-substring, std, syntax, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment, unicode-word-boundary
33.clap_derive v4.5.329.3sdefault
34.sos-web v0.17.09.2s4.8s (53%)archive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
35.nix v0.30.19.2s1.8s (20%)fs, process, signal
36.serde_json_path v0.7.28.8s6.8s (77%)default, functions, regex
37.utoipa v5.3.18.6s2.7s (32%)default, macros, uuid
38.rustix v0.38.448.3s2.2s (26%)alloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
39.sos-server-storage v0.17.18.2s5.9s (72%)audit, files, full, sos-audit, sos-external-files
40.libm v0.2.157.9s2.3s (29%)arch, default
41.time-tz v2.0.07.8s0.8s (11%)db, default, js-sys, system, thiserror, windows-sys
42.hyper v1.6.07.7s5.5s (72%)client, default, http1, http2, server
43.nix v0.28.07.7s2.6s (35%)fs, ioctl, poll, process, signal, term
44.quick-xml v0.32.07.6s5.2s (68%)default
45.rcgen v0.13.27.5s6.2s (82%)crypto, default, pem, ring
46.time v0.3.417.3s3.6s (49%)alloc, default, formatting, local-offset, macros, parsing, serde, serde-human-readable, std, wasm-bindgen
47.regex-syntax v0.6.297.3s4.5s (62%)default, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
48.sos-protocol v0.17.06.9s3.8s (56%)bs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
49.x11rb v0.13.16.3s2.3s (36%)
50.ring v0.17.146.3s3.1s (50%)alloc, default, dev_urandom_fallback, std
51.proc-macro2 v1.0.956.2s3.8s (61%)default, proc-macro
52.arboard v3.5.05.7s3.8s (67%)
53.asn1-rs v0.6.25.7s2.3s (40%)datetime, default, std, time
54.sos-backend v0.17.15.7s4.7s (83%)archive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
55.axum-core v0.5.25.6s1.0s (17%)tracing
56.notify v7.0.05.6s3.6s (65%)default, fsevent-sys, macos_fsevent, serde
57.logos-codegen v0.14.45.5s3.2s (58%)
58.syn v2.0.1015.5s1.9s (34%)clone-impls, default, derive, extra-traits, fold, full, parsing, printing, proc-macro, visit, visit-mut
59.num-rational v0.4.25.3s2.6s (49%)num-bigint, num-bigint-std, std
60.rustix v1.0.75.2s1.4s (27%)alloc, default, fs, std, termios
61.kdam v0.6.25.1s3.3s (65%)derive, rich, spinner
62.tokio-rustls-acme v0.6.05.0s2.4s (48%)axum, default
63.zxcvbn v3.1.04.9s3.3s (68%)builder, default, derive_builder, ser, serde
64.yasna v0.5.24.9s2.0s (41%)default, std, time
65.syn v1.0.1094.8s1.8s (38%)clone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
66.rustyline v14.0.04.8s2.3s (48%)custom-bindings, default, fd-lock, home, radix_trie, with-dirs, with-file-history
67.sos-changes v0.17.04.8s3.7s (77%)changes-consumer, changes-producer, tokio-util
68.enum-iterator v2.1.04.7s0.1s (2%)
69.regex-automata v0.1.104.7s3.4s (73%)default, regex-syntax, std
70.serde v1.0.2194.6s0.2s (3%)alloc, default, derive, serde_derive, std
71.sos-filesystem v0.17.04.6s0.3s (6%)archive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
72.ouroboros_macro v0.18.54.6sstd
73.headers v0.4.04.5s2.1s (47%)
74.serde v1.0.2194.5s0.1s (3%)default, derive, serde_derive, std
75.ring v0.17.14 build script (run)4.5salloc, default, dev_urandom_fallback, std
76.csv-async v1.3.14.5s2.1s (47%)default, itoa, ryu, serde, tokio, tokio-stream, tokio1, with_serde
77.image v0.25.64.2s3.1s (73%)png
78.crossterm v0.28.14.1s1.9s (46%)bracketed-paste, default, events, windows
79.regex-syntax v0.8.54.0s2.2s (56%)default, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
80.snow v0.9.63.9s2.5s (63%)aes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
81.darling_core v0.12.43.7s1.7s (46%)strsim, suggestions
82.rustix v1.0.73.7s0.6s (16%)alloc, default, fs, std
83.der v0.7.103.7s1.7s (46%)alloc, oid, std, zeroize
84.serde_with v3.12.03.6s0.2s (5%)alloc, base64, default, macros, std
85.futures-util v0.3.313.6s0.3s (9%)alloc, async-await, async-await-macro, channel, default, futures-channel, futures-io, futures-macro, futures-sink, io, memchr, sink, slab, std
86.plist v1.7.13.6s0.6s (17%)default, serde
87.tungstenite v0.26.23.4s2.2s (64%)__rustls-tls, data-encoding, handshake, http, httparse, rustls, rustls-pki-types, sha1
88.serde_derive v1.0.2193.4sdefault
89.aho-corasick v1.1.33.4s2.4s (70%)default, perf-literal, std
90.iri-string v0.7.83.4s0.9s (26%)alloc, default, std
91.itertools v0.14.03.3s0.1s (3%)default, use_alloc, use_std
92.num-bigint v0.4.63.3s1.4s (41%)default, std
93.dbus-secret-service v4.0.33.3s2.5s (75%)
94.rustls-webpki v0.103.33.3s2.4s (73%)alloc, ring, std
95.serde_json v1.0.1403.2s1.3s (42%)default, raw_value, std
96.keychain_parser v0.1.23.2s1.6s (50%)
97.tower-http v0.6.43.2s1.7s (54%)cors, default, follow-redirect, futures-util, iri-string, tower, trace, tracing
98.regex-automata v0.4.93.1s1.1s (35%)alloc, dfa-onepass, hybrid, meta, nfa-backtrack, nfa-pikevm, nfa-thompson, perf-inline, perf-literal, perf-literal-multisubstring, perf-literal-substring, std, syntax, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment, unicode-word-boundary
99.i18n-embed v0.15.43.0s2.3s (76%)arc-swap, default, fluent, fluent-syntax, fluent-system, i18n-embed-impl, parking_lot, rust-embed
100.sos-migrate v0.17.02.9s1.9s (63%)authenticator, export, full, import, keychain-access
101.fancy-regex v0.13.02.9s2.0s (68%)default, perf, std, unicode
102.prost-derive v0.13.52.8s
103.sos-protocol v0.17.0 build script2.8sbs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
104.darling_core v0.20.112.8s1.3s (46%)strsim, suggestions
105.interprocess v2.2.32.8s1.4s (51%)async, default, futures-core, tokio
106.regex-syntax v0.8.52.7s0.8s (29%)default, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
107.sos-logs v0.17.02.7s2.0s (75%)
108.toml v0.5.112.7s0.9s (35%)default
109.itertools v0.13.02.6s0.2s (6%)default, use_alloc, use_std
110.textwrap v0.16.22.6s1.5s (57%)default, smawk, terminal_size, unicode-linebreak, unicode-width
111.petgraph v0.7.12.5s0.2s (8%)
112.chrono v0.4.412.5s1.2s (49%)alloc, android-tzdata, clock, iana-time-zone, js-sys, now, std, wasm-bindgen, wasmbind, winapi, windows-link
113.prost-types v0.13.52.5s0.5s (20%)
114.asn1-rs-derive v0.5.12.5s
115.age v0.11.12.4s1.3s (52%)async, default, futures, memchr
116.anyhow v1.0.982.4s1.1s (47%)default, std
117.time v0.3.412.4s0.7s (31%)alloc, default, formatting, parsing, std
118.der-parser v9.0.02.4s1.1s (46%)bigint, default, num-bigint, std
119.data-encoding v2.9.02.4s1.8s (76%)alloc, default, std
120.sos-integrity v0.17.12.3s1.8s (79%)files, full
121.i18n-embed-fl v0.9.42.2s
122.k256 v0.13.42.2s1.5s (66%)alloc, arithmetic, default, digest, ecdsa, ecdsa-core, once_cell, pkcs8, precomputed-tables, schnorr, sha2, sha256, signature, std
123.sharded-slab v0.1.72.2s0.2s (10%)
124.crypto-bigint v0.5.52.2s0.6s (27%)generic-array, rand_core, zeroize
125.fs-err v3.1.02.2s0.5s (23%)tokio
126.prost-build v0.13.52.1s1.2s (56%)default, format
127.url v2.5.42.1s1.1s (54%)default, serde, std
128.nom v7.1.32.1s0.2s (9%)alloc, default, std
129.idna v1.0.32.0s1.5s (75%)alloc, compiled_data, std
130.icu_properties v2.0.12.0s0.9s (46%)compiled_data
131.keyring v3.6.22.0s1.3s (67%)apple-native, sync-secret-service, windows-native
132.icu_properties v2.0.12.0s0.3s (16%)compiled_data
133.aho-corasick v1.1.31.9s0.9s (44%)perf-literal, std
134.time-tz v2.0.0 build script1.9sdb, default, js-sys, system, thiserror, windows-sys
135.anticipate-runner v0.5.11.9s1.1s (55%)
136.winnow v0.7.101.9s0.2s (13%)alloc, default, std
137.i18n-config v0.4.71.9s1.2s (62%)
138.num-complex v0.4.61.9s0.3s (18%)std
139.sos-remote-sync v0.17.01.9s0.1s (6%)files, full
140.curve25519-dalek v4.1.31.9s0.7s (38%)alloc, default, digest, precomputed-tables, zeroize
141.axum-server v0.7.21.8s0.7s (39%)arc-swap, default, rustls, rustls-pemfile, rustls-pki-types, tls-rustls-no-provider, tokio-rustls
142.enum-iterator-derive v1.4.01.8s
143.libc v0.2.1721.8s0.2s (11%)default, extra_traits, std
144.sos-ipc v0.17.01.8s0.5s (27%)async-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
145.toml v0.8.221.8s1.1s (59%)default, display, parse
146.sos-signer v0.17.01.8s1.0s (57%)
147.sql_query_builder v2.4.21.8s1.2s (68%)sqlite
148.tracing-appender v0.2.31.8s1.2s (68%)
149.time-macros v0.2.221.7sformatting, parsing, serde
150.serde_json_path_core v0.2.21.7s0.9s (53%)default, functions
151.derive_builder_core v0.20.21.7s0.8s (46%)lib_has_std
152.i18n-embed v0.15.41.7s0.9s (56%)arc-swap, default, filesystem-assets, fluent, fluent-syntax, fluent-system, i18n-embed-impl, parking_lot, rust-embed, walkdir
153.png v0.17.161.6s1.0s (59%)
154.rustversion v1.0.211.6s
155.yansi v1.0.11.6s0.2s (16%)alloc, default, std
156.sos-database v0.17.01.5s0.7s (44%)archive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
157.inotify v0.10.21.5s0.4s (24%)
158.url v2.5.41.5s0.5s (34%)default, std
159.sos-database-upgrader v0.17.11.5s0.3s (20%)archive, full
160.sos-sync v0.17.01.5s0.3s (18%)files, full
161.thiserror-impl v2.0.121.5s
162.kdam_derive v0.1.01.5s
163.http v1.3.11.4s0.5s (37%)default, std
164.sos-search v0.17.11.4s1.0s (67%)
165.async_zip v0.0.171.4s0.4s (26%)async-compression, deflate, tokio, tokio-util
166.cc v1.2.251.4s0.8s (52%)
167.notify-types v1.0.11.4s0.3s (21%)serde
168.rand_chacha v0.9.01.4s1.1s (78%)std
169.zerofrom-derive v0.1.61.4s
170.prettyplease v0.2.331.4s0.5s (39%)
171.uriparse v0.6.41.4s0.6s (45%)default
172.sos-login v0.17.21.4s0.8s (55%)files, full
173.logos-codegen v0.15.01.4s0.7s (50%)
174.logos-derive v0.14.41.4s
175.pin-project-internal v1.1.101.4s
176.sos-audit v0.17.01.4s0.3s (22%)
177.derive_builder_core v0.10.21.3s0.6s (43%)
178.tracing-attributes v0.1.281.3s
179.totp-rs v5.7.01.3s0.6s (45%)default, otpauth, qr, serde, serde_support, url, urlencoding, zeroize
180.icu_locale_core v2.0.01.3s0.6s (49%)zerovec
181.basic-toml v0.1.101.3s0.5s (35%)
182.thiserror-impl v1.0.691.3s
183.rustls-pki-types v1.12.01.3s0.6s (47%)alloc, default, std
184.icu_locale_core v2.0.01.3s0.5s (38%)zerovec
185.serde_with_macros v3.12.01.3s
186.fluent-bundle v0.15.31.3s0.5s (41%)default
187.rustyline-derive v0.11.11.3s
188.binary-stream v10.0.01.3s0.0s (3%)async, default, tokio
189.zerocopy v0.8.251.3s0.1s (4%)simd
190.signal-hook v0.3.181.3s0.7s (58%)channel, default, iterator
191.zerovec-derive v0.11.11.3s
192.async-trait v0.1.881.3s
193.strsim v0.11.11.3s0.8s (65%)
194.asn1-rs-impl v0.2.01.2s
195.refinery-macros v0.8.161.2s
196.age-core v0.11.01.2s0.8s (65%)
197.colored v2.2.01.2s0.6s (51%)
198.matchit v0.8.41.2s0.6s (51%)default
199.tokio-util v0.7.151.2s0.4s (30%)codec, compat, default, futures-io, io
200.nu-ansi-term v0.46.01.2s0.5s (44%)
201.deranged v0.4.01.2s0.0s (3%)alloc, powerfmt, serde, std
202.zerovec v0.11.21.2s0.0s (4%)alloc, derive, yoke
203.oid-registry v0.7.11.2s0.6s (51%)crypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
204.zerovec v0.11.21.2s0.0s (3%)alloc, derive, yoke
205.yoke-derive v0.8.01.2s
206.indexmap v2.9.01.2s0.0s (2%)default, serde, std
207.rand v0.9.11.1s0.2s (15%)alloc, default, os_rng, small_rng, std, std_rng, thread_rng
208.time-tz v2.0.0 build script (run)1.1sdb, default, js-sys, system, thiserror, windows-sys
209.anticipate v0.10.01.1s0.6s (57%)
210.idna v1.0.31.1s0.6s (54%)alloc, compiled_data, std
211.ipnet v2.11.01.1s0.7s (63%)default, std
212.sos-artifact v0.8.91.1s0.2s (14%)
213.linux-raw-sys v0.4.151.1s0.0s (3%)elf, errno, general, if_ether, ioctl, net, netlink, no_std, system, xdp
214.probability v0.20.31.1s0.5s (49%)
215.indexmap v2.9.01.1s0.0s (3%)default, std
216.fluent-bundle v0.15.31.0s0.7s (66%)default
217.serde_path_to_error v0.1.171.0s0.1s (13%)
218.semver v1.0.261.0s0.5s (46%)default, serde, std
219.tempfile v3.20.01.0s0.6s (59%)default, getrandom
220.hashbrown v0.15.31.0s0.0s (4%)
221.bytes v1.10.11.0s0.2s (22%)
222.serde_json_path_macros_internal v0.1.21.0s
223.xml-rs v0.8.261.0s0.4s (37%)
224.chbs v0.1.10.9s0.5s (50%)
225.nix v0.30.1 build script0.9sfs, process, signal
226.uuid v1.17.00.9s0.2s (16%)default, serde, std
227.intl_pluralrules v7.0.20.9s0.3s (32%)
228.anstream v0.6.180.9s0.4s (42%)auto, default, wincon
229.csv-core v0.1.120.9s0.4s (43%)default
230.icu_normalizer v2.0.00.9s0.3s (36%)compiled_data
231.sos-password v0.17.00.9s0.4s (47%)
232.unicode-width v0.1.140.9s0.1s (7%)cjk, default
233.memchr v2.7.40.9s0.4s (46%)alloc, default, std
234.derive_builder_macro v0.20.20.9slib_has_std
235.tower v0.5.20.9s0.0s (5%)__common, futures-core, futures-util, log, make, pin-project-lite, sync_wrapper, timeout, tokio, tracing, util
236.darling_macro v0.12.40.9s
237.oid-registry v0.7.1 build script0.9scrypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
238.futures-lite v2.6.00.9s0.1s (7%)alloc, fastrand, futures-io, parking, std
239.sos-preferences v0.17.00.9s0.2s (18%)
240.futures-macro v0.3.310.9s
241.icu_collections v2.0.00.8s0.3s (32%)
242.rustversion v1.0.21 build script0.8s
243.miniz_oxide v0.8.80.8s0.4s (54%)default, simd, simd-adler32, with-alloc
244.icu_normalizer v2.0.00.8s0.4s (42%)compiled_data
245.uuid v1.17.00.8s0.2s (27%)default, rng, serde, std, v4
246.diff v0.1.130.8s0.5s (65%)
247.derive_builder_macro v0.10.20.8s
248.axum-extra v0.10.10.8s0.1s (17%)default, tracing, typed-header
249.radix_trie v0.2.10.8s0.2s (21%)
250.matchit v0.7.30.8s0.3s (34%)default
251.bytes v1.10.10.8s0.2s (21%)default, std
252.num-traits v0.2.190.8s0.1s (11%)default, i128, std
253.urn v0.7.00.8s0.5s (60%)alloc, default, serde, std
254.doctest-file v1.0.00.8s
255.refinery-core v0.8.160.8s0.2s (31%)default
256.displaydoc v0.2.50.8sdefault, std
257.nix v0.28.0 build script0.8sfs, ioctl, poll, process, signal, term
258.hyper-rustls v0.27.60.8s0.3s (37%)http1, ring, tls12, webpki-roots, webpki-tokio
259.rand v0.8.50.8s0.1s (11%)alloc, default, getrandom, libc, rand_chacha, std, std_rng
260.yansi v1.0.10.7s0.1s (12%)alloc, default, std
261.rand_chacha v0.3.10.7s0.6s (80%)std
262.i18n-embed-impl v0.8.40.7sdefault, find-crate, fluent-system, i18n-config, quote
263.tracing-log v0.2.00.7s0.3s (41%)log-tracer, std
264.rust-embed-impl v8.7.20.7s
265.ecdsa v0.16.90.7s0.1s (14%)alloc, arithmetic, der, digest, hazmat, pkcs8, rfc6979, signing, spki, std, verifying
266.clap_lex v0.7.40.7s0.3s (38%)
267.tracing-core v0.1.330.7s0.3s (47%)default, once_cell, std
268.zeroize_derive v1.4.20.7s
269.tokio-macros v2.5.00.7s
270.tokio-stream v0.1.170.7s0.1s (10%)default, time
271.rusqlite v0.32.10.7s0.4s (49%)backup, bundled, modern_sqlite
272.prost v0.13.50.7s0.1s (15%)default, derive, std
273.libc v0.2.1720.7s0.0s (6%)default, std
274.sha3 v0.10.80.7s0.4s (52%)default, std
275.unicode-width v0.2.00.7s0.1s (14%)cjk, default
276.sos-archive v0.17.00.7s0.4s (62%)
277.sec1 v0.7.30.7s0.4s (56%)alloc, default, der, point, std, subtle, zeroize
278.pkcs8 v0.10.20.7s0.5s (66%)alloc, std
279.logos-derive v0.15.00.7s
280.generic-array v0.14.70.7s0.0s (3%)more_lengths, zeroize
281.crossbeam-utils v0.8.210.7s0.2s (29%)std
282.async-recursion v1.1.10.7s
283.pretty_assertions v1.4.10.7s0.4s (56%)default, std
284.vcpkg v0.2.150.7s0.4s (63%)
285.thread_local v1.1.80.7s0.2s (33%)
286.hashbrown v0.15.30.6s0.0s (4%)
287.prost v0.13.50.6s0.0s (7%)derive, prost-derive
288.refinery-core v0.8.160.6s0.4s (59%)default, rusqlite, serde, toml
289.proc-macro2-diagnostics v0.10.10.6s0.3s (52%)colors, default, yansi
290.anstyle v1.0.100.6s0.1s (23%)default, std
291.serde-xml-rs v0.5.10.6s0.0s (6%)
292.curve25519-dalek-derive v0.1.10.6s
293.sos-external-files v0.17.00.6s0.0s (8%)files, full
294.memchr v2.7.40.6s0.2s (30%)alloc, std
295.socket2 v0.5.100.6s0.3s (50%)all
296.typenum v1.18.00.6s0.0s (5%)
297.pem v3.0.50.6s0.4s (61%)default, serde, std
298.aes v0.8.40.6s0.2s (33%)
299.mio v1.0.40.6s0.2s (39%)default, log, net, os-ext, os-poll
300.num-integer v0.1.460.6s0.2s (36%)i128, std
301.typenum v1.18.00.6s0.0s (3%)
302.regex v1.11.10.6s0.3s (48%)default, perf, perf-backtrack, perf-cache, perf-dfa, perf-inline, perf-literal, perf-onepass, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
303.sos-reducers v0.17.00.6s0.1s (12%)files
304.sos-cli-helpers v0.1.10.6s0.1s (12%)
305.linux-raw-sys v0.9.40.6s0.0s (4%)elf, errno, general, ioctl, no_std
306.async-sqlite v0.4.00.6s0.5s (78%)backup, bundled, default
307.rusticata-macros v4.1.00.6s0.3s (44%)
308.proc-macro2 v1.0.950.6s0.2s (35%)default, proc-macro
309.crossbeam-channel v0.5.150.6s0.2s (28%)default, std
310.argon2 v0.5.30.6s0.2s (43%)alloc, default, password-hash, rand, std
311.tokio-tungstenite v0.26.20.6s0.0s (6%)__rustls-tls, connect, default, handshake, rustls, rustls-pki-types, rustls-tls-webpki-roots, stream, tokio-rustls, webpki-roots
312.sos-unit-tests v0.17.0 build script0.6sdefault, files, listen
313.cookie-factory v0.3.30.6s0.0s (7%)async, default, futures, std
314.anyhow v1.0.980.6s0.2s (35%)default, std
315.icu_provider v2.0.00.6s0.1s (18%)baked, zerotrie
316.libm v0.2.15 build script0.6sarch, default
317.bitflags v2.9.10.6s0.3s (52%)serde, std
318.ptyprocess v0.4.10.6s0.3s (50%)
319.icu_collections v2.0.00.6s0.3s (45%)
320.elliptic-curve v0.13.80.6s0.0s (3%)alloc, arithmetic, digest, ff, group, hazmat, pkcs8, sec1, std
321.password-hash v0.5.00.6s0.3s (47%)alloc, default, rand_core, std
322.mime_guess v2.0.50.5s0.2s (36%)default, rev-mappings
323.rand v0.8.50.5s0.0s (3%)small_rng
324.fdeflate v0.3.70.5s0.3s (50%)
325.qrcodegen v1.8.00.5s0.3s (63%)
326.deranged v0.4.00.5s0.0s (3%)alloc, powerfmt, std
327.fixedbitset v0.5.70.5s0.2s (28%)
328.parse-zoneinfo v0.3.10.5s0.3s (49%)
329.sos-server v0.17.0 build script0.5sacme, audit, default, listen, pairing, sos-audit
330.terminal-banner v0.4.10.5s0.3s (55%)color, colored
331.hashbrown v0.14.50.5s0.0s (6%)ahash, allocator-api2, default, inline-more
332.hex v0.4.30.5s0.0s (6%)alloc, default, serde, std
333.typeshare-annotation v1.0.40.5s
334.tempfile v3.20.00.5s0.2s (41%)default, getrandom
335.sha2 v0.10.90.5s0.3s (57%)default, std
336.intl_pluralrules v7.0.20.5s0.2s (44%)
337.xclipboard v0.16.10.5s0.1s (20%)
338.sos-account v0.17.4 build script0.5sarchive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
339.snow v0.9.6 build script0.5saes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
340.cfg_eval v0.1.20.5sdefault
341.special v0.10.30.5s0.2s (44%)
342.libdbus-sys v0.2.5 build script0.5sdefault, pkg-config
343.unicode-linebreak v0.1.50.5s0.1s (19%)
344.generic-array v0.14.70.5s0.0s (4%)more_lengths
345.ed25519-dalek v2.1.10.5s0.2s (40%)alloc, default, fast, rand_core, std, zeroize
346.sos-changes v0.17.0 build script0.5schanges-consumer, changes-producer, tokio-util
347.rustix v1.0.7 build script0.5salloc, default, fs, std
348.sos-remote-sync v0.17.0 build script0.5sfiles, full
349.sos-server-storage v0.17.1 build script0.5saudit, files, full, sos-audit, sos-external-files
350.sos-system-messages v0.17.00.5s0.1s (11%)
351.rs_merkle v1.5.00.5s0.2s (51%)default, std
352.semver v1.0.26 build script0.5sdefault, serde, std
353.sos-logs v0.17.0 build script0.5s
354.anstyle-parse v0.2.60.5s0.1s (19%)default, utf8
355.parking_lot v0.12.40.5s0.3s (62%)default
356.darling_macro v0.20.110.5s
357.endian-type v0.1.20.5s0.0s (10%)
358.serde_urlencoded v0.7.10.5s0.0s (7%)
359.synstructure v0.13.20.5s0.2s (41%)default, proc-macro
360.poly1305 v0.8.00.5s0.2s (51%)
361.filetime v0.2.250.5s0.2s (39%)
362.blake2 v0.10.60.4s0.2s (54%)default, std
363.sos-extension-service v0.17.00.4s0.0s (6%)
364.ring v0.17.14 build script0.4salloc, default, dev_urandom_fallback, std
365.unic-langid-impl v0.9.60.4s0.2s (44%)serde
366.rustls-pemfile v2.2.00.4s0.2s (45%)default, std
367.pkg-config v0.3.320.4s0.2s (54%)
368.sos-ipc v0.17.0 build script0.4sasync-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
369.sos-migrate v0.17.0 build script0.4sauthenticator, export, full, import, keychain-access
370.bit-vec v0.6.30.4s0.1s (14%)std
371.sos-net v0.17.3 build script0.4sarchive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
372.futures-executor v0.3.310.4s0.3s (69%)std
373.sos-platform-authenticator v0.17.0 build script0.4s
374.mime_guess v2.0.5 build script0.4sdefault, rev-mappings
375.regex v1.11.10.4s0.1s (19%)default, perf, perf-backtrack, perf-cache, perf-dfa, perf-inline, perf-literal, perf-onepass, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
376.is-docker v0.2.00.4s0.3s (69%)
377.heck v0.4.10.4s0.1s (34%)default
378.terminal-banner v0.4.1 build script0.4scolor, colored
379.signal-hook v0.3.18 build script0.4schannel, default, iterator
380.is-wsl v0.4.00.4s0.3s (64%)
381.proc-macro2-diagnostics v0.10.1 build script0.4scolors, default, yansi
382.sos-database-upgrader v0.17.1 build script0.4sarchive, full
383.probly-search v2.0.10.4s
384.fallible-iterator v0.3.00.4s0.0s (4%)alloc, default
385.xclipboard v0.16.1 build script0.4s
386.sos-integrity v0.17.1 build script0.4sfiles, full
387.flate2 v1.1.10.4s0.1s (19%)any_impl, default, miniz_oxide, rust_backend
388.utoipa-rapidoc v6.0.00.4s0.2s (41%)axum
389.sos-sdk v0.17.1 build script0.4sfiles, full
390.fs-err v3.1.0 build script0.4stokio
391.getrandom v0.3.3 build script0.4s
392.typed-generational-arena v0.2.90.4s0.0s (7%)default, std
393.unicode-segmentation v1.12.00.4s0.1s (25%)
394.icu_provider v2.0.00.4s0.1s (30%)baked, zerotrie
395.fluent-syntax v0.11.10.4s0.1s (21%)default
396.base64 v0.21.70.3s0.1s (28%)alloc, default, std
397.sha2 v0.10.90.3s0.1s (26%)default, std
398.signal-hook-registry v1.4.50.3s0.2s (68%)
399.toml_datetime v0.6.90.3s0.1s (41%)serde
400.httparse v1.10.10.3s0.1s (40%)default, std
401.proc-macro-error-attr2 v2.0.00.3s
402.walkdir v2.5.00.3s0.2s (60%)
403.memoffset v0.7.1 build script0.3sdefault
404.tokio-rustls v0.26.20.3s0.0s (5%)ring, tls12
405.zerotrie v0.2.20.3s0.1s (16%)yoke, zerofrom
406.aliasable v0.1.30.3s0.1s (28%)alloc, default
407.tracing-serde v0.2.00.3s0.0s (8%)
408.unic-langid-impl v0.9.60.3s0.2s (54%)
409.sha1 v0.10.60.3s0.1s (43%)default, std
410.rand_core v0.9.30.3s0.1s (29%)os_rng, std
411.http-body-util v0.1.30.3s0.0s (6%)default
412.either v1.15.00.3s0.0s (6%)std, use_std
413.ppv-lite86 v0.2.210.3s0.0s (6%)simd, std
414.sos-web v0.17.0 build script0.3sarchive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
415.base64 v0.22.10.3s0.1s (33%)alloc, default, std
416.spki v0.7.30.3s0.1s (28%)alloc, std
417.autocfg v1.4.00.3s0.2s (62%)
418.zerotrie v0.2.20.3s0.1s (24%)yoke, zerofrom
419.sos-security-report v0.17.10.3s0.0s (6%)
420.linux-raw-sys v0.9.40.3s0.0s (5%)elf, errno, general, ioctl, no_std
421.sos-platform-authenticator v0.17.00.3s0.1s (40%)
422.cipher v0.4.40.3s0.0s (4%)zeroize
423.open v5.3.20.3s0.1s (26%)
424.comma v1.0.00.3s0.1s (36%)
425.intl-memoizer v0.5.30.3s0.1s (30%)
426.libsqlite3-sys v0.30.1 build script0.3sbundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
427.hashlink v0.9.10.3s0.0s (5%)
428.fluent-syntax v0.11.10.3s0.0s (9%)default
429.rustix v0.38.44 build script0.3salloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
430.semver v1.0.260.3s0.1s (26%)default, std
431.mime v0.3.170.3s0.1s (45%)
432.zerocopy v0.8.25 build script0.3ssimd
433.sos-search v0.17.1 build script0.3s
434.shell-words v1.1.00.3s0.1s (39%)default, std
435.logos v0.14.40.3s0.0s (7%)default, export_derive, logos-derive, std
436.sos-password v0.17.0 build script0.3s
437.once_cell v1.21.30.3s0.1s (21%)alloc, default, race, std
438.async-fd-lock v0.2.00.3s0.0s (7%)async, default
439.rev_buf_reader v0.3.00.3s0.0s (11%)default
440.either v1.15.00.3s0.0s (5%)std, use_std
441.walkdir v2.5.00.3s0.1s (48%)
442.allocator-api2 v0.2.210.3s0.0s (8%)alloc
443.base64ct v1.7.30.3s0.0s (14%)alloc, std
444.fastrand v2.3.00.3s0.0s (16%)alloc, default, std
445.writeable v0.6.10.3s0.1s (35%)
446.parking_lot_core v0.9.110.3s0.1s (32%)
447.arc-swap v1.7.10.3s0.1s (25%)
448.matchers v0.1.00.3s0.0s (14%)
449.scrypt v0.11.00.3s0.2s (58%)
450.qrcodegen-image v1.5.00.3s0.2s (73%)base64
451.bech32 v0.9.10.3s0.1s (44%)default, std
452.sanitize-filename v0.6.00.3s0.1s (35%)
453.lock_api v0.4.130.3s0.0s (3%)atomic_usize, default
454.iana-time-zone v0.1.630.3s0.1s (57%)fallback
455.strsim v0.11.10.3s0.1s (46%)
456.quote v1.0.400.3s0.1s (31%)default, proc-macro
457.libc v0.2.172 build script0.3sdefault, extra_traits, std
458.sos-client-storage v0.17.1 build script0.3sarchive, audit, files, full, search, sos-audit, sos-external-files, sos-search
459.find-crate v0.6.30.2s0.1s (31%)
460.libc v0.2.172 build script0.2sdefault, std
461.getrandom v0.3.30.2s0.1s (23%)
462.tracing v0.1.410.2s0.1s (37%)attributes, default, log, std, tracing-attributes
463.human_bytes v0.4.30.2s0.1s (24%)default, si-units
464.parking_lot v0.12.40.2s0.1s (42%)default
465.etcetera v0.8.00.2s0.1s (42%)
466.sos-login v0.17.2 build script0.2sfiles, full
467.httpdate v1.0.30.2s0.1s (60%)
468.bitflags v2.9.10.2s0.0s (21%)std
469.byteorder-lite v0.1.00.2s0.0s (5%)default, std
470.getrandom v0.3.3 build script0.2sstd
471.minimal-lexical v0.2.10.2s0.1s (23%)std
472.fluent-langneg v0.13.00.2s0.1s (31%)default
473.sos-sync v0.17.0 build script0.2sfiles, full
474.async-compression v0.4.230.2s0.0s (4%)deflate, flate2, futures-io
475.proc-macro-error2 v2.0.10.2s0.1s (31%)default, syn-error
476.libdbus-sys v0.2.50.2s0.0s (10%)default, pkg-config
477.rustix v1.0.7 build script0.2salloc, default, fs, std, termios
478.rustc_version v0.4.10.2s0.1s (50%)
479.typenum v1.18.0 build script0.2s
480.bytemuck v1.23.00.2s0.0s (9%)extern_crate_alloc
481.nibble_vec v0.1.00.2s0.0s (20%)
482.smawk v0.3.20.2s0.0s (10%)
483.arc-swap v1.7.10.2s0.0s (16%)
484.prettyplease v0.2.33 build script0.2s
485.terminal_size v0.4.20.2s0.1s (33%)
486.writeable v0.6.10.2s0.0s (22%)
487.digest v0.10.70.2s0.0s (5%)alloc, block-buffer, const-oid, core-api, default, mac, oid, std, subtle
488.anyhow v1.0.98 build script0.2sdefault, std
489.httparse v1.10.1 build script0.2sdefault, std
490.version_check v0.9.50.2s0.1s (53%)
491.syn v1.0.109 build script0.2sclone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
492.keccak v0.1.50.2s0.1s (48%)
493.type-map v0.5.10.2s0.1s (55%)
494.lock_api v0.4.130.2s0.0s (5%)atomic_usize, default
495.random v0.13.20.2s0.0s (12%)
496.litemap v0.8.00.2s0.0s (6%)alloc
497.crossbeam-utils v0.8.21 build script0.2sstd
498.unicase v2.8.10.2s0.1s (40%)
499.thiserror v1.0.69 build script0.2s
500.intl-memoizer v0.5.30.2s0.1s (61%)
501.bit-set v0.5.30.2s0.0s (13%)std
502.thiserror v2.0.12 build script0.2sdefault, std
503.rust-embed-utils v8.7.20.2s0.1s (54%)
504.curve25519-dalek v4.1.3 build script0.2salloc, default, digest, precomputed-tables, zeroize
505.strsim v0.10.00.2s0.1s (44%)
506.ctrlc v3.4.70.2s0.0s (20%)
507.unicode-ident v1.0.180.2s0.0s (20%)
508.ed25519 v2.2.30.2s0.1s (45%)alloc, std
509.litemap v0.8.00.2s0.0s (2%)alloc
510.serde v1.0.219 build script0.2sdefault, derive, serde_derive, std
511.semver v1.0.26 build script0.2sdefault, std
512.logos v0.15.00.2s0.0s (9%)default, export_derive, logos-derive, std
513.sos-debug-snapshot v0.17.00.2s0.0s (22%)
514.multimap v0.10.10.2s0.0s (6%)
515.sos-protocol v0.17.0 build script (run)0.2sbs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
516.tinystr v0.8.10.2s0.0s (10%)alloc, default, zerovec
517.yoke v0.8.00.2s0.0s (7%)alloc, derive, zerofrom
518.proc-macro2 v1.0.95 build script0.2sdefault, proc-macro
519.num v0.4.30.2s0.0s (11%)default, num-bigint, std
520.const-oid v0.9.60.2s0.1s (45%)
521.parking_lot_core v0.9.11 build script0.2s
522.tower-layer v0.3.30.2s0.0s (7%)
523.num-iter v0.1.450.2s0.0s (8%)i128, std
524.balloon-hash v0.4.00.2s0.0s (25%)alloc, default, password-hash, rand, std
525.typeshare v1.0.40.2s0.0s (21%)default, wasmbind
526.simd-adler32 v0.3.70.2s0.1s (47%)const-generics, default, std
527.fd-lock v4.0.40.2s0.0s (10%)
528.parking_lot_core v0.9.110.2s0.0s (25%)
529.utf-8 v0.7.60.2s0.0s (27%)
530.sos-external-files v0.17.0 build script0.2sfiles, full
531.serde v1.0.219 build script0.2salloc, default, derive, serde_derive, std
532.num_threads v0.1.70.2s0.1s (64%)
533.ryu v1.0.200.2s0.1s (37%)
534.chacha20 v0.9.10.2s0.0s (9%)zeroize
535.colorchoice v1.0.30.2s0.0s (21%)
536.secrecy v0.10.30.2s0.1s (41%)serde
537.fastrand v2.3.00.2s0.0s (19%)alloc, default, std
538.crc32fast v1.4.20.2s0.0s (30%)default, std
539.base16ct v0.2.00.2s0.0s (30%)alloc
540.yoke v0.8.00.2s0.0s (7%)alloc, derive, zerofrom
541.fluent-langneg v0.13.00.2s0.1s (50%)default
542.heck v0.5.00.2s0.1s (51%)
543.signal-hook-mio v0.2.40.2s0.0s (17%)mio-1_0, support-v1_0
544.toml_write v0.1.10.2s0.0s (19%)alloc, default, std
545.log v0.4.270.2s0.0s (25%)std
546.webpki-roots v1.0.00.2s0.0s (9%)
547.memoffset v0.7.10.2s0.0s (18%)default
548.group v0.13.00.2s0.0s (14%)alloc
549.polyval v0.6.20.2s0.1s (34%)
550.tinystr v0.8.10.2s0.0s (14%)alloc, default, zerovec
551.rand_core v0.6.40.1s0.0s (24%)alloc, getrandom, std
552.sos-signer v0.17.0 build script0.1s
553.sos-reducers v0.17.0 build script0.1sfiles
554.smallvec v1.15.00.1s0.0s (11%)const_generics
555.sync_wrapper v1.0.20.1s0.0s (12%)futures, futures-core
556.copy_dir v0.1.30.1s0.0s (11%)
557.ahash v0.8.120.1s0.0s (18%)
558.sos-vault v0.17.1 build script0.1s
559.sos-database v0.17.0 build script0.1sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
560.logos-codegen v0.15.0 build script0.1s
561.memoffset v0.7.1 build script (run)0.1sdefault
562.getrandom v0.2.160.1s0.0s (32%)std
563.inotify-sys v0.1.50.1s0.0s (12%)
564.ahash v0.8.12 build script0.1s
565.futures-channel v0.3.310.1s0.0s (10%)alloc, default, futures-sink, sink, std
566.sos-backend v0.17.1 build script0.1sarchive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
567.sos-filesystem v0.17.0 build script0.1sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
568.smallvec v1.15.00.1s0.0s (2%)const_generics, const_new
569.zeroize v1.8.10.1s0.0s (20%)alloc, default, derive, zeroize_derive
570.sos-system-messages v0.17.0 build script0.1s
571.urlencoding v2.1.30.1s0.1s (47%)
572.binary-stream v10.0.0 build script0.1sasync, default, tokio
573.once_cell v1.21.30.1s0.0s (21%)alloc, default, race, std
574.utf8parse v0.2.20.1s0.0s (14%)default
575.sos-core v0.17.1 build script0.1sfiles
576.pathdiff v0.2.30.1s0.0s (18%)
577.bs58 v0.4.00.1s0.0s (29%)alloc, default, std
578.shlex v1.3.00.1s0.0s (24%)default, std
579.proc-macro2 v1.0.95 build script (run)0.1sdefault, proc-macro
580.percent-encoding v2.3.10.1s0.0s (35%)alloc, default, std
581.icu_properties_data v2.0.10.1s0.0s (15%)
582.headers-core v0.3.00.1s0.0s (25%)
583.form_urlencoded v1.2.10.1s0.1s (43%)alloc, default, std
584.getrandom v0.3.30.1s0.0s (29%)std
585.rand_core v0.6.40.1s0.0s (13%)
586.icu_properties_data v2.0.1 build script0.1s
587.lock_api v0.4.13 build script0.1satomic_usize, default
588.slab v0.4.9 build script0.1sdefault, std
589.siphasher v1.0.10.1s0.0s (9%)default, std
590.powerfmt v0.2.00.1s0.0s (27%)
591.anyhow v1.0.98 build script (run)0.1sdefault, std
592.anstyle-query v1.1.20.1s0.0s (19%)
593.sos-preferences v0.17.0 build script0.1s
594.is_terminal_polyfill v1.70.10.1s0.0s (17%)default
595.ctr v0.9.20.1s0.0s (6%)
596.rust-embed-utils v8.7.20.1s0.0s (34%)
597.phf_generator v0.11.30.1s0.0s (37%)
598.base32 v0.5.10.1s0.0s (41%)
599.serde_json_path_macros v0.1.60.1s0.0s (14%)
600.digest v0.10.70.1s0.0s (12%)alloc, block-buffer, core-api, default, std
601.generic-array v0.14.7 build script0.1smore_lengths, zeroize
602.siphasher v1.0.10.1s0.0s (19%)default, std
603.num-traits v0.2.19 build script0.1sdefault, i128, std
604.idna_adapter v1.2.10.1s0.0s (17%)compiled_data
605.clap v4.5.390.1s0.0s (13%)color, default, derive, env, error-context, help, std, suggestions, usage, wrap_help
606.serde_json v1.0.140 build script0.1sdefault, raw_value, std
607.ouroboros v0.18.50.1s0.0s (28%)default, std
608.phf_shared v0.11.30.1s0.0s (25%)std
609.futures-task v0.3.310.1s0.0s (18%)alloc, std
610.potential_utf v0.1.20.1s0.0s (35%)zerovec
611.generic-array v0.14.7 build script0.1smore_lengths
612.log v0.4.270.1s0.0s (21%)
613.icu_normalizer_data v2.0.0 build script0.1s
614.powerfmt v0.2.00.1s0.0s (21%)
615.protoc-bin-vendored-linux-x86_64 v3.1.00.1s0.0s (44%)
616.unicase v2.8.10.1s0.0s (15%)
617.serde_spanned v0.6.80.1s0.0s (15%)serde
618.phf_shared v0.11.30.1s0.0s (22%)default, std
619.instant v0.1.130.1s0.0s (23%)
620.fs-err v3.1.0 build script (run)0.1stokio
621.type-map v0.5.10.1s0.0s (30%)
622.idna_adapter v1.2.10.1s0.0s (19%)compiled_data
623.subtle v2.6.10.1s0.0s (10%)default, i128, std
624.block-buffer v0.10.40.1s0.0s (11%)
625.rustls v0.23.27 build script0.1sring, std, tls12
626.phf v0.11.30.1s0.0s (15%)default, std
627.protoc-bin-vendored-macos-x86_64 v3.1.00.1s0.0s (37%)
628.derive_builder v0.20.20.1s0.0s (21%)default, std
629.slab v0.4.90.1s0.0s (6%)default, std
630.aes-gcm v0.10.30.1s0.0s (7%)aes, alloc, default, getrandom, rand_core, std
631.want v0.3.10.1s0.0s (38%)
632.protoc-bin-vendored-linux-x86_32 v3.1.00.1s0.0s (42%)
633.same-file v1.0.60.1s0.0s (25%)
634.sos-integration-tests v0.17.00.1s0.0s (19%)
635.zerofrom v0.1.60.1s0.0s (9%)alloc, derive
636.parking v2.2.10.1s0.0s (35%)
637.futures-io v0.3.310.1s0.0s (20%)default, std
638.protoc-bin-vendored v3.1.00.1s0.0s (24%)
639.inventory v0.3.200.1s0.0s (26%)
640.salsa20 v0.10.20.1s0.0s (6%)
641.derive_builder v0.10.20.1s0.0s (21%)default, std
642.aead v0.5.20.1s0.0s (13%)alloc, getrandom, rand_core, std
643.icu_properties_data v2.0.10.1s0.0s (18%)
644.sos-unit-tests v0.17.00.1s0.0s (18%)default, files, listen
645.sos-command-line-tests v0.17.00.1s0.0s (18%)
646.form_urlencoded v1.2.10.1s0.0s (25%)alloc, std
647.x25519-dalek v2.0.10.1s0.0s (11%)alloc, default, precomputed-tables, static_secrets, zeroize
648.cfg_aliases v0.2.10.1s0.0s (21%)
649.potential_utf v0.1.20.1s0.0s (26%)zerovec
650.ghash v0.5.10.1s0.0s (20%)
651.static_assertions v1.1.00.1s0.0s (17%)
652.protoc-bin-vendored-win32 v3.1.00.1s0.0s (34%)
653.futures-core v0.3.310.1s0.0s (23%)alloc, default, std
654.overload v0.1.10.1s0.0s (22%)
655.inout v0.1.40.1s0.0s (15%)
656.percent-encoding v2.3.10.1s0.0s (23%)alloc, std
657.protoc-bin-vendored-macos-aarch_64 v3.1.00.1s0.0s (30%)
658.http-body v1.0.10.1s0.0s (16%)
659.sos-changes v0.17.0 build script (run)0.1schanges-consumer, changes-producer, tokio-util
660.beef v0.5.20.1s0.0s (9%)default
661.signature v2.2.00.1s0.0s (28%)alloc, digest, rand_core, std
662.sos-sdk v0.17.10.1s0.0s (13%)files, full
663.protoc-bin-vendored-linux-ppcle_64 v3.1.00.1s0.0s (23%)
664.hkdf v0.12.40.1s0.0s (13%)
665.nonzero_ext v0.1.50.1s0.0s (30%)default, std
666.fallible-streaming-iterator v0.1.90.1s0.0s (9%)
667.rustix v1.0.7 build script (run)0.1salloc, default, fs, std
668.libsqlite3-sys v0.30.10.1s0.0s (13%)bundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
669.chacha20poly1305 v0.10.10.1s0.0s (9%)alloc, default, getrandom, rand_core, std
670.phf_codegen v0.11.30.1s0.0s (16%)
671.cfg_aliases v0.1.10.1s0.0s (20%)
672.protoc-bin-vendored-linux-aarch_64 v3.1.00.1s0.0s (32%)
673.utf8_iter v1.0.40.1s0.0s (15%)
674.home v0.5.110.1s0.0s (48%)
675.utf8_iter v1.0.40.1s0.0s (23%)
676.num-conv v0.1.00.1s0.0s (7%)
677.hmac v0.12.10.1s0.0s (11%)reset
678.adler2 v2.0.00.1s0.0s (42%)
679.itoa v1.0.150.1s0.0s (11%)
680.zerofrom v0.1.60.1s0.0s (7%)alloc, derive
681.rfc6979 v0.4.00.1s0.0s (9%)
682.ff v0.13.10.1s0.0s (8%)alloc
683.block-buffer v0.10.40.1s0.0s (13%)
684.num-conv v0.1.00.1s0.0s (14%)
685.itoa v1.0.150.1s0.0s (11%)
686.io_tee v0.1.10.1s0.0s (17%)
687.proc-macro2-diagnostics v0.10.1 build script (run)0.1scolors, default, yansi
688.universal-hash v0.5.10.1s0.0s (18%)
689.cfg-if v0.1.100.1s0.0s (28%)
690.same-file v1.0.60.1s0.0s (19%)
691.crypto-common v0.1.60.1s0.0s (12%)getrandom, rand_core, std
692.snow v0.9.6 build script (run)0.1saes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
693.sos-server-storage v0.17.1 build script (run)0.1saudit, files, full, sos-audit, sos-external-files
694.equivalent v1.0.20.1s0.0s (26%)
695.crypto-common v0.1.60.1s0.0s (26%)std
696.lazy_static v1.5.00.1s0.0s (17%)
697.num-traits v0.2.19 build script (run)0.1sdefault, i128, std
698.fluent v0.16.10.1s0.0s (25%)
699.sos-vfs v0.3.20.1s0.0s (19%)
700.ident_case v1.0.10.1s0.0s (11%)
701.sos-net v0.17.3 build script (run)0.1sarchive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
702.atomic-waker v1.1.20.1s0.0s (22%)
703.sos-logs v0.17.0 build script (run)0.1s
704.untrusted v0.9.00.1s0.0s (14%)
705.rustc-hash v2.1.10.1s0.0s (13%)default, std
706.darling v0.12.40.1s0.0s (16%)default, suggestions
707.unic-langid v0.9.60.1s0.0s (29%)default, serde
708.sos-account v0.17.4 build script (run)0.1sarchive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
709.time-core v0.1.40.1s0.0s (19%)
710.xclipboard v0.16.1 build script (run)0.1s
711.futures-sink v0.3.310.1s0.0s (13%)alloc, default, std
712.equivalent v1.0.20.0s0.0s (27%)
713.sos-integrity v0.17.1 build script (run)0.0sfiles, full
714.thiserror v2.0.120.0s0.0s (19%)default, std
715.anyhow v1.0.98 build script (run)0.0sdefault, std
716.rust-embed v8.7.20.0s0.0s (26%)
717.pbkdf2 v0.12.20.0s0.0s (22%)default, hmac
718.libdbus-sys v0.2.5 build script (run)0.0sdefault, pkg-config
719.rustc-hash v2.1.10.0s0.0s (19%)default, std
720.futures v0.3.310.0s0.0s (30%)alloc, async-await, default, executor, futures-executor, std
721.lock_api v0.4.13 build script (run)0.0satomic_usize, default
722.sos-database-upgrader v0.17.1 build script (run)0.0sarchive, full
723.rustversion v1.0.21 build script (run)0.0s
724.terminal-banner v0.4.1 build script (run)0.0scolor, colored
725.try-lock v0.2.50.0s0.0s (19%)
726.webpki-roots v0.26.110.0s0.0s (24%)
727.time-core v0.1.40.0s0.0s (19%)
728.sos-web v0.17.0 build script (run)0.0sarchive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
729.rust-embed v8.7.20.0s0.0s (23%)
730.thiserror v1.0.690.0s0.0s (13%)
731.slab v0.4.9 build script (run)0.0sdefault, std
732.icu_normalizer_data v2.0.00.0s0.0s (24%)
733.sos-migrate v0.17.0 build script (run)0.0sauthenticator, export, full, import, keychain-access
734.fnv v1.0.70.0s0.0s (32%)default, std
735.sos-ipc v0.17.0 build script (run)0.0sasync-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
736.thiserror v2.0.12 build script (run)0.0sdefault, std
737.lock_api v0.4.13 build script (run)0.0satomic_usize, default
738.sos-sdk v0.17.1 build script (run)0.0sfiles, full
739.refinery v0.8.160.0s0.0s (13%)default, rusqlite, toml
740.constant_time_eq v0.3.10.0s0.0s (26%)
741.rustix v0.38.44 build script (run)0.0salloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
742.pin-project-lite v0.2.160.0s0.0s (29%)
743.pin-project v1.1.100.0s0.0s (18%)
744.cpufeatures v0.2.170.0s0.0s (36%)
745.sos-platform-authenticator v0.17.0 build script (run)0.0s
746.scopeguard v1.2.00.0s0.0s (12%)
747.proc-macro2 v1.0.95 build script (run)0.0sdefault, proc-macro
748.thiserror v1.0.69 build script (run)0.0s
749.self_cell v1.2.00.0s0.0s (29%)
750.semver v1.0.26 build script (run)0.0sdefault, serde, std
751.self_cell v1.2.00.0s0.0s (15%)
752.sos-remote-sync v0.17.0 build script (run)0.0sfiles, full
753.sos-server v0.17.0 build script (run)0.0sacme, audit, default, listen, pairing, sos-audit
754.rustix v1.0.7 build script (run)0.0salloc, default, fs, std, termios
755.cpufeatures v0.2.170.0s0.0s (33%)
756.lazy_static v1.5.00.0s0.0s (36%)
757.rustc-hash v1.1.00.0s0.0s (24%)default, std
758.self_cell v0.10.30.0s0.0s (21%)
759.sos-client-storage v0.17.1 build script (run)0.0sarchive, audit, files, full, search, sos-audit, sos-external-files, sos-search
760.thiserror v1.0.690.0s0.0s (18%)
761.rustc-hash v1.1.00.0s0.0s (18%)default, std
762.darling v0.20.110.0s0.0s (23%)default, suggestions
763.opaque-debug v0.3.10.0s0.0s (26%)
764.icu_normalizer_data v2.0.00.0s0.0s (28%)
765.unicode-ident v1.0.180.0s0.0s (27%)
766.fluent v0.16.10.0s0.0s (18%)
767.oid-registry v0.7.1 build script (run)0.0scrypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
768.unic-langid v0.9.60.0s0.0s (20%)default
769.sos-vault v0.17.1 build script (run)0.0s
770.scopeguard v1.2.00.0s0.0s (12%)
771.curve25519-dalek v4.1.3 build script (run)0.0salloc, default, digest, precomputed-tables, zeroize
772.sos-password v0.17.0 build script (run)0.0s
773.cfg-if v1.0.00.0s0.0s (25%)
774.tower-service v0.3.30.0s0.0s (10%)
775.pin-utils v0.1.00.0s0.0s (39%)
776.stable_deref_trait v1.2.00.0s0.0s (22%)alloc
777.rustls v0.23.27 build script (run)0.0sring, std, tls12
778.serde v1.0.219 build script (run)0.0salloc, default, derive, serde_derive, std
779.thiserror v1.0.69 build script (run)0.0s
780.fnv v1.0.70.0s0.0s (25%)default, std
781.sos-login v0.17.2 build script (run)0.0sfiles, full
782.sos-search v0.17.1 build script (run)0.0s
783.bitflags v1.3.20.0s0.0s (6%)default
784.semver v1.0.26 build script (run)0.0sdefault, std
785.zerocopy v0.8.25 build script (run)0.0ssimd
786.signal-hook v0.3.18 build script (run)0.0schannel, default, iterator
787.sos-sync v0.17.0 build script (run)0.0sfiles, full
788.serde v1.0.219 build script (run)0.0sdefault, derive, serde_derive, std
789.syn v1.0.109 build script (run)0.0sclone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
790.stable_deref_trait v1.2.00.0s0.0s (16%)alloc
791.sos-core v0.17.1 build script (run)0.0sfiles
792.sos-preferences v0.17.0 build script (run)0.0s
793.self_cell v0.10.30.0s0.0s (20%)
794.logos-codegen v0.15.0 build script (run)0.0s
795.generic-array v0.14.7 build script (run)0.0smore_lengths
796.icu_normalizer_data v2.0.0 build script (run)0.0s
797.httparse v1.10.1 build script (run)0.0sdefault, std
798.sos-system-messages v0.17.0 build script (run)0.0s
799.nix v0.30.1 build script (run)0.0sfs, process, signal
800.sos-filesystem v0.17.0 build script (run)0.0sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
801.getrandom v0.3.3 build script (run)0.0s
802.sos-reducers v0.17.0 build script (run)0.0sfiles
803.typenum v1.18.0 build script (run)0.0s
804.libc v0.2.172 build script (run)0.0sdefault, extra_traits, std
805.ahash v0.8.12 build script (run)0.0s
806.sos-signer v0.17.0 build script (run)0.0s
807.sos-backend v0.17.1 build script (run)0.0sarchive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
808.typenum v1.18.0 build script (run)0.0s
809.libm v0.2.15 build script (run)0.0sarch, default
810.sos-external-files v0.17.0 build script (run)0.0sfiles, full
811.serde_json v1.0.140 build script (run)0.0sdefault, raw_value, std
812.sos-database v0.17.0 build script (run)0.0sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
813.icu_properties_data v2.0.1 build script (run)0.0s
814.mime_guess v2.0.5 build script (run)0.0sdefault, rev-mappings
815.libc v0.2.172 build script (run)0.0sdefault, std
816.parking_lot_core v0.9.11 build script (run)0.0s
817.prettyplease v0.2.33 build script (run)0.0s
818.generic-array v0.14.7 build script (run)0.0smore_lengths, zeroize
819.binary-stream v10.0.0 build script (run)0.0sasync, default, tokio
820.nix v0.28.0 build script (run)0.0sfs, ioctl, poll, process, signal, term
821.sos-unit-tests v0.17.0 build script (run)0.0sdefault, files, listen
822.getrandom v0.3.3 build script (run)0.0sstd
823.crossbeam-utils v0.8.21 build script (run)0.0sstd
824.icu_properties_data v2.0.1 build script (run)0.0s
825.parking_lot_core v0.9.11 build script (run)0.0s
826.cfg-if v1.0.00.0s0.0s (4%)
827.icu_normalizer_data v2.0.0 build script (run)0.0s
+ + + diff --git a/doc/rust-1.90-timings/cargo-1.89.html b/doc/rust-1.90-timings/cargo-1.89.html new file mode 100644 index 0000000000..c4a603f348 --- /dev/null +++ b/doc/rust-1.90-timings/cargo-1.89.html @@ -0,0 +1,39931 @@ + + + + Cargo Build Timings — sos-database 0.17.0, sos-reducers 0.17.0, keychain_parser 0.1.2, sos-net 0.17.3, xclipboard 0.16.1, sos-debug-snapshot 0.17.0, sos-migrate 0.17.0, sos-vfs 0.3.2, sos-preferences 0.17.0, sos-sync 0.17.0, sos-security-report 0.17.1, sos-test-utils 0.17.0, sos-client-storage 0.17.1, sos-search 0.17.1, sos-password 0.17.0, sos-sdk 0.17.1, sos-extension-service 0.17.0, sos-system-messages 0.17.0, sos-artifact 0.8.9, sos 0.17.0, sos-unit-tests 0.17.0, sos-web 0.17.0, sos-filesystem 0.17.0, sos-signer 0.17.0, sos-ipc 0.17.0, sos-core 0.17.1, sos-command-line-tests 0.17.0, sos-database-upgrader 0.17.1, sos-external-files 0.17.0, sos-audit 0.17.0, sos-account 0.17.4, sos-integrity 0.17.1, sos-protocol 0.17.0, sos-login 0.17.2, sos-cli-helpers 0.1.1, sos-logs 0.17.0, sos-changes 0.17.0, sos-remote-sync 0.17.0, sos-vault 0.17.1, sos-archive 0.17.0, sos-server-storage 0.17.1, sos-server 0.17.0, sos-integration-tests 0.17.0, sos-platform-authenticator 0.17.0, sos-backend 0.17.1 + + + + + +

Cargo Build Timings

+See Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Targets:sos-database 0.17.0 (lib)
sos-reducers 0.17.0 (lib)
keychain_parser 0.1.2 (lib)
sos-net 0.17.3 (lib)
xclipboard 0.16.1 (lib)
sos-debug-snapshot 0.17.0 (lib)
sos-migrate 0.17.0 (lib)
sos-vfs 0.3.2 (lib)
sos-preferences 0.17.0 (lib)
sos-sync 0.17.0 (lib)
sos-security-report 0.17.1 (lib)
sos-test-utils 0.17.0 (lib)
sos-client-storage 0.17.1 (lib)
sos-search 0.17.1 (lib)
sos-password 0.17.0 (lib)
sos-sdk 0.17.1 (lib)
sos-extension-service 0.17.0 (lib, bin "sos-extension-helper")
sos-system-messages 0.17.0 (lib)
sos-artifact 0.8.9 (lib)
sos 0.17.0 (lib, bin "sos")
sos-unit-tests 0.17.0 (lib)
sos-web 0.17.0 (lib)
sos-filesystem 0.17.0 (lib)
sos-signer 0.17.0 (lib)
sos-ipc 0.17.0 (lib)
sos-core 0.17.1 (lib)
sos-command-line-tests 0.17.0 (lib)
sos-database-upgrader 0.17.1 (lib)
sos-external-files 0.17.0 (lib)
sos-audit 0.17.0 (lib)
sos-account 0.17.4 (lib)
sos-integrity 0.17.1 (lib)
sos-protocol 0.17.0 (lib)
sos-login 0.17.2 (lib)
sos-cli-helpers 0.1.1 (lib)
sos-logs 0.17.0 (lib)
sos-changes 0.17.0 (lib)
sos-remote-sync 0.17.0 (lib)
sos-vault 0.17.1 (lib)
sos-archive 0.17.0 (lib)
sos-server-storage 0.17.1 (lib)
sos-server 0.17.0 (lib, bin "sos-server")
sos-integration-tests 0.17.0 (lib, bin "db-compile-options", bin "make-v3-backup-fixtures", bin "test-extension-helper", bin "test-preferences-concurrency")
sos-platform-authenticator 0.17.0 (lib)
sos-backend 0.17.1 (lib)
Profile:release
Fresh units:0
Dirty units:827
Total units:827
Max concurrency:16 (jobs=16 ncpu=16)
Build start:2025-09-18T22:57:23.170502359Z
Total time:203.5s (3m 23.5s)
rustc:rustc 1.89.0 (29483883e 2025-08-04)
Host: x86_64-unknown-linux-gnu
Target: x86_64-unknown-linux-gnu
+ + + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UnitTotalCodegenFeatures
1.sos v0.17.0 bin "sos"115.5s
2.sos-extension-service v0.17.0 bin "sos-extension-helper"94.9s
3.sos-server v0.17.0 bin "sos-server"92.6sacme, audit, default, listen, pairing, sos-audit
4.sos-integration-tests v0.17.0 bin "make-v3-backup-fixtures"81.6s
5.sos-integration-tests v0.17.0 bin "test-extension-helper"77.6s
6.libsqlite3-sys v0.30.1 build script (run)52.0sbundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
7.vcard4 v0.7.223.0s11.6s (51%)default, serde, zeroize
8.sos-integration-tests v0.17.0 bin "db-compile-options"22.2s
9.sos-integration-tests v0.17.0 bin "test-preferences-concurrency"18.8s
10.rustls v0.23.2715.5s10.0s (65%)ring, std, tls12
11.sos-net v0.17.315.3s7.4s (48%)archive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
12.tokio v1.45.115.0s7.8s (52%)bytes, default, fs, io-std, io-util, libc, macros, mio, net, process, rt, rt-multi-thread, signal-hook-registry, socket2, sync, time, tokio-macros
13.sos-client-storage v0.17.112.7s8.4s (66%)archive, audit, files, full, search, sos-audit, sos-external-files, sos-search
14.sos-server v0.17.012.3s9.7s (79%)acme, audit, default, listen, pairing, sos-audit
15.x11rb-protocol v0.13.112.3s6.0s (49%)std
16.sos-account v0.17.411.5s7.3s (63%)archive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
17.regex-automata v0.4.911.5s8.2s (72%)alloc, dfa, dfa-build, dfa-onepass, dfa-search, hybrid, meta, nfa, nfa-backtrack, nfa-pikevm, nfa-thompson, perf, perf-inline, perf-literal, perf-literal-multisubstring, perf-literal-substring, std, syntax, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment, unicode-word-boundary
18.utoipa-gen v5.3.111.4suuid
19.reqwest v0.12.1811.0s8.6s (79%)__rustls, __rustls-ring, __tls, json, rustls-tls, rustls-tls-webpki-roots, rustls-tls-webpki-roots-no-provider, stream
20.h2 v0.4.1010.6s4.2s (40%)
21.toml_edit v0.22.2610.5s7.4s (70%)display, parse, serde
22.clap_builder v4.5.3910.4s6.4s (61%)color, env, error-context, help, std, suggestions, usage, wrap_help
23.sos v0.17.09.9s5.5s (55%)
24.axum v0.8.49.8s2.5s (25%)default, form, http1, json, matched-path, original-uri, query, tokio, tower-log, tracing, ws
25.dbus v0.9.79.0s4.8s (53%)
26.sos-web v0.17.08.5s3.7s (44%)archive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
27.rustix v0.38.448.3s2.1s (25%)alloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
28.sos-server-storage v0.17.18.2s5.9s (71%)audit, files, full, sos-audit, sos-external-files
29.sos-vault v0.17.17.7s2.3s (30%)
30.x509-parser v0.16.07.4s5.3s (71%)default
31.sos-protocol v0.17.07.2s3.9s (54%)bs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
32.sos-test-utils v0.17.07.1s5.8s (82%)
33.time-tz v2.0.07.0s0.6s (9%)db, default, js-sys, system, thiserror, windows-sys
34.sos-core v0.17.16.6s2.3s (35%)files
35.tracing-subscriber v0.3.196.5s3.9s (59%)alloc, ansi, default, env-filter, fmt, json, matchers, nu-ansi-term, once_cell, regex, registry, serde, serde_json, sharded-slab, smallvec, std, thread_local, tracing, tracing-log, tracing-serde
36.time v0.3.416.4s3.3s (52%)alloc, default, formatting, local-offset, macros, parsing, serde, serde-human-readable, std, wasm-bindgen
37.regex-syntax v0.6.296.1s2.9s (47%)default, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
38.ring v0.17.146.0s3.1s (51%)alloc, default, dev_urandom_fallback, std
39.sos-backend v0.17.15.7s4.7s (83%)archive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
40.nix v0.26.45.7s1.1s (20%)acct, aio, default, dir, env, event, feature, fs, hostname, inotify, ioctl, kmod, memoffset, mman, mount, mqueue, net, personality, pin-utils, poll, process, pthread, ptrace, quota, reboot, resource, sched, signal, socket, term, time, ucontext, uio, user, zerocopy
41.syn v2.0.1015.6s1.7s (30%)clone-impls, default, derive, extra-traits, fold, full, parsing, printing, proc-macro, visit, visit-mut
42.rustix v1.0.75.4s1.5s (27%)alloc, default, fs, std, termios
43.serde v1.0.2195.0s0.1s (2%)default, derive, serde_derive, std
44.syn v1.0.1094.4s1.8s (41%)clone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
45.serde v1.0.2194.3s0.2s (5%)alloc, default, derive, serde_derive, std
46.nix v0.28.04.1s1.1s (26%)fs, ioctl, poll, process, signal, term
47.zxcvbn v3.1.04.1s2.9s (71%)builder, default, derive_builder, ser, serde
48.image v0.25.64.0s2.8s (70%)png
49.hyper v1.6.04.0s2.1s (52%)client, default, http1, http2, server
50.ring v0.17.14 build script (run)3.9salloc, default, dev_urandom_fallback, std
51.nix v0.30.13.8s1.1s (28%)fs, process, signal
52.serde_derive v1.0.2193.7sdefault
53.hyper-util v0.1.133.7s1.1s (31%)client, client-legacy, client-proxy, default, http1, http2, server, server-auto, service, tokio
54.regex-syntax v0.8.53.7s1.8s (49%)default, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
55.rustix v1.0.73.7s0.5s (14%)alloc, default, fs, std
56.asn1-rs v0.6.23.7s1.4s (39%)datetime, default, std, time
57.clap_derive v4.5.323.6sdefault
58.futures-util v0.3.313.6s0.3s (8%)alloc, async-await, async-await-macro, channel, default, futures-channel, futures-io, futures-macro, futures-sink, io, memchr, sink, slab, std
59.iri-string v0.7.83.5s0.8s (24%)alloc, default, std
60.sos-migrate v0.17.03.4s2.1s (61%)authenticator, export, full, import, keychain-access
61.quick-xml v0.32.03.4s1.9s (57%)default
62.der v0.7.103.4s1.6s (47%)alloc, oid, std, zeroize
63.rustls-webpki v0.103.33.4s2.5s (74%)alloc, ring, std
64.utoipa v5.3.13.3s1.1s (34%)default, macros, uuid
65.rcgen v0.13.23.3s2.4s (74%)crypto, default, pem, ring
66.darling_core v0.12.43.3s1.7s (53%)strsim, suggestions
67.serde_with v3.12.03.3s0.2s (6%)alloc, base64, default, macros, std
68.serde_json v1.0.1403.3s1.2s (37%)default, raw_value, std
69.regex-automata v0.4.93.2s1.2s (37%)alloc, dfa-onepass, hybrid, meta, nfa-backtrack, nfa-pikevm, nfa-thompson, perf-inline, perf-literal, perf-literal-multisubstring, perf-literal-substring, std, syntax, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment, unicode-word-boundary
70.prost-derive v0.13.53.2s
71.aho-corasick v1.1.33.2s2.1s (67%)default, perf-literal, std
72.notify v7.0.03.1s2.5s (81%)default, fsevent-sys, macos_fsevent, serde
73.tungstenite v0.26.23.1s2.0s (62%)__rustls-tls, data-encoding, handshake, http, httparse, rustls, rustls-pki-types, sha1
74.num-bigint v0.4.63.1s1.1s (37%)default, std
75.itertools v0.14.03.1s0.1s (5%)default, use_alloc, use_std
76.itertools v0.13.03.1s0.2s (6%)default, use_alloc, use_std
77.fancy-regex v0.13.03.0s2.1s (68%)default, perf, std, unicode
78.serde_json_path v0.7.23.0s2.0s (65%)default, functions, regex
79.axum-core v0.5.22.9s0.5s (16%)tracing
80.age v0.11.12.9s1.4s (49%)async, default, futures, memchr
81.sos-filesystem v0.17.02.9s0.2s (6%)archive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
82.icu_properties v2.0.12.9s1.1s (37%)compiled_data
83.enum-iterator v2.1.02.8s0.1s (2%)
84.toml v0.5.112.8s1.0s (37%)default
85.x11rb v0.13.12.8s0.9s (31%)
86.petgraph v0.7.12.8s0.3s (10%)
87.regex-automata v0.1.102.7s1.5s (57%)default, regex-syntax, std
88.sos-integrity v0.17.12.6s1.8s (71%)files, full
89.regex-syntax v0.8.52.6s0.8s (31%)default, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
90.tokio-rustls-acme v0.6.02.6s0.6s (25%)axum, default
91.libm v0.2.152.6s0.8s (33%)arch, default
92.logos-codegen v0.14.42.5s1.3s (53%)
93.rustyline v14.0.02.5s1.1s (43%)custom-bindings, default, fd-lock, home, radix_trie, with-dirs, with-file-history
94.tower-http v0.6.42.5s0.9s (38%)cors, default, follow-redirect, futures-util, iri-string, tower, trace, tracing
95.prost-build v0.13.52.5s1.3s (52%)default, format
96.sos-changes v0.17.02.4s1.6s (65%)changes-consumer, changes-producer, tokio-util
97.i18n-embed v0.15.42.4s1.8s (76%)arc-swap, default, fluent, fluent-syntax, fluent-system, i18n-embed-impl, parking_lot, rust-embed
98.crypto-bigint v0.5.52.4s0.9s (36%)generic-array, rand_core, zeroize
99.darling_core v0.20.112.4s1.1s (48%)strsim, suggestions
100.prost-types v0.13.52.3s0.4s (19%)
101.ouroboros_macro v0.18.52.3sstd
102.chrono v0.4.412.3s1.1s (48%)alloc, android-tzdata, clock, iana-time-zone, js-sys, now, std, wasm-bindgen, wasmbind, winapi, windows-link
103.k256 v0.13.42.3s1.3s (58%)alloc, arithmetic, default, digest, ecdsa, ecdsa-core, once_cell, pkcs8, precomputed-tables, schnorr, sha2, sha256, signature, std
104.arboard v3.5.02.3s1.8s (77%)
105.url v2.5.42.2s1.2s (56%)default, serde, std
106.winnow v0.7.102.2s0.3s (14%)alloc, default, std
107.data-encoding v2.9.02.2s1.7s (77%)alloc, default, std
108.snow v0.9.62.1s1.2s (58%)aes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
109.serde_json_path_core v0.2.22.1s1.1s (51%)default, functions
110.i18n-embed-fl v0.9.42.0s
111.aho-corasick v1.1.32.0s0.9s (45%)perf-literal, std
112.derive_builder_core v0.20.21.9s0.8s (41%)lib_has_std
113.nom v7.1.31.9s0.2s (8%)alloc, default, std
114.crossterm v0.28.11.9s0.9s (45%)bracketed-paste, default, events, windows
115.headers v0.4.01.9s0.7s (36%)
116.curve25519-dalek v4.1.31.9s0.9s (49%)alloc, default, digest, precomputed-tables, zeroize
117.sos-ipc v0.17.01.9s0.5s (26%)async-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
118.icu_properties v2.0.11.9s0.4s (20%)compiled_data
119.sos-search v0.17.11.9s1.4s (75%)
120.idna v1.0.31.9s1.5s (77%)alloc, compiled_data, std
121.sos-database-upgrader v0.17.11.9s0.3s (14%)archive, full
122.time v0.3.411.8s0.6s (30%)alloc, default, formatting, parsing, std
123.dbus-secret-service v4.0.31.8s1.4s (75%)
124.i18n-embed v0.15.41.8s0.9s (51%)arc-swap, default, filesystem-assets, fluent, fluent-syntax, fluent-system, i18n-embed-impl, parking_lot, rust-embed, walkdir
125.time-tz v2.0.0 build script1.8sdb, default, js-sys, system, thiserror, windows-sys
126.csv-async v1.3.11.7s0.5s (29%)default, itoa, ryu, serde, tokio, tokio-stream, tokio1, with_serde
127.keychain_parser v0.1.21.7s0.9s (51%)
128.sos-protocol v0.17.0 build script1.7sbs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
129.time-macros v0.2.221.7sformatting, parsing, serde
130.num-rational v0.4.21.7s0.9s (55%)num-bigint, num-bigint-std, std
131.libc v0.2.1721.7s0.2s (10%)default, extra_traits, std
132.logos-codegen v0.15.01.7s0.8s (49%)
133.proc-macro2 v1.0.951.6s1.0s (61%)default, proc-macro
134.async_zip v0.0.171.6s0.4s (27%)async-compression, deflate, tokio, tokio-util
135.png v0.17.161.6s1.0s (59%)
136.kdam v0.6.21.6s1.1s (67%)derive, rich, spinner
137.anticipate-runner v0.5.11.6s1.0s (59%)
138.zerocopy v0.8.251.6s0.1s (4%)simd
139.sql_query_builder v2.4.21.6s1.1s (67%)sqlite
140.uriparse v0.6.41.6s0.8s (49%)default
141.sos-database v0.17.01.5s0.7s (43%)archive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
142.i18n-config v0.4.71.5s1.0s (63%)
143.yasna v0.5.21.5s0.7s (45%)default, std, time
144.toml v0.8.221.5s0.9s (58%)default, display, parse
145.indexmap v2.9.01.5s0.0s (2%)default, serde, std
146.zerofrom-derive v0.1.61.5s
147.plist v1.7.11.4s0.6s (39%)default, serde
148.tracing-attributes v0.1.281.4s
149.icu_locale_core v2.0.01.4s0.7s (51%)zerovec
150.enum-iterator-derive v1.4.01.4s
151.derive_builder_core v0.10.21.4s0.7s (49%)
152.prettyplease v0.2.331.4s0.6s (43%)
153.interprocess v2.2.31.4s0.5s (34%)async, default, futures-core, tokio
154.der-parser v9.0.01.4s0.6s (43%)bigint, default, num-bigint, std
155.time-tz v2.0.0 build script (run)1.4sdb, default, js-sys, system, thiserror, windows-sys
156.keyring v3.6.21.4s1.0s (72%)apple-native, sync-secret-service, windows-native
157.thiserror-impl v2.0.121.4s
158.fluent-bundle v0.15.31.4s1.0s (73%)default
159.textwrap v0.16.21.4s0.8s (59%)default, smawk, terminal_size, unicode-linebreak, unicode-width
160.sos-remote-sync v0.17.01.3s0.1s (5%)files, full
161.sos-login v0.17.21.3s0.7s (54%)files, full
162.icu_locale_core v2.0.01.3s0.5s (37%)zerovec
163.sharded-slab v0.1.71.3s0.1s (7%)
164.bytes v1.10.11.3s0.2s (19%)
165.url v2.5.41.3s0.5s (38%)default, std
166.http v1.3.11.3s0.5s (42%)default, std
167.cc v1.2.251.3s0.6s (46%)
168.sos-logs v0.17.01.3s1.0s (74%)
169.thiserror-impl v1.0.691.3s
170.pin-project-internal v1.1.101.2s
171.zerovec-derive v0.11.11.2s
172.fluent-bundle v0.15.31.2s0.5s (38%)default
173.refinery-macros v0.8.161.2s
174.tokio-util v0.7.151.2s0.4s (34%)codec, compat, default, futures-io, io
175.deranged v0.4.01.2s0.0s (3%)alloc, powerfmt, serde, std
176.rand v0.9.11.2s0.3s (25%)alloc, default, os_rng, small_rng, std, std_rng, thread_rng
177.asn1-rs-derive v0.5.11.2s
178.basic-toml v0.1.101.2s0.4s (35%)
179.rand_chacha v0.9.01.2s0.9s (76%)std
180.age-core v0.11.01.2s0.7s (65%)
181.async-trait v0.1.881.1s
182.serde_with_macros v3.12.01.1s
183.yoke-derive v0.8.01.1s
184.indexmap v2.9.01.1s0.0s (4%)default, std
185.icu_normalizer v2.0.01.1s0.7s (69%)compiled_data
186.tracing-appender v0.2.31.1s0.7s (65%)
187.linux-raw-sys v0.4.151.0s0.0s (3%)elf, errno, general, if_ether, ioctl, net, netlink, no_std, system, xdp
188.binary-stream v10.0.01.0s0.0s (2%)async, default, tokio
189.memchr v2.7.41.0s0.5s (45%)alloc, default, std
190.fs-err v3.1.01.0s0.2s (24%)tokio
191.rustls-pki-types v1.12.01.0s0.5s (49%)alloc, default, std
192.totp-rs v5.7.01.0s0.5s (48%)default, otpauth, qr, serde, serde_support, url, urlencoding, zeroize
193.axum-server v0.7.21.0s0.4s (36%)arc-swap, default, rustls, rustls-pemfile, rustls-pki-types, tls-rustls-no-provider, tokio-rustls
194.serde_json_path_macros_internal v0.1.21.0s
195.notify-types v1.0.11.0s0.2s (20%)serde
196.idna v1.0.31.0s0.6s (59%)alloc, compiled_data, std
197.hashbrown v0.15.31.0s0.0s (5%)
198.rustversion v1.0.211.0s
199.chbs v0.1.11.0s0.5s (51%)
200.miniz_oxide v0.8.80.9s0.5s (55%)default, simd, simd-adler32, with-alloc
201.sos-archive v0.17.00.9s0.4s (48%)
202.refinery-core v0.8.160.9s0.3s (35%)default
203.argon2 v0.5.30.9s0.6s (63%)alloc, default, password-hash, rand, std
204.derive_builder_macro v0.10.20.9s
205.sos-sync v0.17.00.9s0.2s (19%)files, full
206.zerovec v0.11.20.9s0.0s (4%)alloc, derive, yoke
207.futures-lite v2.6.00.9s0.1s (8%)alloc, fastrand, futures-io, parking, std
208.axum-extra v0.10.10.9s0.2s (23%)default, tracing, typed-header
209.icu_normalizer v2.0.00.9s0.3s (30%)compiled_data
210.zerovec v0.11.20.9s0.1s (6%)alloc, derive, yoke
211.xml-rs v0.8.260.8s0.3s (38%)
212.futures-macro v0.3.310.8s
213.tower v0.5.20.8s0.0s (6%)__common, futures-core, futures-util, log, make, pin-project-lite, sync_wrapper, timeout, tokio, tracing, util
214.urn v0.7.00.8s0.5s (55%)alloc, default, serde, std
215.icu_collections v2.0.00.8s0.2s (29%)
216.kdam_derive v0.1.00.8s
217.signal-hook v0.3.180.8s0.5s (59%)channel, default, iterator
218.rand v0.8.50.8s0.1s (11%)alloc, default, getrandom, libc, rand_chacha, std, std_rng
219.rustyline-derive v0.11.10.8s
220.logos-derive v0.14.40.8s
221.anticipate v0.10.00.8s0.5s (60%)
222.num-traits v0.2.190.8s0.1s (13%)default, i128, std
223.bytes v1.10.10.8s0.2s (24%)default, std
224.rand_chacha v0.3.10.8s0.6s (80%)std
225.displaydoc v0.2.50.8sdefault, std
226.uuid v1.17.00.8s0.3s (41%)default, rng, serde, std, v4
227.tempfile v3.20.00.8s0.5s (59%)default, getrandom
228.logos-derive v0.15.00.8s
229.async-recursion v1.1.10.8s
230.sos-audit v0.17.00.8s0.2s (27%)
231.darling_macro v0.12.40.8s
232.serde_path_to_error v0.1.170.8s0.2s (22%)
233.derive_builder_macro v0.20.20.7slib_has_std
234.pkcs8 v0.10.20.7s0.4s (56%)alloc, std
235.rusqlite v0.32.10.7s0.4s (49%)backup, bundled, modern_sqlite
236.elliptic-curve v0.13.80.7s0.0s (4%)alloc, arithmetic, digest, ff, group, hazmat, pkcs8, sec1, std
237.anyhow v1.0.980.7s0.4s (53%)default, std
238.colored v2.2.00.7s0.3s (49%)
239.tokio-stream v0.1.170.7s0.1s (11%)default, time
240.rs_merkle v1.5.00.7s0.4s (52%)default, std
241.semver v1.0.260.7s0.3s (47%)default, serde, std
242.rust-embed-impl v8.7.20.7s
243.prost v0.13.50.7s0.1s (13%)default, derive, std
244.sec1 v0.7.30.7s0.3s (50%)alloc, default, der, point, std, subtle, zeroize
245.num-complex v0.4.60.7s0.1s (10%)std
246.sos-signer v0.17.00.7s0.3s (41%)
247.sos-artifact v0.8.90.7s0.1s (16%)
248.vcpkg v0.2.150.7s0.4s (57%)
249.pem v3.0.50.7s0.4s (56%)default, serde, std
250.ecdsa v0.16.90.7s0.1s (13%)alloc, arithmetic, der, digest, hazmat, pkcs8, rfc6979, signing, spki, std, verifying
251.uuid v1.17.00.7s0.1s (16%)default, serde, std
252.tracing-core v0.1.330.7s0.3s (44%)default, once_cell, std
253.oid-registry v0.7.10.7s0.3s (51%)crypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
254.curve25519-dalek-derive v0.1.10.7s
255.hashbrown v0.14.50.7s0.0s (5%)ahash, allocator-api2, default, inline-more
256.i18n-embed-impl v0.8.40.6sdefault, find-crate, fluent-system, i18n-config, quote
257.intl_pluralrules v7.0.20.6s0.2s (29%)
258.tokio-macros v2.5.00.6s
259.anstream v0.6.180.6s0.3s (42%)auto, default, wincon
260.generic-array v0.14.70.6s0.0s (2%)more_lengths, zeroize
261.strsim v0.11.10.6s0.4s (67%)
262.proc-macro2 v1.0.950.6s0.3s (45%)default, proc-macro
263.parse-zoneinfo v0.3.10.6s0.3s (50%)
264.refinery-core v0.8.160.6s0.4s (60%)default, rusqlite, serde, toml
265.ipnet v2.11.00.6s0.4s (62%)default, std
266.probability v0.20.30.6s0.2s (34%)
267.memchr v2.7.40.6s0.2s (29%)alloc, std
268.socket2 v0.5.100.6s0.3s (53%)all
269.async-sqlite v0.4.00.6s0.5s (78%)backup, bundled, default
270.matchit v0.8.40.6s0.3s (43%)default
271.yansi v1.0.10.6s0.1s (21%)alloc, default, std
272.cfg_eval v0.1.20.6sdefault
273.asn1-rs-impl v0.2.00.6s
274.aes v0.8.40.6s0.2s (33%)
275.generic-array v0.14.70.6s0.0s (3%)more_lengths
276.sha2 v0.10.90.6s0.3s (56%)default, std
277.parking_lot v0.12.40.6s0.4s (72%)default
278.crossbeam-utils v0.8.210.6s0.2s (35%)std
279.icu_collections v2.0.00.6s0.3s (49%)
280.num-integer v0.1.460.6s0.2s (34%)i128, std
281.regex v1.11.10.6s0.3s (51%)default, perf, perf-backtrack, perf-cache, perf-dfa, perf-inline, perf-literal, perf-onepass, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
282.rand v0.8.50.6s0.0s (5%)small_rng
283.zeroize_derive v1.4.20.6s
284.tempfile v3.20.00.5s0.2s (44%)default, getrandom
285.pkg-config v0.3.320.5s0.3s (53%)
286.darling_macro v0.20.110.5s
287.password-hash v0.5.00.5s0.3s (49%)alloc, default, rand_core, std
288.mio v1.0.40.5s0.2s (35%)default, log, net, os-ext, os-poll
289.crossbeam-channel v0.5.150.5s0.2s (29%)default, std
290.doctest-file v1.0.00.5s
291.serde-xml-rs v0.5.10.5s0.0s (8%)
292.prost v0.13.50.5s0.0s (8%)derive, prost-derive
293.linux-raw-sys v0.9.40.5s0.0s (6%)elf, errno, general, ioctl, no_std
294.poly1305 v0.8.00.5s0.3s (50%)
295.oid-registry v0.7.1 build script0.5scrypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
296.nu-ansi-term v0.46.00.5s0.2s (46%)
297.inotify v0.10.20.5s0.2s (36%)
298.sha3 v0.10.80.5s0.2s (42%)default, std
299.zerotrie v0.2.20.5s0.1s (14%)yoke, zerofrom
300.nix v0.28.0 build script0.5sfs, ioctl, poll, process, signal, term
301.hashbrown v0.15.30.5s0.0s (5%)
302.nix v0.30.1 build script0.5sfs, process, signal
303.qrcodegen v1.8.00.5s0.3s (53%)
304.futures-executor v0.3.310.5s0.3s (65%)std
305.typenum v1.18.00.5s0.0s (3%)
306.deranged v0.4.00.5s0.0s (3%)alloc, powerfmt, std
307.bitflags v2.9.10.5s0.3s (54%)serde, std
308.synstructure v0.13.20.5s0.2s (44%)default, proc-macro
309.typenum v1.18.00.5s0.0s (4%)
310.mime_guess v2.0.50.5s0.2s (36%)default, rev-mappings
311.intl_pluralrules v7.0.20.5s0.2s (43%)
312.fdeflate v0.3.70.5s0.2s (49%)
313.rustix v1.0.7 build script0.5salloc, default, fs, std
314.diff v0.1.130.5s0.3s (68%)
315.libc v0.2.1720.5s0.0s (4%)default, std
316.sos-preferences v0.17.00.5s0.1s (26%)
317.radix_trie v0.2.10.5s0.1s (28%)
318.csv-core v0.1.120.5s0.2s (46%)default
319.icu_provider v2.0.00.5s0.1s (15%)baked, zerotrie
320.unicode-segmentation v1.12.00.5s0.1s (23%)
321.yansi v1.0.10.5s0.1s (16%)alloc, default, std
322.ptyprocess v0.4.10.5s0.2s (53%)
323.cookie-factory v0.3.30.5s0.0s (9%)async, default, futures, std
324.matchit v0.7.30.5s0.2s (36%)default
325.autocfg v1.4.00.5s0.2s (48%)
326.tokio-tungstenite v0.26.20.4s0.0s (5%)__rustls-tls, connect, default, handshake, rustls, rustls-pki-types, rustls-tls-webpki-roots, stream, tokio-rustls, webpki-roots
327.tokio-rustls v0.26.20.4s0.0s (8%)ring, tls12
328.typeshare-annotation v1.0.40.4s
329.pretty_assertions v1.4.10.4s0.3s (59%)default, std
330.rustversion v1.0.21 build script0.4s
331.ed25519-dalek v2.1.10.4s0.2s (45%)alloc, default, fast, rand_core, std, zeroize
332.mime_guess v2.0.5 build script0.4sdefault, rev-mappings
333.ring v0.17.14 build script0.4salloc, default, dev_urandom_fallback, std
334.hyper-rustls v0.27.60.4s0.2s (42%)http1, ring, tls12, webpki-roots, webpki-tokio
335.blake2 v0.10.60.4s0.3s (59%)default, std
336.getrandom v0.3.3 build script0.4s
337.sos-external-files v0.17.00.4s0.0s (6%)files, full
338.fixedbitset v0.5.70.4s0.1s (28%)
339.sos-password v0.17.00.4s0.2s (44%)
340.base64 v0.21.70.4s0.2s (38%)alloc, default, std
341.unic-langid-impl v0.9.60.4s0.1s (37%)serde
342.ppv-lite86 v0.2.210.4s0.0s (7%)simd, std
343.clap_lex v0.7.40.4s0.1s (29%)
344.fluent-syntax v0.11.10.4s0.1s (21%)default
345.rusticata-macros v4.1.00.4s0.1s (33%)
346.proc-macro2-diagnostics v0.10.10.4s0.2s (50%)colors, default, yansi
347.libm v0.2.15 build script0.4sarch, default
348.sos-server v0.17.0 build script0.4sacme, audit, default, listen, pairing, sos-audit
349.sos-system-messages v0.17.00.4s0.0s (11%)
350.hex v0.4.30.4s0.0s (9%)alloc, default, serde, std
351.serde_urlencoded v0.7.10.4s0.0s (8%)
352.rand_core v0.9.30.4s0.1s (26%)os_rng, std
353.either v1.15.00.4s0.0s (6%)std, use_std
354.bitflags v2.9.10.3s0.0s (13%)std
355.probly-search v2.0.10.3s
356.flate2 v1.1.10.3s0.1s (22%)any_impl, default, miniz_oxide, rust_backend
357.linux-raw-sys v0.9.40.3s0.0s (6%)elf, errno, general, ioctl, no_std
358.walkdir v2.5.00.3s0.2s (60%)
359.httparse v1.10.10.3s0.1s (41%)default, std
360.base64 v0.22.10.3s0.1s (32%)alloc, default, std
361.multimap v0.10.10.3s0.0s (5%)
362.tracing-log v0.2.00.3s0.2s (46%)log-tracer, std
363.thread_local v1.1.80.3s0.1s (39%)
364.regex v1.11.10.3s0.1s (23%)default, perf, perf-backtrack, perf-cache, perf-dfa, perf-inline, perf-literal, perf-onepass, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
365.toml_datetime v0.6.90.3s0.1s (39%)serde
366.anstyle v1.0.100.3s0.1s (19%)default, std
367.scrypt v0.11.00.3s0.1s (43%)
368.unicode-width v0.1.140.3s0.0s (12%)cjk, default
369.special v0.10.30.3s0.1s (41%)
370.proc-macro-error-attr2 v2.0.00.3s
371.unic-langid-impl v0.9.60.3s0.2s (53%)
372.icu_provider v2.0.00.3s0.1s (36%)baked, zerotrie
373.sos-reducers v0.17.00.3s0.0s (12%)files
374.signal-hook-registry v1.4.50.3s0.2s (62%)
375.sha2 v0.10.90.3s0.1s (25%)default, std
376.terminal-banner v0.4.10.3s0.2s (58%)color, colored
377.libdbus-sys v0.2.5 build script0.3sdefault, pkg-config
378.unicode-linebreak v0.1.50.3s0.1s (18%)
379.sos-security-report v0.17.10.3s0.0s (6%)
380.libsqlite3-sys v0.30.1 build script0.3sbundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
381.http-body-util v0.1.30.3s0.0s (6%)default
382.bit-vec v0.6.30.3s0.1s (18%)std
383.fallible-iterator v0.3.00.3s0.0s (4%)alloc, default
384.heck v0.4.10.3s0.1s (37%)default
385.sha1 v0.10.60.3s0.1s (49%)default, std
386.sos-extension-service v0.17.00.3s0.0s (7%)
387.filetime v0.2.250.3s0.1s (48%)
388.zerocopy v0.8.25 build script0.3ssimd
389.ed25519 v2.2.30.3s0.1s (49%)alloc, std
390.libc v0.2.172 build script0.3sdefault, std
391.semver v1.0.260.3s0.1s (34%)default, std
392.sos-database-upgrader v0.17.1 build script0.3sarchive, full
393.unicode-width v0.2.00.3s0.0s (9%)cjk, default
394.async-compression v0.4.230.3s0.0s (9%)deflate, flate2, futures-io
395.semver v1.0.26 build script0.3sdefault, serde, std
396.mime v0.3.170.3s0.1s (44%)
397.zerotrie v0.2.20.3s0.1s (26%)yoke, zerofrom
398.strsim v0.11.10.3s0.1s (46%)
399.terminal-banner v0.4.1 build script0.3scolor, colored
400.sos-net v0.17.3 build script0.3sarchive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
401.sos-sdk v0.17.1 build script0.3sfiles, full
402.qrcodegen-image v1.5.00.3s0.2s (75%)base64
403.sos-account v0.17.4 build script0.3sarchive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
404.allocator-api2 v0.2.210.3s0.0s (10%)alloc
405.fluent-syntax v0.11.10.3s0.0s (11%)default
406.xclipboard v0.16.10.3s0.0s (13%)
407.walkdir v2.5.00.3s0.1s (45%)
408.anyhow v1.0.980.3s0.1s (38%)default, std
409.parking_lot v0.12.40.3s0.1s (41%)default
410.hashlink v0.9.10.3s0.0s (5%)
411.libc v0.2.172 build script0.3sdefault, extra_traits, std
412.async-fd-lock v0.2.00.3s0.0s (6%)async, default
413.sos-integrity v0.17.1 build script0.3sfiles, full
414.sos-changes v0.17.0 build script0.3schanges-consumer, changes-producer, tokio-util
415.fastrand v2.3.00.3s0.0s (14%)alloc, default, std
416.writeable v0.6.10.3s0.1s (48%)
417.typed-generational-arena v0.2.90.3s0.0s (7%)default, std
418.sos-debug-snapshot v0.17.00.3s0.1s (25%)
419.spki v0.7.30.3s0.1s (30%)alloc, std
420.sos-login v0.17.2 build script0.3sfiles, full
421.is-docker v0.2.00.3s0.2s (67%)
422.version_check v0.9.50.3s0.1s (40%)
423.sos-remote-sync v0.17.0 build script0.3sfiles, full
424.intl-memoizer v0.5.30.3s0.1s (35%)
425.rustls-pemfile v2.2.00.3s0.1s (40%)default, std
426.arc-swap v1.7.10.2s0.0s (14%)
427.is-wsl v0.4.00.2s0.2s (66%)
428.sos-ipc v0.17.0 build script0.2sasync-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
429.once_cell v1.21.30.2s0.0s (13%)alloc, default, race, std
430.typenum v1.18.0 build script0.2s
431.sos-web v0.17.0 build script0.2sarchive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
432.sos-platform-authenticator v0.17.0 build script0.2s
433.parking_lot_core v0.9.110.2s0.1s (32%)
434.proc-macro2 v1.0.95 build script0.2sdefault, proc-macro
435.balloon-hash v0.4.00.2s0.1s (31%)alloc, default, password-hash, rand, std
436.rustc_version v0.4.10.2s0.1s (40%)
437.rustix v1.0.7 build script0.2salloc, default, fs, std, termios
438.sos-server-storage v0.17.1 build script0.2saudit, files, full, sos-audit, sos-external-files
439.httparse v1.10.1 build script0.2sdefault, std
440.memoffset v0.7.1 build script0.2sdefault
441.cipher v0.4.40.2s0.0s (5%)zeroize
442.sos-logs v0.17.0 build script0.2s
443.sos-password v0.17.0 build script0.2s
444.bytemuck v1.23.00.2s0.0s (11%)extern_crate_alloc
445.proc-macro-error2 v2.0.10.2s0.1s (33%)default, syn-error
446.quote v1.0.400.2s0.1s (37%)default, proc-macro
447.minimal-lexical v0.2.10.2s0.1s (28%)std
448.tracing v0.1.410.2s0.1s (40%)attributes, default, log, std, tracing-attributes
449.find-crate v0.6.30.2s0.1s (34%)
450.anstyle-parse v0.2.60.2s0.0s (18%)default, utf8
451.iana-time-zone v0.1.630.2s0.1s (64%)fallback
452.snow v0.9.6 build script0.2saes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
453.sos-search v0.17.1 build script0.2s
454.arc-swap v1.7.10.2s0.1s (24%)
455.base64ct v1.7.30.2s0.0s (17%)alloc, std
456.thiserror v1.0.69 build script0.2s
457.getrandom v0.3.3 build script0.2sstd
458.anyhow v1.0.98 build script0.2sdefault, std
459.rustix v0.38.44 build script0.2salloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
460.sos-sync v0.17.0 build script0.2sfiles, full
461.xclipboard v0.16.1 build script0.2s
462.typeshare v1.0.40.2s0.1s (26%)default, wasmbind
463.sos-client-storage v0.17.1 build script0.2sarchive, audit, files, full, search, sos-audit, sos-external-files, sos-search
464.thiserror v2.0.12 build script0.2sdefault, std
465.prettyplease v0.2.33 build script0.2s
466.serde v1.0.219 build script0.2sdefault, derive, serde_derive, std
467.fluent-langneg v0.13.00.2s0.1s (32%)default
468.litemap v0.8.00.2s0.0s (7%)alloc
469.bit-set v0.5.30.2s0.0s (13%)std
470.logos v0.14.40.2s0.0s (9%)default, export_derive, logos-derive, std
471.httpdate v1.0.30.2s0.1s (56%)
472.byteorder-lite v0.1.00.2s0.0s (7%)default, std
473.fs-err v3.1.0 build script0.2stokio
474.fastrand v2.3.00.2s0.0s (22%)alloc, default, std
475.sos-migrate v0.17.0 build script0.2sauthenticator, export, full, import, keychain-access
476.proc-macro2-diagnostics v0.10.1 build script0.2scolors, default, yansi
477.rust-embed-utils v8.7.20.2s0.1s (51%)
478.signal-hook v0.3.18 build script0.2schannel, default, iterator
479.serde v1.0.219 build script0.2salloc, default, derive, serde_derive, std
480.bech32 v0.9.10.2s0.1s (40%)default, std
481.writeable v0.6.10.2s0.1s (33%)
482.syn v1.0.109 build script0.2sclone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
483.toml_write v0.1.10.2s0.0s (17%)alloc, default, std
484.heck v0.5.00.2s0.1s (51%)
485.futures-channel v0.3.310.2s0.0s (9%)alloc, default, futures-sink, sink, std
486.const-oid v0.9.60.2s0.1s (35%)
487.sos-platform-authenticator v0.17.00.2s0.1s (32%)
488.smallvec v1.15.00.2s0.0s (10%)const_generics
489.log v0.4.270.2s0.1s (30%)std
490.sanitize-filename v0.6.00.2s0.1s (43%)
491.once_cell v1.21.30.2s0.0s (19%)alloc, default, race, std
492.either v1.15.00.2s0.0s (5%)std, use_std
493.smallvec v1.15.00.2s0.0s (8%)const_generics, const_new
494.etcetera v0.8.00.2s0.1s (44%)
495.crossbeam-utils v0.8.21 build script0.2sstd
496.litemap v0.8.00.2s0.0s (10%)alloc
497.getrandom v0.3.30.2s0.1s (34%)std
498.ctrlc v3.4.70.2s0.0s (22%)
499.logos v0.15.00.2s0.0s (9%)default, export_derive, logos-derive, std
500.strsim v0.10.00.2s0.1s (46%)
501.parking_lot_core v0.9.110.2s0.0s (24%)
502.fluent-langneg v0.13.00.2s0.1s (45%)default
503.simd-adler32 v0.3.70.2s0.1s (47%)const-generics, default, std
504.sos-cli-helpers v0.1.10.2s0.0s (23%)
505.open v5.3.20.2s0.1s (31%)
506.secrecy v0.10.30.2s0.1s (43%)serde
507.semver v1.0.26 build script0.2sdefault, std
508.curve25519-dalek v4.1.3 build script0.2salloc, default, digest, precomputed-tables, zeroize
509.type-map v0.5.10.2s0.1s (43%)
510.intl-memoizer v0.5.30.2s0.1s (63%)
511.sos-unit-tests v0.17.0 build script0.2sdefault, files, listen
512.utf-8 v0.7.60.2s0.0s (25%)
513.lock_api v0.4.130.2s0.0s (7%)atomic_usize, default
514.parking_lot_core v0.9.11 build script0.2s
515.polyval v0.6.20.2s0.1s (38%)
516.ryu v1.0.200.2s0.1s (47%)
517.rand_core v0.6.40.2s0.0s (25%)alloc, getrandom, std
518.sos-database v0.17.0 build script0.2sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
519.keccak v0.1.50.2s0.1s (39%)
520.digest v0.10.70.2s0.0s (7%)alloc, block-buffer, const-oid, core-api, default, mac, oid, std, subtle
521.lock_api v0.4.130.2s0.0s (6%)atomic_usize, default
522.libdbus-sys v0.2.50.2s0.0s (9%)default, pkg-config
523.bs58 v0.4.00.2s0.0s (25%)alloc, default, std
524.webpki-roots v1.0.00.2s0.0s (12%)
525.siphasher v1.0.10.2s0.0s (14%)default, std
526.sos-backend v0.17.1 build script0.2sarchive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
527.slab v0.4.9 build script0.2sdefault, std
528.potential_utf v0.1.20.2s0.1s (33%)zerovec
529.getrandom v0.3.30.2s0.0s (27%)
530.powerfmt v0.2.00.2s0.0s (31%)
531.form_urlencoded v1.2.10.1s0.1s (39%)alloc, default, std
532.shell-words v1.1.00.1s0.1s (41%)default, std
533.signature v2.2.00.1s0.0s (29%)alloc, digest, rand_core, std
534.unicase v2.8.10.1s0.1s (36%)
535.tracing-serde v0.2.00.1s0.0s (10%)
536.num_threads v0.1.70.1s0.1s (71%)
537.sos-reducers v0.17.0 build script0.1sfiles
538.logos-codegen v0.15.0 build script0.1s
539.icu_properties_data v2.0.1 build script0.1s
540.siphasher v1.0.10.1s0.0s (18%)default, std
541.num-traits v0.2.19 build script0.1sdefault, i128, std
542.getrandom v0.2.160.1s0.0s (35%)std
543.protoc-bin-vendored-linux-aarch_64 v3.1.00.1s0.0s (26%)
544.generic-array v0.14.7 build script0.1smore_lengths, zeroize
545.tinystr v0.8.10.1s0.0s (13%)alloc, default, zerovec
546.ahash v0.8.120.1s0.0s (21%)
547.terminal_size v0.4.20.1s0.0s (30%)
548.percent-encoding v2.3.10.1s0.0s (33%)alloc, default, std
549.chacha20 v0.9.10.1s0.0s (12%)zeroize
550.futures-task v0.3.310.1s0.0s (26%)alloc, std
551.serde_spanned v0.6.80.1s0.0s (16%)serde
552.tinystr v0.8.10.1s0.0s (15%)alloc, default, zerovec
553.urlencoding v2.1.30.1s0.1s (44%)
554.yoke v0.8.00.1s0.0s (7%)alloc, derive, zerofrom
555.sos-vault v0.17.1 build script0.1s
556.sos-system-messages v0.17.0 build script0.1s
557.sos-external-files v0.17.0 build script0.1sfiles, full
558.rev_buf_reader v0.3.00.1s0.0s (18%)default
559.sos-core v0.17.1 build script0.1sfiles
560.smawk v0.3.20.1s0.0s (11%)
561.log v0.4.270.1s0.0s (17%)
562.sos-filesystem v0.17.0 build script0.1sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
563.ctr v0.9.20.1s0.0s (6%)
564.aliasable v0.1.30.1s0.0s (24%)alloc, default
565.comma v1.0.00.1s0.1s (43%)
566.serde_json v1.0.140 build script0.1sdefault, raw_value, std
567.phf v0.11.30.1s0.0s (10%)default, std
568.yoke v0.8.00.1s0.0s (9%)alloc, derive, zerofrom
569.nibble_vec v0.1.00.1s0.0s (12%)
570.sos-preferences v0.17.0 build script0.1s
571.idna_adapter v1.2.10.1s0.0s (20%)compiled_data
572.matchers v0.1.00.1s0.0s (15%)
573.digest v0.10.70.1s0.0s (7%)alloc, block-buffer, core-api, default, std
574.sos-protocol v0.17.0 build script (run)0.1sbs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
575.powerfmt v0.2.00.1s0.0s (23%)
576.tower-layer v0.3.30.1s0.0s (8%)
577.binary-stream v10.0.0 build script0.1sasync, default, tokio
578.generic-array v0.14.7 build script0.1smore_lengths
579.fd-lock v4.0.40.1s0.0s (14%)
580.phf_shared v0.11.30.1s0.0s (19%)default, std
581.icu_normalizer_data v2.0.0 build script0.1s
582.crc32fast v1.4.20.1s0.0s (34%)default, std
583.sos-signer v0.17.0 build script0.1s
584.ahash v0.8.12 build script0.1s
585.futures-io v0.3.310.1s0.0s (25%)default, std
586.phf_shared v0.11.30.1s0.0s (23%)std
587.lock_api v0.4.13 build script0.1satomic_usize, default
588.unicase v2.8.10.1s0.0s (20%)
589.fallible-streaming-iterator v0.1.90.1s0.0s (10%)
590.anstyle-query v1.1.20.1s0.0s (22%)
591.group v0.13.00.1s0.0s (33%)alloc
592.want v0.3.10.1s0.0s (39%)
593.phf_generator v0.11.30.1s0.0s (41%)
594.aes-gcm v0.10.30.1s0.0s (10%)aes, alloc, default, getrandom, rand_core, std
595.num-conv v0.1.00.1s0.0s (12%)
596.type-map v0.5.10.1s0.0s (29%)
597.utoipa-rapidoc v6.0.00.1s0.0s (38%)axum
598.proc-macro2 v1.0.95 build script (run)0.1sdefault, proc-macro
599.universal-hash v0.5.10.1s0.0s (9%)
600.rfc6979 v0.4.00.1s0.0s (13%)
601.endian-type v0.1.20.1s0.0s (8%)
602.rust-embed-utils v8.7.20.1s0.0s (35%)
603.slab v0.4.90.1s0.0s (11%)default, std
604.base16ct v0.2.00.1s0.0s (31%)alloc
605.protoc-bin-vendored-linux-x86_64 v3.1.00.1s0.0s (43%)
606.rustls v0.23.27 build script0.1sring, std, tls12
607.futures-core v0.3.310.1s0.0s (34%)alloc, default, std
608.num-iter v0.1.450.1s0.0s (12%)i128, std
609.shlex v1.3.00.1s0.0s (26%)default, std
610.zeroize v1.8.10.1s0.0s (19%)alloc, default, derive, zeroize_derive
611.percent-encoding v2.3.10.1s0.0s (23%)alloc, std
612.utf8_iter v1.0.40.1s0.0s (18%)
613.subtle v2.6.10.1s0.0s (14%)default, i128, std
614.unicode-ident v1.0.180.1s0.0s (19%)
615.potential_utf v0.1.20.1s0.0s (34%)zerovec
616.base32 v0.5.10.1s0.0s (44%)
617.num-conv v0.1.00.1s0.0s (9%)
618.rand_core v0.6.40.1s0.0s (16%)
619.icu_properties_data v2.0.10.1s0.0s (22%)
620.colorchoice v1.0.30.1s0.0s (32%)
621.protoc-bin-vendored-linux-ppcle_64 v3.1.00.1s0.0s (27%)
622.itoa v1.0.150.1s0.0s (17%)
623.protoc-bin-vendored-win32 v3.1.00.1s0.0s (34%)
624.form_urlencoded v1.2.10.1s0.0s (23%)alloc, std
625.adler2 v2.0.00.1s0.0s (43%)
626.sos-sdk v0.17.10.1s0.0s (15%)files, full
627.icu_properties_data v2.0.10.1s0.0s (20%)
628.idna_adapter v1.2.10.1s0.0s (18%)compiled_data
629.aead v0.5.20.1s0.0s (11%)alloc, getrandom, rand_core, std
630.anyhow v1.0.98 build script (run)0.1sdefault, std
631.beef v0.5.20.1s0.0s (15%)default
632.hmac v0.12.10.1s0.0s (10%)reset
633.hkdf v0.12.40.1s0.0s (14%)
634.inout v0.1.40.1s0.0s (18%)
635.derive_builder v0.10.20.1s0.0s (21%)default, std
636.parking v2.2.10.1s0.0s (42%)
637.libsqlite3-sys v0.30.10.1s0.0s (15%)bundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
638.copy_dir v0.1.30.1s0.0s (15%)
639.protoc-bin-vendored-macos-aarch_64 v3.1.00.1s0.0s (31%)
640.protoc-bin-vendored-linux-x86_32 v3.1.00.1s0.0s (31%)
641.block-buffer v0.10.40.1s0.0s (10%)
642.inotify-sys v0.1.50.1s0.0s (19%)
643.utf8parse v0.2.20.1s0.0s (17%)default
644.inventory v0.3.200.1s0.0s (21%)
645.signal-hook-mio v0.2.40.1s0.0s (19%)mio-1_0, support-v1_0
646.protoc-bin-vendored v3.1.00.1s0.0s (21%)
647.salsa20 v0.10.20.1s0.0s (13%)
648.random v0.13.20.1s0.0s (13%)
649.protoc-bin-vendored-macos-x86_64 v3.1.00.1s0.0s (33%)
650.same-file v1.0.60.1s0.0s (25%)
651.http-body v1.0.10.1s0.0s (23%)
652.clap v4.5.390.1s0.0s (18%)color, default, derive, env, error-context, help, std, suggestions, usage, wrap_help
653.nonzero_ext v0.1.50.1s0.0s (34%)default, std
654.ff v0.13.10.1s0.0s (10%)alloc
655.zerofrom v0.1.60.1s0.0s (14%)alloc, derive
656.x25519-dalek v2.0.10.1s0.0s (24%)alloc, default, precomputed-tables, static_secrets, zeroize
657.same-file v1.0.60.1s0.0s (21%)
658.home v0.5.110.1s0.0s (35%)
659.headers-core v0.3.00.1s0.0s (23%)
660.fs-err v3.1.0 build script (run)0.1stokio
661.utf8_iter v1.0.40.1s0.0s (19%)
662.instant v0.1.130.1s0.0s (29%)
663.rustc-hash v2.1.10.1s0.0s (20%)default, std
664.memoffset v0.7.1 build script (run)0.1sdefault
665.human_bytes v0.4.30.1s0.0s (28%)default, si-units
666.itoa v1.0.150.1s0.0s (13%)
667.serde_json_path_macros v0.1.60.1s0.0s (22%)
668.io_tee v0.1.10.1s0.0s (11%)
669.time-core v0.1.40.1s0.0s (17%)
670.pin-project-lite v0.2.160.1s0.0s (12%)
671.zerofrom v0.1.60.1s0.0s (8%)alloc, derive
672.pathdiff v0.2.30.1s0.0s (16%)
673.phf_codegen v0.11.30.1s0.0s (6%)
674.block-buffer v0.10.40.1s0.0s (14%)
675.num-traits v0.2.19 build script (run)0.1sdefault, i128, std
676.ident_case v1.0.10.1s0.0s (18%)
677.fluent v0.16.10.1s0.0s (35%)
678.static_assertions v1.1.00.1s0.0s (23%)
679.cfg_aliases v0.1.10.1s0.0s (32%)
680.derive_builder v0.20.20.1s0.0s (27%)default, std
681.chacha20poly1305 v0.10.10.1s0.0s (19%)alloc, default, getrandom, rand_core, std
682.ghash v0.5.10.1s0.0s (23%)
683.crypto-common v0.1.60.1s0.0s (16%)getrandom, rand_core, std
684.rustc-hash v2.1.10.1s0.0s (6%)default, std
685.is_terminal_polyfill v1.70.10.1s0.0s (31%)default
686.num v0.4.30.1s0.0s (24%)default, num-bigint, std
687.equivalent v1.0.20.1s0.0s (23%)
688.ouroboros v0.18.50.1s0.0s (27%)default, std
689.time-core v0.1.40.1s0.0s (20%)
690.unic-langid v0.9.60.1s0.0s (31%)default, serde
691.cfg_aliases v0.2.10.1s0.0s (15%)
692.scopeguard v1.2.00.1s0.0s (23%)
693.atomic-waker v1.1.20.1s0.0s (32%)
694.crypto-common v0.1.60.1s0.0s (15%)std
695.pbkdf2 v0.12.20.1s0.0s (18%)default, hmac
696.darling v0.20.110.1s0.0s (17%)default, suggestions
697.webpki-roots v0.26.110.1s0.0s (21%)
698.anyhow v1.0.98 build script (run)0.1sdefault, std
699.untrusted v0.9.00.1s0.0s (17%)
700.scopeguard v1.2.00.1s0.0s (19%)
701.sos-vfs v0.3.20.1s0.0s (25%)
702.try-lock v0.2.50.1s0.0s (19%)
703.slab v0.4.9 build script (run)0.1sdefault, std
704.constant_time_eq v0.3.10.1s0.0s (28%)
705.unicode-ident v1.0.180.1s0.0s (27%)
706.proc-macro2 v1.0.95 build script (run)0.1sdefault, proc-macro
707.rustix v1.0.7 build script (run)0.1salloc, default, fs, std
708.thiserror v2.0.12 build script (run)0.1sdefault, std
709.darling v0.12.40.1s0.0s (18%)default, suggestions
710.memoffset v0.7.10.0s0.0s (22%)default
711.lock_api v0.4.13 build script (run)0.0satomic_usize, default
712.fnv v1.0.70.0s0.0s (34%)default, std
713.lazy_static v1.5.00.0s0.0s (13%)
714.tower-service v0.3.30.0s0.0s (30%)
715.overload v0.1.10.0s0.0s (30%)
716.sync_wrapper v1.0.20.0s0.0s (13%)futures, futures-core
717.rustc-hash v1.1.00.0s0.0s (9%)default, std
718.self_cell v1.2.00.0s0.0s (22%)
719.futures v0.3.310.0s0.0s (19%)alloc, async-await, default, executor, futures-executor, std
720.icu_normalizer_data v2.0.00.0s0.0s (14%)
721.cfg-if v0.1.100.0s0.0s (25%)
722.self_cell v1.2.00.0s0.0s (18%)
723.sos-unit-tests v0.17.00.0s0.0s (17%)default, files, listen
724.rust-embed v8.7.20.0s0.0s (37%)
725.thiserror v1.0.69 build script (run)0.0s
726.rust-embed v8.7.20.0s0.0s (24%)
727.thiserror v1.0.690.0s0.0s (19%)
728.stable_deref_trait v1.2.00.0s0.0s (24%)alloc
729.sos-account v0.17.4 build script (run)0.0sarchive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
730.sos-integration-tests v0.17.00.0s0.0s (20%)
731.futures-sink v0.3.310.0s0.0s (16%)alloc, default, std
732.cpufeatures v0.2.170.0s0.0s (19%)
733.lazy_static v1.5.00.0s0.0s (25%)
734.thiserror v2.0.120.0s0.0s (14%)default, std
735.sos-command-line-tests v0.17.00.0s0.0s (19%)
736.stable_deref_trait v1.2.00.0s0.0s (34%)alloc
737.lock_api v0.4.13 build script (run)0.0satomic_usize, default
738.rustix v1.0.7 build script (run)0.0salloc, default, fs, std, termios
739.self_cell v0.10.30.0s0.0s (34%)
740.thiserror v1.0.690.0s0.0s (17%)
741.self_cell v0.10.30.0s0.0s (22%)
742.pin-project v1.1.100.0s0.0s (16%)
743.sos-ipc v0.17.0 build script (run)0.0sasync-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
744.rustc-hash v1.1.00.0s0.0s (28%)default, std
745.thiserror v1.0.69 build script (run)0.0s
746.snow v0.9.6 build script (run)0.0saes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
747.equivalent v1.0.20.0s0.0s (19%)
748.rustix v0.38.44 build script (run)0.0salloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
749.sos-remote-sync v0.17.0 build script (run)0.0sfiles, full
750.opaque-debug v0.3.10.0s0.0s (36%)
751.cfg-if v1.0.00.0s0.0s (44%)
752.refinery v0.8.160.0s0.0s (19%)default, rusqlite, toml
753.fnv v1.0.70.0s0.0s (21%)default, std
754.pin-utils v0.1.00.0s0.0s (30%)
755.icu_normalizer_data v2.0.00.0s0.0s (22%)
756.sos-migrate v0.17.0 build script (run)0.0sauthenticator, export, full, import, keychain-access
757.bitflags v1.3.20.0s0.0s (30%)default
758.sos-net v0.17.3 build script (run)0.0sarchive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
759.sos-server-storage v0.17.1 build script (run)0.0saudit, files, full, sos-audit, sos-external-files
760.terminal-banner v0.4.1 build script (run)0.0scolor, colored
761.sos-sdk v0.17.1 build script (run)0.0sfiles, full
762.fluent v0.16.10.0s0.0s (26%)
763.unic-langid v0.9.60.0s0.0s (21%)default
764.cpufeatures v0.2.170.0s0.0s (20%)
765.sos-changes v0.17.0 build script (run)0.0schanges-consumer, changes-producer, tokio-util
766.semver v1.0.26 build script (run)0.0sdefault, serde, std
767.sos-integrity v0.17.1 build script (run)0.0sfiles, full
768.sos-sync v0.17.0 build script (run)0.0sfiles, full
769.sos-password v0.17.0 build script (run)0.0s
770.sos-logs v0.17.0 build script (run)0.0s
771.cfg-if v1.0.00.0s0.0s (24%)
772.curve25519-dalek v4.1.3 build script (run)0.0salloc, default, digest, precomputed-tables, zeroize
773.sos-system-messages v0.17.0 build script (run)0.0s
774.xclipboard v0.16.1 build script (run)0.0s
775.sos-reducers v0.17.0 build script (run)0.0sfiles
776.logos-codegen v0.15.0 build script (run)0.0s
777.sos-platform-authenticator v0.17.0 build script (run)0.0s
778.zerocopy v0.8.25 build script (run)0.0ssimd
779.sos-database-upgrader v0.17.1 build script (run)0.0sarchive, full
780.sos-web v0.17.0 build script (run)0.0sarchive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
781.generic-array v0.14.7 build script (run)0.0smore_lengths, zeroize
782.rustversion v1.0.21 build script (run)0.0s
783.oid-registry v0.7.1 build script (run)0.0scrypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
784.proc-macro2-diagnostics v0.10.1 build script (run)0.0scolors, default, yansi
785.rustls v0.23.27 build script (run)0.0sring, std, tls12
786.sos-client-storage v0.17.1 build script (run)0.0sarchive, audit, files, full, search, sos-audit, sos-external-files, sos-search
787.libdbus-sys v0.2.5 build script (run)0.0sdefault, pkg-config
788.sos-server v0.17.0 build script (run)0.0sacme, audit, default, listen, pairing, sos-audit
789.sos-backend v0.17.1 build script (run)0.0sarchive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
790.nix v0.30.1 build script (run)0.0sfs, process, signal
791.sos-external-files v0.17.0 build script (run)0.0sfiles, full
792.sos-search v0.17.1 build script (run)0.0s
793.binary-stream v10.0.0 build script (run)0.0sasync, default, tokio
794.serde v1.0.219 build script (run)0.0salloc, default, derive, serde_derive, std
795.sos-login v0.17.2 build script (run)0.0sfiles, full
796.libc v0.2.172 build script (run)0.0sdefault, std
797.generic-array v0.14.7 build script (run)0.0smore_lengths
798.libc v0.2.172 build script (run)0.0sdefault, extra_traits, std
799.typenum v1.18.0 build script (run)0.0s
800.serde v1.0.219 build script (run)0.0sdefault, derive, serde_derive, std
801.sos-preferences v0.17.0 build script (run)0.0s
802.syn v1.0.109 build script (run)0.0sclone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
803.typenum v1.18.0 build script (run)0.0s
804.httparse v1.10.1 build script (run)0.0sdefault, std
805.signal-hook v0.3.18 build script (run)0.0schannel, default, iterator
806.sos-signer v0.17.0 build script (run)0.0s
807.mime_guess v2.0.5 build script (run)0.0sdefault, rev-mappings
808.sos-core v0.17.1 build script (run)0.0sfiles
809.sos-filesystem v0.17.0 build script (run)0.0sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
810.icu_normalizer_data v2.0.0 build script (run)0.0s
811.ahash v0.8.12 build script (run)0.0s
812.sos-database v0.17.0 build script (run)0.0sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
813.getrandom v0.3.3 build script (run)0.0s
814.sos-unit-tests v0.17.0 build script (run)0.0sdefault, files, listen
815.nix v0.28.0 build script (run)0.0sfs, ioctl, poll, process, signal, term
816.getrandom v0.3.3 build script (run)0.0sstd
817.semver v1.0.26 build script (run)0.0sdefault, std
818.libm v0.2.15 build script (run)0.0sarch, default
819.sos-vault v0.17.1 build script (run)0.0s
820.crossbeam-utils v0.8.21 build script (run)0.0sstd
821.icu_properties_data v2.0.1 build script (run)0.0s
822.parking_lot_core v0.9.11 build script (run)0.0s
823.parking_lot_core v0.9.11 build script (run)0.0s
824.icu_properties_data v2.0.1 build script (run)0.0s
825.serde_json v1.0.140 build script (run)0.0sdefault, raw_value, std
826.prettyplease v0.2.33 build script (run)0.0s
827.icu_normalizer_data v2.0.0 build script (run)0.0s
+ + + diff --git a/doc/rust-1.90-timings/cargo-1.90-1.html b/doc/rust-1.90-timings/cargo-1.90-1.html new file mode 100644 index 0000000000..f982a7dd97 --- /dev/null +++ b/doc/rust-1.90-timings/cargo-1.90-1.html @@ -0,0 +1,41199 @@ + + + + Cargo Build Timings — sos-artifact 0.8.9, sos-core 0.17.1, sos-test-utils 0.17.0, sos-integrity 0.17.1, xclipboard 0.16.1, sos-protocol 0.17.0, sos 0.17.0, sos-sdk 0.17.1, sos-search 0.17.1, sos-debug-snapshot 0.17.0, sos-audit 0.17.0, sos-reducers 0.17.0, sos-security-report 0.17.1, sos-integration-tests 0.17.0, sos-backend 0.17.1, sos-logs 0.17.0, sos-archive 0.17.0, sos-net 0.17.3, sos-extension-service 0.17.0, sos-signer 0.17.0, sos-server-storage 0.17.1, sos-filesystem 0.17.0, sos-vault 0.17.1, sos-login 0.17.2, keychain_parser 0.1.2, sos-account 0.17.4, sos-server 0.17.0, sos-web 0.17.0, sos-system-messages 0.17.0, sos-vfs 0.3.2, sos-sync 0.17.0, sos-client-storage 0.17.1, sos-ipc 0.17.0, sos-changes 0.17.0, sos-password 0.17.0, sos-command-line-tests 0.17.0, sos-cli-helpers 0.1.1, sos-database-upgrader 0.17.1, sos-external-files 0.17.0, sos-migrate 0.17.0, sos-remote-sync 0.17.0, sos-database 0.17.0, sos-unit-tests 0.17.0, sos-preferences 0.17.0, sos-platform-authenticator 0.17.0 + + + + + +

Cargo Build Timings

+See Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Targets:sos-artifact 0.8.9 (lib)
sos-core 0.17.1 (lib)
sos-test-utils 0.17.0 (lib)
sos-integrity 0.17.1 (lib)
xclipboard 0.16.1 (lib)
sos-protocol 0.17.0 (lib)
sos 0.17.0 (lib, bin "sos")
sos-sdk 0.17.1 (lib)
sos-search 0.17.1 (lib)
sos-debug-snapshot 0.17.0 (lib)
sos-audit 0.17.0 (lib)
sos-reducers 0.17.0 (lib)
sos-security-report 0.17.1 (lib)
sos-integration-tests 0.17.0 (lib, bin "db-compile-options", bin "make-v3-backup-fixtures", bin "test-extension-helper", bin "test-preferences-concurrency")
sos-backend 0.17.1 (lib)
sos-logs 0.17.0 (lib)
sos-archive 0.17.0 (lib)
sos-net 0.17.3 (lib)
sos-extension-service 0.17.0 (lib, bin "sos-extension-helper")
sos-signer 0.17.0 (lib)
sos-server-storage 0.17.1 (lib)
sos-filesystem 0.17.0 (lib)
sos-vault 0.17.1 (lib)
sos-login 0.17.2 (lib)
keychain_parser 0.1.2 (lib)
sos-account 0.17.4 (lib)
sos-server 0.17.0 (lib, bin "sos-server")
sos-web 0.17.0 (lib)
sos-system-messages 0.17.0 (lib)
sos-vfs 0.3.2 (lib)
sos-sync 0.17.0 (lib)
sos-client-storage 0.17.1 (lib)
sos-ipc 0.17.0 (lib)
sos-changes 0.17.0 (lib)
sos-password 0.17.0 (lib)
sos-command-line-tests 0.17.0 (lib)
sos-cli-helpers 0.1.1 (lib)
sos-database-upgrader 0.17.1 (lib)
sos-external-files 0.17.0 (lib)
sos-migrate 0.17.0 (lib)
sos-remote-sync 0.17.0 (lib)
sos-database 0.17.0 (lib)
sos-unit-tests 0.17.0 (lib)
sos-preferences 0.17.0 (lib)
sos-platform-authenticator 0.17.0 (lib)
Profile:release
Fresh units:0
Dirty units:827
Total units:827
Max concurrency:16 (jobs=16 ncpu=16)
Build start:2025-09-18T23:02:53.438241146Z
Total time:267.9s (4m 27.9s)
rustc:rustc 1.90.0 (1159e78c4 2025-09-14)
Host: x86_64-unknown-linux-gnu
Target: x86_64-unknown-linux-gnu
+ + + + + + + + + + + + + + + +
+ +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UnitTotalCodegenFeatures
1.sos v0.17.0 bin "sos"144.0s
2.sos-extension-service v0.17.0 bin "sos-extension-helper"125.8s
3.sos-server v0.17.0 bin "sos-server"115.9sacme, audit, default, listen, pairing, sos-audit
4.sos-integration-tests v0.17.0 bin "make-v3-backup-fixtures"110.5s
5.sos-integration-tests v0.17.0 bin "test-extension-helper"107.3s
6.libsqlite3-sys v0.30.1 build script (run)83.6sbundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
7.vcard4 v0.7.241.8s18.4s (44%)default, serde, zeroize
8.rustls v0.23.2734.0s22.5s (66%)ring, std, tls12
9.h2 v0.4.1033.4s13.7s (41%)
10.sos-integration-tests v0.17.0 bin "db-compile-options"29.9s
11.x11rb-protocol v0.13.125.0s12.1s (48%)std
12.tokio v1.45.124.1s16.0s (66%)bytes, default, fs, io-std, io-util, libc, macros, mio, net, process, rt, rt-multi-thread, signal-hook-registry, socket2, sync, time, tokio-macros
13.toml_edit v0.22.2623.0s18.3s (80%)display, parse, serde
14.utoipa-gen v5.3.122.1suuid
15.reqwest v0.12.1821.6s17.2s (80%)__rustls, __rustls-ring, __tls, json, rustls-tls, rustls-tls-webpki-roots, rustls-tls-webpki-roots-no-provider, stream
16.sos-vault v0.17.121.2s6.6s (31%)
17.axum v0.8.421.1s3.7s (18%)default, form, http1, json, matched-path, original-uri, query, tokio, tower-log, tracing, ws
18.sos-integration-tests v0.17.0 bin "test-preferences-concurrency"20.1s
19.dbus v0.9.719.0s10.7s (56%)
20.sos-net v0.17.316.1s7.5s (47%)archive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
21.clap_builder v4.5.3916.0s11.0s (68%)color, env, error-context, help, std, suggestions, usage, wrap_help
22.nix v0.26.414.9s1.5s (10%)acct, aio, default, dir, env, event, feature, fs, hostname, inotify, ioctl, kmod, memoffset, mman, mount, mqueue, net, personality, pin-utils, poll, process, pthread, ptrace, quota, reboot, resource, sched, signal, socket, term, time, ucontext, uio, user, zerocopy
23.x509-parser v0.16.013.6s10.7s (79%)default
24.sos-account v0.17.413.3s6.7s (51%)archive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
25.regex-automata v0.4.913.1s9.7s (74%)alloc, dfa, dfa-build, dfa-onepass, dfa-search, hybrid, meta, nfa, nfa-backtrack, nfa-pikevm, nfa-thompson, perf, perf-inline, perf-literal, perf-literal-multisubstring, perf-literal-substring, std, syntax, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment, unicode-word-boundary
26.regex-syntax v0.6.2912.9s5.7s (44%)default, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
27.rustix v0.38.4412.8s3.4s (27%)alloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
28.zxcvbn v3.1.012.3s8.0s (65%)builder, default, derive_builder, ser, serde
29.tracing-subscriber v0.3.1912.1s5.4s (44%)alloc, ansi, default, env-filter, fmt, json, matchers, nu-ansi-term, once_cell, regex, registry, serde, serde_json, sharded-slab, smallvec, std, thread_local, tracing, tracing-log, tracing-serde
30.time-tz v2.0.011.8s1.2s (10%)db, default, js-sys, system, thiserror, windows-sys
31.sos-client-storage v0.17.111.7s6.6s (57%)archive, audit, files, full, search, sos-audit, sos-external-files, sos-search
32.sos-server v0.17.011.7s9.2s (78%)acme, audit, default, listen, pairing, sos-audit
33.time v0.3.4111.2s6.3s (56%)alloc, default, formatting, local-offset, macros, parsing, serde, serde-human-readable, std, wasm-bindgen
34.sos v0.17.010.7s6.2s (59%)
35.hyper-util v0.1.1310.1s2.4s (24%)client, client-legacy, client-proxy, default, http1, http2, server, server-auto, service, tokio
36.rustix v1.0.79.8s1.5s (15%)alloc, default, fs, std
37.rcgen v0.13.29.6s6.7s (69%)crypto, default, pem, ring
38.sos-core v0.17.19.6s3.8s (40%)files
39.rustls-webpki v0.103.39.3s8.5s (91%)alloc, ring, std
40.hyper v1.6.09.0s3.3s (37%)client, default, http1, http2, server
41.sos-server-storage v0.17.18.6s5.8s (68%)audit, files, full, sos-audit, sos-external-files
42.axum-core v0.5.28.6s1.6s (18%)tracing
43.sos-web v0.17.08.4s3.6s (43%)archive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
44.sos-filesystem v0.17.07.4s0.4s (5%)archive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
45.sos-protocol v0.17.07.4s4.2s (57%)bs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
46.nix v0.28.07.2s2.5s (34%)fs, ioctl, poll, process, signal, term
47.syn v1.0.1097.2s3.7s (51%)clone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
48.sos-test-utils v0.17.07.2s5.9s (82%)
49.asn1-rs v0.6.27.1s4.1s (57%)datetime, default, std, time
50.iri-string v0.7.87.1s1.3s (18%)alloc, default, std
51.serde_json_path v0.7.26.7s3.1s (46%)default, functions, regex
52.age v0.11.16.6s2.8s (42%)async, default, futures, memchr
53.regex-automata v0.1.106.5s4.8s (74%)default, regex-syntax, std
54.utoipa v5.3.16.3s2.0s (32%)default, macros, uuid
55.sos-backend v0.17.15.9s4.9s (82%)archive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
56.syn v2.0.1015.9s2.0s (33%)clone-impls, default, derive, extra-traits, fold, full, parsing, printing, proc-macro, visit, visit-mut
57.tungstenite v0.26.25.9s2.9s (50%)__rustls-tls, data-encoding, handshake, http, httparse, rustls, rustls-pki-types, sha1
58.x11rb v0.13.15.8s2.0s (33%)
59.clap_derive v4.5.325.8sdefault
60.rustix v1.0.75.8s2.4s (41%)alloc, default, fs, std, termios
61.tower-http v0.6.45.8s1.5s (25%)cors, default, follow-redirect, futures-util, iri-string, tower, trace, tracing
62.notify v7.0.05.7s4.6s (81%)default, fsevent-sys, macos_fsevent, serde
63.nix v0.30.15.6s1.5s (27%)fs, process, signal
64.ring v0.17.14 build script (run)5.5salloc, default, dev_urandom_fallback, std
65.logos-codegen v0.14.45.4s2.3s (42%)
66.rustyline v14.0.05.4s2.4s (44%)custom-bindings, default, fd-lock, home, radix_trie, with-dirs, with-file-history
67.toml v0.8.225.4s3.0s (56%)default, display, parse
68.quick-xml v0.32.05.3s2.6s (49%)default
69.image v0.25.65.3s3.9s (73%)png
70.petgraph v0.7.15.3s0.3s (6%)
71.ring v0.17.145.2s2.8s (53%)alloc, default, dev_urandom_fallback, std
72.serde v1.0.2195.1s0.2s (3%)alloc, default, derive, serde_derive, std
73.crossterm v0.28.14.9s2.8s (57%)bracketed-paste, default, events, windows
74.dbus-secret-service v4.0.34.9s4.1s (85%)
75.fancy-regex v0.13.04.8s3.4s (71%)default, perf, std, unicode
76.i18n-embed v0.15.44.8s4.2s (89%)arc-swap, default, fluent, fluent-syntax, fluent-system, i18n-embed-impl, parking_lot, rust-embed
77.serde v1.0.2194.8s0.1s (3%)default, derive, serde_derive, std
78.prost-build v0.13.54.8s2.3s (48%)default, format
79.enum-iterator v2.1.04.7s0.2s (5%)
80.num-bigint v0.4.64.5s1.7s (38%)default, std
81.prettyplease v0.2.334.5s1.4s (30%)
82.serde_derive v1.0.2194.5sdefault
83.futures-util v0.3.314.4s0.3s (6%)alloc, async-await, async-await-macro, channel, default, futures-channel, futures-io, futures-macro, futures-sink, io, memchr, sink, slab, std
84.keychain_parser v0.1.24.4s1.8s (42%)
85.prost-types v0.13.54.4s0.6s (14%)
86.k256 v0.13.44.1s3.3s (80%)alloc, arithmetic, default, digest, ecdsa, ecdsa-core, once_cell, pkcs8, precomputed-tables, schnorr, sha2, sha256, signature, std
87.itertools v0.13.04.1s0.2s (4%)default, use_alloc, use_std
88.yasna v0.5.24.1s1.3s (32%)default, std, time
89.arboard v3.5.04.0s3.2s (80%)
90.der v0.7.103.9s1.8s (46%)alloc, oid, std, zeroize
91.darling_core v0.12.43.9s1.7s (44%)strsim, suggestions
92.tokio-rustls-acme v0.6.03.9s1.0s (26%)axum, default
93.ouroboros_macro v0.18.53.9sstd
94.regex-syntax v0.8.53.8s1.9s (51%)default, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
95.regex-automata v0.4.93.8s1.4s (37%)alloc, dfa-onepass, hybrid, meta, nfa-backtrack, nfa-pikevm, nfa-thompson, perf-inline, perf-literal, perf-literal-multisubstring, perf-literal-substring, std, syntax, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment, unicode-word-boundary
96.kdam v0.6.23.8s2.9s (77%)derive, rich, spinner
97.num-rational v0.4.23.7s2.8s (75%)num-bigint, num-bigint-std, std
98.snow v0.9.63.7s2.6s (70%)aes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
99.proc-macro2 v1.0.953.7s2.7s (73%)default, proc-macro
100.sos-changes v0.17.03.6s2.6s (71%)changes-consumer, changes-producer, tokio-util
101.libm v0.2.153.6s1.1s (30%)arch, default
102.crypto-bigint v0.5.53.5s1.0s (28%)generic-array, rand_core, zeroize
103.serde_with v3.12.03.4s0.3s (10%)alloc, base64, default, macros, std
104.sos-logs v0.17.03.3s2.8s (84%)
105.aho-corasick v1.1.33.3s2.2s (67%)default, perf-literal, std
106.serde_json v1.0.1403.3s1.4s (42%)default, raw_value, std
107.sos-migrate v0.17.03.1s2.2s (69%)authenticator, export, full, import, keychain-access
108.curve25519-dalek v4.1.33.1s1.1s (36%)alloc, default, digest, precomputed-tables, zeroize
109.axum-server v0.7.23.0s1.2s (39%)arc-swap, default, rustls, rustls-pemfile, rustls-pki-types, tls-rustls-no-provider, tokio-rustls
110.serde_json_path_core v0.2.22.9s1.6s (57%)default, functions
111.der-parser v9.0.02.8s1.6s (55%)bigint, default, num-bigint, std
112.prost-derive v0.13.52.8s
113.icu_properties v2.0.12.8s0.8s (30%)compiled_data
114.headers v0.4.02.7s1.2s (44%)
115.darling_core v0.20.112.7s1.3s (50%)strsim, suggestions
116.anticipate-runner v0.5.12.6s1.5s (59%)
117.csv-async v1.3.12.6s0.7s (28%)default, itoa, ryu, serde, tokio, tokio-stream, tokio1, with_serde
118.refinery-core v0.8.162.5s0.6s (23%)default
119.chrono v0.4.412.5s1.2s (51%)alloc, android-tzdata, clock, iana-time-zone, js-sys, now, std, wasm-bindgen, wasmbind, winapi, windows-link
120.hashbrown v0.15.32.4s0.1s (3%)
121.regex-syntax v0.8.52.4s0.8s (33%)default, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
122.sos-integrity v0.17.12.4s1.9s (80%)files, full
123.winnow v0.7.102.4s0.3s (13%)alloc, default, std
124.icu_locale_core v2.0.02.2s1.0s (44%)zerovec
125.async_zip v0.0.172.2s0.7s (34%)async-compression, deflate, tokio, tokio-util
126.i18n-embed v0.15.42.2s1.4s (66%)arc-swap, default, filesystem-assets, fluent, fluent-syntax, fluent-system, i18n-embed-impl, parking_lot, rust-embed, walkdir
127.toml v0.5.112.2s0.8s (37%)default
128.serde_path_to_error v0.1.172.2s0.3s (13%)
129.axum-extra v0.10.12.1s0.3s (15%)default, tracing, typed-header
130.derive_builder_core v0.10.22.1s1.3s (59%)
131.plist v1.7.12.1s0.6s (26%)default, serde
132.i18n-embed-fl v0.9.42.1s
133.textwrap v0.16.22.1s1.4s (70%)default, smawk, terminal_size, unicode-linebreak, unicode-width
134.time v0.3.412.0s0.6s (32%)alloc, default, formatting, parsing, std
135.nom v7.1.32.0s0.1s (7%)alloc, default, std
136.url v2.5.42.0s1.2s (59%)default, serde, std
137.interprocess v2.2.32.0s0.7s (32%)async, default, futures-core, tokio
138.idna v1.0.32.0s1.5s (75%)alloc, compiled_data, std
139.tower v0.5.22.0s0.1s (3%)__common, futures-core, futures-util, log, make, pin-project-lite, sync_wrapper, timeout, tokio, tracing, util
140.keyring v3.6.22.0s1.3s (68%)apple-native, sync-secret-service, windows-native
141.oid-registry v0.7.12.0s0.6s (32%)crypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
142.sos-archive v0.17.01.9s1.5s (78%)
143.icu_properties v2.0.11.9s0.3s (18%)compiled_data
144.sql_query_builder v2.4.21.9s1.3s (70%)sqlite
145.sos-artifact v0.8.91.9s0.3s (14%)
146.sos-search v0.17.11.9s1.4s (75%)
147.itertools v0.14.01.9s0.1s (3%)default, use_alloc, use_std
148.indexmap v2.9.01.8s0.1s (3%)default, std
149.aho-corasick v1.1.31.8s0.9s (48%)perf-literal, std
150.uriparse v0.6.41.8s0.8s (45%)default
151.libc v0.2.1721.8s0.2s (11%)default, extra_traits, std
152.sos-database-upgrader v0.17.11.8s0.2s (10%)archive, full
153.serde_with_macros v3.12.01.8s
154.time-macros v0.2.221.7sformatting, parsing, serde
155.enum-iterator-derive v1.4.01.7s
156.logos-codegen v0.15.01.7s0.9s (56%)
157.png v0.17.161.7s0.9s (55%)
158.icu_locale_core v2.0.01.7s0.5s (30%)zerovec
159.asn1-rs-derive v0.5.11.7s
160.tracing-appender v0.2.31.7s1.1s (68%)
161.fluent-bundle v0.15.31.6s1.0s (61%)default
162.derive_builder_core v0.20.21.6s0.7s (45%)lib_has_std
163.pin-project-internal v1.1.101.6s
164.probability v0.20.31.6s0.6s (35%)
165.sos-ipc v0.17.01.6s0.5s (29%)async-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
166.zerovec v0.11.21.6s0.1s (5%)alloc, derive, yoke
167.sos-database v0.17.01.5s0.7s (43%)archive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
168.notify-types v1.0.11.5s0.3s (22%)serde
169.i18n-config v0.4.71.5s1.0s (66%)
170.zerovec v0.11.21.5s0.1s (5%)alloc, derive, yoke
171.colored v2.2.01.5s0.6s (38%)
172.sharded-slab v0.1.71.5s0.1s (6%)
173.fs-err v3.1.01.5s0.6s (42%)tokio
174.thiserror-impl v2.0.121.5s
175.chbs v0.1.11.5s0.9s (59%)
176.basic-toml v0.1.101.5s0.5s (34%)
177.tracing-attributes v0.1.281.5s
178.icu_normalizer v2.0.01.4s0.7s (51%)compiled_data
179.indexmap v2.9.01.4s0.0s (2%)default, serde, std
180.sos-protocol v0.17.0 build script1.4sbs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
181.url v2.5.41.4s0.5s (38%)default, std
182.rand_chacha v0.9.01.4s1.1s (81%)std
183.cc v1.2.251.4s0.7s (48%)
184.http v1.3.11.4s0.6s (42%)default, std
185.strsim v0.11.11.4s1.0s (69%)
186.zerocopy v0.8.251.4s0.1s (4%)simd
187.data-encoding v2.9.01.3s1.1s (79%)alloc, default, std
188.yansi v1.0.11.3s0.2s (16%)alloc, default, std
189.zerofrom-derive v0.1.61.3s
190.rand v0.9.11.3s0.2s (14%)alloc, default, os_rng, small_rng, std, std_rng, thread_rng
191.sos-login v0.17.21.3s0.7s (53%)files, full
192.binary-stream v10.0.01.3s0.0s (3%)async, default, tokio
193.time-tz v2.0.0 build script1.2sdb, default, js-sys, system, thiserror, windows-sys
194.sos-remote-sync v0.17.01.2s0.1s (7%)files, full
195.time-tz v2.0.0 build script (run)1.2sdb, default, js-sys, system, thiserror, windows-sys
196.tokio-util v0.7.151.2s0.4s (33%)codec, compat, default, futures-io, io
197.age-core v0.11.01.2s0.8s (64%)
198.anstream v0.6.181.2s0.4s (34%)auto, default, wincon
199.signal-hook v0.3.181.2s0.7s (58%)channel, default, iterator
200.rustversion v1.0.211.2s
201.bytes v1.10.11.2s0.2s (20%)
202.fluent-bundle v0.15.31.2s0.5s (39%)default
203.deranged v0.4.01.1s0.0s (3%)alloc, powerfmt, serde, std
204.rustls-pki-types v1.12.01.1s0.6s (50%)alloc, default, std
205.rustyline-derive v0.11.11.1s
206.tempfile v3.20.01.1s0.6s (52%)default, getrandom
207.num-complex v0.4.61.1s0.1s (11%)std
208.refinery-macros v0.8.161.1s
209.zerovec-derive v0.11.11.1s
210.thiserror-impl v1.0.691.1s
211.anyhow v1.0.981.1s0.6s (55%)default, std
212.doctest-file v1.0.01.1s
213.sos-sync v0.17.01.1s0.3s (23%)files, full
214.sos-audit v0.17.01.1s0.3s (24%)
215.terminal-banner v0.4.11.1s0.7s (61%)color, colored
216.prost v0.13.51.1s0.2s (15%)default, derive, std
217.sos-preferences v0.17.01.1s0.5s (51%)
218.yoke-derive v0.8.01.0s
219.linux-raw-sys v0.4.151.0s0.0s (3%)elf, errno, general, if_ether, ioctl, net, netlink, no_std, system, xdp
220.aes v0.8.41.0s0.3s (32%)
221.sos-signer v0.17.01.0s0.4s (42%)
222.oid-registry v0.7.1 build script1.0scrypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
223.regex v1.11.11.0s0.5s (46%)default, perf, perf-backtrack, perf-cache, perf-dfa, perf-inline, perf-literal, perf-onepass, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
224.async-trait v0.1.881.0s
225.linux-raw-sys v0.9.41.0s0.1s (5%)elf, errno, general, ioctl, no_std
226.icu_collections v2.0.01.0s0.4s (39%)
227.rustls-pemfile v2.2.01.0s0.3s (33%)default, std
228.totp-rs v5.7.01.0s0.4s (43%)default, otpauth, qr, serde, serde_support, url, urlencoding, zeroize
229.inotify v0.10.21.0s0.3s (33%)
230.rs_merkle v1.5.00.9s0.5s (49%)default, std
231.xml-rs v0.8.260.9s0.4s (39%)
232.sos-external-files v0.17.00.9s0.0s (4%)files, full
233.argon2 v0.5.30.9s0.4s (44%)alloc, default, password-hash, rand, std
234.num-integer v0.1.460.9s0.3s (32%)i128, std
235.diff v0.1.130.9s0.6s (63%)
236.idna v1.0.30.9s0.5s (53%)alloc, compiled_data, std
237.sos-password v0.17.00.9s0.6s (62%)
238.tempfile v3.20.00.9s0.4s (47%)default, getrandom
239.miniz_oxide v0.8.80.9s0.5s (55%)default, simd, simd-adler32, with-alloc
240.poly1305 v0.8.00.9s0.5s (50%)
241.nix v0.28.0 build script0.9sfs, ioctl, poll, process, signal, term
242.prost v0.13.50.9s0.1s (8%)derive, prost-derive
243.anticipate v0.10.00.9s0.4s (50%)
244.matchit v0.7.30.9s0.4s (43%)default
245.serde_json_path_macros_internal v0.1.20.9s
246.semver v1.0.260.9s0.4s (47%)default, serde, std
247.memchr v2.7.40.9s0.4s (47%)alloc, default, std
248.intl_pluralrules v7.0.20.9s0.4s (46%)
249.typed-generational-arena v0.2.90.9s0.0s (4%)default, std
250.uuid v1.17.00.8s0.1s (16%)default, serde, std
251.blake2 v0.10.60.8s0.5s (55%)default, std
252.fixedbitset v0.5.70.8s0.3s (37%)
253.matchit v0.8.40.8s0.3s (40%)default
254.rand_chacha v0.3.10.8s0.7s (79%)std
255.intl_pluralrules v7.0.20.8s0.2s (28%)
256.icu_normalizer v2.0.00.8s0.3s (35%)compiled_data
257.parse-zoneinfo v0.3.10.8s0.4s (50%)
258.rand v0.8.50.8s0.1s (11%)alloc, default, getrandom, libc, rand_chacha, std, std_rng
259.nix v0.30.1 build script0.8sfs, process, signal
260.futures-lite v2.6.00.8s0.1s (8%)alloc, fastrand, futures-io, parking, std
261.derive_builder_macro v0.10.20.8s
262.nu-ansi-term v0.46.00.8s0.3s (40%)
263.num-traits v0.2.190.8s0.1s (15%)default, i128, std
264.urn v0.7.00.8s0.5s (61%)alloc, default, serde, std
265.anstyle-parse v0.2.60.8s0.1s (17%)default, utf8
266.sos-system-messages v0.17.00.8s0.1s (13%)
267.deranged v0.4.00.7s0.0s (2%)alloc, powerfmt, std
268.ipnet v2.11.00.7s0.5s (64%)default, std
269.csv-core v0.1.120.7s0.3s (47%)default
270.uuid v1.17.00.7s0.3s (37%)default, rng, serde, std, v4
271.tokio-tungstenite v0.26.20.7s0.0s (4%)__rustls-tls, connect, default, handshake, rustls, rustls-pki-types, rustls-tls-webpki-roots, stream, tokio-rustls, webpki-roots
272.vcpkg v0.2.150.7s0.4s (57%)
273.sec1 v0.7.30.7s0.4s (52%)alloc, default, der, point, std, subtle, zeroize
274.pem v3.0.50.7s0.5s (67%)default, serde, std
275.hyper-rustls v0.27.60.7s0.3s (39%)http1, ring, tls12, webpki-roots, webpki-tokio
276.rusqlite v0.32.10.7s0.3s (50%)backup, bundled, modern_sqlite
277.tokio-stream v0.1.170.7s0.1s (13%)default, time
278.ecdsa v0.16.90.7s0.1s (10%)alloc, arithmetic, der, digest, hazmat, pkcs8, rfc6979, signing, spki, std, verifying
279.asn1-rs-impl v0.2.00.7s
280.yansi v1.0.10.7s0.1s (11%)alloc, default, std
281.async-recursion v1.1.10.7s
282.icu_provider v2.0.00.7s0.2s (29%)baked, zerotrie
283.pretty_assertions v1.4.10.7s0.4s (62%)default, std
284.radix_trie v0.2.10.7s0.2s (33%)
285.kdam_derive v0.1.00.7s
286.fluent-syntax v0.11.10.7s0.2s (25%)default
287.generic-array v0.14.70.6s0.0s (3%)more_lengths, zeroize
288.futures-macro v0.3.310.6s
289.memchr v2.7.40.6s0.2s (24%)alloc, std
290.icu_collections v2.0.00.6s0.2s (29%)
291.hashbrown v0.14.50.6s0.0s (3%)ahash, allocator-api2, default, inline-more
292.hashbrown v0.15.30.6s0.0s (6%)
293.tokio-rustls v0.26.20.6s0.0s (4%)ring, tls12
294.curve25519-dalek-derive v0.1.10.6s
295.anstyle v1.0.100.6s0.1s (22%)default, std
296.generic-array v0.14.70.6s0.0s (2%)more_lengths
297.mio v1.0.40.6s0.2s (40%)default, log, net, os-ext, os-poll
298.crossbeam-channel v0.5.150.6s0.2s (27%)default, std
299.refinery-core v0.8.160.6s0.4s (60%)default, rusqlite, serde, toml
300.tracing-core v0.1.330.6s0.3s (44%)default, once_cell, std
301.proc-macro2-diagnostics v0.10.10.6s0.3s (44%)colors, default, yansi
302.fdeflate v0.3.70.6s0.3s (47%)
303.bytes v1.10.10.6s0.2s (27%)default, std
304.clap_lex v0.7.40.6s0.2s (41%)
305.socket2 v0.5.100.6s0.3s (45%)all
306.unicode-width v0.2.00.6s0.1s (11%)cjk, default
307.proc-macro2 v1.0.950.6s0.2s (36%)default, proc-macro
308.typenum v1.18.00.6s0.0s (4%)
309.probly-search v2.0.10.6s
310.rust-embed-impl v8.7.20.6s
311.pkcs8 v0.10.20.6s0.4s (68%)alloc, std
312.serde_urlencoded v0.7.10.6s0.1s (11%)
313.async-sqlite v0.4.00.6s0.4s (79%)backup, bundled, default
314.typenum v1.18.00.5s0.0s (3%)
315.sos-reducers v0.17.00.5s0.1s (10%)files
316.elliptic-curve v0.13.80.5s0.0s (4%)alloc, arithmetic, digest, ff, group, hazmat, pkcs8, sec1, std
317.sha2 v0.10.90.5s0.3s (54%)default, std
318.libc v0.2.1720.5s0.0s (4%)default, std
319.displaydoc v0.2.50.5sdefault, std
320.sha3 v0.10.80.5s0.2s (37%)default, std
321.unicode-linebreak v0.1.50.5s0.1s (15%)
322.serde-xml-rs v0.5.10.5s0.0s (9%)
323.mime_guess v2.0.50.5s0.2s (42%)default, rev-mappings
324.scrypt v0.11.00.5s0.3s (52%)
325.parking_lot v0.12.40.5s0.3s (68%)default
326.once_cell v1.21.30.5s0.2s (31%)alloc, default, race, std
327.ptyprocess v0.4.10.5s0.2s (45%)
328.rustversion v1.0.21 build script0.5s
329.unicode-segmentation v1.12.00.5s0.1s (27%)
330.unicode-width v0.1.140.5s0.1s (13%)cjk, default
331.logos-derive v0.14.40.5s
332.synstructure v0.13.20.5s0.2s (50%)default, proc-macro
333.tokio-macros v2.5.00.5s
334.unic-langid-impl v0.9.60.5s0.3s (53%)
335.thread_local v1.1.80.5s0.2s (36%)
336.linux-raw-sys v0.9.40.5s0.0s (5%)elf, errno, general, ioctl, no_std
337.libm v0.2.15 build script0.5sarch, default
338.qrcodegen v1.8.00.5s0.3s (66%)
339.open v5.3.20.5s0.3s (59%)
340.password-hash v0.5.00.5s0.2s (49%)alloc, default, rand_core, std
341.tracing-log v0.2.00.5s0.2s (47%)log-tracer, std
342.special v0.10.30.5s0.2s (43%)
343.bitflags v2.9.10.5s0.3s (54%)serde, std
344.is-wsl v0.4.00.5s0.3s (72%)
345.futures-executor v0.3.310.5s0.3s (57%)std
346.filetime v0.2.250.5s0.2s (52%)
347.num-iter v0.1.450.5s0.0s (8%)i128, std
348.regex v1.11.10.5s0.1s (20%)default, perf, perf-backtrack, perf-cache, perf-dfa, perf-inline, perf-literal, perf-onepass, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
349.cookie-factory v0.3.30.5s0.0s (6%)async, default, futures, std
350.fastrand v2.3.00.5s0.1s (15%)alloc, default, std
351.zeroize_derive v1.4.20.5s
352.flate2 v1.1.10.5s0.1s (21%)any_impl, default, miniz_oxide, rust_backend
353.rand v0.8.50.4s0.0s (6%)small_rng
354.httparse v1.10.10.4s0.2s (37%)default, std
355.pkg-config v0.3.320.4s0.2s (55%)
356.zerotrie v0.2.20.4s0.1s (16%)yoke, zerofrom
357.rusticata-macros v4.1.00.4s0.2s (50%)
358.sos-web v0.17.0 build script0.4sarchive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
359.sha1 v0.10.60.4s0.2s (45%)default, std
360.walkdir v2.5.00.4s0.3s (66%)
361.tracing v0.1.410.4s0.1s (34%)attributes, default, log, std, tracing-attributes
362.bit-vec v0.6.30.4s0.1s (12%)std
363.ed25519-dalek v2.1.10.4s0.2s (45%)alloc, default, fast, rand_core, std, zeroize
364.is-docker v0.2.00.4s0.3s (69%)
365.xclipboard v0.16.10.4s0.1s (15%)
366.crossbeam-utils v0.8.210.4s0.1s (21%)std
367.sos-database-upgrader v0.17.1 build script0.4sarchive, full
368.unic-langid-impl v0.9.60.4s0.1s (37%)serde
369.fallible-iterator v0.3.00.4s0.0s (2%)alloc, default
370.sos-integrity v0.17.1 build script0.4sfiles, full
371.icu_provider v2.0.00.4s0.1s (13%)baked, zerotrie
372.allocator-api2 v0.2.210.4s0.0s (12%)alloc
373.toml_datetime v0.6.90.4s0.1s (39%)serde
374.ring v0.17.14 build script0.4salloc, default, dev_urandom_fallback, std
375.hex v0.4.30.4s0.0s (5%)alloc, default, serde, std
376.rustix v1.0.7 build script0.4salloc, default, fs, std
377.rust-embed-utils v8.7.20.4s0.2s (64%)
378.async-fd-lock v0.2.00.4s0.0s (5%)async, default
379.heck v0.4.10.4s0.1s (38%)default
380.sos-server v0.17.0 build script0.4sacme, audit, default, listen, pairing, sos-audit
381.qrcodegen-image v1.5.00.4s0.3s (72%)base64
382.unicode-ident v1.0.180.4s0.1s (27%)
383.anyhow v1.0.980.4s0.1s (34%)default, std
384.base64 v0.21.70.4s0.1s (38%)alloc, default, std
385.signal-hook-registry v1.4.50.3s0.2s (55%)
386.multimap v0.10.10.3s0.0s (7%)
387.derive_builder_macro v0.20.20.3slib_has_std
388.ed25519 v2.2.30.3s0.1s (34%)alloc, std
389.autocfg v1.4.00.3s0.2s (53%)
390.darling_macro v0.20.110.3s
391.ctrlc v3.4.70.3s0.2s (50%)
392.sos-ipc v0.17.0 build script0.3sasync-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
393.cfg_eval v0.1.20.3sdefault
394.i18n-embed-impl v0.8.40.3sdefault, find-crate, fluent-system, i18n-config, quote
395.mime_guess v2.0.5 build script0.3sdefault, rev-mappings
396.semver v1.0.26 build script0.3sdefault, serde, std
397.darling_macro v0.12.40.3s
398.polyval v0.6.20.3s0.1s (39%)
399.prettyplease v0.2.33 build script0.3s
400.getrandom v0.3.30.3s0.1s (24%)
401.base64 v0.22.10.3s0.1s (30%)alloc, default, std
402.zerotrie v0.2.20.3s0.1s (22%)yoke, zerofrom
403.http-body-util v0.1.30.3s0.0s (7%)default
404.protoc-bin-vendored-linux-aarch_64 v3.1.00.3s0.1s (33%)
405.logos-derive v0.15.00.3s
406.intl-memoizer v0.5.30.3s0.2s (62%)
407.utoipa-rapidoc v6.0.00.3s0.1s (39%)axum
408.spki v0.7.30.3s0.1s (33%)alloc, std
409.typeshare-annotation v1.0.40.3s
410.sos-migrate v0.17.0 build script0.3sauthenticator, export, full, import, keychain-access
411.fluent-syntax v0.11.10.3s0.0s (12%)default
412.getrandom v0.3.3 build script0.3s
413.balloon-hash v0.4.00.3s0.1s (27%)alloc, default, password-hash, rand, std
414.sos-client-storage v0.17.1 build script0.3sarchive, audit, files, full, search, sos-audit, sos-external-files, sos-search
415.sha2 v0.10.90.3s0.1s (25%)default, std
416.sos-remote-sync v0.17.0 build script0.3sfiles, full
417.libdbus-sys v0.2.50.3s0.0s (10%)default, pkg-config
418.sos-net v0.17.3 build script0.3sarchive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
419.sos-cli-helpers v0.1.10.3s0.1s (31%)
420.sos-sdk v0.17.1 build script0.3sfiles, full
421.logos v0.14.40.3s0.0s (9%)default, export_derive, logos-derive, std
422.utf-8 v0.7.60.3s0.1s (30%)
423.signal-hook-mio v0.2.40.3s0.0s (16%)mio-1_0, support-v1_0
424.sos-login v0.17.2 build script0.3sfiles, full
425.ppv-lite86 v0.2.210.3s0.0s (6%)simd, std
426.either v1.15.00.3s0.0s (4%)std, use_std
427.semver v1.0.260.3s0.1s (25%)default, std
428.strsim v0.11.10.3s0.1s (44%)
429.sos-changes v0.17.0 build script0.3schanges-consumer, changes-producer, tokio-util
430.parking_lot v0.12.40.3s0.1s (44%)default
431.fluent-langneg v0.13.00.3s0.1s (52%)default
432.strsim v0.10.00.3s0.1s (52%)
433.fd-lock v4.0.40.3s0.0s (7%)
434.libdbus-sys v0.2.5 build script0.3sdefault, pkg-config
435.byteorder-lite v0.1.00.3s0.0s (6%)default, std
436.arc-swap v1.7.10.3s0.0s (15%)
437.arc-swap v1.7.10.3s0.0s (14%)
438.anstyle-query v1.1.20.3s0.0s (13%)
439.sos-search v0.17.1 build script0.3s
440.shell-words v1.1.00.3s0.1s (40%)default, std
441.simd-adler32 v0.3.70.3s0.2s (64%)const-generics, default, std
442.bytemuck v1.23.00.3s0.0s (8%)extern_crate_alloc
443.rev_buf_reader v0.3.00.3s0.0s (9%)default
444.httpdate v1.0.30.3s0.1s (53%)
445.chacha20 v0.9.10.3s0.0s (11%)zeroize
446.snow v0.9.6 build script0.3saes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
447.signal-hook v0.3.18 build script0.2schannel, default, iterator
448.sos-account v0.17.4 build script0.2sarchive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
449.pathdiff v0.2.30.2s0.0s (13%)
450.async-compression v0.4.230.2s0.0s (8%)deflate, flate2, futures-io
451.fs-err v3.1.0 build script0.2stokio
452.protoc-bin-vendored-linux-x86_32 v3.1.00.2s0.1s (40%)
453.terminal-banner v0.4.1 build script0.2scolor, colored
454.find-crate v0.6.30.2s0.1s (37%)
455.rustix v0.38.44 build script0.2salloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
456.logos v0.15.00.2s0.0s (8%)default, export_derive, logos-derive, std
457.xclipboard v0.16.1 build script0.2s
458.minimal-lexical v0.2.10.2s0.1s (24%)std
459.sos-password v0.17.0 build script0.2s
460.sos-platform-authenticator v0.17.0 build script0.2s
461.zerocopy v0.8.25 build script0.2ssimd
462.tracing-serde v0.2.00.2s0.0s (7%)
463.bitflags v2.9.10.2s0.1s (26%)std
464.sos-platform-authenticator v0.17.00.2s0.1s (38%)
465.walkdir v2.5.00.2s0.1s (47%)
466.writeable v0.6.10.2s0.1s (37%)
467.memoffset v0.7.1 build script0.2sdefault
468.iana-time-zone v0.1.630.2s0.2s (64%)fallback
469.writeable v0.6.10.2s0.0s (21%)
470.proc-macro-error-attr2 v2.0.00.2s
471.sos-security-report v0.17.10.2s0.0s (5%)
472.sos-logs v0.17.0 build script0.2s
473.base64ct v1.7.30.2s0.0s (17%)alloc, std
474.terminal_size v0.4.20.2s0.1s (28%)
475.proc-macro-error2 v2.0.10.2s0.1s (41%)default, syn-error
476.mime v0.3.170.2s0.1s (50%)
477.tinystr v0.8.10.2s0.0s (11%)alloc, default, zerovec
478.aes-gcm v0.10.30.2s0.0s (7%)aes, alloc, default, getrandom, rand_core, std
479.hashlink v0.9.10.2s0.0s (2%)
480.sos-server-storage v0.17.1 build script0.2saudit, files, full, sos-audit, sos-external-files
481.version_check v0.9.50.2s0.1s (47%)
482.tinystr v0.8.10.2s0.0s (9%)alloc, default, zerovec
483.comma v1.0.00.2s0.1s (47%)
484.bech32 v0.9.10.2s0.1s (43%)default, std
485.proc-macro2-diagnostics v0.10.1 build script0.2scolors, default, yansi
486.quote v1.0.400.2s0.1s (35%)default, proc-macro
487.ahash v0.8.120.2s0.1s (29%)
488.sanitize-filename v0.6.00.2s0.1s (40%)
489.rustc_version v0.4.10.2s0.1s (41%)
490.sos-unit-tests v0.17.0 build script0.2sdefault, files, listen
491.smawk v0.3.20.2s0.0s (13%)
492.keccak v0.1.50.2s0.1s (41%)
493.rand_core v0.9.30.2s0.0s (22%)os_rng, std
494.intl-memoizer v0.5.30.2s0.1s (39%)
495.aliasable v0.1.30.2s0.1s (26%)alloc, default
496.form_urlencoded v1.2.10.2s0.1s (36%)alloc, default, std
497.typenum v1.18.0 build script0.2s
498.parking_lot_core v0.9.110.2s0.1s (37%)
499.rustix v1.0.7 build script0.2salloc, default, fs, std, termios
500.ctr v0.9.20.2s0.0s (7%)
501.sos-extension-service v0.17.00.2s0.0s (9%)
502.parking_lot_core v0.9.110.2s0.0s (19%)
503.sos-sync v0.17.0 build script0.2sfiles, full
504.inotify-sys v0.1.50.2s0.0s (15%)
505.signature v2.2.00.2s0.0s (16%)alloc, digest, rand_core, std
506.log v0.4.270.2s0.1s (29%)std
507.matchers v0.1.00.2s0.0s (18%)
508.protoc-bin-vendored-macos-x86_64 v3.1.00.2s0.1s (40%)
509.powerfmt v0.2.00.2s0.1s (31%)
510.potential_utf v0.1.20.2s0.1s (37%)zerovec
511.etcetera v0.8.00.2s0.1s (50%)
512.unicase v2.8.10.2s0.1s (32%)
513.digest v0.10.70.2s0.0s (10%)alloc, block-buffer, const-oid, core-api, default, mac, oid, std, subtle
514.anyhow v1.0.98 build script0.2sdefault, std
515.cipher v0.4.40.2s0.0s (6%)zeroize
516.endian-type v0.1.20.2s0.0s (12%)
517.smallvec v1.15.00.2s0.0s (9%)const_generics, const_new
518.protoc-bin-vendored-win32 v3.1.00.2s0.0s (23%)
519.thiserror v2.0.12 build script0.2sdefault, std
520.fluent-langneg v0.13.00.2s0.1s (30%)default
521.libsqlite3-sys v0.30.1 build script0.2sbundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
522.httparse v1.10.1 build script0.2sdefault, std
523.bit-set v0.5.30.2s0.0s (7%)std
524.nibble_vec v0.1.00.2s0.0s (10%)
525.once_cell v1.21.30.2s0.0s (20%)alloc, default, race, std
526.type-map v0.5.10.2s0.1s (53%)
527.yoke v0.8.00.2s0.0s (4%)alloc, derive, zerofrom
528.litemap v0.8.00.2s0.0s (6%)alloc
529.sos-debug-snapshot v0.17.00.2s0.0s (25%)
530.getrandom v0.3.3 build script0.2sstd
531.salsa20 v0.10.20.2s0.0s (12%)
532.fastrand v2.3.00.2s0.0s (22%)alloc, default, std
533.icu_properties_data v2.0.10.2s0.0s (9%)
534.siphasher v1.0.10.2s0.0s (13%)default, std
535.libc v0.2.172 build script0.2sdefault, std
536.num_threads v0.1.70.2s0.1s (69%)
537.typeshare v1.0.40.2s0.0s (19%)default, wasmbind
538.crossbeam-utils v0.8.21 build script0.2sstd
539.tower-layer v0.3.30.2s0.0s (8%)
540.libc v0.2.172 build script0.2sdefault, extra_traits, std
541.const-oid v0.9.60.2s0.1s (42%)
542.futures-channel v0.3.310.2s0.0s (7%)alloc, default, futures-sink, sink, std
543.rand_core v0.6.40.2s0.0s (32%)alloc, getrandom, std
544.getrandom v0.3.30.2s0.0s (30%)std
545.ryu v1.0.200.2s0.1s (39%)
546.litemap v0.8.00.2s0.0s (6%)alloc
547.lock_api v0.4.130.2s0.0s (4%)atomic_usize, default
548.lock_api v0.4.130.2s0.0s (7%)atomic_usize, default
549.syn v1.0.109 build script0.2sclone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
550.either v1.15.00.2s0.0s (6%)std, use_std
551.sos-protocol v0.17.0 build script (run)0.1sbs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
552.percent-encoding v2.3.10.1s0.1s (34%)alloc, default, std
553.heck v0.5.00.1s0.1s (48%)
554.digest v0.10.70.1s0.0s (9%)alloc, block-buffer, core-api, default, std
555.colorchoice v1.0.30.1s0.0s (29%)
556.getrandom v0.2.160.1s0.1s (36%)std
557.inventory v0.3.200.1s0.0s (18%)
558.thiserror v1.0.69 build script0.1s
559.serde v1.0.219 build script0.1sdefault, derive, serde_derive, std
560.rust-embed-utils v8.7.20.1s0.0s (28%)
561.secrecy v0.10.30.1s0.0s (35%)serde
562.yoke v0.8.00.1s0.0s (6%)alloc, derive, zerofrom
563.toml_write v0.1.10.1s0.0s (21%)alloc, default, std
564.shlex v1.3.00.1s0.1s (38%)default, std
565.phf_generator v0.11.30.1s0.1s (47%)
566.protoc-bin-vendored-linux-ppcle_64 v3.1.00.1s0.0s (31%)
567.log v0.4.270.1s0.0s (12%)
568.bs58 v0.4.00.1s0.1s (37%)alloc, default, std
569.copy_dir v0.1.30.1s0.0s (20%)
570.smallvec v1.15.00.1s0.0s (7%)const_generics
571.parking_lot_core v0.9.11 build script0.1s
572.derive_builder v0.10.20.1s0.0s (23%)default, std
573.x25519-dalek v2.0.10.1s0.0s (16%)alloc, default, precomputed-tables, static_secrets, zeroize
574.serde_spanned v0.6.80.1s0.0s (25%)serde
575.nonzero_ext v0.1.50.1s0.0s (31%)default, std
576.phf_shared v0.11.30.1s0.0s (15%)default, std
577.form_urlencoded v1.2.10.1s0.0s (28%)alloc, std
578.proc-macro2 v1.0.95 build script0.1sdefault, proc-macro
579.derive_builder v0.20.20.1s0.0s (21%)default, std
580.slab v0.4.90.1s0.0s (6%)default, std
581.siphasher v1.0.10.1s0.0s (12%)default, std
582.protoc-bin-vendored v3.1.00.1s0.0s (17%)
583.urlencoding v2.1.30.1s0.1s (41%)
584.type-map v0.5.10.1s0.0s (31%)
585.group v0.13.00.1s0.0s (24%)alloc
586.potential_utf v0.1.20.1s0.0s (25%)zerovec
587.zeroize v1.8.10.1s0.0s (22%)alloc, default, derive, zeroize_derive
588.utf8parse v0.2.20.1s0.0s (14%)default
589.powerfmt v0.2.00.1s0.0s (23%)
590.protoc-bin-vendored-linux-x86_64 v3.1.00.1s0.0s (33%)
591.idna_adapter v1.2.10.1s0.0s (13%)compiled_data
592.idna_adapter v1.2.10.1s0.0s (22%)compiled_data
593.human_bytes v0.4.30.1s0.0s (14%)default, si-units
594.hkdf v0.12.40.1s0.0s (16%)
595.serde v1.0.219 build script0.1salloc, default, derive, serde_derive, std
596.protoc-bin-vendored-macos-aarch_64 v3.1.00.1s0.0s (37%)
597.chacha20poly1305 v0.10.10.1s0.0s (12%)alloc, default, getrandom, rand_core, std
598.anyhow v1.0.98 build script (run)0.1sdefault, std
599.webpki-roots v1.0.00.1s0.0s (10%)
600.percent-encoding v2.3.10.1s0.0s (21%)alloc, std
601.futures-task v0.3.310.1s0.0s (27%)alloc, std
602.crc32fast v1.4.20.1s0.0s (29%)default, std
603.base16ct v0.2.00.1s0.0s (39%)alloc
604.semver v1.0.26 build script0.1sdefault, std
605.beef v0.5.20.1s0.0s (15%)default
606.proc-macro2 v1.0.95 build script (run)0.1sdefault, proc-macro
607.sos-signer v0.17.0 build script0.1s
608.unicase v2.8.10.1s0.0s (21%)
609.sos-filesystem v0.17.0 build script0.1sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
610.icu_properties_data v2.0.10.1s0.0s (18%)
611.num-conv v0.1.00.1s0.0s (15%)
612.is_terminal_polyfill v1.70.10.1s0.0s (23%)default
613.random v0.13.20.1s0.0s (16%)
614.itoa v1.0.150.1s0.0s (10%)
615.headers-core v0.3.00.1s0.0s (18%)
616.phf v0.11.30.1s0.0s (9%)default, std
617.binary-stream v10.0.0 build script0.1sasync, default, tokio
618.instant v0.1.130.1s0.0s (29%)
619.subtle v2.6.10.1s0.0s (13%)default, i128, std
620.rfc6979 v0.4.00.1s0.0s (10%)
621.base32 v0.5.10.1s0.0s (46%)
622.futures-io v0.3.310.1s0.0s (15%)default, std
623.phf_shared v0.11.30.1s0.0s (28%)std
624.ghash v0.5.10.1s0.0s (20%)
625.curve25519-dalek v4.1.3 build script0.1salloc, default, digest, precomputed-tables, zeroize
626.want v0.3.10.1s0.0s (26%)
627.block-buffer v0.10.40.1s0.0s (14%)
628.sos-preferences v0.17.0 build script0.1s
629.adler2 v2.0.00.1s0.0s (44%)
630.num-conv v0.1.00.1s0.0s (5%)
631.sos-reducers v0.17.0 build script0.1sfiles
632.sos-system-messages v0.17.0 build script0.1s
633.utf8_iter v1.0.40.1s0.0s (25%)
634.fallible-streaming-iterator v0.1.90.1s0.0s (10%)
635.sos-core v0.17.1 build script0.1sfiles
636.icu_properties_data v2.0.1 build script0.1s
637.memoffset v0.7.10.1s0.0s (17%)default
638.parking v2.2.10.1s0.0s (41%)
639.sos-external-files v0.17.0 build script0.1sfiles, full
640.aead v0.5.20.1s0.0s (14%)alloc, getrandom, rand_core, std
641.ouroboros v0.18.50.1s0.0s (15%)default, std
642.sos-login v0.17.2 build script (run)0.1sfiles, full
643.fs-err v3.1.0 build script (run)0.1stokio
644.icu_normalizer_data v2.0.0 build script0.1s
645.logos-codegen v0.15.0 build script0.1s
646.ahash v0.8.12 build script0.1s
647.sos-vault v0.17.1 build script0.1s
648.rustls v0.23.27 build script0.1sring, std, tls12
649.sos-backend v0.17.1 build script0.1sarchive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
650.hmac v0.12.10.1s0.0s (14%)reset
651.inout v0.1.40.1s0.0s (14%)
652.utf8_iter v1.0.40.1s0.0s (27%)
653.memoffset v0.7.1 build script (run)0.1sdefault
654.pbkdf2 v0.12.20.1s0.0s (13%)default, hmac
655.futures-core v0.3.310.1s0.0s (27%)alloc, default, std
656.pin-project v1.1.100.1s0.0s (17%)
657.sos-database v0.17.0 build script0.1sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
658.atomic-waker v1.1.20.1s0.0s (26%)
659.slab v0.4.9 build script0.1sdefault, std
660.static_assertions v1.1.00.1s0.0s (19%)
661.libsqlite3-sys v0.30.10.1s0.0s (15%)bundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
662.http-body v1.0.10.1s0.0s (20%)
663.rand_core v0.6.40.1s0.0s (13%)
664.lock_api v0.4.13 build script0.1satomic_usize, default
665.sos-sdk v0.17.10.1s0.0s (14%)files, full
666.cfg_aliases v0.2.10.1s0.0s (20%)
667.cfg_aliases v0.1.10.1s0.0s (32%)
668.generic-array v0.14.7 build script0.1smore_lengths, zeroize
669.rust-embed v8.7.20.1s0.0s (29%)
670.untrusted v0.9.00.1s0.0s (18%)
671.num-traits v0.2.19 build script0.1sdefault, i128, std
672.clap v4.5.390.1s0.0s (27%)color, default, derive, env, error-context, help, std, suggestions, usage, wrap_help
673.overload v0.1.10.1s0.0s (16%)
674.home v0.5.110.1s0.0s (34%)
675.same-file v1.0.60.1s0.0s (26%)
676.serde_json v1.0.140 build script0.1sdefault, raw_value, std
677.thiserror v2.0.120.1s0.0s (23%)default, std
678.zerofrom v0.1.60.1s0.0s (9%)alloc, derive
679.block-buffer v0.10.40.1s0.0s (8%)
680.zerofrom v0.1.60.1s0.0s (13%)alloc, derive
681.rust-embed v8.7.20.1s0.0s (27%)
682.sos-server-storage v0.17.1 build script (run)0.1saudit, files, full, sos-audit, sos-external-files
683.sos-password v0.17.0 build script (run)0.1s
684.crypto-common v0.1.60.1s0.0s (11%)getrandom, rand_core, std
685.equivalent v1.0.20.1s0.0s (12%)
686.generic-array v0.14.7 build script0.1smore_lengths
687.phf_codegen v0.11.30.1s0.0s (15%)
688.ff v0.13.10.1s0.0s (7%)alloc
689.universal-hash v0.5.10.1s0.0s (15%)
690.time-core v0.1.40.1s0.0s (16%)
691.sos-logs v0.17.0 build script (run)0.1s
692.cfg-if v0.1.100.1s0.0s (26%)
693.num v0.4.30.1s0.0s (19%)default, num-bigint, std
694.serde_json_path_macros v0.1.60.1s0.0s (17%)
695.sos-platform-authenticator v0.17.0 build script (run)0.1s
696.sos-server v0.17.0 build script (run)0.1sacme, audit, default, listen, pairing, sos-audit
697.num-traits v0.2.19 build script (run)0.1sdefault, i128, std
698.rustix v1.0.7 build script (run)0.1salloc, default, fs, std
699.crypto-common v0.1.60.1s0.0s (25%)std
700.ident_case v1.0.10.1s0.0s (19%)
701.proc-macro2 v1.0.95 build script (run)0.1sdefault, proc-macro
702.constant_time_eq v0.3.10.1s0.0s (21%)
703.sos-account v0.17.4 build script (run)0.1sarchive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
704.time-core v0.1.40.1s0.0s (24%)
705.rustc-hash v1.1.00.1s0.0s (17%)default, std
706.itoa v1.0.150.1s0.0s (15%)
707.rustc-hash v2.1.10.1s0.0s (20%)default, std
708.anyhow v1.0.98 build script (run)0.1sdefault, std
709.sos-changes v0.17.0 build script (run)0.1schanges-consumer, changes-producer, tokio-util
710.io_tee v0.1.10.1s0.0s (8%)
711.same-file v1.0.60.0s0.0s (33%)
712.rustc-hash v2.1.10.0s0.0s (19%)default, std
713.futures-sink v0.3.310.0s0.0s (12%)alloc, default, std
714.webpki-roots v0.26.110.0s0.0s (17%)
715.pin-project-lite v0.2.160.0s0.0s (12%)
716.try-lock v0.2.50.0s0.0s (13%)
717.unic-langid v0.9.60.0s0.0s (15%)default, serde
718.futures v0.3.310.0s0.0s (23%)alloc, async-await, default, executor, futures-executor, std
719.sos-search v0.17.1 build script (run)0.0s
720.sos-vfs v0.3.20.0s0.0s (20%)
721.thiserror v2.0.12 build script (run)0.0sdefault, std
722.sos-sdk v0.17.1 build script (run)0.0sfiles, full
723.scopeguard v1.2.00.0s0.0s (14%)
724.rustversion v1.0.21 build script (run)0.0s
725.fluent v0.16.10.0s0.0s (19%)
726.sos-remote-sync v0.17.0 build script (run)0.0sfiles, full
727.stable_deref_trait v1.2.00.0s0.0s (45%)alloc
728.darling v0.12.40.0s0.0s (19%)default, suggestions
729.rustc-hash v1.1.00.0s0.0s (13%)default, std
730.unic-langid v0.9.60.0s0.0s (18%)default
731.sos-ipc v0.17.0 build script (run)0.0sasync-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
732.sync_wrapper v1.0.20.0s0.0s (16%)futures, futures-core
733.lock_api v0.4.13 build script (run)0.0satomic_usize, default
734.thiserror v1.0.69 build script (run)0.0s
735.thiserror v1.0.690.0s0.0s (17%)
736.fluent v0.16.10.0s0.0s (23%)
737.slab v0.4.9 build script (run)0.0sdefault, std
738.rustix v0.38.44 build script (run)0.0salloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
739.sos-integration-tests v0.17.00.0s0.0s (18%)
740.scopeguard v1.2.00.0s0.0s (9%)
741.sos-database-upgrader v0.17.1 build script (run)0.0sarchive, full
742.self_cell v1.2.00.0s0.0s (19%)
743.sos-client-storage v0.17.1 build script (run)0.0sarchive, audit, files, full, search, sos-audit, sos-external-files, sos-search
744.sos-web v0.17.0 build script (run)0.0sarchive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
745.sos-unit-tests v0.17.00.0s0.0s (16%)default, files, listen
746.sos-integrity v0.17.1 build script (run)0.0sfiles, full
747.icu_normalizer_data v2.0.00.0s0.0s (18%)
748.fnv v1.0.70.0s0.0s (24%)default, std
749.snow v0.9.6 build script (run)0.0saes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
750.cpufeatures v0.2.170.0s0.0s (14%)
751.thiserror v1.0.69 build script (run)0.0s
752.self_cell v1.2.00.0s0.0s (18%)
753.lazy_static v1.5.00.0s0.0s (12%)
754.icu_normalizer_data v2.0.00.0s0.0s (31%)
755.sos-command-line-tests v0.17.00.0s0.0s (15%)
756.rustix v1.0.7 build script (run)0.0salloc, default, fs, std, termios
757.semver v1.0.26 build script (run)0.0sdefault, serde, std
758.tower-service v0.3.30.0s0.0s (15%)
759.darling v0.20.110.0s0.0s (24%)default, suggestions
760.thiserror v1.0.690.0s0.0s (15%)
761.terminal-banner v0.4.1 build script (run)0.0scolor, colored
762.fnv v1.0.70.0s0.0s (14%)default, std
763.sos-net v0.17.3 build script (run)0.0sarchive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
764.bitflags v1.3.20.0s0.0s (23%)default
765.proc-macro2-diagnostics v0.10.1 build script (run)0.0scolors, default, yansi
766.cfg-if v1.0.00.0s0.0s (17%)
767.equivalent v1.0.20.0s0.0s (16%)
768.pin-utils v0.1.00.0s0.0s (22%)
769.lazy_static v1.5.00.0s0.0s (20%)
770.libdbus-sys v0.2.5 build script (run)0.0sdefault, pkg-config
771.stable_deref_trait v1.2.00.0s0.0s (0%)alloc
772.sos-signer v0.17.0 build script (run)0.0s
773.lock_api v0.4.13 build script (run)0.0satomic_usize, default
774.unicode-ident v1.0.180.0s0.0s (44%)
775.opaque-debug v0.3.10.0s0.0s (25%)
776.oid-registry v0.7.1 build script (run)0.0scrypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
777.xclipboard v0.16.1 build script (run)0.0s
778.refinery v0.8.160.0s0.0s (14%)default, rusqlite, toml
779.serde v1.0.219 build script (run)0.0salloc, default, derive, serde_derive, std
780.sos-preferences v0.17.0 build script (run)0.0s
781.binary-stream v10.0.0 build script (run)0.0sasync, default, tokio
782.self_cell v0.10.30.0s0.0s (27%)
783.sos-migrate v0.17.0 build script (run)0.0sauthenticator, export, full, import, keychain-access
784.libc v0.2.172 build script (run)0.0sdefault, extra_traits, std
785.self_cell v0.10.30.0s0.0s (18%)
786.nix v0.30.1 build script (run)0.0sfs, process, signal
787.curve25519-dalek v4.1.3 build script (run)0.0salloc, default, digest, precomputed-tables, zeroize
788.cpufeatures v0.2.170.0s0.0s (21%)
789.zerocopy v0.8.25 build script (run)0.0ssimd
790.sos-sync v0.17.0 build script (run)0.0sfiles, full
791.sos-unit-tests v0.17.0 build script (run)0.0sdefault, files, listen
792.signal-hook v0.3.18 build script (run)0.0schannel, default, iterator
793.ahash v0.8.12 build script (run)0.0s
794.semver v1.0.26 build script (run)0.0sdefault, std
795.libm v0.2.15 build script (run)0.0sarch, default
796.generic-array v0.14.7 build script (run)0.0smore_lengths
797.sos-filesystem v0.17.0 build script (run)0.0sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
798.httparse v1.10.1 build script (run)0.0sdefault, std
799.mime_guess v2.0.5 build script (run)0.0sdefault, rev-mappings
800.sos-core v0.17.1 build script (run)0.0sfiles
801.sos-vault v0.17.1 build script (run)0.0s
802.sos-database v0.17.0 build script (run)0.0sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
803.sos-reducers v0.17.0 build script (run)0.0sfiles
804.icu_properties_data v2.0.1 build script (run)0.0s
805.rustls v0.23.27 build script (run)0.0sring, std, tls12
806.sos-external-files v0.17.0 build script (run)0.0sfiles, full
807.getrandom v0.3.3 build script (run)0.0s
808.generic-array v0.14.7 build script (run)0.0smore_lengths, zeroize
809.sos-system-messages v0.17.0 build script (run)0.0s
810.typenum v1.18.0 build script (run)0.0s
811.sos-backend v0.17.1 build script (run)0.0sarchive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
812.nix v0.28.0 build script (run)0.0sfs, ioctl, poll, process, signal, term
813.cfg-if v1.0.00.0s0.0s (29%)
814.serde_json v1.0.140 build script (run)0.0sdefault, raw_value, std
815.typenum v1.18.0 build script (run)0.0s
816.syn v1.0.109 build script (run)0.0sclone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
817.logos-codegen v0.15.0 build script (run)0.0s
818.icu_normalizer_data v2.0.0 build script (run)0.0s
819.crossbeam-utils v0.8.21 build script (run)0.0sstd
820.libc v0.2.172 build script (run)0.0sdefault, std
821.getrandom v0.3.3 build script (run)0.0sstd
822.serde v1.0.219 build script (run)0.0sdefault, derive, serde_derive, std
823.prettyplease v0.2.33 build script (run)0.0s
824.icu_normalizer_data v2.0.0 build script (run)0.0s
825.parking_lot_core v0.9.11 build script (run)0.0s
826.icu_properties_data v2.0.1 build script (run)0.0s
827.parking_lot_core v0.9.11 build script (run)0.0s
+ + + diff --git a/doc/rust-1.90-timings/cargo-1.90-2.html b/doc/rust-1.90-timings/cargo-1.90-2.html new file mode 100644 index 0000000000..e2bdda0a95 --- /dev/null +++ b/doc/rust-1.90-timings/cargo-1.90-2.html @@ -0,0 +1,41053 @@ + + + + Cargo Build Timings — sos-archive 0.17.0, sos-login 0.17.2, sos-logs 0.17.0, sos-password 0.17.0, sos-remote-sync 0.17.0, keychain_parser 0.1.2, sos-account 0.17.4, sos-client-storage 0.17.1, sos-database-upgrader 0.17.1, sos-system-messages 0.17.0, sos-preferences 0.17.0, sos-test-utils 0.17.0, sos-unit-tests 0.17.0, sos-artifact 0.8.9, sos-command-line-tests 0.17.0, sos-vault 0.17.1, sos-web 0.17.0, sos-extension-service 0.17.0, sos-core 0.17.1, sos-filesystem 0.17.0, sos-net 0.17.3, sos 0.17.0, sos-server 0.17.0, sos-search 0.17.1, sos-audit 0.17.0, sos-sync 0.17.0, sos-protocol 0.17.0, sos-server-storage 0.17.1, sos-ipc 0.17.0, sos-database 0.17.0, sos-platform-authenticator 0.17.0, sos-reducers 0.17.0, sos-integration-tests 0.17.0, sos-backend 0.17.1, sos-integrity 0.17.1, sos-security-report 0.17.1, sos-signer 0.17.0, sos-changes 0.17.0, sos-cli-helpers 0.1.1, sos-debug-snapshot 0.17.0, sos-external-files 0.17.0, xclipboard 0.16.1, sos-sdk 0.17.1, sos-migrate 0.17.0, sos-vfs 0.3.2 + + + + + +

Cargo Build Timings

+See Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Targets:sos-archive 0.17.0 (lib)
sos-login 0.17.2 (lib)
sos-logs 0.17.0 (lib)
sos-password 0.17.0 (lib)
sos-remote-sync 0.17.0 (lib)
keychain_parser 0.1.2 (lib)
sos-account 0.17.4 (lib)
sos-client-storage 0.17.1 (lib)
sos-database-upgrader 0.17.1 (lib)
sos-system-messages 0.17.0 (lib)
sos-preferences 0.17.0 (lib)
sos-test-utils 0.17.0 (lib)
sos-unit-tests 0.17.0 (lib)
sos-artifact 0.8.9 (lib)
sos-command-line-tests 0.17.0 (lib)
sos-vault 0.17.1 (lib)
sos-web 0.17.0 (lib)
sos-extension-service 0.17.0 (lib, bin "sos-extension-helper")
sos-core 0.17.1 (lib)
sos-filesystem 0.17.0 (lib)
sos-net 0.17.3 (lib)
sos 0.17.0 (lib, bin "sos")
sos-server 0.17.0 (lib, bin "sos-server")
sos-search 0.17.1 (lib)
sos-audit 0.17.0 (lib)
sos-sync 0.17.0 (lib)
sos-protocol 0.17.0 (lib)
sos-server-storage 0.17.1 (lib)
sos-ipc 0.17.0 (lib)
sos-database 0.17.0 (lib)
sos-platform-authenticator 0.17.0 (lib)
sos-reducers 0.17.0 (lib)
sos-integration-tests 0.17.0 (lib, bin "db-compile-options", bin "make-v3-backup-fixtures", bin "test-extension-helper", bin "test-preferences-concurrency")
sos-backend 0.17.1 (lib)
sos-integrity 0.17.1 (lib)
sos-security-report 0.17.1 (lib)
sos-signer 0.17.0 (lib)
sos-changes 0.17.0 (lib)
sos-cli-helpers 0.1.1 (lib)
sos-debug-snapshot 0.17.0 (lib)
sos-external-files 0.17.0 (lib)
xclipboard 0.16.1 (lib)
sos-sdk 0.17.1 (lib)
sos-migrate 0.17.0 (lib)
sos-vfs 0.3.2 (lib)
Profile:release
Fresh units:0
Dirty units:827
Total units:827
Max concurrency:16 (jobs=16 ncpu=16)
Build start:2025-09-18T23:17:52.014566968Z
Total time:258.5s (4m 18.5s)
rustc:rustc 1.90.0 (1159e78c4 2025-09-14)
Host: x86_64-unknown-linux-gnu
Target: x86_64-unknown-linux-gnu
+ + + + + + + + + + + + + + + +
+ +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UnitTotalCodegenFeatures
1.sos v0.17.0 bin "sos"155.0s
2.sos-extension-service v0.17.0 bin "sos-extension-helper"131.9s
3.sos-server v0.17.0 bin "sos-server"120.5sacme, audit, default, listen, pairing, sos-audit
4.sos-integration-tests v0.17.0 bin "make-v3-backup-fixtures"120.2s
5.sos-integration-tests v0.17.0 bin "test-extension-helper"106.4s
6.libsqlite3-sys v0.30.1 build script (run)63.7sbundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
7.sos-integration-tests v0.17.0 bin "db-compile-options"40.3s
8.vcard4 v0.7.233.3s22.5s (68%)default, serde, zeroize
9.dbus v0.9.721.1s7.6s (36%)
10.sos-integration-tests v0.17.0 bin "test-preferences-concurrency"19.6s
11.utoipa-gen v5.3.119.4suuid
12.axum v0.8.419.0s5.3s (28%)default, form, http1, json, matched-path, original-uri, query, tokio, tower-log, tracing, ws
13.x509-parser v0.16.018.9s15.6s (82%)default
14.reqwest v0.12.1817.6s15.3s (87%)__rustls, __rustls-ring, __tls, json, rustls-tls, rustls-tls-webpki-roots, rustls-tls-webpki-roots-no-provider, stream
15.rustls v0.23.2716.2s9.7s (60%)ring, std, tls12
16.sos-net v0.17.315.9s7.3s (46%)archive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
17.tokio v1.45.114.4s8.4s (58%)bytes, default, fs, io-std, io-util, libc, macros, mio, net, process, rt, rt-multi-thread, signal-hook-registry, socket2, sync, time, tokio-macros
18.clap_builder v4.5.3914.3s11.1s (78%)color, env, error-context, help, std, suggestions, usage, wrap_help
19.nix v0.26.413.3s1.4s (11%)acct, aio, default, dir, env, event, feature, fs, hostname, inotify, ioctl, kmod, memoffset, mman, mount, mqueue, net, personality, pin-utils, poll, process, pthread, ptrace, quota, reboot, resource, sched, signal, socket, term, time, ucontext, uio, user, zerocopy
20.x11rb-protocol v0.13.113.3s6.0s (45%)std
21.sos-account v0.17.413.2s6.8s (52%)archive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
22.h2 v0.4.1012.3s4.9s (40%)
23.sos-server v0.17.011.8s9.1s (77%)acme, audit, default, listen, pairing, sos-audit
24.toml_edit v0.22.2611.5s8.0s (69%)display, parse, serde
25.sos-client-storage v0.17.111.3s6.5s (57%)archive, audit, files, full, search, sos-audit, sos-external-files, sos-search
26.sos v0.17.010.8s6.4s (60%)
27.regex-automata v0.4.910.6s7.2s (68%)alloc, dfa, dfa-build, dfa-onepass, dfa-search, hybrid, meta, nfa, nfa-backtrack, nfa-pikevm, nfa-thompson, perf, perf-inline, perf-literal, perf-literal-multisubstring, perf-literal-substring, std, syntax, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment, unicode-word-boundary
28.nix v0.28.09.5s2.4s (25%)fs, ioctl, poll, process, signal, term
29.tokio-rustls-acme v0.6.09.2s2.5s (27%)axum, default
30.rustix v0.38.448.8s2.5s (28%)alloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
31.sos-vault v0.17.18.7s3.0s (34%)
32.quick-xml v0.32.08.6s4.8s (56%)default
33.sos-server-storage v0.17.18.6s5.9s (69%)audit, files, full, sos-audit, sos-external-files
34.tracing-subscriber v0.3.198.5s5.4s (64%)alloc, ansi, default, env-filter, fmt, json, matchers, nu-ansi-term, once_cell, regex, registry, serde, serde_json, sharded-slab, smallvec, std, thread_local, tracing, tracing-log, tracing-serde
35.sos-web v0.17.08.1s3.6s (44%)archive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
36.sos-test-utils v0.17.07.2s5.9s (82%)
37.rcgen v0.13.26.9s5.8s (84%)crypto, default, pem, ring
38.sos-protocol v0.17.06.7s3.6s (53%)bs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
39.utoipa v5.3.16.7s2.6s (39%)default, macros, uuid
40.nix v0.30.16.6s1.3s (20%)fs, process, signal
41.time v0.3.416.2s3.3s (53%)alloc, default, formatting, local-offset, macros, parsing, serde, serde-human-readable, std, wasm-bindgen
42.time-tz v2.0.06.1s0.6s (10%)db, default, js-sys, system, thiserror, windows-sys
43.regex-syntax v0.6.296.0s2.9s (48%)default, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
44.sos-backend v0.17.15.7s4.6s (81%)archive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
45.sos-core v0.17.15.5s2.5s (45%)files
46.syn v2.0.1015.5s1.8s (32%)clone-impls, default, derive, extra-traits, fold, full, parsing, printing, proc-macro, visit, visit-mut
47.rustix v1.0.75.5s1.3s (24%)alloc, default, fs, std, termios
48.ring v0.17.145.3s3.0s (57%)alloc, default, dev_urandom_fallback, std
49.rustyline v14.0.05.2s2.2s (43%)custom-bindings, default, fd-lock, home, radix_trie, with-dirs, with-file-history
50.logos-codegen v0.14.45.1s3.1s (60%)
51.sos-filesystem v0.17.05.0s0.3s (5%)archive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
52.syn v1.0.1094.6s2.1s (46%)clone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
53.hyper-util v0.1.134.6s1.4s (30%)client, client-legacy, client-proxy, default, http1, http2, server, server-auto, service, tokio
54.image v0.25.64.6s3.1s (68%)png
55.notify v7.0.04.5s3.6s (80%)default, fsevent-sys, macos_fsevent, serde
56.ring v0.17.14 build script (run)4.5salloc, default, dev_urandom_fallback, std
57.serde_with v3.12.04.1s0.2s (5%)alloc, base64, default, macros, std
58.zxcvbn v3.1.04.1s2.8s (69%)builder, default, derive_builder, ser, serde
59.crossterm v0.28.14.0s2.1s (52%)bracketed-paste, default, events, windows
60.ouroboros_macro v0.18.53.9sstd
61.asn1-rs v0.6.23.8s1.7s (45%)datetime, default, std, time
62.regex-syntax v0.8.53.8s1.9s (50%)default, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
63.hyper v1.6.03.7s1.7s (45%)client, default, http1, http2, server
64.darling_core v0.12.43.7s1.8s (50%)strsim, suggestions
65.futures-util v0.3.313.6s0.3s (8%)alloc, async-await, async-await-macro, channel, default, futures-channel, futures-io, futures-macro, futures-sink, io, memchr, sink, slab, std
66.regex-automata v0.4.93.6s1.2s (34%)alloc, dfa-onepass, hybrid, meta, nfa-backtrack, nfa-pikevm, nfa-thompson, perf-inline, perf-literal, perf-literal-multisubstring, perf-literal-substring, std, syntax, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment, unicode-word-boundary
67.num-bigint v0.4.63.6s1.3s (36%)default, std
68.sos-changes v0.17.03.6s2.5s (71%)changes-consumer, changes-producer, tokio-util
69.aho-corasick v1.1.33.5s2.4s (67%)default, perf-literal, std
70.keychain_parser v0.1.23.5s2.1s (61%)
71.libm v0.2.153.5s1.0s (29%)arch, default
72.iri-string v0.7.83.4s0.9s (25%)alloc, default, std
73.serde_derive v1.0.2193.4sdefault
74.regex-automata v0.1.103.3s1.7s (51%)default, regex-syntax, std
75.tungstenite v0.26.23.3s1.9s (57%)__rustls-tls, data-encoding, handshake, http, httparse, rustls, rustls-pki-types, sha1
76.sos-migrate v0.17.03.1s2.0s (64%)authenticator, export, full, import, keychain-access
77.rustls-webpki v0.103.33.1s2.3s (73%)alloc, ring, std
78.kdam v0.6.23.0s2.3s (77%)derive, rich, spinner
79.serde_json_path v0.7.23.0s2.1s (69%)default, functions, regex
80.serde_json v1.0.1403.0s1.3s (45%)default, raw_value, std
81.axum-core v0.5.22.9s0.5s (17%)tracing
82.serde v1.0.2192.9s0.1s (5%)alloc, default, derive, serde_derive, std
83.clap_derive v4.5.322.8sdefault
84.dbus-secret-service v4.0.32.8s2.1s (73%)
85.fancy-regex v0.13.02.8s1.8s (63%)default, perf, std, unicode
86.i18n-embed v0.15.42.8s2.2s (78%)arc-swap, default, fluent, fluent-syntax, fluent-system, i18n-embed-impl, parking_lot, rust-embed
87.plist v1.7.12.8s0.6s (21%)default, serde
88.rustix v1.0.72.8s0.5s (20%)alloc, default, fs, std
89.x11rb v0.13.12.7s0.9s (33%)
90.serde v1.0.2192.7s0.1s (4%)default, derive, serde_derive, std
91.itertools v0.13.02.7s0.2s (6%)default, use_alloc, use_std
92.anticipate-runner v0.5.12.7s1.7s (63%)
93.darling_core v0.20.112.6s1.2s (46%)strsim, suggestions
94.sos-artifact v0.8.92.6s0.4s (17%)
95.headers v0.4.02.6s1.1s (44%)
96.prost-types v0.13.52.6s0.5s (19%)
97.der v0.7.102.5s1.3s (51%)alloc, oid, std, zeroize
98.regex-syntax v0.8.52.5s0.7s (29%)default, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
99.age v0.11.12.4s1.4s (57%)async, default, futures, memchr
100.prost-derive v0.13.52.4s
101.enum-iterator v2.1.02.4s0.1s (2%)
102.chrono v0.4.412.4s1.1s (48%)alloc, android-tzdata, clock, iana-time-zone, js-sys, now, std, wasm-bindgen, wasmbind, winapi, windows-link
103.icu_properties v2.0.12.4s0.4s (18%)compiled_data
104.sos-integrity v0.17.12.3s1.8s (78%)files, full
105.tower-http v0.6.42.3s0.9s (40%)cors, default, follow-redirect, futures-util, iri-string, tower, trace, tracing
106.k256 v0.13.42.3s1.6s (69%)alloc, arithmetic, default, digest, ecdsa, ecdsa-core, once_cell, pkcs8, precomputed-tables, schnorr, sha2, sha256, signature, std
107.notify-types v1.0.12.2s0.4s (19%)serde
108.idna v1.0.32.2s1.8s (79%)alloc, compiled_data, std
109.petgraph v0.7.12.2s0.2s (8%)
110.data-encoding v2.9.02.2s1.8s (82%)alloc, default, std
111.time v0.3.412.1s0.7s (33%)alloc, default, formatting, parsing, std
112.winnow v0.7.102.1s0.3s (16%)alloc, default, std
113.toml v0.5.112.1s0.8s (38%)default
114.icu_properties v2.0.12.1s0.8s (39%)compiled_data
115.url v2.5.42.1s1.0s (48%)default, serde, std
116.axum-server v0.7.22.1s0.6s (31%)arc-swap, default, rustls, rustls-pemfile, rustls-pki-types, tls-rustls-no-provider, tokio-rustls
117.crypto-bigint v0.5.52.0s0.7s (34%)generic-array, rand_core, zeroize
118.snow v0.9.62.0s1.2s (62%)aes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
119.arboard v3.5.02.0s1.5s (76%)
120.interprocess v2.2.32.0s0.6s (30%)async, default, futures-core, tokio
121.prost-build v0.13.51.9s1.0s (52%)default, format
122.nom v7.1.31.9s0.1s (7%)alloc, default, std
123.serde_json_path_core v0.2.21.9s1.2s (61%)default, functions
124.proc-macro2 v1.0.951.9s1.3s (67%)default, proc-macro
125.textwrap v0.16.21.8s1.2s (64%)default, smawk, terminal_size, unicode-linebreak, unicode-width
126.sos-database-upgrader v0.17.11.8s0.2s (10%)archive, full
127.libc v0.2.1721.8s0.2s (9%)default, extra_traits, std
128.csv-async v1.3.11.8s0.5s (27%)default, itoa, ryu, serde, tokio, tokio-stream, tokio1, with_serde
129.keyring v3.6.21.8s1.3s (73%)apple-native, sync-secret-service, windows-native
130.zerocopy v0.8.251.7s0.1s (4%)simd
131.curve25519-dalek v4.1.31.7s0.6s (37%)alloc, default, digest, precomputed-tables, zeroize
132.logos-codegen v0.15.01.7s0.8s (47%)
133.der-parser v9.0.01.7s0.7s (40%)bigint, default, num-bigint, std
134.aho-corasick v1.1.31.7s0.8s (46%)perf-literal, std
135.async_zip v0.0.171.7s0.6s (35%)async-compression, deflate, tokio, tokio-util
136.radix_trie v0.2.11.7s0.5s (27%)
137.itertools v0.14.01.7s0.1s (3%)default, use_alloc, use_std
138.deranged v0.4.01.6s0.1s (4%)alloc, powerfmt, serde, std
139.toml v0.8.221.6s0.9s (56%)default, display, parse
140.sos-ipc v0.17.01.6s0.5s (28%)async-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
141.time-macros v0.2.221.6sformatting, parsing, serde
142.png v0.17.161.6s0.8s (47%)
143.num-rational v0.4.21.6s0.9s (59%)num-bigint, num-bigint-std, std
144.sos-login v0.17.21.6s1.0s (63%)files, full
145.prettyplease v0.2.331.6s0.6s (40%)
146.sos-database v0.17.01.5s0.7s (43%)archive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
147.i18n-embed v0.15.41.5s0.9s (56%)arc-swap, default, filesystem-assets, fluent, fluent-syntax, fluent-system, i18n-embed-impl, parking_lot, rust-embed, walkdir
148.http v1.3.11.5s0.6s (43%)default, std
149.sql_query_builder v2.4.21.5s1.0s (69%)sqlite
150.i18n-config v0.4.71.5s0.9s (61%)
151.icu_locale_core v2.0.01.5s0.7s (46%)zerovec
152.tracing-attributes v0.1.281.5s
153.enum-iterator-derive v1.4.01.5s
154.time-tz v2.0.0 build script1.5sdb, default, js-sys, system, thiserror, windows-sys
155.sos-search v0.17.11.4s0.9s (65%)
156.yasna v0.5.21.4s0.6s (44%)default, std, time
157.sos-logs v0.17.01.4s1.0s (71%)
158.axum-extra v0.10.11.4s0.2s (17%)default, tracing, typed-header
159.i18n-embed-fl v0.9.41.4s
160.tokio-util v0.7.151.4s0.4s (29%)codec, compat, default, futures-io, io
161.uriparse v0.6.41.4s0.8s (54%)default
162.anyhow v1.0.981.4s0.8s (61%)default, std
163.thiserror-impl v2.0.121.4s
164.anticipate v0.10.01.3s0.9s (69%)
165.zerofrom-derive v0.1.61.3s
166.time-tz v2.0.0 build script (run)1.3sdb, default, js-sys, system, thiserror, windows-sys
167.cc v1.2.251.3s0.7s (50%)
168.derive_builder_core v0.10.21.3s0.6s (46%)
169.zerovec v0.11.21.3s0.0s (4%)alloc, derive, yoke
170.thiserror-impl v1.0.691.3s
171.indexmap v2.9.01.3s0.0s (3%)default, serde, std
172.rand_chacha v0.9.01.3s1.0s (79%)std
173.sos-remote-sync v0.17.01.3s0.1s (5%)files, full
174.sharded-slab v0.1.71.2s0.1s (8%)
175.hashbrown v0.15.31.2s0.0s (3%)
176.signal-hook v0.3.181.2s0.7s (58%)channel, default, iterator
177.sos-sync v0.17.01.2s0.3s (22%)files, full
178.basic-toml v0.1.101.1s0.4s (37%)
179.linux-raw-sys v0.4.151.1s0.0s (4%)elf, errno, general, if_ether, ioctl, net, netlink, no_std, system, xdp
180.unicode-linebreak v0.1.51.1s0.1s (13%)
181.derive_builder_core v0.20.21.1s0.6s (54%)lib_has_std
182.tracing-appender v0.2.31.1s0.8s (70%)
183.url v2.5.41.1s0.4s (38%)default, std
184.rand v0.9.11.1s0.2s (16%)alloc, default, os_rng, small_rng, std, std_rng, thread_rng
185.semver v1.0.261.1s0.5s (45%)default, serde, std
186.age-core v0.11.01.1s0.7s (65%)
187.zerovec-derive v0.11.11.1s
188.serde_with_macros v3.12.01.1s
189.fluent-bundle v0.15.31.1s0.7s (63%)default
190.icu_locale_core v2.0.01.0s0.3s (31%)zerovec
191.idna v1.0.31.0s0.6s (54%)alloc, compiled_data, std
192.inotify v0.10.21.0s0.4s (39%)
193.binary-stream v10.0.01.0s0.0s (2%)async, default, tokio
194.pin-project-internal v1.1.101.0s
195.fluent-bundle v0.15.31.0s0.4s (42%)default
196.indexmap v2.9.01.0s0.0s (3%)default, std
197.totp-rs v5.7.01.0s0.5s (47%)default, otpauth, qr, serde, serde_support, url, urlencoding, zeroize
198.miniz_oxide v0.8.81.0s0.5s (55%)default, simd, simd-adler32, with-alloc
199.memchr v2.7.41.0s0.4s (45%)alloc, default, std
200.rustyline-derive v0.11.10.9s
201.zerovec v0.11.20.9s0.0s (4%)alloc, derive, yoke
202.bytes v1.10.10.9s0.2s (18%)
203.asn1-rs-derive v0.5.10.9s
204.xml-rs v0.8.260.9s0.4s (39%)
205.ptyprocess v0.4.10.9s0.5s (54%)
206.icu_normalizer v2.0.00.9s0.5s (55%)compiled_data
207.futures-lite v2.6.00.9s0.1s (7%)alloc, fastrand, futures-io, parking, std
208.nix v0.30.1 build script0.9sfs, process, signal
209.sos-protocol v0.17.0 build script0.9sbs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
210.num-complex v0.4.60.9s0.1s (8%)std
211.yoke-derive v0.8.00.9s
212.doctest-file v1.0.00.9s
213.yansi v1.0.10.8s0.2s (19%)alloc, default, std
214.tempfile v3.20.00.8s0.5s (58%)default, getrandom
215.async-trait v0.1.880.8s
216.diff v0.1.130.8s0.6s (70%)
217.num-traits v0.2.190.8s0.1s (13%)default, i128, std
218.uuid v1.17.00.8s0.3s (41%)default, rng, serde, std, v4
219.rand_chacha v0.3.10.8s0.6s (79%)std
220.bytes v1.10.10.8s0.2s (19%)default, std
221.sec1 v0.7.30.8s0.4s (53%)alloc, default, der, point, std, subtle, zeroize
222.ecdsa v0.16.90.8s0.1s (9%)alloc, arithmetic, der, digest, hazmat, pkcs8, rfc6979, signing, spki, std, verifying
223.probability v0.20.30.8s0.3s (32%)
224.ipnet v2.11.00.8s0.4s (55%)default, std
225.aes v0.8.40.8s0.2s (32%)
226.oid-registry v0.7.10.8s0.4s (54%)crypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
227.intl_pluralrules v7.0.20.8s0.4s (48%)
228.refinery-core v0.8.160.8s0.2s (32%)default
229.matchit v0.7.30.8s0.2s (33%)default
230.kdam_derive v0.1.00.7s
231.urn v0.7.00.7s0.5s (61%)alloc, default, serde, std
232.chbs v0.1.10.7s0.4s (57%)
233.elliptic-curve v0.13.80.7s0.0s (6%)alloc, arithmetic, digest, ff, group, hazmat, pkcs8, sec1, std
234.pem v3.0.50.7s0.4s (53%)default, serde, std
235.parse-zoneinfo v0.3.10.7s0.4s (51%)
236.rusqlite v0.32.10.7s0.3s (48%)backup, bundled, modern_sqlite
237.prost v0.13.50.7s0.1s (16%)default, derive, std
238.rand v0.8.50.7s0.1s (11%)alloc, default, getrandom, libc, rand_chacha, std, std_rng
239.yansi v1.0.10.7s0.1s (13%)alloc, default, std
240.fs-err v3.1.00.7s0.2s (29%)tokio
241.rustversion v1.0.210.7s
242.rustls-pki-types v1.12.00.7s0.3s (45%)alloc, default, std
243.hashbrown v0.14.50.7s0.0s (4%)ahash, allocator-api2, default, inline-more
244.tempfile v3.20.00.7s0.2s (33%)default, getrandom
245.tower v0.5.20.7s0.0s (5%)__common, futures-core, futures-util, log, make, pin-project-lite, sync_wrapper, timeout, tokio, tracing, util
246.futures-macro v0.3.310.7s
247.tokio-stream v0.1.170.7s0.1s (10%)default, time
248.sha2 v0.10.90.6s0.4s (54%)default, std
249.pretty_assertions v1.4.10.6s0.4s (58%)default, std
250.crossbeam-channel v0.5.150.6s0.2s (28%)default, std
251.serde_json_path_macros_internal v0.1.20.6s
252.colored v2.2.00.6s0.3s (55%)
253.strsim v0.11.10.6s0.4s (64%)
254.vcpkg v0.2.150.6s0.4s (64%)
255.sos-audit v0.17.00.6s0.1s (23%)
256.num-integer v0.1.460.6s0.2s (28%)i128, std
257.nix v0.28.0 build script0.6sfs, ioctl, poll, process, signal, term
258.refinery-core v0.8.160.6s0.4s (60%)default, rusqlite, serde, toml
259.generic-array v0.14.70.6s0.0s (4%)more_lengths
260.proc-macro2-diagnostics v0.10.10.6s0.3s (48%)colors, default, yansi
261.intl_pluralrules v7.0.20.6s0.2s (37%)
262.sos-archive v0.17.00.6s0.3s (58%)
263.proc-macro2 v1.0.950.6s0.2s (35%)default, proc-macro
264.sos-password v0.17.00.6s0.3s (53%)
265.serde_path_to_error v0.1.170.6s0.1s (14%)
266.anstream v0.6.180.6s0.2s (39%)auto, default, wincon
267.terminal-banner v0.4.10.6s0.3s (58%)color, colored
268.displaydoc v0.2.50.6sdefault, std
269.regex v1.11.10.6s0.2s (44%)default, perf, perf-backtrack, perf-cache, perf-dfa, perf-inline, perf-literal, perf-onepass, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
270.async-sqlite v0.4.00.6s0.4s (78%)backup, bundled, default
271.tracing-core v0.1.330.6s0.3s (44%)default, once_cell, std
272.sos-signer v0.17.00.6s0.3s (46%)
273.nu-ansi-term v0.46.00.6s0.3s (50%)
274.icu_normalizer v2.0.00.6s0.2s (40%)compiled_data
275.memchr v2.7.40.5s0.2s (29%)alloc, std
276.tokio-macros v2.5.00.5s
277.matchit v0.8.40.5s0.2s (38%)default
278.unicode-width v0.2.00.5s0.1s (22%)cjk, default
279.csv-core v0.1.120.5s0.3s (54%)default
280.rand v0.8.50.5s0.0s (4%)small_rng
281.linux-raw-sys v0.9.40.5s0.0s (5%)elf, errno, general, ioctl, no_std
282.typenum v1.18.00.5s0.0s (3%)
283.rust-embed-impl v8.7.20.5s
284.refinery-macros v0.8.160.5s
285.generic-array v0.14.70.5s0.0s (3%)more_lengths, zeroize
286.icu_collections v2.0.00.5s0.2s (43%)
287.qrcodegen v1.8.00.5s0.4s (70%)
288.hashbrown v0.15.30.5s0.0s (5%)
289.logos-derive v0.14.40.5s
290.icu_collections v2.0.00.5s0.1s (27%)
291.argon2 v0.5.30.5s0.2s (44%)alloc, default, password-hash, rand, std
292.crossbeam-utils v0.8.210.5s0.1s (20%)std
293.pkcs8 v0.10.20.5s0.3s (67%)alloc, std
294.deranged v0.4.00.5s0.0s (3%)alloc, powerfmt, std
295.bitflags v2.9.10.5s0.3s (60%)serde, std
296.synstructure v0.13.20.5s0.2s (47%)default, proc-macro
297.serde-xml-rs v0.5.10.5s0.0s (7%)
298.mio v1.0.40.5s0.2s (49%)default, log, net, os-ext, os-poll
299.prost v0.13.50.5s0.0s (7%)derive, prost-derive
300.libc v0.2.1720.5s0.0s (6%)default, std
301.uuid v1.17.00.5s0.1s (16%)default, serde, std
302.sos-preferences v0.17.00.5s0.1s (28%)
303.poly1305 v0.8.00.5s0.3s (51%)
304.pkg-config v0.3.320.5s0.2s (50%)
305.semver v1.0.26 build script0.5sdefault, serde, std
306.password-hash v0.5.00.5s0.2s (45%)alloc, default, rand_core, std
307.typenum v1.18.00.5s0.0s (4%)
308.zeroize_derive v1.4.20.5s
309.libm v0.2.15 build script0.5sarch, default
310.parking_lot v0.12.40.5s0.3s (67%)default
311.anstyle v1.0.100.5s0.1s (19%)default, std
312.socket2 v0.5.100.5s0.2s (51%)all
313.is-docker v0.2.00.5s0.4s (75%)
314.sos-reducers v0.17.00.5s0.0s (9%)files
315.regex v1.11.10.5s0.1s (26%)default, perf, perf-backtrack, perf-cache, perf-dfa, perf-inline, perf-literal, perf-onepass, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
316.unicode-width v0.1.140.5s0.1s (14%)cjk, default
317.hyper-rustls v0.27.60.5s0.2s (45%)http1, ring, tls12, webpki-roots, webpki-tokio
318.curve25519-dalek-derive v0.1.10.5s
319.heck v0.4.10.5s0.2s (50%)default
320.sos-system-messages v0.17.00.5s0.0s (8%)
321.fdeflate v0.3.70.5s0.2s (48%)
322.mime_guess v2.0.50.4s0.1s (33%)default, rev-mappings
323.linux-raw-sys v0.9.40.4s0.0s (5%)elf, errno, general, ioctl, no_std
324.clap_lex v0.7.40.4s0.3s (63%)
325.blake2 v0.10.60.4s0.2s (53%)default, std
326.tokio-tungstenite v0.26.20.4s0.0s (6%)__rustls-tls, connect, default, handshake, rustls, rustls-pki-types, rustls-tls-webpki-roots, stream, tokio-rustls, webpki-roots
327.asn1-rs-impl v0.2.00.4s
328.special v0.10.30.4s0.1s (29%)
329.flate2 v1.1.10.4s0.1s (18%)any_impl, default, miniz_oxide, rust_backend
330.rs_merkle v1.5.00.4s0.2s (48%)default, std
331.is-wsl v0.4.00.4s0.3s (70%)
332.probly-search v2.0.10.4s
333.rustix v1.0.7 build script0.4salloc, default, fs, std
334.unicode-segmentation v1.12.00.4s0.1s (26%)
335.filetime v0.2.250.4s0.2s (40%)
336.nibble_vec v0.1.00.4s0.0s (8%)
337.async-recursion v1.1.10.4s
338.toml_datetime v0.6.90.4s0.1s (36%)serde
339.fixedbitset v0.5.70.4s0.1s (29%)
340.unic-langid-impl v0.9.60.4s0.1s (36%)serde
341.unic-langid-impl v0.9.60.4s0.2s (54%)
342.icu_provider v2.0.00.4s0.1s (29%)baked, zerotrie
343.darling_macro v0.12.40.4s
344.hex v0.4.30.4s0.0s (10%)alloc, default, serde, std
345.zerotrie v0.2.20.4s0.1s (24%)yoke, zerofrom
346.fluent-syntax v0.11.10.4s0.1s (19%)default
347.ring v0.17.14 build script0.4salloc, default, dev_urandom_fallback, std
348.i18n-embed-impl v0.8.40.4sdefault, find-crate, fluent-system, i18n-config, quote
349.sos-web v0.17.0 build script0.4sarchive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
350.typed-generational-arena v0.2.90.4s0.0s (6%)default, std
351.proc-macro2-diagnostics v0.10.1 build script0.4scolors, default, yansi
352.cookie-factory v0.3.30.4s0.0s (7%)async, default, futures, std
353.thread_local v1.1.80.3s0.2s (46%)
354.oid-registry v0.7.1 build script0.3scrypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
355.mime_guess v2.0.5 build script0.3sdefault, rev-mappings
356.bitflags v2.9.10.3s0.1s (22%)std
357.signal-hook-registry v1.4.50.3s0.2s (58%)
358.getrandom v0.3.3 build script0.3s
359.httparse v1.10.10.3s0.1s (36%)default, std
360.spki v0.7.30.3s0.1s (24%)alloc, std
361.fastrand v2.3.00.3s0.1s (16%)alloc, default, std
362.derive_builder_macro v0.20.20.3slib_has_std
363.tokio-rustls v0.26.20.3s0.0s (4%)ring, tls12
364.terminal-banner v0.4.1 build script0.3scolor, colored
365.http-body-util v0.1.30.3s0.0s (5%)default
366.walkdir v2.5.00.3s0.2s (61%)
367.fallible-iterator v0.3.00.3s0.0s (6%)alloc, default
368.base64 v0.21.70.3s0.1s (43%)alloc, default, std
369.base64 v0.22.10.3s0.1s (31%)alloc, default, std
370.sha1 v0.10.60.3s0.1s (40%)default, std
371.sos-integrity v0.17.1 build script0.3sfiles, full
372.utoipa-rapidoc v6.0.00.3s0.1s (36%)axum
373.sha2 v0.10.90.3s0.1s (24%)default, std
374.hashlink v0.9.10.3s0.0s (4%)
375.derive_builder_macro v0.10.20.3s
376.serde_urlencoded v0.7.10.3s0.0s (11%)
377.tracing-log v0.2.00.3s0.1s (44%)log-tracer, std
378.either v1.15.00.3s0.0s (8%)std, use_std
379.xclipboard v0.16.10.3s0.0s (14%)
380.sos-sdk v0.17.1 build script0.3sfiles, full
381.anyhow v1.0.980.3s0.1s (43%)default, std
382.rustversion v1.0.21 build script0.3s
383.logos v0.14.40.3s0.0s (10%)default, export_derive, logos-derive, std
384.sos-changes v0.17.0 build script0.3schanges-consumer, changes-producer, tokio-util
385.typeshare v1.0.40.3s0.0s (14%)default, wasmbind
386.ppv-lite86 v0.2.210.3s0.0s (5%)simd, std
387.ctrlc v3.4.70.3s0.1s (22%)
388.fluent-syntax v0.11.10.3s0.0s (9%)default
389.sos-security-report v0.17.10.3s0.0s (6%)
390.open v5.3.20.3s0.1s (32%)
391.qrcodegen-image v1.5.00.3s0.2s (76%)base64
392.sos-external-files v0.17.00.3s0.0s (7%)files, full
393.futures-executor v0.3.310.3s0.2s (59%)std
394.sha3 v0.10.80.3s0.1s (35%)default, std
395.allocator-api2 v0.2.210.3s0.0s (9%)alloc
396.bit-vec v0.6.30.3s0.0s (14%)std
397.rustls-pemfile v2.2.00.3s0.1s (35%)default, std
398.parking_lot v0.12.40.3s0.1s (40%)default
399.sos-server v0.17.0 build script0.3sacme, audit, default, listen, pairing, sos-audit
400.icu_provider v2.0.00.3s0.0s (13%)baked, zerotrie
401.zerocopy v0.8.25 build script0.3ssimd
402.autocfg v1.4.00.3s0.2s (59%)
403.sos-ipc v0.17.0 build script0.3sasync-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
404.byteorder-lite v0.1.00.3s0.0s (5%)default, std
405.shell-words v1.1.00.3s0.1s (41%)default, std
406.async-fd-lock v0.2.00.3s0.0s (6%)async, default
407.sos-platform-authenticator v0.17.0 build script0.3s
408.find-crate v0.6.30.3s0.1s (32%)
409.anstyle-parse v0.2.60.3s0.0s (18%)default, utf8
410.ed25519-dalek v2.1.10.3s0.1s (41%)alloc, default, fast, rand_core, std, zeroize
411.memoffset v0.7.1 build script0.3sdefault
412.writeable v0.6.10.2s0.0s (18%)
413.scrypt v0.11.00.2s0.1s (56%)
414.zerotrie v0.2.20.2s0.0s (14%)yoke, zerofrom
415.signal-hook v0.3.18 build script0.2schannel, default, iterator
416.sos-database-upgrader v0.17.1 build script0.2sarchive, full
417.once_cell v1.21.30.2s0.0s (12%)alloc, default, race, std
418.async-compression v0.4.230.2s0.0s (7%)deflate, flate2, futures-io
419.httpdate v1.0.30.2s0.1s (60%)
420.sos-debug-snapshot v0.17.00.2s0.1s (25%)
421.simd-adler32 v0.3.70.2s0.1s (53%)const-generics, default, std
422.intl-memoizer v0.5.30.2s0.1s (29%)
423.semver v1.0.260.2s0.1s (35%)default, std
424.arc-swap v1.7.10.2s0.0s (13%)
425.rusticata-macros v4.1.00.2s0.1s (43%)
426.parking_lot_core v0.9.110.2s0.1s (30%)
427.rustc_version v0.4.10.2s0.1s (45%)
428.iana-time-zone v0.1.630.2s0.2s (67%)fallback
429.getrandom v0.3.3 build script0.2sstd
430.tracing v0.1.410.2s0.1s (33%)attributes, default, log, std, tracing-attributes
431.walkdir v2.5.00.2s0.1s (47%)
432.sos-platform-authenticator v0.17.00.2s0.1s (31%)
433.base64ct v1.7.30.2s0.0s (16%)alloc, std
434.quote v1.0.400.2s0.1s (33%)default, proc-macro
435.strsim v0.10.00.2s0.1s (48%)
436.bech32 v0.9.10.2s0.1s (37%)default, std
437.strsim v0.11.10.2s0.1s (44%)
438.writeable v0.6.10.2s0.1s (38%)
439.minimal-lexical v0.2.10.2s0.0s (21%)std
440.getrandom v0.3.30.2s0.1s (31%)
441.tracing-serde v0.2.00.2s0.0s (8%)
442.fluent-langneg v0.13.00.2s0.1s (31%)default
443.proc-macro-error-attr2 v2.0.00.2s
444.instant v0.1.130.2s0.0s (17%)
445.libc v0.2.172 build script0.2sdefault, std
446.bytemuck v1.23.00.2s0.0s (10%)extern_crate_alloc
447.digest v0.10.70.2s0.0s (7%)alloc, block-buffer, const-oid, core-api, default, mac, oid, std, subtle
448.sos-unit-tests v0.17.0 build script0.2sdefault, files, listen
449.once_cell v1.21.30.2s0.0s (20%)alloc, default, race, std
450.arc-swap v1.7.10.2s0.0s (13%)
451.type-map v0.5.10.2s0.1s (59%)
452.smawk v0.3.20.2s0.0s (9%)
453.mime v0.3.170.2s0.1s (47%)
454.bit-set v0.5.30.2s0.0s (12%)std
455.version_check v0.9.50.2s0.1s (54%)
456.proc-macro-error2 v2.0.10.2s0.1s (38%)default, syn-error
457.litemap v0.8.00.2s0.0s (8%)alloc
458.rand_core v0.6.40.2s0.0s (24%)alloc, getrandom, std
459.httparse v1.10.1 build script0.2sdefault, std
460.comma v1.0.00.2s0.1s (48%)
461.anyhow v1.0.98 build script0.2sdefault, std
462.darling_macro v0.20.110.2s
463.sos-cli-helpers v0.1.10.2s0.0s (26%)
464.rust-embed-utils v8.7.20.2s0.1s (54%)
465.typeshare-annotation v1.0.40.2s
466.etcetera v0.8.00.2s0.1s (46%)
467.intl-memoizer v0.5.30.2s0.1s (61%)
468.libc v0.2.172 build script0.2sdefault, extra_traits, std
469.typenum v1.18.0 build script0.2s
470.cipher v0.4.40.2s0.0s (5%)zeroize
471.cfg_eval v0.1.20.2sdefault
472.logos-derive v0.15.00.2s
473.smallvec v1.15.00.2s0.0s (6%)const_generics, const_new
474.rustix v1.0.7 build script0.2salloc, default, fs, std, termios
475.endian-type v0.1.20.2s0.0s (13%)
476.libsqlite3-sys v0.30.1 build script0.2sbundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
477.urlencoding v2.1.30.2s0.1s (50%)
478.inotify-sys v0.1.50.2s0.0s (17%)
479.yoke v0.8.00.2s0.0s (8%)alloc, derive, zerofrom
480.sos-migrate v0.17.0 build script0.2sauthenticator, export, full, import, keychain-access
481.chacha20 v0.9.10.2s0.0s (14%)zeroize
482.rustix v0.38.44 build script0.2salloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
483.aliasable v0.1.30.2s0.0s (25%)alloc, default
484.getrandom v0.2.160.2s0.1s (31%)std
485.sos-extension-service v0.17.00.2s0.0s (8%)
486.multimap v0.10.10.2s0.0s (6%)
487.ed25519 v2.2.30.2s0.1s (42%)alloc, std
488.libdbus-sys v0.2.5 build script0.2sdefault, pkg-config
489.sos-login v0.17.2 build script0.2sfiles, full
490.fastrand v2.3.00.2s0.0s (19%)alloc, default, std
491.polyval v0.6.20.2s0.1s (37%)
492.fd-lock v4.0.40.2s0.0s (10%)
493.signal-hook-mio v0.2.40.2s0.1s (34%)mio-1_0, support-v1_0
494.ctr v0.9.20.2s0.0s (6%)
495.fluent-langneg v0.13.00.2s0.1s (49%)default
496.syn v1.0.109 build script0.2sclone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
497.utf-8 v0.7.60.2s0.0s (28%)
498.balloon-hash v0.4.00.2s0.0s (29%)alloc, default, password-hash, rand, std
499.keccak v0.1.50.2s0.1s (39%)
500.parking_lot_core v0.9.110.2s0.0s (21%)
501.sos-net v0.17.3 build script0.2sarchive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
502.litemap v0.8.00.2s0.0s (10%)alloc
503.zeroize v1.8.10.2s0.0s (16%)alloc, default, derive, zeroize_derive
504.yoke v0.8.00.2s0.0s (8%)alloc, derive, zerofrom
505.heck v0.5.00.2s0.1s (51%)
506.prettyplease v0.2.33 build script0.2s
507.thiserror v2.0.12 build script0.2sdefault, std
508.type-map v0.5.10.2s0.0s (32%)
509.sos-account v0.17.4 build script0.2sarchive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
510.lock_api v0.4.130.2s0.0s (7%)atomic_usize, default
511.futures-channel v0.3.310.2s0.0s (10%)alloc, default, futures-sink, sink, std
512.tinystr v0.8.10.2s0.0s (13%)alloc, default, zerovec
513.rand_core v0.9.30.2s0.0s (26%)os_rng, std
514.sos-password v0.17.0 build script0.2s
515.proc-macro2 v1.0.95 build script0.2sdefault, proc-macro
516.num_threads v0.1.70.2s0.1s (70%)
517.ryu v1.0.200.1s0.1s (43%)
518.crossbeam-utils v0.8.21 build script0.1sstd
519.sos-remote-sync v0.17.0 build script0.1sfiles, full
520.sos-client-storage v0.17.1 build script0.1sarchive, audit, files, full, search, sos-audit, sos-external-files, sos-search
521.sos-search v0.17.1 build script0.1s
522.cfg_aliases v0.2.10.1s0.0s (15%)
523.protoc-bin-vendored v3.1.00.1s0.0s (18%)
524.either v1.15.00.1s0.0s (8%)std, use_std
525.phf_shared v0.11.30.1s0.0s (17%)std
526.serde v1.0.219 build script0.1sdefault, derive, serde_derive, std
527.snow v0.9.6 build script0.1saes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
528.sos-sync v0.17.0 build script0.1sfiles, full
529.tinystr v0.8.10.1s0.0s (11%)alloc, default, zerovec
530.toml_write v0.1.10.1s0.0s (22%)alloc, default, std
531.log v0.4.270.1s0.0s (32%)std
532.powerfmt v0.2.00.1s0.0s (23%)
533.phf_generator v0.11.30.1s0.1s (39%)
534.lock_api v0.4.130.1s0.0s (5%)atomic_usize, default
535.thiserror v1.0.69 build script0.1s
536.smallvec v1.15.00.1s0.0s (10%)const_generics
537.secrecy v0.10.30.1s0.0s (24%)serde
538.bs58 v0.4.00.1s0.0s (29%)alloc, default, std
539.unicase v2.8.10.1s0.0s (31%)
540.rev_buf_reader v0.3.00.1s0.0s (12%)default
541.powerfmt v0.2.00.1s0.0s (30%)
542.const-oid v0.9.60.1s0.1s (47%)
543.anyhow v1.0.98 build script (run)0.1sdefault, std
544.getrandom v0.3.30.1s0.0s (32%)std
545.shlex v1.3.00.1s0.0s (29%)default, std
546.digest v0.10.70.1s0.0s (11%)alloc, block-buffer, core-api, default, std
547.sos-logs v0.17.0 build script0.1s
548.siphasher v1.0.10.1s0.0s (15%)default, std
549.unicase v2.8.10.1s0.0s (19%)
550.num-iter v0.1.450.1s0.0s (18%)i128, std
551.pathdiff v0.2.30.1s0.0s (10%)
552.xclipboard v0.16.1 build script0.1s
553.copy_dir v0.1.30.1s0.0s (14%)
554.percent-encoding v2.3.10.1s0.0s (27%)alloc, std
555.terminal_size v0.4.20.1s0.0s (34%)
556.fs-err v3.1.0 build script0.1stokio
557.tower-layer v0.3.30.1s0.0s (6%)
558.idna_adapter v1.2.10.1s0.0s (13%)compiled_data
559.serde_spanned v0.6.80.1s0.0s (18%)serde
560.sos-server-storage v0.17.1 build script0.1saudit, files, full, sos-audit, sos-external-files
561.futures-task v0.3.310.1s0.0s (15%)alloc, std
562.group v0.13.00.1s0.0s (23%)alloc
563.want v0.3.10.1s0.0s (32%)
564.matchers v0.1.00.1s0.0s (17%)
565.num-conv v0.1.00.1s0.0s (13%)
566.potential_utf v0.1.20.1s0.0s (18%)zerovec
567.form_urlencoded v1.2.10.1s0.0s (43%)alloc, default, std
568.ahash v0.8.120.1s0.0s (21%)
569.parking_lot_core v0.9.11 build script0.1s
570.form_urlencoded v1.2.10.1s0.0s (19%)alloc, std
571.ouroboros v0.18.50.1s0.0s (15%)default, std
572.serde v1.0.219 build script0.1salloc, default, derive, serde_derive, std
573.crc32fast v1.4.20.1s0.0s (29%)default, std
574.universal-hash v0.5.10.1s0.0s (12%)
575.siphasher v1.0.10.1s0.0s (16%)default, std
576.log v0.4.270.1s0.0s (17%)
577.percent-encoding v2.3.10.1s0.0s (32%)alloc, default, std
578.base16ct v0.2.00.1s0.0s (39%)alloc
579.fallible-streaming-iterator v0.1.90.1s0.0s (11%)
580.phf_shared v0.11.30.1s0.0s (15%)default, std
581.phf v0.11.30.1s0.0s (8%)default, std
582.idna_adapter v1.2.10.1s0.0s (22%)compiled_data
583.sos-vault v0.17.1 build script0.1s
584.slab v0.4.90.1s0.0s (14%)default, std
585.protoc-bin-vendored-linux-x86_64 v3.1.00.1s0.0s (36%)
586.unicode-ident v1.0.180.1s0.0s (20%)
587.curve25519-dalek v4.1.3 build script0.1salloc, default, digest, precomputed-tables, zeroize
588.icu_properties_data v2.0.10.1s0.0s (15%)
589.block-buffer v0.10.40.1s0.0s (11%)
590.base32 v0.5.10.1s0.0s (42%)
591.rust-embed-utils v8.7.20.1s0.0s (33%)
592.sos-external-files v0.17.0 build script0.1sfiles, full
593.icu_properties_data v2.0.10.1s0.0s (23%)
594.sos-protocol v0.17.0 build script (run)0.1sbs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
595.random v0.13.20.1s0.0s (13%)
596.sos-core v0.17.1 build script0.1sfiles
597.libdbus-sys v0.2.50.1s0.0s (12%)default, pkg-config
598.x25519-dalek v2.0.10.1s0.0s (16%)alloc, default, precomputed-tables, static_secrets, zeroize
599.futures-io v0.3.310.1s0.0s (29%)default, std
600.sos-reducers v0.17.0 build script0.1sfiles
601.human_bytes v0.4.30.1s0.0s (16%)default, si-units
602.sanitize-filename v0.6.00.1s0.0s (45%)
603.semver v1.0.26 build script0.1sdefault, std
604.memoffset v0.7.1 build script (run)0.1sdefault
605.logos v0.15.00.1s0.0s (6%)default, export_derive, logos-derive, std
606.salsa20 v0.10.20.1s0.0s (12%)
607.futures-core v0.3.310.1s0.0s (25%)alloc, default, std
608.utf8_iter v1.0.40.1s0.0s (19%)
609.sos-filesystem v0.17.0 build script0.1sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
610.cfg_aliases v0.1.10.1s0.0s (21%)
611.rustc-hash v2.1.10.1s0.0s (7%)default, std
612.parking v2.2.10.1s0.0s (41%)
613.memoffset v0.7.10.1s0.0s (15%)default
614.sos-system-messages v0.17.0 build script0.1s
615.darling v0.12.40.1s0.0s (21%)default, suggestions
616.slab v0.4.9 build script0.1sdefault, std
617.protoc-bin-vendored-linux-aarch_64 v3.1.00.1s0.0s (31%)
618.ahash v0.8.12 build script0.1s
619.hkdf v0.12.40.1s0.0s (17%)
620.logos-codegen v0.15.0 build script0.1s
621.inventory v0.3.200.1s0.0s (18%)
622.sos-database v0.17.0 build script0.1sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
623.anstyle-query v1.1.20.1s0.0s (24%)
624.lock_api v0.4.13 build script0.1satomic_usize, default
625.derive_builder v0.20.20.1s0.0s (21%)default, std
626.http-body v1.0.10.1s0.0s (19%)
627.aes-gcm v0.10.30.1s0.0s (6%)aes, alloc, default, getrandom, rand_core, std
628.protoc-bin-vendored-win32 v3.1.00.1s0.0s (30%)
629.sos-signer v0.17.0 build script0.1s
630.webpki-roots v1.0.00.1s0.0s (12%)
631.serde_json v1.0.140 build script0.1sdefault, raw_value, std
632.nonzero_ext v0.1.50.1s0.0s (28%)default, std
633.hmac v0.12.10.1s0.0s (12%)reset
634.generic-array v0.14.7 build script0.1smore_lengths
635.rand_core v0.6.40.1s0.0s (13%)
636.derive_builder v0.10.20.1s0.0s (21%)default, std
637.inout v0.1.40.1s0.0s (7%)
638.generic-array v0.14.7 build script0.1smore_lengths, zeroize
639.libsqlite3-sys v0.30.10.1s0.0s (15%)bundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
640.sos-sdk v0.17.10.1s0.0s (15%)files, full
641.binary-stream v10.0.0 build script0.1sasync, default, tokio
642.icu_normalizer_data v2.0.0 build script0.1s
643.sos-backend v0.17.1 build script0.1sarchive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
644.adler2 v2.0.00.1s0.0s (37%)
645.beef v0.5.20.1s0.0s (11%)default
646.sos-preferences v0.17.0 build script0.1s
647.same-file v1.0.60.1s0.0s (28%)
648.static_assertions v1.1.00.1s0.0s (21%)
649.protoc-bin-vendored-linux-ppcle_64 v3.1.00.1s0.0s (30%)
650.subtle v2.6.10.1s0.0s (14%)default, i128, std
651.utf8parse v0.2.20.1s0.0s (12%)default
652.signature v2.2.00.1s0.0s (24%)alloc, digest, rand_core, std
653.protoc-bin-vendored-macos-x86_64 v3.1.00.1s0.0s (32%)
654.home v0.5.110.1s0.0s (32%)
655.colorchoice v1.0.30.1s0.0s (13%)
656.zerofrom v0.1.60.1s0.0s (10%)alloc, derive
657.itoa v1.0.150.1s0.0s (11%)
658.phf_codegen v0.11.30.1s0.0s (11%)
659.icu_properties_data v2.0.1 build script0.1s
660.protoc-bin-vendored-linux-x86_32 v3.1.00.1s0.0s (35%)
661.num-conv v0.1.00.1s0.0s (10%)
662.num-traits v0.2.19 build script0.1sdefault, i128, std
663.num-traits v0.2.19 build script (run)0.1sdefault, i128, std
664.sos-sdk v0.17.1 build script (run)0.1sfiles, full
665.aead v0.5.20.1s0.0s (11%)alloc, getrandom, rand_core, std
666.utf8_iter v1.0.40.1s0.0s (19%)
667.protoc-bin-vendored-macos-aarch_64 v3.1.00.1s0.0s (35%)
668.headers-core v0.3.00.1s0.0s (28%)
669.ff v0.13.10.1s0.0s (7%)alloc
670.proc-macro2 v1.0.95 build script (run)0.1sdefault, proc-macro
671.chacha20poly1305 v0.10.10.1s0.0s (17%)alloc, default, getrandom, rand_core, std
672.rustls v0.23.27 build script0.1sring, std, tls12
673.potential_utf v0.1.20.1s0.0s (31%)zerovec
674.zerofrom v0.1.60.1s0.0s (8%)alloc, derive
675.itoa v1.0.150.1s0.0s (16%)
676.untrusted v0.9.00.1s0.0s (17%)
677.atomic-waker v1.1.20.1s0.0s (31%)
678.sos-web v0.17.0 build script (run)0.1sarchive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
679.crypto-common v0.1.60.1s0.0s (11%)getrandom, rand_core, std
680.clap v4.5.390.1s0.0s (17%)color, default, derive, env, error-context, help, std, suggestions, usage, wrap_help
681.block-buffer v0.10.40.1s0.0s (14%)
682.is_terminal_polyfill v1.70.10.1s0.0s (22%)default
683.same-file v1.0.60.1s0.0s (19%)
684.rfc6979 v0.4.00.1s0.0s (7%)
685.crypto-common v0.1.60.1s0.0s (16%)std
686.pbkdf2 v0.12.20.1s0.0s (20%)default, hmac
687.serde_json_path_macros v0.1.60.1s0.0s (17%)
688.rust-embed v8.7.20.1s0.0s (36%)
689.fs-err v3.1.0 build script (run)0.1stokio
690.time-core v0.1.40.1s0.0s (14%)
691.sync_wrapper v1.0.20.1s0.0s (13%)futures, futures-core
692.proc-macro2-diagnostics v0.10.1 build script (run)0.1scolors, default, yansi
693.fluent v0.16.10.1s0.0s (28%)
694.ident_case v1.0.10.1s0.0s (17%)
695.ghash v0.5.10.1s0.0s (16%)
696.thiserror v1.0.690.1s0.0s (22%)
697.sos-vfs v0.3.20.1s0.0s (14%)
698.time-core v0.1.40.1s0.0s (29%)
699.unic-langid v0.9.60.1s0.0s (26%)default, serde
700.overload v0.1.10.0s0.0s (23%)
701.sos-server v0.17.0 build script (run)0.0sacme, audit, default, listen, pairing, sos-audit
702.sos-integrity v0.17.1 build script (run)0.0sfiles, full
703.lazy_static v1.5.00.0s0.0s (14%)
704.thiserror v2.0.12 build script (run)0.0sdefault, std
705.terminal-banner v0.4.1 build script (run)0.0scolor, colored
706.proc-macro2 v1.0.95 build script (run)0.0sdefault, proc-macro
707.webpki-roots v0.26.110.0s0.0s (24%)
708.thiserror v1.0.69 build script (run)0.0s
709.io_tee v0.1.10.0s0.0s (17%)
710.slab v0.4.9 build script (run)0.0sdefault, std
711.rust-embed v8.7.20.0s0.0s (6%)
712.sos-ipc v0.17.0 build script (run)0.0sasync-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
713.rustc-hash v2.1.10.0s0.0s (20%)default, std
714.sos-platform-authenticator v0.17.0 build script (run)0.0s
715.futures-sink v0.3.310.0s0.0s (28%)alloc, default, std
716.rustc-hash v1.1.00.0s0.0s (9%)default, std
717.fluent v0.16.10.0s0.0s (24%)
718.rustix v1.0.7 build script (run)0.0salloc, default, fs, std
719.anyhow v1.0.98 build script (run)0.0sdefault, std
720.lock_api v0.4.13 build script (run)0.0satomic_usize, default
721.thiserror v2.0.120.0s0.0s (19%)default, std
722.lock_api v0.4.13 build script (run)0.0satomic_usize, default
723.thiserror v1.0.69 build script (run)0.0s
724.cfg-if v0.1.100.0s0.0s (26%)
725.equivalent v1.0.20.0s0.0s (16%)
726.sos-net v0.17.3 build script (run)0.0sarchive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
727.futures v0.3.310.0s0.0s (18%)alloc, async-await, default, executor, futures-executor, std
728.thiserror v1.0.690.0s0.0s (20%)
729.sos-changes v0.17.0 build script (run)0.0schanges-consumer, changes-producer, tokio-util
730.rustc-hash v1.1.00.0s0.0s (22%)default, std
731.num v0.4.30.0s0.0s (19%)default, num-bigint, std
732.constant_time_eq v0.3.10.0s0.0s (25%)
733.fnv v1.0.70.0s0.0s (0%)default, std
734.pin-project v1.1.100.0s0.0s (32%)
735.sos-unit-tests v0.17.00.0s0.0s (15%)default, files, listen
736.xclipboard v0.16.1 build script (run)0.0s
737.self_cell v1.2.00.0s0.0s (12%)
738.sos-integration-tests v0.17.00.0s0.0s (18%)
739.sos-password v0.17.0 build script (run)0.0s
740.icu_normalizer_data v2.0.00.0s0.0s (32%)
741.scopeguard v1.2.00.0s0.0s (0%)
742.fnv v1.0.70.0s0.0s (23%)default, std
743.stable_deref_trait v1.2.00.0s0.0s (23%)alloc
744.scopeguard v1.2.00.0s0.0s (12%)
745.tower-service v0.3.30.0s0.0s (24%)
746.icu_normalizer_data v2.0.00.0s0.0s (17%)
747.sos-migrate v0.17.0 build script (run)0.0sauthenticator, export, full, import, keychain-access
748.sos-command-line-tests v0.17.00.0s0.0s (16%)
749.equivalent v1.0.20.0s0.0s (19%)
750.self_cell v0.10.30.0s0.0s (26%)
751.sos-login v0.17.2 build script (run)0.0sfiles, full
752.sos-database-upgrader v0.17.1 build script (run)0.0sarchive, full
753.refinery v0.8.160.0s0.0s (18%)default, rusqlite, toml
754.try-lock v0.2.50.0s0.0s (18%)
755.self_cell v1.2.00.0s0.0s (18%)
756.unic-langid v0.9.60.0s0.0s (18%)default
757.semver v1.0.26 build script (run)0.0sdefault, serde, std
758.pin-project-lite v0.2.160.0s0.0s (14%)
759.sos-logs v0.17.0 build script (run)0.0s
760.rustix v1.0.7 build script (run)0.0salloc, default, fs, std, termios
761.darling v0.20.110.0s0.0s (26%)default, suggestions
762.sos-account v0.17.4 build script (run)0.0sarchive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
763.stable_deref_trait v1.2.00.0s0.0s (26%)alloc
764.self_cell v0.10.30.0s0.0s (29%)
765.lazy_static v1.5.00.0s0.0s (22%)
766.sos-remote-sync v0.17.0 build script (run)0.0sfiles, full
767.nix v0.30.1 build script (run)0.0sfs, process, signal
768.pin-utils v0.1.00.0s0.0s (31%)
769.rustix v0.38.44 build script (run)0.0salloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
770.sos-sync v0.17.0 build script (run)0.0sfiles, full
771.bitflags v1.3.20.0s0.0s (15%)default
772.snow v0.9.6 build script (run)0.0saes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
773.rustversion v1.0.21 build script (run)0.0s
774.sos-core v0.17.1 build script (run)0.0sfiles
775.libc v0.2.172 build script (run)0.0sdefault, extra_traits, std
776.cfg-if v1.0.00.0s0.0s (31%)
777.cpufeatures v0.2.170.0s0.0s (24%)
778.cpufeatures v0.2.170.0s0.0s (23%)
779.opaque-debug v0.3.10.0s0.0s (29%)
780.sos-unit-tests v0.17.0 build script (run)0.0sdefault, files, listen
781.curve25519-dalek v4.1.3 build script (run)0.0salloc, default, digest, precomputed-tables, zeroize
782.sos-client-storage v0.17.1 build script (run)0.0sarchive, audit, files, full, search, sos-audit, sos-external-files, sos-search
783.libdbus-sys v0.2.5 build script (run)0.0sdefault, pkg-config
784.libm v0.2.15 build script (run)0.0sarch, default
785.sos-search v0.17.1 build script (run)0.0s
786.typenum v1.18.0 build script (run)0.0s
787.oid-registry v0.7.1 build script (run)0.0scrypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
788.sos-vault v0.17.1 build script (run)0.0s
789.sos-server-storage v0.17.1 build script (run)0.0saudit, files, full, sos-audit, sos-external-files
790.sos-system-messages v0.17.0 build script (run)0.0s
791.sos-backend v0.17.1 build script (run)0.0sarchive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
792.mime_guess v2.0.5 build script (run)0.0sdefault, rev-mappings
793.binary-stream v10.0.0 build script (run)0.0sasync, default, tokio
794.sos-preferences v0.17.0 build script (run)0.0s
795.syn v1.0.109 build script (run)0.0sclone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
796.generic-array v0.14.7 build script (run)0.0smore_lengths, zeroize
797.generic-array v0.14.7 build script (run)0.0smore_lengths
798.serde v1.0.219 build script (run)0.0salloc, default, derive, serde_derive, std
799.semver v1.0.26 build script (run)0.0sdefault, std
800.zerocopy v0.8.25 build script (run)0.0ssimd
801.sos-signer v0.17.0 build script (run)0.0s
802.getrandom v0.3.3 build script (run)0.0sstd
803.typenum v1.18.0 build script (run)0.0s
804.sos-database v0.17.0 build script (run)0.0sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
805.prettyplease v0.2.33 build script (run)0.0s
806.nix v0.28.0 build script (run)0.0sfs, ioctl, poll, process, signal, term
807.serde v1.0.219 build script (run)0.0sdefault, derive, serde_derive, std
808.unicode-ident v1.0.180.0s0.0s (54%)
809.sos-filesystem v0.17.0 build script (run)0.0sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
810.libc v0.2.172 build script (run)0.0sdefault, std
811.sos-reducers v0.17.0 build script (run)0.0sfiles
812.getrandom v0.3.3 build script (run)0.0s
813.logos-codegen v0.15.0 build script (run)0.0s
814.httparse v1.10.1 build script (run)0.0sdefault, std
815.sos-external-files v0.17.0 build script (run)0.0sfiles, full
816.ahash v0.8.12 build script (run)0.0s
817.icu_normalizer_data v2.0.0 build script (run)0.0s
818.signal-hook v0.3.18 build script (run)0.0schannel, default, iterator
819.serde_json v1.0.140 build script (run)0.0sdefault, raw_value, std
820.crossbeam-utils v0.8.21 build script (run)0.0sstd
821.icu_normalizer_data v2.0.0 build script (run)0.0s
822.parking_lot_core v0.9.11 build script (run)0.0s
823.icu_properties_data v2.0.1 build script (run)0.0s
824.rustls v0.23.27 build script (run)0.0sring, std, tls12
825.icu_properties_data v2.0.1 build script (run)0.0s
826.parking_lot_core v0.9.11 build script (run)0.0s
827.cfg-if v1.0.00.0s0.0s (4%)
+ + + diff --git a/doc/rust-1.90-timings/cargo-1.90-lld-linker-feature.html b/doc/rust-1.90-timings/cargo-1.90-lld-linker-feature.html new file mode 100644 index 0000000000..9f69228a91 --- /dev/null +++ b/doc/rust-1.90-timings/cargo-1.90-lld-linker-feature.html @@ -0,0 +1,41048 @@ + + + + Cargo Build Timings — sos-preferences 0.17.0, sos 0.17.0, sos-command-line-tests 0.17.0, keychain_parser 0.1.2, sos-net 0.17.3, sos-artifact 0.8.9, xclipboard 0.16.1, sos-account 0.17.4, sos-database-upgrader 0.17.1, sos-test-utils 0.17.0, sos-server 0.17.0, sos-archive 0.17.0, sos-filesystem 0.17.0, sos-ipc 0.17.0, sos-security-report 0.17.1, sos-client-storage 0.17.1, sos-audit 0.17.0, sos-protocol 0.17.0, sos-external-files 0.17.0, sos-vault 0.17.1, sos-server-storage 0.17.1, sos-web 0.17.0, sos-changes 0.17.0, sos-backend 0.17.1, sos-extension-service 0.17.0, sos-search 0.17.1, sos-signer 0.17.0, sos-vfs 0.3.2, sos-platform-authenticator 0.17.0, sos-database 0.17.0, sos-reducers 0.17.0, sos-cli-helpers 0.1.1, sos-remote-sync 0.17.0, sos-password 0.17.0, sos-sdk 0.17.1, sos-sync 0.17.0, sos-system-messages 0.17.0, sos-logs 0.17.0, sos-core 0.17.1, sos-login 0.17.2, sos-migrate 0.17.0, sos-debug-snapshot 0.17.0, sos-integration-tests 0.17.0, sos-integrity 0.17.1, sos-unit-tests 0.17.0 + + + + + +

Cargo Build Timings

+See Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Targets:sos-preferences 0.17.0 (lib)
sos 0.17.0 (lib, bin "sos")
sos-command-line-tests 0.17.0 (lib)
keychain_parser 0.1.2 (lib)
sos-net 0.17.3 (lib)
sos-artifact 0.8.9 (lib)
xclipboard 0.16.1 (lib)
sos-account 0.17.4 (lib)
sos-database-upgrader 0.17.1 (lib)
sos-test-utils 0.17.0 (lib)
sos-server 0.17.0 (lib, bin "sos-server")
sos-archive 0.17.0 (lib)
sos-filesystem 0.17.0 (lib)
sos-ipc 0.17.0 (lib)
sos-security-report 0.17.1 (lib)
sos-client-storage 0.17.1 (lib)
sos-audit 0.17.0 (lib)
sos-protocol 0.17.0 (lib)
sos-external-files 0.17.0 (lib)
sos-vault 0.17.1 (lib)
sos-server-storage 0.17.1 (lib)
sos-web 0.17.0 (lib)
sos-changes 0.17.0 (lib)
sos-backend 0.17.1 (lib)
sos-extension-service 0.17.0 (lib, bin "sos-extension-helper")
sos-search 0.17.1 (lib)
sos-signer 0.17.0 (lib)
sos-vfs 0.3.2 (lib)
sos-platform-authenticator 0.17.0 (lib)
sos-database 0.17.0 (lib)
sos-reducers 0.17.0 (lib)
sos-cli-helpers 0.1.1 (lib)
sos-remote-sync 0.17.0 (lib)
sos-password 0.17.0 (lib)
sos-sdk 0.17.1 (lib)
sos-sync 0.17.0 (lib)
sos-system-messages 0.17.0 (lib)
sos-logs 0.17.0 (lib)
sos-core 0.17.1 (lib)
sos-login 0.17.2 (lib)
sos-migrate 0.17.0 (lib)
sos-debug-snapshot 0.17.0 (lib)
sos-integration-tests 0.17.0 (lib, bin "db-compile-options", bin "make-v3-backup-fixtures", bin "test-extension-helper", bin "test-preferences-concurrency")
sos-integrity 0.17.1 (lib)
sos-unit-tests 0.17.0 (lib)
Profile:release
Fresh units:0
Dirty units:827
Total units:827
Max concurrency:16 (jobs=16 ncpu=16)
Build start:2025-09-19T00:00:56.849610347Z
Total time:315.9s (5m 15.9s)
rustc:rustc 1.90.0 (1159e78c4 2025-09-14)
Host: x86_64-unknown-linux-gnu
Target: x86_64-unknown-linux-gnu
+ + + + + + + + + + + + + + + +
+ +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UnitTotalCodegenFeatures
1.sos v0.17.0 bin "sos"158.6s
2.sos-server v0.17.0 bin "sos-server"148.1sacme, audit, default, listen, pairing, sos-audit
3.sos-extension-service v0.17.0 bin "sos-extension-helper"141.0s
4.sos-integration-tests v0.17.0 bin "test-extension-helper"130.3s
5.sos-integration-tests v0.17.0 bin "make-v3-backup-fixtures"104.3s
6.libsqlite3-sys v0.30.1 build script (run)104.2sbundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
7.vcard4 v0.7.259.1s25.5s (43%)default, serde, zeroize
8.tokio v1.45.143.3s21.1s (49%)bytes, default, fs, io-std, io-util, libc, macros, mio, net, process, rt, rt-multi-thread, signal-hook-registry, socket2, sync, time, tokio-macros
9.sos-integration-tests v0.17.0 bin "db-compile-options"40.0s
10.rustls v0.23.2739.7s25.3s (64%)ring, std, tls12
11.sos-integration-tests v0.17.0 bin "test-preferences-concurrency"37.7s
12.regex-automata v0.4.933.2s27.1s (82%)alloc, dfa, dfa-build, dfa-onepass, dfa-search, hybrid, meta, nfa, nfa-backtrack, nfa-pikevm, nfa-thompson, perf, perf-inline, perf-literal, perf-literal-multisubstring, perf-literal-substring, std, syntax, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment, unicode-word-boundary
13.x11rb-protocol v0.13.128.6s13.6s (47%)std
14.h2 v0.4.1027.6s11.9s (43%)
15.sos-net v0.17.325.7s13.2s (51%)archive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
16.reqwest v0.12.1825.0s21.7s (87%)__rustls, __rustls-ring, __tls, json, rustls-tls, rustls-tls-webpki-roots, rustls-tls-webpki-roots-no-provider, stream
17.utoipa-gen v5.3.124.6suuid
18.clap_builder v4.5.3923.4s12.8s (55%)color, env, error-context, help, std, suggestions, usage, wrap_help
19.toml_edit v0.22.2619.1s11.8s (62%)display, parse, serde
20.axum v0.8.418.8s6.0s (32%)default, form, http1, json, matched-path, original-uri, query, tokio, tower-log, tracing, ws
21.sos v0.17.017.6s9.8s (56%)
22.syn v1.0.10916.3s7.5s (46%)clone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
23.time-tz v2.0.015.8s1.6s (10%)db, default, js-sys, system, thiserror, windows-sys
24.sos-account v0.17.415.5s8.8s (57%)archive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
25.dbus v0.9.715.3s9.8s (64%)
26.sos-server v0.17.013.5s10.8s (80%)acme, audit, default, listen, pairing, sos-audit
27.image v0.25.613.3s11.0s (83%)png
28.futures-util v0.3.3112.8s0.6s (5%)alloc, async-await, async-await-macro, channel, default, futures-channel, futures-io, futures-macro, futures-sink, io, memchr, sink, slab, std
29.sos-test-utils v0.17.012.6s10.4s (82%)
30.nix v0.26.412.6s1.5s (12%)acct, aio, default, dir, env, event, feature, fs, hostname, inotify, ioctl, kmod, memoffset, mman, mount, mqueue, net, personality, pin-utils, poll, process, pthread, ptrace, quota, reboot, resource, sched, signal, socket, term, time, ucontext, uio, user, zerocopy
31.sos-web v0.17.012.1s6.2s (51%)archive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
32.x509-parser v0.16.011.9s7.4s (62%)default
33.tracing-subscriber v0.3.1911.4s7.5s (66%)alloc, ansi, default, env-filter, fmt, json, matchers, nu-ansi-term, once_cell, regex, registry, serde, serde_json, sharded-slab, smallvec, std, thread_local, tracing, tracing-log, tracing-serde
34.rustix v0.38.4411.4s3.3s (29%)alloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
35.sos-client-storage v0.17.111.4s6.6s (58%)archive, audit, files, full, search, sos-audit, sos-external-files, sos-search
36.time v0.3.4111.3s6.9s (61%)alloc, default, formatting, local-offset, macros, parsing, serde, serde-human-readable, std, wasm-bindgen
37.regex-syntax v0.6.2911.2s7.1s (63%)default, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
38.ring v0.17.14 build script (run)10.9salloc, default, dev_urandom_fallback, std
39.sos-vault v0.17.110.4s2.9s (28%)
40.serde v1.0.21910.1s0.3s (3%)alloc, default, derive, serde_derive, std
41.hyper v1.6.09.8s2.6s (27%)client, default, http1, http2, server
42.ring v0.17.149.7s6.0s (62%)alloc, default, dev_urandom_fallback, std
43.regex-automata v0.1.109.6s5.4s (57%)default, regex-syntax, std
44.serde_with v3.12.09.2s0.4s (4%)alloc, base64, default, macros, std
45.sos-core v0.17.18.8s3.8s (43%)files
46.zxcvbn v3.1.08.7s4.9s (57%)builder, default, derive_builder, ser, serde
47.sos-server-storage v0.17.18.4s5.6s (67%)audit, files, full, sos-audit, sos-external-files
48.asn1-rs v0.6.28.3s4.4s (54%)datetime, default, std, time
49.rcgen v0.13.28.2s6.7s (82%)crypto, default, pem, ring
50.serde_derive v1.0.2198.1sdefault
51.num-bigint v0.4.68.0s2.1s (26%)default, std
52.clap_derive v4.5.327.9sdefault
53.rustls-webpki v0.103.37.7s6.4s (83%)alloc, ring, std
54.der v0.7.107.4s4.9s (66%)alloc, oid, std, zeroize
55.nix v0.28.07.1s1.4s (19%)fs, ioctl, poll, process, signal, term
56.darling_core v0.12.47.0s2.6s (37%)strsim, suggestions
57.sos-protocol v0.17.06.9s3.7s (54%)bs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
58.icu_properties v2.0.16.9s2.8s (41%)compiled_data
59.serde_json_path v0.7.26.8s3.0s (43%)default, functions, regex
60.rustix v1.0.76.7s0.8s (13%)alloc, default, fs, std
61.itertools v0.13.06.7s0.2s (3%)default, use_alloc, use_std
62.rustix v1.0.76.7s1.9s (29%)alloc, default, fs, std, termios
63.syn v2.0.1016.6s3.2s (48%)clone-impls, default, derive, extra-traits, fold, full, parsing, printing, proc-macro, visit, visit-mut
64.serde v1.0.2196.5s0.2s (3%)default, derive, serde_derive, std
65.sos-backend v0.17.16.5s5.0s (77%)archive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
66.age v0.11.16.4s2.6s (41%)async, default, futures, memchr
67.crypto-bigint v0.5.56.1s1.7s (28%)generic-array, rand_core, zeroize
68.tokio-rustls-acme v0.6.06.0s1.4s (24%)axum, default
69.hyper-util v0.1.136.0s1.8s (30%)client, client-legacy, client-proxy, default, http1, http2, server, server-auto, service, tokio
70.serde_with_macros v3.12.06.0s
71.tungstenite v0.26.25.9s4.4s (73%)__rustls-tls, data-encoding, handshake, http, httparse, rustls, rustls-pki-types, sha1
72.itertools v0.14.05.9s0.2s (3%)default, use_alloc, use_std
73.iri-string v0.7.85.8s2.4s (40%)alloc, default, std
74.regex-automata v0.4.95.7s2.3s (41%)alloc, dfa-onepass, hybrid, meta, nfa-backtrack, nfa-pikevm, nfa-thompson, perf-inline, perf-literal, perf-literal-multisubstring, perf-literal-substring, std, syntax, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment, unicode-word-boundary
75.libm v0.2.155.7s2.2s (39%)arch, default
76.regex-syntax v0.8.55.6s3.8s (68%)default, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
77.nix v0.30.15.5s1.7s (32%)fs, process, signal
78.serde_json v1.0.1405.5s3.0s (56%)default, raw_value, std
79.zerovec v0.11.25.4s0.1s (3%)alloc, derive, yoke
80.petgraph v0.7.15.4s0.4s (8%)
81.sos-filesystem v0.17.05.3s0.2s (5%)archive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
82.prost-types v0.13.55.2s1.0s (19%)
83.sql_query_builder v2.4.25.2s2.9s (57%)sqlite
84.icu_properties v2.0.15.1s0.8s (16%)compiled_data
85.i18n-embed v0.15.45.1s3.4s (67%)arc-swap, default, fluent, fluent-syntax, fluent-system, i18n-embed-impl, parking_lot, rust-embed
86.fancy-regex v0.13.05.1s3.0s (59%)default, perf, std, unicode
87.utoipa v5.3.15.0s2.1s (41%)default, macros, uuid
88.quick-xml v0.32.04.9s3.0s (61%)default
89.rustyline v14.0.04.9s2.1s (43%)custom-bindings, default, fd-lock, home, radix_trie, with-dirs, with-file-history
90.axum-core v0.5.24.8s0.8s (17%)tracing
91.snow v0.9.64.7s3.4s (72%)aes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
92.ouroboros_macro v0.18.54.7sstd
93.time v0.3.414.7s1.8s (39%)alloc, default, formatting, parsing, std
94.notify v7.0.04.7s3.8s (82%)default, fsevent-sys, macos_fsevent, serde
95.prost-derive v0.13.54.6s
96.darling_core v0.20.114.5s2.2s (49%)strsim, suggestions
97.logos-codegen v0.14.44.5s2.4s (54%)
98.curve25519-dalek v4.1.34.4s1.9s (44%)alloc, default, digest, precomputed-tables, zeroize
99.deranged v0.4.04.4s0.1s (1%)alloc, powerfmt, serde, std
100.icu_locale_core v2.0.04.4s2.8s (64%)zerovec
101.crossterm v0.28.14.4s1.3s (30%)bracketed-paste, default, events, windows
102.i18n-config v0.4.74.2s2.2s (52%)
103.prost-build v0.13.54.1s2.6s (64%)default, format
104.kdam v0.6.24.1s2.5s (60%)derive, rich, spinner
105.derive_builder_core v0.20.24.1s1.2s (29%)lib_has_std
106.refinery-macros v0.8.164.0s
107.der-parser v9.0.04.0s1.4s (36%)bigint, default, num-bigint, std
108.k256 v0.13.43.9s2.6s (67%)alloc, arithmetic, default, digest, ecdsa, ecdsa-core, once_cell, pkcs8, precomputed-tables, schnorr, sha2, sha256, signature, std
109.winnow v0.7.103.9s0.6s (15%)alloc, default, std
110.dbus-secret-service v4.0.33.9s2.2s (58%)
111.x11rb v0.13.13.8s1.2s (31%)
112.basic-toml v0.1.103.8s1.0s (27%)
113.sos-protocol v0.17.0 build script3.7sbs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
114.pin-project-internal v1.1.103.7s
115.sos-changes v0.17.03.6s2.4s (66%)changes-consumer, changes-producer, tokio-util
116.totp-rs v5.7.03.6s1.8s (50%)default, otpauth, qr, serde, serde_support, url, urlencoding, zeroize
117.toml v0.5.113.5s1.3s (36%)default
118.async-trait v0.1.883.5s
119.enum-iterator v2.1.03.5s0.1s (2%)
120.idna v1.0.33.5s2.7s (78%)alloc, compiled_data, std
121.tower-http v0.6.43.5s1.5s (41%)cors, default, follow-redirect, futures-util, iri-string, tower, trace, tracing
122.icu_locale_core v2.0.03.5s0.8s (22%)zerovec
123.keychain_parser v0.1.23.4s1.7s (49%)
124.chrono v0.4.413.4s2.0s (60%)alloc, android-tzdata, clock, iana-time-zone, js-sys, now, std, wasm-bindgen, wasmbind, winapi, windows-link
125.icu_collections v2.0.03.4s1.5s (44%)
126.tracing-attributes v0.1.283.4s
127.fluent-bundle v0.15.33.4s2.0s (60%)default
128.tokio-util v0.7.153.3s0.6s (17%)codec, compat, default, futures-io, io
129.csv-async v1.3.13.3s1.4s (42%)default, itoa, ryu, serde, tokio, tokio-stream, tokio1, with_serde
130.idna v1.0.33.3s1.3s (40%)alloc, compiled_data, std
131.arboard v3.5.03.3s2.5s (77%)
132.binary-stream v10.0.03.3s0.0s (1%)async, default, tokio
133.png v0.17.163.2s1.8s (54%)
134.regex v1.11.13.2s1.0s (30%)default, perf, perf-backtrack, perf-cache, perf-dfa, perf-inline, perf-literal, perf-onepass, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
135.url v2.5.43.2s1.7s (55%)default, serde, std
136.sos-migrate v0.17.03.1s2.2s (69%)authenticator, export, full, import, keychain-access
137.aho-corasick v1.1.33.1s2.3s (72%)default, perf-literal, std
138.age-core v0.11.03.1s2.0s (63%)
139.textwrap v0.16.23.0s1.9s (64%)default, smawk, terminal_size, unicode-linebreak, unicode-width
140.yasna v0.5.22.9s1.6s (53%)default, std, time
141.zerovec v0.11.22.9s0.1s (4%)alloc, derive, yoke
142.ipnet v2.11.02.9s2.3s (78%)default, std
143.logos-codegen v0.15.02.9s1.3s (47%)
144.asn1-rs-derive v0.5.12.9s
145.time-tz v2.0.0 build script2.9sdb, default, js-sys, system, thiserror, windows-sys
146.plist v1.7.12.8s1.0s (35%)default, serde
147.proc-macro2 v1.0.952.7s1.7s (62%)default, proc-macro
148.regex-syntax v0.8.52.7s0.8s (31%)default, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
149.i18n-embed-fl v0.9.42.7s
150.headers v0.4.02.7s1.1s (43%)
151.sos-integrity v0.17.12.7s2.0s (76%)files, full
152.argon2 v0.5.32.6s1.7s (64%)alloc, default, password-hash, rand, std
153.num-rational v0.4.22.6s1.8s (68%)num-bigint, num-bigint-std, std
154.serde_json_path_core v0.2.22.6s1.3s (52%)default, functions
155.aes v0.8.42.6s1.5s (58%)
156.thiserror-impl v2.0.122.6s
157.toml v0.8.222.5s1.4s (56%)default, display, parse
158.uriparse v0.6.42.5s1.3s (53%)default
159.data-encoding v2.9.02.5s1.9s (77%)alloc, default, std
160.enum-iterator-derive v1.4.02.4s
161.fluent-syntax v0.11.12.4s0.7s (27%)default
162.rand v0.9.12.4s0.5s (23%)alloc, default, os_rng, small_rng, std, std_rng, thread_rng
163.async-recursion v1.1.12.4s
164.zerofrom-derive v0.1.62.4s
165.sos-database-upgrader v0.17.12.4s0.3s (11%)archive, full
166.thiserror-impl v1.0.692.3s
167.i18n-embed v0.15.42.3s1.4s (62%)arc-swap, default, filesystem-assets, fluent, fluent-syntax, fluent-system, i18n-embed-impl, parking_lot, rust-embed, walkdir
168.intl_pluralrules v7.0.22.3s1.4s (62%)
169.linux-raw-sys v0.9.42.3s0.1s (5%)elf, errno, general, ioctl, no_std
170.zerovec-derive v0.11.12.2s
171.sos-database v0.17.02.2s0.9s (42%)archive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
172.tokio-stream v0.1.172.2s0.2s (9%)default, time
173.tower v0.5.22.2s0.0s (2%)__common, futures-core, futures-util, log, make, pin-project-lite, sync_wrapper, timeout, tokio, tracing, util
174.derive_builder_core v0.10.22.2s1.0s (47%)
175.keyring v3.6.22.2s1.3s (59%)apple-native, sync-secret-service, windows-native
176.async_zip v0.0.172.2s0.6s (27%)async-compression, deflate, tokio, tokio-util
177.interprocess v2.2.32.2s0.6s (29%)async, default, futures-core, tokio
178.anticipate-runner v0.5.12.2s1.3s (60%)
179.sos-logs v0.17.02.1s1.6s (73%)
180.sos-login v0.17.22.0s0.9s (42%)files, full
181.nom v7.1.32.0s0.2s (10%)alloc, default, std
182.prettyplease v0.2.332.0s0.8s (39%)
183.yoke-derive v0.8.02.0s
184.icu_normalizer v2.0.02.0s1.0s (51%)compiled_data
185.tempfile v3.20.02.0s0.9s (43%)default, getrandom
186.derive_builder_macro v0.10.22.0s
187.curve25519-dalek-derive v0.1.12.0s
188.rust-embed-impl v8.7.22.0s
189.url v2.5.42.0s0.8s (40%)default, std
190.http v1.3.12.0s0.8s (42%)default, std
191.linux-raw-sys v0.4.151.9s0.1s (5%)elf, errno, general, if_ether, ioctl, net, netlink, no_std, system, xdp
192.tracing-appender v0.2.31.9s1.4s (71%)
193.rand_chacha v0.9.01.9s1.5s (76%)std
194.fs-err v3.1.01.9s0.6s (31%)tokio
195.aho-corasick v1.1.31.9s0.9s (49%)perf-literal, std
196.time-tz v2.0.0 build script (run)1.9sdb, default, js-sys, system, thiserror, windows-sys
197.sos-search v0.17.11.8s1.2s (65%)
198.elliptic-curve v0.13.81.8s0.1s (4%)alloc, arithmetic, digest, ff, group, hazmat, pkcs8, sec1, std
199.indexmap v2.9.01.8s0.1s (4%)default, serde, std
200.bytes v1.10.11.7s0.5s (29%)
201.time-macros v0.2.221.7sformatting, parsing, serde
202.unic-langid-impl v0.9.61.7s1.2s (73%)
203.oid-registry v0.7.11.7s0.6s (35%)crypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
204.uuid v1.17.01.7s0.2s (13%)default, serde, std
205.axum-server v0.7.21.7s0.6s (36%)arc-swap, default, rustls, rustls-pemfile, rustls-pki-types, tls-rustls-no-provider, tokio-rustls
206.rustversion v1.0.211.7s
207.fluent-bundle v0.15.31.7s0.8s (46%)default
208.futures-macro v0.3.311.6s
209.cc v1.2.251.6s0.8s (52%)
210.rustls-pki-types v1.12.01.6s0.8s (54%)alloc, default, std
211.indexmap v2.9.01.6s0.0s (3%)default, std
212.sos-ipc v0.17.01.6s0.4s (28%)async-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
213.httparse v1.10.11.5s0.4s (26%)default, std
214.uuid v1.17.01.5s0.4s (26%)default, rng, serde, std, v4
215.zerocopy v0.8.251.5s0.1s (5%)simd
216.serde_json_path_macros_internal v0.1.21.5s
217.libc v0.2.1721.5s0.3s (17%)default, extra_traits, std
218.axum-extra v0.10.11.4s0.3s (22%)default, tracing, typed-header
219.sharded-slab v0.1.71.4s0.1s (6%)
220.rs_merkle v1.5.01.4s0.8s (58%)default, std
221.sha2 v0.10.91.4s0.9s (65%)default, std
222.deranged v0.4.01.4s0.1s (4%)alloc, powerfmt, std
223.refinery-core v0.8.161.4s0.5s (36%)default
224.notify-types v1.0.11.3s0.3s (20%)serde
225.poly1305 v0.8.01.3s0.7s (56%)
226.icu_normalizer v2.0.01.3s0.5s (36%)compiled_data
227.hashbrown v0.15.31.3s0.0s (4%)
228.blake2 v0.10.61.3s0.7s (56%)default, std
229.derive_builder_macro v0.20.21.3slib_has_std
230.futures-lite v2.6.01.3s0.1s (7%)alloc, fastrand, futures-io, parking, std
231.matchit v0.7.31.3s0.4s (32%)default
232.logos-derive v0.15.01.3s
233.rustyline-derive v0.11.11.3s
234.urn v0.7.01.3s0.8s (60%)alloc, default, serde, std
235.darling_macro v0.12.41.2s
236.num-complex v0.4.61.2s0.1s (10%)std
237.logos-derive v0.14.41.2s
238.sha1 v0.10.61.2s0.7s (57%)default, std
239.sos-sync v0.17.01.2s0.2s (16%)files, full
240.kdam_derive v0.1.01.2s
241.i18n-embed-impl v0.8.41.2sdefault, find-crate, fluent-system, i18n-config, quote
242.displaydoc v0.2.51.2sdefault, std
243.qrcodegen-image v1.5.01.2s1.0s (84%)base64
244.chbs v0.1.11.1s0.7s (60%)
245.sos-remote-sync v0.17.01.1s0.1s (5%)files, full
246.hashbrown v0.14.51.1s0.1s (5%)ahash, allocator-api2, default, inline-more
247.zeroize_derive v1.4.21.1s
248.vcpkg v0.2.151.1s0.8s (75%)
249.miniz_oxide v0.8.81.1s0.7s (65%)default, simd, simd-adler32, with-alloc
250.anyhow v1.0.981.1s0.6s (52%)default, std
251.typeshare-annotation v1.0.41.1s
252.tokio-macros v2.5.01.1s
253.tempfile v3.20.01.1s0.6s (53%)default, getrandom
254.signal-hook v0.3.181.1s0.6s (57%)channel, default, iterator
255.generic-array v0.14.71.1s0.0s (3%)more_lengths, zeroize
256.futures-executor v0.3.311.1s0.8s (77%)std
257.yansi v1.0.11.1s0.1s (13%)alloc, default, std
258.strsim v0.11.11.1s0.7s (62%)
259.sec1 v0.7.31.1s0.7s (61%)alloc, default, der, point, std, subtle, zeroize
260.icu_collections v2.0.01.1s0.3s (26%)
261.prost v0.13.51.1s0.2s (16%)default, derive, std
262.sos-archive v0.17.01.0s0.6s (59%)
263.parse-zoneinfo v0.3.11.0s0.6s (57%)
264.ecdsa v0.16.91.0s0.1s (10%)alloc, arithmetic, der, digest, hazmat, pkcs8, rfc6979, signing, spki, std, verifying
265.radix_trie v0.2.11.0s0.3s (29%)
266.sos-audit v0.17.01.0s0.2s (22%)
267.fixedbitset v0.5.71.0s0.5s (47%)
268.anticipate v0.10.01.0s0.6s (60%)
269.sos-signer v0.17.01.0s0.4s (46%)
270.asn1-rs-impl v0.2.01.0s
271.oid-registry v0.7.1 build script1.0scrypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
272.nu-ansi-term v0.46.01.0s0.5s (50%)
273.rusqlite v0.32.10.9s0.5s (51%)backup, bundled, modern_sqlite
274.colored v2.2.00.9s0.5s (50%)
275.semver v1.0.260.9s0.4s (44%)default, serde, std
276.memchr v2.7.40.9s0.4s (47%)alloc, default, std
277.serde_path_to_error v0.1.170.9s0.1s (11%)
278.pem v3.0.50.9s0.6s (61%)default, serde, std
279.intl_pluralrules v7.0.20.9s0.3s (30%)
280.sos-external-files v0.17.00.9s0.1s (6%)files, full
281.refinery-core v0.8.160.9s0.6s (63%)default, rusqlite, serde, toml
282.probly-search v2.0.10.9s
283.pkcs8 v0.10.20.9s0.7s (72%)alloc, std
284.doctest-file v1.0.00.9s
285.xml-rs v0.8.260.9s0.3s (35%)
286.ring v0.17.14 build script0.9salloc, default, dev_urandom_fallback, std
287.icu_provider v2.0.00.9s0.3s (30%)baked, zerotrie
288.synstructure v0.13.20.9s0.5s (52%)default, proc-macro
289.matchit v0.8.40.9s0.4s (40%)default
290.unicode-width v0.2.00.9s0.1s (12%)cjk, default
291.balloon-hash v0.4.00.9s0.2s (23%)alloc, default, password-hash, rand, std
292.diff v0.1.130.9s0.6s (64%)
293.qrcodegen v1.8.00.9s0.6s (65%)
294.sha3 v0.10.80.9s0.3s (38%)default, std
295.scrypt v0.11.00.9s0.4s (48%)
296.cfg_eval v0.1.20.9sdefault
297.sos-backend v0.17.1 build script0.9sarchive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
298.fluent-syntax v0.11.10.9s0.1s (11%)default
299.nix v0.30.1 build script0.8sfs, process, signal
300.rand_chacha v0.3.10.8s0.7s (82%)std
301.prost v0.13.50.8s0.1s (8%)derive, prost-derive
302.num-traits v0.2.190.8s0.1s (14%)default, i128, std
303.anstream v0.6.180.8s0.3s (36%)auto, default, wincon
304.sos-artifact v0.8.90.8s0.1s (15%)
305.darling_macro v0.20.110.8s
306.crossbeam-channel v0.5.150.8s0.2s (27%)default, std
307.bitflags v2.9.10.8s0.4s (52%)serde, std
308.async-sqlite v0.4.00.8s0.7s (82%)backup, bundled, default
309.heck v0.4.10.8s0.3s (37%)default
310.inotify v0.10.20.8s0.3s (36%)
311.yansi v1.0.10.8s0.1s (19%)alloc, default, std
312.nix v0.28.0 build script0.8sfs, ioctl, poll, process, signal, term
313.crossbeam-utils v0.8.210.8s0.2s (23%)std
314.regex v1.11.10.8s0.2s (22%)default, perf, perf-backtrack, perf-cache, perf-dfa, perf-inline, perf-literal, perf-onepass, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
315.proc-macro2-diagnostics v0.10.10.8s0.5s (59%)colors, default, yansi
316.csv-core v0.1.120.8s0.4s (46%)default
317.icu_provider v2.0.00.8s0.1s (11%)baked, zerotrie
318.probability v0.20.30.8s0.3s (35%)
319.syn v1.0.109 build script0.8sclone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
320.bytes v1.10.10.7s0.2s (23%)default, std
321.tracing v0.1.410.7s0.3s (41%)attributes, default, log, std, tracing-attributes
322.cookie-factory v0.3.30.7s0.0s (7%)async, default, futures, std
323.ed25519-dalek v2.1.10.7s0.4s (50%)alloc, default, fast, rand_core, std, zeroize
324.terminal-banner v0.4.10.7s0.5s (74%)color, colored
325.memchr v2.7.40.7s0.2s (33%)alloc, std
326.hyper-rustls v0.27.60.7s0.3s (44%)http1, ring, tls12, webpki-roots, webpki-tokio
327.num-integer v0.1.460.7s0.3s (40%)i128, std
328.tracing-core v0.1.330.7s0.3s (47%)default, once_cell, std
329.sos-password v0.17.00.7s0.3s (45%)
330.anyhow v1.0.980.7s0.2s (36%)default, std
331.libc v0.2.1720.7s0.0s (5%)default, std
332.zerotrie v0.2.20.7s0.1s (10%)yoke, zerofrom
333.libm v0.2.15 build script0.7sarch, default
334.rustix v1.0.7 build script0.7salloc, default, fs, std
335.zerotrie v0.2.20.7s0.2s (32%)yoke, zerofrom
336.hashbrown v0.15.30.6s0.0s (6%)
337.tokio-tungstenite v0.26.20.6s0.0s (4%)__rustls-tls, connect, default, handshake, rustls, rustls-pki-types, rustls-tls-webpki-roots, stream, tokio-rustls, webpki-roots
338.httparse v1.10.1 build script0.6sdefault, std
339.unic-langid-impl v0.9.60.6s0.3s (42%)serde
340.rand v0.8.50.6s0.1s (14%)alloc, default, getrandom, libc, rand_chacha, std, std_rng
341.getrandom v0.3.3 build script0.6s
342.serde-xml-rs v0.5.10.6s0.0s (6%)
343.sos-system-messages v0.17.00.6s0.1s (13%)
344.rustversion v1.0.21 build script0.6s
345.xclipboard v0.16.10.6s0.1s (8%)
346.socket2 v0.5.100.6s0.2s (38%)all
347.generic-array v0.14.70.6s0.0s (3%)more_lengths
348.sos-search v0.17.1 build script0.6s
349.parking_lot v0.12.40.6s0.4s (68%)default
350.sos-preferences v0.17.00.6s0.1s (22%)
351.logos v0.15.00.6s0.0s (3%)default, export_derive, logos-derive, std
352.httpdate v1.0.30.6s0.3s (57%)
353.hex v0.4.30.6s0.0s (8%)alloc, default, serde, std
354.filetime v0.2.250.6s0.2s (32%)
355.rust-embed-utils v8.7.20.6s0.3s (56%)
356.strsim v0.10.00.6s0.3s (49%)
357.pretty_assertions v1.4.10.6s0.3s (56%)default, std
358.potential_utf v0.1.20.6s0.1s (25%)zerovec
359.fdeflate v0.3.70.6s0.3s (52%)
360.anyhow v1.0.98 build script0.6sdefault, std
361.toml_datetime v0.6.90.6s0.3s (46%)serde
362.open v5.3.20.6s0.1s (23%)
363.serde_urlencoded v0.7.10.6s0.0s (9%)
364.libsqlite3-sys v0.30.1 build script0.6sbundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
365.rand v0.8.50.5s0.0s (5%)small_rng
366.unicode-segmentation v1.12.00.5s0.2s (30%)
367.typenum v1.18.00.5s0.0s (3%)
368.proc-macro2 v1.0.950.5s0.2s (39%)default, proc-macro
369.fallible-iterator v0.3.00.5s0.0s (4%)alloc, default
370.libdbus-sys v0.2.5 build script0.5sdefault, pkg-config
371.typeshare v1.0.40.5s0.1s (20%)default, wasmbind
372.tokio-rustls v0.26.20.5s0.0s (5%)ring, tls12
373.fluent-langneg v0.13.00.5s0.3s (49%)default
374.http-body-util v0.1.30.5s0.0s (5%)default
375.pkg-config v0.3.320.5s0.3s (54%)
376.intl-memoizer v0.5.30.5s0.3s (58%)
377.clap_lex v0.7.40.5s0.2s (43%)
378.fastrand v2.3.00.5s0.2s (31%)alloc, default, std
379.flate2 v1.1.10.5s0.1s (24%)any_impl, default, miniz_oxide, rust_backend
380.ptyprocess v0.4.10.5s0.3s (63%)
381.mime_guess v2.0.50.5s0.2s (38%)default, rev-mappings
382.unicode-linebreak v0.1.50.5s0.1s (18%)
383.sanitize-filename v0.6.00.5s0.2s (36%)
384.bit-vec v0.6.30.5s0.1s (20%)std
385.password-hash v0.5.00.5s0.3s (55%)alloc, default, rand_core, std
386.tracing-log v0.2.00.5s0.2s (47%)log-tracer, std
387.thread_local v1.1.80.5s0.2s (34%)
388.hashlink v0.9.10.5s0.0s (5%)
389.typenum v1.18.00.5s0.0s (3%)
390.either v1.15.00.5s0.0s (6%)std, use_std
391.tinystr v0.8.10.5s0.0s (7%)alloc, default, zerovec
392.async-compression v0.4.230.5s0.0s (9%)deflate, flate2, futures-io
393.linux-raw-sys v0.9.40.5s0.0s (7%)elf, errno, general, ioctl, no_std
394.unicode-width v0.1.140.5s0.1s (12%)cjk, default
395.polyval v0.6.20.5s0.2s (38%)
396.anstyle v1.0.100.4s0.1s (24%)default, std
397.either v1.15.00.4s0.0s (8%)std, use_std
398.chacha20 v0.9.10.4s0.1s (11%)zeroize
399.rand_core v0.9.30.4s0.1s (26%)os_rng, std
400.ed25519 v2.2.30.4s0.2s (51%)alloc, std
401.is-wsl v0.4.00.4s0.3s (67%)
402.tinystr v0.8.10.4s0.0s (10%)alloc, default, zerovec
403.mime_guess v2.0.5 build script0.4sdefault, rev-mappings
404.sos-extension-service v0.17.00.4s0.0s (8%)
405.mio v1.0.40.4s0.2s (45%)default, log, net, os-ext, os-poll
406.sos-web v0.17.0 build script0.4sarchive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
407.proc-macro2-diagnostics v0.10.1 build script0.4scolors, default, yansi
408.is-docker v0.2.00.4s0.3s (72%)
409.semver v1.0.26 build script0.4sdefault, serde, std
410.sos-filesystem v0.17.0 build script0.4sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
411.matchers v0.1.00.4s0.1s (14%)
412.rustls-pemfile v2.2.00.4s0.2s (45%)default, std
413.async-fd-lock v0.2.00.4s0.0s (5%)async, default
414.once_cell v1.21.30.4s0.1s (15%)alloc, default, race, std
415.sos-reducers v0.17.00.4s0.0s (9%)files
416.sos-integrity v0.17.1 build script0.4sfiles, full
417.spki v0.7.30.4s0.1s (31%)alloc, std
418.sos-sdk v0.17.1 build script0.4sfiles, full
419.sos-remote-sync v0.17.0 build script0.4sfiles, full
420.sos-reducers v0.17.0 build script0.4sfiles
421.xclipboard v0.16.1 build script0.4s
422.sos-unit-tests v0.17.0 build script0.4sdefault, files, listen
423.cipher v0.4.40.4s0.0s (6%)zeroize
424.terminal-banner v0.4.1 build script0.4scolor, colored
425.sos-migrate v0.17.0 build script0.4sauthenticator, export, full, import, keychain-access
426.sos-database-upgrader v0.17.1 build script0.4sarchive, full
427.allocator-api2 v0.2.210.4s0.0s (9%)alloc
428.base64 v0.22.10.4s0.1s (26%)alloc, default, std
429.memoffset v0.7.1 build script0.4sdefault
430.sos-net v0.17.3 build script0.4sarchive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
431.sos-client-storage v0.17.1 build script0.4sarchive, audit, files, full, search, sos-audit, sos-external-files, sos-search
432.typed-generational-arena v0.2.90.4s0.0s (6%)default, std
433.rusticata-macros v4.1.00.4s0.2s (44%)
434.sos-server-storage v0.17.1 build script0.4saudit, files, full, sos-audit, sos-external-files
435.snow v0.9.6 build script0.4saes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
436.ppv-lite86 v0.2.210.4s0.0s (5%)simd, std
437.special v0.10.30.4s0.1s (29%)
438.crossbeam-utils v0.8.21 build script0.4sstd
439.sos-external-files v0.17.0 build script0.4sfiles, full
440.sos-sync v0.17.0 build script0.4sfiles, full
441.walkdir v2.5.00.4s0.2s (67%)
442.proc-macro-error2 v2.0.10.4s0.1s (41%)default, syn-error
443.sos-platform-authenticator v0.17.0 build script0.4s
444.find-crate v0.6.30.4s0.1s (30%)
445.autocfg v1.4.00.4s0.2s (57%)
446.bitflags v2.9.10.4s0.1s (27%)std
447.sos-account v0.17.4 build script0.4sarchive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
448.comma v1.0.00.4s0.1s (35%)
449.rustix v0.38.44 build script0.4salloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
450.idna_adapter v1.2.10.4s0.1s (15%)compiled_data
451.fs-err v3.1.0 build script0.4stokio
452.sos-server v0.17.0 build script0.3sacme, audit, default, listen, pairing, sos-audit
453.sos-ipc v0.17.0 build script0.3sasync-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
454.potential_utf v0.1.20.3s0.1s (37%)zerovec
455.sos-changes v0.17.0 build script0.3schanges-consumer, changes-producer, tokio-util
456.tower-layer v0.3.30.3s0.0s (6%)
457.sos-login v0.17.2 build script0.3sfiles, full
458.ctr v0.9.20.3s0.0s (8%)
459.sos-database v0.17.0 build script0.3sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
460.sos-logs v0.17.0 build script0.3s
461.signal-hook v0.3.18 build script0.3schannel, default, iterator
462.sha2 v0.10.90.3s0.1s (29%)default, std
463.atomic-waker v1.1.20.3s0.1s (21%)
464.sos-password v0.17.0 build script0.3s
465.parking_lot v0.12.40.3s0.1s (38%)default
466.base64 v0.21.70.3s0.1s (37%)alloc, default, std
467.anstyle-parse v0.2.60.3s0.1s (21%)default, utf8
468.utf8parse v0.2.20.3s0.0s (9%)default
469.intl-memoizer v0.5.30.3s0.1s (36%)
470.rustls v0.23.27 build script0.3sring, std, tls12
471.aead v0.5.20.3s0.0s (15%)alloc, getrandom, rand_core, std
472.signal-hook-registry v1.4.50.3s0.2s (60%)
473.fluent-langneg v0.13.00.3s0.1s (29%)default
474.bit-set v0.5.30.3s0.0s (16%)std
475.copy_dir v0.1.30.3s0.0s (10%)
476.fastrand v2.3.00.3s0.1s (23%)alloc, default, std
477.prettyplease v0.2.33 build script0.3s
478.getrandom v0.3.30.3s0.1s (20%)
479.utoipa-rapidoc v6.0.00.3s0.1s (43%)axum
480.shell-words v1.1.00.3s0.1s (48%)default, std
481.logos v0.14.40.3s0.0s (13%)default, export_derive, logos-derive, std
482.anyhow v1.0.98 build script (run)0.3sdefault, std
483.zerocopy v0.8.25 build script0.3ssimd
484.writeable v0.6.10.3s0.1s (37%)
485.digest v0.10.70.3s0.0s (7%)alloc, block-buffer, const-oid, core-api, default, mac, oid, std, subtle
486.libc v0.2.172 build script0.3sdefault, std
487.multimap v0.10.10.3s0.0s (6%)
488.terminal_size v0.4.20.3s0.2s (61%)
489.ctrlc v3.4.70.3s0.1s (34%)
490.proc-macro-error-attr2 v2.0.00.3s
491.sos-cli-helpers v0.1.10.3s0.1s (24%)
492.utf-8 v0.7.60.3s0.1s (25%)
493.sos-vault v0.17.1 build script0.3s
494.arc-swap v1.7.10.3s0.0s (17%)
495.mime v0.3.170.3s0.1s (44%)
496.chacha20poly1305 v0.10.10.3s0.0s (15%)alloc, default, getrandom, rand_core, std
497.x25519-dalek v2.0.10.3s0.1s (42%)alloc, default, precomputed-tables, static_secrets, zeroize
498.protoc-bin-vendored-linux-aarch_64 v3.1.00.3s0.1s (29%)
499.want v0.3.10.3s0.1s (33%)
500.aes-gcm v0.10.30.3s0.0s (8%)aes, alloc, default, getrandom, rand_core, std
501.keccak v0.1.50.3s0.1s (46%)
502.toml_write v0.1.10.3s0.1s (24%)alloc, default, std
503.colorchoice v1.0.30.3s0.1s (22%)
504.base64ct v1.7.30.3s0.0s (15%)alloc, std
505.hmac v0.12.10.2s0.0s (9%)reset
506.sos-preferences v0.17.0 build script0.2s
507.salsa20 v0.10.20.2s0.0s (9%)
508.rustix v1.0.7 build script0.2salloc, default, fs, std, termios
509.strsim v0.11.10.2s0.1s (46%)
510.iana-time-zone v0.1.630.2s0.1s (60%)fallback
511.version_check v0.9.50.2s0.1s (53%)
512.quote v1.0.400.2s0.1s (28%)default, proc-macro
513.urlencoding v2.1.30.2s0.1s (39%)
514.walkdir v2.5.00.2s0.1s (45%)
515.typenum v1.18.0 build script0.2s
516.bech32 v0.9.10.2s0.1s (40%)default, std
517.sos-system-messages v0.17.0 build script0.2s
518.thiserror v1.0.69 build script0.2s
519.hkdf v0.12.40.2s0.0s (11%)
520.untrusted v0.9.00.2s0.0s (8%)
521.minimal-lexical v0.2.10.2s0.0s (20%)std
522.rustc_version v0.4.10.2s0.1s (41%)
523.tracing-serde v0.2.00.2s0.0s (9%)
524.aliasable v0.1.30.2s0.1s (33%)alloc, default
525.signal-hook-mio v0.2.40.2s0.0s (9%)mio-1_0, support-v1_0
526.powerfmt v0.2.00.2s0.1s (24%)
527.http-body v1.0.10.2s0.0s (15%)
528.signature v2.2.00.2s0.0s (20%)alloc, digest, rand_core, std
529.yoke v0.8.00.2s0.0s (7%)alloc, derive, zerofrom
530.sos-platform-authenticator v0.17.00.2s0.1s (32%)
531.sos-security-report v0.17.10.2s0.0s (7%)
532.base32 v0.5.10.2s0.1s (50%)
533.writeable v0.6.10.2s0.0s (21%)
534.libc v0.2.172 build script0.2sdefault, extra_traits, std
535.simd-adler32 v0.3.70.2s0.1s (51%)const-generics, default, std
536.lock_api v0.4.130.2s0.0s (6%)atomic_usize, default
537.ahash v0.8.120.2s0.0s (10%)
538.semver v1.0.260.2s0.1s (27%)default, std
539.secrecy v0.10.30.2s0.1s (27%)serde
540.byteorder-lite v0.1.00.2s0.0s (2%)default, std
541.rand_core v0.6.40.2s0.0s (22%)alloc, getrandom, std
542.yoke v0.8.00.2s0.0s (6%)alloc, derive, zerofrom
543.futures-channel v0.3.310.2s0.0s (11%)alloc, default, futures-sink, sink, std
544.getrandom v0.3.3 build script0.2sstd
545.thiserror v2.0.12 build script0.2sdefault, std
546.is_terminal_polyfill v1.70.10.2s0.0s (16%)default
547.parking_lot_core v0.9.110.2s0.0s (18%)
548.zeroize v1.8.10.2s0.0s (22%)alloc, default, derive, zeroize_derive
549.ghash v0.5.10.2s0.1s (37%)
550.smallvec v1.15.00.2s0.0s (10%)const_generics
551.arc-swap v1.7.10.2s0.0s (16%)
552.thiserror v2.0.120.2s0.0s (10%)default, std
553.rev_buf_reader v0.3.00.2s0.0s (14%)default
554.smawk v0.3.20.2s0.0s (10%)
555.serde v1.0.219 build script0.2salloc, default, derive, serde_derive, std
556.nibble_vec v0.1.00.2s0.0s (8%)
557.parking_lot_core v0.9.110.2s0.1s (31%)
558.etcetera v0.8.00.2s0.1s (43%)
559.serde v1.0.219 build script0.2sdefault, derive, serde_derive, std
560.sos-debug-snapshot v0.17.00.2s0.0s (22%)
561.smallvec v1.15.00.2s0.0s (8%)const_generics, const_new
562.fluent v0.16.10.2s0.0s (13%)
563.protoc-bin-vendored-linux-x86_64 v3.1.00.2s0.1s (39%)
564.proc-macro2 v1.0.95 build script0.2sdefault, proc-macro
565.clap v4.5.390.2s0.0s (23%)color, default, derive, env, error-context, help, std, suggestions, usage, wrap_help
566.ryu v1.0.200.2s0.1s (36%)
567.serde_spanned v0.6.80.2s0.0s (17%)serde
568.idna_adapter v1.2.10.2s0.0s (24%)compiled_data
569.random v0.13.20.2s0.0s (14%)
570.type-map v0.5.10.2s0.1s (48%)
571.curve25519-dalek v4.1.3 build script0.2salloc, default, digest, precomputed-tables, zeroize
572.once_cell v1.21.30.2s0.0s (20%)alloc, default, race, std
573.percent-encoding v2.3.10.2s0.0s (27%)alloc, std
574.litemap v0.8.00.2s0.0s (6%)alloc
575.sos-signer v0.17.0 build script0.2s
576.fd-lock v4.0.40.2s0.0s (22%)
577.getrandom v0.2.160.2s0.1s (45%)std
578.powerfmt v0.2.00.2s0.1s (33%)
579.endian-type v0.1.20.2s0.0s (11%)
580.rfc6979 v0.4.00.2s0.0s (10%)
581.rust-embed v8.7.20.2s0.1s (35%)
582.libdbus-sys v0.2.50.2s0.0s (14%)default, pkg-config
583.logos-codegen v0.15.0 build script0.2s
584.litemap v0.8.00.2s0.0s (6%)alloc
585.num_threads v0.1.70.2s0.1s (70%)
586.parking v2.2.10.2s0.1s (41%)
587.inout v0.1.40.2s0.0s (21%)
588.siphasher v1.0.10.2s0.0s (20%)default, std
589.serde_json_path_macros v0.1.60.2s0.0s (22%)
590.darling v0.12.40.2s0.0s (19%)default, suggestions
591.webpki-roots v1.0.00.2s0.0s (9%)
592.unicode-ident v1.0.180.2s0.0s (19%)
593.inventory v0.3.200.2s0.0s (33%)
594.sos-protocol v0.17.0 build script (run)0.2sbs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
595.fallible-streaming-iterator v0.1.90.2s0.0s (6%)
596.parking_lot_core v0.9.11 build script0.2s
597.form_urlencoded v1.2.10.2s0.0s (27%)alloc, std
598.heck v0.5.00.2s0.1s (43%)
599.lock_api v0.4.130.2s0.0s (4%)atomic_usize, default
600.unicase v2.8.10.1s0.0s (28%)
601.bytemuck v1.23.00.1s0.0s (11%)extern_crate_alloc
602.ahash v0.8.12 build script0.1s
603.shlex v1.3.00.1s0.0s (25%)default, std
604.semver v1.0.26 build script0.1sdefault, std
605.slab v0.4.9 build script0.1sdefault, std
606.ouroboros v0.18.50.1s0.0s (12%)default, std
607.derive_builder v0.10.20.1s0.0s (17%)default, std
608.generic-array v0.14.7 build script0.1smore_lengths, zeroize
609.phf_shared v0.11.30.1s0.0s (9%)default, std
610.cfg_aliases v0.2.10.1s0.0s (18%)
611.percent-encoding v2.3.10.1s0.1s (37%)alloc, default, std
612.bs58 v0.4.00.1s0.0s (24%)alloc, default, std
613.phf_shared v0.11.30.1s0.0s (17%)std
614.const-oid v0.9.60.1s0.1s (47%)
615.protoc-bin-vendored-macos-x86_64 v3.1.00.1s0.1s (46%)
616.zerofrom v0.1.60.1s0.0s (9%)alloc, derive
617.block-buffer v0.10.40.1s0.0s (13%)
618.derive_builder v0.20.20.1s0.0s (20%)default, std
619.rust-embed-utils v8.7.20.1s0.0s (33%)
620.type-map v0.5.10.1s0.0s (35%)
621.lock_api v0.4.13 build script0.1satomic_usize, default
622.protoc-bin-vendored v3.1.00.1s0.0s (19%)
623.unicase v2.8.10.1s0.0s (15%)
624.human_bytes v0.4.30.1s0.0s (15%)default, si-units
625.siphasher v1.0.10.1s0.0s (13%)default, std
626.phf_generator v0.11.30.1s0.1s (43%)
627.protoc-bin-vendored-macos-aarch_64 v3.1.00.1s0.1s (40%)
628.num-traits v0.2.19 build script0.1sdefault, i128, std
629.anyhow v1.0.98 build script (run)0.1sdefault, std
630.universal-hash v0.5.10.1s0.0s (14%)
631.binary-stream v10.0.0 build script0.1sasync, default, tokio
632.inotify-sys v0.1.50.1s0.0s (11%)
633.sos-core v0.17.1 build script0.1sfiles
634.protoc-bin-vendored-linux-ppcle_64 v3.1.00.1s0.0s (33%)
635.getrandom v0.3.30.1s0.0s (31%)std
636.base16ct v0.2.00.1s0.0s (36%)alloc
637.log v0.4.270.1s0.0s (34%)std
638.group v0.13.00.1s0.0s (22%)alloc
639.num-iter v0.1.450.1s0.0s (10%)i128, std
640.log v0.4.270.1s0.0s (14%)
641.serde_json v1.0.140 build script0.1sdefault, raw_value, std
642.pbkdf2 v0.12.20.1s0.0s (13%)default, hmac
643.unic-langid v0.9.60.1s0.0s (19%)default, serde
644.form_urlencoded v1.2.10.1s0.1s (44%)alloc, default, std
645.protoc-bin-vendored-win32 v3.1.00.1s0.0s (31%)
646.icu_properties_data v2.0.1 build script0.1s
647.protoc-bin-vendored-linux-x86_32 v3.1.00.1s0.0s (32%)
648.digest v0.10.70.1s0.0s (10%)alloc, block-buffer, core-api, default, std
649.crc32fast v1.4.20.1s0.0s (35%)default, std
650.generic-array v0.14.7 build script0.1smore_lengths
651.nonzero_ext v0.1.50.1s0.0s (32%)default, std
652.icu_normalizer_data v2.0.0 build script0.1s
653.crypto-common v0.1.60.1s0.0s (15%)getrandom, rand_core, std
654.futures-task v0.3.310.1s0.0s (19%)alloc, std
655.zerofrom v0.1.60.1s0.0s (2%)alloc, derive
656.memoffset v0.7.1 build script (run)0.1sdefault
657.sync_wrapper v1.0.20.1s0.0s (12%)futures, futures-core
658.itoa v1.0.150.1s0.0s (9%)
659.proc-macro2 v1.0.95 build script (run)0.1sdefault, proc-macro
660.phf v0.11.30.1s0.0s (6%)default, std
661.utf8_iter v1.0.40.1s0.0s (20%)
662.futures-io v0.3.310.1s0.0s (25%)default, std
663.num v0.4.30.1s0.0s (7%)default, num-bigint, std
664.rust-embed v8.7.20.1s0.0s (25%)
665.anstyle-query v1.1.20.1s0.0s (20%)
666.beef v0.5.20.1s0.0s (12%)default
667.try-lock v0.2.50.1s0.0s (17%)
668.fluent v0.16.10.1s0.0s (38%)
669.utf8_iter v1.0.40.1s0.0s (20%)
670.pathdiff v0.2.30.1s0.0s (20%)
671.headers-core v0.3.00.1s0.0s (21%)
672.static_assertions v1.1.00.1s0.0s (15%)
673.libsqlite3-sys v0.30.10.1s0.0s (13%)bundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
674.instant v0.1.130.1s0.0s (24%)
675.slab v0.4.90.1s0.0s (9%)default, std
676.num-conv v0.1.00.1s0.0s (13%)
677.pin-project v1.1.100.1s0.0s (16%)
678.rand_core v0.6.40.1s0.0s (15%)
679.subtle v2.6.10.1s0.0s (12%)default, i128, std
680.tower-service v0.3.30.1s0.0s (23%)
681.cfg_aliases v0.1.10.1s0.0s (22%)
682.fs-err v3.1.0 build script (run)0.1stokio
683.rustix v1.0.7 build script (run)0.1salloc, default, fs, std
684.icu_properties_data v2.0.10.1s0.0s (17%)
685.equivalent v1.0.20.1s0.0s (17%)
686.futures v0.3.310.1s0.0s (17%)alloc, async-await, default, executor, futures-executor, std
687.icu_properties_data v2.0.10.1s0.0s (16%)
688.ff v0.13.10.1s0.0s (12%)alloc
689.num-traits v0.2.19 build script (run)0.1sdefault, i128, std
690.darling v0.20.110.1s0.0s (19%)default, suggestions
691.thiserror v1.0.690.1s0.0s (19%)
692.memoffset v0.7.10.1s0.0s (17%)default
693.block-buffer v0.10.40.1s0.0s (16%)
694.same-file v1.0.60.1s0.0s (25%)
695.adler2 v2.0.00.1s0.0s (36%)
696.sos-vfs v0.3.20.1s0.0s (23%)
697.sos-integration-tests v0.17.00.1s0.0s (19%)
698.num-conv v0.1.00.1s0.0s (5%)
699.webpki-roots v0.26.110.1s0.0s (17%)
700.sos-unit-tests v0.17.00.1s0.0s (16%)default, files, listen
701.constant_time_eq v0.3.10.1s0.0s (37%)
702.rustc-hash v2.1.10.1s0.0s (20%)default, std
703.futures-core v0.3.310.1s0.0s (21%)alloc, default, std
704.sos-database-upgrader v0.17.1 build script (run)0.1sarchive, full
705.cfg-if v0.1.100.1s0.0s (24%)
706.phf_codegen v0.11.30.1s0.0s (19%)
707.unic-langid v0.9.60.1s0.0s (15%)default
708.sos-command-line-tests v0.17.00.1s0.0s (17%)
709.rustc-hash v2.1.10.1s0.0s (26%)default, std
710.same-file v1.0.60.1s0.0s (18%)
711.time-core v0.1.40.1s0.0s (11%)
712.sos-sdk v0.17.1 build script (run)0.1sfiles, full
713.terminal-banner v0.4.1 build script (run)0.1scolor, colored
714.home v0.5.110.1s0.0s (37%)
715.overload v0.1.10.1s0.0s (22%)
716.rustc-hash v1.1.00.1s0.0s (14%)default, std
717.self_cell v1.2.00.1s0.0s (25%)
718.itoa v1.0.150.1s0.0s (19%)
719.sos-backend v0.17.1 build script (run)0.1sarchive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
720.crypto-common v0.1.60.1s0.0s (16%)std
721.thiserror v1.0.690.1s0.0s (12%)
722.sos-integrity v0.17.1 build script (run)0.1sfiles, full
723.sos-sdk v0.17.10.1s0.0s (16%)files, full
724.icu_normalizer_data v2.0.00.1s0.0s (18%)
725.rustix v0.38.44 build script (run)0.1salloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
726.sos-client-storage v0.17.1 build script (run)0.1sarchive, audit, files, full, search, sos-audit, sos-external-files, sos-search
727.time-core v0.1.40.1s0.0s (20%)
728.semver v1.0.26 build script (run)0.1sdefault, serde, std
729.sos-server-storage v0.17.1 build script (run)0.1saudit, files, full, sos-audit, sos-external-files
730.proc-macro2 v1.0.95 build script (run)0.0sdefault, proc-macro
731.ident_case v1.0.10.0s0.0s (23%)
732.snow v0.9.6 build script (run)0.0saes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
733.sos-web v0.17.0 build script (run)0.0sarchive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
734.sos-remote-sync v0.17.0 build script (run)0.0sfiles, full
735.sos-net v0.17.3 build script (run)0.0sarchive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
736.io_tee v0.1.10.0s0.0s (19%)
737.futures-sink v0.3.310.0s0.0s (17%)alloc, default, std
738.sos-changes v0.17.0 build script (run)0.0schanges-consumer, changes-producer, tokio-util
739.rustversion v1.0.21 build script (run)0.0s
740.sos-ipc v0.17.0 build script (run)0.0sasync-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
741.sos-sync v0.17.0 build script (run)0.0sfiles, full
742.sos-external-files v0.17.0 build script (run)0.0sfiles, full
743.sos-database v0.17.0 build script (run)0.0sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
744.refinery v0.8.160.0s0.0s (16%)default, rusqlite, toml
745.lock_api v0.4.13 build script (run)0.0satomic_usize, default
746.sos-password v0.17.0 build script (run)0.0s
747.slab v0.4.9 build script (run)0.0sdefault, std
748.sos-logs v0.17.0 build script (run)0.0s
749.libdbus-sys v0.2.5 build script (run)0.0sdefault, pkg-config
750.fnv v1.0.70.0s0.0s (23%)default, std
751.self_cell v1.2.00.0s0.0s (31%)
752.scopeguard v1.2.00.0s0.0s (27%)
753.sos-system-messages v0.17.0 build script (run)0.0s
754.sos-migrate v0.17.0 build script (run)0.0sauthenticator, export, full, import, keychain-access
755.sos-account v0.17.4 build script (run)0.0sarchive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
756.proc-macro2-diagnostics v0.10.1 build script (run)0.0scolors, default, yansi
757.lazy_static v1.5.00.0s0.0s (22%)
758.rustc-hash v1.1.00.0s0.0s (22%)default, std
759.syn v1.0.109 build script (run)0.0sclone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
760.cpufeatures v0.2.170.0s0.0s (33%)
761.sos-login v0.17.2 build script (run)0.0sfiles, full
762.sos-search v0.17.1 build script (run)0.0s
763.sos-filesystem v0.17.0 build script (run)0.0sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
764.stable_deref_trait v1.2.00.0s0.0s (23%)alloc
765.sos-preferences v0.17.0 build script (run)0.0s
766.self_cell v0.10.30.0s0.0s (11%)
767.thiserror v1.0.69 build script (run)0.0s
768.icu_normalizer_data v2.0.00.0s0.0s (26%)
769.httparse v1.10.1 build script (run)0.0sdefault, std
770.sos-platform-authenticator v0.17.0 build script (run)0.0s
771.fnv v1.0.70.0s0.0s (33%)default, std
772.sos-server v0.17.0 build script (run)0.0sacme, audit, default, listen, pairing, sos-audit
773.stable_deref_trait v1.2.00.0s0.0s (27%)alloc
774.rustix v1.0.7 build script (run)0.0salloc, default, fs, std, termios
775.cpufeatures v0.2.170.0s0.0s (22%)
776.xclipboard v0.16.1 build script (run)0.0s
777.scopeguard v1.2.00.0s0.0s (16%)
778.thiserror v2.0.12 build script (run)0.0sdefault, std
779.pin-utils v0.1.00.0s0.0s (21%)
780.opaque-debug v0.3.10.0s0.0s (38%)
781.thiserror v1.0.69 build script (run)0.0s
782.equivalent v1.0.20.0s0.0s (19%)
783.lazy_static v1.5.00.0s0.0s (10%)
784.bitflags v1.3.20.0s0.0s (21%)default
785.binary-stream v10.0.0 build script (run)0.0sasync, default, tokio
786.lock_api v0.4.13 build script (run)0.0satomic_usize, default
787.sos-vault v0.17.1 build script (run)0.0s
788.cfg-if v1.0.00.0s0.0s (15%)
789.unicode-ident v1.0.180.0s0.0s (36%)
790.signal-hook v0.3.18 build script (run)0.0schannel, default, iterator
791.pin-project-lite v0.2.160.0s0.0s (16%)
792.sos-reducers v0.17.0 build script (run)0.0sfiles
793.self_cell v0.10.30.0s0.0s (35%)
794.sos-signer v0.17.0 build script (run)0.0s
795.libc v0.2.172 build script (run)0.0sdefault, extra_traits, std
796.libc v0.2.172 build script (run)0.0sdefault, std
797.curve25519-dalek v4.1.3 build script (run)0.0salloc, default, digest, precomputed-tables, zeroize
798.oid-registry v0.7.1 build script (run)0.0scrypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
799.rustls v0.23.27 build script (run)0.0sring, std, tls12
800.nix v0.28.0 build script (run)0.0sfs, ioctl, poll, process, signal, term
801.nix v0.30.1 build script (run)0.0sfs, process, signal
802.serde v1.0.219 build script (run)0.0salloc, default, derive, serde_derive, std
803.mime_guess v2.0.5 build script (run)0.0sdefault, rev-mappings
804.generic-array v0.14.7 build script (run)0.0smore_lengths, zeroize
805.serde v1.0.219 build script (run)0.0sdefault, derive, serde_derive, std
806.getrandom v0.3.3 build script (run)0.0s
807.sos-unit-tests v0.17.0 build script (run)0.0sdefault, files, listen
808.ahash v0.8.12 build script (run)0.0s
809.logos-codegen v0.15.0 build script (run)0.0s
810.sos-core v0.17.1 build script (run)0.0sfiles
811.semver v1.0.26 build script (run)0.0sdefault, std
812.generic-array v0.14.7 build script (run)0.0smore_lengths
813.typenum v1.18.0 build script (run)0.0s
814.zerocopy v0.8.25 build script (run)0.0ssimd
815.typenum v1.18.0 build script (run)0.0s
816.libm v0.2.15 build script (run)0.0sarch, default
817.serde_json v1.0.140 build script (run)0.0sdefault, raw_value, std
818.icu_normalizer_data v2.0.0 build script (run)0.0s
819.getrandom v0.3.3 build script (run)0.0sstd
820.icu_normalizer_data v2.0.0 build script (run)0.0s
821.prettyplease v0.2.33 build script (run)0.0s
822.parking_lot_core v0.9.11 build script (run)0.0s
823.parking_lot_core v0.9.11 build script (run)0.0s
824.crossbeam-utils v0.8.21 build script (run)0.0sstd
825.icu_properties_data v2.0.1 build script (run)0.0s
826.icu_properties_data v2.0.1 build script (run)0.0s
827.cfg-if v1.0.00.0s0.0s (11%)
+ + + diff --git a/doc/rust-1.90-timings/cargo-1.90-mold.html b/doc/rust-1.90-timings/cargo-1.90-mold.html new file mode 100644 index 0000000000..97517c46ff --- /dev/null +++ b/doc/rust-1.90-timings/cargo-1.90-mold.html @@ -0,0 +1,39507 @@ + + + + Cargo Build Timings — sos-changes 0.17.0, sos-extension-service 0.17.0, sos-sdk 0.17.1, sos-sync 0.17.0, xclipboard 0.16.1, sos-account 0.17.4, sos-migrate 0.17.0, sos-net 0.17.3, sos-reducers 0.17.0, sos-archive 0.17.0, sos-database 0.17.0, sos-login 0.17.2, sos-search 0.17.1, sos-test-utils 0.17.0, sos-system-messages 0.17.0, sos-debug-snapshot 0.17.0, sos-client-storage 0.17.1, sos-external-files 0.17.0, sos-ipc 0.17.0, sos-filesystem 0.17.0, sos-security-report 0.17.1, sos-signer 0.17.0, sos-remote-sync 0.17.0, sos-core 0.17.1, sos-preferences 0.17.0, sos-platform-authenticator 0.17.0, sos-command-line-tests 0.17.0, sos-vfs 0.3.2, sos-server-storage 0.17.1, keychain_parser 0.1.2, sos-web 0.17.0, sos-integrity 0.17.1, sos-protocol 0.17.0, sos-database-upgrader 0.17.1, sos-logs 0.17.0, sos-integration-tests 0.17.0, sos-server 0.17.0, sos-password 0.17.0, sos-artifact 0.8.9, sos 0.17.0, sos-vault 0.17.1, sos-backend 0.17.1, sos-unit-tests 0.17.0, sos-cli-helpers 0.1.1, sos-audit 0.17.0 + + + + + +

Cargo Build Timings

+See Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Targets:sos-changes 0.17.0 (lib)
sos-extension-service 0.17.0 (lib, bin "sos-extension-helper")
sos-sdk 0.17.1 (lib)
sos-sync 0.17.0 (lib)
xclipboard 0.16.1 (lib)
sos-account 0.17.4 (lib)
sos-migrate 0.17.0 (lib)
sos-net 0.17.3 (lib)
sos-reducers 0.17.0 (lib)
sos-archive 0.17.0 (lib)
sos-database 0.17.0 (lib)
sos-login 0.17.2 (lib)
sos-search 0.17.1 (lib)
sos-test-utils 0.17.0 (lib)
sos-system-messages 0.17.0 (lib)
sos-debug-snapshot 0.17.0 (lib)
sos-client-storage 0.17.1 (lib)
sos-external-files 0.17.0 (lib)
sos-ipc 0.17.0 (lib)
sos-filesystem 0.17.0 (lib)
sos-security-report 0.17.1 (lib)
sos-signer 0.17.0 (lib)
sos-remote-sync 0.17.0 (lib)
sos-core 0.17.1 (lib)
sos-preferences 0.17.0 (lib)
sos-platform-authenticator 0.17.0 (lib)
sos-command-line-tests 0.17.0 (lib)
sos-vfs 0.3.2 (lib)
sos-server-storage 0.17.1 (lib)
keychain_parser 0.1.2 (lib)
sos-web 0.17.0 (lib)
sos-integrity 0.17.1 (lib)
sos-protocol 0.17.0 (lib)
sos-database-upgrader 0.17.1 (lib)
sos-logs 0.17.0 (lib)
sos-integration-tests 0.17.0 (lib, bin "db-compile-options", bin "make-v3-backup-fixtures", bin "test-extension-helper", bin "test-preferences-concurrency")
sos-server 0.17.0 (lib, bin "sos-server")
sos-password 0.17.0 (lib)
sos-artifact 0.8.9 (lib)
sos 0.17.0 (lib, bin "sos")
sos-vault 0.17.1 (lib)
sos-backend 0.17.1 (lib)
sos-unit-tests 0.17.0 (lib)
sos-cli-helpers 0.1.1 (lib)
sos-audit 0.17.0 (lib)
Profile:release
Fresh units:0
Dirty units:827
Total units:827
Max concurrency:16 (jobs=16 ncpu=16)
Build start:2025-09-18T23:29:47.164316663Z
Total time:274.2s (4m 34.2s)
rustc:rustc 1.90.0 (1159e78c4 2025-09-14)
Host: x86_64-unknown-linux-gnu
Target: x86_64-unknown-linux-gnu
+ + + + + + + + + + + + + + + +
+ +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UnitTotalCodegenFeatures
1.sos v0.17.0 bin "sos"155.4s
2.sos-extension-service v0.17.0 bin "sos-extension-helper"130.7s
3.sos-server v0.17.0 bin "sos-server"127.0sacme, audit, default, listen, pairing, sos-audit
4.sos-integration-tests v0.17.0 bin "test-extension-helper"112.9s
5.sos-integration-tests v0.17.0 bin "make-v3-backup-fixtures"102.2s
6.libsqlite3-sys v0.30.1 build script (run)67.7sbundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
7.vcard4 v0.7.237.9s27.3s (72%)default, serde, zeroize
8.sos-integration-tests v0.17.0 bin "test-preferences-concurrency"36.0s
9.sos-integration-tests v0.17.0 bin "db-compile-options"33.5s
10.utoipa-gen v5.3.122.6suuid
11.rustls v0.23.2722.6s15.6s (69%)ring, std, tls12
12.x11rb-protocol v0.13.121.7s15.1s (70%)std
13.clap_builder v4.5.3921.6s13.6s (63%)color, env, error-context, help, std, suggestions, usage, wrap_help
14.sos-net v0.17.321.5s12.8s (59%)archive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
15.sos v0.17.021.5s14.3s (66%)
16.reqwest v0.12.1820.6s17.8s (86%)__rustls, __rustls-ring, __tls, json, rustls-tls, rustls-tls-webpki-roots, rustls-tls-webpki-roots-no-provider, stream
17.axum v0.8.418.1s3.7s (20%)default, form, http1, json, matched-path, original-uri, query, tokio, tower-log, tracing, ws
18.dbus v0.9.716.3s9.5s (58%)
19.x509-parser v0.16.014.8s10.6s (71%)default
20.tokio v1.45.114.4s8.0s (55%)bytes, default, fs, io-std, io-util, libc, macros, mio, net, process, rt, rt-multi-thread, signal-hook-registry, socket2, sync, time, tokio-macros
21.nix v0.26.413.8s1.4s (10%)acct, aio, default, dir, env, event, feature, fs, hostname, inotify, ioctl, kmod, memoffset, mman, mount, mqueue, net, personality, pin-utils, poll, process, pthread, ptrace, quota, reboot, resource, sched, signal, socket, term, time, ucontext, uio, user, zerocopy
22.sos-account v0.17.413.3s6.8s (51%)archive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
23.sos-test-utils v0.17.012.8s11.2s (87%)
24.h2 v0.4.1012.7s5.2s (41%)
25.sos-server v0.17.012.3s9.3s (76%)acme, audit, default, listen, pairing, sos-audit
26.toml_edit v0.22.2612.1s8.1s (67%)display, parse, serde
27.sos-client-storage v0.17.111.6s6.5s (56%)archive, audit, files, full, search, sos-audit, sos-external-files, sos-search
28.regex-automata v0.4.911.1s7.9s (71%)alloc, dfa, dfa-build, dfa-onepass, dfa-search, hybrid, meta, nfa, nfa-backtrack, nfa-pikevm, nfa-thompson, perf, perf-inline, perf-literal, perf-literal-multisubstring, perf-literal-substring, std, syntax, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment, unicode-word-boundary
29.tracing-subscriber v0.3.1911.0s8.1s (73%)alloc, ansi, default, env-filter, fmt, json, matchers, nu-ansi-term, once_cell, regex, registry, serde, serde_json, sharded-slab, smallvec, std, thread_local, tracing, tracing-log, tracing-serde
30.sos-vault v0.17.111.0s4.4s (40%)
31.sos-server-storage v0.17.18.5s5.7s (66%)audit, files, full, sos-audit, sos-external-files
32.tokio-rustls-acme v0.6.08.5s2.5s (29%)axum, default
33.rustix v0.38.448.4s2.7s (32%)alloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
34.sos-web v0.17.08.4s3.7s (44%)archive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
35.axum-core v0.5.28.1s1.0s (13%)tracing
36.nix v0.28.07.8s1.2s (15%)fs, ioctl, poll, process, signal, term
37.logos-codegen v0.14.47.4s2.8s (38%)
38.sos-filesystem v0.17.07.2s0.5s (7%)archive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
39.time v0.3.417.2s3.5s (49%)alloc, default, formatting, local-offset, macros, parsing, serde, serde-human-readable, std, wasm-bindgen
40.rcgen v0.13.27.1s3.9s (55%)crypto, default, pem, ring
41.sos-protocol v0.17.06.9s3.8s (56%)bs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
42.sos-core v0.17.16.8s2.5s (37%)files
43.sos-backend v0.17.16.3s5.2s (83%)archive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
44.time-tz v2.0.06.1s0.7s (11%)db, default, js-sys, system, thiserror, windows-sys
45.nix v0.30.16.0s1.7s (29%)fs, process, signal
46.ring v0.17.145.9s3.1s (52%)alloc, default, dev_urandom_fallback, std
47.syn v2.0.1015.8s1.8s (31%)clone-impls, default, derive, extra-traits, fold, full, parsing, printing, proc-macro, visit, visit-mut
48.quick-xml v0.32.05.8s4.0s (69%)default
49.regex-syntax v0.6.295.6s3.0s (53%)default, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
50.notify v7.0.05.5s4.7s (85%)default, fsevent-sys, macos_fsevent, serde
51.clap_derive v4.5.325.2sdefault
52.utoipa v5.3.15.1s2.2s (42%)default, macros, uuid
53.rustix v1.0.74.8s1.3s (27%)alloc, default, fs, std, termios
54.zxcvbn v3.1.04.7s3.5s (74%)builder, default, derive_builder, ser, serde
55.arboard v3.5.04.6s3.9s (85%)
56.sos-logs v0.17.04.6s3.6s (80%)
57.serde v1.0.2194.5s0.2s (4%)alloc, default, derive, serde_derive, std
58.sos-changes v0.17.04.5s2.8s (62%)changes-consumer, changes-producer, tokio-util
59.syn v1.0.1094.4s1.8s (41%)clone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
60.keychain_parser v0.1.24.3s2.1s (48%)
61.image v0.25.64.3s2.8s (66%)png
62.crossterm v0.28.14.3s1.7s (41%)bracketed-paste, default, events, windows
63.rustyline v14.0.04.3s2.1s (50%)custom-bindings, default, fd-lock, home, radix_trie, with-dirs, with-file-history
64.ring v0.17.14 build script (run)4.2salloc, default, dev_urandom_fallback, std
65.hyper v1.6.04.1s1.9s (48%)client, default, http1, http2, server
66.regex-syntax v0.8.54.0s2.1s (52%)default, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
67.hyper-util v0.1.134.0s1.1s (29%)client, client-legacy, client-proxy, default, http1, http2, server, server-auto, service, tokio
68.asn1-rs v0.6.23.9s1.9s (50%)datetime, default, std, time
69.iri-string v0.7.83.8s1.0s (25%)alloc, default, std
70.num-bigint v0.4.63.6s1.5s (40%)default, std
71.ouroboros_macro v0.18.53.5sstd
72.serde_with v3.12.03.5s0.2s (6%)alloc, base64, default, macros, std
73.x11rb v0.13.13.3s1.5s (44%)
74.rustls-webpki v0.103.33.3s2.4s (73%)alloc, ring, std
75.aho-corasick v1.1.33.3s2.3s (69%)default, perf-literal, std
76.regex-automata v0.1.103.3s1.6s (49%)default, regex-syntax, std
77.plist v1.7.13.3s1.4s (42%)default, serde
78.regex-automata v0.4.93.3s1.3s (39%)alloc, dfa-onepass, hybrid, meta, nfa-backtrack, nfa-pikevm, nfa-thompson, perf-inline, perf-literal, perf-literal-multisubstring, perf-literal-substring, std, syntax, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment, unicode-word-boundary
79.serde_json_path v0.7.23.3s2.0s (62%)default, functions, regex
80.num-complex v0.4.63.2s0.3s (8%)std
81.darling_core v0.12.43.2s1.6s (50%)strsim, suggestions
82.libm v0.2.153.2s1.1s (35%)arch, default
83.dbus-secret-service v4.0.33.2s2.4s (76%)
84.fancy-regex v0.13.03.2s2.2s (70%)default, perf, std, unicode
85.serde v1.0.2193.1s0.2s (6%)default, derive, serde_derive, std
86.petgraph v0.7.13.1s0.2s (6%)
87.serde_derive v1.0.2193.1sdefault
88.serde_json v1.0.1403.1s1.2s (39%)default, raw_value, std
89.futures-util v0.3.313.0s0.2s (6%)alloc, async-await, async-await-macro, channel, default, futures-channel, futures-io, futures-macro, futures-sink, io, memchr, sink, slab, std
90.snow v0.9.63.0s2.1s (70%)aes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
91.textwrap v0.16.23.0s1.7s (56%)default, smawk, terminal_size, unicode-linebreak, unicode-width
92.sos-migrate v0.17.03.0s1.9s (65%)authenticator, export, full, import, keychain-access
93.rustix v1.0.72.8s0.5s (18%)alloc, default, fs, std
94.i18n-embed v0.15.42.8s2.0s (72%)arc-swap, default, fluent, fluent-syntax, fluent-system, i18n-embed-impl, parking_lot, rust-embed
95.toml v0.5.112.7s1.0s (37%)default
96.der v0.7.102.7s1.4s (53%)alloc, oid, std, zeroize
97.age v0.11.12.7s1.4s (54%)async, default, futures, memchr
98.enum-iterator v2.1.02.6s0.0s (2%)
99.k256 v0.13.42.6s1.9s (71%)alloc, arithmetic, default, digest, ecdsa, ecdsa-core, once_cell, pkcs8, precomputed-tables, schnorr, sha2, sha256, signature, std
100.headers v0.4.02.6s1.1s (42%)
101.kdam v0.6.22.6s1.6s (63%)derive, rich, spinner
102.proc-macro2 v1.0.952.6s1.6s (62%)default, proc-macro
103.tungstenite v0.26.22.5s1.5s (60%)__rustls-tls, data-encoding, handshake, http, httparse, rustls, rustls-pki-types, sha1
104.der-parser v9.0.02.5s1.1s (44%)bigint, default, num-bigint, std
105.anticipate-runner v0.5.12.5s1.3s (53%)
106.itertools v0.13.02.5s0.1s (5%)default, use_alloc, use_std
107.darling_core v0.20.112.5s1.2s (49%)strsim, suggestions
108.prost-derive v0.13.52.4s
109.yasna v0.5.22.4s1.1s (47%)default, std, time
110.regex-syntax v0.8.52.3s0.8s (33%)default, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
111.chrono v0.4.412.3s1.2s (53%)alloc, android-tzdata, clock, iana-time-zone, js-sys, now, std, wasm-bindgen, wasmbind, winapi, windows-link
112.sos-integrity v0.17.12.3s1.8s (80%)files, full
113.idna v1.0.32.2s1.7s (76%)alloc, compiled_data, std
114.tower-http v0.6.42.2s1.0s (47%)cors, default, follow-redirect, futures-util, iri-string, tower, trace, tracing
115.prost-types v0.13.52.1s0.5s (24%)
116.winnow v0.7.102.1s0.2s (11%)alloc, default, std
117.csv-async v1.3.12.1s0.6s (29%)default, itoa, ryu, serde, tokio, tokio-stream, tokio1, with_serde
118.time v0.3.412.1s0.6s (30%)alloc, default, formatting, parsing, std
119.sos-database-upgrader v0.17.12.0s0.3s (13%)archive, full
120.crypto-bigint v0.5.52.0s0.6s (30%)generic-array, rand_core, zeroize
121.tracing-appender v0.2.32.0s1.3s (65%)
122.num-rational v0.4.22.0s1.0s (52%)num-bigint, num-bigint-std, std
123.semver v1.0.262.0s1.1s (55%)default, serde, std
124.nom v7.1.32.0s0.2s (8%)alloc, default, std
125.icu_properties v2.0.11.9s0.9s (48%)compiled_data
126.sos-search v0.17.11.9s1.4s (75%)
127.prost-build v0.13.51.9s1.1s (56%)default, format
128.keyring v3.6.21.9s1.3s (66%)apple-native, sync-secret-service, windows-native
129.url v2.5.41.9s1.0s (53%)default, serde, std
130.sos-ipc v0.17.01.9s0.7s (37%)async-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
131.matchit v0.7.31.9s0.7s (37%)default
132.interprocess v2.2.31.8s0.4s (23%)async, default, futures-core, tokio
133.async_zip v0.0.171.8s0.4s (25%)async-compression, deflate, tokio, tokio-util
134.matchit v0.8.41.8s0.9s (52%)default
135.sql_query_builder v2.4.21.8s1.2s (67%)sqlite
136.axum-server v0.7.21.8s0.6s (37%)arc-swap, default, rustls, rustls-pemfile, rustls-pki-types, tls-rustls-no-provider, tokio-rustls
137.icu_properties v2.0.11.7s0.3s (18%)compiled_data
138.aho-corasick v1.1.31.7s0.8s (46%)perf-literal, std
139.time-macros v0.2.221.7sformatting, parsing, serde
140.zerocopy v0.8.251.7s0.1s (4%)simd
141.prettyplease v0.2.331.7s0.6s (34%)
142.notify-types v1.0.11.7s0.6s (34%)serde
143.itertools v0.14.01.7s0.1s (4%)default, use_alloc, use_std
144.i18n-config v0.4.71.7s1.1s (66%)
145.i18n-embed v0.15.41.6s1.0s (64%)arc-swap, default, filesystem-assets, fluent, fluent-syntax, fluent-system, i18n-embed-impl, parking_lot, rust-embed, walkdir
146.serde_json_path_core v0.2.21.6s0.9s (54%)default, functions
147.curve25519-dalek v4.1.31.6s0.6s (36%)alloc, default, digest, precomputed-tables, zeroize
148.derive_builder_core v0.20.21.6s0.8s (52%)lib_has_std
149.sos-database v0.17.01.6s0.7s (42%)archive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
150.libc v0.2.1721.5s0.2s (10%)default, extra_traits, std
151.toml v0.8.221.5s0.9s (58%)default, display, parse
152.url v2.5.41.5s0.5s (33%)default, std
153.axum-extra v0.10.11.5s0.3s (19%)default, tracing, typed-header
154.deranged v0.4.01.5s0.0s (3%)alloc, powerfmt, serde, std
155.cc v1.2.251.5s0.6s (44%)
156.signal-hook v0.3.181.5s0.7s (47%)channel, default, iterator
157.png v0.17.161.4s0.8s (54%)
158.basic-toml v0.1.101.4s0.5s (34%)
159.data-encoding v2.9.01.4s1.1s (75%)alloc, default, std
160.age-core v0.11.01.4s1.0s (70%)
161.logos-codegen v0.15.01.4s0.7s (52%)
162.sos-login v0.17.21.4s0.7s (48%)files, full
163.anticipate v0.10.01.4s0.7s (50%)
164.time-tz v2.0.0 build script1.4sdb, default, js-sys, system, thiserror, windows-sys
165.time-tz v2.0.0 build script (run)1.4sdb, default, js-sys, system, thiserror, windows-sys
166.icu_locale_core v2.0.01.3s0.6s (46%)zerovec
167.rand v0.9.11.3s0.2s (18%)alloc, default, os_rng, small_rng, std, std_rng, thread_rng
168.derive_builder_core v0.10.21.3s0.6s (47%)
169.doctest-file v1.0.01.3s
170.http v1.3.11.2s0.4s (35%)default, std
171.fs-err v3.1.01.2s0.4s (29%)tokio
172.tracing-attributes v0.1.281.2s
173.bytes v1.10.11.2s0.2s (16%)
174.hashbrown v0.15.31.2s0.0s (3%)
175.zerofrom-derive v0.1.61.2s
176.zerovec v0.11.21.2s0.0s (4%)alloc, derive, yoke
177.i18n-embed-fl v0.9.41.2s
178.probability v0.20.31.2s0.3s (30%)
179.sos-artifact v0.8.91.1s0.3s (22%)
180.thiserror-impl v2.0.121.1s
181.fluent-bundle v0.15.31.1s0.6s (55%)default
182.uriparse v0.6.41.1s0.5s (46%)default
183.enum-iterator-derive v1.4.01.1s
184.pin-project-internal v1.1.101.1s
185.anyhow v1.0.981.1s0.5s (47%)default, std
186.sos-remote-sync v0.17.01.1s0.1s (8%)files, full
187.sos-sync v0.17.01.1s0.3s (23%)files, full
188.zerovec v0.11.21.1s0.0s (3%)alloc, derive, yoke
189.linux-raw-sys v0.4.151.1s0.0s (3%)elf, errno, general, if_ether, ioctl, net, netlink, no_std, system, xdp
190.yansi v1.0.11.1s0.3s (25%)alloc, default, std
191.indexmap v2.9.01.0s0.0s (3%)default, serde, std
192.tokio-util v0.7.151.0s0.3s (31%)codec, compat, default, futures-io, io
193.tokio-stream v0.1.171.0s0.1s (12%)default, time
194.oid-registry v0.7.11.0s0.5s (49%)crypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
195.xml-rs v0.8.261.0s0.4s (40%)
196.idna v1.0.31.0s0.6s (56%)alloc, compiled_data, std
197.sharded-slab v0.1.71.0s0.1s (6%)
198.fluent-bundle v0.15.31.0s0.4s (41%)default
199.zerovec-derive v0.11.11.0s
200.thiserror-impl v1.0.691.0s
201.rustls-pki-types v1.12.01.0s0.6s (57%)alloc, default, std
202.icu_normalizer v2.0.01.0s0.3s (33%)compiled_data
203.indexmap v2.9.01.0s0.0s (3%)default, std
204.sos-reducers v0.17.01.0s0.1s (6%)files
205.totp-rs v5.7.01.0s0.5s (48%)default, otpauth, qr, serde, serde_support, url, urlencoding, zeroize
206.miniz_oxide v0.8.80.9s0.4s (46%)default, simd, simd-adler32, with-alloc
207.binary-stream v10.0.00.9s0.0s (2%)async, default, tokio
208.serde_with_macros v3.12.00.9s
209.asn1-rs-derive v0.5.10.9s
210.yoke-derive v0.8.00.9s
211.nix v0.28.0 build script0.9sfs, ioctl, poll, process, signal, term
212.tempfile v3.20.00.9s0.5s (53%)default, getrandom
213.urn v0.7.00.9s0.5s (59%)alloc, default, serde, std
214.futures-lite v2.6.00.9s0.0s (5%)alloc, fastrand, futures-io, parking, std
215.rustyline-derive v0.11.10.9s
216.memchr v2.7.40.8s0.4s (45%)alloc, default, std
217.icu_locale_core v2.0.00.8s0.3s (37%)zerovec
218.strsim v0.11.10.8s0.5s (60%)
219.diff v0.1.130.8s0.5s (65%)
220.intl_pluralrules v7.0.20.8s0.2s (29%)
221.rand_chacha v0.3.10.8s0.6s (77%)std
222.refinery-core v0.8.160.8s0.3s (36%)default
223.icu_normalizer v2.0.00.8s0.5s (58%)compiled_data
224.prost v0.13.50.8s0.1s (15%)default, derive, std
225.bytes v1.10.10.8s0.2s (24%)default, std
226.rustversion v1.0.210.8s
227.sos-archive v0.17.00.8s0.4s (56%)
228.yansi v1.0.10.8s0.2s (26%)alloc, default, std
229.async-trait v0.1.880.8s
230.radix_trie v0.2.10.8s0.2s (27%)
231.sec1 v0.7.30.8s0.5s (63%)alloc, default, der, point, std, subtle, zeroize
232.uuid v1.17.00.8s0.3s (34%)default, rng, serde, std, v4
233.inotify v0.10.20.7s0.3s (34%)
234.rand_chacha v0.9.00.7s0.6s (80%)std
235.rand v0.8.50.7s0.1s (14%)alloc, default, getrandom, libc, rand_chacha, std, std_rng
236.nix v0.30.1 build script0.7sfs, process, signal
237.rusqlite v0.32.10.7s0.3s (48%)backup, bundled, modern_sqlite
238.chbs v0.1.10.7s0.4s (60%)
239.sos-protocol v0.17.0 build script0.7sbs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
240.sos-signer v0.17.00.7s0.4s (58%)
241.deranged v0.4.00.7s0.0s (3%)alloc, powerfmt, std
242.libc v0.2.1720.7s0.0s (5%)default, std
243.ecdsa v0.16.90.7s0.1s (10%)alloc, arithmetic, der, digest, hazmat, pkcs8, rfc6979, signing, spki, std, verifying
244.kdam_derive v0.1.00.7s
245.tower v0.5.20.7s0.0s (7%)__common, futures-core, futures-util, log, make, pin-project-lite, sync_wrapper, timeout, tokio, tracing, util
246.futures-macro v0.3.310.7s
247.icu_collections v2.0.00.7s0.3s (44%)
248.sos-audit v0.17.00.7s0.2s (23%)
249.socket2 v0.5.100.7s0.3s (51%)all
250.tracing-core v0.1.330.6s0.3s (49%)default, once_cell, std
251.pretty_assertions v1.4.10.6s0.3s (54%)default, std
252.proc-macro2 v1.0.950.6s0.2s (37%)default, proc-macro
253.tokio-tungstenite v0.26.20.6s0.0s (3%)__rustls-tls, connect, default, handshake, rustls, rustls-pki-types, rustls-tls-webpki-roots, stream, tokio-rustls, webpki-roots
254.memchr v2.7.40.6s0.2s (27%)alloc, std
255.logos-derive v0.14.40.6s
256.refinery-core v0.8.160.6s0.4s (60%)default, rusqlite, serde, toml
257.pkcs8 v0.10.20.6s0.4s (69%)alloc, std
258.proc-macro2-diagnostics v0.10.10.6s0.3s (46%)colors, default, yansi
259.ipnet v2.11.00.6s0.4s (62%)default, std
260.serde_path_to_error v0.1.170.6s0.1s (14%)
261.num-traits v0.2.190.6s0.1s (16%)default, i128, std
262.is-wsl v0.4.00.6s0.4s (70%)
263.anstream v0.6.180.6s0.2s (40%)auto, default, wincon
264.vcpkg v0.2.150.6s0.4s (65%)
265.pem v3.0.50.6s0.4s (61%)default, serde, std
266.crossbeam-channel v0.5.150.6s0.2s (28%)default, std
267.icu_collections v2.0.00.6s0.2s (27%)
268.linux-raw-sys v0.9.40.6s0.0s (6%)elf, errno, general, ioctl, no_std
269.colored v2.2.00.6s0.3s (50%)
270.libm v0.2.15 build script0.6sarch, default
271.aes v0.8.40.6s0.2s (36%)
272.fdeflate v0.3.70.6s0.3s (49%)
273.parse-zoneinfo v0.3.10.6s0.3s (53%)
274.serde_json_path_macros_internal v0.1.20.6s
275.async-sqlite v0.4.00.6s0.4s (79%)backup, bundled, default
276.ptyprocess v0.4.10.6s0.4s (66%)
277.num-integer v0.1.460.6s0.2s (29%)i128, std
278.hashbrown v0.14.50.6s0.0s (5%)ahash, allocator-api2, default, inline-more
279.generic-array v0.14.70.6s0.0s (4%)more_lengths, zeroize
280.synstructure v0.13.20.6s0.2s (40%)default, proc-macro
281.intl_pluralrules v7.0.20.5s0.3s (49%)
282.uuid v1.17.00.5s0.1s (18%)default, serde, std
283.sha2 v0.10.90.5s0.3s (60%)default, std
284.refinery-macros v0.8.160.5s
285.tempfile v3.20.00.5s0.2s (41%)default, getrandom
286.typenum v1.18.00.5s0.0s (3%)
287.regex v1.11.10.5s0.2s (45%)default, perf, perf-backtrack, perf-cache, perf-dfa, perf-inline, perf-literal, perf-onepass, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
288.filetime v0.2.250.5s0.2s (33%)
289.blake2 v0.10.60.5s0.3s (53%)default, std
290.parking_lot v0.12.40.5s0.3s (61%)default
291.crossbeam-utils v0.8.210.5s0.1s (21%)std
292.unicode-width v0.2.00.5s0.1s (12%)cjk, default
293.rust-embed-impl v8.7.20.5s
294.hyper-rustls v0.27.60.5s0.2s (39%)http1, ring, tls12, webpki-roots, webpki-tokio
295.tokio-rustls v0.26.20.5s0.0s (6%)ring, tls12
296.argon2 v0.5.30.5s0.2s (44%)alloc, default, password-hash, rand, std
297.typenum v1.18.00.5s0.0s (5%)
298.unicode-linebreak v0.1.50.5s0.1s (15%)
299.elliptic-curve v0.13.80.5s0.0s (4%)alloc, arithmetic, digest, ff, group, hazmat, pkcs8, sec1, std
300.nu-ansi-term v0.46.00.5s0.2s (43%)
301.qrcodegen v1.8.00.5s0.3s (67%)
302.displaydoc v0.2.50.5sdefault, std
303.sos-external-files v0.17.00.5s0.0s (8%)files, full
304.tokio-macros v2.5.00.5s
305.unicode-width v0.1.140.5s0.1s (13%)cjk, default
306.is-docker v0.2.00.5s0.3s (68%)
307.async-recursion v1.1.10.5s
308.xclipboard v0.16.10.5s0.1s (11%)
309.hashbrown v0.15.30.5s0.0s (5%)
310.poly1305 v0.8.00.5s0.2s (52%)
311.mime_guess v2.0.50.5s0.1s (32%)default, rev-mappings
312.hex v0.4.30.5s0.0s (7%)alloc, default, serde, std
313.prost v0.13.50.5s0.0s (5%)derive, prost-derive
314.csv-core v0.1.120.5s0.2s (45%)default
315.sos-system-messages v0.17.00.5s0.1s (13%)
316.curve25519-dalek-derive v0.1.10.5s
317.mio v1.0.40.5s0.2s (41%)default, log, net, os-ext, os-poll
318.terminal-banner v0.4.10.4s0.3s (64%)color, colored
319.generic-array v0.14.70.4s0.0s (3%)more_lengths
320.fixedbitset v0.5.70.4s0.1s (32%)
321.bitflags v2.9.10.4s0.3s (57%)serde, std
322.zeroize_derive v1.4.20.4s
323.password-hash v0.5.00.4s0.2s (47%)alloc, default, rand_core, std
324.rustls-pemfile v2.2.00.4s0.2s (47%)default, std
325.rs_merkle v1.5.00.4s0.2s (51%)default, std
326.rand v0.8.50.4s0.0s (5%)small_rng
327.pkg-config v0.3.320.4s0.2s (55%)
328.ring v0.17.14 build script0.4salloc, default, dev_urandom_fallback, std
329.flate2 v1.1.10.4s0.1s (21%)any_impl, default, miniz_oxide, rust_backend
330.oid-registry v0.7.1 build script0.4scrypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
331.sos-preferences v0.17.00.4s0.1s (21%)
332.sos-password v0.17.00.4s0.2s (46%)
333.shell-words v1.1.00.4s0.2s (60%)default, std
334.cookie-factory v0.3.30.4s0.0s (6%)async, default, futures, std
335.unicode-segmentation v1.12.00.4s0.1s (27%)
336.unic-langid-impl v0.9.60.4s0.1s (39%)serde
337.bitflags v2.9.10.4s0.1s (19%)std
338.base64 v0.22.10.4s0.1s (33%)alloc, default, std
339.serde-xml-rs v0.5.10.4s0.0s (8%)
340.unic-langid-impl v0.9.60.4s0.2s (51%)
341.heck v0.4.10.4s0.2s (43%)default
342.i18n-embed-impl v0.8.40.4sdefault, find-crate, fluent-system, i18n-config, quote
343.sos-server v0.17.0 build script0.4sacme, audit, default, listen, pairing, sos-audit
344.asn1-rs-impl v0.2.00.4s
345.rustversion v1.0.21 build script0.4s
346.ppv-lite86 v0.2.210.4s0.0s (6%)simd, std
347.regex v1.11.10.4s0.1s (29%)default, perf, perf-backtrack, perf-cache, perf-dfa, perf-inline, perf-literal, perf-onepass, std, unicode, unicode-age, unicode-bool, unicode-case, unicode-gencat, unicode-perl, unicode-script, unicode-segment
348.icu_provider v2.0.00.4s0.1s (24%)baked, zerotrie
349.sos-platform-authenticator v0.17.0 build script0.4s
350.special v0.10.30.4s0.1s (37%)
351.sha3 v0.10.80.4s0.1s (38%)default, std
352.clap_lex v0.7.40.3s0.1s (41%)
353.anstyle v1.0.100.3s0.1s (22%)default, std
354.num-iter v0.1.450.3s0.0s (13%)i128, std
355.mime_guess v2.0.5 build script0.3sdefault, rev-mappings
356.serde_urlencoded v0.7.10.3s0.0s (11%)
357.probly-search v2.0.10.3s
358.toml_datetime v0.6.90.3s0.1s (37%)serde
359.signal-hook-registry v1.4.50.3s0.2s (55%)
360.autocfg v1.4.00.3s0.2s (53%)
361.terminal-banner v0.4.1 build script0.3scolor, colored
362.darling_macro v0.12.40.3s
363.sha2 v0.10.90.3s0.1s (23%)default, std
364.sos-changes v0.17.0 build script0.3schanges-consumer, changes-producer, tokio-util
365.fallible-iterator v0.3.00.3s0.0s (4%)alloc, default
366.base64ct v1.7.30.3s0.1s (20%)alloc, std
367.typed-generational-arena v0.2.90.3s0.0s (5%)default, std
368.base64 v0.21.70.3s0.1s (34%)alloc, default, std
369.anyhow v1.0.980.3s0.1s (40%)default, std
370.linux-raw-sys v0.9.40.3s0.0s (7%)elf, errno, general, ioctl, no_std
371.fluent-syntax v0.11.10.3s0.1s (19%)default
372.semver v1.0.26 build script0.3sdefault, serde, std
373.derive_builder_macro v0.10.20.3s
374.fastrand v2.3.00.3s0.1s (26%)alloc, default, std
375.walkdir v2.5.00.3s0.2s (57%)
376.derive_builder_macro v0.20.20.3slib_has_std
377.hashlink v0.9.10.3s0.0s (3%)
378.open v5.3.20.3s0.1s (31%)
379.async-fd-lock v0.2.00.3s0.0s (7%)async, default
380.tracing-log v0.2.00.3s0.1s (45%)log-tracer, std
381.either v1.15.00.3s0.0s (4%)std, use_std
382.writeable v0.6.10.3s0.1s (38%)
383.proc-macro2-diagnostics v0.10.1 build script0.3scolors, default, yansi
384.thread_local v1.1.80.3s0.1s (36%)
385.allocator-api2 v0.2.210.3s0.0s (11%)alloc
386.fluent-syntax v0.11.10.3s0.0s (13%)default
387.spki v0.7.30.3s0.1s (30%)alloc, std
388.sos-unit-tests v0.17.0 build script0.3sdefault, files, listen
389.mime v0.3.170.3s0.2s (57%)
390.sos-cli-helpers v0.1.10.3s0.1s (22%)
391.httparse v1.10.10.3s0.1s (40%)default, std
392.zerotrie v0.2.20.3s0.1s (20%)yoke, zerofrom
393.parking_lot v0.12.40.3s0.1s (41%)default
394.sos-database-upgrader v0.17.1 build script0.3sarchive, full
395.semver v1.0.260.3s0.1s (23%)default, std
396.byteorder-lite v0.1.00.3s0.0s (5%)default, std
397.rusticata-macros v4.1.00.3s0.1s (47%)
398.async-compression v0.4.230.3s0.0s (7%)deflate, flate2, futures-io
399.once_cell v1.21.30.3s0.0s (13%)alloc, default, race, std
400.sos-platform-authenticator v0.17.00.3s0.1s (38%)
401.scrypt v0.11.00.3s0.1s (55%)
402.zerocopy v0.8.25 build script0.3ssimd
403.sos-integrity v0.17.1 build script0.3sfiles, full
404.logos-derive v0.15.00.2s
405.qrcodegen-image v1.5.00.2s0.2s (74%)base64
406.sos-security-report v0.17.10.2s0.0s (6%)
407.zerotrie v0.2.20.2s0.0s (11%)yoke, zerofrom
408.bech32 v0.9.10.2s0.1s (50%)default, std
409.iana-time-zone v0.1.630.2s0.2s (63%)fallback
410.ed25519-dalek v2.1.10.2s0.1s (40%)alloc, default, fast, rand_core, std, zeroize
411.find-crate v0.6.30.2s0.1s (29%)
412.sha1 v0.10.60.2s0.1s (55%)default, std
413.icu_provider v2.0.00.2s0.0s (14%)baked, zerotrie
414.rustc_version v0.4.10.2s0.1s (50%)
415.ctrlc v3.4.70.2s0.1s (26%)
416.aliasable v0.1.30.2s0.1s (23%)alloc, default
417.sos-web v0.17.0 build script0.2sarchive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
418.utoipa-rapidoc v6.0.00.2s0.1s (35%)axum
419.proc-macro-error-attr2 v2.0.00.2s
420.walkdir v2.5.00.2s0.1s (46%)
421.writeable v0.6.10.2s0.1s (24%)
422.futures-executor v0.3.310.2s0.1s (59%)std
423.logos v0.14.40.2s0.0s (6%)default, export_derive, logos-derive, std
424.strsim v0.11.10.2s0.1s (45%)
425.tracing v0.1.410.2s0.1s (37%)attributes, default, log, std, tracing-attributes
426.sos-sdk v0.17.1 build script0.2sfiles, full
427.sos-ipc v0.17.0 build script0.2sasync-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
428.sos-migrate v0.17.0 build script0.2sauthenticator, export, full, import, keychain-access
429.parking_lot_core v0.9.110.2s0.1s (30%)
430.lock_api v0.4.130.2s0.0s (7%)atomic_usize, default
431.httpdate v1.0.30.2s0.1s (53%)
432.cfg_eval v0.1.20.2sdefault
433.parking_lot_core v0.9.110.2s0.1s (24%)
434.rustix v0.38.44 build script0.2salloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
435.proc-macro-error2 v2.0.10.2s0.1s (45%)default, syn-error
436.version_check v0.9.50.2s0.1s (60%)
437.digest v0.10.70.2s0.0s (7%)alloc, block-buffer, const-oid, core-api, default, mac, oid, std, subtle
438.const-oid v0.9.60.2s0.1s (37%)
439.quote v1.0.400.2s0.1s (34%)default, proc-macro
440.futures-channel v0.3.310.2s0.0s (8%)alloc, default, futures-sink, sink, std
441.anstyle-parse v0.2.60.2s0.0s (20%)default, utf8
442.memoffset v0.7.1 build script0.2sdefault
443.litemap v0.8.00.2s0.0s (5%)alloc
444.strsim v0.10.00.2s0.1s (50%)
445.arc-swap v1.7.10.2s0.0s (17%)
446.minimal-lexical v0.2.10.2s0.1s (26%)std
447.intl-memoizer v0.5.30.2s0.1s (45%)
448.sos-extension-service v0.17.00.2s0.0s (7%)
449.typeshare-annotation v1.0.40.2s
450.cipher v0.4.40.2s0.0s (7%)zeroize
451.fastrand v2.3.00.2s0.0s (18%)alloc, default, std
452.signal-hook-mio v0.2.40.2s0.0s (12%)mio-1_0, support-v1_0
453.intl-memoizer v0.5.30.2s0.1s (52%)
454.smallvec v1.15.00.2s0.0s (10%)const_generics, const_new
455.darling_macro v0.20.110.2s
456.etcetera v0.8.00.2s0.1s (44%)
457.endian-type v0.1.20.2s0.0s (8%)
458.comma v1.0.00.2s0.1s (47%)
459.nibble_vec v0.1.00.2s0.0s (12%)
460.rustix v1.0.7 build script0.2salloc, default, fs, std
461.sos-debug-snapshot v0.17.00.2s0.1s (29%)
462.signal-hook v0.3.18 build script0.2schannel, default, iterator
463.fd-lock v4.0.40.2s0.0s (10%)
464.simd-adler32 v0.3.70.2s0.1s (51%)const-generics, default, std
465.http-body-util v0.1.30.2s0.0s (4%)default
466.multimap v0.10.10.2s0.0s (8%)
467.utf-8 v0.7.60.2s0.0s (25%)
468.tinystr v0.8.10.2s0.0s (16%)alloc, default, zerovec
469.inotify-sys v0.1.50.2s0.0s (13%)
470.bit-set v0.5.30.2s0.0s (8%)std
471.getrandom v0.3.30.2s0.0s (18%)
472.bytemuck v1.23.00.2s0.0s (7%)extern_crate_alloc
473.arc-swap v1.7.10.2s0.0s (14%)
474.rustix v1.0.7 build script0.2salloc, default, fs, std, termios
475.balloon-hash v0.4.00.2s0.0s (24%)alloc, default, password-hash, rand, std
476.libc v0.2.172 build script0.2sdefault, std
477.smawk v0.3.20.2s0.0s (10%)
478.fluent-langneg v0.13.00.2s0.1s (28%)default
479.libsqlite3-sys v0.30.1 build script0.2sbundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
480.polyval v0.6.20.2s0.1s (34%)
481.log v0.4.270.2s0.1s (30%)std
482.type-map v0.5.10.2s0.1s (53%)
483.typeshare v1.0.40.2s0.0s (20%)default, wasmbind
484.httparse v1.10.1 build script0.2sdefault, std
485.libdbus-sys v0.2.50.2s0.0s (12%)default, pkg-config
486.type-map v0.5.10.2s0.0s (26%)
487.bit-vec v0.6.30.2s0.0s (15%)std
488.keccak v0.1.50.2s0.1s (35%)
489.rust-embed-utils v8.7.20.2s0.1s (53%)
490.rand_core v0.6.40.2s0.1s (30%)alloc, getrandom, std
491.either v1.15.00.2s0.0s (6%)std, use_std
492.libc v0.2.172 build script0.2sdefault, extra_traits, std
493.anyhow v1.0.98 build script0.2sdefault, std
494.toml_write v0.1.10.2s0.0s (19%)alloc, default, std
495.powerfmt v0.2.00.2s0.0s (29%)
496.powerfmt v0.2.00.2s0.0s (14%)
497.getrandom v0.3.3 build script0.2sstd
498.once_cell v1.21.30.2s0.0s (19%)alloc, default, race, std
499.phf_generator v0.11.30.2s0.1s (41%)
500.fluent-langneg v0.13.00.2s0.1s (47%)default
501.sos-login v0.17.2 build script0.2sfiles, full
502.typenum v1.18.0 build script0.2s
503.sos-search v0.17.1 build script0.2s
504.chacha20 v0.9.10.2s0.0s (12%)zeroize
505.unicode-ident v1.0.180.2s0.0s (16%)
506.tracing-serde v0.2.00.2s0.0s (8%)
507.proc-macro2 v1.0.95 build script0.2sdefault, proc-macro
508.getrandom v0.3.3 build script0.2s
509.litemap v0.8.00.2s0.0s (5%)alloc
510.rand_core v0.9.30.2s0.0s (30%)os_rng, std
511.lock_api v0.4.130.2s0.0s (7%)atomic_usize, default
512.pathdiff v0.2.30.2s0.0s (22%)
513.sos-remote-sync v0.17.0 build script0.2sfiles, full
514.base32 v0.5.10.2s0.1s (55%)
515.smallvec v1.15.00.1s0.0s (11%)const_generics
516.libdbus-sys v0.2.5 build script0.1sdefault, pkg-config
517.syn v1.0.109 build script0.1sclone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
518.heck v0.5.00.1s0.1s (50%)
519.thiserror v2.0.12 build script0.1sdefault, std
520.potential_utf v0.1.20.1s0.0s (17%)zerovec
521.sos-password v0.17.0 build script0.1s
522.serde_spanned v0.6.80.1s0.0s (16%)serde
523.xclipboard v0.16.1 build script0.1s
524.terminal_size v0.4.20.1s0.1s (49%)
525.phf_shared v0.11.30.1s0.0s (21%)std
526.getrandom v0.3.30.1s0.0s (31%)std
527.sos-server-storage v0.17.1 build script0.1saudit, files, full, sos-audit, sos-external-files
528.bs58 v0.4.00.1s0.0s (34%)alloc, default, std
529.crc32fast v1.4.20.1s0.0s (30%)default, std
530.fs-err v3.1.0 build script0.1stokio
531.unicase v2.8.10.1s0.0s (29%)
532.thiserror v1.0.69 build script0.1s
533.tinystr v0.8.10.1s0.0s (6%)alloc, default, zerovec
534.secrecy v0.10.30.1s0.0s (24%)serde
535.sos-client-storage v0.17.1 build script0.1sarchive, audit, files, full, search, sos-audit, sos-external-files, sos-search
536.getrandom v0.2.160.1s0.0s (32%)std
537.serde v1.0.219 build script0.1sdefault, derive, serde_derive, std
538.num_threads v0.1.70.1s0.1s (69%)
539.yoke v0.8.00.1s0.0s (8%)alloc, derive, zerofrom
540.ryu v1.0.200.1s0.1s (49%)
541.form_urlencoded v1.2.10.1s0.0s (38%)alloc, default, std
542.copy_dir v0.1.30.1s0.0s (14%)
543.sos-account v0.17.4 build script0.1sarchive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
544.siphasher v1.0.10.1s0.0s (15%)default, std
545.sos-net v0.17.3 build script0.1sarchive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
546.crossbeam-utils v0.8.21 build script0.1sstd
547.matchers v0.1.00.1s0.0s (16%)
548.prettyplease v0.2.33 build script0.1s
549.ed25519 v2.2.30.1s0.1s (41%)alloc, std
550.headers-core v0.3.00.1s0.0s (33%)
551.utf8_iter v1.0.40.1s0.0s (19%)
552.serde v1.0.219 build script0.1salloc, default, derive, serde_derive, std
553.ahash v0.8.120.1s0.0s (20%)
554.yoke v0.8.00.1s0.0s (6%)alloc, derive, zerofrom
555.shlex v1.3.00.1s0.0s (22%)default, std
556.ctr v0.9.20.1s0.0s (7%)
557.rev_buf_reader v0.3.00.1s0.0s (11%)default
558.digest v0.10.70.1s0.0s (8%)alloc, block-buffer, core-api, default, std
559.instant v0.1.130.1s0.0s (23%)
560.num v0.4.30.1s0.0s (23%)default, num-bigint, std
561.group v0.13.00.1s0.0s (21%)alloc
562.snow v0.9.6 build script0.1saes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
563.siphasher v1.0.10.1s0.0s (19%)default, std
564.anyhow v1.0.98 build script (run)0.1sdefault, std
565.log v0.4.270.1s0.0s (13%)
566.base16ct v0.2.00.1s0.0s (30%)alloc
567.memoffset v0.7.1 build script (run)0.1sdefault
568.icu_properties_data v2.0.10.1s0.0s (13%)
569.proc-macro2 v1.0.95 build script (run)0.1sdefault, proc-macro
570.random v0.13.20.1s0.0s (16%)
571.same-file v1.0.60.1s0.0s (11%)
572.zeroize v1.8.10.1s0.0s (21%)alloc, default, derive, zeroize_derive
573.protoc-bin-vendored-linux-ppcle_64 v3.1.00.1s0.0s (23%)
574.unicase v2.8.10.1s0.0s (21%)
575.sos-logs v0.17.0 build script0.1s
576.slab v0.4.90.1s0.0s (7%)default, std
577.phf v0.11.30.1s0.0s (12%)default, std
578.form_urlencoded v1.2.10.1s0.0s (23%)alloc, std
579.protoc-bin-vendored-linux-x86_32 v3.1.00.1s0.0s (24%)
580.phf_shared v0.11.30.1s0.0s (14%)default, std
581.num-conv v0.1.00.1s0.0s (5%)
582.tower-layer v0.3.30.1s0.0s (13%)
583.futures-task v0.3.310.1s0.0s (18%)alloc, std
584.rust-embed-utils v8.7.20.1s0.0s (29%)
585.urlencoding v2.1.30.1s0.0s (35%)
586.webpki-roots v1.0.00.1s0.0s (9%)
587.num-conv v0.1.00.1s0.0s (14%)
588.ouroboros v0.18.50.1s0.0s (38%)default, std
589.block-buffer v0.10.40.1s0.0s (13%)
590.idna_adapter v1.2.10.1s0.0s (18%)compiled_data
591.sanitize-filename v0.6.00.1s0.0s (38%)
592.curve25519-dalek v4.1.3 build script0.1salloc, default, digest, precomputed-tables, zeroize
593.rand_core v0.6.40.1s0.0s (17%)
594.protoc-bin-vendored v3.1.00.1s0.0s (24%)
595.percent-encoding v2.3.10.1s0.0s (41%)alloc, default, std
596.logos v0.15.00.1s0.0s (7%)default, export_derive, logos-derive, std
597.inventory v0.3.200.1s0.0s (18%)
598.want v0.3.10.1s0.0s (32%)
599.fallible-streaming-iterator v0.1.90.1s0.0s (7%)
600.parking_lot_core v0.9.11 build script0.1s
601.aes-gcm v0.10.30.1s0.0s (5%)aes, alloc, default, getrandom, rand_core, std
602.sos-protocol v0.17.0 build script (run)0.1sbs58, contacts, files, full, hashcheck, listen, migrate, network-client, pairing, reqwest, search, sos-external-files, tokio-stream, tokio-tungstenite, tokio-util
603.serde_json v1.0.140 build script0.1sdefault, raw_value, std
604.cfg_aliases v0.1.10.1s0.0s (15%)
605.zerofrom v0.1.60.1s0.0s (10%)alloc, derive
606.ff v0.13.10.1s0.0s (7%)alloc
607.cfg_aliases v0.2.10.1s0.0s (16%)
608.sos-signer v0.17.0 build script0.1s
609.human_bytes v0.4.30.1s0.0s (17%)default, si-units
610.sos-reducers v0.17.0 build script0.1sfiles
611.hmac v0.12.10.1s0.0s (8%)reset
612.itoa v1.0.150.1s0.0s (14%)
613.potential_utf v0.1.20.1s0.0s (32%)zerovec
614.idna_adapter v1.2.10.1s0.0s (14%)compiled_data
615.futures-core v0.3.310.1s0.0s (13%)alloc, default, std
616.clap v4.5.390.1s0.0s (19%)color, default, derive, env, error-context, help, std, suggestions, usage, wrap_help
617.parking v2.2.10.1s0.0s (34%)
618.protoc-bin-vendored-macos-aarch_64 v3.1.00.1s0.0s (37%)
619.sos-external-files v0.17.0 build script0.1sfiles, full
620.percent-encoding v2.3.10.1s0.0s (23%)alloc, std
621.futures-io v0.3.310.1s0.0s (31%)default, std
622.ahash v0.8.12 build script0.1s
623.utf8parse v0.2.20.1s0.0s (16%)default
624.sos-sync v0.17.0 build script0.1sfiles, full
625.zerofrom v0.1.60.1s0.0s (11%)alloc, derive
626.binary-stream v10.0.0 build script0.1sasync, default, tokio
627.derive_builder v0.10.20.1s0.0s (19%)default, std
628.protoc-bin-vendored-linux-x86_64 v3.1.00.1s0.0s (38%)
629.subtle v2.6.10.1s0.0s (14%)default, i128, std
630.salsa20 v0.10.20.1s0.0s (8%)
631.sos-preferences v0.17.0 build script0.1s
632.utf8_iter v1.0.40.1s0.0s (22%)
633.hkdf v0.12.40.1s0.0s (12%)
634.sos-system-messages v0.17.0 build script0.1s
635.derive_builder v0.20.20.1s0.0s (32%)default, std
636.icu_properties_data v2.0.1 build script0.1s
637.inout v0.1.40.1s0.0s (9%)
638.sos-database v0.17.0 build script0.1sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
639.sos-vault v0.17.1 build script0.1s
640.generic-array v0.14.7 build script0.1smore_lengths
641.protoc-bin-vendored-win32 v3.1.00.1s0.0s (37%)
642.sos-backend v0.17.1 build script0.1sarchive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
643.same-file v1.0.60.1s0.0s (33%)
644.semver v1.0.26 build script0.1sdefault, std
645.libsqlite3-sys v0.30.10.1s0.0s (16%)bundled, bundled_bindings, cc, default, min_sqlite_version_3_14_0, pkg-config, vcpkg
646.sos-core v0.17.1 build script0.1sfiles
647.x25519-dalek v2.0.10.1s0.0s (15%)alloc, default, precomputed-tables, static_secrets, zeroize
648.signature v2.2.00.1s0.0s (20%)alloc, digest, rand_core, std
649.logos-codegen v0.15.0 build script0.1s
650.icu_normalizer_data v2.0.0 build script0.1s
651.adler2 v2.0.00.1s0.0s (43%)
652.chacha20poly1305 v0.10.10.1s0.0s (10%)alloc, default, getrandom, rand_core, std
653.memoffset v0.7.10.1s0.0s (15%)default
654.aead v0.5.20.1s0.0s (15%)alloc, getrandom, rand_core, std
655.protoc-bin-vendored-linux-aarch_64 v3.1.00.1s0.0s (33%)
656.protoc-bin-vendored-macos-x86_64 v3.1.00.1s0.0s (31%)
657.sos-integration-tests v0.17.00.1s0.0s (20%)
658.sos-sdk v0.17.10.1s0.0s (11%)files, full
659.lock_api v0.4.13 build script0.1satomic_usize, default
660.colorchoice v1.0.30.1s0.0s (28%)
661.http-body v1.0.10.1s0.0s (16%)
662.slab v0.4.9 build script0.1sdefault, std
663.beef v0.5.20.1s0.0s (8%)default
664.static_assertions v1.1.00.1s0.0s (19%)
665.icu_properties_data v2.0.10.1s0.0s (15%)
666.nonzero_ext v0.1.50.1s0.0s (33%)default, std
667.phf_codegen v0.11.30.1s0.0s (15%)
668.crypto-common v0.1.60.1s0.0s (10%)getrandom, rand_core, std
669.sos-filesystem v0.17.0 build script0.1sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
670.num-traits v0.2.19 build script0.1sdefault, i128, std
671.sos-unit-tests v0.17.00.1s0.0s (18%)default, files, listen
672.sos-command-line-tests v0.17.00.1s0.0s (17%)
673.num-traits v0.2.19 build script (run)0.1sdefault, i128, std
674.generic-array v0.14.7 build script0.1smore_lengths, zeroize
675.ident_case v1.0.10.1s0.0s (18%)
676.rustls v0.23.27 build script0.1sring, std, tls12
677.home v0.5.110.1s0.0s (33%)
678.itoa v1.0.150.1s0.0s (20%)
679.anstyle-query v1.1.20.1s0.0s (19%)
680.sos-integrity v0.17.1 build script (run)0.1sfiles, full
681.universal-hash v0.5.10.1s0.0s (16%)
682.sos-platform-authenticator v0.17.0 build script (run)0.1s
683.darling v0.12.40.1s0.0s (17%)default, suggestions
684.block-buffer v0.10.40.1s0.0s (12%)
685.pbkdf2 v0.12.20.1s0.0s (13%)default, hmac
686.fs-err v3.1.0 build script (run)0.1stokio
687.serde_json_path_macros v0.1.60.1s0.0s (13%)
688.equivalent v1.0.20.1s0.0s (15%)
689.rfc6979 v0.4.00.1s0.0s (12%)
690.ghash v0.5.10.1s0.0s (19%)
691.untrusted v0.9.00.1s0.0s (17%)
692.io_tee v0.1.10.1s0.0s (14%)
693.crypto-common v0.1.60.1s0.0s (19%)std
694.slab v0.4.9 build script (run)0.1sdefault, std
695.time-core v0.1.40.1s0.0s (13%)
696.time-core v0.1.40.1s0.0s (23%)
697.proc-macro2 v1.0.95 build script (run)0.1sdefault, proc-macro
698.proc-macro2-diagnostics v0.10.1 build script (run)0.1scolors, default, yansi
699.atomic-waker v1.1.20.1s0.0s (27%)
700.fluent v0.16.10.1s0.0s (23%)
701.overload v0.1.10.1s0.0s (18%)
702.futures-sink v0.3.310.1s0.0s (1%)alloc, default, std
703.futures v0.3.310.1s0.0s (23%)alloc, async-await, default, executor, futures-executor, std
704.unic-langid v0.9.60.1s0.0s (13%)default, serde
705.rustc-hash v2.1.10.0s0.0s (15%)default, std
706.thiserror v2.0.12 build script (run)0.0sdefault, std
707.is_terminal_polyfill v1.70.10.0s0.0s (17%)default
708.lazy_static v1.5.00.0s0.0s (19%)
709.rust-embed v8.7.20.0s0.0s (26%)
710.sos-changes v0.17.0 build script (run)0.0schanges-consumer, changes-producer, tokio-util
711.webpki-roots v0.26.110.0s0.0s (28%)
712.sos-web v0.17.0 build script (run)0.0sarchive, clipboard, contacts, files, full, migrate, search, sos-migrate, sos-search
713.rustc-hash v2.1.10.0s0.0s (20%)default, std
714.sos-sdk v0.17.1 build script (run)0.0sfiles, full
715.icu_normalizer_data v2.0.00.0s0.0s (28%)
716.sos-server v0.17.0 build script (run)0.0sacme, audit, default, listen, pairing, sos-audit
717.rustc-hash v1.1.00.0s0.0s (15%)default, std
718.cfg-if v0.1.100.0s0.0s (25%)
719.terminal-banner v0.4.1 build script (run)0.0scolor, colored
720.try-lock v0.2.50.0s0.0s (13%)
721.rustc-hash v1.1.00.0s0.0s (5%)default, std
722.sync_wrapper v1.0.20.0s0.0s (24%)futures, futures-core
723.anyhow v1.0.98 build script (run)0.0sdefault, std
724.xclipboard v0.16.1 build script (run)0.0s
725.semver v1.0.26 build script (run)0.0sdefault, serde, std
726.self_cell v1.2.00.0s0.0s (19%)
727.sos-vfs v0.3.20.0s0.0s (20%)
728.lazy_static v1.5.00.0s0.0s (27%)
729.fnv v1.0.70.0s0.0s (25%)default, std
730.self_cell v1.2.00.0s0.0s (24%)
731.rust-embed v8.7.20.0s0.0s (21%)
732.thiserror v2.0.120.0s0.0s (16%)default, std
733.sos-database-upgrader v0.17.1 build script (run)0.0sarchive, full
734.pin-project-lite v0.2.160.0s0.0s (19%)
735.scopeguard v1.2.00.0s0.0s (19%)
736.sos-ipc v0.17.0 build script (run)0.0sasync-trait, base64, clipboard, contacts, extension-helper-client, extension-helper-server, files, futures, http-body-util, hyper, hyper-util, local-transport, matchit, memory-http-server, migrate, notify, open, search, serde_with, sos-logs, sos-platform-authenticator, sos-search, tower
737.lock_api v0.4.13 build script (run)0.0satomic_usize, default
738.cpufeatures v0.2.170.0s0.0s (15%)
739.rustix v0.38.44 build script (run)0.0salloc, default, event, fs, libc-extra-traits, net, std, stdio, system, termios, use-libc-auxv
740.rustix v1.0.7 build script (run)0.0salloc, default, fs, std
741.thiserror v1.0.690.0s0.0s (23%)
742.sos-remote-sync v0.17.0 build script (run)0.0sfiles, full
743.cpufeatures v0.2.170.0s0.0s (18%)
744.thiserror v1.0.690.0s0.0s (26%)
745.unic-langid v0.9.60.0s0.0s (32%)default
746.stable_deref_trait v1.2.00.0s0.0s (31%)alloc
747.constant_time_eq v0.3.10.0s0.0s (24%)
748.thiserror v1.0.69 build script (run)0.0s
749.sos-logs v0.17.0 build script (run)0.0s
750.fluent v0.16.10.0s0.0s (33%)
751.lock_api v0.4.13 build script (run)0.0satomic_usize, default
752.scopeguard v1.2.00.0s0.0s (12%)
753.refinery v0.8.160.0s0.0s (17%)default, rusqlite, toml
754.icu_normalizer_data v2.0.00.0s0.0s (20%)
755.rustix v1.0.7 build script (run)0.0salloc, default, fs, std, termios
756.sos-password v0.17.0 build script (run)0.0s
757.fnv v1.0.70.0s0.0s (16%)default, std
758.equivalent v1.0.20.0s0.0s (15%)
759.bitflags v1.3.20.0s0.0s (25%)default
760.tower-service v0.3.30.0s0.0s (21%)
761.snow v0.9.6 build script (run)0.0saes-gcm, blake2, chacha20poly1305, curve25519-dalek, default, default-resolver, sha2
762.sos-net v0.17.3 build script (run)0.0sarchive, audit, clipboard, contacts, default, files, full, hashcheck, keychain-access, listen, migrate, pairing, search, sos-audit, sos-external-files, sos-migrate, sos-search
763.pin-project v1.1.100.0s0.0s (24%)
764.curve25519-dalek v4.1.3 build script (run)0.0salloc, default, digest, precomputed-tables, zeroize
765.rustversion v1.0.21 build script (run)0.0s
766.thiserror v1.0.69 build script (run)0.0s
767.darling v0.20.110.0s0.0s (18%)default, suggestions
768.sos-account v0.17.4 build script (run)0.0sarchive, audit, clipboard, contacts, files, full, migrate, search, sos-audit, sos-external-files, sos-migrate, sos-search
769.sos-client-storage v0.17.1 build script (run)0.0sarchive, audit, files, full, search, sos-audit, sos-external-files, sos-search
770.sos-database v0.17.0 build script (run)0.0sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-preferences, sos-system-messages, system-messages, urn
771.self_cell v0.10.30.0s0.0s (21%)
772.opaque-debug v0.3.10.0s0.0s (18%)
773.pin-utils v0.1.00.0s0.0s (25%)
774.cfg-if v1.0.00.0s0.0s (26%)
775.sos-login v0.17.2 build script (run)0.0sfiles, full
776.sos-search v0.17.1 build script (run)0.0s
777.sos-server-storage v0.17.1 build script (run)0.0saudit, files, full, sos-audit, sos-external-files
778.stable_deref_trait v1.2.00.0s0.0s (17%)alloc
779.libc v0.2.172 build script (run)0.0sdefault, std
780.ahash v0.8.12 build script (run)0.0s
781.sos-migrate v0.17.0 build script (run)0.0sauthenticator, export, full, import, keychain-access
782.sos-sync v0.17.0 build script (run)0.0sfiles, full
783.self_cell v0.10.30.0s0.0s (21%)
784.signal-hook v0.3.18 build script (run)0.0schannel, default, iterator
785.sos-filesystem v0.17.0 build script (run)0.0sarchive, audit, files, full, preferences, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages
786.generic-array v0.14.7 build script (run)0.0smore_lengths
787.unicode-ident v1.0.180.0s0.0s (70%)
788.typenum v1.18.0 build script (run)0.0s
789.serde v1.0.219 build script (run)0.0sdefault, derive, serde_derive, std
790.prettyplease v0.2.33 build script (run)0.0s
791.sos-system-messages v0.17.0 build script (run)0.0s
792.binary-stream v10.0.0 build script (run)0.0sasync, default, tokio
793.oid-registry v0.7.1 build script (run)0.0scrypto, default, kdf, nist_algs, pkcs1, pkcs12, pkcs7, pkcs9, registry, x509, x962
794.libdbus-sys v0.2.5 build script (run)0.0sdefault, pkg-config
795.sos-preferences v0.17.0 build script (run)0.0s
796.sos-vault v0.17.1 build script (run)0.0s
797.semver v1.0.26 build script (run)0.0sdefault, std
798.serde v1.0.219 build script (run)0.0salloc, default, derive, serde_derive, std
799.syn v1.0.109 build script (run)0.0sclone-impls, default, derive, extra-traits, full, parsing, printing, proc-macro, quote
800.sos-external-files v0.17.0 build script (run)0.0sfiles, full
801.libc v0.2.172 build script (run)0.0sdefault, extra_traits, std
802.sos-reducers v0.17.0 build script (run)0.0sfiles
803.httparse v1.10.1 build script (run)0.0sdefault, std
804.logos-codegen v0.15.0 build script (run)0.0s
805.nix v0.30.1 build script (run)0.0sfs, process, signal
806.generic-array v0.14.7 build script (run)0.0smore_lengths, zeroize
807.parking_lot_core v0.9.11 build script (run)0.0s
808.sos-unit-tests v0.17.0 build script (run)0.0sdefault, files, listen
809.libm v0.2.15 build script (run)0.0sarch, default
810.zerocopy v0.8.25 build script (run)0.0ssimd
811.typenum v1.18.0 build script (run)0.0s
812.nix v0.28.0 build script (run)0.0sfs, ioctl, poll, process, signal, term
813.icu_normalizer_data v2.0.0 build script (run)0.0s
814.icu_properties_data v2.0.1 build script (run)0.0s
815.sos-core v0.17.1 build script (run)0.0sfiles
816.sos-backend v0.17.1 build script (run)0.0sarchive, audit, files, full, preferences, search, sos-archive, sos-audit, sos-external-files, sos-preferences, sos-system-messages, system-messages, urn
817.sos-signer v0.17.0 build script (run)0.0s
818.icu_normalizer_data v2.0.0 build script (run)0.0s
819.mime_guess v2.0.5 build script (run)0.0sdefault, rev-mappings
820.getrandom v0.3.3 build script (run)0.0sstd
821.icu_properties_data v2.0.1 build script (run)0.0s
822.rustls v0.23.27 build script (run)0.0sring, std, tls12
823.getrandom v0.3.3 build script (run)0.0s
824.cfg-if v1.0.00.0s0.0s (94%)
825.serde_json v1.0.140 build script (run)0.0sdefault, raw_value, std
826.crossbeam-utils v0.8.21 build script (run)0.0sstd
827.parking_lot_core v0.9.11 build script (run)0.0s
+ + + diff --git a/sandbox/.gitignore b/sandbox/.gitignore index 5c532857cf..296754d681 100644 --- a/sandbox/.gitignore +++ b/sandbox/.gitignore @@ -1,10 +1,10 @@ * !.gitignore -!config.toml +!config-filesystem.toml !config-backup.toml !acme.toml !accounts !accounts-backup !acme-cache -!database.toml +!config-database.toml !db_accounts diff --git a/sandbox/accounts/.gitignore b/sandbox/accounts/.gitignore deleted file mode 100644 index d6b7ef32c8..0000000000 --- a/sandbox/accounts/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/sandbox/database.toml b/sandbox/config-database.toml similarity index 100% rename from sandbox/database.toml rename to sandbox/config-database.toml diff --git a/sandbox/config.toml b/sandbox/config-filesystem.toml similarity index 100% rename from sandbox/config.toml rename to sandbox/config-filesystem.toml diff --git a/tests/fixtures/backups/v3/0xba0faea9bbc182e3f4fdb3eea7636b5bb31ea9ac.zip b/tests/fixtures/backups/v3/0xba0faea9bbc182e3f4fdb3eea7636b5bb31ea9ac.zip index dad69c1599..d76afdc78b 100644 Binary files a/tests/fixtures/backups/v3/0xba0faea9bbc182e3f4fdb3eea7636b5bb31ea9ac.zip and b/tests/fixtures/backups/v3/0xba0faea9bbc182e3f4fdb3eea7636b5bb31ea9ac.zip differ diff --git a/tests/fixtures/backups/v3/multiple-accounts.zip b/tests/fixtures/backups/v3/multiple-accounts.zip index 9aba661330..d4964a10a2 100644 Binary files a/tests/fixtures/backups/v3/multiple-accounts.zip and b/tests/fixtures/backups/v3/multiple-accounts.zip differ diff --git a/tests/integration/Cargo.toml b/tests/integration/Cargo.toml index 36e512f188..b4f2813192 100644 --- a/tests/integration/Cargo.toml +++ b/tests/integration/Cargo.toml @@ -40,9 +40,17 @@ tokio = { workspace = true, features = ["rt-multi-thread"] } http.workspace = true anyhow.workspace = true +[dependencies.sos-changes] +workspace = true +features = [ + "changes-producer", + "changes-consumer", +] + [dependencies.sos-ipc] workspace = true features = [ + "extension-helper-client", "extension-helper-server", "extension-helper-client", "contacts", diff --git a/tests/integration/src/test_extension_helper.rs b/tests/integration/src/test_extension_helper.rs index d4fad52ffd..a00f4fdc5e 100644 --- a/tests/integration/src/test_extension_helper.rs +++ b/tests/integration/src/test_extension_helper.rs @@ -1,6 +1,7 @@ use sos_account::{ AccountSwitcherOptions, LocalAccount, LocalAccountSwitcher, }; +use sos_backend::BackendTarget; use sos_ipc::{ extension_helper::server::{ ExtensionHelperOptions, ExtensionHelperServer, @@ -39,6 +40,9 @@ pub async fn main() -> anyhow::Result<()> { ..Default::default() }; let mut accounts = LocalAccountSwitcher::new_with_options(options); + let target = BackendTarget::FileSystem(Paths::new_client( + data_dir.as_ref().unwrap(), + )); accounts .load_accounts( |identity| { @@ -54,7 +58,7 @@ pub async fn main() -> anyhow::Result<()> { .await?) }) }, - data_dir.as_ref(), + target, ) .await?; @@ -65,7 +69,8 @@ pub async fn main() -> anyhow::Result<()> { }; let accounts = Arc::new(RwLock::new(accounts)); let options = ExtensionHelperOptions::new(extension_id, info); - let server = ExtensionHelperServer::new(options, accounts).await?; + let server = + ExtensionHelperServer::new(options, accounts, |_| {}).await?; server.listen().await; Ok(()) } diff --git a/tests/integration/tests/audit_trail/client.rs b/tests/integration/tests/audit_trail/client.rs index 1ab34bced4..5e5b7a02df 100644 --- a/tests/integration/tests/audit_trail/client.rs +++ b/tests/integration/tests/audit_trail/client.rs @@ -1,8 +1,7 @@ use anyhow::Result; use sos_backend::BackendTarget; use sos_client_storage::NewFolderOptions; -use sos_database::open_file; -use sos_test_utils::make_client_backend; +use sos_database::{migrations::migrate_client, open_file}; use crate::test_utils::{mock, setup, teardown}; use futures::{pin_mut, StreamExt}; @@ -11,30 +10,63 @@ use sos_audit::AuditEvent; use sos_migrate::import::ImportTarget; use sos_sdk::prelude::*; use sos_vfs as vfs; -use std::{path::PathBuf, sync::Arc}; +use std::path::PathBuf; #[tokio::test] -async fn audit_trail_client() -> Result<()> { - const TEST_ID: &str = "audit_trail_client"; - // crate::test_utils::init_tracing(); - // +async fn audit_trail_client_fs() -> Result<()> { + const TEST_ID: &str = "audit_trail_client_fs"; + // sos_test_utils::init_tracing(); let mut dirs = setup(TEST_ID, 1).await?; let data_dir = dirs.clients.remove(0); // Configure the audit provider let paths = Paths::new_client(&data_dir); + Paths::scaffold(paths.documents_dir()).await?; paths.ensure().await?; let provider = sos_backend::audit::new_fs_provider(paths.audit_file().to_owned()); sos_backend::audit::init_providers(vec![provider]); - let account_name = TEST_ID.to_string(); + let target = BackendTarget::FileSystem(paths); + run_audit_test(TEST_ID, target).await?; + + teardown(TEST_ID).await; + + Ok(()) +} + +#[tokio::test] +async fn audit_trail_client_db() -> Result<()> { + const TEST_ID: &str = "audit_trail_client_db"; + // sos_test_utils::init_tracing(); + + let mut dirs = setup(TEST_ID, 1).await?; + let data_dir = dirs.clients.remove(0); + + // Configure the audit provider + let paths = Paths::new_client(&data_dir); + let mut client = open_file(paths.database_file()).await?; + migrate_client(&mut client).await?; + + let provider = sos_backend::audit::new_db_provider(client.clone()); + sos_backend::audit::init_providers(vec![provider]); + + let target = BackendTarget::Database(paths, client); + run_audit_test(TEST_ID, target).await?; + + teardown(TEST_ID).await; + + Ok(()) +} + +async fn run_audit_test(name: &str, target: BackendTarget) -> Result<()> { + let account_name = name.to_string(); let (passphrase, _) = generate_passphrase()?; let mut account = LocalAccount::new_account_with_builder( account_name.to_owned(), passphrase.clone(), - make_client_backend(&paths).await?, + target.clone(), |builder| { builder .save_passphrase(false) @@ -51,14 +83,14 @@ async fn audit_trail_client() -> Result<()> { let summary = account.default_folder().await.unwrap(); // Make changes to generate audit logs - simulate_session(&mut account, &summary, &paths).await?; + simulate_session(&mut account, &summary, &target).await?; // Read in the audit log events let events = read_audit_events().await?; let mut kinds: Vec<_> = events.iter().map(|e| e.event_kind()).collect(); //println!("events {:#?}", events); - println!("kinds {:#?}", kinds); + // println!("kinds {:#?}", kinds); // Created the account assert!(matches!(kinds.remove(0), EventKind::CreateAccount)); @@ -121,15 +153,14 @@ async fn audit_trail_client() -> Result<()> { // Imported an account archive assert!(matches!(kinds.remove(0), EventKind::ImportBackupArchive)); - teardown(TEST_ID).await; - Ok(()) } async fn simulate_session( account: &mut LocalAccount, default_folder: &Summary, - paths: &Arc, + target: &BackendTarget, + // paths: &Arc, ) -> Result<()> { // Create a secret let (meta, secret) = mock::note("Audit note", "Note value"); @@ -172,8 +203,10 @@ async fn simulate_session( .rename_folder(new_folder.id(), "New name".to_string()) .await?; - let exported_folder = - paths.documents_dir().join("audit-trail-vault-export.vault"); + let exported_folder = target + .paths() + .documents_dir() + .join("audit-trail-vault-export.vault"); let (export_passphrase, _) = generate_passphrase()?; account .export_folder( @@ -196,13 +229,16 @@ async fn simulate_session( account.delete_folder(new_folder.id()).await?; // Export an account backup archive - let archive = paths + let archive = target + .paths() .documents_dir() .join("audit-trail-exported-archive.zip"); account.export_backup_archive(&archive).await?; - let unsafe_archive = - paths.documents_dir().join("audit-trail-unsafe-archive.zip"); + let unsafe_archive = target + .paths() + .documents_dir() + .join("audit-trail-unsafe-archive.zip"); account.export_unsafe_archive(unsafe_archive).await?; let import_file = "../fixtures/migrate/bitwarden-export.csv"; @@ -217,7 +253,8 @@ async fn simulate_session( let vcard = vfs::read_to_string(contacts).await?; account.import_contacts(&vcard, |_| {}).await?; - let exported_contacts = paths + let exported_contacts = target + .paths() .documents_dir() .join("audit-trail-exported-contacts.vcf"); account.export_all_contacts(exported_contacts).await?; @@ -225,14 +262,7 @@ async fn simulate_session( // Delete the account account.delete_account().await?; - let target = if paths.is_using_db() { - let client = open_file(paths.database_file()).await?; - BackendTarget::Database(paths.clone(), client) - } else { - BackendTarget::FileSystem(paths.clone()) - }; - - LocalAccount::import_backup_archive(archive, &target).await?; + LocalAccount::import_backup_archive(archive, target).await?; Ok(()) } diff --git a/tests/integration/tests/changes/main.rs b/tests/integration/tests/changes/main.rs new file mode 100644 index 0000000000..b6db2d2df1 --- /dev/null +++ b/tests/integration/tests/changes/main.rs @@ -0,0 +1 @@ +mod manual_changes; diff --git a/tests/integration/tests/changes/manual_changes.rs b/tests/integration/tests/changes/manual_changes.rs new file mode 100644 index 0000000000..31296e1575 --- /dev/null +++ b/tests/integration/tests/changes/manual_changes.rs @@ -0,0 +1,71 @@ +use std::time::Duration; + +use anyhow::Result; +use sos_changes::{consumer::ChangeConsumer, producer::ChangeProducer}; +use sos_core::{ + events::{changes_feed, LocalChangeEvent}, + AccountId, Paths, +}; +use sos_test_utils::{setup, teardown}; +use tokio::sync::mpsc; + +/// Dispatch changes via the feed to a producer and consumer. +#[tokio::test] +async fn changes_manual_dispatch() -> Result<()> { + const TEST_ID: &str = "changes_manual_dispatch"; + sos_test_utils::init_tracing(); + + let mut dirs = setup(TEST_ID, 1).await?; + let data_dir = dirs.clients.remove(0); + let paths = Paths::new_client(&data_dir); + + let (tx, mut rx) = mpsc::channel(4); + + // Consumer spawns a task + let mut handle = ChangeConsumer::listen(paths.clone())?; + tokio::task::spawn(async move { + let events = handle.changes(); + while let Some(event) = events.recv().await { + tx.send(event).await.unwrap(); + } + Ok::<_, anyhow::Error>(()) + }); + + // Producer spawns a task + let interval = Duration::from_secs(30); + ChangeProducer::listen(paths.clone(), interval).await?; + + // Simulate producing some events + let send = async move { + let feed = changes_feed(); + feed.send_replace(LocalChangeEvent::AccountCreated( + AccountId::random(), + )); + + // Need to delay between triggering change events + // like in the real world as the changes feed uses + // a watch channel not a broadcast channel + tokio::time::sleep(Duration::from_millis(50)).await; + + feed.send_replace(LocalChangeEvent::AccountDeleted( + AccountId::random(), + )); + }; + + // Listen for the consumer events + let recv = async move { + let mut events = Vec::new(); + while let Some(event) = rx.recv().await { + events.push(event); + if events.len() == 2 { + break; + } + } + }; + + futures::future::join(send, recv).await; + + teardown(TEST_ID).await; + + Ok(()) +} diff --git a/tests/unit/build.rs b/tests/unit/build.rs index 21d3b257a4..23246b0881 100644 --- a/tests/unit/build.rs +++ b/tests/unit/build.rs @@ -1,3 +1,4 @@ +#![allow(clippy::print_literal)] fn main() { println!("cargo::rustc-check-cfg=cfg(NOT_CI)"); if option_env!("CI").is_some() { diff --git a/tests/unit/src/tests/account_builder.rs b/tests/unit/src/tests/account_builder.rs index 9cebebccc7..ab19f7ab44 100644 --- a/tests/unit/src/tests/account_builder.rs +++ b/tests/unit/src/tests/account_builder.rs @@ -15,6 +15,7 @@ async fn account_builder_fs() -> Result<()> { let dirs = setup(TEST_ID, 1).await?; let paths = Paths::new_client(&dirs.test_dir); + Paths::scaffold(paths.documents_dir()).await?; let account_name = "fs-account".to_owned(); let password = memorable(); diff --git a/tests/unit/src/tests/client_storage.rs b/tests/unit/src/tests/client_storage.rs index d2f3fca210..a6f2ae6ff5 100644 --- a/tests/unit/src/tests/client_storage.rs +++ b/tests/unit/src/tests/client_storage.rs @@ -26,7 +26,7 @@ use sos_sync::{CreateSet, StorageEventLogs, SyncStorage}; use sos_test_utils::{mock, setup, teardown}; use sos_vault::secret::SecretRow; use std::collections::HashMap; -use tempfile::tempdir_in; +use tempfile::tempdir; const ACCOUNT_NAME: &str = "client_storage"; const MAIN_NAME: &str = "main"; @@ -41,7 +41,9 @@ const MOCK_VALUE_UPDATED: &str = "mock-value-updated"; #[tokio::test] async fn fs_client_storage() -> Result<()> { - let temp = tempdir_in("target")?; + // Windows doesn't like using tempdir_in("target") here + // but it works in other tests! + let temp = tempdir()?; Paths::scaffold(&temp.path().to_owned()).await?; let account_id = AccountId::random(); @@ -62,6 +64,8 @@ async fn fs_client_storage() -> Result<()> { ) .await?; + temp.close()?; + Ok(()) } diff --git a/tests/unit/src/tests/clipboard.rs b/tests/unit/src/tests/clipboard.rs index 3f4f1c12fe..39c77795f8 100644 --- a/tests/unit/src/tests/clipboard.rs +++ b/tests/unit/src/tests/clipboard.rs @@ -1,5 +1,7 @@ use anyhow::Result; +// No wayland support yet! +#[cfg(not(target_os = "linux"))] #[cfg(NOT_CI)] #[tokio::test] async fn clipboard() -> Result<()> { diff --git a/tests/unit/src/tests/event_log/load_tree.rs b/tests/unit/src/tests/event_log/load_tree.rs index 28f60c1440..adf8a17404 100644 --- a/tests/unit/src/tests/event_log/load_tree.rs +++ b/tests/unit/src/tests/event_log/load_tree.rs @@ -2,7 +2,11 @@ use super::mock; use anyhow::Result; use futures::{pin_mut, StreamExt}; use sos_backend::{BackendEventLog, BackendTarget, FolderEventLog}; -use sos_core::{commit::CommitHash, events::EventLog, Paths}; +use sos_core::{ + commit::CommitHash, + events::{EventLog, EventLogType}, + AccountId, Paths, VaultId, +}; use sos_test_utils::mock::file_database; #[tokio::test] @@ -10,8 +14,14 @@ async fn fs_event_log_load_tree() -> Result<()> { let path = "target/event_log_file_load.events"; let (mock_event_log, _) = mock::fs_event_log_standalone(path).await?; let expected_root = mock_event_log.tree().root().unwrap(); + let account_id = AccountId::random(); let event_log = BackendEventLog::FileSystem( - sos_filesystem::FolderEventLog::new_folder(path).await?, + sos_filesystem::FolderEventLog::new_folder( + path, + account_id, + EventLogType::Folder(VaultId::new_v4()), + ) + .await?, ); assert_load_tree(event_log, expected_root).await?; Ok(()) diff --git a/tests/unit/src/tests/event_log/mod.rs b/tests/unit/src/tests/event_log/mod.rs index 4596bad63e..fdd2e50a5e 100644 --- a/tests/unit/src/tests/event_log/mod.rs +++ b/tests/unit/src/tests/event_log/mod.rs @@ -15,7 +15,7 @@ pub mod mock { commit::{CommitHash, CommitTree}, crypto::PrivateKey, encode, - events::{EventLog, WriteEvent}, + events::{EventLog, EventLogType, WriteEvent}, AccountId, Paths, SecretId, VaultCommit, VaultEntry, VaultId, }; use sos_database::async_sqlite::Client; @@ -171,9 +171,16 @@ pub mod mock { let (id, data) = mock_secret().await?; + let account_id = AccountId::random(); + // Create a simple event log let mut event_log = BackendEventLog::FileSystem( - sos_filesystem::FolderEventLog::new_folder(path.as_ref()).await?, + sos_filesystem::FolderEventLog::new_folder( + path.as_ref(), + account_id, + EventLogType::Folder(VaultId::new_v4()), + ) + .await?, ); event_log .apply(&[ @@ -206,9 +213,17 @@ pub mod mock { let (id, data) = mock_secret().await?; + let account_id = AccountId::random(); + let log_type = EventLogType::Folder(VaultId::new_v4()); + // Create a simple event log let mut server = BackendEventLog::FileSystem( - sos_filesystem::FolderEventLog::new_folder(server_file).await?, + sos_filesystem::FolderEventLog::new_folder( + server_file, + account_id, + log_type, + ) + .await?, ); server .apply(&[ @@ -219,7 +234,12 @@ pub mod mock { // Duplicate the server events on the client let mut client = BackendEventLog::FileSystem( - sos_filesystem::FolderEventLog::new_folder(client_file).await?, + sos_filesystem::FolderEventLog::new_folder( + client_file, + account_id, + log_type, + ) + .await?, ); { let stream = server.event_stream(false).await; diff --git a/tests/unit/src/tests/event_log/rewind.rs b/tests/unit/src/tests/event_log/rewind.rs index 5586daf591..52c4dcdafd 100644 --- a/tests/unit/src/tests/event_log/rewind.rs +++ b/tests/unit/src/tests/event_log/rewind.rs @@ -1,11 +1,11 @@ use super::mock; use anyhow::Result; use sos_backend::{BackendEventLog, BackendTarget, FolderEventLog}; -use sos_core::Paths; use sos_core::{ commit::CommitHash, encode, - events::{EventLog, WriteEvent}, + events::{EventLog, EventLogType, WriteEvent}, + AccountId, Paths, VaultId, }; use sos_test_utils::mock::memory_database; use sos_vault::Vault; @@ -18,15 +18,24 @@ async fn fs_event_log_rewind() -> Result<()> { vfs::remove_file(path).await?; } + let account_id = AccountId::random(); + let log_type = EventLogType::Folder(VaultId::new_v4()); + let vault: Vault = Default::default(); let event_log = BackendEventLog::FileSystem( - sos_filesystem::FolderEventLog::new_folder(path).await?, + sos_filesystem::FolderEventLog::new_folder( + path, account_id, log_type, + ) + .await?, ); let rewind_root = assert_event_log_rewind(event_log, vault).await?; // Create new event log to load the commits and verify the root let event_log = BackendEventLog::FileSystem( - sos_filesystem::FolderEventLog::new_folder(path).await?, + sos_filesystem::FolderEventLog::new_folder( + path, account_id, log_type, + ) + .await?, ); assert_event_log_rewound_root(event_log, rewind_root).await?; diff --git a/tests/unit/src/tests/folder.rs b/tests/unit/src/tests/folder.rs index b5d49bf058..df2c5cce4b 100644 --- a/tests/unit/src/tests/folder.rs +++ b/tests/unit/src/tests/folder.rs @@ -2,10 +2,11 @@ use anyhow::Result; use futures::{pin_mut, StreamExt}; use secrecy::ExposeSecret; use sos_backend::{BackendTarget, Folder, FolderEventLog}; -use sos_core::Paths; +use sos_core::events::EventLogType; use sos_core::{ crypto::AccessKey, encode, events::EventLog, SecretId, VaultFlags, }; +use sos_core::{AccountId, Paths, VaultId}; use sos_test_utils::mock::{ self, file_database, insert_database_vault, vault_file, vault_memory, }; @@ -21,7 +22,11 @@ async fn fs_folder_lifecycle() -> Result<()> { let buffer = encode(&vault).await?; vfs::write(temp.path(), &buffer).await?; - let mut folder = Folder::from_path(temp.path()).await?; + let account_id = AccountId::random(); + let log_type = EventLogType::Folder(VaultId::new_v4()); + + let mut folder = + Folder::from_path(temp.path(), &account_id, log_type).await?; let key: AccessKey = password.into(); assert_folder(&mut folder, key).await?; @@ -40,12 +45,13 @@ async fn db_folder_lifecycle() -> Result<()> { let buffer = encode(&vault).await?; vfs::write(temp.path(), &buffer).await?; let paths = Paths::new_client(dir.path()); - let target = BackendTarget::Database(paths, client); + let target = BackendTarget::Database(paths, client.clone()); let mut folder = Folder::new(target, &account_id, vault.id()).await?; let key: AccessKey = password.into(); assert_folder(&mut folder, key).await?; + client.close().await?; temp.close()?; dir.close()?; Ok(()) diff --git a/tests/unit/src/tests/mod.rs b/tests/unit/src/tests/mod.rs index 4fe71f6942..b7469b9ba1 100644 --- a/tests/unit/src/tests/mod.rs +++ b/tests/unit/src/tests/mod.rs @@ -14,7 +14,7 @@ mod identity; mod keychain; mod migrate; mod not_authenticated; -mod pairing_share_url; +mod pairing_url; mod password; mod preferences; mod protocol_encoding; diff --git a/tests/unit/src/tests/pairing_share_url.rs b/tests/unit/src/tests/pairing_share_url.rs deleted file mode 100644 index 879e6c60ed..0000000000 --- a/tests/unit/src/tests/pairing_share_url.rs +++ /dev/null @@ -1,23 +0,0 @@ -use anyhow::Result; -use sos_core::AccountId; -use sos_net::pairing::ServerPairUrl; -use url::Url; - -#[test] -fn server_pair_url() -> Result<()> { - let mock_account_id = AccountId::random(); - let mock_url = Url::parse("http://192.168.1.8:5053/foo?bar=baz+qux")?; - let mock_key = vec![1, 2, 3, 4]; - let share = ServerPairUrl::new( - mock_account_id.clone(), - mock_url.clone(), - mock_key.clone(), - ); - let share_url: Url = share.into(); - let share_url = share_url.to_string(); - let parsed_share: ServerPairUrl = share_url.parse()?; - assert_eq!(&mock_account_id, parsed_share.account_id()); - assert_eq!(&mock_url, parsed_share.server()); - assert_eq!(&mock_key, parsed_share.public_key()); - Ok(()) -} diff --git a/tests/unit/src/tests/pairing_url.rs b/tests/unit/src/tests/pairing_url.rs new file mode 100644 index 0000000000..3b8f04911e --- /dev/null +++ b/tests/unit/src/tests/pairing_url.rs @@ -0,0 +1,57 @@ +use anyhow::Result; +use sos_core::AccountId; +use sos_net::pairing::ServerPairUrl; +use url::Url; + +const SERVER: &str = "http://192.168.1.8:5053"; + +#[test] +fn pair_server_url() -> Result<()> { + let mock_account_id = AccountId::random(); + let mock_url = Url::parse(&format!("{}/foo?bar=baz+qux", SERVER))?; + let mock_key = vec![1, 2, 3, 4]; + let share = ServerPairUrl::new( + mock_account_id.clone(), + mock_url.clone(), + mock_key.clone(), + ); + let share_url: Url = share.into(); + let share_url = share_url.to_string(); + let parsed_share: ServerPairUrl = share_url.parse()?; + assert_eq!(&mock_account_id, parsed_share.account_id()); + assert_eq!(&mock_url, parsed_share.server()); + assert_eq!(&mock_key, parsed_share.public_key()); + Ok(()) +} + +#[test] +fn pair_server_url_errors() -> Result<()> { + // Not data:// scheme + assert!(SERVER.parse::().is_err()); + // Invalid path for MIME type info + assert!("data://image/png,sos-pair" + .parse::() + .is_err()); + // No `aid` query string + assert!("data://text/plain,sos-pair" + .parse::() + .is_err()); + // No server `url` query string + assert!("data://text/plain,sos-pair?aid=0x020172140827f060693a1c9a2f5d9639ec299d4c" + .parse::() + .is_err()); + // No noise public `key` query string + assert!("data://text/plain,sos-pair?aid=0x020172140827f060693a1c9a2f5d9639ec299d4c&url=http://localhost" + .parse::() + .is_err()); + // No pre-shared private `psk` query string + assert!("data://text/plain,sos-pair?aid=0x020172140827f060693a1c9a2f5d9639ec299d4c&url=http://localhost&key=0xff" + .parse::() + .is_err()); + // The `psk` query string is not 32 bytes + assert!("data://text/plain,sos-pair?aid=0x020172140827f060693a1c9a2f5d9639ec299d4c&url=http://localhost&key=0xff&psk=0xff" + .parse::() + .is_err()); + + Ok(()) +} diff --git a/tests/unit/src/tests/protocol_encoding.rs b/tests/unit/src/tests/protocol_encoding.rs index 87dcbd8895..2c53942ac3 100644 --- a/tests/unit/src/tests/protocol_encoding.rs +++ b/tests/unit/src/tests/protocol_encoding.rs @@ -231,13 +231,13 @@ async fn encode_decode_merge_outcom() -> Result<()> { #[cfg(feature = "listen")] #[tokio::test] async fn encode_decode_change_notification() -> Result<()> { - use sos_protocol::ChangeNotification; + use sos_protocol::NetworkChangeEvent; let outcome = MergeOutcome { changes: 7, ..Default::default() }; let account_id: AccountId = [1u8; 20].into(); - let value = ChangeNotification::new( + let value = NetworkChangeEvent::new( &account_id, "mock-connection".to_string(), Default::default(), @@ -245,7 +245,7 @@ async fn encode_decode_change_notification() -> Result<()> { ); let buffer = value.clone().encode().await?; let buffer: Bytes = buffer.into(); - let decoded = ChangeNotification::decode(buffer).await?; + let decoded = NetworkChangeEvent::decode(buffer).await?; assert_eq!(value, decoded); Ok(()) } diff --git a/tests/unit/src/tests/sdk/reducer.rs b/tests/unit/src/tests/sdk/reducer.rs index e28888fea6..d041cd6296 100644 --- a/tests/unit/src/tests/sdk/reducer.rs +++ b/tests/unit/src/tests/sdk/reducer.rs @@ -2,8 +2,10 @@ use anyhow::Result; use secrecy::ExposeSecret; use sos_backend::{BackendEventLog, FolderEventLog}; use sos_core::{ - crypto::PrivateKey, decode, events::EventLog, SecretId, VaultCommit, - VaultEntry, + crypto::PrivateKey, + decode, + events::{EventLog, EventLogType}, + AccountId, SecretId, VaultCommit, VaultEntry, VaultId, }; use sos_reducers::FolderReducer; use sos_test_utils::mock; @@ -73,10 +75,17 @@ async fn event_log_reduce_compact() -> Result<()> { assert_eq!(2, events.len()); + let account_id = AccountId::random(); + let log_type = EventLogType::Folder(VaultId::new_v4()); + let compact_temp = NamedTempFile::new()?; let mut compact = BackendEventLog::FileSystem( - sos_filesystem::FolderEventLog::new_folder(compact_temp.path()) - .await?, + sos_filesystem::FolderEventLog::new_folder( + compact_temp.path(), + account_id, + log_type, + ) + .await?, ); compact.apply(events.as_slice()).await?; @@ -96,9 +105,17 @@ async fn mock_event_log_file( let (encryption_key, _, _) = mock::encryption_key()?; let (_, mut vault, _) = mock::vault_file().await?; + let account_id = AccountId::random(); + let log_type = EventLogType::Folder(VaultId::new_v4()); + let temp = NamedTempFile::new()?; let mut event_log = BackendEventLog::FileSystem( - sos_filesystem::FolderEventLog::new_folder(temp.path()).await?, + sos_filesystem::FolderEventLog::new_folder( + temp.path(), + account_id, + log_type, + ) + .await?, ); // Create the vault diff --git a/tests/utils/src/lib.rs b/tests/utils/src/lib.rs index 73d3e007c9..74c1474998 100644 --- a/tests/utils/src/lib.rs +++ b/tests/utils/src/lib.rs @@ -61,6 +61,7 @@ pub async fn make_client_backend( sos_database::migrations::migrate_client(&mut client).await?; BackendTarget::Database(paths.clone(), client) } else { + Paths::scaffold(paths.documents_dir()).await?; BackendTarget::FileSystem(paths.clone()) }) }