@@ -49,6 +49,7 @@ export class EventQueue {
49
49
eventFlushIntervalMS : number
50
50
flushEventQueueSize : number
51
51
maxEventQueueSize : number
52
+ disabledEventFlush : boolean
52
53
private flushInterval : NodeJS . Timer
53
54
private flushInProgress = false
54
55
private flushCallbacks : Array < ( arg : unknown ) => void > = [ ]
@@ -63,6 +64,8 @@ export class EventQueue {
63
64
this . reporter = options . reporter
64
65
this . eventsAPIURI = options . eventsAPIURI
65
66
this . eventFlushIntervalMS = options ?. eventFlushIntervalMS || 10 * 1000
67
+ this . disabledEventFlush = false
68
+
66
69
if ( this . eventFlushIntervalMS < 500 ) {
67
70
throw new Error (
68
71
`eventFlushIntervalMS: ${ this . eventFlushIntervalMS } must be larger than 500ms` ,
@@ -121,6 +124,7 @@ export class EventQueue {
121
124
122
125
cleanup ( ) : void {
123
126
clearInterval ( this . flushInterval )
127
+ this . disabledEventFlush = true
124
128
}
125
129
126
130
private async _flushEvents ( ) {
@@ -219,12 +223,25 @@ export class EventQueue {
219
223
this . logger . debug (
220
224
`DevCycle Error Flushing Events response message: ${ ex . message } ` ,
221
225
)
222
- this . bucketing . onPayloadFailure (
223
- this . sdkKey ,
224
- flushPayload . payloadId ,
225
- true ,
226
- )
227
- results . retries ++
226
+ if ( 'status' in ex && ex . status === 401 ) {
227
+ this . logger . debug (
228
+ `SDK key is invalid, closing event flushing interval` ,
229
+ )
230
+ this . bucketing . onPayloadFailure (
231
+ this . sdkKey ,
232
+ flushPayload . payloadId ,
233
+ false ,
234
+ )
235
+ results . failures ++
236
+ this . cleanup ( )
237
+ } else {
238
+ this . bucketing . onPayloadFailure (
239
+ this . sdkKey ,
240
+ flushPayload . payloadId ,
241
+ true ,
242
+ )
243
+ results . retries ++
244
+ }
228
245
}
229
246
} ) ,
230
247
)
@@ -276,9 +293,19 @@ export class EventQueue {
276
293
* Queue DVCAPIEvent for publishing to DevCycle Events API.
277
294
*/
278
295
queueEvent ( user : DVCPopulatedUser , event : DevCycleEvent ) : void {
296
+ if ( this . disabledEventFlush ) {
297
+ this . logger . warn (
298
+ `Event flushing is disabled, dropping event: ${
299
+ event . type
300
+ } , event queue size: ${ this . bucketing . eventQueueSize (
301
+ this . sdkKey ,
302
+ ) } `,
303
+ )
304
+ return
305
+ }
279
306
if ( this . checkEventQueueSize ( ) ) {
280
307
this . logger . warn (
281
- `Max event queue size reached, dropping event: ${ event } ` ,
308
+ `Max event queue size reached, dropping event: ${ event . type } ` ,
282
309
)
283
310
return
284
311
}
@@ -299,9 +326,15 @@ export class EventQueue {
299
326
event : DevCycleEvent ,
300
327
bucketedConfig ?: BucketedUserConfig ,
301
328
) : void {
329
+ if ( this . disabledEventFlush ) {
330
+ this . logger . warn (
331
+ `Event flushing is disabled, dropping aggregate event: ${ event . type } ` ,
332
+ )
333
+ return
334
+ }
302
335
if ( this . checkEventQueueSize ( ) ) {
303
336
this . logger . warn (
304
- `Max event queue size reached, dropping aggregate event: ${ event } ` ,
337
+ `Max event queue size reached, dropping aggregate event: ${ event . type } ` ,
305
338
)
306
339
return
307
340
}
0 commit comments