@nibssplc/cams-sdk-react 1.0.0-rc.82 → 1.0.0-rc.83
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/components/ADLoginModal.d.ts +1 -1
- package/dist/index.cjs.js +38 -27
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +39 -28
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.js
CHANGED
|
@@ -441,11 +441,9 @@ function useCAMSMSALAuth(options) {
|
|
|
441
441
|
var _d = React.useState(""), idToken = _d[0], setIdToken = _d[1];
|
|
442
442
|
var _e = React.useState(""), accessToken = _e[0], setAccessToken = _e[1];
|
|
443
443
|
var _f = React.useState(""), email = _f[0], setEmail = _f[1];
|
|
444
|
-
// const [mfaAuthenticator, setMfaAuthenticator] =
|
|
445
|
-
// useState<CAMSMFAAuthenticator | null>(null);
|
|
446
444
|
var _g = React.useState(false), requiresMFA = _g[0], setRequiresMFA = _g[1];
|
|
447
445
|
var isLoading = inProgress !== msalBrowser.InteractionStatus.None;
|
|
448
|
-
var isAuthenticated = !!account && !!accessToken
|
|
446
|
+
var isAuthenticated = !!account && !!accessToken;
|
|
449
447
|
var scopes = optScopes || ["openid", "profile", "email"];
|
|
450
448
|
var isTokenValid = function (token) {
|
|
451
449
|
try {
|
|
@@ -1663,12 +1661,13 @@ var credentialsSchema = z.z.object({
|
|
|
1663
1661
|
});
|
|
1664
1662
|
var ADLoginModal = function (_a) {
|
|
1665
1663
|
var open = _a.open, isLoading = _a.isLoading, setIsLoading = _a.setIsLoading, onOpenChange = _a.onOpenChange, onLogin = _a.onLogin;
|
|
1666
|
-
var _b = React.useState("
|
|
1667
|
-
var _c = React.useState(
|
|
1664
|
+
var _b = React.useState("Credentials"), step = _b[0], setStep = _b[1];
|
|
1665
|
+
var _c = React.useState(false), showPassword = _c[0], setShowPassword = _c[1];
|
|
1666
|
+
var _d = React.useState({
|
|
1668
1667
|
username: "",
|
|
1669
1668
|
password: "",
|
|
1670
|
-
}), credentials =
|
|
1671
|
-
var
|
|
1669
|
+
}), credentials = _d[0], setCredentials = _d[1];
|
|
1670
|
+
var _e = React.useState(""), MFACode = _e[0], setMFACode = _e[1];
|
|
1672
1671
|
var form = reactHookForm.useForm({
|
|
1673
1672
|
resolver: a$1(credentialsSchema),
|
|
1674
1673
|
defaultValues: { username: "", password: "" },
|
|
@@ -1676,7 +1675,7 @@ var ADLoginModal = function (_a) {
|
|
|
1676
1675
|
var handleCredentialsSubmit = function (values) { return __awaiter$1(void 0, void 0, void 0, function () {
|
|
1677
1676
|
return __generator$1(this, function (_a) {
|
|
1678
1677
|
setCredentials(values);
|
|
1679
|
-
setStep("
|
|
1678
|
+
setStep("MFA");
|
|
1680
1679
|
return [2 /*return*/];
|
|
1681
1680
|
});
|
|
1682
1681
|
}); };
|
|
@@ -1698,9 +1697,9 @@ var ADLoginModal = function (_a) {
|
|
|
1698
1697
|
case 2:
|
|
1699
1698
|
_a.sent();
|
|
1700
1699
|
onOpenChange(false);
|
|
1701
|
-
setStep("
|
|
1700
|
+
setStep("Credentials");
|
|
1702
1701
|
form.reset();
|
|
1703
|
-
|
|
1702
|
+
setMFACode("");
|
|
1704
1703
|
return [3 /*break*/, 5];
|
|
1705
1704
|
case 3:
|
|
1706
1705
|
error_1 = _a.sent();
|
|
@@ -1715,17 +1714,18 @@ var ADLoginModal = function (_a) {
|
|
|
1715
1714
|
}); };
|
|
1716
1715
|
var handleClose = function () {
|
|
1717
1716
|
onOpenChange(false);
|
|
1718
|
-
setStep("
|
|
1717
|
+
setStep("Credentials");
|
|
1719
1718
|
form.reset();
|
|
1720
|
-
|
|
1719
|
+
setMFACode("");
|
|
1720
|
+
setShowPassword(false);
|
|
1721
1721
|
};
|
|
1722
|
-
return (jsxRuntime.jsx(Dialog, { open: open, onOpenChange: handleClose, children: jsxRuntime.jsxs(DialogContent, { className: "min-w-[50vw] max-w-[70vw]", children: [jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [jsxRuntime.jsx(lucideReact.KeyIcon, { className: "w-8 h-8 text-[#506f4a]" }), jsxRuntime.jsx(DialogTitle, { className: "text-xl", children: "Sign in with AD Credentials" })] }) }), step === "
|
|
1722
|
+
return (jsxRuntime.jsx(Dialog, { open: open, onOpenChange: handleClose, children: jsxRuntime.jsxs(DialogContent, { className: "min-w-[50vw] max-w-[70vw]", children: [jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [jsxRuntime.jsx(lucideReact.KeyIcon, { className: "w-8 h-8 text-[#506f4a]" }), jsxRuntime.jsx(DialogTitle, { className: "text-xl", children: "Sign in with AD Credentials" })] }) }), step === "Credentials" ? (jsxRuntime.jsx(Form, __assign({}, form, { children: jsxRuntime.jsxs("form", { onSubmit: form.handleSubmit(handleCredentialsSubmit), className: "space-y-6", children: [jsxRuntime.jsx(FormField, { control: form.control, name: "username", render: function (_a) {
|
|
1723
1723
|
var field = _a.field;
|
|
1724
1724
|
return (jsxRuntime.jsxs(FormItem, { children: [jsxRuntime.jsx(FormLabel, { children: "Username" }), jsxRuntime.jsx(FormControl, { children: jsxRuntime.jsx(Input, __assign({ className: "h-12", placeholder: "Enter your username" }, field)) }), jsxRuntime.jsx(FormMessage, {})] }));
|
|
1725
1725
|
} }), jsxRuntime.jsx(FormField, { control: form.control, name: "password", render: function (_a) {
|
|
1726
1726
|
var field = _a.field;
|
|
1727
|
-
return (jsxRuntime.jsxs(FormItem, { children: [jsxRuntime.jsx(FormLabel, { children: "Password" }), jsxRuntime.jsx(FormControl, { children: jsxRuntime.jsx(Input, __assign({ className: "h-12", type: "password", placeholder: "Enter your password" }, field)) }), jsxRuntime.jsx(FormMessage, {})] }));
|
|
1728
|
-
} }), jsxRuntime.jsx(Button, { type: "submit", className: "py-3 w-full bg-[#506f4a] hover:bg-[#506f4a]/90", children: "Continue" })] }) }))) : (jsxRuntime.jsxs("div", { className: "space-y-4", children: [jsxRuntime.jsx(GenericOTPVerifier, { value:
|
|
1727
|
+
return (jsxRuntime.jsxs(FormItem, { children: [jsxRuntime.jsx(FormLabel, { children: "Password" }), jsxRuntime.jsx(FormControl, { children: jsxRuntime.jsxs("div", { className: "relative", children: [jsxRuntime.jsx(Input, __assign({ className: "h-12 pr-10", type: "password", placeholder: "Enter your password" }, field)), jsxRuntime.jsx("button", { type: "button", onClick: function () { return setShowPassword(!showPassword); }, className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground", children: showPassword ? (jsxRuntime.jsx(lucideReact.EyeOff, { className: "w-5 h-5" })) : (jsxRuntime.jsx(lucideReact.Eye, { className: "w-5 h-5" })) })] }) }), jsxRuntime.jsx(FormMessage, {})] }));
|
|
1728
|
+
} }), jsxRuntime.jsx(Button, { type: "submit", className: "py-3 w-full bg-[#506f4a] hover:bg-[#506f4a]/90", children: "Continue" })] }) }))) : (jsxRuntime.jsxs("div", { className: "space-y-4", children: [jsxRuntime.jsx(GenericOTPVerifier, { value: MFACode, setValue: setMFACode, setLoading: setIsLoading, isDisabled: isLoading, onChangeOTP: handleMFASubmit, fieldName: "AuthenticatorCode" }), isLoading && (jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 text-sm text-muted-foreground", children: [jsxRuntime.jsx(lucideReact.Loader2, { className: "w-4 h-4 animate-spin" }), jsxRuntime.jsx("span", { children: "Verifying..." })] }))] }))] }) }));
|
|
1729
1729
|
};
|
|
1730
1730
|
|
|
1731
1731
|
var DefaultLoginPage = function (_a) {
|
|
@@ -1750,6 +1750,12 @@ var DefaultLoginPage = function (_a) {
|
|
|
1750
1750
|
console.log(data);
|
|
1751
1751
|
if (state && data && data.isValid) {
|
|
1752
1752
|
context.isAuthenticated = true;
|
|
1753
|
+
localStorage.setItem(context.storageKey, JSON.stringify({
|
|
1754
|
+
isAuthenticated: false,
|
|
1755
|
+
requiresMFA: false,
|
|
1756
|
+
accessToken: "Credentials",
|
|
1757
|
+
idToken: "Credentials",
|
|
1758
|
+
}));
|
|
1753
1759
|
context.requiresMFA = false;
|
|
1754
1760
|
context.setUserProfile({
|
|
1755
1761
|
state: "AUTH_SUCCESS",
|
|
@@ -1765,7 +1771,7 @@ var DefaultLoginPage = function (_a) {
|
|
|
1765
1771
|
});
|
|
1766
1772
|
}
|
|
1767
1773
|
else {
|
|
1768
|
-
sonner.toast.error("\u274C AD Login failed. ".concat((data === null || data === void 0 ? void 0 : data.message) ||
|
|
1774
|
+
sonner.toast.error("\u274C AD Login failed. ".concat((data === null || data === void 0 ? void 0 : data.message) || "Unknown error"));
|
|
1769
1775
|
}
|
|
1770
1776
|
return [2 /*return*/];
|
|
1771
1777
|
});
|
|
@@ -1797,7 +1803,12 @@ var DefaultLoginPage = function (_a) {
|
|
|
1797
1803
|
return __generator$1(this, function (_c) {
|
|
1798
1804
|
// Implement your AD login logic here
|
|
1799
1805
|
console.log("AD Login:", { username: username, MFACode: MFACode });
|
|
1800
|
-
handleSubmitCredentials(CredentialsAuthEndpoint, {
|
|
1806
|
+
handleSubmitCredentials(CredentialsAuthEndpoint, {
|
|
1807
|
+
username: username,
|
|
1808
|
+
password: password,
|
|
1809
|
+
MFACode: MFACode,
|
|
1810
|
+
appCode: context.appCode,
|
|
1811
|
+
});
|
|
1801
1812
|
return [2 /*return*/];
|
|
1802
1813
|
});
|
|
1803
1814
|
}); } })] }));
|
|
@@ -1823,7 +1834,7 @@ var MFAGate = function (_a) {
|
|
|
1823
1834
|
usePassKey = _c === void 0 ? false : _c, _d = _a.useADLogin, useADLogin = _d === void 0 ? false : _d, CredentialsAuthEndpoint = _a.CredentialsAuthEndpoint, PassKeysRegisterProps = _a.PassKeysRegisterProps, MFAEndpoints = _a.MFAEndpoints, requiresMFA = _a.requiresMFA, onAuthSuccess = _a.onAuthSuccess, onAuthError = _a.onAuthError;
|
|
1824
1835
|
var context = useCAMSContext();
|
|
1825
1836
|
var _e = React.useState("Loading"), authState = _e[0], setAuthState = _e[1];
|
|
1826
|
-
var
|
|
1837
|
+
var ValidatedMFAEndpoints = React.useMemo(function () {
|
|
1827
1838
|
var parsed = MFAEndpointsSchema.safeParse(MFAEndpoints);
|
|
1828
1839
|
if (!parsed.success) {
|
|
1829
1840
|
camsSdk.Logger.error("Invalid MFAEndpoint", parsed.error);
|
|
@@ -1881,20 +1892,19 @@ var MFAGate = function (_a) {
|
|
|
1881
1892
|
setAuthState("Loading");
|
|
1882
1893
|
return;
|
|
1883
1894
|
}
|
|
1884
|
-
if (
|
|
1895
|
+
// Check if user has accessToken (MSAL authenticated)
|
|
1896
|
+
if (!contextAccessToken) {
|
|
1885
1897
|
setAuthState("Unauthenticated");
|
|
1886
1898
|
return;
|
|
1887
1899
|
}
|
|
1888
|
-
//
|
|
1900
|
+
// User has accessToken, determine if MFA is required
|
|
1889
1901
|
var shouldRequireMFA = requiresMFA !== null && requiresMFA !== void 0 ? requiresMFA : contextRequiresMFA;
|
|
1890
1902
|
console.log("MFA decision:", {
|
|
1891
1903
|
shouldRequireMFA: shouldRequireMFA,
|
|
1892
1904
|
hasAccessToken: !!contextAccessToken,
|
|
1893
|
-
finalState: shouldRequireMFA
|
|
1894
|
-
? "MFA_Required"
|
|
1895
|
-
: "Authenticated",
|
|
1905
|
+
finalState: shouldRequireMFA ? "MFA_Required" : "Authenticated",
|
|
1896
1906
|
});
|
|
1897
|
-
if (shouldRequireMFA
|
|
1907
|
+
if (shouldRequireMFA) {
|
|
1898
1908
|
setAuthState("MFA_Required");
|
|
1899
1909
|
}
|
|
1900
1910
|
else {
|
|
@@ -1906,6 +1916,7 @@ var MFAGate = function (_a) {
|
|
|
1906
1916
|
contextRequiresMFA, // Now this will trigger re-evaluation when requiresMFA changes
|
|
1907
1917
|
contextAccessToken, // And this when accessToken changes
|
|
1908
1918
|
requiresMFA,
|
|
1919
|
+
context.authMode,
|
|
1909
1920
|
]);
|
|
1910
1921
|
// Debug useEffect
|
|
1911
1922
|
React.useEffect(function () {
|
|
@@ -1926,7 +1937,7 @@ var MFAGate = function (_a) {
|
|
|
1926
1937
|
]);
|
|
1927
1938
|
if (useADLogin && !CredentialsAuthEndpoint)
|
|
1928
1939
|
return jsxRuntime.jsx(ErrorFallback, { message: "Invalid AD Login Configuration." });
|
|
1929
|
-
if (!
|
|
1940
|
+
if (!ValidatedMFAEndpoints)
|
|
1930
1941
|
return jsxRuntime.jsx(ErrorFallback, { message: "Invalid MFA Configuration." });
|
|
1931
1942
|
if (context.authMode !== "MSAL")
|
|
1932
1943
|
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: children });
|
|
@@ -1934,12 +1945,12 @@ var MFAGate = function (_a) {
|
|
|
1934
1945
|
case "Loading":
|
|
1935
1946
|
return fallback;
|
|
1936
1947
|
case "MFA_Required":
|
|
1937
|
-
return (jsxRuntime.jsx(MFAOptions, { MFAEndpoints:
|
|
1948
|
+
return (jsxRuntime.jsx(MFAOptions, { MFAEndpoints: ValidatedMFAEndpoints, usePassKey: usePassKey, onComplete: handleComplete, onAuthFailed: handleAuthFailed }));
|
|
1938
1949
|
case "Authenticated":
|
|
1939
1950
|
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: children });
|
|
1940
1951
|
case "Unauthenticated":
|
|
1941
1952
|
default:
|
|
1942
|
-
return (jsxRuntime.jsx(DefaultLoginPage, { usePassKey: usePassKey, useADLogin: useADLogin, MFAEndpoints:
|
|
1953
|
+
return (jsxRuntime.jsx(DefaultLoginPage, { usePassKey: usePassKey, useADLogin: useADLogin, MFAEndpoints: ValidatedMFAEndpoints, PassKeysRegisterProps: PassKeysRegisterProps, CredentialsAuthEndpoint: CredentialsAuthEndpoint }));
|
|
1943
1954
|
}
|
|
1944
1955
|
};
|
|
1945
1956
|
|