earendil-works/pi · error · ModelsError
oauth
oauth
Error message
OAuth refresh failed for ${providerId} What it means
Error "OAuth refresh failed for ${providerId}" thrown in earendil-works/pi.
Source
Thrown at packages/ai/src/auth/resolve.ts:155
let credential = stored;
if (expiresSoon(credential)) {
// Optimistic check said expired; the authoritative check runs under the lock.
let post: Credential | undefined;
try {
post = await credentials.modify(
providerId,
async (current) => {
if (current?.type !== "oauth") return undefined; // logged out meanwhile
if (!expiresSoon(current)) return undefined; // another process/request refreshed
try {
const refreshSignal = AbortSignal.any([
signal,
AbortSignal.timeout(DEFAULT_OAUTH_REFRESH_TIMEOUT_MS),
]);
return await oauth.refresh(current, refreshSignal);
} catch (error) {
throw new ModelsError("oauth", `OAuth refresh failed for ${providerId}`, { cause: error });
}
},
{ signal },
);
} catch (error) {
if (error instanceof ModelsError) throw error;
throw new ModelsError("auth", `Credential store modify failed for ${providerId}`, { cause: error });
}
if (post?.type !== "oauth") return undefined; // logged out meanwhile
credential = post;
// The normal five-minute window triggers a refresh but does not impose a
// provider contract. Explicit callers (such as bearer-token export) do
// require the requested minimum after the refresh.
if (minOAuthValidityMs !== undefined && expiresSoon(credential)) {
throw new ModelsError("oauth", `OAuth refresh returned a token that expires too soon for ${providerId}`);
}
}
View on GitHub (pinned to 4af9d21d3b)
Solutions
- Re-authenticate the provider; the OAuth refresh failed.
When it happens
Trigger: Thrown at packages/ai/src/auth/resolve.ts:155 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of earendil-works/pi@4af9d21d3b (2026-08-24).
Data as JSON: /api/errors/58399932f5e06ddd.
Report an issue: GitHub.