Skip to content

Commit b98f647

Browse files
author
Rachel Macfarlane
committed
Add polling for reconnect to auth extension
1 parent 6b77767 commit b98f647

1 file changed

Lines changed: 17 additions & 1 deletion

File tree

extensions/vscode-account/src/AADHelper.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ export class AzureActiveDirectoryService {
9292
scope: session.scope,
9393
sessionId: session.id
9494
});
95+
this.pollForReconnect(session.id, session.refreshToken, session.scope);
9596
}
9697
} else {
9798
await this.logout(session.id);
@@ -353,7 +354,10 @@ export class AzureActiveDirectoryService {
353354
onDidChangeSessions.fire();
354355
} catch (e) {
355356
if (e.message === REFRESH_NETWORK_FAILURE) {
356-
await this.handleRefreshNetworkError(token.sessionId, token.refreshToken, scope);
357+
const didSucceedOnRetry = await this.handleRefreshNetworkError(token.sessionId, token.refreshToken, scope);
358+
if (!didSucceedOnRetry) {
359+
this.pollForReconnect(token.sessionId, token.refreshToken, token.scope);
360+
}
357361
} else {
358362
await this.logout(token.sessionId);
359363
onDidChangeSessions.fire();
@@ -494,6 +498,18 @@ export class AzureActiveDirectoryService {
494498
this.clearSessionTimeout(sessionId);
495499
}
496500

501+
private pollForReconnect(sessionId: string, refreshToken: string, scope: string): void {
502+
this.clearSessionTimeout(sessionId);
503+
504+
this._refreshTimeouts.set(sessionId, setTimeout(async () => {
505+
try {
506+
await this.refreshToken(refreshToken, scope);
507+
} catch (e) {
508+
this.pollForReconnect(sessionId, refreshToken, scope);
509+
}
510+
}, 1000 * 60 * 30));
511+
}
512+
497513
private handleRefreshNetworkError(sessionId: string, refreshToken: string, scope: string, attempts: number = 1): Promise<boolean> {
498514
return new Promise((resolve, _) => {
499515
if (attempts === 3) {

0 commit comments

Comments
 (0)