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