@auth0/auth0-react 2.12.0 → 2.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { GetTokenSilentlyOptions, GetTokenWithPopupOptions, IdToken, LogoutOptions as SPALogoutOptions, PopupLoginOptions, PopupConfigOptions, RedirectLoginResult, User, GetTokenSilentlyVerboseResponse, RedirectLoginOptions as SPARedirectLoginOptions, type Auth0Client, RedirectConnectAccountOptions, ConnectAccountRedirectResult, CustomTokenExchangeOptions, TokenEndpointResponse } from '@auth0/auth0-spa-js';
1
+ import { GetTokenSilentlyOptions, GetTokenWithPopupOptions, IdToken, LogoutOptions as SPALogoutOptions, PopupLoginOptions, PopupConfigOptions, RedirectLoginResult, User, GetTokenSilentlyVerboseResponse, RedirectLoginOptions as SPARedirectLoginOptions, type Auth0Client, RedirectConnectAccountOptions, ConnectAccountRedirectResult, CustomTokenExchangeOptions, TokenEndpointResponse, type MfaApiClient } from '@auth0/auth0-spa-js';
2
2
  import { AuthState } from './auth-state';
3
3
  import { AppState } from './auth0-provider';
4
4
  export interface LogoutOptions extends Omit<SPALogoutOptions, 'onRedirect'> {
@@ -64,6 +64,57 @@ export interface Auth0ContextInterface<TUser extends User = User> extends AuthSt
64
64
  */
65
65
  getIdTokenClaims: () => Promise<IdToken | undefined>;
66
66
  /**
67
+ * ```js
68
+ * await loginWithCustomTokenExchange(options);
69
+ * ```
70
+ *
71
+ * Exchanges an external subject token for Auth0 tokens and logs the user in.
72
+ * This method implements the Custom Token Exchange grant as specified in RFC 8693.
73
+ *
74
+ * The exchanged tokens are automatically cached, establishing an authenticated session.
75
+ * After calling this method, you can use `getUser()`, `getIdTokenClaims()`, and
76
+ * `getTokenSilently()` to access the user's information and tokens.
77
+ *
78
+ * @param options - The options required to perform the token exchange.
79
+ *
80
+ * @returns A promise that resolves to the token endpoint response,
81
+ * which contains the issued Auth0 tokens (access_token, id_token, etc.).
82
+ *
83
+ * The request includes the following parameters:
84
+ * - `grant_type`: "urn:ietf:params:oauth:grant-type:token-exchange"
85
+ * - `subject_token`: The external token to exchange
86
+ * - `subject_token_type`: The type identifier of the external token
87
+ * - `scope`: Merged scopes from the request and SDK defaults
88
+ * - `audience`: Target audience (defaults to SDK configuration)
89
+ * - `organization`: Optional organization ID/name for org-scoped authentication
90
+ *
91
+ * **Example Usage:**
92
+ *
93
+ * ```js
94
+ * const options = {
95
+ * subject_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp...',
96
+ * subject_token_type: 'urn:acme:legacy-system-token',
97
+ * scope: 'openid profile email',
98
+ * audience: 'https://api.example.com',
99
+ * organization: 'org_12345'
100
+ * };
101
+ *
102
+ * try {
103
+ * const tokenResponse = await loginWithCustomTokenExchange(options);
104
+ * console.log('Access token:', tokenResponse.access_token);
105
+ *
106
+ * // User is now logged in - access user info
107
+ * const user = await getUser();
108
+ * console.log('Logged in user:', user);
109
+ * } catch (error) {
110
+ * console.error('Token exchange failed:', error);
111
+ * }
112
+ * ```
113
+ */
114
+ loginWithCustomTokenExchange: (options: CustomTokenExchangeOptions) => Promise<TokenEndpointResponse>;
115
+ /**
116
+ * @deprecated Use `loginWithCustomTokenExchange()` instead. This method will be removed in the next major version.
117
+ *
67
118
  * ```js
68
119
  * const tokenResponse = await exchangeToken({
69
120
  * subject_token: 'external_token_value',
@@ -72,18 +123,20 @@ export interface Auth0ContextInterface<TUser extends User = User> extends AuthSt
72
123
  * });
73
124
  * ```
74
125
  *
75
- * Exchanges an external subject token for Auth0 tokens via a token exchange request.
126
+ * Exchanges an external subject token for Auth0 tokens and logs the user in.
76
127
  *
77
128
  * This method implements the token exchange grant as specified in RFC 8693.
78
129
  * It performs a token exchange by sending a request to the `/oauth/token` endpoint
79
130
  * with the external token and returns Auth0 tokens (access token, ID token, etc.).
80
131
  *
81
- * The request includes the following parameters:
82
- * - `grant_type`: Hard-coded to "urn:ietf:params:oauth:grant-type:token-exchange"
83
- * - `subject_token`: The external token to be exchanged
84
- * - `subject_token_type`: A namespaced URI identifying the token type (must be under your organization's control)
85
- * - `audience`: The target audience (falls back to the SDK's default audience if not provided)
86
- * - `scope`: Space-separated list of scopes (merged with the SDK's default scopes)
132
+ * **Example:**
133
+ * ```js
134
+ * // Instead of:
135
+ * const tokens = await exchangeToken(options);
136
+ *
137
+ * // Use:
138
+ * const tokens = await loginWithCustomTokenExchange(options);
139
+ * ```
87
140
  *
88
141
  * @param options - The options required to perform the token exchange
89
142
  * @returns A promise that resolves to the token endpoint response containing Auth0 tokens
@@ -204,6 +257,59 @@ export interface Auth0ContextInterface<TUser extends User = User> extends AuthSt
204
257
  * containing the domain and clientId.
205
258
  */
206
259
  getConfiguration: Auth0Client['getConfiguration'];
260
+ /**
261
+ * ```js
262
+ * const { mfa } = useAuth0();
263
+ * const authenticators = await mfa.getAuthenticators(mfaToken);
264
+ * ```
265
+ *
266
+ * MFA API client for Multi-Factor Authentication operations.
267
+ *
268
+ * Provides access to all MFA-related methods:
269
+ * - `getAuthenticators(mfaToken)` - List enrolled authenticators
270
+ * - `enroll(params)` - Enroll new authenticators (OTP, SMS, Voice, Email, Push)
271
+ * - `challenge(params)` - Initiate MFA challenges
272
+ * - `verify(params)` - Verify MFA challenges and complete authentication
273
+ * - `getEnrollmentFactors(mfaToken)` - Get available enrollment factors
274
+ *
275
+ * @example
276
+ * ```js
277
+ * const { mfa, getAccessTokenSilently } = useAuth0();
278
+ *
279
+ * try {
280
+ * await getAccessTokenSilently();
281
+ * } catch (error) {
282
+ * if (error.error === 'mfa_required') {
283
+ * // Check if enrollment is needed
284
+ * const factors = await mfa.getEnrollmentFactors(error.mfa_token);
285
+ *
286
+ * if (factors.length > 0) {
287
+ * // Enroll in OTP
288
+ * const enrollment = await mfa.enroll({
289
+ * mfaToken: error.mfa_token,
290
+ * factorType: 'otp'
291
+ * });
292
+ * console.log('QR Code:', enrollment.barcodeUri);
293
+ * }
294
+ *
295
+ * // Get authenticators and challenge
296
+ * const authenticators = await mfa.getAuthenticators(error.mfa_token);
297
+ * await mfa.challenge({
298
+ * mfaToken: error.mfa_token,
299
+ * challengeType: 'otp',
300
+ * authenticatorId: authenticators[0].id
301
+ * });
302
+ *
303
+ * // Verify with user's code
304
+ * const tokens = await mfa.verify({
305
+ * mfaToken: error.mfa_token,
306
+ * otp: userCode
307
+ * });
308
+ * }
309
+ * }
310
+ * ```
311
+ */
312
+ mfa: MfaApiClient;
207
313
  }
