@@ -349,35 +349,62 @@ describe('FirebaseTokenGenerator', () => {
349
349
} ) . to . throw ( FirebaseAuthError ) . with . property ( 'code' , 'auth/argument-error' ) ;
350
350
} ) ;
351
351
352
+ it ( 'should throw given a non-object options' , ( ) => {
353
+ const invalidOptions : any [ ] = [ NaN , [ ] , true , false , '' , 'a' , 0 , 1 , Infinity , _ . noop ] ;
354
+ invalidOptions . forEach ( ( opts ) => {
355
+ expect ( ( ) => {
356
+ tokenGenerator . createCustomToken ( mocks . uid , opts ) ;
357
+ } ) . to . throw ( FirebaseAuthError ) . with . property ( 'code' , 'auth/argument-error' ) ;
358
+ } ) ;
359
+ } ) ;
360
+
352
361
it ( 'should throw given a non-object developer claims' , ( ) => {
353
362
const invalidDeveloperClaims : any [ ] = [ null , NaN , [ ] , true , false , '' , 'a' , 0 , 1 , Infinity , _ . noop ] ;
354
363
invalidDeveloperClaims . forEach ( ( invalidDevClaims ) => {
355
364
expect ( ( ) => {
356
- tokenGenerator . createCustomToken ( mocks . uid , invalidDevClaims ) ;
365
+ tokenGenerator . createCustomToken ( mocks . uid , { developerClaims : invalidDevClaims } ) ;
357
366
} ) . to . throw ( FirebaseAuthError ) . with . property ( 'code' , 'auth/argument-error' ) ;
358
367
} ) ;
359
368
} ) ;
360
369
361
370
BLACKLISTED_CLAIMS . forEach ( ( blacklistedClaim ) => {
362
371
it ( 'should throw given a developer claims object with a blacklisted claim: ' + blacklistedClaim , ( ) => {
363
- const blacklistedDeveloperClaims : { [ key : string ] : any } = _ . clone ( mocks . developerClaims ) ;
372
+ const blacklistedDeveloperClaims : { [ key : string ] : any } = _ . clone ( mocks . developerClaims ) ;
364
373
blacklistedDeveloperClaims [ blacklistedClaim ] = true ;
365
374
expect ( ( ) => {
366
- tokenGenerator . createCustomToken ( mocks . uid , blacklistedDeveloperClaims ) ;
375
+ tokenGenerator . createCustomToken ( mocks . uid , { developerClaims : blacklistedDeveloperClaims } ) ;
367
376
} ) . to . throw ( FirebaseAuthError , blacklistedClaim ) . with . property ( 'code' , 'auth/argument-error' ) ;
368
377
} ) ;
369
378
} ) ;
370
379
380
+ it ( 'should throw given an invalid expiresIn' , ( ) => {
381
+ const invalidExpiresIns : any [ ] = [ null , NaN , Infinity , _ . noop , 0 , 999 , 3600001 ] ;
382
+ invalidExpiresIns . forEach ( ( invalidExpiresIn ) => {
383
+ expect ( ( ) => {
384
+ tokenGenerator . createCustomToken ( mocks . uid , { expiresIn : invalidExpiresIn } ) ;
385
+ } ) . to . throw ( FirebaseAuthError ) . with . property ( 'code' , 'auth/argument-error' ) ;
386
+ } ) ;
387
+ } ) ;
388
+
371
389
it ( 'should be fulfilled given a valid uid and no developer claims' , ( ) => {
372
390
return tokenGenerator . createCustomToken ( mocks . uid ) ;
373
391
} ) ;
374
392
375
393
it ( 'should be fulfilled given a valid uid and empty object developer claims' , ( ) => {
376
- return tokenGenerator . createCustomToken ( mocks . uid , { } ) ;
394
+ return tokenGenerator . createCustomToken ( mocks . uid , { developerClaims : { } } ) ;
377
395
} ) ;
378
396
379
397
it ( 'should be fulfilled given a valid uid and valid developer claims' , ( ) => {
380
- return tokenGenerator . createCustomToken ( mocks . uid , mocks . developerClaims ) ;
398
+ return tokenGenerator . createCustomToken ( mocks . uid , { developerClaims : mocks . developerClaims } ) ;
399
+ } ) ;
400
+
401
+ it ( 'should be fulfilled given a valid uid, empty object developer claims and valid expiresIn' , ( ) => {
402
+ return tokenGenerator . createCustomToken ( mocks . uid , { developerClaims : { } , expiresIn : 1000 } ) ;
403
+ } ) ;
404
+
405
+ it ( 'should be fulfilled given a valid uid, valid developer claims and valid expiresIn' , ( ) => {
406
+ return tokenGenerator
407
+ . createCustomToken ( mocks . uid , { developerClaims : mocks . developerClaims , expiresIn : 3600000 } ) ;
381
408
} ) ;
382
409
383
410
it ( 'should be fulfilled with a Firebase Custom JWT' , ( ) => {
@@ -412,7 +439,7 @@ describe('FirebaseTokenGenerator', () => {
412
439
it ( 'should be fulfilled with a JWT with the developer claims in its decoded payload' , ( ) => {
413
440
clock = sinon . useFakeTimers ( 1000 ) ;
414
441
415
- return tokenGenerator . createCustomToken ( mocks . uid , mocks . developerClaims )
442
+ return tokenGenerator . createCustomToken ( mocks . uid , { developerClaims : mocks . developerClaims } )
416
443
. then ( ( token ) => {
417
444
const decoded = jwt . decode ( token ) ;
418
445
@@ -438,6 +465,32 @@ describe('FirebaseTokenGenerator', () => {
438
465
} ) ;
439
466
} ) ;
440
467
468
+ it ( 'should be fulfilled with a JWT with the expiresIn in its exp payload' , ( ) => {
469
+ clock = sinon . useFakeTimers ( 2000 ) ;
470
+ const expiresIn = 300900
471
+
472
+ return tokenGenerator . createCustomToken ( mocks . uid , { expiresIn } )
473
+ . then ( ( token ) => {
474
+ const decoded = jwt . decode ( token ) ;
475
+
476
+ const expected : { [ key : string ] : any } = {
477
+ uid : mocks . uid ,
478
+ iat : 2 ,
479
+ exp : 302 ,
480
+ aud : FIREBASE_AUDIENCE ,
481
+ iss : mocks . certificateObject . client_email ,
482
+ sub : mocks . certificateObject . client_email ,
483
+ } ;
484
+
485
+ if ( tokenGenerator . tenantId ) {
486
+ // eslint-disable-next-line @typescript-eslint/camelcase
487
+ expected . tenant_id = tokenGenerator . tenantId ;
488
+ }
489
+
490
+ expect ( decoded ) . to . deep . equal ( expected ) ;
491
+ } ) ;
492
+ } ) ;
493
+
441
494
it ( 'should be fulfilled with a JWT with the correct header' , ( ) => {
442
495
clock = sinon . useFakeTimers ( 1000 ) ;
443
496
@@ -495,7 +548,7 @@ describe('FirebaseTokenGenerator', () => {
495
548
foo : 'bar' ,
496
549
} ;
497
550
const clonedClaims = _ . clone ( originalClaims ) ;
498
- return tokenGenerator . createCustomToken ( mocks . uid , clonedClaims )
551
+ return tokenGenerator . createCustomToken ( mocks . uid , { developerClaims : clonedClaims } )
499
552
. then ( ( ) => {
500
553
expect ( originalClaims ) . to . deep . equal ( clonedClaims ) ;
501
554
} ) ;
0 commit comments