@nibssplc/cams-sdk-react 0.0.1-beta.30 → 0.0.1-beta.32

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.
package/dist/index.d.ts CHANGED
@@ -2,6 +2,6 @@ export * from './hooks/useCAMSAuth';
2
2
  export * from './hooks/useCAMSMSALAuth';
3
3
  export * from './components/CAMSProvider';
4
4
  export * from './components/ProtectedRoute';
5
- export * from './components/CAMSMSALProvider';
5
+ export { CAMSMSALProvider, useCAMSMSALContext } from './components/CAMSMSALProvider';
6
6
  export * from './components/ClientOnly';
7
7
  export * from '@nibssplc/cams-sdk';
package/dist/index.esm.js CHANGED
@@ -16700,11 +16700,12 @@ function useCAMSMSALAuth(options) {
16700
16700
  var _d = useState(null), idToken = _d[0], setIdToken = _d[1];
16701
16701
  var _e = useState(null), accessToken = _e[0], setAccessToken = _e[1];
16702
16702
  var _f = useState(false), isMFAPending = _f[0], setIsMFAPending = _f[1];
16703
+ var _g = useState(false), hasRedirected = _g[0], setHasRedirected = _g[1];
16703
16704
  var isLoading = inProgress !== InteractionStatus.None;
16704
16705
  var isAuthenticated = !!account && !!token && !isMFAPending;
16705
16706
  var scopes = options.scopes || ["openid", "profile", "email"];
16706
16707
  useEffect(function () {
16707
- if (account && !isMFAPending) {
16708
+ if (account && !isMFAPending && !hasRedirected) {
16708
16709
  // Get token in foreground popup
16709
16710
  instance
16710
16711
  .acquireTokenPopup({
@@ -16718,9 +16719,13 @@ function useCAMSMSALAuth(options) {
16718
16719
  setAccessToken(response.accessToken);
16719
16720
  setIdToken(response.idToken);
16720
16721
  setIsMFAPending(true);
16721
- if (typeof window !== "undefined") {
16722
- window.location.href = options.mfaUrl;
16723
- }
16722
+ setHasRedirected(true);
16723
+ // Small delay to ensure popup closes before redirect
16724
+ setTimeout(function () {
16725
+ if (typeof window !== "undefined" && process.env.NODE_ENV !== 'test') {
16726
+ window.location.href = options.mfaUrl;
16727
+ }
16728
+ }, 100);
16724
16729
  (_a = options.onAuthSuccess) === null || _a === void 0 ? void 0 : _a.call(options, response.accessToken);
16725
16730
  })
16726
16731
  .catch(function (err) {
@@ -16730,7 +16735,7 @@ function useCAMSMSALAuth(options) {
16730
16735
  (_a = options.onAuthError) === null || _a === void 0 ? void 0 : _a.call(options, camsError);
16731
16736
  });
16732
16737
  }
16733
- }, [account, instance, isMFAPending]);
16738
+ }, [account, instance, isMFAPending, hasRedirected]);
16734
16739
  var login = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
16735
16740
  var err_1, redirectErr_1, camsError_1, camsError;
16736
16741
  var _a, _b, _c;
@@ -16741,7 +16746,7 @@ function useCAMSMSALAuth(options) {
16741
16746
  _d.label = 1;
16742
16747
  case 1:
16743
16748
  _d.trys.push([1, 3, , 8]);
16744
- return [4 /*yield*/, instance.loginPopup({
16749
+ return [4 /*yield*/, instance.loginRedirect({
16745
16750
  scopes: scopes,
16746
16751
  prompt: options.prompt || "login",
16747
16752
  })];
@@ -16789,6 +16794,7 @@ function useCAMSMSALAuth(options) {
16789
16794
  setToken(null);
16790
16795
  setError(null);
16791
16796
  setIsMFAPending(false);
16797
+ setHasRedirected(false);
16792
16798
  return [3 /*break*/, 3];
16793
16799
  case 2:
16794
16800
  err_2 = _a.sent();
@@ -17234,16 +17240,9 @@ var jsxRuntimeExports = jsxRuntime.exports;
17234
17240
  var CAMSContext = createContext(null);
17235
17241
  function CAMSProvider(_a) {
17236
17242
  var children = _a.children, defaultConfig = _a.defaultConfig, msalOptions = _a.msalOptions, authOptions = __rest(_a, ["children", "defaultConfig", "msalOptions"]);
17237
- var _b = useState(false), mounted = _b[0], setMounted = _b[1];
17238
17243
  var auth = useCAMSAuth(authOptions);
17239
17244
  var msalAuth = useCAMSMSALAuth(msalOptions || { mfaUrl: '/auth/multi-factor' });
17240
- useEffect(function () {
17241
- setMounted(true);
17242
- }, []);
17243
17245
  var value = useMemo(function () { return (__assign(__assign({}, auth), { defaultConfig: defaultConfig, isAuthenticated: msalAuth.isAuthenticated, idToken: msalAuth.idToken, accessToken: msalAuth.accessToken })); }, [auth, defaultConfig, msalAuth.isAuthenticated, msalAuth.idToken, msalAuth.accessToken]);
17244
- if (!mounted) {
17245
- return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: children });
17246
- }
17247
17246
  return (jsxRuntimeExports.jsx(CAMSContext.Provider, { value: value, children: children }));
17248
17247
  }
17249
17248
  function useCAMSContext() {
@@ -17270,10 +17269,48 @@ function ProtectedRoute(_a) {
17270
17269
  return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: children });
17271
17270
  }
17272
17271
 
17273
- function CAMSMSALProvider(_a) {
17274
- var children = _a.children, msalConfig = _a.msalConfig, msalInstance = _a.msalInstance;
17272
+ var CAMSMSALContext = createContext(null);
17273
+ function CAMSMSALProviderInner(_a) {
17274
+ var children = _a.children, authOptions = __rest(_a, ["children"]);
17275
+ var auth = useCAMSMSALAuth(authOptions);
17276
+ var _b = useState({
17277
+ isAuthenticated: false,
17278
+ idToken: null,
17279
+ accessToken: null
17280
+ }), persistedAuth = _b[0], setPersistedAuth = _b[1];
17281
+ useEffect(function () {
17282
+ if (typeof window !== 'undefined') {
17283
+ var stored = localStorage.getItem('cams-msal-auth');
17284
+ if (stored) {
17285
+ setPersistedAuth(JSON.parse(stored));
17286
+ }
17287
+ }
17288
+ }, []);
17289
+ useEffect(function () {
17290
+ var authState = {
17291
+ isAuthenticated: auth.isAuthenticated,
17292
+ idToken: auth.idToken,
17293
+ accessToken: auth.accessToken
17294
+ };
17295
+ setPersistedAuth(authState);
17296
+ if (typeof window !== 'undefined') {
17297
+ localStorage.setItem('cams-msal-auth', JSON.stringify(authState));
17298
+ }
17299
+ }, [auth.isAuthenticated, auth.idToken, auth.accessToken]);
17300
+ var value = useMemo(function () { return (__assign(__assign({}, auth), { isAuthenticated: persistedAuth.isAuthenticated, idToken: persistedAuth.idToken, accessToken: persistedAuth.accessToken })); }, [auth, persistedAuth]);
17301
+ return (jsxRuntimeExports.jsx(CAMSMSALContext.Provider, { value: value, children: children }));
17302
+ }
17303
+ function CAMSMSALProvider(props) {
17304
+ var msalConfig = props.msalConfig, msalInstance = props.msalInstance;
17275
17305
  var instance = msalInstance || new PublicClientApplication(msalConfig);
17276
- return (jsxRuntimeExports.jsx(MsalProvider, { instance: instance, children: children }));
17306
+ return (jsxRuntimeExports.jsx(MsalProvider, { instance: instance, children: jsxRuntimeExports.jsx(CAMSMSALProviderInner, __assign({}, props)) }));
17307
+ }
17308
+ function useCAMSMSALContext() {
17309
+ var context = useContext(CAMSMSALContext);
17310
+ if (!context) {
17311
+ throw new Error('useCAMSMSALContext must be used within a CAMSMSALProvider');
17312
+ }
17313
+ return context;
17277
17314
  }
17278
17315
 
17279
17316
  function ClientOnly(_a) {
@@ -17288,5 +17325,5 @@ function ClientOnly(_a) {
17288
17325
  return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: children });
17289
17326
  }
17290
17327
 
17291
- export { CAMSMSALProvider, CAMSProvider, ClientOnly, ProtectedRoute, useCAMSAuth, useCAMSContext, useCAMSMSALAuth };
17328
+ export { CAMSMSALProvider, CAMSProvider, ClientOnly, ProtectedRoute, useCAMSAuth, useCAMSContext, useCAMSMSALAuth, useCAMSMSALContext };
17292
17329
  //# sourceMappingURL=index.esm.js.map