@asgardeo/react 0.20.1 → 0.21.1

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,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com).
2
+ * Copyright (c) 2025-2026, WSO2 LLC. (https://www.wso2.com).
3
3
  *
4
4
  * WSO2 LLC. licenses this file to you under the Apache License,
5
5
  * Version 2.0 (the "License"); you may not use this file except
@@ -63,6 +63,7 @@ declare class AsgardeoReactClient<T extends AsgardeoReactConfig = AsgardeoReactC
63
63
  isLoading(): boolean;
64
64
  isInitialized(): Promise<boolean>;
65
65
  isSignedIn(): Promise<boolean>;
66
+ startAutoRefreshToken(): Promise<void>;
66
67
  getConfiguration(): T;
67
68
  exchangeToken(config: TokenExchangeRequestConfig): Promise<TokenResponse | Response>;
68
69
  signIn(options?: SignInOptions, sessionId?: string, onSignInSuccess?: (afterSignInUrl: string) => void): Promise<User>;
@@ -15,7 +15,7 @@
15
15
  * specific language governing permissions and limitations
16
16
  * under the License.
17
17
  */
18
- import { AsgardeoSPAClient, AuthClientConfig, User, LegacyConfig as Config, IdToken, Hooks, HttpClientInstance, HttpRequestConfig, HttpResponse, OIDCEndpoints, SignInConfig, SPACustomGrantConfig } from '@asgardeo/browser';
18
+ import { AsgardeoSPAClient, AuthClientConfig, User, LegacyConfig as Config, IdToken, Hooks, HttpClient, HttpRequestConfig, HttpResponse, OIDCEndpoints, SignInConfig, SPACustomGrantConfig } from '@asgardeo/browser';
19
19
  import { AuthStateInterface } from './models';
20
20
  declare class AuthAPI {
21
21
  static DEFAULT_STATE: AuthStateInterface;
@@ -133,9 +133,9 @@ declare class AuthAPI {
133
133
  /**
134
134
  * This methods returns the Axios http client.
135
135
  *
136
- * @return {HttpClientInstance} - The Axios HTTP client.
136
+ * @return {HttpClient} - The Axios HTTP client.
137
137
  */
138
- getHttpClient(): Promise<HttpClientInstance>;
138
+ getHttpClient(): Promise<HttpClient>;
139
139
  /**
140
140
  * This method decodes a JWT token payload and returns it.
141
141
  *
@@ -193,6 +193,7 @@ declare class AuthAPI {
193
193
  * @return {Promise<boolean>} - A Promise that resolves with `true` if teh user is authenticated.
194
194
  */
195
195
  isSignedIn(): Promise<boolean>;
196
+ startAutoRefreshToken(): Promise<void>;
196
197
  /**
197
198
  * This method specifies if the session is active or not.
198
199
  *
@@ -15,7 +15,7 @@
15
15
  * specific language governing permissions and limitations
16
16
  * under the License.
17
17
  */
18
- import { AsgardeoAuthException, AuthClientConfig, AuthSPAClientConfig, Config, TokenExchangeRequestConfig, IdToken, Hooks, HttpClientInstance, HttpRequestConfig, HttpResponse, OIDCEndpoints, SignInConfig, User } from '@asgardeo/browser';
18
+ import { AsgardeoAuthException, AuthClientConfig, AuthSPAClientConfig, Config, TokenExchangeRequestConfig, IdToken, Hooks, HttpClient, HttpRequestConfig, HttpResponse, OIDCEndpoints, SignInConfig, User } from '@asgardeo/browser';
19
19
  export interface ReactConfig {
20
20
  disableAutoSignIn?: boolean;
21
21
  /**
@@ -65,7 +65,7 @@ export interface AuthContextInterface {
65
65
  getAccessToken(): Promise<string>;
66
66
  getDecodedIDPIDToken(): Promise<IdToken>;
67
67
  getDecodedIdToken(sessionId?: string): Promise<IdToken>;
68
- getHttpClient(): Promise<HttpClientInstance>;
68
+ getHttpClient(): Promise<HttpClient>;
69
69
  getIdToken(): Promise<string>;
70
70
  getOpenIDProviderEndpoints(): Promise<OIDCEndpoints>;
71
71
  getUser(): Promise<User>;
package/dist/cjs/index.js CHANGED
@@ -427,7 +427,7 @@ var _AuthAPI = class _AuthAPI {
427
427
  /**
428
428
  * This methods returns the Axios http client.
429
429
  *
430
- * @return {HttpClientInstance} - The Axios HTTP client.
430
+ * @return {HttpClient} - The Axios HTTP client.
431
431
  */
432
432
  async getHttpClient() {
433
433
  return this.client.getHttpClient();
@@ -505,6 +505,9 @@ var _AuthAPI = class _AuthAPI {
505
505
  async isSignedIn() {
506
506
  return this.client.isSignedIn();
507
507
  }
508
+ async startAutoRefreshToken() {
509
+ return this.client.startAutoRefreshToken();
510
+ }
508
511
  /**
509
512
  * This method specifies if the session is active or not.
510
513
  *
@@ -748,7 +751,11 @@ var AsgardeoReactClient = class extends import_browser6.AsgardeoBrowserClient {
748
751
  resolvedOrganizationHandle = (0, import_browser6.deriveOrganizationHandleFromBaseUrl)(config?.baseUrl);
749
752
  }
750
753
  return this.withLoading(async () => {
751
- this.initializeConfig = { ...config, organizationHandle: resolvedOrganizationHandle };
754
+ this.initializeConfig = {
755
+ ...config,
756
+ organizationHandle: resolvedOrganizationHandle,
757
+ periodicTokenRefresh: config?.tokenLifecycle?.refreshToken?.autoRefresh ?? config?.periodicTokenRefresh
758
+ };
752
759
  return this.asgardeo.init(this.initializeConfig);
753
760
  });
754
761
  }
@@ -919,6 +926,9 @@ var AsgardeoReactClient = class extends import_browser6.AsgardeoBrowserClient {
919
926
  async isSignedIn() {
920
927
  return this.asgardeo.isSignedIn();
921
928
  }
929
+ async startAutoRefreshToken() {
930
+ return this.asgardeo.startAutoRefreshToken();
931
+ }
922
932
  getConfiguration() {
923
933
  return this.asgardeo.getConfigData();
924
934
  }
@@ -2114,6 +2124,10 @@ var UserProvider_default = UserProvider;
2114
2124
 
2115
2125
  // src/contexts/Asgardeo/AsgardeoProvider.tsx
2116
2126
  var import_jsx_runtime10 = require("react/jsx-runtime");
2127
+ var logger3 = (0, import_browser16.createPackageComponentLogger)(
2128
+ "@asgardeo/react",
2129
+ "AsgardeoProvider"
2130
+ );
2117
2131
  var AsgardeoProvider = ({
2118
2132
  afterSignInUrl = window.location.origin,
2119
2133
  afterSignOutUrl = window.location.origin,
@@ -2271,8 +2285,23 @@ var AsgardeoProvider = ({
2271
2285
  reRenderCheckRef.current = true;
2272
2286
  (async () => {
2273
2287
  const isAlreadySignedIn = await asgardeo.isSignedIn();
2274
- if (isAlreadySignedIn) {
2288
+ const scheduleAutoRefresh = async () => {
2289
+ try {
2290
+ await asgardeo.startAutoRefreshToken();
2291
+ } catch (error) {
2292
+ logger3.warn("Failed to schedule automatic token refresh.", error);
2293
+ }
2294
+ };
2295
+ const resumeSession = async () => {
2275
2296
  await updateSession();
2297
+ await scheduleAutoRefresh();
2298
+ };
2299
+ if (isAlreadySignedIn) {
2300
+ await resumeSession();
2301
+ }
2302
+ await scheduleAutoRefresh();
2303
+ if (await asgardeo.isSignedIn()) {
2304
+ await resumeSession();
2276
2305
  return;
2277
2306
  }
2278
2307
  const currentUrl = new URL(window.location.href);
@@ -2928,7 +2957,7 @@ var useForm_default = useForm;
2928
2957
 
2929
2958
  // src/hooks/useBranding.ts
2930
2959
  var import_browser18 = require("@asgardeo/browser");
2931
- var logger3 = (0, import_browser18.createPackageComponentLogger)(
2960
+ var logger4 = (0, import_browser18.createPackageComponentLogger)(
2932
2961
  "@asgardeo/react",
2933
2962
  "useBranding"
2934
2963
  );
@@ -2936,7 +2965,7 @@ var useBranding = () => {
2936
2965
  try {
2937
2966
  return useBrandingContext_default();
2938
2967
  } catch (error) {
2939
- logger3.warn(
2968
+ logger4.warn(
2940
2969
  "useBranding: BrandingProvider not available. Make sure to wrap your app with BrandingProvider or AsgardeoProvider with branding preferences."
2941
2970
  );
2942
2971
  return {
@@ -7007,7 +7036,7 @@ var BaseSignIn_styles_default = useStyles16;
7007
7036
 
7008
7037
  // src/components/presentation/auth/SignIn/v1/BaseSignIn.tsx
7009
7038
  var import_jsx_runtime58 = require("react/jsx-runtime");
7010
- var logger4 = (0, import_browser48.createPackageComponentLogger)(
7039
+ var logger5 = (0, import_browser48.createPackageComponentLogger)(
7011
7040
  "@asgardeo/react",
7012
7041
  "BaseSignIn"
7013
7042
  );
@@ -7094,7 +7123,7 @@ var BaseSignInContent = ({
7094
7123
  "width=500,height=600,scrollbars=yes,resizable=yes"
7095
7124
  );
7096
7125
  if (!popup) {
7097
- logger4.error("Failed to open popup window");
7126
+ logger5.error("Failed to open popup window");
7098
7127
  return false;
7099
7128
  }
7100
7129
  let messageHandler;
@@ -7156,7 +7185,7 @@ var BaseSignInContent = ({
7156
7185
  const state = url.searchParams.get("state");
7157
7186
  const oauthError = url.searchParams.get("error");
7158
7187
  if (oauthError) {
7159
- logger4.error("OAuth error:");
7188
+ logger5.error("OAuth error:");
7160
7189
  popup.close();
7161
7190
  cleanup();
7162
7191
  return;
@@ -7186,7 +7215,7 @@ var BaseSignInContent = ({
7186
7215
  } catch (e) {
7187
7216
  }
7188
7217
  } catch (e) {
7189
- logger4.error("Error monitoring popup:");
7218
+ logger5.error("Error monitoring popup:");
7190
7219
  }
7191
7220
  }, 1e3);
7192
7221
  return true;
@@ -7325,7 +7354,7 @@ var BaseSignInContent = ({
7325
7354
  }
7326
7355
  }
7327
7356
  } catch (passkeyError) {
7328
- logger4.error("Passkey authentication error:");
7357
+ logger5.error("Passkey authentication error:");
7329
7358
  let errorMessage = passkeyError instanceof Error ? passkeyError.message : t("errors.signin.flow.passkeys.failure");
7330
7359
  if (passkeyError instanceof Error && passkeyError.message.includes("security")) {
7331
7360
  errorMessage += " This may be due to browser security settings, an insecure connection, or device restrictions.";
@@ -8718,7 +8747,7 @@ var flowIconRegistry_default = flowIconRegistry;
8718
8747
 
8719
8748
  // src/components/presentation/auth/AuthOptionFactory.tsx
8720
8749
  var import_jsx_runtime68 = require("react/jsx-runtime");
8721
- var logger5 = (0, import_browser53.createPackageComponentLogger)(
8750
+ var logger6 = (0, import_browser53.createPackageComponentLogger)(
8722
8751
  "@asgardeo/react",
8723
8752
  "AuthOptionFactory"
8724
8753
  );
@@ -8961,7 +8990,7 @@ var createAuthComponentFromFlow = (component, formValues, touchedFields, formErr
8961
8990
  const identifier = component.ref ?? component.id;
8962
8991
  const rootOuId = options.additionalData?.["rootOuId"];
8963
8992
  if (!rootOuId || !options.fetchOrganizationUnitChildren) {
8964
- logger5.warn("OU_SELECT requires additionalData.rootOuId and fetchOrganizationUnitChildren. Skipping render.");
8993
+ logger6.warn("OU_SELECT requires additionalData.rootOuId and fetchOrganizationUnitChildren. Skipping render.");
8965
8994
  return null;
8966
8995
  }
8967
8996
  return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
@@ -9042,7 +9071,7 @@ var createAuthComponentFromFlow = (component, formValues, touchedFields, formErr
9042
9071
  const iconName = component.name || "";
9043
9072
  const IconComponent = flowIconRegistry_default[iconName];
9044
9073
  if (!IconComponent) {
9045
- logger5.warn(`Unknown icon name: "${iconName}". Skipping render.`);
9074
+ logger6.warn(`Unknown icon name: "${iconName}". Skipping render.`);
9046
9075
  return null;
9047
9076
  }
9048
9077
  return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(IconComponent, { size: component.size || 24, color: component.color || "currentColor" }, key);
@@ -9098,7 +9127,7 @@ var createAuthComponentFromFlow = (component, formValues, touchedFields, formErr
9098
9127
  return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(FlowTimer_default, { expiresIn, textTemplate }, key);
9099
9128
  }
9100
9129
  default:
9101
- logger5.warn(`Unsupported component type: ${component.type}. Skipping render.`);
9130
+ logger6.warn(`Unsupported component type: ${component.type}. Skipping render.`);
9102
9131
  return null;
9103
9132
  }
9104
9133
  };
@@ -10844,7 +10873,7 @@ var BaseSignUp_styles_default = useStyles20;
10844
10873
 
10845
10874
  // src/components/presentation/auth/SignUp/v1/BaseSignUp.tsx
10846
10875
  var import_jsx_runtime79 = require("react/jsx-runtime");
10847
- var logger6 = (0, import_browser68.createPackageComponentLogger)(
10876
+ var logger7 = (0, import_browser68.createPackageComponentLogger)(
10848
10877
  "@asgardeo/react",
10849
10878
  "BaseSignUp"
10850
10879
  );
@@ -10985,7 +11014,7 @@ var BaseSignUpContent = ({
10985
11014
  const redirectUrl = response.data.redirectURL;
10986
11015
  const popup = window.open(redirectUrl, "oauth_popup", "width=500,height=600,scrollbars=yes,resizable=yes");
10987
11016
  if (!popup) {
10988
- logger6.error("Failed to open popup window");
11017
+ logger7.error("Failed to open popup window");
10989
11018
  return false;
10990
11019
  }
10991
11020
  let hasProcessedCallback = false;
@@ -11054,7 +11083,7 @@ var BaseSignUpContent = ({
11054
11083
  const state = url.searchParams.get("state");
11055
11084
  const error = url.searchParams.get("error");
11056
11085
  if (error) {
11057
- logger6.error("OAuth error:");
11086
+ logger7.error("OAuth error:");
11058
11087
  popup.close();
11059
11088
  cleanup();
11060
11089
  return;
@@ -11089,7 +11118,7 @@ var BaseSignUpContent = ({
11089
11118
  } catch (e) {
11090
11119
  }
11091
11120
  } catch (e) {
11092
- logger6.error("Error monitoring popup:");
11121
+ logger7.error("Error monitoring popup:");
11093
11122
  }
11094
11123
  }, 1e3);
11095
11124
  return true;
@@ -11353,7 +11382,7 @@ var getAuthComponentHeadings_default = getAuthComponentHeadings;
11353
11382
 
11354
11383
  // src/components/presentation/auth/SignUp/v2/BaseSignUp.tsx
11355
11384
  var import_jsx_runtime80 = require("react/jsx-runtime");
11356
- var logger7 = (0, import_browser69.createPackageComponentLogger)(
11385
+ var logger8 = (0, import_browser69.createPackageComponentLogger)(
11357
11386
  "@asgardeo/react",
11358
11387
  "BaseSignUp"
11359
11388
  );
@@ -11510,7 +11539,7 @@ var BaseSignUpContent2 = ({
11510
11539
  const redirectUrl = response.data.redirectURL;
11511
11540
  const popup = window.open(redirectUrl, "oauth_popup", "width=500,height=600,scrollbars=yes,resizable=yes");
11512
11541
  if (!popup) {
11513
- logger7.error("Failed to open popup window");
11542
+ logger8.error("Failed to open popup window");
11514
11543
  return false;
11515
11544
  }
11516
11545
  let hasProcessedCallback = false;
@@ -11581,7 +11610,7 @@ var BaseSignUpContent2 = ({
11581
11610
  const state = url.searchParams.get("state");
11582
11611
  const error = url.searchParams.get("error");
11583
11612
  if (error) {
11584
- logger7.error("OAuth error:");
11613
+ logger8.error("OAuth error:");
11585
11614
  popup.close();
11586
11615
  cleanup();
11587
11616
  return;
@@ -11616,7 +11645,7 @@ var BaseSignUpContent2 = ({
11616
11645
  } catch (e) {
11617
11646
  }
11618
11647
  } catch (e) {
11619
- logger7.error("Error monitoring popup:");
11648
+ logger8.error("Error monitoring popup:");
11620
11649
  }
11621
11650
  }, 1e3);
11622
11651
  return true;
@@ -15960,7 +15989,7 @@ var BaseCreateOrganization_styles_default = useStyles29;
15960
15989
 
15961
15990
  // src/components/presentation/CreateOrganization/BaseCreateOrganization.tsx
15962
15991
  var import_jsx_runtime109 = require("react/jsx-runtime");
15963
- var logger8 = (0, import_browser86.createPackageComponentLogger)(
15992
+ var logger9 = (0, import_browser86.createPackageComponentLogger)(
15964
15993
  "@asgardeo/react",
15965
15994
  "BaseCreateOrganization"
15966
15995
  );
@@ -16046,7 +16075,7 @@ var BaseCreateOrganization = ({
16046
16075
  onSuccess(payload);
16047
16076
  }
16048
16077
  } catch (submitError) {
16049
- logger8.error("Form submission error:");
16078
+ logger9.error("Form submission error:");
16050
16079
  }
16051
16080
  };
16052
16081
  const createOrganizationContent = /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("div", { className: (0, import_css64.cx)(styles["root"], cardLayout && styles["card"], className), style, children: /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)("div", { className: (0, import_css64.cx)(styles["content"]), children: [
@@ -17573,7 +17602,7 @@ var updateOrganization_default = updateOrganization;
17573
17602
 
17574
17603
  // src/components/presentation/OrganizationProfile/OrganizationProfile.tsx
17575
17604
  var import_jsx_runtime115 = require("react/jsx-runtime");
17576
- var logger9 = (0, import_browser92.createPackageComponentLogger)(
17605
+ var logger10 = (0, import_browser92.createPackageComponentLogger)(
17577
17606
  "@asgardeo/react",
17578
17607
  "OrganizationProfile"
17579
17608
  );
@@ -17604,7 +17633,7 @@ var OrganizationProfile = ({
17604
17633
  });
17605
17634
  setOrganization(orgData);
17606
17635
  } catch (err) {
17607
- logger9.error("Failed to fetch organization:");
17636
+ logger10.error("Failed to fetch organization:");
17608
17637
  setOrganization(null);
17609
17638
  }
17610
17639
  };
@@ -17626,7 +17655,7 @@ var OrganizationProfile = ({
17626
17655
  await onUpdate(payload);
17627
17656
  }
17628
17657
  } catch (err) {
17629
- logger9.error("Failed to update organization:");
17658
+ logger10.error("Failed to update organization:");
17630
17659
  throw err;
17631
17660
  }
17632
17661
  };