@@ -38,12 +38,14 @@ import * as reCAPTCHA from './recaptcha';
38
38
import * as client from './client' ;
39
39
import * as storage from './storage' ;
40
40
import * as util from './util' ;
41
+ import { logger } from './logger' ;
41
42
import { getState , clearState , setState , getDebugState } from './state' ;
42
43
import { AppCheckTokenListener } from './public-types' ;
43
44
import { Deferred , FirebaseError } from '@firebase/util' ;
44
45
import { ReCaptchaV3Provider } from './providers' ;
45
46
import { AppCheckService } from './factory' ;
46
47
import { ListenerType } from './types' ;
48
+ import { AppCheckError } from './errors' ;
47
49
48
50
const fakeRecaptchaToken = 'fake-recaptcha-token' ;
49
51
const fakeRecaptchaAppCheckToken = {
@@ -362,24 +364,47 @@ describe('internal api', () => {
362
364
) ;
363
365
expect ( token ) . to . deep . equal ( { token : fakeRecaptchaAppCheckToken . token } ) ;
364
366
} ) ;
365
- it ( 'throttle ' , async ( ) => {
367
+ it ( 'throttles exponentially on 503 ' , async ( ) => {
366
368
const appCheck = initializeAppCheck ( app , {
367
369
provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
368
370
} ) ;
369
- stub (
370
- client ,
371
- 'exchangeToken'
372
- ) . returns (
371
+ const warnStub = stub ( logger , 'warn' ) ;
372
+ stub ( client , 'exchangeToken' ) . returns (
373
373
Promise . reject (
374
- new FirebaseError ( 'test-error' , 'test error msg' , { httpStatus : 503 } )
374
+ new FirebaseError (
375
+ AppCheckError . FETCH_STATUS_ERROR ,
376
+ 'test error msg' ,
377
+ { httpStatus : 503 }
378
+ )
375
379
)
376
380
) ;
377
381
378
382
const token = await getToken ( appCheck as AppCheckService ) ;
379
383
380
- expect ( token . error ?. message ) . to . equal (
381
- 'sdfa'
384
+ expect ( token . error ?. message ) . to . include ( '503' ) ;
385
+ expect ( token . error ?. message ) . to . include ( '00m' ) ;
386
+ expect ( warnStub . args [ 0 ] [ 0 ] ) . to . include ( '503' ) ;
387
+ } ) ;
388
+ it ( 'throttles 1d on 403' , async ( ) => {
389
+ const appCheck = initializeAppCheck ( app , {
390
+ provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
391
+ } ) ;
392
+ const warnStub = stub ( logger , 'warn' ) ;
393
+ stub ( client , 'exchangeToken' ) . returns (
394
+ Promise . reject (
395
+ new FirebaseError (
396
+ AppCheckError . FETCH_STATUS_ERROR ,
397
+ 'test error msg' ,
398
+ { httpStatus : 403 }
399
+ )
400
+ )
382
401
) ;
402
+
403
+ const token = await getToken ( appCheck as AppCheckService ) ;
404
+
405
+ expect ( token . error ?. message ) . to . include ( '403' ) ;
406
+ expect ( token . error ?. message ) . to . include ( '1d' ) ;
407
+ expect ( warnStub . args [ 0 ] [ 0 ] ) . to . include ( '403' ) ;
383
408
} ) ;
384
409
} ) ;
385
410
0 commit comments