@@ -207,10 +207,22 @@ export abstract class IntegrationBase<
207
207
void this . ensureSession ( { createIfNeeded : false } ) ;
208
208
}
209
209
210
+ private static readonly requestExceptionLimit = 5 ;
211
+ private static readonly syncDueToRequestExceptionLimit = 1 ;
212
+ private syncCountDueToRequestException = 0 ;
210
213
private requestExceptionCount = 0 ;
211
214
212
215
resetRequestExceptionCount ( ) : void {
213
216
this . requestExceptionCount = 0 ;
217
+ this . syncCountDueToRequestException = 0 ;
218
+ }
219
+
220
+ /**
221
+ * Resets request exceptions without resetting the amount of syncs
222
+ */
223
+ smoothifyRequestExceptionCount ( ) : void {
224
+ // On resync we reset exception count only to avoid infinitive syncs on failure
225
+ this . requestExceptionCount = 0 ;
214
226
}
215
227
216
228
async reset ( ) : Promise < void > {
@@ -270,7 +282,17 @@ export abstract class IntegrationBase<
270
282
271
283
Logger . error ( ex , scope ) ;
272
284
273
- if ( ex instanceof AuthenticationError || ex instanceof RequestClientError ) {
285
+ if ( ex instanceof AuthenticationError && this . _session ?. cloud ) {
286
+ if ( this . syncCountDueToRequestException < IntegrationBase . syncDueToRequestExceptionLimit ) {
287
+ this . syncCountDueToRequestException ++ ;
288
+ this . _session = {
289
+ ...this . _session ,
290
+ expiresAt : new Date ( Date . now ( ) - 1 ) ,
291
+ } ;
292
+ } else {
293
+ this . trackRequestException ( ) ;
294
+ }
295
+ } else if ( ex instanceof AuthenticationError || ex instanceof RequestClientError ) {
274
296
this . trackRequestException ( ) ;
275
297
}
276
298
return defaultValue ;
@@ -304,7 +326,7 @@ export abstract class IntegrationBase<
304
326
trackRequestException ( ) : void {
305
327
this . requestExceptionCount ++ ;
306
328
307
- if ( this . requestExceptionCount >= 5 && this . _session !== null ) {
329
+ if ( this . requestExceptionCount >= IntegrationBase . requestExceptionLimit && this . _session !== null ) {
308
330
void showIntegrationDisconnectedTooManyFailedRequestsWarningMessage ( this . name ) ;
309
331
void this . disconnect ( { currentSessionOnly : true } ) ;
310
332
}
@@ -370,7 +392,7 @@ export abstract class IntegrationBase<
370
392
}
371
393
372
394
this . _session = session ?? null ;
373
- this . resetRequestExceptionCount ( ) ;
395
+ this . smoothifyRequestExceptionCount ( ) ;
374
396
375
397
if ( session != null ) {
376
398
await this . container . storage . storeWorkspace ( this . connectedKey , true ) ;
0 commit comments