Thank you for being patient! We're working hard on resolving the issue
Behind features = ["connector"]. Maps the
:~whoop:{authId}:<metric> rowkey family.
tento_whoop::connector::{
Whoop,
WhoopClient,
WhoopBackendDeps,
WhoopAuth,
WhoopParams,
sleep::{Sleep, logs::Logs},
recovery::{Recovery, logs::Logs},
}
WhoopBackendDepsIdentical signature to Garmin's:
pub trait WhoopBackendDeps: Send + Sync {
fn persist_cells<'a>(&'a self, row_id: Uuid, cells: Vec<Cell>) -> …;
fn recent_log_cells<'a>(&'a self, owner: &'a Owner, lookup_key: &'a str) -> …;
}
The thin-deps + provider-drives-sync pattern. Row bodies in
tento_whoop::connector::sleep::Sleep::sync and recovery walk
windows via wearable_window_for_stage, hit the Whoop API, and
emit cells.
Integration::client calls
auth.acquire_handle() which returns a fresh access token if
the cached one expired."whoop_auth_expired" so the
host can surface a re-auth prompt to the user.