208
314
  /**
209
315
  * @ignore
@@ -214,6 +320,7 @@ export declare const initialContext: {
214
320
  getAccessTokenSilently: () => never;
215
321
  getAccessTokenWithPopup: () => never;
216
322
  getIdTokenClaims: () => never;
323
+ loginWithCustomTokenExchange: () => never;
217
324
  exchangeToken: () => never;
218
325
  loginWithRedirect: () => never;
219
326
  loginWithPopup: () => never;
@@ -225,6 +332,7 @@ export declare const initialContext: {
225
332
  generateDpopProof: () => never;
226
333
  createFetcher: () => never;
227
334
  getConfiguration: () => never;
335
+ mfa: MfaApiClient;
228
336
  error: Error | undefined;
229
337
  isAuthenticated: boolean;
230
338
  isLoading: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"auth0-context.d.ts","sourceRoot":"","sources":["../src/auth0-context.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth0-context.d.ts","sourceRoot":"","sources":["../src/auth0-context.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth0-provider.d.ts","sourceRoot":"","sources":["../src/auth0-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,EAEL,kBAAkB,EAMlB,IAAI,EAEJ,4BAA4B,EAC5B,YAAY,EAGb,MAAM,qBAAqB,CAAC;AAC7B,OAAqB,EACnB,qBAAqB,EAGtB,MAAM,iBAAiB,CAAC;AAUzB;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,4BAA4B,EAAE,UAAU,GAAG,eAAe,CAAC,CAAC;AAEhG;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,KAAK,SAAS,IAAI,GAAG,IAAI,CAAE,SAAQ,kBAAkB;IACzF;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACjE;;;;;;;;;;;;OAYG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;CACvD;AAoCD;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,aAAa,GAAI,KAAK,SAAS,IAAI,GAAG,IAAI,EAAE,MAAM,oBAAoB,CAAC,KAAK,CAAC,sBA8OlF,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"auth0-provider.d.ts","sourceRoot":"","sources":["../src/auth0-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,EAEL,kBAAkB,EAMlB,IAAI,EAEJ,4BAA4B,EAC5B,YAAY,EAGb,MAAM,qBAAqB,CAAC;AAC7B,OAAqB,EACnB,qBAAqB,EAGtB,MAAM,iBAAiB,CAAC;AAUzB;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,4BAA4B,EAAE,UAAU,GAAG,eAAe,CAAC,CAAC;AAEhG;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,KAAK,SAAS,IAAI,GAAG,IAAI,CAAE,SAAQ,kBAAkB;IACzF;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACjE;;;;;;;;;;;;OAYG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;CACvD;AAoCD;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,aAAa,GAAI,KAAK,SAAS,IAAI,GAAG,IAAI,EAAE,MAAM,oBAAoB,CAAC,KAAK,CAAC,sBA6PlF,CAAC;AAEF,eAAe,aAAa,CAAC"}