@nibssplc/cams-sdk-react 0.0.1-beta.98 → 1.0.0-rc.2

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
@@ -555,23 +555,27 @@ function arrayBufferToBase64url(buffer) {
555
555
  function register(options) {
556
556
  return __awaiter(this, void 0, void 0, function () {
557
557
  var createOptions, credential, publicKeyCredential, attestationResponse, transports, err_1;
558
- var _a, _b, _c;
559
- return __generator(this, function (_d) {
560
- switch (_d.label) {
558
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
559
+ return __generator(this, function (_k) {
560
+ switch (_k.label) {
561
561
  case 0:
562
- _d.trys.push([0, 2, , 3]);
562
+ _k.trys.push([0, 2, , 3]);
563
563
  createOptions = __assign(__assign({}, options), { challenge: base64urlToArrayBuffer(options.challenge), user: __assign(__assign({}, options.user), { id: base64urlToArrayBuffer(options.user.id) }) });
564
- console.log("Creating credential with options:", createOptions, "...\n\n\n", options);
565
564
  return [4 /*yield*/, navigator.credentials.create({
566
- publicKey: createOptions,
565
+ publicKey: __assign(__assign({}, createOptions), { pubKeyCredParams: (_a = options.pubKeyCredParams) === null || _a === void 0 ? void 0 : _a.map(function (param) { return ({
566
+ type: "public-key",
567
+ alg: param.alg,
568
+ }); }), attestation: (((_b = options.attestation) === null || _b === void 0 ? void 0 : _b.toLowerCase()) || "none"), authenticatorSelection: __assign(__assign({}, options.authenticatorSelection), { residentKey: (((_d = (_c = options.authenticatorSelection) === null || _c === void 0 ? void 0 : _c.residentKey) === null || _d === void 0 ? void 0 : _d.toLowerCase()) ||
569
+ "discouraged"), userVerification: (((_f = (_e = options.authenticatorSelection) === null || _e === void 0 ? void 0 : _e.userVerification) === null || _f === void 0 ? void 0 : _f.toLowerCase()) ||
570
+ "discouraged") }) }),
567
571
  })];
568
572
  case 1:
569
- credential = _d.sent();
573
+ credential = _k.sent();
570
574
  if (!credential)
571
575
  throw new Error("No credential created.");
572
576
  publicKeyCredential = credential;
573
577
  attestationResponse = publicKeyCredential.response;
574
- transports = (_c = (_b = (_a = publicKeyCredential.response).getTransports) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : [];
578
+ transports = (_j = (_h = (_g = publicKeyCredential.response).getTransports) === null || _h === void 0 ? void 0 : _h.call(_g)) !== null && _j !== void 0 ? _j : [];
575
579
  return [2 /*return*/, {
576
580
  id: publicKeyCredential.id,
577
581
  rawId: arrayBufferToBase64url(publicKeyCredential.rawId),
@@ -583,13 +587,17 @@ function register(options) {
583
587
  },
584
588
  }];
585
589
  case 2:
586
- err_1 = _d.sent();
590
+ err_1 = _k.sent();
591
+ console.error("Error during registration:", err_1);
587
592
  if (err_1.name === "NotAllowedError") {
588
- throw new Error("Registration cancelled by user.");
593
+ throw new Error("Face ID/Touch ID cancelled or failed. Please try again.");
589
594
  }
590
595
  if (err_1.name === "InvalidStateError") {
591
596
  throw new Error("Passkey already registered for this user.");
592
597
  }
598
+ if (err_1.name === "NotSupportedError") {
599
+ throw new Error("Passkeys not supported on this device.");
600
+ }
593
601
  throw err_1;
594
602
  case 3: return [2 /*return*/];
595
603
  }
@@ -1711,7 +1719,7 @@ var GenerateDeviceId = function () {
1711
1719
  var userAgent = window.navigator.userAgent;
1712
1720
  var deviceId = "";
1713
1721
  // Parse browser, version, OS, and device type
1714
- var browserMatch = Array.from(userAgent.matchAll(/(Chrome|Firefox|Safari|Edge|Opera)\/([\d.]+)/ig));
1722
+ var browserMatch = Array.from(userAgent.matchAll(/(Chrome|Firefox|Safari|Edge|Opera)\/([\d.]+)/gi));
1715
1723
  var osMatch = Array.from(userAgent.matchAll(/\(([^)]+)\)/g));
1716
1724
  var isMobile = /Mobile|Android|iPhone|iPad/i.test(userAgent);
1717
1725
  // Browser info
@@ -1741,6 +1749,10 @@ var GenerateDeviceId = function () {
1741
1749
  deviceId += "_".concat(hash);
1742
1750
  return (_a = deviceId.replace(/[^a-zA-Z0-9-_]/g, "_")) !== null && _a !== void 0 ? _a : "unknown-device";
1743
1751
  };
1752
+ var APIHeaders = {
1753
+ "X-DEVICE-ID": GenerateDeviceId(),
1754
+ "X-API-VERSION": "1.0",
1755
+ };
1744
1756
 
1745
1757
  var MAX_ATTEMPTS = 3;
1746
1758
  var useOTPHandler = function (_a) {
@@ -1775,9 +1787,7 @@ var useOTPHandler = function (_a) {
1775
1787
  MFACode: authenticationValue,
1776
1788
  appCode: appCode,
1777
1789
  }, {
1778
- headers: {
1779
- "X-Device-ID": GenerateDeviceId(),
1780
- },
1790
+ headers: APIHeaders,
1781
1791
  timeout: 605000,
1782
1792
  })];
1783
1793
  case 2:
@@ -1840,6 +1850,78 @@ var useOTPHandler = function (_a) {
1840
1850
  remainingAttempts: MAX_ATTEMPTS - attemptCount,
1841
1851
  };
1842
1852
  };
1853
+ var useCredentialsHandler = function (onAuthComplete) {
1854
+ var _a = useState(false), loading = _a[0], setLoading = _a[1];
1855
+ var _b = useState(0), attemptCount = _b[0], setAttemptCount = _b[1];
1856
+ var _c = useState(false), isMaxAttemptsReached = _c[0], setIsMaxAttemptsReached = _c[1];
1857
+ var handleSubmitCredentials = useMemo(function () {
1858
+ return function (CredAuthEndpoint, credentials, appCode) { return __awaiter(void 0, void 0, void 0, function () {
1859
+ var currentAttempt, response, error_2, currentAttempt;
1860
+ return __generator(this, function (_a) {
1861
+ switch (_a.label) {
1862
+ case 0:
1863
+ _a.trys.push([0, 2, 3, 4]);
1864
+ setLoading(true);
1865
+ currentAttempt = attemptCount + 1;
1866
+ setAttemptCount(currentAttempt);
1867
+ return [4 /*yield*/, axios.post(CredAuthEndpoint, {
1868
+ username: credentials.username,
1869
+ password: credentials.password,
1870
+ MFACode: credentials.MFACode,
1871
+ appCode: appCode,
1872
+ }, {
1873
+ headers: APIHeaders,
1874
+ timeout: 605000,
1875
+ })];
1876
+ case 1:
1877
+ response = (_a.sent()).data;
1878
+ if (response) {
1879
+ onAuthComplete(true, response);
1880
+ return [2 /*return*/, true];
1881
+ }
1882
+ else {
1883
+ if (currentAttempt >= MAX_ATTEMPTS) {
1884
+ setIsMaxAttemptsReached(true);
1885
+ onAuthComplete(false, {
1886
+ message: "Maximum attempts reached",
1887
+ });
1888
+ }
1889
+ else {
1890
+ onAuthComplete(false, response.response.data);
1891
+ }
1892
+ return [2 /*return*/, false];
1893
+ }
1894
+ case 2:
1895
+ error_2 = _a.sent();
1896
+ console.error(error_2);
1897
+ currentAttempt = attemptCount + 1;
1898
+ if (currentAttempt >= MAX_ATTEMPTS) {
1899
+ setIsMaxAttemptsReached(true);
1900
+ onAuthComplete(false, error_2.response.data);
1901
+ }
1902
+ else {
1903
+ onAuthComplete(false, error_2.response.data);
1904
+ }
1905
+ onAuthComplete(false, error_2.response.data);
1906
+ return [2 /*return*/, false];
1907
+ case 3:
1908
+ setLoading(false);
1909
+ return [7 /*endfinally*/];
1910
+ case 4: return [2 /*return*/];
1911
+ }
1912
+ });
1913
+ }); };
1914
+ }, []);
1915
+ return {
1916
+ handleSubmitCredentials: handleSubmitCredentials,
1917
+ loading: loading,
1918
+ setLoading: setLoading,
1919
+ attemptCount: attemptCount,
1920
+ isMaxAttemptsReached: isMaxAttemptsReached,
1921
+ // resetAttempts,
1922
+ remainingAttempts: MAX_ATTEMPTS - attemptCount,
1923
+ };
1924
+ };
1843
1925
 
1844
1926
  var MFAOptions = function (_a) {
1845
1927
  var onComplete = _a.onComplete, onAuthFailed = _a.onAuthFailed, MFAEndpoints = _a.MFAEndpoints, usePassKey = _a.usePassKey;
@@ -1858,50 +1940,36 @@ var MFAOptions = function (_a) {
1858
1940
  var authenticate = useWebAuthn().authenticate;
1859
1941
  var handleFIDOLogin = function () { return __awaiter(void 0, void 0, void 0, function () {
1860
1942
  var options, assertionResponse, error_1;
1861
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
1862
- return __generator(this, function (_o) {
1863
- switch (_o.label) {
1943
+ return __generator(this, function (_a) {
1944
+ switch (_a.label) {
1864
1945
  case 0:
1865
- _o.trys.push([0, 4, , 5]);
1946
+ _a.trys.push([0, 4, , 5]);
1866
1947
  // 1. Fetch authentication challenge from your server
1867
1948
  console.log("Requesting authentication challenge from server...");
1868
1949
  return [4 /*yield*/, axios.post(MFAEndpoints.RetrieveAuthChallenge, {}, {
1869
- headers: {
1870
- "X-DEVICE-ID": GenerateDeviceId(),
1871
- "X-API-VERSION": "1.0",
1872
- },
1950
+ headers: APIHeaders,
1873
1951
  })];
1874
1952
  case 1:
1875
- options = (_o.sent()).data;
1953
+ options = (_a.sent()).data;
1876
1954
  console.log("Received challenge:", options);
1877
- __assign(__assign({}, options), { pubKeyCredParams: (_a = options.pubKeyCredParams) === null || _a === void 0 ? void 0 : _a.map(function (param) { return ({
1878
- type: "public-key",
1879
- alg: param.alg
1880
- }); }), attestation: ((_b = options.attestation) === null || _b === void 0 ? void 0 : _b.toLowerCase()) || "none", authenticatorSelection: __assign(__assign({}, options.authenticatorSelection), { residentKey: ((_d = (_c = options.authenticatorSelection) === null || _c === void 0 ? void 0 : _c.residentKey) === null || _d === void 0 ? void 0 : _d.toLowerCase()) || "discouraged", userVerification: ((_f = (_e = options.authenticatorSelection) === null || _e === void 0 ? void 0 : _e.userVerification) === null || _f === void 0 ? void 0 : _f.toLowerCase()) || "preferred" }) });
1881
1955
  // 2. Call the SDK to trigger the browser's passkey authentication UI
1882
1956
  console.log("Calling SDK authenticate function...");
1883
- return [4 /*yield*/, authenticate(__assign(__assign({}, options), { pubKeyCredParams: (_g = options.pubKeyCredParams) === null || _g === void 0 ? void 0 : _g.map(function (param) { return ({
1884
- type: "public-key",
1885
- alg: param.alg
1886
- }); }), attestation: ((_h = options.attestation) === null || _h === void 0 ? void 0 : _h.toLowerCase()) || "none", authenticatorSelection: __assign(__assign({}, options.authenticatorSelection), { residentKey: ((_k = (_j = options.authenticatorSelection) === null || _j === void 0 ? void 0 : _j.residentKey) === null || _k === void 0 ? void 0 : _k.toLowerCase()) || "discouraged", userVerification: ((_m = (_l = options.authenticatorSelection) === null || _l === void 0 ? void 0 : _l.userVerification) === null || _m === void 0 ? void 0 : _m.toLowerCase()) || "preferred" }) }))];
1957
+ return [4 /*yield*/, authenticate(__assign(__assign({}, options), { userVerification: "discouraged" }))];
1887
1958
  case 2:
1888
- assertionResponse = _o.sent();
1959
+ assertionResponse = _a.sent();
1889
1960
  console.log("Authentication assertion received from client:", assertionResponse);
1890
1961
  // 3. Send the assertion back to the server for verification
1891
1962
  console.log("Sending assertion to server for verification...");
1892
1963
  return [4 /*yield*/, axios.post(MFAEndpoints.AuthChallengeVerify, assertionResponse, {
1893
- headers: {
1894
- "X-DEVICE-ID": GenerateDeviceId(),
1895
- "X-API-VERSION": "1.0",
1896
- },
1964
+ headers: APIHeaders,
1897
1965
  withCredentials: true, // credentials: 'include'
1898
1966
  })];
1899
1967
  case 3:
1900
- _o.sent();
1968
+ _a.sent();
1901
1969
  toast.success("🔑 Sign-in successful!");
1902
1970
  return [3 /*break*/, 5];
1903
1971
  case 4:
1904
- error_1 = _o.sent();
1972
+ error_1 = _a.sent();
1905
1973
  console.error("Authentication failed:", error_1);
1906
1974
  toast.error("❌ Could not sign in.");
1907
1975
  return [3 /*break*/, 5];
@@ -2020,14 +2088,13 @@ var credentialsSchema = z.object({
2020
2088
  password: z.string().min(1, "Password is required"),
2021
2089
  });
2022
2090
  var ADLoginModal = function (_a) {
2023
- var open = _a.open, onOpenChange = _a.onOpenChange, onLogin = _a.onLogin;
2091
+ var open = _a.open, isLoading = _a.isLoading, setIsLoading = _a.setIsLoading, onOpenChange = _a.onOpenChange, onLogin = _a.onLogin;
2024
2092
  var _b = useState("credentials"), step = _b[0], setStep = _b[1];
2025
2093
  var _c = useState({
2026
2094
  username: "",
2027
2095
  password: "",
2028
2096
  }), credentials = _c[0], setCredentials = _c[1];
2029
2097
  var _d = useState(""), mfaCode = _d[0], setMfaCode = _d[1];
2030
- var _e = useState(false), isLoading = _e[0], setIsLoading = _e[1];
2031
2098
  var form = useForm({
2032
2099
  resolver: a$1(credentialsSchema),
2033
2100
  defaultValues: { username: "", password: "" },
@@ -2077,21 +2144,45 @@ var ADLoginModal = function (_a) {
2077
2144
  form.reset();
2078
2145
  setMfaCode("");
2079
2146
  };
2080
- return (jsxRuntimeExports.jsx(Dialog, { open: open, onOpenChange: handleClose, children: jsxRuntimeExports.jsxs(DialogContent, { className: "sm:max-w-[85%]", children: [jsxRuntimeExports.jsx(DialogHeader, { children: jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntimeExports.jsx(KeyIcon, { className: "w-8 h-8 text-[#506f4a]" }), jsxRuntimeExports.jsx(DialogTitle, { className: "text-2xl", children: "Sign in with AD" })] }) }), step === "credentials" ? (jsxRuntimeExports.jsx(Form, __assign({}, form, { children: jsxRuntimeExports.jsxs("form", { onSubmit: form.handleSubmit(handleCredentialsSubmit), className: "space-y-4", children: [jsxRuntimeExports.jsx(FormField, { control: form.control, name: "username", render: function (_a) {
2147
+ return (jsxRuntimeExports.jsx(Dialog, { open: open, onOpenChange: handleClose, children: jsxRuntimeExports.jsxs(DialogContent, { className: "w-[70vw] min-w-[250px] max-w-[350px]", children: [jsxRuntimeExports.jsx(DialogHeader, { children: jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntimeExports.jsx(KeyIcon, { className: "w-8 h-8 text-[#506f4a]" }), jsxRuntimeExports.jsx(DialogTitle, { className: "text-2xl", children: "Sign in with AD" })] }) }), step === "credentials" ? (jsxRuntimeExports.jsx(Form, __assign({}, form, { children: jsxRuntimeExports.jsxs("form", { onSubmit: form.handleSubmit(handleCredentialsSubmit), className: "space-y-4", children: [jsxRuntimeExports.jsx(FormField, { control: form.control, name: "username", render: function (_a) {
2081
2148
  var field = _a.field;
2082
- return (jsxRuntimeExports.jsxs(FormItem, { children: [jsxRuntimeExports.jsx(FormLabel, { children: "Username" }), jsxRuntimeExports.jsx(FormControl, { children: jsxRuntimeExports.jsx(Input, __assign({ placeholder: "Enter your username" }, field)) }), jsxRuntimeExports.jsx(FormMessage, {})] }));
2149
+ return (jsxRuntimeExports.jsxs(FormItem, { children: [jsxRuntimeExports.jsx(FormLabel, { children: "Username" }), jsxRuntimeExports.jsx(FormControl, { children: jsxRuntimeExports.jsx(Input, __assign({ className: "h-12", placeholder: "Enter your username" }, field)) }), jsxRuntimeExports.jsx(FormMessage, {})] }));
2083
2150
  } }), jsxRuntimeExports.jsx(FormField, { control: form.control, name: "password", render: function (_a) {
2084
2151
  var field = _a.field;
2085
- return (jsxRuntimeExports.jsxs(FormItem, { children: [jsxRuntimeExports.jsx(FormLabel, { children: "Password" }), jsxRuntimeExports.jsx(FormControl, { children: jsxRuntimeExports.jsx(Input, __assign({ type: "password", placeholder: "Enter your password" }, field)) }), jsxRuntimeExports.jsx(FormMessage, {})] }));
2152
+ return (jsxRuntimeExports.jsxs(FormItem, { children: [jsxRuntimeExports.jsx(FormLabel, { children: "Password" }), jsxRuntimeExports.jsx(FormControl, { children: jsxRuntimeExports.jsx(Input, __assign({ className: "h-12", type: "password", placeholder: "Enter your password" }, field)) }), jsxRuntimeExports.jsx(FormMessage, {})] }));
2086
2153
  } }), jsxRuntimeExports.jsx(Button, { type: "submit", className: "w-full bg-[#506f4a] hover:bg-[#506f4a]/90", children: "Continue" })] }) }))) : (jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [jsxRuntimeExports.jsx(GenericOTPVerifier, { value: mfaCode, setValue: setMfaCode, setLoading: setIsLoading, isDisabled: isLoading, onChangeOTP: handleMFASubmit, fieldName: "AuthenticatorCode" }), isLoading && (jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center gap-2 text-sm text-muted-foreground", children: [jsxRuntimeExports.jsx(Loader2, { className: "w-4 h-4 animate-spin" }), jsxRuntimeExports.jsx("span", { children: "Verifying..." })] }))] }))] }) }));
2087
2154
  };
2088
2155
 
2089
2156
  var DefaultLoginPage = function (_a) {
2090
- var usePassKey = _a.usePassKey, MFAEndpoints = _a.MFAEndpoints, PassKeysRegisterProps = _a.PassKeysRegisterProps;
2157
+ var usePassKey = _a.usePassKey, useADLogin = _a.useADLogin, MFAEndpoints = _a.MFAEndpoints, CredentialsAuthEndpoint = _a.CredentialsAuthEndpoint, PassKeysRegisterProps = _a.PassKeysRegisterProps;
2158
+ var cardVariants = {
2159
+ hidden: { opacity: 0, scale: 0.8, y: 50 },
2160
+ visible: {
2161
+ opacity: 1,
2162
+ scale: 1,
2163
+ y: 0,
2164
+ transition: { type: "spring", duration: 0.6 },
2165
+ },
2166
+ exit: { opacity: 0, scale: 0.8, y: -50, transition: { duration: 0.3 } },
2167
+ };
2091
2168
  var context = useCAMSContext();
2092
2169
  var login = context.login, isLoading = context.isLoading, authMode = context.authMode;
2093
2170
  var _b = useState(false), showADModal = _b[0], setShowADModal = _b[1];
2094
2171
  var register = useWebAuthn().register;
2172
+ var _c = useCredentialsHandler(function (state, data) { return __awaiter(void 0, void 0, void 0, function () {
2173
+ return __generator(this, function (_a) {
2174
+ console.log(data);
2175
+ if (state && data) {
2176
+ context.isAuthenticated = true;
2177
+ context.requiresMFA = false;
2178
+ context.setUserProfile({
2179
+ type: "AUTH_SUCCESS",
2180
+ userProfile: __assign({}, data),
2181
+ });
2182
+ }
2183
+ return [2 /*return*/];
2184
+ });
2185
+ }); }), handleSubmitCredentials = _c.handleSubmitCredentials, isCredAuthLoading = _c.loading, setIsCredAuthLoading = _c.setLoading;
2095
2186
  var handleMSALLogin = function () {
2096
2187
  if (authMode === "MSAL") {
2097
2188
  login();
@@ -2101,16 +2192,6 @@ var DefaultLoginPage = function (_a) {
2101
2192
  console.warn("Regular CAMS login requires configuration");
2102
2193
  }
2103
2194
  };
2104
- var cardVariants = {
2105
- hidden: { opacity: 0, scale: 0.8, y: 50 },
2106
- visible: {
2107
- opacity: 1,
2108
- scale: 1,
2109
- y: 0,
2110
- transition: { type: "spring", duration: 0.6 },
2111
- },
2112
- exit: { opacity: 0, scale: 0.8, y: -50, transition: { duration: 0.3 } },
2113
- };
2114
2195
  var handleRegister = function (data) { return __awaiter(void 0, void 0, void 0, function () {
2115
2196
  var options, attestationResponse, error_1;
2116
2197
  return __generator(this, function (_a) {
@@ -2120,10 +2201,7 @@ var DefaultLoginPage = function (_a) {
2120
2201
  // 1. Fetch challenge from your server
2121
2202
  console.log("Requesting registration challenge from server...");
2122
2203
  return [4 /*yield*/, axios.post(MFAEndpoints.RegisterNewChallenge, __assign({}, data), {
2123
- headers: {
2124
- "X-DEVICE-ID": GenerateDeviceId(),
2125
- "X-API-VERSION": "1.0",
2126
- },
2204
+ headers: APIHeaders,
2127
2205
  })];
2128
2206
  case 1:
2129
2207
  options = (_a.sent()).data;
@@ -2137,10 +2215,7 @@ var DefaultLoginPage = function (_a) {
2137
2215
  // 3. Send the response back to the server for verification
2138
2216
  console.log("Sending attestation to server for verification...");
2139
2217
  return [4 /*yield*/, axios.post(MFAEndpoints.RegisterVerify, attestationResponse, {
2140
- headers: {
2141
- "X-DEVICE-ID": GenerateDeviceId(),
2142
- "X-API-VERSION": "1.0",
2143
- },
2218
+ headers: APIHeaders,
2144
2219
  withCredentials: true, // credentials: 'include'
2145
2220
  })];
2146
2221
  case 3:
@@ -2160,11 +2235,15 @@ var DefaultLoginPage = function (_a) {
2160
2235
  // variant="outline"
2161
2236
  , {
2162
2237
  // variant="outline"
2163
- 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: handleMSALLogin, disabled: isLoading, children: [jsxRuntimeExports.jsx("img", { src: MicrosoftLogo, alt: "Microsoft Logo", width: 35, height: 35 }), jsxRuntimeExports.jsx("span", { className: "ml-2", children: isLoading ? "Logging in..." : "Sign in with Microsoft" })] }), jsxRuntimeExports.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 () { return setShowADModal(true); }, disabled: isLoading, children: [jsxRuntimeExports.jsx(KeyIcon, { className: "w-8 h-8 text-[#506f4a]" }), jsxRuntimeExports.jsx("span", { children: isLoading ? "Logging in..." : "Sign in with ActiveDirectory" })] }), usePassKey && (jsxRuntimeExports.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 () { return handleRegister(PassKeysRegisterProps); }, disabled: isLoading, children: [jsxRuntimeExports.jsx(KeyIcon, { className: "w-12 h-12 text-[#506f4a]" }), jsxRuntimeExports.jsx("span", { children: "Create a Passkey" })] }))] }), jsxRuntimeExports.jsxs(CardFooter, { className: "flex items-center justify-center mt-6 space-x-2 text-gray-400 text-sm", children: [jsxRuntimeExports.jsx(ShieldCheck, { className: "w-4 h-4 text-[#506f4a] pulse-glow" }), jsxRuntimeExports.jsx("span", { children: "Powered By NIBSS" })] })] }) }) }, "landing"), jsxRuntimeExports.jsx(ADLoginModal, { open: showADModal, onOpenChange: setShowADModal, onLogin: function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
2238
+ 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: handleMSALLogin, disabled: isLoading, children: [jsxRuntimeExports.jsx("img", { src: MicrosoftLogo, alt: "Microsoft Logo", width: 35, height: 35 }), jsxRuntimeExports.jsx("span", { className: "ml-2", children: isLoading ? "Logging in..." : "Sign in with Microsoft" })] }), useADLogin && (jsxRuntimeExports.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 () { return setShowADModal(true); }, disabled: isLoading, children: [jsxRuntimeExports.jsx(KeyIcon, { className: "text-[#506f4a]", size: 64 }), jsxRuntimeExports.jsx("span", { children: isLoading
2239
+ ? "Logging in..."
2240
+ : "Sign in with ActiveDirectory" })] })), usePassKey && (jsxRuntimeExports.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 () { return handleRegister(PassKeysRegisterProps); }, disabled: isLoading, children: [jsxRuntimeExports.jsx(KeyIcon, { className: "text-[#506f4a]", size: 64 }), jsxRuntimeExports.jsx("span", { children: "Create a Passkey" })] }))] }), jsxRuntimeExports.jsxs(CardFooter, { className: "flex items-center justify-center mt-6 space-x-2 text-gray-400 text-sm", children: [jsxRuntimeExports.jsx(ShieldCheck, { className: "w-4 h-4 text-[#506f4a] pulse-glow" }), jsxRuntimeExports.jsx("span", { children: "Powered By NIBSS" })] })] }) }) }, "landing"), jsxRuntimeExports.jsx(ADLoginModal, { open: showADModal, onOpenChange: setShowADModal, isLoading: isCredAuthLoading, setIsLoading: setIsCredAuthLoading, onLogin: function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
2164
2241
  var username = _b.username, password = _b.password, MFACode = _b.MFACode;
2165
2242
  return __generator(this, function (_c) {
2166
2243
  // Implement your AD login logic here
2167
2244
  console.log("AD Login:", { username: username, password: password, MFACode: MFACode });
2245
+ // Example: await adLoginService(username, password, mfaCode);
2246
+ handleSubmitCredentials(CredentialsAuthEndpoint !== null && CredentialsAuthEndpoint !== void 0 ? CredentialsAuthEndpoint : "/api/auth/validate", { username: username, password: password, MFACode: MFACode }, context.appCode);
2168
2247
  return [2 /*return*/];
2169
2248
  });
2170
2249
  }); } })] }));
@@ -2187,7 +2266,7 @@ var MFAGate = function (_a) {
2187
2266
  // loginComponent: LoginComponent = DefaultLoginPage,
2188
2267
  _c = _a.usePassKey,
2189
2268
  // loginComponent: LoginComponent = DefaultLoginPage,
2190
- usePassKey = _c === void 0 ? false : _c, PassKeysRegisterProps = _a.PassKeysRegisterProps, MFAEndpoints = _a.MFAEndpoints;
2269
+ usePassKey = _c === void 0 ? false : _c, _d = _a.useADLogin, useADLogin = _d === void 0 ? false : _d, CredentialsAuthEndpoint = _a.CredentialsAuthEndpoint, PassKeysRegisterProps = _a.PassKeysRegisterProps, MFAEndpoints = _a.MFAEndpoints;
2191
2270
  var context = useCAMSContext();
2192
2271
  var validatedMFAEndpoints = useMemo(function () {
2193
2272
  var parsed = MFAEndpointsSchema.safeParse(MFAEndpoints);
@@ -2212,8 +2291,10 @@ var MFAGate = function (_a) {
2212
2291
  });
2213
2292
  }); }, [context.logout]);
2214
2293
  Logger.debug("MFA Endpoint >>>", { MFAEndpoints: MFAEndpoints });
2294
+ if (useADLogin && !CredentialsAuthEndpoint)
2295
+ return jsxRuntimeExports.jsx(ErrorFallback, { message: "Invalid AD Login Configuration." });
2215
2296
  if (!validatedMFAEndpoints)
2216
- return jsxRuntimeExports.jsx(ErrorFallback, { message: "Invalid MFA configuration." });
2297
+ return jsxRuntimeExports.jsx(ErrorFallback, { message: "Invalid MFA Configuration." });
2217
2298
  if (context.authMode !== "MSAL")
2218
2299
  return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: children });
2219
2300
  if (context.isLoading)
@@ -2222,7 +2303,7 @@ var MFAGate = function (_a) {
2222
2303
  return (jsxRuntimeExports.jsx(MFAOptions, { MFAEndpoints: validatedMFAEndpoints, usePassKey: usePassKey, onComplete: handleComplete, onAuthFailed: handleAuthFailed }));
2223
2304
  }
2224
2305
  if (!context.isAuthenticated) {
2225
- return (jsxRuntimeExports.jsx(DefaultLoginPage, { usePassKey: usePassKey, MFAEndpoints: MFAEndpoints, PassKeysRegisterProps: PassKeysRegisterProps }));
2306
+ return (jsxRuntimeExports.jsx(DefaultLoginPage, { usePassKey: usePassKey, useADLogin: useADLogin, MFAEndpoints: MFAEndpoints, PassKeysRegisterProps: PassKeysRegisterProps, CredentialsAuthEndpoint: CredentialsAuthEndpoint }));
2226
2307
  }
2227
2308
  return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: children });
2228
2309
  };