Files
qbz/crates/qbz-qobuz/Cargo.toml
T
vicrodh 46c15f507b feat(qobuz): track lyrics endpoint with live-verified wire DTOs
Add /track/lyricsUrl (signed RPC, method name "tracklyricsUrl") plus
the CDN document fetch through the offline choke point. Wire shapes
were validated against live captures (2026-06-10) and diverge from the
inferred yaml: numeric track_id in the step-1 envelope, CDN document
wrapped in {translation_langs, publishers, writers, original}, "wsync"
word-synced discriminator instead of "lsync" (per-word timestamps),
plain lines as objects, and miss = HTTP 404 error body mapped to a
typed Ok(None) instead of an error. Unit tests deserialize fixture
excerpts of the captures; examples/lyrics_probe.rs is the read-only
live probe used for the capture.

Also expose qbz_credentials::load_oauth_token_from_file so a stale
keyring entry cannot shadow the authoritative encrypted token file.

cc
2026-06-10 16:03:44 -06:00

47 lines
977 B
TOML

[package]
name = "qbz-qobuz"
version.workspace = true
edition.workspace = true
license.workspace = true
description = "Qobuz API client for QBZ"
[dependencies]
qbz-models = { path = "../qbz-models" }
qbz-cmaf = { path = "../qbz-cmaf" }
# Async
tokio = { workspace = true }
futures-util = { workspace = true }
# HTTP
reqwest = { workspace = true }
# Serialization
serde = { workspace = true }
serde_json = { workspace = true }
# Crypto (for Qobuz auth)
md-5 = { workspace = true }
base64 = { workspace = true }
# Time
chrono = { workspace = true }
# Filesystem (bundle-token cache location)
dirs = "6"
# Regex
regex = { workspace = true }
# Logging
log = { workspace = true }
# Error handling
thiserror = { workspace = true }
anyhow = { workspace = true }
[dev-dependencies]
# Used only by examples/lyrics_probe.rs (read-only live probe of the lyrics
# endpoint): loads the saved OAuth token / credentials for login.
qbz-credentials = { path = "../qbz-credentials" }