@@ -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 { ReCaptchaEnterpriseProvider , 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 = {
@@ -385,24 +387,47 @@ describe('internal api', () => {
385
387
) ;
386
388
expect ( token ) . to . deep . equal ( { token : fakeRecaptchaAppCheckToken . token } ) ;
387
389
} ) ;
388
- it ( 'throttle ' , async ( ) => {
390
+ it ( 'throttles exponentially on 503 ' , async ( ) => {
389
391
const appCheck = initializeAppCheck ( app , {
390
392
provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
391
393
} ) ;
392
- stub (
393
- client ,
394
- 'exchangeToken'
395
- ) . returns (
394
+ const warnStub = stub ( logger , 'warn' ) ;
395
+ stub ( client , 'exchangeToken' ) . returns (
396
396
Promise . reject (
397
- new FirebaseError ( 'test-error' , 'test error msg' , { httpStatus : 503 } )
397
+ new FirebaseError (
398
+ AppCheckError . FETCH_STATUS_ERROR ,
399
+ 'test error msg' ,
400
+ { httpStatus : 503 }
401
+ )
398
402
)
399
403
) ;
400
404
401
405
const token = await getToken ( appCheck as AppCheckService ) ;
402
406
403
- expect ( token . error ?. message ) . to . equal (
404
- 'sdfa'
407
+ expect ( token . error ?. message ) . to . include ( '503' ) ;
408
+ expect ( token . error ?. message ) . to . include ( '00m' ) ;
409
+ expect ( warnStub . args [ 0 ] [ 0 ] ) . to . include ( '503' ) ;
410
+ } ) ;
411
+ it ( 'throttles 1d on 403' , async ( ) => {
412
+ const appCheck = initializeAppCheck ( app , {
413
+ provider : new ReCaptchaV3Provider ( FAKE_SITE_KEY )
414
+ } ) ;
415
+ const warnStub = stub ( logger , 'warn' ) ;
416
+ stub ( client , 'exchangeToken' ) . returns (
417
+ Promise . reject (
418
+ new FirebaseError (
419
+ AppCheckError . FETCH_STATUS_ERROR ,
420
+ 'test error msg' ,
421
+ { httpStatus : 403 }
422
+ )
423
+ )
405
424
) ;
425
+
426
+ const token = await getToken ( appCheck as AppCheckService ) ;
427
+
428
+ expect ( token . error ?. message ) . to . include ( '403' ) ;
429
+ expect ( token . error ?. message ) . to . include ( '1d' ) ;
430
+ expect ( warnStub . args [ 0 ] [ 0 ] ) . to . include ( '403' ) ;
406
431
} ) ;
407
432
} ) ;
408
433
0 commit comments