@nibssplc/cams-sdk-react 1.0.0-rc.84 → 1.0.0-rc.86
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/DefaultLoginPage.d.ts +3 -2
- package/dist/index.cjs.js +28 -27
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +28 -27
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -1535,29 +1535,22 @@ var useCredentialsHandler = function (onAuthComplete) {
|
|
|
1535
1535
|
};
|
|
1536
1536
|
|
|
1537
1537
|
var MFAOptions = function (_a) {
|
|
1538
|
-
var _b, _c
|
|
1538
|
+
var _b, _c;
|
|
1539
1539
|
var onComplete = _a.onComplete, onAuthFailed = _a.onAuthFailed, MFAEndpoints = _a.MFAEndpoints, usePassKey = _a.usePassKey;
|
|
1540
|
-
var
|
|
1541
|
-
var
|
|
1542
|
-
var
|
|
1543
|
-
var
|
|
1540
|
+
var _d = useState(""), value = _d[0], setValue = _d[1];
|
|
1541
|
+
var _e = useState(false), otpVisible = _e[0], setOtpVisible = _e[1];
|
|
1542
|
+
var _f = useState(false), showSuccessAnimation = _f[0], setShowSuccessAnimation = _f[1];
|
|
1543
|
+
var _g = useState(null), authType = _g[0], setAuthType = _g[1];
|
|
1544
1544
|
var context = useCAMSContext();
|
|
1545
|
-
var
|
|
1545
|
+
var _h = context.authMode === "MSAL" && "AuthenticatorCode" in context
|
|
1546
1546
|
? context
|
|
1547
1547
|
: { completeMFA: null, logout: function () { return __awaiter$1(void 0, void 0, void 0, function () { return __generator$1(this, function (_a) {
|
|
1548
1548
|
return [2 /*return*/];
|
|
1549
|
-
}); }); } }, completeMFA =
|
|
1550
|
-
context.authMode === "MSAL" ? context.accessToken : "";
|
|
1551
|
-
context.authMode === "MSAL" ? context.idToken : "";
|
|
1549
|
+
}); }); } }, completeMFA = _h.completeMFA, logout = _h.logout;
|
|
1552
1550
|
var authenticate = useWebAuthn().authenticate;
|
|
1553
1551
|
var authenticator = new CAMSMFAAuthenticator();
|
|
1554
|
-
|
|
1555
|
-
user: context.
|
|
1556
|
-
profile: (_b = context.user) === null || _b === void 0 ? void 0 : _b.profile,
|
|
1557
|
-
email: (_d = (_c = context.user) === null || _c === void 0 ? void 0 : _c.profile) === null || _d === void 0 ? void 0 : _d.email,
|
|
1558
|
-
});
|
|
1559
|
-
var _m = useOTPHandler({
|
|
1560
|
-
email: ((_f = (_e = context.user) === null || _e === void 0 ? void 0 : _e.profile) === null || _f === void 0 ? void 0 : _f.email) || context.email,
|
|
1552
|
+
var _j = useOTPHandler({
|
|
1553
|
+
email: ((_c = (_b = context.user) === null || _b === void 0 ? void 0 : _b.profile) === null || _c === void 0 ? void 0 : _c.email) || context.email,
|
|
1561
1554
|
appCode: context.appCode || "",
|
|
1562
1555
|
MFAEndpoint: MFAEndpoints.ValidateUserMFA,
|
|
1563
1556
|
onAuthComplete: function (state, data) {
|
|
@@ -1586,7 +1579,7 @@ var MFAOptions = function (_a) {
|
|
|
1586
1579
|
}
|
|
1587
1580
|
}
|
|
1588
1581
|
},
|
|
1589
|
-
}), handleSubmitOTP =
|
|
1582
|
+
}), handleSubmitOTP = _j.handleSubmitOTP, loading = _j.loading, attemptCount = _j.attemptCount, remainingAttempts = _j.remainingAttempts, isMaxAttemptsReached = _j.isMaxAttemptsReached, resetAttempts = _j.resetAttempts;
|
|
1590
1583
|
var handleGoBack = function () {
|
|
1591
1584
|
setAuthType(null);
|
|
1592
1585
|
setOtpVisible(false);
|
|
@@ -1708,12 +1701,12 @@ var ADLoginModal = function (_a) {
|
|
|
1708
1701
|
return (jsxs(FormItem, { children: [jsx(FormLabel, { children: "Username" }), jsx(FormControl, { children: jsx(Input, __assign({ className: "h-12", placeholder: "Enter your username" }, field)) }), jsx(FormMessage, {})] }));
|
|
1709
1702
|
} }), jsx(FormField, { control: form.control, name: "password", render: function (_a) {
|
|
1710
1703
|
var field = _a.field;
|
|
1711
|
-
return (jsxs(FormItem, { children: [jsx(FormLabel, { children: "Password" }), jsx(FormControl, { children: jsxs("div", { className: "relative", children: [jsx(Input, __assign({ className: "h-12 pr-10", type: "password", placeholder: "Enter your password" }, field)), 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 ? (jsx(EyeOff, { className: "w-5 h-5" })) : (jsx(Eye, { className: "w-5 h-5" })) })] }) }), jsx(FormMessage, {})] }));
|
|
1712
|
-
} }), jsx(Button, { type: "submit", className: "py-
|
|
1704
|
+
return (jsxs(FormItem, { children: [jsx(FormLabel, { children: "Password" }), jsx(FormControl, { children: jsxs("div", { className: "relative", children: [jsx(Input, __assign({ className: "h-12 pr-10", type: showPassword ? "text" : "password", placeholder: "Enter your password" }, field)), 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 ? (jsx(EyeOff, { className: "w-5 h-5" })) : (jsx(Eye, { className: "w-5 h-5" })) })] }) }), jsx(FormMessage, {})] }));
|
|
1705
|
+
} }), jsx(Button, { type: "submit", className: "py-4 w-full bg-[#506f4a] hover:bg-[#506f4a]/90", children: "Continue" })] }) }))) : (jsxs("div", { className: "space-y-4", children: [jsx(GenericOTPVerifier, { value: MFACode, setValue: setMFACode, setLoading: setIsLoading, isDisabled: isLoading, onChangeOTP: handleMFASubmit, fieldName: "AuthenticatorCode" }), isLoading && (jsxs("div", { className: "flex items-center justify-center gap-2 text-sm text-muted-foreground", children: [jsx(Loader2, { className: "w-4 h-4 animate-spin" }), jsx("span", { children: "Verifying..." })] }))] }))] }) }));
|
|
1713
1706
|
};
|
|
1714
1707
|
|
|
1715
1708
|
var DefaultLoginPage = function (_a) {
|
|
1716
|
-
var usePassKey = _a.usePassKey, useADLogin = _a.useADLogin, MFAEndpoints = _a.MFAEndpoints, CredentialsAuthEndpoint = _a.CredentialsAuthEndpoint, PassKeysRegisterProps = _a.PassKeysRegisterProps;
|
|
1709
|
+
var usePassKey = _a.usePassKey, useADLogin = _a.useADLogin, MFAEndpoints = _a.MFAEndpoints, CredentialsAuthEndpoint = _a.CredentialsAuthEndpoint, PassKeysRegisterProps = _a.PassKeysRegisterProps, onADLoginSuccess = _a.onADLoginSuccess;
|
|
1717
1710
|
var cardVariants = {
|
|
1718
1711
|
hidden: { opacity: 0, scale: 0.8, y: 50 },
|
|
1719
1712
|
visible: {
|
|
@@ -1727,20 +1720,20 @@ var DefaultLoginPage = function (_a) {
|
|
|
1727
1720
|
var context = useCAMSContext();
|
|
1728
1721
|
var login = context.login, isLoading = context.isLoading, authMode = context.authMode;
|
|
1729
1722
|
var _b = useState(false), showADModal = _b[0], setShowADModal = _b[1];
|
|
1723
|
+
var _c = useState(false), showSuccessAnimation = _c[0], setShowSuccessAnimation = _c[1];
|
|
1730
1724
|
var register = useWebAuthn().register;
|
|
1731
1725
|
var authentication = new CAMSMFAAuthenticator();
|
|
1732
|
-
var
|
|
1726
|
+
var _d = useCredentialsHandler(function (state, data) { return __awaiter$1(void 0, void 0, void 0, function () {
|
|
1733
1727
|
return __generator$1(this, function (_a) {
|
|
1734
1728
|
console.log(data);
|
|
1735
1729
|
if (state && data && data.isValid) {
|
|
1736
|
-
|
|
1730
|
+
setShowSuccessAnimation(true);
|
|
1737
1731
|
localStorage.setItem(context.storageKey, JSON.stringify({
|
|
1738
|
-
isAuthenticated:
|
|
1732
|
+
isAuthenticated: true,
|
|
1739
1733
|
requiresMFA: false,
|
|
1740
1734
|
accessToken: "Credentials",
|
|
1741
1735
|
idToken: "Credentials",
|
|
1742
1736
|
}));
|
|
1743
|
-
context.requiresMFA = false;
|
|
1744
1737
|
context.setUserProfile({
|
|
1745
1738
|
state: "AUTH_SUCCESS",
|
|
1746
1739
|
message: data.message,
|
|
@@ -1753,13 +1746,14 @@ var DefaultLoginPage = function (_a) {
|
|
|
1753
1746
|
tokens: data.tokens,
|
|
1754
1747
|
},
|
|
1755
1748
|
});
|
|
1749
|
+
setShowADModal(false);
|
|
1756
1750
|
}
|
|
1757
1751
|
else {
|
|
1758
1752
|
toast.error("\u274C AD Login failed. ".concat((data === null || data === void 0 ? void 0 : data.message) || "Unknown error"));
|
|
1759
1753
|
}
|
|
1760
1754
|
return [2 /*return*/];
|
|
1761
1755
|
});
|
|
1762
|
-
}); }), handleSubmitCredentials =
|
|
1756
|
+
}); }), handleSubmitCredentials = _d.handleSubmitCredentials, isCredAuthLoading = _d.loading, setIsCredAuthLoading = _d.setLoading;
|
|
1763
1757
|
var handleMSALLogin = function () {
|
|
1764
1758
|
if (typeof window !== "undefined" && !window.crypto) {
|
|
1765
1759
|
toast.error("Crypto API not available. Please use a modern browser.");
|
|
@@ -1773,6 +1767,11 @@ var DefaultLoginPage = function (_a) {
|
|
|
1773
1767
|
console.warn("Regular CAMS login requires configuration");
|
|
1774
1768
|
}
|
|
1775
1769
|
};
|
|
1770
|
+
if (showSuccessAnimation && useADLogin) {
|
|
1771
|
+
return (jsx("div", { className: "flex justify-center items-center h-dvh", children: jsx(Card, { className: "mx-auto space-y-6 p-6 bg-white rounded-lg shadow-md", children: jsx(AuthSuccessAnimation, { onComplete: function () {
|
|
1772
|
+
onADLoginSuccess === null || onADLoginSuccess === void 0 ? void 0 : onADLoginSuccess();
|
|
1773
|
+
} }) }) }));
|
|
1774
|
+
}
|
|
1776
1775
|
return (jsxs("main", { className: "cams-sdk min-h-screen bg-gray-50", children: [jsx(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.5 }, children: jsx("div", { className: "flex h-screen items-center justify-center", children: jsxs(motion.div, { variants: cardVariants, initial: "hidden", animate: "visible", exit: "exit", className: "w-full max-w-md p-6 space-y-4 rounded-2xl shadow-2xl", children: [jsxs(CardHeader, { className: "text-center space-y-3", children: [jsx("div", { className: "w-full flex items-center justify-center", children: jsx("img", { src: NIBSSLogo, alt: "NIBSS Logo", width: 225, height: 225 }) }), jsx(CardTitle, { className: "text-3xl font-bold", children: "NIBSS CAMS" }), jsx(CardTitle, { className: "text-gray-500 dark:text-gray-400 font-bold text-lg", children: "Centralized Authentication" })] }), jsxs(CardAction, { className: "w-full flex flex-col items-center justify-center text-center text-gray-500 dark:text-gray-400 mb-8", children: [jsx("img", { src: AuthLogo, alt: "Auth Logo", width: 365, height: 365 }), "Use Below Identity Providers To Authenticate"] }), jsxs("div", { className: "space-y-4", children: [jsxs(Button
|
|
1777
1776
|
// variant="outline"
|
|
1778
1777
|
, {
|
|
@@ -1782,7 +1781,7 @@ var DefaultLoginPage = function (_a) {
|
|
|
1782
1781
|
: "Sign in with ActiveDirectory" })] })), usePassKey && (jsxs(Button, { className: "w-full flex items-center justify-center cursor-pointer bg-[#506f4a] hover:bg-[#506f4a] rounded-lg border border-transparent px-5 py-8 text-base font-medium transition-colors duration-250", onClick: function () {
|
|
1783
1782
|
return authentication.HandleRegister(MFAEndpoints.RegisterNewChallenge, MFAEndpoints.RegisterVerify +
|
|
1784
1783
|
"?username=".concat(PassKeysRegisterProps.username), register, PassKeysRegisterProps);
|
|
1785
|
-
}, disabled: isLoading, children: [jsx(KeyIcon, { className: "text-[#506f4a]", size: 64 }), jsx("span", { children: "Create a Passkey" })] }))] }), jsxs(CardFooter, { className: "flex items-center justify-center mt-6 space-x-2 text-gray-400 text-sm", children: [jsx(ShieldCheck, { className: "w-4 h-4 text-[#506f4a] pulse-glow" }), jsx("span", { children: "Powered By NIBSS" })] })] }) }) }, "landing"), jsx(ADLoginModal, { open: showADModal, onOpenChange: setShowADModal, isLoading: isCredAuthLoading, setIsLoading: setIsCredAuthLoading, onLogin: function (_a) { return __awaiter$1(void 0, [_a], void 0, function (_b) {
|
|
1784
|
+
}, disabled: isLoading, children: [jsx(KeyIcon, { className: "text-[#506f4a]", size: 64 }), jsx("span", { children: "Create a Passkey" })] }))] }), jsxs(CardFooter, { className: "flex items-center justify-center mt-6 space-x-2 text-gray-400 text-sm", children: [jsx(ShieldCheck, { className: "w-4 h-4 text-[#506f4a] pulse-glow" }), jsx("span", { children: "Powered By NIBSS" })] })] }) }) }, "landing"), jsx(ADLoginModal, { open: showADModal, onOpenChange: setShowADModal, isLoading: context.isLoading || isCredAuthLoading, setIsLoading: setIsCredAuthLoading, onLogin: function (_a) { return __awaiter$1(void 0, [_a], void 0, function (_b) {
|
|
1786
1785
|
var username = _b.username, password = _b.password, MFACode = _b.MFACode;
|
|
1787
1786
|
return __generator$1(this, function (_c) {
|
|
1788
1787
|
// Implement your AD login logic here
|
|
@@ -1841,6 +1840,8 @@ var MFAGate = function (_a) {
|
|
|
1841
1840
|
(_a = context.onAuthSuccess) === null || _a === void 0 ? void 0 : _a.call(context, tokens);
|
|
1842
1841
|
}
|
|
1843
1842
|
}
|
|
1843
|
+
// Force state update after MFA completion
|
|
1844
|
+
setAuthState("Authenticated");
|
|
1844
1845
|
}
|
|
1845
1846
|
else if (!success) {
|
|
1846
1847
|
Logger.error("MFA authentication failed", { context: context || null });
|
|
@@ -1934,7 +1935,7 @@ var MFAGate = function (_a) {
|
|
|
1934
1935
|
return jsx(Fragment, { children: children });
|
|
1935
1936
|
case "Unauthenticated":
|
|
1936
1937
|
default:
|
|
1937
|
-
return (jsx(DefaultLoginPage, { usePassKey: usePassKey, useADLogin: useADLogin, MFAEndpoints: ValidatedMFAEndpoints, PassKeysRegisterProps: PassKeysRegisterProps, CredentialsAuthEndpoint: CredentialsAuthEndpoint }));
|
|
1938
|
+
return (jsx(DefaultLoginPage, { usePassKey: usePassKey, useADLogin: useADLogin, MFAEndpoints: ValidatedMFAEndpoints, PassKeysRegisterProps: PassKeysRegisterProps, CredentialsAuthEndpoint: CredentialsAuthEndpoint, onADLoginSuccess: function () { return setAuthState("Authenticated"); } }));
|
|
1938
1939
|
}
|
|
1939
1940
|
};
|
|
1940
1941
|
|