@nibssplc/cams-sdk-react 1.0.0-rc.107 → 1.0.0-rc.109
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/Loading.d.ts +2 -3
- package/dist/index.cjs.js +38 -32
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +38 -32
- package/dist/index.esm.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
declare const LoadingSpinner: ({ loadingText }: {
|
|
1
|
+
declare const LoadingScreen: ({ loadingText }: {
|
|
3
2
|
loadingText?: string;
|
|
4
3
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
-
export default
|
|
4
|
+
export default LoadingScreen;
|
package/dist/index.cjs.js
CHANGED
|
@@ -17,6 +17,7 @@ var reactSlot = require('@radix-ui/react-slot');
|
|
|
17
17
|
var LabelPrimitive = require('@radix-ui/react-label');
|
|
18
18
|
var classVarianceAuthority = require('class-variance-authority');
|
|
19
19
|
var DialogPrimitive = require('@radix-ui/react-dialog');
|
|
20
|
+
var ldrs = require('ldrs');
|
|
20
21
|
var framerMotion = require('framer-motion');
|
|
21
22
|
|
|
22
23
|
function _interopNamespaceDefault(e) {
|
|
@@ -1216,7 +1217,7 @@ const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {
|
|
|
1216
1217
|
};
|
|
1217
1218
|
const parseAsync = /* @__PURE__*/ _parseAsync($ZodRealError);
|
|
1218
1219
|
|
|
1219
|
-
function t(r,e){try{var o=r();}catch(r){return e(r)}return o&&o.then?o.then(void 0,e):o}function s(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(".");if(!n[a])if("unionErrors"in t){var u=t.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code};}else n[a]={message:i,type:s};if("unionErrors"in t&&t.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=reactHookForm.appendErrors(a,e,n,s,f?[].concat(f,t.message):t.message);}r.shift();}return n}function i
|
|
1220
|
+
function t(r,e){try{var o=r();}catch(r){return e(r)}return o&&o.then?o.then(void 0,e):o}function s(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(".");if(!n[a])if("unionErrors"in t){var u=t.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code};}else n[a]={message:i,type:s};if("unionErrors"in t&&t.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=reactHookForm.appendErrors(a,e,n,s,f?[].concat(f,t.message):t.message);}r.shift();}return n}function i(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(".");if(!n[a])if("invalid_union"===t.code&&t.errors.length>0){var u=t.errors[0][0];n[a]={message:u.message,type:u.code};}else n[a]={message:i,type:s};if("invalid_union"===t.code&&t.errors.forEach(function(e){return e.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=reactHookForm.appendErrors(a,e,n,s,f?[].concat(f,t.message):t.message);}r.shift();}return n}function a(o,a,u){if(void 0===u&&(u={}),function(r){return "_def"in r&&"object"==typeof r._def&&"typeName"in r._def}(o))return function(n,i,c){try{return Promise.resolve(t(function(){return Promise.resolve(o["sync"===u.mode?"parse":"parseAsync"](n,a)).then(function(e){return c.shouldUseNativeValidation&&resolvers.validateFieldsNatively({},c),{errors:{},values:u.raw?Object.assign({},n):e}})},function(r){if(function(r){return Array.isArray(null==r?void 0:r.issues)}(r))return {values:{},errors:resolvers.toNestErrors(s(r.errors,!c.shouldUseNativeValidation&&"all"===c.criteriaMode),c)};throw r}))}catch(r){return Promise.reject(r)}};if(function(r){return "_zod"in r&&"object"==typeof r._zod}(o))return function(s,c,f){try{return Promise.resolve(t(function(){return Promise.resolve(("sync"===u.mode?parse:parseAsync)(o,s,a)).then(function(e){return f.shouldUseNativeValidation&&resolvers.validateFieldsNatively({},f),{errors:{},values:u.raw?Object.assign({},s):e}})},function(r){if(function(r){return r instanceof $ZodError}(r))return {values:{},errors:resolvers.toNestErrors(i(r.issues,!f.shouldUseNativeValidation&&"all"===f.criteriaMode),f)};throw r}))}catch(r){return Promise.reject(r)}};throw new Error("Invalid input: not a Zod schema")}
|
|
1220
1221
|
|
|
1221
1222
|
function cn() {
|
|
1222
1223
|
var inputs = [];
|
|
@@ -1332,7 +1333,7 @@ var GenericOTPVerifier = function (_a) {
|
|
|
1332
1333
|
}),
|
|
1333
1334
|
_b));
|
|
1334
1335
|
var form = reactHookForm.useForm({
|
|
1335
|
-
resolver: a
|
|
1336
|
+
resolver: a(Schema),
|
|
1336
1337
|
defaultValues: (_c = {}, _c[fieldName] = "", _c),
|
|
1337
1338
|
});
|
|
1338
1339
|
return (jsxRuntime.jsxs(Card, { className: "relative rounded space-y-4 p-0 m-0 py-8 space-x-6", children: [jsxRuntime.jsxs(CardHeader, { className: "flex items-center justify-center flex-col gap-2 mt-2 text-center mb-8", children: [jsxRuntime.jsx("div", { className: "w-16 h-16 bg-gradient-to-br from-lime-400 via-green-500 to-emerald-600 rounded-xl flex items-center justify-center text-white text-2xl mb-6 group-hover:scale-110 transition-transform duration-300", children: jsxRuntime.jsx(lucideReact.RectangleEllipsis, {}) }), jsxRuntime.jsx(CardTitle, { className: "font-bold text-emerald-700 text-2xl", children: "One-Time-Password (OTP)" }), attemptCount > 0 && (jsxRuntime.jsx("div", { className: "text-sm mt-2 ".concat(isMaxAttemptsReached ? "text-red-600" : "text-orange-600"), children: isMaxAttemptsReached
|
|
@@ -1406,11 +1407,12 @@ function DialogTitle(_a) {
|
|
|
1406
1407
|
return (jsxRuntime.jsx(DialogPrimitive__namespace.Title, __assign({ "data-slot": "dialog-title", className: cn("text-lg leading-none font-semibold", className) }, props)));
|
|
1407
1408
|
}
|
|
1408
1409
|
|
|
1409
|
-
var
|
|
1410
|
-
|
|
1411
|
-
var LoadingSpinner = function (_a) {
|
|
1410
|
+
var LoadingScreen = function (_a) {
|
|
1412
1411
|
var loadingText = _a.loadingText;
|
|
1413
|
-
|
|
1412
|
+
React.useEffect(function () {
|
|
1413
|
+
ldrs.newtonsCradle.register();
|
|
1414
|
+
}, []);
|
|
1415
|
+
return (jsxRuntime.jsxs("div", { className: "flex flex-col justify-center items-center h-full w-full py-10", children: [jsxRuntime.jsx("l-newtons-cradle", { size: 124, speed: 1.5, color: "green" }), loadingText ? (jsxRuntime.jsx("p", { className: "text-center font-semibold mt-3", children: loadingText })) : (jsxRuntime.jsx("p", { className: "text-center font-semibold mt-3", children: "Loading..." }))] }));
|
|
1414
1416
|
};
|
|
1415
1417
|
|
|
1416
1418
|
var AuthSuccessAnimation = function (_a) {
|
|
@@ -1424,8 +1426,8 @@ var useOTPHandler = function (_a) {
|
|
|
1424
1426
|
var _b = React.useState(false), loading = _b[0], setLoading = _b[1];
|
|
1425
1427
|
var _c = React.useState(0), attemptCount = _c[0], setAttemptCount = _c[1];
|
|
1426
1428
|
var _d = React.useState(false), isMaxAttemptsReached = _d[0], setIsMaxAttemptsReached = _d[1];
|
|
1427
|
-
var handleSubmitOTP = React.
|
|
1428
|
-
var currentAttempt, authentication, response, error_1
|
|
1429
|
+
var handleSubmitOTP = React.useCallback(function (authenticationValue) { return __awaiter$1(void 0, void 0, void 0, function () {
|
|
1430
|
+
var currentAttempt, authentication, response, error_1;
|
|
1429
1431
|
return __generator$1(this, function (_a) {
|
|
1430
1432
|
switch (_a.label) {
|
|
1431
1433
|
case 0:
|
|
@@ -1437,10 +1439,15 @@ var useOTPHandler = function (_a) {
|
|
|
1437
1439
|
_a.sent();
|
|
1438
1440
|
return [2 /*return*/, false];
|
|
1439
1441
|
case 2:
|
|
1440
|
-
|
|
1442
|
+
currentAttempt = 0;
|
|
1443
|
+
_a.label = 3;
|
|
1444
|
+
case 3:
|
|
1445
|
+
_a.trys.push([3, 12, 14, 15]);
|
|
1441
1446
|
setLoading(true);
|
|
1442
|
-
|
|
1443
|
-
|
|
1447
|
+
setAttemptCount(function (prev) {
|
|
1448
|
+
currentAttempt = prev + 1;
|
|
1449
|
+
return currentAttempt;
|
|
1450
|
+
});
|
|
1444
1451
|
authentication = new camsSdk.CAMSMFAAuthenticator();
|
|
1445
1452
|
return [4 /*yield*/, authentication.VerifyMFAOTP({
|
|
1446
1453
|
appCode: appCode,
|
|
@@ -1448,46 +1455,45 @@ var useOTPHandler = function (_a) {
|
|
|
1448
1455
|
email: email,
|
|
1449
1456
|
MFACode: authenticationValue,
|
|
1450
1457
|
}, MFAEndpoint || "")];
|
|
1451
|
-
case
|
|
1458
|
+
case 4:
|
|
1452
1459
|
response = _a.sent();
|
|
1453
|
-
if (!response) return [3 /*break*/,
|
|
1460
|
+
if (!response) return [3 /*break*/, 6];
|
|
1454
1461
|
return [4 /*yield*/, onAuthComplete(true, response)];
|
|
1455
|
-
case
|
|
1462
|
+
case 5:
|
|
1456
1463
|
_a.sent();
|
|
1457
1464
|
return [2 /*return*/, true];
|
|
1458
|
-
case
|
|
1459
|
-
if (!(currentAttempt >= MAX_ATTEMPTS)) return [3 /*break*/,
|
|
1465
|
+
case 6:
|
|
1466
|
+
if (!(currentAttempt >= MAX_ATTEMPTS)) return [3 /*break*/, 8];
|
|
1460
1467
|
setIsMaxAttemptsReached(true);
|
|
1461
1468
|
return [4 /*yield*/, onAuthComplete(false, {
|
|
1462
1469
|
message: "Maximum Attempts Reached",
|
|
1463
1470
|
})];
|
|
1464
|
-
case
|
|
1471
|
+
case 7:
|
|
1465
1472
|
_a.sent();
|
|
1466
|
-
return [3 /*break*/,
|
|
1467
|
-
case
|
|
1468
|
-
case
|
|
1473
|
+
return [3 /*break*/, 10];
|
|
1474
|
+
case 8: return [4 /*yield*/, onAuthComplete(false, response)];
|
|
1475
|
+
case 9:
|
|
1469
1476
|
_a.sent();
|
|
1470
|
-
_a.label =
|
|
1471
|
-
case
|
|
1472
|
-
case
|
|
1473
|
-
case
|
|
1477
|
+
_a.label = 10;
|
|
1478
|
+
case 10: return [2 /*return*/, false];
|
|
1479
|
+
case 11: return [3 /*break*/, 15];
|
|
1480
|
+
case 12:
|
|
1474
1481
|
error_1 = _a.sent();
|
|
1475
1482
|
console.error(error_1);
|
|
1476
|
-
currentAttempt = attemptCount + 1;
|
|
1477
1483
|
if (currentAttempt >= MAX_ATTEMPTS) {
|
|
1478
1484
|
setIsMaxAttemptsReached(true);
|
|
1479
1485
|
}
|
|
1480
1486
|
return [4 /*yield*/, onAuthComplete(false, error_1)];
|
|
1481
|
-
case
|
|
1487
|
+
case 13:
|
|
1482
1488
|
_a.sent();
|
|
1483
1489
|
return [2 /*return*/, false];
|
|
1484
|
-
case
|
|
1490
|
+
case 14:
|
|
1485
1491
|
setLoading(false);
|
|
1486
1492
|
return [7 /*endfinally*/];
|
|
1487
|
-
case
|
|
1493
|
+
case 15: return [2 /*return*/];
|
|
1488
1494
|
}
|
|
1489
1495
|
});
|
|
1490
|
-
}); }
|
|
1496
|
+
}); }, [onAuthComplete, MFAEndpoint, isMaxAttemptsReached, appCode, instCode, email]);
|
|
1491
1497
|
var resetAttempts = React.useCallback(function () {
|
|
1492
1498
|
setAttemptCount(0);
|
|
1493
1499
|
setIsMaxAttemptsReached(false);
|
|
@@ -1651,7 +1657,7 @@ var MFAOptions = function (_a) {
|
|
|
1651
1657
|
}, children: jsxRuntime.jsxs(DialogContent, { className: "space-y-2 w-[425px] max-w-[80%]", children: [jsxRuntime.jsx("div", { className: "absolute top-0 left-0 right-0 h-1 bg-gradient-to-r from-lime-400 to-emerald-600" }), jsxRuntime.jsx(DialogHeader, { className: "w-full", children: jsxRuntime.jsx(DialogTitle, { className: "text-center", children: "Email OTP" }) }), jsxRuntime.jsxs("div", { className: "space-y-6", children: [jsxRuntime.jsx(GenericOTPVerifier, { value: value, setValue: setValue, isDisabled: loading || isMaxAttemptsReached, onChangeOTP: function (code) { return handleSubmitOTP(code); }, fieldName: "EmailOTP", attemptCount: attemptCount, remainingAttempts: remainingAttempts, isMaxAttemptsReached: isMaxAttemptsReached }), jsxRuntime.jsx(Button, { variant: "ghost", className: "w-full text-sm", onClick: handleGoBack, children: "\u2190 Choose different method" })] })] }) }));
|
|
1652
1658
|
}
|
|
1653
1659
|
else if (authType === "AuthenticatorCode") {
|
|
1654
|
-
content = (jsxRuntime.jsx(Dialog, { open: otpVisible, onOpenChange: handleGoBack, children: jsxRuntime.jsxs(DialogContent, { className: "space-y-2 w-[425px] max-w-[80%]", children: [jsxRuntime.jsx("div", { className: "absolute top-0 left-0 right-0 h-1 bg-gradient-to-r from-lime-400 to-emerald-600" }), jsxRuntime.jsx(DialogHeader, { className: "w-full", children: jsxRuntime.jsx(DialogTitle, { className: "text-center", children: "Authenticator App" }) }), loading ? (jsxRuntime.jsx("div", { className: "p-3 h-full flex justify-center items-center", children: jsxRuntime.jsx(
|
|
1660
|
+
content = (jsxRuntime.jsx(Dialog, { open: otpVisible, onOpenChange: handleGoBack, children: jsxRuntime.jsxs(DialogContent, { className: "space-y-2 w-[425px] max-w-[80%]", children: [jsxRuntime.jsx("div", { className: "absolute top-0 left-0 right-0 h-1 bg-gradient-to-r from-lime-400 to-emerald-600" }), jsxRuntime.jsx(DialogHeader, { className: "w-full", children: jsxRuntime.jsx(DialogTitle, { className: "text-center", children: "Authenticator App" }) }), loading ? (jsxRuntime.jsx("div", { className: "p-3 h-full flex justify-center items-center", children: jsxRuntime.jsx(LoadingScreen, {}) })) : (jsxRuntime.jsxs("div", { className: "space-y-6", children: [jsxRuntime.jsx(CardDescription, { className: "text-sm text-gray-600 text-center", children: "Enter the 6-digit Code from your Authenticator app" }), jsxRuntime.jsx(GenericOTPVerifier, { value: value, setValue: setValue, isDisabled: loading || isMaxAttemptsReached, onChangeOTP: function (code) { return handleSubmitOTP(code); }, fieldName: "AuthenticatorCode", attemptCount: attemptCount, remainingAttempts: remainingAttempts, isMaxAttemptsReached: isMaxAttemptsReached }), jsxRuntime.jsx(Button, { variant: "ghost", className: "w-full text-sm", onClick: handleGoBack, children: "\u2190 Choose different method" })] }))] }) }));
|
|
1655
1661
|
}
|
|
1656
1662
|
return (jsxRuntime.jsx("div", { className: "cams-sdk flex justify-center items-center h-dvh", children: jsxRuntime.jsxs(Card, { className: "space-y-6 p-6 rounded-lg shadow-md", children: [jsxRuntime.jsxs(CardHeader, { children: [jsxRuntime.jsx("div", { className: "flex justify-center items", children: jsxRuntime.jsx("img", { src: OTPAuthenticationImg, alt: "NIBSS Logo", width: 265, height: 265 }) }), jsxRuntime.jsx(CardTitle, { className: "text-3xl font-bold mb-6 text-center", children: "Two-Factor Authentication" }), jsxRuntime.jsx(CardTitle, { className: "text-gray-300 text-base -tracking-wide text-center", children: "Your Microsoft account has been validated. Please complete two-factor authentication to continue." })] }), jsxRuntime.jsx(CardContent, { children: content }), jsxRuntime.jsxs(CardFooter, { className: "flex items-center justify-center mt-6 space-x-2 text-gray-400 text-sm", children: [jsxRuntime.jsx(lucideReact.ShieldCheck, { className: "w-4 h-4 text-[#506f4a] pulse-glow" }), jsxRuntime.jsx("span", { children: "Powered By NIBSS" })] })] }) }));
|
|
1657
1663
|
};
|
|
@@ -1682,7 +1688,7 @@ var ADLoginModal = function (_a) {
|
|
|
1682
1688
|
}), credentials = _d[0], setCredentials = _d[1];
|
|
1683
1689
|
var _e = React.useState(""), MFACode = _e[0], setMFACode = _e[1];
|
|
1684
1690
|
var form = reactHookForm.useForm({
|
|
1685
|
-
resolver: a
|
|
1691
|
+
resolver: a(credentialsSchema),
|
|
1686
1692
|
defaultValues: { username: "", password: "" },
|
|
1687
1693
|
});
|
|
1688
1694
|
var handleCredentialsSubmit = function (values) { return __awaiter$1(void 0, void 0, void 0, function () {
|
|
@@ -1845,7 +1851,7 @@ var MFAEndpointsSchema = z.object({
|
|
|
1845
1851
|
AuthChallengeVerify: z.url("MFA AuthChallengeVerify must be a valid URL"),
|
|
1846
1852
|
});
|
|
1847
1853
|
var MFAGate = function (_a) {
|
|
1848
|
-
var children = _a.children, _b = _a.fallback, fallback = _b === void 0 ? (jsxRuntime.jsx("div", { className: "h-screen flex items-center justify-center", children: jsxRuntime.jsx(
|
|
1854
|
+
var children = _a.children, _b = _a.fallback, fallback = _b === void 0 ? (jsxRuntime.jsx("div", { className: "h-screen flex items-center justify-center", children: jsxRuntime.jsx(LoadingScreen, {}) })) : _b, _c = _a.usePassKey, 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;
|
|
1849
1855
|
var context = useCAMSContext();
|
|
1850
1856
|
var _e = React.useState("Loading"), authState = _e[0], setAuthState = _e[1];
|
|
1851
1857
|
var ValidatedMFAEndpoints = React.useMemo(function () {
|