zeroclaw-labs/zeroclaw · error
Google OAuth token exchange failed ({}): {}
Error message
Google OAuth token exchange failed ({}): {} What it means
Error "Google OAuth token exchange failed ({}): {}" thrown in zeroclaw-labs/zeroclaw.
Source
Thrown at crates/zeroclaw-providers/src/auth/gemini_oauth.rs:132
.send()
.await
.context("Failed to send token exchange request")?;
let status = response.status();
let body = response
.text()
.await
.context("Failed to read token response body")?;
if !status.is_success() {
if let Ok(err) = serde_json::from_str::<OAuthErrorResponse>(&body) {
anyhow::bail!(
"Google OAuth error: {} - {}",
err.error,
err.error_description.unwrap_or_default()
);
}
anyhow::bail!("Google OAuth token exchange failed ({}): {}", status, body);
}
let token_response: TokenResponse =
serde_json::from_str(&body).context("Failed to parse token response")?;
let expires_at = token_response
.expires_in
.map(|secs| Utc::now() + chrono::Duration::seconds(secs));
Ok(TokenSet {
access_token: token_response.access_token,
refresh_token: token_response.refresh_token,
id_token: token_response.id_token,
expires_at,
token_type: token_response.token_type.or_else(|| Some("Bearer".into())),
scope: token_response.scope,
})
}View on GitHub (pinned to 88bb9c8533)
Solutions
- Verify the authorization code, redirect URI, and client credentials; retry the token exchange.
When it happens
Trigger: Thrown at crates/zeroclaw-providers/src/auth/gemini_oauth.rs:132 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/b2716aa178b5dbf0.
Report an issue: GitHub.