feat(oauth): Make oauth client a singleton to survive cache failures (#6348)

This commit is contained in:
Marat Boshernitsan
2025-08-15 22:05:59 -07:00
committed by GitHub
parent 6c1373c332
commit bc60257e22
2 changed files with 20 additions and 2 deletions

View File

@@ -66,7 +66,9 @@ export interface OauthWebLogin {
loginCompletePromise: Promise<void>;
}
export async function getOauthClient(
const oauthClientPromises = new Map<AuthType, Promise<OAuth2Client>>();
async function initOauthClient(
authType: AuthType,
config: Config,
): Promise<OAuth2Client> {
@@ -187,6 +189,16 @@ export async function getOauthClient(
return client;
}
export async function getOauthClient(
authType: AuthType,
config: Config,
): Promise<OAuth2Client> {
if (!oauthClientPromises.has(authType)) {
oauthClientPromises.set(authType, initOauthClient(authType, config));
}
return oauthClientPromises.get(authType)!;
}
async function authWithUserCode(client: OAuth2Client): Promise<boolean> {
const redirectUri = 'https://codeassist.google.com/authcode';
const codeVerifier = await client.generateCodeVerifierAsync();
@@ -416,3 +428,8 @@ async function fetchAndCacheUserInfo(client: OAuth2Client): Promise<void> {
console.error('Error retrieving user info:', error);
}
}
// Helper to ensure test isolation
export function resetOauthClientForTesting() {
oauthClientPromises.clear();
}