qconnect-lan gains what QBZ calls on another receiver: a _qobuz-connect._tcp browser (own device_uuid filtered, Electron's SDK floor), the get-display-info / get-connect-info probe (IPv4 first, 10 s, Connection: close) and the connect-to-qconnect handoff body — the controller's session uuid, the delegated API token and the delegated QWS token under its LAN name jwt_qconnect, become_active. qbz-qobuz mints the delegated pair with POST /qws/delegateAuth (q_app_id), the step every official controller takes before the handoff. The receiver DTOs learn to deserialize (unknown enum values collapse to Unknown). Pure helpers tested. cc
29 lines
825 B
TOML
29 lines
825 B
TOML
[package]
|
|
name = "qconnect-lan"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
description = "Official Qobuz Connect LAN receiver wire and discovery"
|
|
|
|
[dependencies]
|
|
if-addrs = "0.15"
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
mdns-sd = "0.21"
|
|
reqwest = { workspace = true }
|
|
socket2 = "0.6"
|
|
url = "2"
|
|
zeroize = "1"
|
|
|
|
[dev-dependencies]
|
|
base64 = { workspace = true }
|
|
qbz-credentials = { path = "../qbz-credentials" }
|
|
qbz-qobuz = { path = "../qbz-qobuz" }
|
|
qconnect-core = { path = "../qconnect-core" }
|
|
qconnect-protocol = { path = "../qconnect-protocol" }
|
|
qconnect-transport-ws = { path = "../qconnect-transport-ws" }
|
|
rustls = { version = "0.23", features = ["aws_lc_rs"] }
|
|
tokio = { workspace = true }
|
|
uuid = { version = "1", features = ["v4"] }
|