[package] name = "qbz-credentials" version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true description = "Encrypted credential and OAuth token storage for QBZ (keyring + AES-256-GCM file)" [dependencies] serde = { workspace = true } serde_json = { workspace = true } log = { workspace = true } base64 = { workspace = true } tokio = { workspace = true } aes-gcm = "0.10" sha2 = "0.11" rand = "0.10" dirs = "6" [dev-dependencies] tempfile = "3" [target.'cfg(target_os = "linux")'.dependencies] # async-io, NOT tokio: zbus features unify across the whole dependency graph # and its "tokio" feature wins over "async-io" — enabling it here flipped the # zbus 5 executor to tokio for accesskit_unix/atspi/ksni too, whose D-Bus # connections live on plain threads => startup panic "there is no reactor # running" and dead AT-SPI accessibility. async-io futures are runtime- # agnostic, so our portal call still awaits fine inside tokio. ashpd = { version = "0.13", default-features = false, features = ["async-io", "secret"] } # OS keyring backends, per target. keyring 3 has NO default backend feature: # without the per-platform one it silently exports the in-memory `mock` # (keyring-3.6.3/src/lib.rs:274-298), whose writes succeed and whose contents # die with the process. An unconditional feature list also meant this crate # only resolved correctly because Cargo unified features with qbz-secrets. # Same shape as crates/qbz-secrets/Cargo.toml. keyring = { version = "3", default-features = false, features = [ "async-secret-service", "crypto-rust", ] } [target.'cfg(target_os = "macos")'.dependencies] keyring = { version = "3", default-features = false, features = ["apple-native"] } [target.'cfg(target_os = "windows")'.dependencies] keyring = { version = "3", default-features = false, features = ["windows-native"] }