11import Auth0 , {
22 AuthorizeOptions ,
33 Credentials as Auth0Credentials ,
4- Options ,
54} from 'react-native-auth0' ;
6- import { Credentials , CredentialsHandlersInput , ErrorCases } from './types' ;
7- import { ErrorPublisher } from './utils' ;
5+ import {
6+ Credentials ,
7+ CredentialsHandlersInput ,
8+ ErrorCases ,
9+ Options ,
10+ tokenToValidateType ,
11+ } from './types' ;
12+ import { ErrorPublisher , validateToken } from './utils' ;
813
914export class Auth0Native extends Auth0 {
1015 private credentials : Credentials | null = null ;
16+ private audience : string ;
1117
1218 private saveCredentials : CredentialsHandlersInput [ 'save' ] ;
1319 private getCredentials : CredentialsHandlersInput [ 'get' ] ;
1420 private clearCredentials : CredentialsHandlersInput [ 'clear' ] ;
15- private validateToken : CredentialsHandlersInput [ 'validateToken' ] ;
16-
21+ private validateToken ? : CredentialsHandlersInput [ 'validateToken' ] ;
22+ private tokenToValidate ?: tokenToValidateType ;
1723 private errors : Record < ErrorCases , ErrorPublisher > = {
1824 AUTHORIZATION : new ErrorPublisher ( ) ,
1925 CLEAR_SESSION : new ErrorPublisher ( ) ,
2026 REFRESH_TOKEN : new ErrorPublisher ( ) ,
2127 SAVE_CREDENTIALS : new ErrorPublisher ( ) ,
2228 } ;
2329
30+ /**
31+ * Create a client to used to authenticate with auth0 platform and manage that auth state.
32+ *
33+ * @param {Options } options - Options.
34+ * @param {CredentialsHandlersInput } credentialsHandlers - Options to handle the credentials and token validations.
35+ */
2436 constructor ( options : Options , credentialsHandlers : CredentialsHandlersInput ) {
2537 super ( options ) ;
2638 this . saveCredentials = credentialsHandlers . save ;
2739 this . getCredentials = credentialsHandlers . get ;
2840 this . clearCredentials = credentialsHandlers . clear ;
2941 this . validateToken = credentialsHandlers . validateToken ;
42+ this . tokenToValidate = credentialsHandlers . tokenToValidate ;
43+
44+ // set a default audience if the options is undefined
45+ this . audience = options . audience || `https://${ options . domain } /api/v2/` ;
3046 }
3147
3248 async handleCredentials ( data : Auth0Credentials ) : Promise < Credentials > {
@@ -49,8 +65,8 @@ export class Auth0Native extends Auth0 {
4965 /**
5066 *
5167 * @param {string } scope - Scopes requested for the issued tokens. E.g. `openid profile`.
52- * @param {object } options - Options to pass to the auth endpoint.
53- * @returns {object } The auth0 credentials.
68+ * @param {AuthorizeOptions } options - Options to pass to the auth endpoint.
69+ * @returns {Promise<Credentials | undefined> } The auth0 credentials.
5470 */
5571 async authorize (
5672 scope : string ,
@@ -60,6 +76,7 @@ export class Auth0Native extends Auth0 {
6076 const result = await this . webAuth . authorize (
6177 {
6278 scope,
79+ audience : this . audience ,
6380 } ,
6481 options ,
6582 ) ;
@@ -90,8 +107,20 @@ export class Auth0Native extends Auth0 {
90107 if ( ! credentials ) {
91108 return false ;
92109 }
110+ let valid = false ;
111+
112+ if ( this . validateToken && this . validateToken ( credentials ) ) {
113+ valid = true ;
114+ }
115+
116+ if (
117+ this . tokenToValidate &&
118+ validateToken ( credentials [ this . tokenToValidate ] )
119+ ) {
120+ valid = true ;
121+ }
93122
94- if ( this . validateToken ( credentials ) ) {
123+ if ( valid ) {
95124 this . credentials = credentials ;
96125 return true ;
97126 }
0 commit comments