fix(FN-745): fall back to CLI when Claude token refresh fails

- Replace hard error returns with fetchClaudeUsageViaCli() fallback when token refresh fails
- Cover three failure paths: refresh failure, no refresh token, exhausted retry attempts
- Add comprehensive tests for all token expiry and refresh fallback scenarios
This commit is contained in:
gsxdsm
2026-04-02 20:05:49 -07:00
parent cb06792766
commit dacd074700
2 changed files with 129 additions and 20 deletions

View File

@@ -745,16 +745,12 @@ async function fetchClaudeUsage(): Promise<ProviderUsage> {
if (newToken) {
activeToken = newToken;
} else {
// Refresh failed — return actionable error immediately
usage.status = "error";
usage.error = "Claude token expired — run `claude` to re-login";
return usage;
// Refresh failed — fall back to CLI which has its own auth mechanism
return fetchClaudeUsageViaCli();
}
} else {
// No refresh token available
usage.status = "error";
usage.error = "Claude token expired — run `claude` to re-login";
return usage;
// No refresh token available — fall back to CLI which has its own auth
return fetchClaudeUsageViaCli();
}
}
@@ -783,9 +779,8 @@ async function fetchClaudeUsage(): Promise<ProviderUsage> {
continue; // Retry with refreshed token
}
}
usage.status = "error";
usage.error = "Claude token expired — run `claude` to re-login";
return usage;
// All refresh attempts exhausted — fall back to CLI which has its own auth
return fetchClaudeUsageViaCli();
}
// 429 is potentially transient — retry with exponential backoff