@nibssplc/cams-sdk-react 1.0.0-rc.131 → 1.0.0-rc.133

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.cjs.js CHANGED
@@ -1777,27 +1777,44 @@ var MFAGate = function (_a) {
1777
1777
  }
1778
1778
  return parsed.data;
1779
1779
  }, [MFAEndpoints]);
1780
- // Extract the specific values we need from context for dependencies
1780
+ // Extract primitives from context to avoid object reference churn in deps
1781
1781
  var contextRequiresMFA = "requiresMFA" in context ? context.requiresMFA : false;
1782
1782
  var contextAccessToken = "accessToken" in context ? context.accessToken : "";
1783
- var handleComplete = React.useCallback(function (success) {
1784
- var _a;
1785
- if (success) {
1786
- var accessToken = "accessToken" in context ? context.accessToken : "";
1787
- var idToken = "idToken" in context ? context.idToken : "";
1788
- camsSdk.Logger.info("MFA Authentication Successful");
1789
- setAuthState("Authenticated");
1790
- var tokens = { accessToken: accessToken, idToken: idToken };
1791
- console.log("[MFAGate] Calling onAuthSuccess callbacks", { tokens: tokens, hasLocalCallback: !!onAuthSuccess, hasContextCallback: "onAuthSuccess" in context && !!context.onAuthSuccess });
1792
- onAuthSuccess === null || onAuthSuccess === void 0 ? void 0 : onAuthSuccess(tokens);
1793
- if ("onAuthSuccess" in context) {
1794
- (_a = context.onAuthSuccess) === null || _a === void 0 ? void 0 : _a.call(context, tokens);
1783
+ var contextIdToken = "idToken" in context ? context.idToken : "";
1784
+ var contextHasUser = !!context.user;
1785
+ var contextIsLoading = context.isLoading;
1786
+ // Use refs so callbacks never cause effect/useCallback to re-run
1787
+ var onAuthSuccessRef = React.useRef(onAuthSuccess);
1788
+ var contextOnAuthSuccessRef = React.useRef("onAuthSuccess" in context ? context.onAuthSuccess : undefined);
1789
+ React.useEffect(function () { onAuthSuccessRef.current = onAuthSuccess; }, [onAuthSuccess]);
1790
+ React.useEffect(function () { contextOnAuthSuccessRef.current = "onAuthSuccess" in context ? context.onAuthSuccess : undefined; });
1791
+ var fireOnAuthSuccess = React.useCallback(function (tokens) { return __awaiter$1(void 0, void 0, void 0, function () {
1792
+ var _a, _b;
1793
+ return __generator$1(this, function (_c) {
1794
+ switch (_c.label) {
1795
+ case 0: return [4 /*yield*/, Promise.all([
1796
+ (_a = onAuthSuccessRef.current) === null || _a === void 0 ? void 0 : _a.call(onAuthSuccessRef, tokens),
1797
+ (_b = contextOnAuthSuccessRef.current) === null || _b === void 0 ? void 0 : _b.call(contextOnAuthSuccessRef, tokens),
1798
+ ])];
1799
+ case 1:
1800
+ _c.sent();
1801
+ return [2 /*return*/];
1795
1802
  }
1796
- }
1797
- else {
1798
- camsSdk.Logger.error("MFA Authentication Failed");
1799
- }
1800
- }, [context, onAuthSuccess]);
1803
+ });
1804
+ }); }, [] // stable — reads from refs
1805
+ );
1806
+ var handleComplete = React.useCallback(function (success) { return __awaiter$1(void 0, void 0, void 0, function () {
1807
+ return __generator$1(this, function (_a) {
1808
+ if (success) {
1809
+ camsSdk.Logger.info("MFA Authentication Successful");
1810
+ setAuthState("Completing");
1811
+ }
1812
+ else {
1813
+ camsSdk.Logger.error("MFA Authentication Failed");
1814
+ }
1815
+ return [2 /*return*/];
1816
+ });
1817
+ }); }, []);
1801
1818
  var handleAuthFailed = React.useCallback(function () { return __awaiter$1(void 0, void 0, void 0, function () {
1802
1819
  var _a;
1803
1820
  return __generator$1(this, function (_b) {
@@ -1817,11 +1834,11 @@ var MFAGate = function (_a) {
1817
1834
  });
1818
1835
  }); }, [context, onAuthError]);
1819
1836
  React.useEffect(function () {
1820
- if (context.isLoading) {
1837
+ if (contextIsLoading) {
1821
1838
  setAuthState("Loading");
1822
1839
  return;
1823
1840
  }
1824
- if (context.user) {
1841
+ if (contextHasUser) {
1825
1842
  setAuthState("Authenticated");
1826
1843
  return;
1827
1844
  }
@@ -1830,14 +1847,34 @@ var MFAGate = function (_a) {
1830
1847
  return;
1831
1848
  }
1832
1849
  var shouldRequireMFA = requiresMFA !== null && requiresMFA !== void 0 ? requiresMFA : contextRequiresMFA;
1833
- setAuthState(shouldRequireMFA ? "MFA_Required" : "Authenticated");
1850
+ if (shouldRequireMFA) {
1851
+ setAuthState("MFA_Required");
1852
+ return;
1853
+ }
1854
+ // Only fire once — guard against re-running while already completing/authenticated
1855
+ setAuthState(function (prev) {
1856
+ if (prev === "Completing" || prev === "Authenticated")
1857
+ return prev;
1858
+ return "Completing";
1859
+ });
1834
1860
  }, [
1835
- context.isLoading,
1836
- context.user,
1861
+ contextIsLoading,
1862
+ contextHasUser,
1837
1863
  contextRequiresMFA,
1838
1864
  contextAccessToken,
1839
1865
  requiresMFA,
1840
1866
  ]);
1867
+ // Separate effect: fire callback and advance to Authenticated only when Completing
1868
+ React.useEffect(function () {
1869
+ if (authState !== "Completing")
1870
+ return;
1871
+ var cancelled = false;
1872
+ fireOnAuthSuccess({ accessToken: contextAccessToken, idToken: contextIdToken }).then(function () {
1873
+ if (!cancelled)
1874
+ setAuthState("Authenticated");
1875
+ });
1876
+ return function () { cancelled = true; };
1877
+ }, [authState, contextAccessToken, contextIdToken, fireOnAuthSuccess]);
1841
1878
  if (useADLogin && !CredentialsAuthEndpoint)
1842
1879
  return jsxRuntime.jsx(ErrorFallback, { message: "Invalid AD Login Configuration." });
1843
1880
  if (!ValidatedMFAEndpoints)
@@ -1853,6 +1890,8 @@ var MFAGate = function (_a) {
1853
1890
  return fallback;
1854
1891
  case "MFA_Required":
1855
1892
  return (jsxRuntime.jsx(MFAOptions, { MFAEndpoints: ValidatedMFAEndpoints, onComplete: handleComplete, onAuthFailed: handleAuthFailed }));
1893
+ case "Completing":
1894
+ return fallback;
1856
1895
  case "Authenticated":
1857
1896
  return jsxRuntime.jsx(jsxRuntime.Fragment, { children: children });
1858
1897
  case "Unauthenticated":