@@ -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