From 8d7b1a5b9b8fad6149d71cd24714106e455f0c45 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 10:45:46 +0000 Subject: [PATCH 01/23] build(deps): bump rollup in /apps/OpenSign in the npm_and_yarn group Bumps the npm_and_yarn group in /apps/OpenSign with 1 update: [rollup](https://github.com/rollup/rollup). Updates `rollup` from 2.79.1 to 2.79.2 - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v2.79.1...v2.79.2) --- updated-dependencies: - dependency-name: rollup dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] --- apps/OpenSign/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/OpenSign/package-lock.json b/apps/OpenSign/package-lock.json index b46dbbcc1..d22b5d1fc 100644 --- a/apps/OpenSign/package-lock.json +++ b/apps/OpenSign/package-lock.json @@ -22508,9 +22508,9 @@ } }, "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", "bin": { "rollup": "dist/bin/rollup" }, From 7e8ed42f46e9bae89727a5e11123cf0e2f94f66e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 00:49:48 +0000 Subject: [PATCH 02/23] build(deps): bump mongoose from 8.6.3 to 8.7.0 in /apps/OpenSignServer Bumps [mongoose](https://github.com/Automattic/mongoose) from 8.6.3 to 8.7.0. - [Release notes](https://github.com/Automattic/mongoose/releases) - [Changelog](https://github.com/Automattic/mongoose/blob/master/CHANGELOG.md) - [Commits](https://github.com/Automattic/mongoose/compare/8.6.3...8.7.0) --- updated-dependencies: - dependency-name: mongoose dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- apps/OpenSignServer/package-lock.json | 16 ++++++++-------- apps/OpenSignServer/package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/apps/OpenSignServer/package-lock.json b/apps/OpenSignServer/package-lock.json index 991518ba6..cd5e58bb6 100644 --- a/apps/OpenSignServer/package-lock.json +++ b/apps/OpenSignServer/package-lock.json @@ -25,7 +25,7 @@ "googleapis": "^144.0.0", "jsonschema": "^1.4.1", "mailgun.js": "^10.2.3", - "mongoose": "^8.6.3", + "mongoose": "^8.7.0", "multer": "^1.4.5-lts.1", "multer-s3": "^3.0.1", "node-forge": "^1.3.1", @@ -8247,13 +8247,13 @@ } }, "node_modules/mongoose": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.6.3.tgz", - "integrity": "sha512-++yRmm7hjMbqVA/8WeiygTnEfrFbiy+OBjQi49GFJIvCQuSYE56myyQWo4j5hbpcHjhHQU8NukMNGTwAWFWjIw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.7.0.tgz", + "integrity": "sha512-rUCSF1mMYQXjXYdqEQLLlMD3xbcj2j1/hRn+9VnVj7ipzru/UoUZxlj/hWmteKMAh4EFnDZ+BIrmma9l/0Hi1g==", "dependencies": { "bson": "^6.7.0", "kareem": "2.6.3", - "mongodb": "6.8.0", + "mongodb": "6.9.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", @@ -8325,9 +8325,9 @@ } }, "node_modules/mongoose/node_modules/mongodb": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.8.0.tgz", - "integrity": "sha512-HGQ9NWDle5WvwMnrvUxsFYPd3JEbqD3RgABHBQRuoCEND0qzhsd0iH5ypHsf1eJ+sXmvmyKpP+FLOKY8Il7jMw==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.9.0.tgz", + "integrity": "sha512-UMopBVx1LmEUbW/QE0Hw18u583PEDVQmUmVzzBRH0o/xtE9DBRA5ZYLOjpLIa03i8FXjzvQECJcqoMvCXftTUA==", "dependencies": { "@mongodb-js/saslprep": "^1.1.5", "bson": "^6.7.0", diff --git a/apps/OpenSignServer/package.json b/apps/OpenSignServer/package.json index 75d6c529f..2c7a31874 100644 --- a/apps/OpenSignServer/package.json +++ b/apps/OpenSignServer/package.json @@ -34,7 +34,7 @@ "googleapis": "^144.0.0", "jsonschema": "^1.4.1", "mailgun.js": "^10.2.3", - "mongoose": "^8.6.3", + "mongoose": "^8.7.0", "multer": "^1.4.5-lts.1", "multer-s3": "^3.0.1", "node-forge": "^1.3.1", From 0665bcf30aee76efeb4f7a7989de5be82ce440c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 01:04:19 +0000 Subject: [PATCH 03/23] build(deps): bump react-bootstrap in /apps/OpenSign Bumps [react-bootstrap](https://github.com/react-bootstrap/react-bootstrap) from 2.10.4 to 2.10.5. - [Release notes](https://github.com/react-bootstrap/react-bootstrap/releases) - [Changelog](https://github.com/react-bootstrap/react-bootstrap/blob/master/CHANGELOG.md) - [Commits](https://github.com/react-bootstrap/react-bootstrap/compare/v2.10.4...v2.10.5) --- updated-dependencies: - dependency-name: react-bootstrap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- apps/OpenSign/package-lock.json | 8 ++++---- apps/OpenSign/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/OpenSign/package-lock.json b/apps/OpenSign/package-lock.json index b46dbbcc1..e2f673fbd 100644 --- a/apps/OpenSign/package-lock.json +++ b/apps/OpenSign/package-lock.json @@ -28,7 +28,7 @@ "print-js": "^1.6.0", "radix-ui": "^1.0.1", "react": "^18.2.0", - "react-bootstrap": "^2.10.4", + "react-bootstrap": "^2.10.5", "react-confetti": "^6.1.0", "react-cookie": "^7.2.0", "react-datepicker": "^7.4.0", @@ -20271,9 +20271,9 @@ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/react-bootstrap": { - "version": "2.10.4", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.4.tgz", - "integrity": "sha512-W3398nBM2CBfmGP2evneEO3ZZwEMPtHs72q++eNw60uDGDAdiGn0f9yNys91eo7/y8CTF5Ke1C0QO8JFVPU40Q==", + "version": "2.10.5", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.5.tgz", + "integrity": "sha512-XueAOEn64RRkZ0s6yzUTdpFtdUXs5L5491QU//8ZcODKJNDLt/r01tNyriZccjgRImH1REynUc9pqjiRMpDLWQ==", "dependencies": { "@babel/runtime": "^7.24.7", "@restart/hooks": "^0.4.9", diff --git a/apps/OpenSign/package.json b/apps/OpenSign/package.json index 579f02063..e1b1ff066 100644 --- a/apps/OpenSign/package.json +++ b/apps/OpenSign/package.json @@ -23,7 +23,7 @@ "print-js": "^1.6.0", "radix-ui": "^1.0.1", "react": "^18.2.0", - "react-bootstrap": "^2.10.4", + "react-bootstrap": "^2.10.5", "react-confetti": "^6.1.0", "react-cookie": "^7.2.0", "react-datepicker": "^7.4.0", From db640b04a6bdf1edc0f5d089a89f57bafcbe888f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 01:04:29 +0000 Subject: [PATCH 04/23] build(deps-dev): bump eslint-plugin-react in /apps/OpenSign Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.36.1 to 7.37.0. - [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases) - [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.36.1...v7.37.0) --- updated-dependencies: - dependency-name: eslint-plugin-react dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- apps/OpenSign/package-lock.json | 8 ++++---- apps/OpenSign/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/OpenSign/package-lock.json b/apps/OpenSign/package-lock.json index b46dbbcc1..ea27abdb7 100644 --- a/apps/OpenSign/package-lock.json +++ b/apps/OpenSign/package-lock.json @@ -78,7 +78,7 @@ "dotenv-webpack": "^8.1.0", "eslint": "^9.11.1", "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-react": "^7.36.1", + "eslint-plugin-react": "^7.37.0", "lint-staged": "^15.2.10", "mini-css-extract-plugin": "^2.9.1", "postcss": "^8.4.47", @@ -10856,9 +10856,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.36.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz", - "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==", + "version": "7.37.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.0.tgz", + "integrity": "sha512-IHBePmfWH5lKhJnJ7WB1V+v/GolbB0rjS8XYVCSQCZKaQCAUhMoVoOEn1Ef8Z8Wf0a7l8KTJvuZg5/e4qrZ6nA==", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", diff --git a/apps/OpenSign/package.json b/apps/OpenSign/package.json index 579f02063..6c4f9fccf 100644 --- a/apps/OpenSign/package.json +++ b/apps/OpenSign/package.json @@ -110,7 +110,7 @@ "dotenv-webpack": "^8.1.0", "eslint": "^9.11.1", "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-react": "^7.36.1", + "eslint-plugin-react": "^7.37.0", "lint-staged": "^15.2.10", "mini-css-extract-plugin": "^2.9.1", "postcss": "^8.4.47", From 5cd0f55cb295a814627320dd1c0630954f1ca0b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 01:05:02 +0000 Subject: [PATCH 05/23] build(deps-dev): bump commitizen from 4.3.0 to 4.3.1 in /apps/OpenSign Bumps [commitizen](https://github.com/commitizen/cz-cli) from 4.3.0 to 4.3.1. - [Release notes](https://github.com/commitizen/cz-cli/releases) - [Commits](https://github.com/commitizen/cz-cli/compare/v4.3.0...v4.3.1) --- updated-dependencies: - dependency-name: commitizen dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- apps/OpenSign/package-lock.json | 8 ++++---- apps/OpenSign/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/OpenSign/package-lock.json b/apps/OpenSign/package-lock.json index b46dbbcc1..4ca098552 100644 --- a/apps/OpenSign/package-lock.json +++ b/apps/OpenSign/package-lock.json @@ -70,7 +70,7 @@ "autoprefixer": "^10.4.20", "babel-loader": "^9.2.1", "clean-webpack-plugin": "^4.0.0", - "commitizen": "^4.3.0", + "commitizen": "^4.3.1", "concurrently": "^9.0.1", "css-loader": "^7.1.2", "daisyui": "^4.12.10", @@ -8750,9 +8750,9 @@ } }, "node_modules/commitizen": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", - "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.1.tgz", + "integrity": "sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw==", "dev": true, "dependencies": { "cachedir": "2.3.0", diff --git a/apps/OpenSign/package.json b/apps/OpenSign/package.json index 579f02063..5fc089bbf 100644 --- a/apps/OpenSign/package.json +++ b/apps/OpenSign/package.json @@ -102,7 +102,7 @@ "autoprefixer": "^10.4.20", "babel-loader": "^9.2.1", "clean-webpack-plugin": "^4.0.0", - "commitizen": "^4.3.0", + "commitizen": "^4.3.1", "concurrently": "^9.0.1", "css-loader": "^7.1.2", "daisyui": "^4.12.10", From 74df84e4493e1340d8418404f6d141585abc0b00 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Mon, 30 Sep 2024 16:23:48 +0530 Subject: [PATCH 06/23] feat: add upload option in initials in my signature --- apps/OpenSign/src/pages/Managesign.js | 131 ++++++++++++++++---------- 1 file changed, 83 insertions(+), 48 deletions(-) diff --git a/apps/OpenSign/src/pages/Managesign.js b/apps/OpenSign/src/pages/Managesign.js index fc905a002..326040082 100644 --- a/apps/OpenSign/src/pages/Managesign.js +++ b/apps/OpenSign/src/pages/Managesign.js @@ -24,9 +24,11 @@ const ManageSign = () => { const [Initials, setInitials] = useState(""); const [isInitials, setIsInitials] = useState(false); const [id, setId] = useState(""); + const [imgInitials, setImgInitials] = useState(""); const canvasRef = useRef(null); const imageRef = useRef(null); const initailsRef = useRef(null); + const imgInitialsRef = useRef(null); useEffect(() => { fetchUserSign(); // eslint-disable-next-line @@ -54,8 +56,9 @@ const ManageSign = () => { } setImage(res?.ImageURL); if (res && res.Initials) { - setInitials(res.Initials); + // setInitials(res.Initials); setIsInitials(true); + setImgInitials(res?.Initials); } } else { if (User?.get("name")) { @@ -95,6 +98,10 @@ const ManageSign = () => { if (initailsRef.current) { initailsRef.current.clear(); } + if (imgInitialsRef.current) { + imgInitialsRef.current.value = ""; + } + setImgInitials(""); setInitials(""); if (image) { setIsValue(true); @@ -119,8 +126,7 @@ const ManageSign = () => { }; const handleSubmit = async (e) => { e.preventDefault(); - const isUrl = image.includes("https") || image.includes("http"); - + const isUrl = image?.includes("https") || image?.includes("http"); if (!isvalue) { setWarning(true); setTimeout(() => setWarning(false), 1000); @@ -142,15 +148,25 @@ const ManageSign = () => { } else { imgUrl = image; } - let initialsUrl = ""; const isInitialsUrl = - Initials.includes("https") || Initials.includes("http"); - if (!isInitialsUrl && Initials) { - const initialsImg = base64StringtoFile( - Initials, - `${replaceSpace}_initials.png` - ); - initialsUrl = await uploadFile(initialsImg); + imgInitials?.includes("https") || imgInitials?.includes("http"); + + let initialFile; + if (Initials) { + initialFile = base64StringtoFile(Initials, `${replaceSpace}_sign.png`); + } else { + if (imgInitials && !isInitialsUrl) { + initialFile = base64StringtoFile( + imgInitials, + `${replaceSpace}__sign.png` + ); + } + } + let initialsUrl; + if (initialFile && !isInitialsUrl) { + initialsUrl = await uploadFile(initialFile); + } else { + initialsUrl = imgInitials; } if (imgUrl) { await saveEntry({ @@ -191,7 +207,7 @@ const ManageSign = () => { const saveEntry = async (obj) => { const signCls = "contracts_Signature"; - const User = Parse.User.current().id; + const User = Parse?.User?.current()?.id; const userId = { __type: "Pointer", className: "_User", objectId: User }; if (id) { try { @@ -202,20 +218,13 @@ const ManageSign = () => { updateSign.set("SignatureName", obj.name); updateSign.set("UserId", userId); const res = await updateSign.save(); - setIsLoader(false); - setIsAlert({ - type: "success", - message: t("signature-saved-alert") - }); - setTimeout(() => setIsAlert({}), 2000); + setIsAlert({ type: "success", message: t("signature-saved-alert") }); return res; } catch (err) { console.log(err); + setIsAlert({ type: "danger", message: `${err.message}` }); + } finally { setIsLoader(false); - setIsAlert({ - type: "danger", - message: `${err.message}` - }); setTimeout(() => setIsAlert({}), 2000); } } else { @@ -226,20 +235,13 @@ const ManageSign = () => { updateSign.set("SignatureName", obj.name); updateSign.set("UserId", userId); const res = await updateSign.save(); - setIsLoader(false); - setIsAlert({ - type: "success", - message: t("signature-saved-alert") - }); - setTimeout(() => setIsAlert({}), 2000); + setIsAlert({ type: "success", message: t("signature-saved-alert") }); return res; } catch (err) { console.log(err); + setIsAlert({ type: "success", message: `${err.message}` }); + } finally { setIsLoader(false); - setIsAlert({ - type: "success", - message: `${err.message}` - }); setTimeout(() => setIsAlert({}), 2000); } } @@ -250,7 +252,29 @@ const ManageSign = () => { }; const handleInitialsChange = () => { setInitials(initailsRef.current.toDataURL()); - setIsValue(true); + if (image || signature) { + setIsValue(true); + } + }; + const handleUploadInitials = () => { + imgInitialsRef.current.click(); + }; + const onImgInitialsChange = async (event) => { + if (initailsRef.current) { + initailsRef.current.clear(); + } + setInitials(""); + if (event.target.files && event.target.files[0]) { + const file = event.target.files[0]; + const base64Img = await toDataUrl(file); + setImgInitials(base64Img); + if (image || signature) { + setIsValue(true); + } + } else { + setImgInitials(""); + setIsValue(false); + } }; return (
@@ -348,7 +372,7 @@ const ManageSign = () => { className="op-link" onClick={() => handleUploadBtn()} > - {t("upload-image")} + {t("upload")}
{ {t("initials")} +
- {isInitials ? ( + {imgInitials ? (
inititals
) : ( @@ -393,9 +421,7 @@ const ManageSign = () => { className: "intialSignature rounded-box" }} // backgroundColor="rgb(255, 255, 255)" - onEnd={() => - handleInitialsChange(initailsRef.current.toDataURL()) - } + onEnd={() => handleInitialsChange()} dotSize={1} /> )} @@ -418,6 +444,7 @@ const ManageSign = () => { ? "2px solid black" : "2px solid white" }} + className="fa-light fa-pen-nib" onClick={() => { if (key === 0) { setInitialPen("blue"); @@ -428,7 +455,6 @@ const ManageSign = () => { } }} key={key} - className="fa-light fa-pen-nib" width={20} height={20} > @@ -437,13 +463,22 @@ const ManageSign = () => {
)}
-
+
handleClearInitials()} + onClick={() => handleUploadInitials()} > - {t("clear")} + {t("upload")} +
+
+
handleClearInitials()} + > + {t("clear")} +
From 86f0622c4ab7a099b92180582ee3bbab5f5e437d Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Mon, 30 Sep 2024 19:37:17 +0530 Subject: [PATCH 07/23] fix: disable otp issue in public signing flow --- apps/OpenSign/src/pages/PdfRequestFiles.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index 44a06b314..eec52bb83 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -1511,7 +1511,17 @@ function PdfRequestFiles(props) { if (userRes?.data?.result) { setRes(userRes.data.result); - await SendOtp(); + const isEnableOTP = pdfDetails?.[0]?.IsEnableOTP || false; + if (isEnableOTP) { + await SendOtp(); + } else { + setIsPublicContact(false); + setIsPublicTemplate(false); + setIsLoading({ isLoad: false }); + setDocumentId(userRes.data?.result?.docId); + getDocumentDetails(userRes?.data?.result?.docId); + contactBookId = userRes?.data?.result?.contactId || ""; + } } else { console.log("error in public-sign to create user details"); setIsAlert({ From 6bd8a8fea875e8a469b78ab204f681266607c0e9 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Mon, 30 Sep 2024 19:51:17 +0530 Subject: [PATCH 08/23] refactor: set fileAcl to none --- apps/OpenSignServer/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/OpenSignServer/index.js b/apps/OpenSignServer/index.js index 88569decf..26b16b5f9 100644 --- a/apps/OpenSignServer/index.js +++ b/apps/OpenSignServer/index.js @@ -24,8 +24,9 @@ if (useLocal !== 'true') { try { const spacesEndpoint = new AWS.Endpoint(process.env.DO_ENDPOINT); const s3Options = { - bucket: process.env.DO_SPACE, // globalConfig.S3FilesAdapter.bucket, + bucket: process.env.DO_SPACE, baseUrl: process.env.DO_BASEURL, + fileAcl: 'none', region: process.env.DO_REGION, directAccess: true, preserveFileName: true, From 05cf3ef7fecc341a3e4334ad64975dd5cdc25ec6 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Mon, 30 Sep 2024 20:55:43 +0530 Subject: [PATCH 09/23] fix: unexpected finish button visible after finish signature in disable otp public signing flow --- apps/OpenSign/src/pages/PdfRequestFiles.js | 11 ++++++----- apps/OpenSign/src/pages/PlaceHolderSign.js | 4 ++-- apps/OpenSign/src/primitives/GetReportDisplay.js | 6 +++--- apps/OpenSignServer/cloud/customRoute/autoReminder.js | 2 +- .../v1/routes/CreateDocumentWithTemplate.js | 2 +- .../v1/routes/createDocumentwithCoordinate.js | 2 +- .../cloud/customRoute/v1/routes/resendMail.js | 2 +- .../cloud/parsefunction/PublicUserLinkContactToDoc.js | 2 +- .../cloud/parsefunction/createBatchDocs.js | 2 +- 9 files changed, 17 insertions(+), 16 deletions(-) diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index eec52bb83..4805be403 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -429,7 +429,7 @@ function PdfRequestFiles(props) { currUserId = getCurrentSigner?.objectId ? getCurrentSigner.objectId - : contactBookId || ""; + : signerObjectId || ""; if (isEnableSubscription) { await checkIsSubscribed( documentData[0]?.ExtUserPtr?.objectId, @@ -1013,7 +1013,7 @@ function PdfRequestFiles(props) { receiver_phone: user.Phone, expiry_date: localExpireDate, company_name: orgName, - signing_url: `Sign here` + signing_url: `Sign here` }; replaceVar = replaceMailVaribles( requestSubject, @@ -1047,7 +1047,7 @@ function PdfRequestFiles(props) { orgName + " Expires on " + localExpireDate + - "

This is an automated email from OpenSign™. For any queries regarding this email, please contact the sender " + senderEmail + @@ -1517,10 +1517,11 @@ function PdfRequestFiles(props) { } else { setIsPublicContact(false); setIsPublicTemplate(false); - setIsLoading({ isLoad: false }); + setLoading(false); setDocumentId(userRes.data?.result?.docId); getDocumentDetails(userRes?.data?.result?.docId); - contactBookId = userRes?.data?.result?.contactId || ""; + const contactId = userRes.data.result?.contactId; + setSignerObjectId(contactId); } } else { console.log("error in public-sign to create user details"); diff --git a/apps/OpenSign/src/pages/PlaceHolderSign.js b/apps/OpenSign/src/pages/PlaceHolderSign.js index 819351290..aa31b6942 100644 --- a/apps/OpenSign/src/pages/PlaceHolderSign.js +++ b/apps/OpenSign/src/pages/PlaceHolderSign.js @@ -1121,7 +1121,7 @@ function PlaceHolderSign() { receiver_phone: signerMail[i]?.Phone || "", expiry_date: localExpireDate, company_name: orgName, - signing_url: `Sign here` + signing_url: `Sign here` }; replaceVar = replaceMailVaribles( requestSubject, @@ -1155,7 +1155,7 @@ function PlaceHolderSign() { orgName + " Expire on " + localExpireDate + - "

This is an automated email from OpenSign™. For any queries regarding this email, please contact the sender " + senderEmail + diff --git a/apps/OpenSign/src/primitives/GetReportDisplay.js b/apps/OpenSign/src/primitives/GetReportDisplay.js index 920246cde..d918b31a7 100644 --- a/apps/OpenSign/src/primitives/GetReportDisplay.js +++ b/apps/OpenSign/src/primitives/GetReportDisplay.js @@ -711,7 +711,7 @@ const ReportTable = (props) => { receiver_phone: userDetails?.Phone || "", expiry_date: localExpireDate, company_name: doc.ExtUserPtr.Company, - signing_url: `Sign here` + signing_url: `Sign here` }; const res = replaceMailVaribles(subject, "", variables); @@ -740,7 +740,7 @@ const ReportTable = (props) => { receiver_phone: userDetails?.Phone || "", expiry_date: localExpireDate, company_name: doc.ExtUserPtr.Company, - signing_url: `Sign here` + signing_url: `Sign here` }; const res = replaceMailVaribles("", body, variables); @@ -781,7 +781,7 @@ const ReportTable = (props) => { receiver_phone: user?.signerPtr?.Phone || "", expiry_date: localExpireDate, company_name: doc?.ExtUserPtr?.Company || "", - signing_url: `Sign here` + signing_url: `Sign here` }; const subject = diff --git a/apps/OpenSignServer/cloud/customRoute/autoReminder.js b/apps/OpenSignServer/cloud/customRoute/autoReminder.js index 05fc0cd25..a93c4291d 100644 --- a/apps/OpenSignServer/cloud/customRoute/autoReminder.js +++ b/apps/OpenSignServer/cloud/customRoute/autoReminder.js @@ -53,7 +53,7 @@ async function sendMail(doc, signer) { receiver_phone: signer?.Phone || '', expiry_date: localExpireDate, company_name: doc?.ExtUserPtr?.Company || '', - signing_url: `Sign here`, + signing_url: `Sign here`, }; const mail = replaceMailVaribles(subject, body, variables); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js index b0a46e603..d931b02d8 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js @@ -269,7 +269,7 @@ export default async function createDocumentWithTemplate(request, response) { orgName + " Expires on " + localExpireDate + - "

This is an automated email from OpenSign™. For any queries regarding this email, please contact the sender " + sender + diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js index 29404049c..59c681c1e 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js @@ -325,7 +325,7 @@ export default async function createDocumentwithCoordinate(request, response) { orgName + " Expires on " + localExpireDate + - "

This is an automated email from OpenSign™. For any queries regarding this email, please contact the sender " + sender + diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/resendMail.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/resendMail.js index 794fc8943..b72d00528 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/resendMail.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/resendMail.js @@ -86,7 +86,7 @@ export default async function resendMail(request, response) { orgName + " Expires on " + localExpireDate + - "

This is an automated email from OpenSign™. For any queries regarding this email, please contact the sender " + sender + diff --git a/apps/OpenSignServer/cloud/parsefunction/PublicUserLinkContactToDoc.js b/apps/OpenSignServer/cloud/parsefunction/PublicUserLinkContactToDoc.js index 0b103d83b..00c40e762 100644 --- a/apps/OpenSignServer/cloud/parsefunction/PublicUserLinkContactToDoc.js +++ b/apps/OpenSignServer/cloud/parsefunction/PublicUserLinkContactToDoc.js @@ -168,7 +168,7 @@ const sendMailToAllSigners = async docId => { receiver_phone: signerMail[i]?.Phone || '', expiry_date: localExpireDate, company_name: orgName, - signing_url: `Sign here`, + signing_url: `Sign here`, }; replaceVar = replaceMailVaribles(requestSubject, htmlReqBody, variables); } diff --git a/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js b/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js index 3df13cc65..dad7b197f 100644 --- a/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js +++ b/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js @@ -95,7 +95,7 @@ async function sendMail(document, sessionToken) { orgName + " Expires on " + localExpireDate + - "

This is an automated email from OpenSign™. For any queries regarding this email, please contact the sender " + sender + From 5556fafa94c23a4f86ac09cbef6422d985cf470d Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Tue, 1 Oct 2024 12:20:28 +0530 Subject: [PATCH 10/23] fix: document download issue in the disabled OTP public sign flow before signing and subscription issue in the guest login process --- .../public/locales/en/translation.json | 7 ++++--- .../public/locales/fr/translation.json | 7 ++++--- apps/OpenSign/src/components/pdf/PdfHeader.js | 6 +----- apps/OpenSign/src/pages/PdfRequestFiles.js | 18 ++++++------------ apps/OpenSign/src/pages/TemplatePlaceholder.js | 2 +- apps/OpenSign/src/pages/UserProfile.js | 2 +- .../src/primitives/GetReportDisplay.js | 14 +++++++------- .../src/script/locales/en/translation.json | 7 ++++--- .../src/script/locales/fr/translation.json | 7 ++++--- 9 files changed, 32 insertions(+), 38 deletions(-) diff --git a/apps/OpenSign/public/locales/en/translation.json b/apps/OpenSign/public/locales/en/translation.json index 19f3e5610..461ce6af7 100644 --- a/apps/OpenSign/public/locales/en/translation.json +++ b/apps/OpenSign/public/locales/en/translation.json @@ -265,10 +265,10 @@ "make-template-public-alert": "Are you sure you want to make this template public?", "make-template-private-alert": "Are you sure you want to make this template private? This will remove it from your public profile.", "public-role": "Public role", - "public-url": "Public URL", + "public-url": "Public profile needed", "public-url-copy": "Here’s your public URL: ", "public-url-copy-mssg":"Copy it or share it with the signer, and you will be able to see all your publicly set templates.", - "add-public-url-alert": "Please add your public URL, and you will be able to make a public template.", + "add-public-url-alert": "Please complete your OpenSign public profile setup. Once done, you’ll be able to make templates public. This process only needs to be completed once.", "share-with-alert": "You cannot share a template if any roles already have contacts assigned. Please remove all contact assignments from the roles before sharing the template.", "share-with": "Share with", "team-not-found": "Team not found", @@ -672,6 +672,7 @@ "document-logs":"Document logs", "server-down": "Unable to connect to the OpenSign server. If you are self-hosting OpenSign, please ensure that all the steps in the documentation have been followed correctly. If you're running OpenSign locally, you might be accessing it through an incorrect port number.", "admin-exists": "Admin already exists. Please login to the application using admin credentials in order to manage users.", - "public-tour-message":"Please make template public to copy public URL" + "public-tour-message":"The template needs to be public before you can generate a shareable link.", + "add-user-template": "You need to add a role before you can add fields for it." } diff --git a/apps/OpenSign/public/locales/fr/translation.json b/apps/OpenSign/public/locales/fr/translation.json index 0e1cce477..52dbd9933 100644 --- a/apps/OpenSign/public/locales/fr/translation.json +++ b/apps/OpenSign/public/locales/fr/translation.json @@ -264,10 +264,10 @@ "make-template-public-alert": "Êtes-vous sûr de vouloir rendre ce modèle public ?", "make-template-private-alert": "Êtes-vous sûr de vouloir rendre ce modèle privé ? Cela le supprimera de votre profil public.", "public-role": "Rôle public", - "public-url": "URL publique", + "public-url": "Profil public requis", "public-url-copy": "Voici votre URL publique : ", "public-url-copy-mssg": "copiez-la ou partagez-le avec le signataire et vous pouvoir voir tous vos paramètres publics modèles.", - "add-public-url-alert": "Veuillez ajouter votre URL publique et vous pourra rendre public modèle.", + "add-public-url-alert": "Veuillez terminer la configuration de votre profil public OpenSign. Une fois cela fait, vous pourrez rendre les modèles publics. Ce processus ne doit être effectué qu’une seule fois.", "share-with-alert": "Vous ne pouvez pas partager un modèle si des contacts sont déjà attribués à des rôles. Veuillez supprimer toutes les attributions de contacts des rôles avant de partager le modèle.", "share-with": "Partager avec", "team-not-found": "Équipe introuvable", @@ -671,7 +671,8 @@ "document-logs":"Journaux de documents", "server-down": "Impossible de se connecter au serveur OpenSign. Si vous hébergez vous-même OpenSign, veuillez vous assurer que toutes les étapes de la documentation ont été correctement suivies. Si vous exécutez OpenSign localement, vous y accédez peut-être via un numéro de port incorrect.", "admin-exists": "L'administrateur existe déjà. Veuillez vous connecter à l'application en utilisant les informations d'identification de l'administrateur afin de gérer les utilisateurs.", - "public-tour-message":"Veuillez rendre le modèle public pour copier l'URL publique" + "public-tour-message": "Le modèle doit être public avant que vous puissiez générer un lien partageable.", + "add-user-template":"Vous devez ajouter un rôle avant de pouvoir lui ajouter des champs. " } diff --git a/apps/OpenSign/src/components/pdf/PdfHeader.js b/apps/OpenSign/src/components/pdf/PdfHeader.js index 93b74cef7..ed67d517b 100644 --- a/apps/OpenSign/src/components/pdf/PdfHeader.js +++ b/apps/OpenSign/src/components/pdf/PdfHeader.js @@ -418,11 +418,7 @@ function Header({ {templateId && (

)} diff --git a/apps/OpenSign/src/script/locales/en/translation.json b/apps/OpenSign/src/script/locales/en/translation.json index 3e9970d37..f96845408 100644 --- a/apps/OpenSign/src/script/locales/en/translation.json +++ b/apps/OpenSign/src/script/locales/en/translation.json @@ -265,10 +265,10 @@ "make-template-public-alert": "Are you sure you want to make this template public?", "make-template-private-alert": "Are you sure you want to make this template private? This will remove it from your public profile.", "public-role": "Public role", - "public-url": "Public URL", + "public-url": "Public profile needed", "public-url-copy": "Here’s your public URL: ", "public-url-copy-mssg": "Copy it or share it with the signer, and you will be able to see all your publicly set templates.", - "add-public-url-alert": "Please add your public URL, and you will be able to make a public template.", + "add-public-url-alert": "Please complete your OpenSign public profile setup. Once done, you’ll be able to make templates public. This process only needs to be completed once.", "share-with-alert": "You cannot share a template if any roles already have contacts assigned. Please remove all contact assignments from the roles before sharing the template.", "share-with": "Share with", "team-not-found": "Team not found", @@ -672,5 +672,6 @@ "document-logs": "Document logs", "server-down": "Unable to connect to the OpenSign server. If you are self-hosting OpenSign, please ensure that all the steps in the documentation have been followed correctly. If you're running OpenSign locally, you might be accessing it through an incorrect port number.", "admin-exists": "Admin already exists. Please login to the application using admin credentials in order to manage users.", - "public-tour-message": "Please make template public to copy public URL" + "public-tour-message":"The template needs to be public before you can generate a shareable link.", + "add-user-template": "You need to add a role before you can add fields for it." } diff --git a/apps/OpenSign/src/script/locales/fr/translation.json b/apps/OpenSign/src/script/locales/fr/translation.json index 6b3cde993..b83b915b7 100644 --- a/apps/OpenSign/src/script/locales/fr/translation.json +++ b/apps/OpenSign/src/script/locales/fr/translation.json @@ -264,10 +264,10 @@ "make-template-public-alert": "Êtes-vous sûr de vouloir rendre ce modèle public ?", "make-template-private-alert": "Êtes-vous sûr de vouloir rendre ce modèle privé ? Cela le supprimera de votre profil public.", "public-role": "Rôle public", - "public-url": "URL publique", + "public-url": "Profil public requis", "public-url-copy": "Voici votre URL publique : ", "public-url-copy-mssg": "copiez-la ou partagez-le avec le signataire et vous pouvoir voir tous vos paramètres publics modèles.", - "add-public-url-alert": "Veuillez ajouter votre URL publique et vous pourra rendre public modèle.", + "add-public-url-alert": "Veuillez terminer la configuration de votre profil public OpenSign. Une fois cela fait, vous pourrez rendre les modèles publics. Ce processus ne doit être effectué qu’une seule fois.", "share-with-alert": "Vous ne pouvez pas partager un modèle si des contacts sont déjà attribués à des rôles. Veuillez supprimer toutes les attributions de contacts des rôles avant de partager le modèle.", "share-with": "Partager avec", "team-not-found": "Équipe introuvable", @@ -671,5 +671,6 @@ "document-logs": "Journaux de documents", "server-down": "Impossible de se connecter au serveur OpenSign. Si vous hébergez vous-même OpenSign, veuillez vous assurer que toutes les étapes de la documentation ont été correctement suivies. Si vous exécutez OpenSign localement, vous y accédez peut-être via un numéro de port incorrect.", "admin-exists": "L'administrateur existe déjà. Veuillez vous connecter à l'application en utilisant les informations d'identification de l'administrateur afin de gérer les utilisateurs.", - "public-tour-message": "Veuillez rendre le modèle public pour copier l'URL publique" + "public-tour-message": "Le modèle doit être public avant que vous puissiez générer un lien partageable.", + "add-user-template":"Vous devez ajouter un rôle avant de pouvoir lui ajouter des champs. " } From c8f5c80d5b4c585c7bfcdfd397d9d5a0786a7a3a Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Tue, 1 Oct 2024 12:40:53 +0530 Subject: [PATCH 11/23] fix: update tagline maxlength --- apps/OpenSign/src/pages/UserProfile.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/OpenSign/src/pages/UserProfile.js b/apps/OpenSign/src/pages/UserProfile.js index 22e4e0c7d..f05321f98 100644 --- a/apps/OpenSign/src/pages/UserProfile.js +++ b/apps/OpenSign/src/pages/UserProfile.js @@ -564,7 +564,7 @@ function UserProfile() { {editmode || !extendUser?.[0]?.UserName ? ( <> {editmode || !extendUser?.[0]?.Tagline ? ( Date: Tue, 1 Oct 2024 17:58:30 +0530 Subject: [PATCH 12/23] fix: text box widgets design to enter value issue in mobile view --- .../src/components/pdf/BorderResize.js | 21 +++++++++++++++---- .../src/components/pdf/Placeholder.js | 16 ++++++++++++-- .../src/components/pdf/PlaceholderType.js | 4 +++- apps/OpenSign/src/constant/Utils.js | 15 +++++++++---- 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/apps/OpenSign/src/components/pdf/BorderResize.js b/apps/OpenSign/src/components/pdf/BorderResize.js index 55f122ac9..ca40eba72 100644 --- a/apps/OpenSign/src/components/pdf/BorderResize.js +++ b/apps/OpenSign/src/components/pdf/BorderResize.js @@ -1,11 +1,24 @@ import React from "react"; -function BorderResize({ right, top }) { +function BorderResize(props) { + const getHeight = () => { + const height = props.posHeight(props.pos, props.isSignYourself); + if (height > 14) { + return "14px"; + } else { + return `${height}px`; + } + }; + return (
); } diff --git a/apps/OpenSign/src/components/pdf/Placeholder.js b/apps/OpenSign/src/components/pdf/Placeholder.js index 68011e88d..db4dd44f7 100644 --- a/apps/OpenSign/src/components/pdf/Placeholder.js +++ b/apps/OpenSign/src/components/pdf/Placeholder.js @@ -791,12 +791,22 @@ function Placeholder(props) { props.pos.type !== radioButtonWidget && props.pos.type !== "checkbox" && props.pos.key === props.selectWidgetId ? ( - + ) : props.data && props.isNeedSign && props.pos.type !== "checkbox" ? ( props.data?.signerObjId === props.signerObjId && props.pos.type !== radioButtonWidget && props.pos.type !== "checkbox" ? ( - + ) : ( <> ) @@ -862,6 +872,7 @@ function Placeholder(props) { startDate={startDate} handleSaveDate={handleSaveDate} xPos={props.xPos} + posHeight={props.posHeight} /> ) : ( @@ -889,6 +900,7 @@ function Placeholder(props) { startDate={startDate} handleSaveDate={handleSaveDate} xPos={props.xPos} + posHeight={props.posHeight} /> )} diff --git a/apps/OpenSign/src/components/pdf/PlaceholderType.js b/apps/OpenSign/src/components/pdf/PlaceholderType.js index 08d124e86..d0113124f 100644 --- a/apps/OpenSign/src/components/pdf/PlaceholderType.js +++ b/apps/OpenSign/src/components/pdf/PlaceholderType.js @@ -29,7 +29,9 @@ function PlaceholderType(props) { const [textValue, setTextValue] = useState(); const [selectedCheckbox, setSelectedCheckbox] = useState([]); const years = range(1990, getYear(new Date()) + 16, 1); - const fontSize = (props.pos.options?.fontSize || "12") + "px"; + const height = props.posHeight(props.pos, props.isSignYourself); + const fontSize = + (props.pos.options?.fontSize || (height > 14 ? 12 : height / 2)) + "px"; const fontColor = props.pos.options?.fontColor || "black"; const months = [ "January", diff --git a/apps/OpenSign/src/constant/Utils.js b/apps/OpenSign/src/constant/Utils.js index 7743a5739..375c8d971 100644 --- a/apps/OpenSign/src/constant/Utils.js +++ b/apps/OpenSign/src/constant/Utils.js @@ -1283,8 +1283,14 @@ export const changeImageWH = async (base64Image) => { }; //function to calculate font size of text area widgets -const calculateFontSize = (position, containerScale, signyourself) => { - const font = position?.options?.fontSize || 12; +const calculateFontSize = ( + position, + containerScale, + signyourself, + widgetHeight +) => { + const font = + position?.options?.fontSize || widgetHeight > 14 ? 12 : widgetHeight / 2; if (!signyourself && position?.isMobile && position?.scale) { return font / position?.scale / containerScale; } else { @@ -1480,7 +1486,8 @@ export const multiSignEmbed = async ( const fontSize = calculateFontSize( position, containerScale, - signyourself + signyourself, + widgetHeight ); parseInt(fontSize); let textContent; @@ -1655,7 +1662,7 @@ export const multiSignEmbed = async ( }); } const pdfBytes = await pdfDoc.saveAsBase64({ useObjectStreams: false }); - //console.log("pdf", pdfBytes); + // console.log("pdf", pdfBytes); return pdfBytes; }; From 08c7f4b4910099c7d773b61e6af6534659e29610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81ngel=20Beretta?= Date: Tue, 1 Oct 2024 21:28:57 -0500 Subject: [PATCH 13/23] Add Spanish translation --- .../public/locales/es/translation.json | 676 ++++++++++++++++++ .../src/components/pdf/SelectLanguage.js | 1 + apps/OpenSign/src/i18n.js | 2 +- apps/OpenSign/src/script/i18n.js | 6 +- .../src/script/locales/es/translation.json | 676 ++++++++++++++++++ 5 files changed, 1359 insertions(+), 2 deletions(-) create mode 100644 apps/OpenSign/public/locales/es/translation.json create mode 100644 apps/OpenSign/src/script/locales/es/translation.json diff --git a/apps/OpenSign/public/locales/es/translation.json b/apps/OpenSign/public/locales/es/translation.json new file mode 100644 index 000000000..3a34ae1aa --- /dev/null +++ b/apps/OpenSign/public/locales/es/translation.json @@ -0,0 +1,676 @@ +{ + "header-news": "Nueva funcionalidad: ¡Los perfiles públicos ahora están disponibles! Crea y comparte plantillas públicas fácilmente", + "header-news-btn": "Configurar ahora", + "create-account": "Crear cuenta", + "login": "Iniciar sesión", + "language": "Idioma", + "name": "Nombre", + "phone": "Teléfono", + "phone-optional": "opcional", + "email": "Correo", + "company": "Compañía", + "job-title": "Título del puesto", + "profile": "Perfil", + "log-out": "Cerrar sesión", + "is-email-verified": "El correo está verificado", + "public-profile": "Perfil público", + "tagline": "Eslogan ", + "has-requested-you-to-sign": "ha solicitado que firmes", + "has-requested-you-to-review-and-sign": " ha solicitado que revises y firmes", + "input-required": "Por favor, rellena este campo.", + "sort-order": { + "Ascending": "Ascendente", + "Descending": "Descendente", + "Name": "Nombre", + "Date": "Fecha" + }, + "context-menu": { + "Download": "Descargar", + "Rename": "Renombrar", + "Move": "Mover", + "Delete": "Eliminar" + }, + "action": "Acción", + "add": "Agregar", + "add-new-folder": "Agregar nueva carpeta", + "disable-documentId": "Desactivar ID de documento", + "edit": "Editar", + "change-password": "Cambiar contraseña", + "save": "Guardar", + "cancel": "Cancelar", + "upgrade-now": "Mejorar ahora", + "upgrade-to": "Mejorar a", + "plan": "Plan", + "subscribe-card-teamplan": "¡Libera todo el poder de la colaboración! Crea organizaciones, equipos y jerarquías ilimitadas. Comparte plantillas sin problemas entre equipos y asigna funciones de usuario personalizadas. ¡Mejora tu flujo de trabajo hoy mismo!", + "subscribe-card-plan": "Desbloquea funciones premium desde solo {{premiumPrice}}/mes. Disfruta de un rendimiento mejorado y solo {{addonPrice}} por crédito adicional después de tus créditos premium incluidos.", + "user-name-limit-char": "Para tener un nombre de usuario menor a 8 caracteres por favor suscríbete", + "tour-content": "No mostrar esto otra vez", + "pro": "PRO", + "team": "EQUIPO", + "user": "Usuario", + "docs": "Documentación", + "session-expired": "Tu sesión ha expirado.", + "public-profile-help": "Esta es tu URL pública. Cópiala o compártela con el firmante, y podrás ver todas tus plantillas públicas.", + "tagline-help": "Este eslogan aparecerá en tu perfil público de OpenSign, por ejem. https://opensign.me/alex", + "welcome": "¡Bienvenido de nuevo!", + "Login-to-your-account": "Ingresa a tu cuenta", + "password": "Contraseña", + "forgot-password": "¿Olvidaste la contraseña?", + "loading": "Cargando...", + "of": "de", + "sign-SSO": "Ingresar con SSO", + "login-page": "Página de inicio de sesión", + "or": "O", + "signup-page": "Página de registro", + "password-length": "La contraseña debe tener 8 caracteres", + "password-case": "La contraseña debe incluir mayúsculas, minúsculas y números", + "password-special-char": " La contraseña debe incluir caracteres especiales", + "agreee": "Estoy de acuerdo con los", + "term": "Términos de Servicio", + "subscribe-to-opensign": "Suscribirse al boletín de OpenSign", + "register": "Registrarse", + "sidebar": { + "Dashboard": "Panel", + "Sign yourself": "Firmar", + "Request signatures": "Solicitar firmas", + "Templates": "Plantillas", + "Templates-Children": { + "Create template": "Crear plantilla", + "Manage templates": "Administrar plantillas" + }, + "OpenSign™ Drive": "OpenSign™ Drive", + "Reports": "Reportes", + "Reports-Children": { + "Need your sign": "Necesitan tu firma", + "In Progress": "En progreso", + "Completed": "Completado", + "Drafts": "Borradores", + "Declined": "Rechazados", + "Expired": "Expirados", + "Contactbook": "Agenda de contactos" + }, + "Settings": "Ajustes", + "Settings-Children": { + "My Signature": "Mi firma", + "API Token": "Token API", + "Webhook": "Webhook", + "Teams": "Equipos", + "Team-update-successfully": "Equipo actualizado correctamente.", + "Users": "Usuarios" + } + }, + "dashboard-card": { + "Need your Signature": "Necesitan tu firma", + "Out for signatures": "En espera de ser firmados" + }, + "report-name": { + "Draft Documents": "Documentos borradores", + "Need your sign": "Necesitan tu firma", + "In-progress documents": "Documentos en progreso", + "Completed Documents": "Documentos completados", + "Declined Documents": "Documentos rechazados", + "Expired Documents": "Documentos expirados", + "Recently sent for signatures": "Recientemente enviados para ser firmados", + "Recent signature requests": "Solicitudes de firma recientes", + "Drafts": "Borradores", + "Contactbook": "Agenda de contactos", + "Templates": "Plantillas", + "Teams": "Equipos", + "Users": "Usuarios" + }, + "btnLabel": { + "sign": "firmar", + "Sign": "FIRMAR", + "Resend": "Reenviar", + "Revoke": "Revocar", + "Delete": "Eliminar", + "Use": "Usar", + "Quick send": "Envío rápido", + "Edit": "Editar", + "Share with team": "Compartir con el equipo", + "Share": "Compartir", + "View": "Ver", + "option": "Opción", + "Embed": "Incrustar", + "Copy TemplateId": "Copiar ID de plantilla", + "Copy Public URL": "Copiar URL pública" + }, + "report-heading": { + "Sr.No": "Nº", + "Title": "Título", + "Email": "Correo", + "Phone": "Teléfono", + "File": "Archivo", + "Owner": "Propietario", + "Signers": "Firmantes", + "Note": "Nota", + "Folder": "Carpeta", + "Reason": "Razón", + "Parent Team": "Equipo padre", + "Active": "Activo", + "Role": "Rol", + "Team": "Equipo", + "Name": "Nombre", + "Status": "Estado", + "created-date": "Fecha de creación", + "Type": "Tipo", + "Logs": "Registros" + }, + "report-help": { + "Draft Documents": "Estos son documentos que has iniciado pero no has finalizado para su envío.", + "Need your sign": "Esta es una lista de documentos que esperan tu firma.", + "In-progress documents": "Esta es una lista de documentos que has enviado a otras partes para su firma.", + "Completed Documents": "Esta es una lista de documentos en los que todas las partes han firmado.", + "Declined Documents": "Esta es una lista de documentos que han sido rechazados por uno de los firmantes.", + "Expired Documents": "Esta es una lista de documentos que han alcanzado su fecha de caducidad.", + "Contactbook": "Esta es una lista de contactos/firmantes añadidos por ti. Aparecerán como sugerencias cuando intentes añadir firmantes a un nuevo documento.", + "Templates": "Esta es una lista de plantillas que están a tu disposición para crear documentos. Puedes hacer clic en el botón «usar» para crear un nuevo documento utilizando una plantilla, modifica el documento y añade firmantes en el siguiente paso." + }, + "form-name": { + "Sign Yourself": "Firmar", + "Request Signatures": "Solicitar firmas", + "New Template": "Nueva plantilla" + }, + "file-type": "pdf, png, jpg, jpeg", + "docx": "docx", + "file-selected": "archivo seleccionado", + "template-title": "Título de la plantilla", + "document-title": "Título del documento", + "description": "Descripción", + "time-to-complete": "Plazo de finalización (días)", + "send-in-order": "Enviar en orden", + "send-in-order-help": { + "p1": "Elige cómo quieres que se envíen las solicitudes de firma a los firmantes del documento:", + "p2": "Seleccionando esta opción se enviará inicialmente la solicitud de firma al primer firmante. Una vez que el primer firmante complete su parte, el siguiente firmante en la secuencia recibirá la solicitud. Este proceso continúa hasta que todos los firmantes hayan firmado el documento. Este método garantiza que el documento se firme en un orden específico.", + "p3": "Seleccionando esta opción se enviarán los enlaces para la firma a todos los firmantes simultáneamente. Cada firmante puede firmar el documento cuando le convenga, independientemente de si otros firmantes han completado sus firmas. Este método es más rápido, pero no impone ningún orden de firma entre los participantes.", + "p4": "Selecciona la opción que mejor se adapte a las necesidades de tu tramitación de documentos." + }, + "no": "No", + "auto-reminder": "Recordatorio automático", + "remind-once": " Recordar una vez cada (Días)", + "next": "Siguiente", + "select-folder": "Seleccionar carpeta", + "OpenSign-drive": "OpenSign™ Drive", + "drive-document-status": { + "Completed": "Completado", + "Declined": "Rechazado", + "Draft": "Borrador", + "Expired": "Expirado", + "In Progress": "En progreso" + }, + "select-folder-help": "Si no seleccionas una carpeta, tu documento firmado se guardará en la carpeta principal de OpenSign Drive.", + "no-data": "No se encontraron datos", + "save-here": "Guardar aquí", + "back": "Atrás", + "add-folder": "Añadir carpeta", + "create-folder": "Crear carpeta", + "parent-folder": "Carpeta superior", + "create": "Crear", + "signers": "Firmantes", + "signers-help": "Empieza a escribir el nombre de un contacto para ver los firmantes sugeridos entre tus contactos guardados o añade otros nuevos. Organiza el orden de firma añadiendo firmantes en la secuencia deseada. Utiliza el botón «+» para añadir nuevos firmantes y la «X» para quitar todos. Cada firmante recibirá una solicitud por correo electrónico para que firme el documento según el orden indicado.", + "add-signer": "Añadir firmante", + "contact-not-found": "Contacto no encontrado", + "add-yourself": "Añadirte a ti mismo", + "submit": "Enviar", + "reset": "Volver a empezar", + "my-signature": "Mi firma", + "signature": "Firma", + "upload-image": " Subir imagen", + "clear": "Limpiar", + "upload-signature/Image": "Por favor, sube la firma/imagen", + "initials": "Iniciales", + "API": "API", + "api-token": "Token API", + "regenerate-token": "Regenerar token activo", + "generate-token": "Generar token activo", + "view-docs": "Ver documentación", + "generate-token-alert": "¿En definitiva quieres regenerar el token? Esto expirará el token antiguo.", + "yes": "Sí", + "copied": "Copiado", + "something-went-wrong-mssg": "Algo salió mal, por favor, intenta de nuevo más tarde.", + "token-generated": "Token generado exitosamente.", + "webhook": "Webhook", + "update-webhook": "Actualizar webhook", + "add-webhook": "Agregar webhook", + "webhook-added": "Webhook agregado exitosamente.", + "team-disabled": "Equipo deshabilitado", + "Team enabled": "Equipo habilitado", + "are-you-sure": "¿En definitiva quieres ", + "disable": "deshabilitar", + "enable": "habilitar", + "this-team": " este equipo?", + "edit-team": "Editar equipo", + "name-of-team": "Nombre del equipo", + "prev": "Anterior", + "no-data-avaliable": "No hay datos disponibles", + "add-team": "Agregar equipo", + "page-not-found": "Página no encontrada", + "users-from-teams": "usuarios de equipos", + "user-status": "Estado del usuario", + "activate": "activar", + "deactivate": "desactivar", + "this-user": " este usuario", + "delete-user": "Eliminar usuario", + "delete": "eliminar", + "add-user": "Agregar usuario", + "password-generateed": "La contraseña solo será generada una vez; asegúrate de copiarla.", + "Team status": "Estado del equipo", + "user-deactivated": "Usuario desactivado.", + "user-activated": "Usuario activado.", + "public": "Público", + "download": "Descargar", + "view": "Ver", + "make-template-public": "Convertir la plantilla en pública", + "make-template-private": "Convertir la plantilla en privada", + "make-template-public-alert": "¿En definitiva quieres convertir esta plantilla en pública?", + "make-template-private-alert": "¿En definitiva quieres convertir esta plantilla en privada? Esto lo removerá de tu perfil público.", + "public-role": "Rol público", + "public-url": "URL pública", + "public-url-copy": "Aquí está tu URL pública: ", + "public-url-copy-mssg": "Cópiala o compártela con el firmante y podrás ver todas tus plantillas públicas.", + "add-public-url-alert": "Por favor, agrega tu URL pública y podrás crear plantillas públicas.", + "share-with-alert": "No puedes compartir una plantilla si alguno de los roles ya tiene contactos asignados. Elimina todas las asignaciones de contactos de los roles antes de compartir la plantilla.", + "share-with": "Compartir con", + "team-not-found": "Equipo no encontrado", + "roles": "Roles", + "delete-document": "Eliminar documento", + "delete-document-alert": "¿En definitiva quieres eliminar este documento?", + "quick-send": "Envío rápido", + "add-new": "Agregar nuevo", + "send": "Enviar", + "quick-send-alert-1": "Todos los roles de este documento están actualmente vinculados a contactos. Para enviar rápidamente copias de esta plantilla a varios firmantes, por favor, asegúrate de que al menos un rol no esté vinculado a ningún contacto.", + "quick-send-alert-2": "Por favor, asegúrate de que hay al menos un widget de firma añadido para cada destinatario.", + "quick-send-alert-3": "Por favor, añade al menos un rol a esta plantilla para poder hacer un «envío rápido» de copias a varios firmantes.", + "quick-send-alert-4": "El envío rápido ha alcanzado el límite.", + "copy-link": "Copiar enlace", + "copy": "Copiar", + "revoke-document": "Revocar documento", + "revoke-document-alert": "¿En definitiva quieres revocar este documento?", + "resend-mail": "Reenviar correo", + "resend-mail-help": "Puedes usar las siguientes variables que serán reemplazadas por sus valores reales:- {{document_title}}, {{sender_name}}, {{sender_mail}}, {{sender_phone}}, {{receiver_name}}, {{receiver_email}}, {{receiver_phone}}, {{expiry_date}}, {{company_name}}, {{signing_url}}.", + "subject": "Asunto", + "body": "Cuerpo", + "add-contact": "Agregar contacto", + "add-signer-alert": "¡El contacto ya existe!", + "record-delete-alert": "¡Entrada eliminada exitosamente!", + "record-revoke-alert": "¡Entrada revocada exitosamente!", + "mail-sent-alert": "Correo enviado exitosamente.", + "document-sent-alert": "¡Documento enviado exitosamente!", + "template-share-alert": "Plantilla compartida exitosamente.", + "template-public-alert-1": "Has convertido exitosamente la plantilla en pública.", + "template-public-alert-2": "Has convertido exitosamente la plantilla en privada.", + "template-public-alert-3": "Tienes que seleccionar un rol para los firmantes públicos.", + "template-public-alert-4": "Por favor, asegúrate de que has añadido al menos un widget de firma para cada firmante.", + "template-public-alert-5": "Dado que esta plantilla tiene «enviar en orden» habilitado, el rol público debe estar posicionado arriba al inicio.", + "template-public-alert-6": "Por favor, enlaza firmantes a todos los roles excepto al usuario de rol público.", + "template-public-alert-7": "Por favor, asigna al menos un rol público para convertir está plantilla en pública.", + "loader": " Esto podría llevar algún tiempo", + "pages": "Páginas", + "document-signed": "Documento firmado", + "close": "Cerrar", + "validation-alert": "Alerta de validación", + "validate-alert-mssg": " Los datos ingresados no cumplen con los criterios establecidos por la expresión regular.", + "otp-verification": "Verificación OTP", + "enter-otp": "Ingresar OTP", + "verify": "Verificar", + "verify-email-1": "Verificar correo", + "resend": "Reenviar", + "contact-details": "Detalles del contacto", + "verify-email": "¡Por favor, verifica tu correo!", + "send-otp": " Enviar OTP", + "otp-placeholder": "Ingresa el código de verificación enviado por correo", + "loading-doc": "Cargando documento...", + "widgets-name": { + "signature": "firma", + "stamp": "sello", + "initials": "iniciales", + "name": "nombre", + "job title": "título del puesto", + "company": "compañía", + "date": "fecha", + "text": "texto", + "text input": "entrada de texto", + "checkbox": "casilla", + "dropdown": "desplegable", + "radio button": "botón de radio", + "image": "imagen", + "email": "correo" + }, + "fields": "Campos", + "recipients": "Destinatarios", + "please-add": "Por favor, agrega un", + "signed-by": "Firmado por", + "more": "más", + "sent": "enviado", + "print": "Imprimir", + "certificate": "Certificado", + "decline": "Rechazar", + "finish": "Finalizar", + "mail": "Correo", + "sign-now": "Firmar ahora", + "successfully-signed": "¡Firmado exitosamente!", + "email-mssg": " Los destinatarios agregados aquí recibirán una copia del documento firmado.", + "email-error-1": " por favor, proporciona una dirección de correo correcta", + "email-error-2": "Solo puedes enviar hasta a 10 destinatarios a la vez.", + "Email-verified-alert-1": "El correo está verificado.", + "Email-verified-alert-2": "El correo ya ha sido verificado.", + "upload-stamp-image": "Subir imagen del sello", + "draw": "Dibujar", + "type": "Escribir", + "color-type": { + "red": "rojo", + "blue": "azul", + "black": "negro", + "yellow": "amarillo" + }, + "my-initials": "Mis iniciales", + "upload": "Subir", + "initial-teb": "Iniciales", + "signature-tab": "Firma", + "your-signature": "Tu firma", + "copy-title": "Copiar widget a", + "contact-delete-alert": "¿En definitiva quieres eliminar este contacto?", + "reset-password-alert-1": "El enlace para restablecer la contraseña ha sido enviado a tu correo electrónico", + "reset-password-alert-2": "Por favor, configura un adaptador de correo ", + "reset-password-alert-3": "Restablece tu contraseña", + "faild-animation": "Error al cargar la animación", + "apply": "Aplicar", + "copy-type": { + "All pages": "Todas las páginas", + "All pages but last": "Todas las páginas menos la última", + "All pages but first": "Todas las páginas menos la primera", + "Next to current widget": "Junto al widget actual" + }, + "options": "Opciones", + "minimun-check": "Chequeo mínimo", + "maximum-check": "Chequeo máximo", + "default-value": "Valor por defecto", + "select": "Seleccionar", + "read-only": "Es de solo lectura", + "hide-labels": "Esconder etiquetas", + "checkbox": "Casilla", + "alert": "Alerta", + "zoom-in": "Acercar", + "zoom-out": "Alejar", + "document-signed-alert": "¡Felicitaciones! 🎉 ¡Este documento ha sido firmado por ti exitosamente!", + "otp-sent-alert": "OTP enviado a tu correo", + "fields-required": "Campos requeridos", + "signature-widget-alert-1": "Por favor, asegúrate de que hay al menos un widget de firma agregado", + "signature-widget-alert-2": "Por favor, asegúrate de que todos los campos están correctamente rellenados y de que cumplen todos los requisitos.", + "encrypted-pdf-alert": "Actualmente los archivos PDF encriptados no están soportados.", + "encrypted-pdf-alert-1": "La contraseña del archivo PFX es inválida.", + "user-not-exist": "El usuario no existe", + "template-signature-field": "Por favor, agrega al menos un campo de firma para todos los roles.", + "template-role-alert": "Por favor, primero agrega roles", + "create-document": "Crear documento", + "template-created-alert": "¿Quieres crear un documento usando la plantilla que acabas de crear?", + "signers-alert": "alerta de firmantes", + "template-creation-alert-1": "¡Por favor, selecciona un firmante para agregar un marcador de posición!", + "ok": "OK", + "radio-group": "Grupo de radio", + "dropdown-options": "Opciones del desplegable", + "add-role": "Agregar rol", + "role-ex": " por ejem.: Cliente, RRHH, Director, Administrador, Estudiante, etc.", + "add/choose-signer": "Agregar/Elegir firmante", + "choose-from-contacts": "Elegir desde los contactos", + "select-signer": " Por favor, selecciona el firmante", + "edit-template": "Editar plantilla", + "widget-info": "Información del widget", + "validation": "Validación", + "invalid-default-value": "valor por defecto inválido", + "hint": "Pista", + "color": "color", + "role-help": { + "p1": "¿Qué son los roles de una plantilla?", + "p2": "Empieza por especificar cada uno de los roles necesarios para completar el documento. Piensa en las partes implicadas en el proceso de firma y cuáles son sus responsabilidades. Los roles más habituales son RRHH para los documentos internos, Cliente para los contratos o Proveedor para los convenios comerciales.", + "p3": "¿Por qué preasignar usuarios a algunos roles?", + "p4": "Para los roles que consistentemente involucran al mismo individuo (por ejem., la firma del Gerente en las ofertas de empleo), puedes preasignar un usuario a un rol dentro de una plantilla. Este paso es opcional pero recomendado para la eficiencia y consistencia entre documentos", + "p5": "¿Cuando especifico el usuario asignado a cada rol?", + "p6": "Cuando crees un documento usando tu plantilla, se te pedirá que asignes usuarios a cada rol definido. Si un rol ya tiene un usuario asignado, este será rellenado con anticipación, pero puedes modificarlo según lo necesites antes de enviar el documento." + }, + "add-recipients": "Agregar destinatarios", + "loading-mssg": "Esto podría llevar algún tiempo", + "send-mail": "Enviar correo", + "placeholder-alert-1": "Por favor, asegúrate de que hay al menos un widget de firma para cada destinatario.", + "placeholder-alert-2": "Por favor, confirma que hayas rellenado el campo de texto.", + "placeholder-alert-3": " ¿En definitiva quieres enviar este documento para ser firmado?", + "placeholder-alert-4": "¡Has enviado exitosamente correos a todos los destinatarios!", + "placeholder-alert-5": "¿Quieres firmar documentos ahora mismo?", + "placeholder-alert-6": "¡Por favor, configura el adaptador de correo para enviar correos!", + "placeholder-alert-7": "¡Por favor, selecciona un firmante para agregar un marcador de posición!", + "email-subject": "asunto del correo", + "email-body": "cuerpo del correo", + "email-placeholder": "agregar cuerpo del correo", + "reset-to-default": "Restablecer a por defecto", + "cutomize-email": "Personalizar correo", + "upgrade-to-customize-email": "Mejora para personalizar el correo", + "sign-url": "URL de firma", + "Mails Sent": "Correos enviados", + "document-alert": "Alerta de documento", + "owner-subscription-expired": "La suscripción del propietario ha expirado.", + "subscription-expired": "Suscripción expirada", + "alert-message": "Mensaje de alerta", + "document-decline": "Rechazar documento", + "decline-alert-1": "¿En definitiva quieres rechazar este documento?", + "decline-alert-2": "¡Has rechazado este documento!", + "decline-alert-3": "No puedes firmar este documento ya que ha sido rechazado/revocado.", + "sign here": "Firma aquí", + "guest-email-alert": "el código de verificación ha sido enviado a tu correo", + "get-otp-alert": "recibirás un código de verificación por correo", + "user-already-exist": "El usuario ya existe.", + "server-error": "¡Error interno del servidor!", + "fill-required-details!": "¡Por favor, rellena los detalles requeridos!", + "sign-up-form": "Formulario de registro", + "sign-up": "Registrarse", + "folder-already-exist!": "¡la carpeta ya existe!", + "please-select-position!": "¡por favor, selecciona una posición!", + "default-sign-alert": "¿En definitiva quieres firmar automáticamente en todos los lugares solicitados?", + "Your-Signature": "Tu firma", + "auto-sign-all": "Firmar todo automáticamente", + "generating-certificate": "Generando certificado", + "pdf-download": "Descargar PDF", + "generate-certificate-alert": " Tu certificado de finalización se está generando. Por favor, espera un momento. Si la descarga no inicia pronto, presiona el botón otra vez.", + "folder-already-exist": "¡La carpeta ya existe!", + "folder-created-successfully": "¡Carpeta creada exitosamente!", + "fill-folder-name": "Por favor, rellena el nombre de la carpeta", + "already-exists-this-username": "¡Un usuario con este nombre de usuario ya existe!", + "verification-code-sent": "¡El correo de verificación ha sido enviado a tu correo!", + "registered-user-successfully": "Usuario registrado exitosamente.", + "role-not-found": "Rol no encontrado.", + "do-not-access": "No tienes acceso, por favor, contacta al administrador.", + "add-admin": "Agregar administrador", + "opensign-setup": "Instalación de OpenSign", + "join-discord": "Únete a nuestro servidor de Discord", + "admin-already-exist": "El administrador ya existe.", + "password-update-alert-1": "Contraseña actualizada exitosamente.", + "password-update-alert-2": "Tu contraseña actual es incorrecta o falta.", + "password-update-alert-3": "Tu contraseña actual es incorrecta o falta.", + "password-update-alert-4": "Tu contraseña y su confirmación no son iguales.", + "current-password": "Contraseña actual", + "new-password": "Contraseña nueva", + "confirm-password": "Confirmar contraseña", + "file-alert-1": "El tamaño del archivo seleccionado es muy grande. Por favor, selecciona un archivo con un tamaño menor a", + "file-alert-2": "Por favor, selecciona un archivo.", + "file-alert-3": "Por favor, espera mientras se sube el documento.", + "enter-pdf-password": "Ingresa la contraseña del PDF", + "correct-password": "Por favor, proporciona la contraseña correcta", + "decrypting-pdf": " Desencriptando PDF, por favor, espera...", + "invalid-otp": "OTP inválido", + "user-not-found": "¡Usuario no encontrado!", + "enter-otp-alert": "¡Por favor, ingresa el OTP!", + "get-verification-code": "Obtener código de verificación", + "get-verification-code-2": "Obtendrás un código de verificación por correo", + "enter-verification-code": "Ingresar código de verificación", + "provide-your-details": "Proporciona tus detalles", + "provide-email": "Por favor, proporciona un correo.", + "additional-info": "Información adicional", + "signature-saved-alert": "Firma guardada exitosamente.", + "fill-field": "Por favor, rellena este campo", + "error-template": "Error: ¡Plantilla no encontrada!", + "error": "Error", + "invalid-document": "Error: ¡Documento inválido!", + "document-not-found": "¡Documento no encontrado!", + "document-signed-alert-1": "Has firmado el documento exitosamente. Puedes descargar o imprimir una copia del documento parcialmente firmado. Una copia del documento firmado digitalmente será enviada al propietario mediante correo electrónico una vez haya sido firmado por todos los firmantes.", + "encrypted-pdf-not-support": "Los archivos PDF encriptados no están soportados actualmente.", + "document-signed-alert-4": " ¡Felicitaciones! 🎉 ¡Este documento ha sido firmado exitosamente por todos los participantes!", + "document-signed-alert-5": "Este documento ha sido firmado por todos los firmantes.", + "document-signed-alert-6": "Este documento ha sido rechazado por uno o más destinatarios.", + "document-signed-alert-7": "Este documento ya no está disponible.", + "document-signed-alert-8": "Este documento ya ha sido enviado para ser firmado.", + "yet-to-sign": "Todavía por firmar", + "validation-alert-1": "Los datos ingresados no cumplen con los criterios establecidos por la expresión regular.", + "account-already-exists": "¡La cuenta ya existe!", + "choose-password": "Elegir contraseña", + "enter-password": "Ingresar contraseña", + "sure": "claro", + "subscribed-alert": "¡Ya te has suscrito al plan!", + "monthly": "Mensual", + "yearly-upto": "Anual (hasta 66% de descuento)", + "billed-yearly": "Facturado anualmente", + "billed-monthly": "Facturado mensualmente", + "plansubscription-1": "Alójalo por tu cuenta gratuitamente", + "visit-github": "Visitar GitHub", + "user-already-exist-name": "¡Un usuario con este nombre de usuario ya existe!", + "do-not-access-contact-admin": "No tienes acceso, por favor, contacta a un administrador.", + "filed-required-correctly": "Por favor, rellena correctamente los detalles requeridos.", + "admin-created": "Administrador creado", + "invalid-masterkey": "Llave maestra inválida", + "opensign-Setup": "Instalación de OpenSign", + "master-key": " Llave maestra", + "profile-update-alert": "Perfil actualizado exitosamente.", + "date": "Fecha", + "report-not-found": "Reporte no encontrado", + "please-wait": "por favor, espera", + "select-foler": "Seleccionar carpeta", + "generated-on": "Generado el", + "text-field": "Campo de texto", + "font-size": "Tamaño de la fuente", + "widget-status": { + "Required": "Requerido", + "Optional": "Opcional" + }, + "all-right": "Todos los derechos reservados", + "version": "versión", + "social-media": { + "github": "GitHub", + "linked-in": "LinkedIn", + "twitter": "Twitter", + "discord": "Discord" + }, + "tour-mssg": { + "home-layout-1": "¡Has iniciado sesión exitosamente! Echemos un vistazo.", + "home-layout-2": "Para subir documentos para firmar tú mismo o para solicitar la firma de otros, simplemente selecciona los botones correspondientes.", + "home-layout-3": "¡Ya puedes empezar a utilizar OpenSign! Si necesitas soporte siéntete libre de contactarnos.", + "generate-token": "Mejora ahora para generar un token API de producción.", + "opensign-drive-1": "Haz clic en los enlaces para navegar fácilmente por la estructura jerárquica de carpetas y ver los documentos de cada carpeta.", + "opensign-drive-2": "Haz clic en el botón «Agregar» para crear una nueva carpeta o documento.", + "opensign-drive-3": "Ordena tus documentos por «Fecha» o «Nombre» usando este menú.", + "opensign-drive-4": "Haz clic en este menú para mostrar los documentos en vista de lista.", + "opensign-drive-5": "La lista de documentos es mostrada de acuerdo a la opción de ordenamiento seleccionada. Los íconos situados junto a cada documento indican su estado actual.", + "opensign-drive-6": "Haz clic con el botón derecho en un documento para ver opciones como «Descargar», «Renombrar», «Mover» y «Eliminar». Haz clic en el documento para abrirlo.", + "opensign-drive-7": "Haz clic con el botón derecho en cualquier carpeta para ver las opciones. Elige «Renombrar» para cambiar el nombre de la carpeta o haz clic en ella para navegar por su contenido.", + "pdf-request-file-1": "Lista de firmantes que todavía tienen que firmar este documento.", + "pdf-request-file-2": "Haz clic en cualquiera de los marcadores de posición que aparecen en el documento para firmar. A continuación, verás opciones para dibujar tu firma, escribirla o subir una imagen .", + "pdf-request-file-3": "Haz clic en los botones «Atrás», «Rechazar» o «Finalizar» para navegar por el documento. Utiliza el menú de tres puntos para ver otras opciones, como el botón «Descargar».", + "pdf-request-file-4": "Lista de firmantes que ya han firmado el documento.", + "pdf-request-file-5": "Puedes hacer clic en «Firmar todo automáticamente» para firmar de manera automática en todos los lugares que deban ser firmados por ti. Asegúrate de revisar correctamente el documento antes de hacer clic en ese botón.", + "placeholder-sign-1": "Selecciona un destinatario de esta lista para agregar un marcador de posición dónde este destinatario tendrá que firmar. El marcador de posición aparecerá con el mismo color que el nombre del destinatario una vez lo sueltes en el documento.", + "placeholder-sign-2": "Hacer clic en el botón «Agregar destinatarios» te permitirá añadir más firmantes.", + "placeholder-sign-3": "Haz clic en este botón para agregar más destinatarios/firmantes al documento.", + "placeholder-sign-4": "Arrastra o haz clic en un capo para agregarlo al documento.", + "placeholder-sign-5": "El área de contenido del PDF ya muestra los marcadores de posición existentes en la plantilla. Para tu comodidad, estos marcadores de posición coincidirán con el color del nombre del destinatario, haciéndolos fácilmente identificables.", + "placeholder-sign-6": "Hacer clic en «Enviar» guardará el documento. En el siguiente paso podrás personalizar los correos que serán enviados a los destinatarios o copiar los enlaces para firmar y compartirlos con los destinatarios por tu cuenta.", + "report-1": "Haz clic en el botón «Agregar» para crear una nueva plantilla. Las plantillas son documentos reusables diseñados para generar rápidamente nuevos documentos con la misma estructura pero diferentes firmantes. Por ejemplo, una plantilla de RR.HH. para el proceso de incorporación podría tener roles predefinidos como «Director de RR.HH.» y «Nuevo empleado». Cada vez que utilices la plantilla, puedes asignar el rol de «Nuevo empleado» a los distintos miembros del personal que se incorporen, mientras que el rol de « Director de RR.HH.» permanece constante, lo que facilita un proceso de incorporación fluido para cada persona contratada.", + "redirect": "Haz clic en el botón «Usar» para crear un nuevo documento desde una plantilla existente.", + "bulksend": "Para crear y enviar rápidamente múltiples documentos usando una plantilla existente, haz clic en el botón «Envío rápido».", + "option": "Este menú revela más opciones como «Editar» y «Eliminar». Usa el botón «Editar» para agregar roles, modificar campos y actualizar tu plantilla. Los cambios aplicarán para todos los documentos futuros que sean creados usando esta plantilla pero no afectarán a los documentos ya existentes. Con el botón «Eliminar» puedes eliminar la plantilla.", + "signyour-self-1": "Para personalizar el documento antes de que sea firmado, selecciona y arrastra al documento los widgets que prefieras. Escoge el espacio perfecto para cada modificación para adaptar el documento a tus necesidades.", + "signyour-self-2": "Arrastra y suelta en cualquier lugar de esta área. Después podrás cambiar el tamaño y moverlo.", + "template-placeholder-1": "Hacer clic en el botón «Agregar rol» te permitirá agregar varios roles de firmantes. Puedes asociar usuarios a cada rol en los siguientes pasos.", + "template-placeholder-2": "Una vez que los roles hayan sido agregados, selecciona un rol de la lista para agregar un marcador de posición donde éste tendrá que firmar. El marcador de posición aparecerá con el mismo color que el nombre del rol una vez lo sueltes en el documento.", + "template-placeholder-3": "Arrastra o haz clic en un capo para agregarlo al documento.", + "template-placeholder-4": "Arrastra el marcador de posición para un rol a cualquier lugar del documento. Recuerda, aparecerá con el mismo color que el nombre del rol para poder referenciarlo fácilmente.", + "template-placeholder-5": "Hacer clic en «Siguiente» guardará la plantilla actual. Luego de guardar, se te consultará si deseas crear un nuevo documento usando esta plantilla.", + "webhook-1": "Mejora ahora para configurar un webhook", + "Need your Signature": "Hacer clic en esta tarjeta te llevará a la lista de documentos que esperan por tu revisión.", + "Out for signatures": "Hacer clic en esta tarjeta te llevará a la lista de documentos que esperan tu firma.", + "Recent signature requests": "Esta es una lista de documentos que esperan por tu firma.", + "Recently sent for signatures": "Esta es una lista de documentos que has enviado a otras partes para que sea firmado.", + "Drafts": "Estos son documentos que has empezado pero que todavía no finalizas para su envío.", + "public-template": "Este video muestra cómo puedes configurar tu perfil público personalizado, como «https://opensign.me/tu-nombre-de-usuario». También aprenderás cómo personalizar tu eslogan y cómo hacer tus plantillas disponibles para su firmado público." + }, + "enter-email-plaholder": "Agrega una dirección de correo y presiona «Enter»", + "success-email-alert": "¡Correo enviado exitosamente!", + "expired-doc-title": "Documento expirado", + "expired-on-mssg": "Este documento expiro el {{expiredDate}} y ya no está disponible para ser firmado.", + "signature-validate-alert": "Por favor, confirma que has seleccionado al menos {{minRequiredCount}} casillas.", + "signature-validate-alert-2": "Asegúrate de que este campo esté correctamente rellenado y que cumpla con todos los requisitos.", + "remaing-users": "Usuarios restantes", + "Role": "Rol", + "additional-users": "Por favor, compra el complemento Usuarios.", + "Quantity-of-users": "Cantidad de usuarios", + "Price": "Precio", + "Total-price-for-next-time": "Precio total para la próxima vez", + "Proceed": "Proceder", + "Select": "Seleccionar", + "Add-seats": "Agregar plazas", + "user-name-exist": "el nombre de usuario ya existe", + "format": "formato", + "select-date-format": "Selecciona un formato de fecha", + "quantity-of-credits": "Cantidad de créditos premium", + "remaining-credits": "Créditos premium disponibles:", + "remaining-credits-help": "Usa créditos premium para la API para la firma de documentos, envío en masa, o para incorporar la integración de OpenSign en tu página web. Te quedan {{allowedcredits}} créditos incluidos y {{addoncredits}} créditos comprados adicionalmente.", + "additional-credits": "Por favor, compra créditos premium", + "quota-err-quicksend": "Cuota alcanzada, no tienes créditos suficientes.", + "buy-credits": "Comprar créditos premium", + "rotate-right": "Rotar a la derecha", + "rotate-left": "Rotar a la izquierda", + "rotate-alert-mssg": "Todos los widgets de esta página se perderán. ¿En definitiva quieres proceder?", + "templateid": "ID de plantilla", + "bulk-send-subcription-alert": "Por favor, mejora al plan a Professional o Team para usar envío en masa.", + "generate-test-token": "Generar token de prueba", + "regenerate-test-token": "Regenerar token de prueba", + "help-test-token": "Este token puede ser usado para probar las API en el punto de acceso «https://sandbox.opensignlabs.com/api/v1», permitiéndote realizar firmas de documentos ilimitadas. Por favor, ten en cuenta que el API de pruebas firmará tus documentos con certificados autofirmados, que podrían no ser reconocidos por Adobe como válidos. Una vez hayas completado tus pruebas, puedes mejorar a uno de nuestros planes de pago para generar un token de producción.", + "help-api-token": "Este token puede ser usado para acceder a las API de producción en el punto de acceso «{{origin}}/api/v1». Solo puede ser generado con uno de nuestros planes de pago.", + "reason": "Razón", + "decline-by": "Rechazado/revocado por", + "document-declined": "Documento rechazado", + "public-template-mssg-1": "Para integrar OpenSign a tu proyecto React o Next.js, simplemente ejecuta los siguientes comandos:", + "public-template-mssg-2": "Asegúrate de tener «npm» o «yarn» configurado en tu proyecto. Si estás usando «yarn», puedes reemplazar «npm install» con «yarn add @opensign/react».", + "public-template-mssg-3": "¿Necesitas más detalles o ejemplos?", + "public-template-mssg-4": "Visita la", + "public-template-mssg-5": " «npm» para las últimas actualizaciones, documentación detallada e historial de versiones.", + "public-template-mssg-6": "Antes de que puedas usar este fragmento de código, debes convertir esta plantilla en pública.", + "copy-code": "COPIAR", + "copied-code": "COPIADO", + "Installation": "Instalación", + "Usage": "Uso", + "insufficient-credits": "Créditos de firma insuficientes", + "insufficient-credits-mssg": "El propietario de este documento actualmente carece de los créditos OpenSign necesarios para que puedas firmarlo. Por favor, contacta al propietario si necesitas más detalles.", + "angular-npm-mssg-1": "Para integrar OpenSign a tu proyecto Angular, simplemente ejecuta los siguientes comandos:", + "quota-mail-info-head": "Límite mensual de solicitudes de firma por correo", + "quota-mail-info": "Puedes enviar hasta 15 solicitudes de firma por correo cada mes. Mejora ahora para enviar solicitudes de firma sin límite.", + "quota-mail": "Has alcanzado tu límite de 15 solicitudes de firma por correo para este mes. Mejora ahora para continuar enviando correos.", + "quota-mail-tip": "Consejo: Todavía puedes solciitar la firma de <1>documentos ilimitados compartiendo manualmente los enlaces de solicitud de firma.", + "quota-mail-head": "Cuota alcanzada", + "unauthorized-modal": "No tienes permisos para realizar esta acción, por favor, contacta a {{adminEmail}}.", + "sent-this-month": "Enviados este mes", + "available-seats": "Plazas disponibles", + "buy-users": "Comprar más usuarios", + "isenable-otp": "Habilitar verificación con OTP", + "isenable-otp-help": { + "p1": "¿Te gustaría habilitar el proceso de verificación usando una contraseña de un solo uso (OTP)?", + "p2": "Seleccionar esta opción habilitará la verificación con OTP. Los usuarios recibirán un código de verificación por correo, la cual tendrán que ingresar para poder firmar el documento.", + "p3": "Seleccionar esta opción deshabilitará la verificación con OTP, lo cual permitirá a los usuarios firmar el documento directamente sin pasos adicionales.", + "p4": "Por favor, selecciona la opción que mejor se adapte a tus requisitos para la firma de documentos." + }, + "advanced-options": "Opciones avanzadas", + "hide-advanced-options": "Ocultar las opciones avanzadas", + "download-files": "Descargar archivos", + "download-pdf": "Descargar PDF", + "pdf-certificate": "Descargar PDF + Certificado", + "document-logs": "Registros de documentos", + "server-down": "No se pudo conectar al servidor de OpenSign. Si estás alojando OpenSign por tu cuenta, por favor, asegúrate de que todos los pasos de la documentación han sido seguidos correctamente. Si estás ejecutando OpenSign localmente, puedes estar accediendo a OpenSign por un número de puerto incorrecto.", + "admin-exists": "El administrador ya existe. Por favor, inicia sesión en la aplicación usando las credenciales de administrador para poder administrar los usuarios.", + "public-tour-message": "Por favor, convierte la plantilla en pública para copiar la URL pública" +} diff --git a/apps/OpenSign/src/components/pdf/SelectLanguage.js b/apps/OpenSign/src/components/pdf/SelectLanguage.js index 7e9ef57ef..0a87cf2e8 100644 --- a/apps/OpenSign/src/components/pdf/SelectLanguage.js +++ b/apps/OpenSign/src/components/pdf/SelectLanguage.js @@ -6,6 +6,7 @@ function SelectLanguage(props) { const { i18n } = useTranslation(); const languages = [ { value: "en", text: "English" }, + { value: "es", text: "Spanish" }, { value: "fr", text: "Français" } ]; const [lang, setLang] = useState(i18next.language || "en"); diff --git a/apps/OpenSign/src/i18n.js b/apps/OpenSign/src/i18n.js index 1773f49ff..bad8f1ed1 100644 --- a/apps/OpenSign/src/i18n.js +++ b/apps/OpenSign/src/i18n.js @@ -25,7 +25,7 @@ i18n interpolation: { escapeValue: false // Not needed for react as it escapes by default }, - whitelist: ["en", "fr"] // List of allowed languages + whitelist: ["en", "es", "fr"] // List of allowed languages }); export default i18n; diff --git a/apps/OpenSign/src/script/i18n.js b/apps/OpenSign/src/script/i18n.js index 4cf861cc6..c928352c0 100644 --- a/apps/OpenSign/src/script/i18n.js +++ b/apps/OpenSign/src/script/i18n.js @@ -2,6 +2,7 @@ import i18n from "i18next"; import { initReactI18next } from "react-i18next"; import LanguageDetector from "i18next-browser-languagedetector"; import en from "./locales/en/translation.json"; +import es from "./locales/es/translation.json"; import fr from "./locales/fr/translation.json"; i18n @@ -12,6 +13,9 @@ i18n en: { translation: en }, + es: { + translation: es + }, fr: { translation: fr } @@ -27,7 +31,7 @@ i18n interpolation: { escapeValue: false // React already does escaping }, - whitelist: ["en", "fr"] // List of allowed languages + whitelist: ["en", "es", "fr"] // List of allowed languages }); export default i18n; diff --git a/apps/OpenSign/src/script/locales/es/translation.json b/apps/OpenSign/src/script/locales/es/translation.json new file mode 100644 index 000000000..3a34ae1aa --- /dev/null +++ b/apps/OpenSign/src/script/locales/es/translation.json @@ -0,0 +1,676 @@ +{ + "header-news": "Nueva funcionalidad: ¡Los perfiles públicos ahora están disponibles! Crea y comparte plantillas públicas fácilmente", + "header-news-btn": "Configurar ahora", + "create-account": "Crear cuenta", + "login": "Iniciar sesión", + "language": "Idioma", + "name": "Nombre", + "phone": "Teléfono", + "phone-optional": "opcional", + "email": "Correo", + "company": "Compañía", + "job-title": "Título del puesto", + "profile": "Perfil", + "log-out": "Cerrar sesión", + "is-email-verified": "El correo está verificado", + "public-profile": "Perfil público", + "tagline": "Eslogan ", + "has-requested-you-to-sign": "ha solicitado que firmes", + "has-requested-you-to-review-and-sign": " ha solicitado que revises y firmes", + "input-required": "Por favor, rellena este campo.", + "sort-order": { + "Ascending": "Ascendente", + "Descending": "Descendente", + "Name": "Nombre", + "Date": "Fecha" + }, + "context-menu": { + "Download": "Descargar", + "Rename": "Renombrar", + "Move": "Mover", + "Delete": "Eliminar" + }, + "action": "Acción", + "add": "Agregar", + "add-new-folder": "Agregar nueva carpeta", + "disable-documentId": "Desactivar ID de documento", + "edit": "Editar", + "change-password": "Cambiar contraseña", + "save": "Guardar", + "cancel": "Cancelar", + "upgrade-now": "Mejorar ahora", + "upgrade-to": "Mejorar a", + "plan": "Plan", + "subscribe-card-teamplan": "¡Libera todo el poder de la colaboración! Crea organizaciones, equipos y jerarquías ilimitadas. Comparte plantillas sin problemas entre equipos y asigna funciones de usuario personalizadas. ¡Mejora tu flujo de trabajo hoy mismo!", + "subscribe-card-plan": "Desbloquea funciones premium desde solo {{premiumPrice}}/mes. Disfruta de un rendimiento mejorado y solo {{addonPrice}} por crédito adicional después de tus créditos premium incluidos.", + "user-name-limit-char": "Para tener un nombre de usuario menor a 8 caracteres por favor suscríbete", + "tour-content": "No mostrar esto otra vez", + "pro": "PRO", + "team": "EQUIPO", + "user": "Usuario", + "docs": "Documentación", + "session-expired": "Tu sesión ha expirado.", + "public-profile-help": "Esta es tu URL pública. Cópiala o compártela con el firmante, y podrás ver todas tus plantillas públicas.", + "tagline-help": "Este eslogan aparecerá en tu perfil público de OpenSign, por ejem. https://opensign.me/alex", + "welcome": "¡Bienvenido de nuevo!", + "Login-to-your-account": "Ingresa a tu cuenta", + "password": "Contraseña", + "forgot-password": "¿Olvidaste la contraseña?", + "loading": "Cargando...", + "of": "de", + "sign-SSO": "Ingresar con SSO", + "login-page": "Página de inicio de sesión", + "or": "O", + "signup-page": "Página de registro", + "password-length": "La contraseña debe tener 8 caracteres", + "password-case": "La contraseña debe incluir mayúsculas, minúsculas y números", + "password-special-char": " La contraseña debe incluir caracteres especiales", + "agreee": "Estoy de acuerdo con los", + "term": "Términos de Servicio", + "subscribe-to-opensign": "Suscribirse al boletín de OpenSign", + "register": "Registrarse", + "sidebar": { + "Dashboard": "Panel", + "Sign yourself": "Firmar", + "Request signatures": "Solicitar firmas", + "Templates": "Plantillas", + "Templates-Children": { + "Create template": "Crear plantilla", + "Manage templates": "Administrar plantillas" + }, + "OpenSign™ Drive": "OpenSign™ Drive", + "Reports": "Reportes", + "Reports-Children": { + "Need your sign": "Necesitan tu firma", + "In Progress": "En progreso", + "Completed": "Completado", + "Drafts": "Borradores", + "Declined": "Rechazados", + "Expired": "Expirados", + "Contactbook": "Agenda de contactos" + }, + "Settings": "Ajustes", + "Settings-Children": { + "My Signature": "Mi firma", + "API Token": "Token API", + "Webhook": "Webhook", + "Teams": "Equipos", + "Team-update-successfully": "Equipo actualizado correctamente.", + "Users": "Usuarios" + } + }, + "dashboard-card": { + "Need your Signature": "Necesitan tu firma", + "Out for signatures": "En espera de ser firmados" + }, + "report-name": { + "Draft Documents": "Documentos borradores", + "Need your sign": "Necesitan tu firma", + "In-progress documents": "Documentos en progreso", + "Completed Documents": "Documentos completados", + "Declined Documents": "Documentos rechazados", + "Expired Documents": "Documentos expirados", + "Recently sent for signatures": "Recientemente enviados para ser firmados", + "Recent signature requests": "Solicitudes de firma recientes", + "Drafts": "Borradores", + "Contactbook": "Agenda de contactos", + "Templates": "Plantillas", + "Teams": "Equipos", + "Users": "Usuarios" + }, + "btnLabel": { + "sign": "firmar", + "Sign": "FIRMAR", + "Resend": "Reenviar", + "Revoke": "Revocar", + "Delete": "Eliminar", + "Use": "Usar", + "Quick send": "Envío rápido", + "Edit": "Editar", + "Share with team": "Compartir con el equipo", + "Share": "Compartir", + "View": "Ver", + "option": "Opción", + "Embed": "Incrustar", + "Copy TemplateId": "Copiar ID de plantilla", + "Copy Public URL": "Copiar URL pública" + }, + "report-heading": { + "Sr.No": "Nº", + "Title": "Título", + "Email": "Correo", + "Phone": "Teléfono", + "File": "Archivo", + "Owner": "Propietario", + "Signers": "Firmantes", + "Note": "Nota", + "Folder": "Carpeta", + "Reason": "Razón", + "Parent Team": "Equipo padre", + "Active": "Activo", + "Role": "Rol", + "Team": "Equipo", + "Name": "Nombre", + "Status": "Estado", + "created-date": "Fecha de creación", + "Type": "Tipo", + "Logs": "Registros" + }, + "report-help": { + "Draft Documents": "Estos son documentos que has iniciado pero no has finalizado para su envío.", + "Need your sign": "Esta es una lista de documentos que esperan tu firma.", + "In-progress documents": "Esta es una lista de documentos que has enviado a otras partes para su firma.", + "Completed Documents": "Esta es una lista de documentos en los que todas las partes han firmado.", + "Declined Documents": "Esta es una lista de documentos que han sido rechazados por uno de los firmantes.", + "Expired Documents": "Esta es una lista de documentos que han alcanzado su fecha de caducidad.", + "Contactbook": "Esta es una lista de contactos/firmantes añadidos por ti. Aparecerán como sugerencias cuando intentes añadir firmantes a un nuevo documento.", + "Templates": "Esta es una lista de plantillas que están a tu disposición para crear documentos. Puedes hacer clic en el botón «usar» para crear un nuevo documento utilizando una plantilla, modifica el documento y añade firmantes en el siguiente paso." + }, + "form-name": { + "Sign Yourself": "Firmar", + "Request Signatures": "Solicitar firmas", + "New Template": "Nueva plantilla" + }, + "file-type": "pdf, png, jpg, jpeg", + "docx": "docx", + "file-selected": "archivo seleccionado", + "template-title": "Título de la plantilla", + "document-title": "Título del documento", + "description": "Descripción", + "time-to-complete": "Plazo de finalización (días)", + "send-in-order": "Enviar en orden", + "send-in-order-help": { + "p1": "Elige cómo quieres que se envíen las solicitudes de firma a los firmantes del documento:", + "p2": "Seleccionando esta opción se enviará inicialmente la solicitud de firma al primer firmante. Una vez que el primer firmante complete su parte, el siguiente firmante en la secuencia recibirá la solicitud. Este proceso continúa hasta que todos los firmantes hayan firmado el documento. Este método garantiza que el documento se firme en un orden específico.", + "p3": "Seleccionando esta opción se enviarán los enlaces para la firma a todos los firmantes simultáneamente. Cada firmante puede firmar el documento cuando le convenga, independientemente de si otros firmantes han completado sus firmas. Este método es más rápido, pero no impone ningún orden de firma entre los participantes.", + "p4": "Selecciona la opción que mejor se adapte a las necesidades de tu tramitación de documentos." + }, + "no": "No", + "auto-reminder": "Recordatorio automático", + "remind-once": " Recordar una vez cada (Días)", + "next": "Siguiente", + "select-folder": "Seleccionar carpeta", + "OpenSign-drive": "OpenSign™ Drive", + "drive-document-status": { + "Completed": "Completado", + "Declined": "Rechazado", + "Draft": "Borrador", + "Expired": "Expirado", + "In Progress": "En progreso" + }, + "select-folder-help": "Si no seleccionas una carpeta, tu documento firmado se guardará en la carpeta principal de OpenSign Drive.", + "no-data": "No se encontraron datos", + "save-here": "Guardar aquí", + "back": "Atrás", + "add-folder": "Añadir carpeta", + "create-folder": "Crear carpeta", + "parent-folder": "Carpeta superior", + "create": "Crear", + "signers": "Firmantes", + "signers-help": "Empieza a escribir el nombre de un contacto para ver los firmantes sugeridos entre tus contactos guardados o añade otros nuevos. Organiza el orden de firma añadiendo firmantes en la secuencia deseada. Utiliza el botón «+» para añadir nuevos firmantes y la «X» para quitar todos. Cada firmante recibirá una solicitud por correo electrónico para que firme el documento según el orden indicado.", + "add-signer": "Añadir firmante", + "contact-not-found": "Contacto no encontrado", + "add-yourself": "Añadirte a ti mismo", + "submit": "Enviar", + "reset": "Volver a empezar", + "my-signature": "Mi firma", + "signature": "Firma", + "upload-image": " Subir imagen", + "clear": "Limpiar", + "upload-signature/Image": "Por favor, sube la firma/imagen", + "initials": "Iniciales", + "API": "API", + "api-token": "Token API", + "regenerate-token": "Regenerar token activo", + "generate-token": "Generar token activo", + "view-docs": "Ver documentación", + "generate-token-alert": "¿En definitiva quieres regenerar el token? Esto expirará el token antiguo.", + "yes": "Sí", + "copied": "Copiado", + "something-went-wrong-mssg": "Algo salió mal, por favor, intenta de nuevo más tarde.", + "token-generated": "Token generado exitosamente.", + "webhook": "Webhook", + "update-webhook": "Actualizar webhook", + "add-webhook": "Agregar webhook", + "webhook-added": "Webhook agregado exitosamente.", + "team-disabled": "Equipo deshabilitado", + "Team enabled": "Equipo habilitado", + "are-you-sure": "¿En definitiva quieres ", + "disable": "deshabilitar", + "enable": "habilitar", + "this-team": " este equipo?", + "edit-team": "Editar equipo", + "name-of-team": "Nombre del equipo", + "prev": "Anterior", + "no-data-avaliable": "No hay datos disponibles", + "add-team": "Agregar equipo", + "page-not-found": "Página no encontrada", + "users-from-teams": "usuarios de equipos", + "user-status": "Estado del usuario", + "activate": "activar", + "deactivate": "desactivar", + "this-user": " este usuario", + "delete-user": "Eliminar usuario", + "delete": "eliminar", + "add-user": "Agregar usuario", + "password-generateed": "La contraseña solo será generada una vez; asegúrate de copiarla.", + "Team status": "Estado del equipo", + "user-deactivated": "Usuario desactivado.", + "user-activated": "Usuario activado.", + "public": "Público", + "download": "Descargar", + "view": "Ver", + "make-template-public": "Convertir la plantilla en pública", + "make-template-private": "Convertir la plantilla en privada", + "make-template-public-alert": "¿En definitiva quieres convertir esta plantilla en pública?", + "make-template-private-alert": "¿En definitiva quieres convertir esta plantilla en privada? Esto lo removerá de tu perfil público.", + "public-role": "Rol público", + "public-url": "URL pública", + "public-url-copy": "Aquí está tu URL pública: ", + "public-url-copy-mssg": "Cópiala o compártela con el firmante y podrás ver todas tus plantillas públicas.", + "add-public-url-alert": "Por favor, agrega tu URL pública y podrás crear plantillas públicas.", + "share-with-alert": "No puedes compartir una plantilla si alguno de los roles ya tiene contactos asignados. Elimina todas las asignaciones de contactos de los roles antes de compartir la plantilla.", + "share-with": "Compartir con", + "team-not-found": "Equipo no encontrado", + "roles": "Roles", + "delete-document": "Eliminar documento", + "delete-document-alert": "¿En definitiva quieres eliminar este documento?", + "quick-send": "Envío rápido", + "add-new": "Agregar nuevo", + "send": "Enviar", + "quick-send-alert-1": "Todos los roles de este documento están actualmente vinculados a contactos. Para enviar rápidamente copias de esta plantilla a varios firmantes, por favor, asegúrate de que al menos un rol no esté vinculado a ningún contacto.", + "quick-send-alert-2": "Por favor, asegúrate de que hay al menos un widget de firma añadido para cada destinatario.", + "quick-send-alert-3": "Por favor, añade al menos un rol a esta plantilla para poder hacer un «envío rápido» de copias a varios firmantes.", + "quick-send-alert-4": "El envío rápido ha alcanzado el límite.", + "copy-link": "Copiar enlace", + "copy": "Copiar", + "revoke-document": "Revocar documento", + "revoke-document-alert": "¿En definitiva quieres revocar este documento?", + "resend-mail": "Reenviar correo", + "resend-mail-help": "Puedes usar las siguientes variables que serán reemplazadas por sus valores reales:- {{document_title}}, {{sender_name}}, {{sender_mail}}, {{sender_phone}}, {{receiver_name}}, {{receiver_email}}, {{receiver_phone}}, {{expiry_date}}, {{company_name}}, {{signing_url}}.", + "subject": "Asunto", + "body": "Cuerpo", + "add-contact": "Agregar contacto", + "add-signer-alert": "¡El contacto ya existe!", + "record-delete-alert": "¡Entrada eliminada exitosamente!", + "record-revoke-alert": "¡Entrada revocada exitosamente!", + "mail-sent-alert": "Correo enviado exitosamente.", + "document-sent-alert": "¡Documento enviado exitosamente!", + "template-share-alert": "Plantilla compartida exitosamente.", + "template-public-alert-1": "Has convertido exitosamente la plantilla en pública.", + "template-public-alert-2": "Has convertido exitosamente la plantilla en privada.", + "template-public-alert-3": "Tienes que seleccionar un rol para los firmantes públicos.", + "template-public-alert-4": "Por favor, asegúrate de que has añadido al menos un widget de firma para cada firmante.", + "template-public-alert-5": "Dado que esta plantilla tiene «enviar en orden» habilitado, el rol público debe estar posicionado arriba al inicio.", + "template-public-alert-6": "Por favor, enlaza firmantes a todos los roles excepto al usuario de rol público.", + "template-public-alert-7": "Por favor, asigna al menos un rol público para convertir está plantilla en pública.", + "loader": " Esto podría llevar algún tiempo", + "pages": "Páginas", + "document-signed": "Documento firmado", + "close": "Cerrar", + "validation-alert": "Alerta de validación", + "validate-alert-mssg": " Los datos ingresados no cumplen con los criterios establecidos por la expresión regular.", + "otp-verification": "Verificación OTP", + "enter-otp": "Ingresar OTP", + "verify": "Verificar", + "verify-email-1": "Verificar correo", + "resend": "Reenviar", + "contact-details": "Detalles del contacto", + "verify-email": "¡Por favor, verifica tu correo!", + "send-otp": " Enviar OTP", + "otp-placeholder": "Ingresa el código de verificación enviado por correo", + "loading-doc": "Cargando documento...", + "widgets-name": { + "signature": "firma", + "stamp": "sello", + "initials": "iniciales", + "name": "nombre", + "job title": "título del puesto", + "company": "compañía", + "date": "fecha", + "text": "texto", + "text input": "entrada de texto", + "checkbox": "casilla", + "dropdown": "desplegable", + "radio button": "botón de radio", + "image": "imagen", + "email": "correo" + }, + "fields": "Campos", + "recipients": "Destinatarios", + "please-add": "Por favor, agrega un", + "signed-by": "Firmado por", + "more": "más", + "sent": "enviado", + "print": "Imprimir", + "certificate": "Certificado", + "decline": "Rechazar", + "finish": "Finalizar", + "mail": "Correo", + "sign-now": "Firmar ahora", + "successfully-signed": "¡Firmado exitosamente!", + "email-mssg": " Los destinatarios agregados aquí recibirán una copia del documento firmado.", + "email-error-1": " por favor, proporciona una dirección de correo correcta", + "email-error-2": "Solo puedes enviar hasta a 10 destinatarios a la vez.", + "Email-verified-alert-1": "El correo está verificado.", + "Email-verified-alert-2": "El correo ya ha sido verificado.", + "upload-stamp-image": "Subir imagen del sello", + "draw": "Dibujar", + "type": "Escribir", + "color-type": { + "red": "rojo", + "blue": "azul", + "black": "negro", + "yellow": "amarillo" + }, + "my-initials": "Mis iniciales", + "upload": "Subir", + "initial-teb": "Iniciales", + "signature-tab": "Firma", + "your-signature": "Tu firma", + "copy-title": "Copiar widget a", + "contact-delete-alert": "¿En definitiva quieres eliminar este contacto?", + "reset-password-alert-1": "El enlace para restablecer la contraseña ha sido enviado a tu correo electrónico", + "reset-password-alert-2": "Por favor, configura un adaptador de correo ", + "reset-password-alert-3": "Restablece tu contraseña", + "faild-animation": "Error al cargar la animación", + "apply": "Aplicar", + "copy-type": { + "All pages": "Todas las páginas", + "All pages but last": "Todas las páginas menos la última", + "All pages but first": "Todas las páginas menos la primera", + "Next to current widget": "Junto al widget actual" + }, + "options": "Opciones", + "minimun-check": "Chequeo mínimo", + "maximum-check": "Chequeo máximo", + "default-value": "Valor por defecto", + "select": "Seleccionar", + "read-only": "Es de solo lectura", + "hide-labels": "Esconder etiquetas", + "checkbox": "Casilla", + "alert": "Alerta", + "zoom-in": "Acercar", + "zoom-out": "Alejar", + "document-signed-alert": "¡Felicitaciones! 🎉 ¡Este documento ha sido firmado por ti exitosamente!", + "otp-sent-alert": "OTP enviado a tu correo", + "fields-required": "Campos requeridos", + "signature-widget-alert-1": "Por favor, asegúrate de que hay al menos un widget de firma agregado", + "signature-widget-alert-2": "Por favor, asegúrate de que todos los campos están correctamente rellenados y de que cumplen todos los requisitos.", + "encrypted-pdf-alert": "Actualmente los archivos PDF encriptados no están soportados.", + "encrypted-pdf-alert-1": "La contraseña del archivo PFX es inválida.", + "user-not-exist": "El usuario no existe", + "template-signature-field": "Por favor, agrega al menos un campo de firma para todos los roles.", + "template-role-alert": "Por favor, primero agrega roles", + "create-document": "Crear documento", + "template-created-alert": "¿Quieres crear un documento usando la plantilla que acabas de crear?", + "signers-alert": "alerta de firmantes", + "template-creation-alert-1": "¡Por favor, selecciona un firmante para agregar un marcador de posición!", + "ok": "OK", + "radio-group": "Grupo de radio", + "dropdown-options": "Opciones del desplegable", + "add-role": "Agregar rol", + "role-ex": " por ejem.: Cliente, RRHH, Director, Administrador, Estudiante, etc.", + "add/choose-signer": "Agregar/Elegir firmante", + "choose-from-contacts": "Elegir desde los contactos", + "select-signer": " Por favor, selecciona el firmante", + "edit-template": "Editar plantilla", + "widget-info": "Información del widget", + "validation": "Validación", + "invalid-default-value": "valor por defecto inválido", + "hint": "Pista", + "color": "color", + "role-help": { + "p1": "¿Qué son los roles de una plantilla?", + "p2": "Empieza por especificar cada uno de los roles necesarios para completar el documento. Piensa en las partes implicadas en el proceso de firma y cuáles son sus responsabilidades. Los roles más habituales son RRHH para los documentos internos, Cliente para los contratos o Proveedor para los convenios comerciales.", + "p3": "¿Por qué preasignar usuarios a algunos roles?", + "p4": "Para los roles que consistentemente involucran al mismo individuo (por ejem., la firma del Gerente en las ofertas de empleo), puedes preasignar un usuario a un rol dentro de una plantilla. Este paso es opcional pero recomendado para la eficiencia y consistencia entre documentos", + "p5": "¿Cuando especifico el usuario asignado a cada rol?", + "p6": "Cuando crees un documento usando tu plantilla, se te pedirá que asignes usuarios a cada rol definido. Si un rol ya tiene un usuario asignado, este será rellenado con anticipación, pero puedes modificarlo según lo necesites antes de enviar el documento." + }, + "add-recipients": "Agregar destinatarios", + "loading-mssg": "Esto podría llevar algún tiempo", + "send-mail": "Enviar correo", + "placeholder-alert-1": "Por favor, asegúrate de que hay al menos un widget de firma para cada destinatario.", + "placeholder-alert-2": "Por favor, confirma que hayas rellenado el campo de texto.", + "placeholder-alert-3": " ¿En definitiva quieres enviar este documento para ser firmado?", + "placeholder-alert-4": "¡Has enviado exitosamente correos a todos los destinatarios!", + "placeholder-alert-5": "¿Quieres firmar documentos ahora mismo?", + "placeholder-alert-6": "¡Por favor, configura el adaptador de correo para enviar correos!", + "placeholder-alert-7": "¡Por favor, selecciona un firmante para agregar un marcador de posición!", + "email-subject": "asunto del correo", + "email-body": "cuerpo del correo", + "email-placeholder": "agregar cuerpo del correo", + "reset-to-default": "Restablecer a por defecto", + "cutomize-email": "Personalizar correo", + "upgrade-to-customize-email": "Mejora para personalizar el correo", + "sign-url": "URL de firma", + "Mails Sent": "Correos enviados", + "document-alert": "Alerta de documento", + "owner-subscription-expired": "La suscripción del propietario ha expirado.", + "subscription-expired": "Suscripción expirada", + "alert-message": "Mensaje de alerta", + "document-decline": "Rechazar documento", + "decline-alert-1": "¿En definitiva quieres rechazar este documento?", + "decline-alert-2": "¡Has rechazado este documento!", + "decline-alert-3": "No puedes firmar este documento ya que ha sido rechazado/revocado.", + "sign here": "Firma aquí", + "guest-email-alert": "el código de verificación ha sido enviado a tu correo", + "get-otp-alert": "recibirás un código de verificación por correo", + "user-already-exist": "El usuario ya existe.", + "server-error": "¡Error interno del servidor!", + "fill-required-details!": "¡Por favor, rellena los detalles requeridos!", + "sign-up-form": "Formulario de registro", + "sign-up": "Registrarse", + "folder-already-exist!": "¡la carpeta ya existe!", + "please-select-position!": "¡por favor, selecciona una posición!", + "default-sign-alert": "¿En definitiva quieres firmar automáticamente en todos los lugares solicitados?", + "Your-Signature": "Tu firma", + "auto-sign-all": "Firmar todo automáticamente", + "generating-certificate": "Generando certificado", + "pdf-download": "Descargar PDF", + "generate-certificate-alert": " Tu certificado de finalización se está generando. Por favor, espera un momento. Si la descarga no inicia pronto, presiona el botón otra vez.", + "folder-already-exist": "¡La carpeta ya existe!", + "folder-created-successfully": "¡Carpeta creada exitosamente!", + "fill-folder-name": "Por favor, rellena el nombre de la carpeta", + "already-exists-this-username": "¡Un usuario con este nombre de usuario ya existe!", + "verification-code-sent": "¡El correo de verificación ha sido enviado a tu correo!", + "registered-user-successfully": "Usuario registrado exitosamente.", + "role-not-found": "Rol no encontrado.", + "do-not-access": "No tienes acceso, por favor, contacta al administrador.", + "add-admin": "Agregar administrador", + "opensign-setup": "Instalación de OpenSign", + "join-discord": "Únete a nuestro servidor de Discord", + "admin-already-exist": "El administrador ya existe.", + "password-update-alert-1": "Contraseña actualizada exitosamente.", + "password-update-alert-2": "Tu contraseña actual es incorrecta o falta.", + "password-update-alert-3": "Tu contraseña actual es incorrecta o falta.", + "password-update-alert-4": "Tu contraseña y su confirmación no son iguales.", + "current-password": "Contraseña actual", + "new-password": "Contraseña nueva", + "confirm-password": "Confirmar contraseña", + "file-alert-1": "El tamaño del archivo seleccionado es muy grande. Por favor, selecciona un archivo con un tamaño menor a", + "file-alert-2": "Por favor, selecciona un archivo.", + "file-alert-3": "Por favor, espera mientras se sube el documento.", + "enter-pdf-password": "Ingresa la contraseña del PDF", + "correct-password": "Por favor, proporciona la contraseña correcta", + "decrypting-pdf": " Desencriptando PDF, por favor, espera...", + "invalid-otp": "OTP inválido", + "user-not-found": "¡Usuario no encontrado!", + "enter-otp-alert": "¡Por favor, ingresa el OTP!", + "get-verification-code": "Obtener código de verificación", + "get-verification-code-2": "Obtendrás un código de verificación por correo", + "enter-verification-code": "Ingresar código de verificación", + "provide-your-details": "Proporciona tus detalles", + "provide-email": "Por favor, proporciona un correo.", + "additional-info": "Información adicional", + "signature-saved-alert": "Firma guardada exitosamente.", + "fill-field": "Por favor, rellena este campo", + "error-template": "Error: ¡Plantilla no encontrada!", + "error": "Error", + "invalid-document": "Error: ¡Documento inválido!", + "document-not-found": "¡Documento no encontrado!", + "document-signed-alert-1": "Has firmado el documento exitosamente. Puedes descargar o imprimir una copia del documento parcialmente firmado. Una copia del documento firmado digitalmente será enviada al propietario mediante correo electrónico una vez haya sido firmado por todos los firmantes.", + "encrypted-pdf-not-support": "Los archivos PDF encriptados no están soportados actualmente.", + "document-signed-alert-4": " ¡Felicitaciones! 🎉 ¡Este documento ha sido firmado exitosamente por todos los participantes!", + "document-signed-alert-5": "Este documento ha sido firmado por todos los firmantes.", + "document-signed-alert-6": "Este documento ha sido rechazado por uno o más destinatarios.", + "document-signed-alert-7": "Este documento ya no está disponible.", + "document-signed-alert-8": "Este documento ya ha sido enviado para ser firmado.", + "yet-to-sign": "Todavía por firmar", + "validation-alert-1": "Los datos ingresados no cumplen con los criterios establecidos por la expresión regular.", + "account-already-exists": "¡La cuenta ya existe!", + "choose-password": "Elegir contraseña", + "enter-password": "Ingresar contraseña", + "sure": "claro", + "subscribed-alert": "¡Ya te has suscrito al plan!", + "monthly": "Mensual", + "yearly-upto": "Anual (hasta 66% de descuento)", + "billed-yearly": "Facturado anualmente", + "billed-monthly": "Facturado mensualmente", + "plansubscription-1": "Alójalo por tu cuenta gratuitamente", + "visit-github": "Visitar GitHub", + "user-already-exist-name": "¡Un usuario con este nombre de usuario ya existe!", + "do-not-access-contact-admin": "No tienes acceso, por favor, contacta a un administrador.", + "filed-required-correctly": "Por favor, rellena correctamente los detalles requeridos.", + "admin-created": "Administrador creado", + "invalid-masterkey": "Llave maestra inválida", + "opensign-Setup": "Instalación de OpenSign", + "master-key": " Llave maestra", + "profile-update-alert": "Perfil actualizado exitosamente.", + "date": "Fecha", + "report-not-found": "Reporte no encontrado", + "please-wait": "por favor, espera", + "select-foler": "Seleccionar carpeta", + "generated-on": "Generado el", + "text-field": "Campo de texto", + "font-size": "Tamaño de la fuente", + "widget-status": { + "Required": "Requerido", + "Optional": "Opcional" + }, + "all-right": "Todos los derechos reservados", + "version": "versión", + "social-media": { + "github": "GitHub", + "linked-in": "LinkedIn", + "twitter": "Twitter", + "discord": "Discord" + }, + "tour-mssg": { + "home-layout-1": "¡Has iniciado sesión exitosamente! Echemos un vistazo.", + "home-layout-2": "Para subir documentos para firmar tú mismo o para solicitar la firma de otros, simplemente selecciona los botones correspondientes.", + "home-layout-3": "¡Ya puedes empezar a utilizar OpenSign! Si necesitas soporte siéntete libre de contactarnos.", + "generate-token": "Mejora ahora para generar un token API de producción.", + "opensign-drive-1": "Haz clic en los enlaces para navegar fácilmente por la estructura jerárquica de carpetas y ver los documentos de cada carpeta.", + "opensign-drive-2": "Haz clic en el botón «Agregar» para crear una nueva carpeta o documento.", + "opensign-drive-3": "Ordena tus documentos por «Fecha» o «Nombre» usando este menú.", + "opensign-drive-4": "Haz clic en este menú para mostrar los documentos en vista de lista.", + "opensign-drive-5": "La lista de documentos es mostrada de acuerdo a la opción de ordenamiento seleccionada. Los íconos situados junto a cada documento indican su estado actual.", + "opensign-drive-6": "Haz clic con el botón derecho en un documento para ver opciones como «Descargar», «Renombrar», «Mover» y «Eliminar». Haz clic en el documento para abrirlo.", + "opensign-drive-7": "Haz clic con el botón derecho en cualquier carpeta para ver las opciones. Elige «Renombrar» para cambiar el nombre de la carpeta o haz clic en ella para navegar por su contenido.", + "pdf-request-file-1": "Lista de firmantes que todavía tienen que firmar este documento.", + "pdf-request-file-2": "Haz clic en cualquiera de los marcadores de posición que aparecen en el documento para firmar. A continuación, verás opciones para dibujar tu firma, escribirla o subir una imagen .", + "pdf-request-file-3": "Haz clic en los botones «Atrás», «Rechazar» o «Finalizar» para navegar por el documento. Utiliza el menú de tres puntos para ver otras opciones, como el botón «Descargar».", + "pdf-request-file-4": "Lista de firmantes que ya han firmado el documento.", + "pdf-request-file-5": "Puedes hacer clic en «Firmar todo automáticamente» para firmar de manera automática en todos los lugares que deban ser firmados por ti. Asegúrate de revisar correctamente el documento antes de hacer clic en ese botón.", + "placeholder-sign-1": "Selecciona un destinatario de esta lista para agregar un marcador de posición dónde este destinatario tendrá que firmar. El marcador de posición aparecerá con el mismo color que el nombre del destinatario una vez lo sueltes en el documento.", + "placeholder-sign-2": "Hacer clic en el botón «Agregar destinatarios» te permitirá añadir más firmantes.", + "placeholder-sign-3": "Haz clic en este botón para agregar más destinatarios/firmantes al documento.", + "placeholder-sign-4": "Arrastra o haz clic en un capo para agregarlo al documento.", + "placeholder-sign-5": "El área de contenido del PDF ya muestra los marcadores de posición existentes en la plantilla. Para tu comodidad, estos marcadores de posición coincidirán con el color del nombre del destinatario, haciéndolos fácilmente identificables.", + "placeholder-sign-6": "Hacer clic en «Enviar» guardará el documento. En el siguiente paso podrás personalizar los correos que serán enviados a los destinatarios o copiar los enlaces para firmar y compartirlos con los destinatarios por tu cuenta.", + "report-1": "Haz clic en el botón «Agregar» para crear una nueva plantilla. Las plantillas son documentos reusables diseñados para generar rápidamente nuevos documentos con la misma estructura pero diferentes firmantes. Por ejemplo, una plantilla de RR.HH. para el proceso de incorporación podría tener roles predefinidos como «Director de RR.HH.» y «Nuevo empleado». Cada vez que utilices la plantilla, puedes asignar el rol de «Nuevo empleado» a los distintos miembros del personal que se incorporen, mientras que el rol de « Director de RR.HH.» permanece constante, lo que facilita un proceso de incorporación fluido para cada persona contratada.", + "redirect": "Haz clic en el botón «Usar» para crear un nuevo documento desde una plantilla existente.", + "bulksend": "Para crear y enviar rápidamente múltiples documentos usando una plantilla existente, haz clic en el botón «Envío rápido».", + "option": "Este menú revela más opciones como «Editar» y «Eliminar». Usa el botón «Editar» para agregar roles, modificar campos y actualizar tu plantilla. Los cambios aplicarán para todos los documentos futuros que sean creados usando esta plantilla pero no afectarán a los documentos ya existentes. Con el botón «Eliminar» puedes eliminar la plantilla.", + "signyour-self-1": "Para personalizar el documento antes de que sea firmado, selecciona y arrastra al documento los widgets que prefieras. Escoge el espacio perfecto para cada modificación para adaptar el documento a tus necesidades.", + "signyour-self-2": "Arrastra y suelta en cualquier lugar de esta área. Después podrás cambiar el tamaño y moverlo.", + "template-placeholder-1": "Hacer clic en el botón «Agregar rol» te permitirá agregar varios roles de firmantes. Puedes asociar usuarios a cada rol en los siguientes pasos.", + "template-placeholder-2": "Una vez que los roles hayan sido agregados, selecciona un rol de la lista para agregar un marcador de posición donde éste tendrá que firmar. El marcador de posición aparecerá con el mismo color que el nombre del rol una vez lo sueltes en el documento.", + "template-placeholder-3": "Arrastra o haz clic en un capo para agregarlo al documento.", + "template-placeholder-4": "Arrastra el marcador de posición para un rol a cualquier lugar del documento. Recuerda, aparecerá con el mismo color que el nombre del rol para poder referenciarlo fácilmente.", + "template-placeholder-5": "Hacer clic en «Siguiente» guardará la plantilla actual. Luego de guardar, se te consultará si deseas crear un nuevo documento usando esta plantilla.", + "webhook-1": "Mejora ahora para configurar un webhook", + "Need your Signature": "Hacer clic en esta tarjeta te llevará a la lista de documentos que esperan por tu revisión.", + "Out for signatures": "Hacer clic en esta tarjeta te llevará a la lista de documentos que esperan tu firma.", + "Recent signature requests": "Esta es una lista de documentos que esperan por tu firma.", + "Recently sent for signatures": "Esta es una lista de documentos que has enviado a otras partes para que sea firmado.", + "Drafts": "Estos son documentos que has empezado pero que todavía no finalizas para su envío.", + "public-template": "Este video muestra cómo puedes configurar tu perfil público personalizado, como «https://opensign.me/tu-nombre-de-usuario». También aprenderás cómo personalizar tu eslogan y cómo hacer tus plantillas disponibles para su firmado público." + }, + "enter-email-plaholder": "Agrega una dirección de correo y presiona «Enter»", + "success-email-alert": "¡Correo enviado exitosamente!", + "expired-doc-title": "Documento expirado", + "expired-on-mssg": "Este documento expiro el {{expiredDate}} y ya no está disponible para ser firmado.", + "signature-validate-alert": "Por favor, confirma que has seleccionado al menos {{minRequiredCount}} casillas.", + "signature-validate-alert-2": "Asegúrate de que este campo esté correctamente rellenado y que cumpla con todos los requisitos.", + "remaing-users": "Usuarios restantes", + "Role": "Rol", + "additional-users": "Por favor, compra el complemento Usuarios.", + "Quantity-of-users": "Cantidad de usuarios", + "Price": "Precio", + "Total-price-for-next-time": "Precio total para la próxima vez", + "Proceed": "Proceder", + "Select": "Seleccionar", + "Add-seats": "Agregar plazas", + "user-name-exist": "el nombre de usuario ya existe", + "format": "formato", + "select-date-format": "Selecciona un formato de fecha", + "quantity-of-credits": "Cantidad de créditos premium", + "remaining-credits": "Créditos premium disponibles:", + "remaining-credits-help": "Usa créditos premium para la API para la firma de documentos, envío en masa, o para incorporar la integración de OpenSign en tu página web. Te quedan {{allowedcredits}} créditos incluidos y {{addoncredits}} créditos comprados adicionalmente.", + "additional-credits": "Por favor, compra créditos premium", + "quota-err-quicksend": "Cuota alcanzada, no tienes créditos suficientes.", + "buy-credits": "Comprar créditos premium", + "rotate-right": "Rotar a la derecha", + "rotate-left": "Rotar a la izquierda", + "rotate-alert-mssg": "Todos los widgets de esta página se perderán. ¿En definitiva quieres proceder?", + "templateid": "ID de plantilla", + "bulk-send-subcription-alert": "Por favor, mejora al plan a Professional o Team para usar envío en masa.", + "generate-test-token": "Generar token de prueba", + "regenerate-test-token": "Regenerar token de prueba", + "help-test-token": "Este token puede ser usado para probar las API en el punto de acceso «https://sandbox.opensignlabs.com/api/v1», permitiéndote realizar firmas de documentos ilimitadas. Por favor, ten en cuenta que el API de pruebas firmará tus documentos con certificados autofirmados, que podrían no ser reconocidos por Adobe como válidos. Una vez hayas completado tus pruebas, puedes mejorar a uno de nuestros planes de pago para generar un token de producción.", + "help-api-token": "Este token puede ser usado para acceder a las API de producción en el punto de acceso «{{origin}}/api/v1». Solo puede ser generado con uno de nuestros planes de pago.", + "reason": "Razón", + "decline-by": "Rechazado/revocado por", + "document-declined": "Documento rechazado", + "public-template-mssg-1": "Para integrar OpenSign a tu proyecto React o Next.js, simplemente ejecuta los siguientes comandos:", + "public-template-mssg-2": "Asegúrate de tener «npm» o «yarn» configurado en tu proyecto. Si estás usando «yarn», puedes reemplazar «npm install» con «yarn add @opensign/react».", + "public-template-mssg-3": "¿Necesitas más detalles o ejemplos?", + "public-template-mssg-4": "Visita la", + "public-template-mssg-5": " «npm» para las últimas actualizaciones, documentación detallada e historial de versiones.", + "public-template-mssg-6": "Antes de que puedas usar este fragmento de código, debes convertir esta plantilla en pública.", + "copy-code": "COPIAR", + "copied-code": "COPIADO", + "Installation": "Instalación", + "Usage": "Uso", + "insufficient-credits": "Créditos de firma insuficientes", + "insufficient-credits-mssg": "El propietario de este documento actualmente carece de los créditos OpenSign necesarios para que puedas firmarlo. Por favor, contacta al propietario si necesitas más detalles.", + "angular-npm-mssg-1": "Para integrar OpenSign a tu proyecto Angular, simplemente ejecuta los siguientes comandos:", + "quota-mail-info-head": "Límite mensual de solicitudes de firma por correo", + "quota-mail-info": "Puedes enviar hasta 15 solicitudes de firma por correo cada mes. Mejora ahora para enviar solicitudes de firma sin límite.", + "quota-mail": "Has alcanzado tu límite de 15 solicitudes de firma por correo para este mes. Mejora ahora para continuar enviando correos.", + "quota-mail-tip": "Consejo: Todavía puedes solciitar la firma de <1>documentos ilimitados compartiendo manualmente los enlaces de solicitud de firma.", + "quota-mail-head": "Cuota alcanzada", + "unauthorized-modal": "No tienes permisos para realizar esta acción, por favor, contacta a {{adminEmail}}.", + "sent-this-month": "Enviados este mes", + "available-seats": "Plazas disponibles", + "buy-users": "Comprar más usuarios", + "isenable-otp": "Habilitar verificación con OTP", + "isenable-otp-help": { + "p1": "¿Te gustaría habilitar el proceso de verificación usando una contraseña de un solo uso (OTP)?", + "p2": "Seleccionar esta opción habilitará la verificación con OTP. Los usuarios recibirán un código de verificación por correo, la cual tendrán que ingresar para poder firmar el documento.", + "p3": "Seleccionar esta opción deshabilitará la verificación con OTP, lo cual permitirá a los usuarios firmar el documento directamente sin pasos adicionales.", + "p4": "Por favor, selecciona la opción que mejor se adapte a tus requisitos para la firma de documentos." + }, + "advanced-options": "Opciones avanzadas", + "hide-advanced-options": "Ocultar las opciones avanzadas", + "download-files": "Descargar archivos", + "download-pdf": "Descargar PDF", + "pdf-certificate": "Descargar PDF + Certificado", + "document-logs": "Registros de documentos", + "server-down": "No se pudo conectar al servidor de OpenSign. Si estás alojando OpenSign por tu cuenta, por favor, asegúrate de que todos los pasos de la documentación han sido seguidos correctamente. Si estás ejecutando OpenSign localmente, puedes estar accediendo a OpenSign por un número de puerto incorrecto.", + "admin-exists": "El administrador ya existe. Por favor, inicia sesión en la aplicación usando las credenciales de administrador para poder administrar los usuarios.", + "public-tour-message": "Por favor, convierte la plantilla en pública para copiar la URL pública" +} From eeae097a54bccc10a2e81ef5940923fff8a3eac1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81ngel=20Beretta?= Date: Tue, 1 Oct 2024 21:40:22 -0500 Subject: [PATCH 14/23] Update the changed strings from the original lang file --- apps/OpenSign/public/locales/es/translation.json | 4 ++-- apps/OpenSign/src/script/locales/es/translation.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/OpenSign/public/locales/es/translation.json b/apps/OpenSign/public/locales/es/translation.json index 3a34ae1aa..8deff54e0 100644 --- a/apps/OpenSign/public/locales/es/translation.json +++ b/apps/OpenSign/public/locales/es/translation.json @@ -265,10 +265,10 @@ "make-template-public-alert": "¿En definitiva quieres convertir esta plantilla en pública?", "make-template-private-alert": "¿En definitiva quieres convertir esta plantilla en privada? Esto lo removerá de tu perfil público.", "public-role": "Rol público", - "public-url": "URL pública", + "public-url": "Se requiere perfil público", "public-url-copy": "Aquí está tu URL pública: ", "public-url-copy-mssg": "Cópiala o compártela con el firmante y podrás ver todas tus plantillas públicas.", - "add-public-url-alert": "Por favor, agrega tu URL pública y podrás crear plantillas públicas.", + "add-public-url-alert": "Por favor, completa la configuración de tu perfil público OpenSign. Una vez terminado, podrás crear plantillas públicas. Este proceso solo necesita ser completado una vez.", "share-with-alert": "No puedes compartir una plantilla si alguno de los roles ya tiene contactos asignados. Elimina todas las asignaciones de contactos de los roles antes de compartir la plantilla.", "share-with": "Compartir con", "team-not-found": "Equipo no encontrado", diff --git a/apps/OpenSign/src/script/locales/es/translation.json b/apps/OpenSign/src/script/locales/es/translation.json index 3a34ae1aa..8deff54e0 100644 --- a/apps/OpenSign/src/script/locales/es/translation.json +++ b/apps/OpenSign/src/script/locales/es/translation.json @@ -265,10 +265,10 @@ "make-template-public-alert": "¿En definitiva quieres convertir esta plantilla en pública?", "make-template-private-alert": "¿En definitiva quieres convertir esta plantilla en privada? Esto lo removerá de tu perfil público.", "public-role": "Rol público", - "public-url": "URL pública", + "public-url": "Se requiere perfil público", "public-url-copy": "Aquí está tu URL pública: ", "public-url-copy-mssg": "Cópiala o compártela con el firmante y podrás ver todas tus plantillas públicas.", - "add-public-url-alert": "Por favor, agrega tu URL pública y podrás crear plantillas públicas.", + "add-public-url-alert": "Por favor, completa la configuración de tu perfil público OpenSign. Una vez terminado, podrás crear plantillas públicas. Este proceso solo necesita ser completado una vez.", "share-with-alert": "No puedes compartir una plantilla si alguno de los roles ya tiene contactos asignados. Elimina todas las asignaciones de contactos de los roles antes de compartir la plantilla.", "share-with": "Compartir con", "team-not-found": "Equipo no encontrado", From 30297584d5bdb9285928641ef761f67763d3f15d Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 07:45:29 +0000 Subject: [PATCH 15/23] docs: update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c59a19135..c66c4f0ee 100644 --- a/README.md +++ b/README.md @@ -147,7 +147,8 @@ We would like to thank all our contributors and users for their support and feed Vikram
Vikram

💻 ugoconsonni
ugoconsonni

💻 Daniel Mutwiri
Daniel Mutwiri

💻 - Zathiel
Zathiel

💻🛡️ + Zathiel
Zathiel

💻 + 1024mb
1024mb

🌍 From d975dae88fcdbf3fd992c42da7a97c838b460360 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 07:45:30 +0000 Subject: [PATCH 16/23] docs: update .all-contributorsrc --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 1a28fb5e9..e80ea83fd 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -232,6 +232,15 @@ "contributions": [ "code" ] + }, + { + "login": "1024mb", + "name": "1024mb", + "avatar_url": "https://avatars.githubusercontent.com/u/9301204?v=4", + "profile": "https://github.com/1024mb", + "contributions": [ + "translation" + ] } ] } From 4c0d15d6ef9a39cfb88619855e89c76888cdc9d1 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Thu, 3 Oct 2024 13:40:37 +0530 Subject: [PATCH 17/23] feat: update spanish translation --- apps/OpenSign/public/locales/es/translation.json | 5 +++-- apps/OpenSign/src/components/pdf/SelectLanguage.js | 2 +- apps/OpenSign/src/script/locales/es/translation.json | 5 +++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/OpenSign/public/locales/es/translation.json b/apps/OpenSign/public/locales/es/translation.json index 8deff54e0..02365d194 100644 --- a/apps/OpenSign/public/locales/es/translation.json +++ b/apps/OpenSign/public/locales/es/translation.json @@ -71,7 +71,7 @@ "register": "Registrarse", "sidebar": { "Dashboard": "Panel", - "Sign yourself": "Firmar", + "Sign yourself": "Firma tu mismo", "Request signatures": "Solicitar firmas", "Templates": "Plantillas", "Templates-Children": { @@ -672,5 +672,6 @@ "document-logs": "Registros de documentos", "server-down": "No se pudo conectar al servidor de OpenSign. Si estás alojando OpenSign por tu cuenta, por favor, asegúrate de que todos los pasos de la documentación han sido seguidos correctamente. Si estás ejecutando OpenSign localmente, puedes estar accediendo a OpenSign por un número de puerto incorrecto.", "admin-exists": "El administrador ya existe. Por favor, inicia sesión en la aplicación usando las credenciales de administrador para poder administrar los usuarios.", - "public-tour-message": "Por favor, convierte la plantilla en pública para copiar la URL pública" + "public-tour-message": "Por favor, convierte la plantilla en pública para copiar la URL pública", + "add-user-template": "Es necesario agregar un rol antes de poder agregarle campos." } diff --git a/apps/OpenSign/src/components/pdf/SelectLanguage.js b/apps/OpenSign/src/components/pdf/SelectLanguage.js index 0a87cf2e8..ff9846e66 100644 --- a/apps/OpenSign/src/components/pdf/SelectLanguage.js +++ b/apps/OpenSign/src/components/pdf/SelectLanguage.js @@ -6,7 +6,7 @@ function SelectLanguage(props) { const { i18n } = useTranslation(); const languages = [ { value: "en", text: "English" }, - { value: "es", text: "Spanish" }, + { value: "es", text: "Española" }, { value: "fr", text: "Français" } ]; const [lang, setLang] = useState(i18next.language || "en"); diff --git a/apps/OpenSign/src/script/locales/es/translation.json b/apps/OpenSign/src/script/locales/es/translation.json index 8deff54e0..02365d194 100644 --- a/apps/OpenSign/src/script/locales/es/translation.json +++ b/apps/OpenSign/src/script/locales/es/translation.json @@ -71,7 +71,7 @@ "register": "Registrarse", "sidebar": { "Dashboard": "Panel", - "Sign yourself": "Firmar", + "Sign yourself": "Firma tu mismo", "Request signatures": "Solicitar firmas", "Templates": "Plantillas", "Templates-Children": { @@ -672,5 +672,6 @@ "document-logs": "Registros de documentos", "server-down": "No se pudo conectar al servidor de OpenSign. Si estás alojando OpenSign por tu cuenta, por favor, asegúrate de que todos los pasos de la documentación han sido seguidos correctamente. Si estás ejecutando OpenSign localmente, puedes estar accediendo a OpenSign por un número de puerto incorrecto.", "admin-exists": "El administrador ya existe. Por favor, inicia sesión en la aplicación usando las credenciales de administrador para poder administrar los usuarios.", - "public-tour-message": "Por favor, convierte la plantilla en pública para copiar la URL pública" + "public-tour-message": "Por favor, convierte la plantilla en pública para copiar la URL pública", + "add-user-template": "Es necesario agregar un rol antes de poder agregarle campos." } From a5f8e4fc5896501364e2fbd7e805d6550e126e97 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Thu, 3 Oct 2024 16:52:15 +0530 Subject: [PATCH 18/23] fix: updated documents order issue in opensign drive --- apps/OpenSignServer/cloud/parsefunction/getDrive.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/OpenSignServer/cloud/parsefunction/getDrive.js b/apps/OpenSignServer/cloud/parsefunction/getDrive.js index 79bb5036d..35306008e 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getDrive.js +++ b/apps/OpenSignServer/cloud/parsefunction/getDrive.js @@ -18,9 +18,9 @@ export default async function getDrive(request) { if (userId) { let url; if (docId) { - url = `${classUrl}?where={"Folder":{"__type":"Pointer","className":"contracts_Document","objectId":"${docId}"},"CreatedBy":{"__type":"Pointer","className":"_User","objectId":"${userId}"},"IsArchive":{"$ne":true}}&include=ExtUserPtr,Signers,Folder&skip=${skip}&limit=${limit}`; + url = `${classUrl}?where={"Folder":{"__type":"Pointer","className":"contracts_Document","objectId":"${docId}"},"CreatedBy":{"__type":"Pointer","className":"_User","objectId":"${userId}"},"IsArchive":{"$ne":true}}&include=ExtUserPtr,Signers,Folder&order=-updatedAt&skip=${skip}&limit=${limit}`; } else { - url = `${classUrl}?where={"Folder":{"$exists":false},"CreatedBy":{"__type":"Pointer","className":"_User","objectId":"${userId}"},"IsArchive":{"$ne":true}}&include=ExtUserPtr,Signers&skip=${skip}&limit=${limit}`; + url = `${classUrl}?where={"Folder":{"$exists":false},"CreatedBy":{"__type":"Pointer","className":"_User","objectId":"${userId}"},"IsArchive":{"$ne":true}}&include=ExtUserPtr,Signers&order=-updatedAt&skip=${skip}&limit=${limit}`; } try { const res = await axios.get(url, { From cf9a4d8a26e3cc94e1310c756510b36c1eaab38e Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Thu, 3 Oct 2024 18:34:30 +0530 Subject: [PATCH 19/23] fix: issue of optional widgets disappear after signing --- apps/OpenSign/src/constant/Utils.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/apps/OpenSign/src/constant/Utils.js b/apps/OpenSign/src/constant/Utils.js index 7743a5739..fa77ead21 100644 --- a/apps/OpenSign/src/constant/Utils.js +++ b/apps/OpenSign/src/constant/Utils.js @@ -1334,8 +1334,17 @@ export const multiSignEmbed = async ( if (signyourself) { updateItem = item.pos; } else { + // Checking required and optional widget types + // For both required and optional widgets, handle signurl, defaultValue, and response as the widget's data + // If the widget type is checkbox or radio (whether required or optional), we don't need to validate its value. + // Instead, add an empty checkbox/radio, or if a value exists, mark the checkbox/radio as checked. updateItem = item.pos.filter( - (data) => data?.options?.status === "required" + (data) => + data?.options?.SignUrl || + data?.options?.defaultValue || + data?.options?.response || + data?.type === "checkbox" || + data?.type === radioButtonWidget ); } } else { @@ -1355,7 +1364,6 @@ export const multiSignEmbed = async ( } }) ); - widgetsPositionArr.forEach(async (position, id) => { let img; if (["signature", "stamp", "initials", "image"].includes(position.type)) { @@ -1406,7 +1414,7 @@ export const multiSignEmbed = async ( }; const color = position?.options?.fontColor; const updateColorInRgb = getWidgetsFontColor(color); - const fontSize = parseInt(position?.options?.fontSize || 13); + const fontSize = parseInt(position?.options?.fontSize || 12); const widgetTypeExist = [ textWidget, textInputWidget, From 08b83469e31e1b3b576c5762ed28b7010da5792f Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Thu, 3 Oct 2024 20:36:34 +0530 Subject: [PATCH 20/23] fix: text box widgets font size issue --- apps/OpenSign/src/components/pdf/PlaceholderType.js | 2 +- apps/OpenSign/src/constant/Utils.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/OpenSign/src/components/pdf/PlaceholderType.js b/apps/OpenSign/src/components/pdf/PlaceholderType.js index d0113124f..6fe096844 100644 --- a/apps/OpenSign/src/components/pdf/PlaceholderType.js +++ b/apps/OpenSign/src/components/pdf/PlaceholderType.js @@ -31,7 +31,7 @@ function PlaceholderType(props) { const years = range(1990, getYear(new Date()) + 16, 1); const height = props.posHeight(props.pos, props.isSignYourself); const fontSize = - (props.pos.options?.fontSize || (height > 14 ? 12 : height / 2)) + "px"; + (props.pos.options?.fontSize || (height ? height - 4 : 12)) + "px"; const fontColor = props.pos.options?.fontColor || "black"; const months = [ "January", diff --git a/apps/OpenSign/src/constant/Utils.js b/apps/OpenSign/src/constant/Utils.js index 375c8d971..f3355609b 100644 --- a/apps/OpenSign/src/constant/Utils.js +++ b/apps/OpenSign/src/constant/Utils.js @@ -1290,7 +1290,7 @@ const calculateFontSize = ( widgetHeight ) => { const font = - position?.options?.fontSize || widgetHeight > 14 ? 12 : widgetHeight / 2; + position?.options?.fontSize || (widgetHeight ? widgetHeight / 2 : 12); if (!signyourself && position?.isMobile && position?.scale) { return font / position?.scale / containerScale; } else { @@ -1487,7 +1487,7 @@ export const multiSignEmbed = async ( position, containerScale, signyourself, - widgetHeight + position.Height ); parseInt(fontSize); let textContent; @@ -1662,7 +1662,7 @@ export const multiSignEmbed = async ( }); } const pdfBytes = await pdfDoc.saveAsBase64({ useObjectStreams: false }); - // console.log("pdf", pdfBytes); + //console.log("pdf", pdfBytes); return pdfBytes; }; From 572cb55bf8a640888e80b7a618ffadf984573bd7 Mon Sep 17 00:00:00 2001 From: Andrew <148278535+andrew-opensignlabs@users.noreply.github.com> Date: Thu, 3 Oct 2024 21:33:25 +0530 Subject: [PATCH 21/23] Update node version --- apps/OpenSign/package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/OpenSign/package.json b/apps/OpenSign/package.json index 8ff0fb0c2..cc5375f32 100644 --- a/apps/OpenSign/package.json +++ b/apps/OpenSign/package.json @@ -123,5 +123,8 @@ "overrides": { "nth-check": "$nth-check", "ws": "$ws" + }, + "engines": { + "node": "18 || 20 || 22" } } From 00fcd17285273e3d151f8c4a3726d1c5df8542ce Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Fri, 4 Oct 2024 12:59:10 +0530 Subject: [PATCH 22/23] feat: enable custom file storage for document siging --- apps/OpenSign/package-lock.json | 1111 +++++++------- apps/OpenSign/package.json | 16 +- .../src/components/pdf/EmailComponent.js | 11 +- .../shared/fields/SuggestionInput.js | 4 +- apps/OpenSign/src/constant/Utils.js | 28 +- apps/OpenSign/src/pages/Form.js | 395 +++-- apps/OpenSign/src/pages/PlaceHolderSign.js | 2 +- apps/OpenSign/src/pages/SignyourselfPdf.js | 2 +- .../OpenSign/src/primitives/DownloadPdfZip.js | 12 +- .../src/primitives/GetReportDisplay.js | 11 +- apps/OpenSignServer/cloud/main.js | 6 + .../cloud/parsefunction/DocumentAfterFind.js | 15 +- .../cloud/parsefunction/GetTemplate.js | 13 +- .../cloud/parsefunction/TemplateAfterFind.js | 15 +- .../cloud/parsefunction/addFileAdapter.js | 56 + .../cloud/parsefunction/getDocument.js | 7 +- .../cloud/parsefunction/getFileAdapter.js | 35 + .../cloud/parsefunction/getSignedUrl.js | 71 +- .../cloud/parsefunction/getUserDetails.js | 1 + .../cloud/parsefunction/pdf/PDF.js | 74 +- .../cloud/parsefunction/reportsJson.js | 10 + .../cloud/parsefunction/saveToFileAdapter.js | 56 + .../cloud/parsefunction/uploadFiletoS3.js | 38 + .../20241004104551-isfileadapter_doccls.cjs | 21 + apps/OpenSignServer/package-lock.json | 1286 ++++++++--------- apps/OpenSignServer/package.json | 11 +- 26 files changed, 1856 insertions(+), 1451 deletions(-) create mode 100644 apps/OpenSignServer/cloud/parsefunction/addFileAdapter.js create mode 100644 apps/OpenSignServer/cloud/parsefunction/getFileAdapter.js create mode 100644 apps/OpenSignServer/cloud/parsefunction/saveToFileAdapter.js create mode 100644 apps/OpenSignServer/cloud/parsefunction/uploadFiletoS3.js create mode 100644 apps/OpenSignServer/databases/migrations/20241004104551-isfileadapter_doccls.cjs diff --git a/apps/OpenSign/package-lock.json b/apps/OpenSign/package-lock.json index cb47fb8ad..ce3561b6b 100644 --- a/apps/OpenSign/package-lock.json +++ b/apps/OpenSign/package-lock.json @@ -11,14 +11,14 @@ "@formkit/auto-animate": "^0.8.2", "@lottiefiles/dotlottie-react": "^0.9.0", "@pdf-lib/fontkit": "^1.1.1", - "@radix-ui/themes": "^3.1.3", + "@radix-ui/themes": "^3.1.4", "@react-pdf/renderer": "^4.0.0", "@reduxjs/toolkit": "^2.2.7", "axios": "^1.7.7", "file-saver": "^2.0.5", "i18next": "^23.15.1", "i18next-browser-languagedetector": "^8.0.0", - "i18next-http-backend": "^2.6.1", + "i18next-http-backend": "^2.6.2", "jszip": "^3.10.1", "jwt-decode": "^4.0.0", "moment": "^2.30.1", @@ -63,22 +63,22 @@ "ws": "^8.18.0" }, "devDependencies": { - "@babel/core": "^7.25.2", - "@babel/preset-env": "^7.25.4", - "@babel/preset-react": "^7.24.7", - "@babel/runtime-corejs2": "^7.25.6", + "@babel/core": "^7.25.7", + "@babel/preset-env": "^7.25.7", + "@babel/preset-react": "^7.25.7", + "@babel/runtime-corejs2": "^7.25.7", "autoprefixer": "^10.4.20", "babel-loader": "^9.2.1", "clean-webpack-plugin": "^4.0.0", "commitizen": "^4.3.1", "concurrently": "^9.0.1", "css-loader": "^7.1.2", - "daisyui": "^4.12.10", + "daisyui": "^4.12.11", "dotenv": "^16.4.5", "dotenv-webpack": "^8.1.0", "eslint": "^9.11.1", "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react": "^7.37.1", "lint-staged": "^15.2.10", "mini-css-extract-plugin": "^2.9.1", "postcss": "^8.4.47", @@ -87,6 +87,9 @@ "tailwindcss": "^3.4.13", "terser-webpack-plugin": "^5.3.10", "webpack-cli": "^5.1.4" + }, + "engines": { + "node": "18 || 20 || 22" } }, "node_modules/@alloc/quick-lru": { @@ -129,11 +132,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/highlight": "^7.25.7", "picocolors": "^1.0.0" }, "engines": { @@ -141,28 +144,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.7.tgz", + "integrity": "sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz", + "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helpers": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -203,50 +206,50 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", + "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", "dependencies": { - "@babel/types": "^7.25.6", + "@babel/types": "^7.25.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", + "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz", + "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", + "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -255,16 +258,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", - "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz", + "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.4", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/traverse": "^7.25.7", "semver": "^6.3.1" }, "engines": { @@ -275,12 +278,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz", + "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.25.7", + "regexpu-core": "^6.1.1", "semver": "^6.3.1" }, "engines": { @@ -306,38 +309,38 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz", + "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==", "dependencies": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", + "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", + "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -347,32 +350,32 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz", + "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", + "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz", + "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-wrap-function": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -382,13 +385,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", + "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -398,84 +401,84 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", + "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz", + "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", + "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz", + "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==", "dependencies": { - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", - "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", + "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6" + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -485,11 +488,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", + "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.25.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -499,12 +502,12 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", - "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz", + "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.3" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -514,11 +517,11 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", - "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz", + "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -528,11 +531,11 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", - "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz", + "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -542,13 +545,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz", + "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -558,12 +561,12 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", - "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz", + "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -778,11 +781,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz", - "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz", + "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -792,11 +795,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", - "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz", + "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -828,11 +831,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz", + "integrity": "sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -965,11 +968,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz", + "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -979,14 +982,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", - "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.7.tgz", + "integrity": "sha512-4B6OhTrwYKHYYgcwErvZjbmH9X5TxQBsaBHdzEIB4l71gR5jh/tuHGlb9in47udL2+wVUcOz5XXhhfhVJwEpEg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7", "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.4" + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -996,13 +999,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz", + "integrity": "sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1012,11 +1015,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz", + "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1026,11 +1029,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz", + "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1040,12 +1043,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", - "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz", + "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1055,12 +1058,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.7.tgz", + "integrity": "sha512-rvUUtoVlkDWtDWxGAiiQj0aNktTPn3eFynBcMC2IhsXweehwgdI9ODe+XjWw515kEmv22sSOTp/rxIRuTiB7zg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1071,15 +1074,15 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", - "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz", + "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.4", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/traverse": "^7.25.7", "globals": "^11.1.0" }, "engines": { @@ -1090,12 +1093,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz", + "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/template": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1105,11 +1108,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz", + "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1119,12 +1122,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz", + "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1134,11 +1137,11 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz", + "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1148,12 +1151,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", - "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1163,11 +1166,11 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.7.tgz", + "integrity": "sha512-UvcLuual4h7/GfylKm2IAA3aph9rwvAM2XBA0uPKU3lca+Maai4jBjjEVUS568ld6kJcgbouuumCBhMd/Yz17w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1178,12 +1181,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz", + "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1193,11 +1196,11 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.7.tgz", + "integrity": "sha512-h3MDAP5l34NQkkNulsTNyjdaR+OiB0Im67VU//sFupouP8Q6m9Spy7l66DcaAQxtmCqGdanPByLsnwFttxKISQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1223,12 +1226,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz", + "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1238,13 +1241,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz", + "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1254,11 +1257,11 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.7.tgz", + "integrity": "sha512-Ot43PrL9TEAiCe8C/2erAjXMeVSnE/BLEx6eyrKLNFCCw5jvhTHKyHxdI1pA0kz5njZRYAnMO2KObGqOCRDYSA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1269,11 +1272,11 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz", + "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1283,11 +1286,11 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.7.tgz", + "integrity": "sha512-iImzbA55BjiovLyG2bggWS+V+OLkaBorNvc/yJoeeDQGztknRnDdYfp2d/UPmunZYEnZi6Lg8QcTmNMHOB0lGA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1298,11 +1301,11 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz", + "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1312,12 +1315,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz", + "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1327,13 +1330,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz", + "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==", "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1343,14 +1346,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", - "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz", + "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==", "dependencies": { - "@babel/helper-module-transforms": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1360,12 +1363,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz", + "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1375,12 +1378,12 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1390,11 +1393,11 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz", + "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1404,11 +1407,11 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.7.tgz", + "integrity": "sha512-FbuJ63/4LEL32mIxrxwYaqjJxpbzxPVQj5a+Ebrc8JICV6YX8nE53jY+K0RZT3um56GoNWgkS2BQ/uLGTjtwfw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1419,11 +1422,11 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.7.tgz", + "integrity": "sha512-8CbutzSSh4hmD+jJHIA8vdTNk15kAzOnFLVVgBSMGr28rt85ouT01/rezMecks9pkU939wDInImwCKv4ahU4IA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1434,14 +1437,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.7.tgz", + "integrity": "sha512-1JdVKPhD7Y5PvgfFy0Mv2brdrolzpzSoUq2pr6xsR+m+3viGGeHEokFKsCgOkbeFOQxfB1Vt2F0cPJLRpFI4Zg==", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" + "@babel/plugin-transform-parameters": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1451,12 +1454,12 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz", + "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1466,11 +1469,11 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.7.tgz", + "integrity": "sha512-m9obYBA39mDPN7lJzD5WkGGb0GO54PPLXsbcnj1Hyeu8mSRz7Gb4b1A6zxNX32ZuUySDK4G6it8SDFWD1nCnqg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1481,12 +1484,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.7.tgz", + "integrity": "sha512-h39agClImgPWg4H8mYVAbD1qP9vClFbEjqoJmt87Zen8pjqK8FTPUwrOXAvqu5soytwxrLMd2fx2KSCp2CHcNg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1497,11 +1500,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz", + "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1511,12 +1514,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", - "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", + "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1526,13 +1529,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.7.tgz", + "integrity": "sha512-LzA5ESzBy7tqj00Yjey9yWfs3FKy4EmJyKOSWld144OxkTji81WWnUT8nkLUn+imN/zHL8ZQlOu/MTUAhHaX3g==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1543,11 +1546,11 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz", + "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1571,11 +1574,11 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", - "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz", + "integrity": "sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1585,15 +1588,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz", - "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz", + "integrity": "sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/types": "^7.25.2" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-syntax-jsx": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1603,11 +1606,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", - "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz", + "integrity": "sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg==", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.24.7" + "@babel/plugin-transform-react-jsx": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1617,12 +1620,12 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", - "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz", + "integrity": "sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1632,11 +1635,11 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz", + "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1647,11 +1650,11 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz", + "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1680,11 +1683,11 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz", + "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1694,12 +1697,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", + "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1709,11 +1712,11 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz", + "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1723,11 +1726,11 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz", + "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1737,11 +1740,11 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz", + "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1769,11 +1772,11 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz", + "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1783,12 +1786,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz", + "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1798,12 +1801,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz", + "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1813,12 +1816,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", - "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz", + "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1828,27 +1831,27 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", - "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.7.tgz", + "integrity": "sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==", "dependencies": { - "@babel/compat-data": "^7.25.4", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "@babel/compat-data": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-assertions": "^7.25.7", + "@babel/plugin-syntax-import-attributes": "^7.25.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1860,60 +1863,60 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.4", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.25.4", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.25.0", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.25.4", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.8", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", + "@babel/plugin-transform-arrow-functions": "^7.25.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.7", + "@babel/plugin-transform-async-to-generator": "^7.25.7", + "@babel/plugin-transform-block-scoped-functions": "^7.25.7", + "@babel/plugin-transform-block-scoping": "^7.25.7", + "@babel/plugin-transform-class-properties": "^7.25.7", + "@babel/plugin-transform-class-static-block": "^7.25.7", + "@babel/plugin-transform-classes": "^7.25.7", + "@babel/plugin-transform-computed-properties": "^7.25.7", + "@babel/plugin-transform-destructuring": "^7.25.7", + "@babel/plugin-transform-dotall-regex": "^7.25.7", + "@babel/plugin-transform-duplicate-keys": "^7.25.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-dynamic-import": "^7.25.7", + "@babel/plugin-transform-exponentiation-operator": "^7.25.7", + "@babel/plugin-transform-export-namespace-from": "^7.25.7", + "@babel/plugin-transform-for-of": "^7.25.7", + "@babel/plugin-transform-function-name": "^7.25.7", + "@babel/plugin-transform-json-strings": "^7.25.7", + "@babel/plugin-transform-literals": "^7.25.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.7", + "@babel/plugin-transform-member-expression-literals": "^7.25.7", + "@babel/plugin-transform-modules-amd": "^7.25.7", + "@babel/plugin-transform-modules-commonjs": "^7.25.7", + "@babel/plugin-transform-modules-systemjs": "^7.25.7", + "@babel/plugin-transform-modules-umd": "^7.25.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-new-target": "^7.25.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.7", + "@babel/plugin-transform-numeric-separator": "^7.25.7", + "@babel/plugin-transform-object-rest-spread": "^7.25.7", + "@babel/plugin-transform-object-super": "^7.25.7", + "@babel/plugin-transform-optional-catch-binding": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7", + "@babel/plugin-transform-parameters": "^7.25.7", + "@babel/plugin-transform-private-methods": "^7.25.7", + "@babel/plugin-transform-private-property-in-object": "^7.25.7", + "@babel/plugin-transform-property-literals": "^7.25.7", + "@babel/plugin-transform-regenerator": "^7.25.7", + "@babel/plugin-transform-reserved-words": "^7.25.7", + "@babel/plugin-transform-shorthand-properties": "^7.25.7", + "@babel/plugin-transform-spread": "^7.25.7", + "@babel/plugin-transform-sticky-regex": "^7.25.7", + "@babel/plugin-transform-template-literals": "^7.25.7", + "@babel/plugin-transform-typeof-symbol": "^7.25.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.7", + "@babel/plugin-transform-unicode-property-regex": "^7.25.7", + "@babel/plugin-transform-unicode-regex": "^7.25.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.7", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.37.1", + "core-js-compat": "^3.38.1", "semver": "^6.3.1" }, "engines": { @@ -1937,16 +1940,16 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", - "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.7.tgz", + "integrity": "sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-react-display-name": "^7.24.7", - "@babel/plugin-transform-react-jsx": "^7.24.7", - "@babel/plugin-transform-react-jsx-development": "^7.24.7", - "@babel/plugin-transform-react-pure-annotations": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-transform-react-display-name": "^7.25.7", + "@babel/plugin-transform-react-jsx": "^7.25.7", + "@babel/plugin-transform-react-jsx-development": "^7.25.7", + "@babel/plugin-transform-react-pure-annotations": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1973,11 +1976,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, "node_modules/@babel/runtime": { "version": "7.25.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", @@ -1990,9 +1988,9 @@ } }, "node_modules/@babel/runtime-corejs2": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.25.6.tgz", - "integrity": "sha512-24uCmOJPrsnS7HtRamCibYabHRV0bscPJNFFcyKgj7FqUA0V5XcbZUmz9PVNDW4L+euMsZtCIetU1LxTmUaIlA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.25.7.tgz", + "integrity": "sha512-xdsLBlDCJIZzwH1fBJ7GJu+bRFO0Sqv10WotmwMu83Joep1erPcWbTr84rZD42kPzSjtmrFgshdWHKfQTWOsng==", "dev": true, "dependencies": { "core-js": "^2.6.12", @@ -2015,28 +2013,28 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2045,12 +2043,12 @@ } }, "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", + "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -5206,9 +5204,9 @@ "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" }, "node_modules/@radix-ui/themes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/themes/-/themes-3.1.3.tgz", - "integrity": "sha512-GJt4r7Vh0w4yiGuqOKLvrZXLEAxUWfEUUtdj17rCfi+P/zpKUc7TsXro8GftA2Y1tm78Cx9x1HKt23dHc/WqIA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/themes/-/themes-3.1.4.tgz", + "integrity": "sha512-HmyU8UpoYPmdfXSQIwbEnJS2Wv/5wbzxe/Niw/sMLMJTrlZiUKM/dEOM7N+bc7w2OMpUaQ8OH9czCGpcjHx98w==", "dependencies": { "@radix-ui/colors": "3.0.0", "@radix-ui/primitive": "1.1.0", @@ -9564,9 +9562,9 @@ } }, "node_modules/daisyui": { - "version": "4.12.10", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.12.10.tgz", - "integrity": "sha512-jp1RAuzbHhGdXmn957Z2XsTZStXGHzFfF0FgIOZj3Wv9sH7OZgLfXTRZNfKVYxltGUOBsG1kbWAdF5SrqjebvA==", + "version": "4.12.11", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.12.11.tgz", + "integrity": "sha512-D9OJTlnU1ATiDsKkw5/TB0997Hm73zu9SFeUTthDtKd06OEJQlOLoYrGXlP2YhHZDW4VAcQnmhEphTgPFUYqSw==", "dev": true, "dependencies": { "css-selector-tokenizer": "^0.8", @@ -10856,9 +10854,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.37.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.0.tgz", - "integrity": "sha512-IHBePmfWH5lKhJnJ7WB1V+v/GolbB0rjS8XYVCSQCZKaQCAUhMoVoOEn1Ef8Z8Wf0a7l8KTJvuZg5/e4qrZ6nA==", + "version": "7.37.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz", + "integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", @@ -12803,9 +12801,9 @@ } }, "node_modules/i18next-http-backend": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.6.1.tgz", - "integrity": "sha512-rCilMAnlEQNeKOZY1+x8wLM5IpYOj10guGvEpeC59tNjj6MMreLIjIW8D1RclhD3ifLwn6d/Y9HEM1RUE6DSog==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.6.2.tgz", + "integrity": "sha512-Hp/kd8/VuoxIHmxsknJXjkTYYHzivAyAF15pzliKzk2TiXC25rZCEerb1pUFoxz4IVrG3fCvQSY51/Lu4ECV4A==", "dependencies": { "cross-fetch": "4.0.0" } @@ -16266,14 +16264,14 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -22158,14 +22156,14 @@ } }, "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", "dependencies": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, @@ -22193,25 +22191,22 @@ "node": ">=0.10.0" } }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==" + }, "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.0.tgz", + "integrity": "sha512-vTbzVAjQDzwQdKuvj7qEq6OlAprCjE656khuGQ4QaBLg7abQ9I9ISpmLuc6inWe7zP75AECjqUa4g4sdQvOXhg==", "dependencies": { - "jsesc": "~0.5.0" + "jsesc": "~3.0.2" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", diff --git a/apps/OpenSign/package.json b/apps/OpenSign/package.json index cc5375f32..6add96513 100644 --- a/apps/OpenSign/package.json +++ b/apps/OpenSign/package.json @@ -6,14 +6,14 @@ "@formkit/auto-animate": "^0.8.2", "@lottiefiles/dotlottie-react": "^0.9.0", "@pdf-lib/fontkit": "^1.1.1", - "@radix-ui/themes": "^3.1.3", + "@radix-ui/themes": "^3.1.4", "@react-pdf/renderer": "^4.0.0", "@reduxjs/toolkit": "^2.2.7", "axios": "^1.7.7", "file-saver": "^2.0.5", "i18next": "^23.15.1", "i18next-browser-languagedetector": "^8.0.0", - "i18next-http-backend": "^2.6.1", + "i18next-http-backend": "^2.6.2", "jszip": "^3.10.1", "jwt-decode": "^4.0.0", "moment": "^2.30.1", @@ -95,22 +95,22 @@ } }, "devDependencies": { - "@babel/core": "^7.25.2", - "@babel/preset-env": "^7.25.4", - "@babel/preset-react": "^7.24.7", - "@babel/runtime-corejs2": "^7.25.6", + "@babel/core": "^7.25.7", + "@babel/preset-env": "^7.25.7", + "@babel/preset-react": "^7.25.7", + "@babel/runtime-corejs2": "^7.25.7", "autoprefixer": "^10.4.20", "babel-loader": "^9.2.1", "clean-webpack-plugin": "^4.0.0", "commitizen": "^4.3.1", "concurrently": "^9.0.1", "css-loader": "^7.1.2", - "daisyui": "^4.12.10", + "daisyui": "^4.12.11", "dotenv": "^16.4.5", "dotenv-webpack": "^8.1.0", "eslint": "^9.11.1", "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react": "^7.37.1", "lint-staged": "^15.2.10", "mini-css-extract-plugin": "^2.9.1", "postcss": "^8.4.47", diff --git a/apps/OpenSign/src/components/pdf/EmailComponent.js b/apps/OpenSign/src/components/pdf/EmailComponent.js index fba59d758..7388a42a7 100644 --- a/apps/OpenSign/src/components/pdf/EmailComponent.js +++ b/apps/OpenSign/src/components/pdf/EmailComponent.js @@ -30,16 +30,15 @@ function EmailComponent({ const pdfName = pdfDetails[0]?.Name; setIsLoading(true); let sendMail; - - const docId = !pdfDetails?.[0]?.IsEnableOTP - ? pdfDetails?.[0]?.objectId - : ""; + const docId = pdfDetails?.[0]?.objectId || ""; + const isFileAdapter = pdfDetails?.[0]?.IsFileAdapter + ? pdfDetails?.[0]?.IsFileAdapter + : false; let presignedUrl = pdfUrl; try { - // const url = await Parse.Cloud.run("getsignedurl", { url: pdfUrl }); const axiosRes = await axios.post( `${localStorage.getItem("baseUrl")}/functions/getsignedurl`, - { url: pdfUrl, docId: docId }, + { url: pdfUrl, docId: docId, isFileAdapter: isFileAdapter }, { headers: { "content-type": "Application/json", diff --git a/apps/OpenSign/src/components/shared/fields/SuggestionInput.js b/apps/OpenSign/src/components/shared/fields/SuggestionInput.js index 5c27adc31..07fc11cbf 100644 --- a/apps/OpenSign/src/components/shared/fields/SuggestionInput.js +++ b/apps/OpenSign/src/components/shared/fields/SuggestionInput.js @@ -41,9 +41,9 @@ const SuggestionInput = (props) => { const handleInputChange = async (e) => { const value = e.target.value; - setInputValue(value?.toLowerCase()); + setInputValue(value?.toLowerCase()?.replace(/\s/g, "")); if (props.onChange) { - props.onChange(value); + props.onChange(value?.toLowerCase()?.replace(/\s/g, "")); } if (value.trim() === "") { diff --git a/apps/OpenSign/src/constant/Utils.js b/apps/OpenSign/src/constant/Utils.js index 8d5f2b35c..f9926022b 100644 --- a/apps/OpenSign/src/constant/Utils.js +++ b/apps/OpenSign/src/constant/Utils.js @@ -2048,11 +2048,21 @@ export const fetchUrl = async (url, pdfName) => { console.error("Error downloading the file:", error); } }; -export const getSignedUrl = async (pdfUrl, docId) => { +export const getSignedUrl = async ( + pdfUrl, + docId, + isFileAdapter, + templateId +) => { //use only axios here due to public template sign const axiosRes = await axios.post( `${localStorage.getItem("baseUrl")}/functions/getsignedurl`, - { url: pdfUrl, docId: docId || "" }, + { + url: pdfUrl, + docId: docId || "", + isFileAdapter: isFileAdapter, + templateId: templateId || "" + }, { headers: { "content-type": "Application/json", @@ -2069,9 +2079,12 @@ export const handleDownloadPdf = async (pdfDetails, setIsDownloading) => { const pdfName = pdfDetails[0] && pdfDetails[0]?.Name; const pdfUrl = pdfDetails?.[0]?.SignedUrl || pdfDetails?.[0]?.URL; setIsDownloading && setIsDownloading("pdf"); - const docId = !pdfDetails?.[0]?.IsEnableOTP ? pdfDetails?.[0]?.objectId : ""; + const docId = pdfDetails?.[0]?.objectId || ""; + const isFileAdapter = pdfDetails?.[0]?.IsFileAdapter + ? pdfDetails?.[0]?.IsFileAdapter + : false; try { - const url = await getSignedUrl(pdfUrl, docId); + const url = await getSignedUrl(pdfUrl, docId, isFileAdapter); await fetchUrl(url, pdfName); setIsDownloading && setIsDownloading(""); } catch (err) { @@ -2094,14 +2107,17 @@ export const handleToPrint = async ( ) => { event.preventDefault(); setIsDownloading("pdf"); - const docId = !pdfDetails?.[0]?.IsEnableOTP ? pdfDetails?.[0]?.objectId : ""; + const docId = pdfDetails?.[0]?.objectId || ""; + const isFileAdapter = pdfDetails?.[0]?.IsFileAdapter + ? pdfDetails?.[0]?.IsFileAdapter + : false; try { // const url = await Parse.Cloud.run("getsignedurl", { url: pdfUrl }); //`localStorage.getItem("baseUrl")` is also use in public-profile flow for public-sign //if we give this `appInfo.baseUrl` as a base url then in public-profile it will create base url of it's window.location.origin ex- opensign.me which is not base url const axiosRes = await axios.post( `${localStorage.getItem("baseUrl")}/functions/getsignedurl`, - { url: pdfUrl, docId: docId }, + { url: pdfUrl, docId: docId, isFileAdapter: isFileAdapter }, { headers: { "content-type": "Application/json", diff --git a/apps/OpenSign/src/pages/Form.js b/apps/OpenSign/src/pages/Form.js index ade1cdd44..33446f43c 100644 --- a/apps/OpenSign/src/pages/Form.js +++ b/apps/OpenSign/src/pages/Form.js @@ -85,6 +85,9 @@ const Forms = (props) => { setIsCorrectPass(true); setFormData({ ...formData, [e.target.name]: e.target.value }); }; + const extUserData = + localStorage.getItem("Extand_Class") && + JSON.parse(localStorage.getItem("Extand_Class"))?.[0]; useEffect(() => { handleReset(); return () => abortController.abort(); @@ -153,10 +156,7 @@ const Forms = (props) => { formData.append("file", files[0]); formData.append("password", ""); const config = { - headers: { - "content-type": "multipart/form-data" - // sessiontoken: Parse.User.current().getSessionToken() - }, + headers: { "content-type": "multipart/form-data" }, responseType: "blob" }; const response = await axios.post(url, formData, config); @@ -168,35 +168,58 @@ const Forms = (props) => { }); setIsDecrypting(false); setfileload(true); - - // Upload the file to Parse Server - const parseFile = new Parse.File( - name, - pdfFile, - "application/pdf" - ); - - await parseFile.save({ - progress: (progressValue, loaded, total, { type }) => { - if (type === "upload" && progressValue !== null) { - const percentCompleted = Math.round( - (loaded * 100) / total - ); - setpercentage(percentCompleted); - } + if (extUserData?.TenantId?.ActiveFileAdapter) { + const base64 = await toDataUrl(pdfFile); + const fileBase64 = base64.split(",").pop(); + const ext = files?.[0]?.name?.split(".").pop(); + const fileRes = await saveToCustomFile( + fileBase64, + `${name}.${ext}` + ); + if (fileRes.url) { + setFileUpload(fileRes.url); + setfileload(false); + setpercentage(0); + const title = generateTitleFromFilename(files?.[0]?.name); + setFormData((obj) => ({ ...obj, Name: title })); + const tenantId = localStorage.getItem("TenantId"); + SaveFileSize(size, fileRes.url, tenantId); + return fileRes.url; + } else { + setfileload(false); + setpercentage(0); + setFileUpload(""); + e.target.value = ""; } - }); + } else { + // Upload the file to Parse Server + const parseFile = new Parse.File( + name, + pdfFile, + "application/pdf" + ); - // Retrieve the URL of the uploaded file - if (parseFile.url()) { - setFileUpload(parseFile.url()); - setfileload(false); - const title = generateTitleFromFilename(files?.[0]?.name); - setFormData((obj) => ({ ...obj, Name: title })); - SaveFileSize(size, response.url(), tenantId); - const tenantId = localStorage.getItem("TenantId"); - SaveFileSize(size, parseFile.url(), tenantId); - return parseFile.url(); + await parseFile.save({ + progress: (progressValue, loaded, total, { type }) => { + if (type === "upload" && progressValue !== null) { + const percentCompleted = Math.round( + (loaded * 100) / total + ); + setpercentage(percentCompleted); + } + } + }); + + // Retrieve the URL of the uploaded file + if (parseFile.url()) { + setFileUpload(parseFile.url()); + setfileload(false); + const title = generateTitleFromFilename(files?.[0]?.name); + setFormData((obj) => ({ ...obj, Name: title })); + const tenantId = localStorage.getItem("TenantId"); + SaveFileSize(size, parseFile.url(), tenantId); + return parseFile.url(); + } } } catch (err) { setfileload(false); @@ -237,46 +260,73 @@ const Forms = (props) => { width: imageWidth, height: imageHeight }); - const getFile = await pdfDoc.save({ - useObjectStreams: false - }); - setfileload(true); - const size = files[0].size; + const size = files?.[0]?.size; const name = generatePdfName(16); - const pdfName = `${name?.split(".")[0]}.pdf`; - const parseFile = new Parse.File( - pdfName, - [...getFile], - "application/pdf" - ); - - try { - const response = await parseFile.save({ - progress: (progressValue, loaded, total, { type }) => { - if (type === "upload" && progressValue !== null) { - const percentCompleted = Math.round( - (loaded * 100) / total - ); - setpercentage(percentCompleted); - } - } + if (extUserData?.TenantId?.ActiveFileAdapter) { + const base64 = await pdfDoc.saveAsBase64({ + useObjectStreams: false }); - // The response object will contain information about the uploaded file - // You can access the URL of the uploaded file using response.url() - setFileUpload(response.url()); - setfileload(false); - if (response.url()) { - const tenantId = localStorage.getItem("TenantId"); + setfileload(true); + const fileBase64 = base64.split(",").pop(); + const ext = files?.[0]?.name?.split(".").pop(); + const fileRes = await saveToCustomFile( + fileBase64, + `${name}.${ext}` + ); + if (fileRes.url) { + setFileUpload(fileRes.url); + setfileload(false); + setpercentage(0); const title = generateTitleFromFilename(files?.[0]?.name); setFormData((obj) => ({ ...obj, Name: title })); - SaveFileSize(size, response.url(), tenantId); - return response.url(); + const tenantId = localStorage.getItem("TenantId"); + SaveFileSize(size, fileRes.url, tenantId); + return fileRes.url; + } else { + setfileload(false); + setpercentage(0); + e.target.value = ""; + } + } else { + const getFile = await pdfDoc.save({ + useObjectStreams: false + }); + setfileload(true); + const pdfName = `${name?.split(".")[0]}.pdf`; + const parseFile = new Parse.File( + pdfName, + [...getFile], + "application/pdf" + ); + + try { + const response = await parseFile.save({ + progress: (progressValue, loaded, total, { type }) => { + if (type === "upload" && progressValue !== null) { + const percentCompleted = Math.round( + (loaded * 100) / total + ); + setpercentage(percentCompleted); + } + } + }); + // The response object will contain information about the uploaded file + // You can access the URL of the uploaded file using response.url() + setFileUpload(response.url()); + setfileload(false); + if (response.url()) { + const tenantId = localStorage.getItem("TenantId"); + const title = generateTitleFromFilename(files?.[0]?.name); + setFormData((obj) => ({ ...obj, Name: title })); + SaveFileSize(size, response.url(), tenantId); + return response.url(); + } + } catch (error) { + e.target.value = ""; + setfileload(false); + setpercentage(0); + console.error("Error uploading file:", error); } - } catch (error) { - e.target.value = ""; - setfileload(false); - setpercentage(0); - console.error("Error uploading file:", error); } } else { if (isEnableSubscription) { @@ -322,41 +372,78 @@ const Forms = (props) => { } }; + const saveToCustomFile = async (base64, filname) => { + try { + const savetos3 = await Parse.Cloud.run("savetofileadapter", { + fileBase64: base64, + fileName: filname + }); + return { url: savetos3.url }; + } catch (err) { + console.log("err in save to customfile", err); + return { url: "" }; + } + }; + const handleFileUpload = async (file) => { setfileload(true); const size = file.size; const name = generatePdfName(16); const pdfFile = file; - const parseFile = new Parse.File(name, pdfFile); - - try { - const response = await parseFile.save({ - progress: (progressValue, loaded, total, { type }) => { - if (type === "upload" && progressValue !== null) { - const percentCompleted = Math.round((loaded * 100) / total); - setpercentage(percentCompleted); - } - } - }); - - // The response object will contain information about the uploaded file - // You can access the URL of the uploaded file using response.url() - setFileUpload(response.url()); - setfileload(false); - if (response.url()) { + if (extUserData?.TenantId?.ActiveFileAdapter) { + const base64 = await toDataUrl(file); + const fileBase64 = base64.split(",").pop(); + const ext = file?.name?.split(".").pop(); + const fileRes = await saveToCustomFile(fileBase64, `${name}.${ext}`); + if (fileRes.url) { + setFileUpload(fileRes?.url); const tenantId = localStorage.getItem("TenantId"); const title = generateTitleFromFilename(file.name); setFormData((obj) => ({ ...obj, Name: title })); - SaveFileSize(size, response.url(), tenantId); - return response.url(); + SaveFileSize(size, fileRes.url, tenantId); } - } catch (error) { setfileload(false); setpercentage(0); - console.error("Error uploading file:", error); + } else { + const parseFile = new Parse.File(name, pdfFile); + try { + const response = await parseFile.save({ + progress: (progressValue, loaded, total, { type }) => { + if (type === "upload" && progressValue !== null) { + const percentCompleted = Math.round((loaded * 100) / total); + setpercentage(percentCompleted); + } + } + }); + + // The response object will contain information about the uploaded file + // You can access the URL of the uploaded file using response.url() + setFileUpload(response.url()); + setfileload(false); + if (response.url()) { + const tenantId = localStorage.getItem("TenantId"); + const title = generateTitleFromFilename(file.name); + setFormData((obj) => ({ ...obj, Name: title })); + SaveFileSize(size, response.url(), tenantId); + return response.url(); + } + } catch (error) { + setfileload(false); + setpercentage(0); + console.error("Error uploading file:", error); + } } }; - + async function uriToBase64(uri) { + const response = await fetch(uri); + const blob = await response.blob(); + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onloadend = () => resolve(reader.result); + reader.onerror = reject; + reader.readAsDataURL(blob); // Convert to Base64 + }); + } const dropboxSuccess = async (files) => { setfileload(true); const file = files[0]; @@ -371,30 +458,49 @@ const Forms = (props) => { return; } else { const name = generatePdfName(16); - const parseFile = new Parse.File(name, { uri: url }); - - try { - const response = await parseFile.save({ - progress: (progressValue, loaded, total, { type }) => { - if (type === "upload" && progressValue !== null) { - const percentCompleted = Math.round((loaded * 100) / total); - setpercentage(percentCompleted); - } - } - }); - setFileUpload(response.url()); - setfileload(false); - if (response.url()) { - const tenantId = localStorage.getItem("TenantId"); - const title = generateTitleFromFilename(file.name); + if (extUserData?.TenantId?.ActiveFileAdapter) { + const base64 = await uriToBase64(url); + const fileBase64 = base64.split(",").pop(); + const ext = file?.name?.split(".").pop(); + const fileRes = await saveToCustomFile(fileBase64, `${name}.${ext}`); + if (fileRes.url) { + setFileUpload(fileRes.url); + setfileload(false); + setpercentage(0); + const title = generateTitleFromFilename(files?.[0]?.name); setFormData((obj) => ({ ...obj, Name: title })); - SaveFileSize(size, response.url(), tenantId); - return response.url(); + const tenantId = localStorage.getItem("TenantId"); + SaveFileSize(size, fileRes.url, tenantId); + return fileRes.url; + } else { + setfileload(false); + setpercentage(0); + } + } else { + const parseFile = new Parse.File(name, { uri: url }); + try { + const response = await parseFile.save({ + progress: (progressValue, loaded, total, { type }) => { + if (type === "upload" && progressValue !== null) { + const percentCompleted = Math.round((loaded * 100) / total); + setpercentage(percentCompleted); + } + } + }); + setFileUpload(response.url()); + setfileload(false); + if (response.url()) { + const tenantId = localStorage.getItem("TenantId"); + const title = generateTitleFromFilename(file.name); + setFormData((obj) => ({ ...obj, Name: title })); + SaveFileSize(size, response.url(), tenantId); + return response.url(); + } + } catch (error) { + setfileload(false); + setpercentage(0); + console.error("Error uploading file:", error); } - } catch (error) { - setfileload(false); - setpercentage(0); - console.error("Error uploading file:", error); } } }; @@ -447,6 +553,9 @@ const Forms = (props) => { className: "contracts_Users", objectId: ExtCls[0].objectId }); + if (extUserData?.TenantId?.ActiveFileAdapter) { + object.set("IsFileAdapter", true); + } const res = await object.save(); if (res) { setSigners([]); @@ -550,27 +659,55 @@ const Forms = (props) => { }); setIsDecrypting(false); // Upload the file to Parse Server - const parseFile = new Parse.File(name, pdfFile, "application/pdf"); - - await parseFile.save({ - progress: (progressValue, loaded, total, { type }) => { - if (type === "upload" && progressValue !== null) { - const percentCompleted = Math.round((loaded * 100) / total); - setpercentage(percentCompleted); + if (extUserData?.TenantId?.ActiveFileAdapter) { + const base64 = await toDataUrl(pdfFile); + const fileBase64 = base64.split(",").pop(); + const ext = formData?.file?.name?.split(".").pop(); + const fileRes = await saveToCustomFile(fileBase64, `${name}.${ext}`); + if (fileRes.url) { + setFormData((prev) => ({ ...prev, password: "" })); + setFileUpload(fileRes?.url); + setfileload(false); + setpercentage(0); + const title = generateTitleFromFilename(formData?.file?.name); + setFormData((obj) => ({ ...obj, Name: title })); + const tenantId = localStorage.getItem("TenantId"); + SaveFileSize(size, fileRes.url, tenantId); + return fileRes.url; + } else { + setfileload(false); + setpercentage(0); + } + } else { + const parseFile = new Parse.File(name, pdfFile, "application/pdf"); + await parseFile.save({ + progress: (progressValue, loaded, total, { type }) => { + if (type === "upload" && progressValue !== null) { + const percentCompleted = Math.round((loaded * 100) / total); + setpercentage(percentCompleted); + } + } + }); + // Retrieve the URL of the uploaded file + if (parseFile.url()) { + setFormData((prev) => ({ ...prev, password: "" })); + setFileUpload(parseFile.url()); + setfileload(false); + setpercentage(0); + const title = generateTitleFromFilename(formData?.file?.name); + setFormData((obj) => ({ ...obj, Name: title })); + const tenantId = localStorage.getItem("TenantId"); + SaveFileSize(size, parseFile.url(), tenantId); + return parseFile.url(); + } else { + setfileload(false); + setpercentage(0); + setFormData((prev) => ({ ...prev, password: "" })); + setIsDecrypting(false); + if (inputFileRef.current) { + inputFileRef.current.value = ""; // Set file input value to empty string } } - }); - - // Retrieve the URL of the uploaded file - if (parseFile.url()) { - setFormData((prev) => ({ ...prev, password: "" })); - setFileUpload(parseFile.url()); - setfileload(false); - const title = generateTitleFromFilename(formData?.file?.name); - setFormData((obj) => ({ ...obj, Name: title })); - const tenantId = localStorage.getItem("TenantId"); - SaveFileSize(size, parseFile.url(), tenantId); - return parseFile.url(); } } catch (err) { setfileload(false); diff --git a/apps/OpenSign/src/pages/PlaceHolderSign.js b/apps/OpenSign/src/pages/PlaceHolderSign.js index aa31b6942..f64e36f0b 100644 --- a/apps/OpenSign/src/pages/PlaceHolderSign.js +++ b/apps/OpenSign/src/pages/PlaceHolderSign.js @@ -901,7 +901,7 @@ function PlaceHolderSign() { useEffect(() => { const timer = setTimeout(() => { - if (signerPos?.length > 0) { + if (signerPos?.length > 0 && !pdfDetails?.[0]?.IsCompleted) { autosavedetails(); } }, 2000); diff --git a/apps/OpenSign/src/pages/SignyourselfPdf.js b/apps/OpenSign/src/pages/SignyourselfPdf.js index 6648efeb8..ad89d82cd 100644 --- a/apps/OpenSign/src/pages/SignyourselfPdf.js +++ b/apps/OpenSign/src/pages/SignyourselfPdf.js @@ -558,7 +558,7 @@ function SignYourSelf() { }; useEffect(() => { const timer = setTimeout(() => { - if (xyPostion?.length > 0) { + if (xyPostion?.length > 0 && !pdfDetails?.[0]?.IsCompleted) { autosavedetails(); } }, 2000); diff --git a/apps/OpenSign/src/primitives/DownloadPdfZip.js b/apps/OpenSign/src/primitives/DownloadPdfZip.js index 0e6719519..f00b4aa60 100644 --- a/apps/OpenSign/src/primitives/DownloadPdfZip.js +++ b/apps/OpenSign/src/primitives/DownloadPdfZip.js @@ -34,11 +34,13 @@ function DownloadPdfZip(props) { try { // Fetch the first PDF (Signed Document) - const docId = - props.isDocId && !pdfDetails?.[0]?.IsEnableOTP - ? pdfDetails?.[0]?.objectId - : ""; - const signedUrl = await getSignedUrl(pdfUrl, docId); + const docId = pdfDetails?.[0]?.objectId || ""; + const isFileAdapter = pdfDetails?.[0]?.IsFileAdapter + ? pdfDetails?.[0]?.IsFileAdapter + : false; + console.log("pdfDetails?.[0] ", pdfDetails?.[0]); + const signedUrl = await getSignedUrl(pdfUrl, docId, isFileAdapter); + console.log("signedUrl ", signedUrl); const pdf1Response = await fetch(signedUrl); if (!pdf1Response.ok) { throw new Error(`Failed to fetch PDF: ${signedUrl}`); diff --git a/apps/OpenSign/src/primitives/GetReportDisplay.js b/apps/OpenSign/src/primitives/GetReportDisplay.js index def6c553a..e1d33b874 100644 --- a/apps/OpenSign/src/primitives/GetReportDisplay.js +++ b/apps/OpenSign/src/primitives/GetReportDisplay.js @@ -671,12 +671,21 @@ const ReportTable = (props) => { const url = item?.SignedUrl || item?.URL || ""; const pdfName = item?.Name || "exported_file"; const isCompleted = item?.IsCompleted || false; + const templateId = props?.ReportName === "Templates" && item.objectId; + const docId = props?.ReportName !== "Templates" && item.objectId; + const isFileAdapter = item?.IsFileAdapter ? item?.IsFileAdapter : false; + if (url) { try { if (isCompleted) { setIsDownloadModal({ [item.objectId]: true }); } else { - const signedUrl = await getSignedUrl(url); + const signedUrl = await getSignedUrl( + url, + docId, + isFileAdapter, + templateId + ); await fetchUrl(signedUrl, pdfName); } setActLoader({}); diff --git a/apps/OpenSignServer/cloud/main.js b/apps/OpenSignServer/cloud/main.js index b1f6c2e2f..7d94f1426 100644 --- a/apps/OpenSignServer/cloud/main.js +++ b/apps/OpenSignServer/cloud/main.js @@ -70,6 +70,9 @@ import updateContactTour from './parsefunction/updateContactTour.js'; import declinedocument from './parsefunction/declinedocument.js'; import addcustomsmtp from './parsefunction/addcustomsmtp.js'; import deactivateMailAdapter from './parsefunction/deactivateMailAdapter.js'; +import addFileAdapter from './parsefunction/addFileAdapter.js'; +import saveToFileAdapter from './parsefunction/saveToFileAdapter.js'; +import getFileAdapter from './parsefunction/getFileAdapter.js'; // This afterSave function triggers after an object is added or updated in the specified class, allowing for post-processing logic. Parse.Cloud.afterSave('contracts_Document', DocumentAftersave); @@ -152,3 +155,6 @@ Parse.Cloud.define('updatecontacttour', updateContactTour); Parse.Cloud.define('declinedoc', declinedocument); Parse.Cloud.define('addsmtp', addcustomsmtp); Parse.Cloud.define('deactivatemailadapter', deactivateMailAdapter); +Parse.Cloud.define('savetofileadapter', saveToFileAdapter); +Parse.Cloud.define('addfileadapter', addFileAdapter); +Parse.Cloud.define('getfileadapter', getFileAdapter); diff --git a/apps/OpenSignServer/cloud/parsefunction/DocumentAfterFind.js b/apps/OpenSignServer/cloud/parsefunction/DocumentAfterFind.js index 2ae392cd9..a8bf4e98d 100644 --- a/apps/OpenSignServer/cloud/parsefunction/DocumentAfterFind.js +++ b/apps/OpenSignServer/cloud/parsefunction/DocumentAfterFind.js @@ -9,14 +9,23 @@ async function DocumentAfterFind(request) { const SignedUrl = obj?.get('SignedUrl') && obj?.get('SignedUrl'); const Url = obj?.get('URL') && obj?.get('URL'); const certificateUrl = obj.get('CertificateUrl') && obj.get('CertificateUrl'); + const IsFileAdapter = obj?.get('IsFileAdapter') || false; + let fileAdapter = {}; + if (IsFileAdapter) { + const tenantId = obj?.get('ExtUserPtr')?.get('TenantId'); + if (tenantId) { + const _tenantId = JSON.parse(JSON.stringify(obj?.get('ExtUserPtr')?.get('TenantId'))); + fileAdapter = _tenantId?.FileAdapter || {}; + } + } if (SignedUrl) { - obj.set('SignedUrl', getPresignedUrl(SignedUrl)); + obj.set('SignedUrl', getPresignedUrl(SignedUrl, fileAdapter)); } if (Url) { - obj.set('URL', getPresignedUrl(Url)); + obj.set('URL', getPresignedUrl(Url, fileAdapter)); } if (certificateUrl) { - obj.set('CertificateUrl', getPresignedUrl(certificateUrl)); + obj.set('CertificateUrl', getPresignedUrl(certificateUrl, fileAdapter)); } return [obj]; } diff --git a/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js b/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js index cbc739726..da07c2aba 100644 --- a/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js +++ b/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js @@ -22,7 +22,7 @@ export default async function GetTemplate(request) { template.include('ExtUserPtr'); template.include('Signers'); template.include('CreatedBy'); - + template.include('ExtUserPtr.TenantId'); const extUserQuery = new Parse.Query('contracts_Users'); extUserQuery.equalTo('Email', userRes.data.email); extUserQuery.include('TeamIds'); @@ -48,12 +48,14 @@ export default async function GetTemplate(request) { template.include('ExtUserPtr'); template.include('Signers'); template.include('CreatedBy'); + template.include('ExtUserPtr.TenantId'); } } const res = await template.first({ useMasterKey: true }); if (res) { - // console.log("res ",res) - return res; + const templateRes = JSON.parse(JSON.stringify(res)); + delete templateRes?.ExtUserPtr?.TenantId?.FileAdapter; + return templateRes; } else { return { error: "You don't have access of this document!" }; } @@ -69,10 +71,13 @@ export default async function GetTemplate(request) { template.include('ExtUserPtr'); template.include('Signers'); template.include('CreatedBy'); + template.include('ExtUserPtr.TenantId'); const res = await template.first({ useMasterKey: true }); // console.log("res ", res) if (res) { - return res; + const templateRes = JSON.parse(JSON.stringify(res)); + delete templateRes?.ExtUserPtr?.TenantId?.FileAdapter; + return templateRes; } else { return { error: "You don't have access of this document!" }; } diff --git a/apps/OpenSignServer/cloud/parsefunction/TemplateAfterFind.js b/apps/OpenSignServer/cloud/parsefunction/TemplateAfterFind.js index 6fab363c8..46e9c83ad 100644 --- a/apps/OpenSignServer/cloud/parsefunction/TemplateAfterFind.js +++ b/apps/OpenSignServer/cloud/parsefunction/TemplateAfterFind.js @@ -9,14 +9,23 @@ async function TemplateAfterFind(request) { const SignedUrl = obj?.get('SignedUrl') && obj?.get('SignedUrl'); const Url = obj?.get('URL') && obj?.get('URL'); const certificateUrl = obj.get('CertificateUrl') && obj.get('CertificateUrl'); + const IsFileAdapter = obj?.get('IsFileAdapter') || false; + let fileAdapter = {}; + if (IsFileAdapter) { + const tenantId = obj?.get('ExtUserPtr')?.get('TenantId'); + if (tenantId) { + const _tenantId = JSON.parse(JSON.stringify(obj?.get('ExtUserPtr')?.get('TenantId'))); + fileAdapter = _tenantId?.FileAdapter || {}; + } + } if (SignedUrl) { - obj.set('SignedUrl', getPresignedUrl(SignedUrl)); + obj.set('SignedUrl', getPresignedUrl(SignedUrl, fileAdapter)); } if (Url) { - obj.set('URL', getPresignedUrl(Url)); + obj.set('URL', getPresignedUrl(Url, fileAdapter)); } if (certificateUrl) { - obj.set('CertificateUrl', getPresignedUrl(certificateUrl)); + obj.set('CertificateUrl', getPresignedUrl(certificateUrl, fileAdapter)); } return [obj]; diff --git a/apps/OpenSignServer/cloud/parsefunction/addFileAdapter.js b/apps/OpenSignServer/cloud/parsefunction/addFileAdapter.js new file mode 100644 index 000000000..1506fc7a6 --- /dev/null +++ b/apps/OpenSignServer/cloud/parsefunction/addFileAdapter.js @@ -0,0 +1,56 @@ +export default async function addFileAdapter(request) { + if (!request?.user) { + throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.'); + } + const bucketName = request.params.bucketName; + const region = request.params.region; + const endpoint = request.params.endpoint; + const baseUrl = request.params.baseUrl; + const accessKeyId = request.params.accessKeyId; + const secretAccessKey = request.params.secretAccessKey; + const adapter = request.params.fileAdapter; + + if (bucketName && region && endpoint && accessKeyId && secretAccessKey && adapter) { + try { + const extUserCls = new Parse.Query('contracts_Users'); + extUserCls.equalTo('UserId', request.user); + const extUser = await extUserCls.first({ useMasterKey: true }); + if (extUser) { + const tenantCls = new Parse.Object('partners_Tenant'); + tenantCls.id = extUser?.get('TenantId')?.id; + const adapterConfig = { + bucketName: bucketName, + region: region, + endpoint: endpoint, + baseUrl: baseUrl, + accessKeyId: accessKeyId, + secretAccessKey: secretAccessKey, + }; + tenantCls.set('FileAdapter', adapterConfig); + tenantCls.set('ActiveFileAdapter', adapter); + const updateTenant = await tenantCls.save(null, { useMasterKey: true }); + const tenantSchema = new Parse.Schema('partners_Tenant'); + tenantSchema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: { '*': true }, + addField: { '*': true }, + protectedFields: { '*': ['FileAdapter'] }, + }); + await tenantSchema.update(); + return updateTenant.updatedAt; + } + return extUser; + } catch (err) { + console.log('Err in add custom file adapter', err); + const code = err.code || 400; + const msg = err.message || 'Something went wrong.'; + throw new Parse.Error(code, msg); + } + } else { + throw new Parse.Error(Parse.Error.INVALID_QUERY, 'Please provide all parameters.'); + } +} diff --git a/apps/OpenSignServer/cloud/parsefunction/getDocument.js b/apps/OpenSignServer/cloud/parsefunction/getDocument.js index 9478ab35d..757e73971 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getDocument.js +++ b/apps/OpenSignServer/cloud/parsefunction/getDocument.js @@ -11,6 +11,7 @@ export default async function getDocument(request) { const query = new Parse.Query('contracts_Document'); query.equalTo('objectId', docId); query.include('ExtUserPtr'); + query.include('ExtUserPtr.TenantId'); query.include('CreatedBy'); query.include('Signers'); query.include('AuditTrail.UserPtr'); @@ -20,8 +21,10 @@ export default async function getDocument(request) { const res = await query.first({ useMasterKey: true }); if (res) { const IsEnableOTP = res?.get('IsEnableOTP') || false; + const document = JSON.parse(JSON.stringify(res)); + delete document.ExtUserPtr.TenantId.FileAdapter; if (!IsEnableOTP) { - return res; + return document; } else { if (request?.headers?.['sessiontoken']) { try { @@ -34,7 +37,7 @@ export default async function getDocument(request) { const userId = userRes.data && userRes.data?.objectId; const acl = res.getACL(); if (userId && acl && acl.getReadAccess(userId)) { - return res; + return document; } else { return { error: "You don't have access of this document!" }; } diff --git a/apps/OpenSignServer/cloud/parsefunction/getFileAdapter.js b/apps/OpenSignServer/cloud/parsefunction/getFileAdapter.js new file mode 100644 index 000000000..2aeab7a9d --- /dev/null +++ b/apps/OpenSignServer/cloud/parsefunction/getFileAdapter.js @@ -0,0 +1,35 @@ +export default async function getFileAdapter(request) { + if (!request?.user) { + throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.'); + } + try { + const extUserCls = new Parse.Query('contracts_Users'); + extUserCls.equalTo('UserId', request.user); + extUserCls.include('TenantId'); + const extUser = await extUserCls.first({ useMasterKey: true }); + if (extUser) { + const _extUser = JSON.parse(JSON.stringify(extUser)); + if (_extUser?.TenantId?.ActiveFileAdapter && _extUser?.TenantId?.FileAdapter?.bucketName) { + const adapterConfig = { + bucketName: _extUser?.TenantId?.FileAdapter?.bucketName, + region: _extUser?.TenantId?.FileAdapter?.region, + endpoint: _extUser?.TenantId?.FileAdapter?.endpoint, + baseUrl: _extUser?.TenantId?.FileAdapter?.baseUrl, + accessKeyId: _extUser?.TenantId?.FileAdapter?.accessKeyId, + secretAccessKey: _extUser?.TenantId?.FileAdapter?.secretAccessKey, + fileAdapter: _extUser?.TenantId?.ActiveFileAdapter, + }; + return adapterConfig; + } else { + return {}; + } + } else { + throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'User not found.'); + } + } catch (err) { + console.log('Err in add custom file adapter', err); + const code = err.code || 400; + const msg = err.message || 'Something went wrong.'; + throw new Parse.Error(code, msg); + } +} diff --git a/apps/OpenSignServer/cloud/parsefunction/getSignedUrl.js b/apps/OpenSignServer/cloud/parsefunction/getSignedUrl.js index 7fc0ef507..b720daa7e 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getSignedUrl.js +++ b/apps/OpenSignServer/cloud/parsefunction/getSignedUrl.js @@ -1,12 +1,12 @@ import AWS from 'aws-sdk'; import { useLocal } from '../../Utils.js'; -export default function getPresignedUrl(url) { +export default function getPresignedUrl(url, adapter) { const credentials = { - accessKeyId: process.env.DO_ACCESS_KEY_ID, - secretAccessKey: process.env.DO_SECRET_ACCESS_KEY, + accessKeyId: adapter?.accessKeyId || process.env.DO_ACCESS_KEY_ID, + secretAccessKey: adapter?.secretAccessKey || process.env.DO_SECRET_ACCESS_KEY, }; - AWS.config.update({ credentials: credentials, region: process.env.DO_REGION }); - const spacesEndpoint = new AWS.Endpoint(process.env.DO_ENDPOINT); + AWS.config.update({ credentials: credentials, region: adapter?.region || process.env.DO_REGION }); + const spacesEndpoint = adapter?.endpoint || new AWS.Endpoint(process.env.DO_ENDPOINT); const s3 = new AWS.S3({ endpoint: spacesEndpoint }); @@ -19,7 +19,7 @@ export default function getPresignedUrl(url) { // presignedGETURL return presignedUrl with expires time const presignedGETURL = s3.getSignedUrl('getObject', { - Bucket: process.env.DO_SPACE, + Bucket: adapter?.bucketName || process.env.DO_SPACE, Key: filename, //filename Expires: 160, //time to expire in seconds }); @@ -29,26 +29,51 @@ export default function getPresignedUrl(url) { export async function getSignedUrl(request) { try { const docId = request.params.docId || ''; + const templateId = request.params.templateId || ''; const url = request.params.url; - if (docId) { + const IsFileAdapter = request.params.isFileAdapter || ''; + if (docId || templateId) { try { - const query = new Parse.Query('contracts_Document'); - query.equalTo('objectId', docId); - query.notEqualTo('IsEnableOTP', true); - query.include('CreatedBy'); - query.include('Signers'); - query.include('AuditTrail.UserPtr'); - query.include('Placeholders'); - query.include('DeclineBy'); - query.notEqualTo('IsArchive', true); - const res = await query.first({ useMasterKey: true }); - if (res) { - if (useLocal !== 'true') { - const presignedUrl = getPresignedUrl(url); - return presignedUrl; - } else { - return url; + if (useLocal !== 'true') { + const query = new Parse.Query(docId ? 'contracts_Document' : 'contracts_Template'); + query.equalTo('objectId', docId ? docId : templateId); + query.include('ExtUserPtr.TenantId'); + query.notEqualTo('IsArchive', true); + const res = await query.first({ useMasterKey: true }); + if (res) { + const _resDoc = JSON.parse(JSON.stringify(res)); + if (_resDoc?.IsEnableOTP) { + if (!request?.user) { + throw new Parse.Error( + Parse.Error.INVALID_SESSION_TOKEN, + 'User is not authenticated.' + ); + } else { + let adapterConfig = {}; + if (IsFileAdapter) { + // `FileAdapter` && `ActiveFileAdapter` is used to save file in user's fileAdapter + const FileAdapter = _resDoc?.ExtUserPtr?.TenantId?.FileAdapter; + const ActiveFileAdapter = _resDoc?.ExtUserPtr?.TenantId?.ActiveFileAdapter; + if (FileAdapter && ActiveFileAdapter) { + adapterConfig = { ActiveFileAdapter: ActiveFileAdapter, ...FileAdapter }; + } + } + const presignedUrl = getPresignedUrl(url, adapterConfig); + return presignedUrl; + } + } else { + const FileAdapter = _resDoc?.ExtUserPtr?.TenantId?.FileAdapter; + const ActiveFileAdapter = _resDoc?.ExtUserPtr?.TenantId?.ActiveFileAdapter; + let adapterConfig = {}; + if (FileAdapter && ActiveFileAdapter) { + adapterConfig = { ActiveFileAdapter: ActiveFileAdapter, ...FileAdapter }; + } + const presignedUrl = getPresignedUrl(url, adapterConfig); + return presignedUrl; + } } + } else { + return url; } } catch (err) { console.log('Err in presigned url', err); diff --git a/apps/OpenSignServer/cloud/parsefunction/getUserDetails.js b/apps/OpenSignServer/cloud/parsefunction/getUserDetails.js index bb07ca322..c2310665b 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getUserDetails.js +++ b/apps/OpenSignServer/cloud/parsefunction/getUserDetails.js @@ -14,6 +14,7 @@ async function getUserDetails(request) { userQuery.include('UserId'); userQuery.include('CreatedBy'); userQuery.exclude('CreatedBy.authData'); + userQuery.exclude('TenantId.FileAdapter'); userQuery.exclude('google_refresh_token'); if (userId) { userQuery.equalTo('CreatedBy', { __type: 'Pointer', className: '_User', objectId: userId }); diff --git a/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.js b/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.js index d9fc2f94a..e35c70e4f 100644 --- a/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.js +++ b/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.js @@ -6,18 +6,35 @@ import { pdflibAddPlaceholder } from '@signpdf/placeholder-pdf-lib'; import { PDFDocument } from 'pdf-lib'; import { cloudServerUrl, replaceMailVaribles, saveFileUsage } from '../../../Utils.js'; import GenerateCertificate from './GenerateCertificate.js'; +import uploadFileToS3 from '../uploadFiletoS3.js'; const serverUrl = cloudServerUrl; // process.env.SERVER_URL; const APPID = process.env.APP_ID; const masterKEY = process.env.MASTER_KEY; const eSignName = 'opensign'; const eSigncontact = 'hello@opensignlabs.com'; // `updateDoc` is used to create url in from pdfFile -async function uploadFile(pdfName, filepath) { +async function uploadFile(pdfName, filepath, adapter) { try { const filedata = fs.readFileSync(filepath); - const file = new Parse.File(pdfName, [...filedata], 'application/pdf'); - await file.save({ useMasterKey: true }); - const fileUrl = file.url(); + let fileUrl; + if (adapter?.bucketName) { + const adapterConfig = { + fileAdapter: adapter?.ActiveFileAdapter, + bucketName: adapter?.bucketName, + region: adapter?.region, + endpoint: adapter?.endpoint, + accessKeyId: adapter?.accessKeyId, + secretAccessKey: adapter?.secretAccessKey, + baseUrl: adapter?.baseUrl, + }; + // `uploadFileToS3` is used to save document in user's file storage + fileUrl = await uploadFileToS3(filedata, pdfName, 'application/pdf', adapterConfig); + } else { + const file = new Parse.File(pdfName, [...filedata], 'application/pdf'); + await file.save({ useMasterKey: true }); + fileUrl = file.url(); + } + return { imageUrl: fileUrl }; } catch (err) { console.log('Err ', err); @@ -79,7 +96,7 @@ async function updateDoc(docId, url, userId, ipAddress, data, className, sign) { // `sendCompletedMail` is used to send copy of completed document mail async function sendCompletedMail(obj) { - const url = obj.url; + const url = obj.doc?.SignedUrl; const doc = obj.doc; const sender = obj.doc.ExtUserPtr; const pdfName = doc.Name; @@ -223,7 +240,7 @@ async function sendDoctoWebhook(doc, Url, event, signUser, certificateUrl) { } // `sendMailsaveCertifcate` is used send completion mail and update complete status of document -const sendMailsaveCertifcate = async (doc, P12Buffer, url, isCustomMail, mailProvider, userId) => { +async function sendMailsaveCertifcate(doc, P12Buffer, isCustomMail, mailProvider, adapterConfig) { const certificate = await GenerateCertificate(doc); const certificatePdf = await PDFDocument.load(certificate); const p12 = new P12Signer(P12Buffer, { passphrase: process.env.PASS_PHRASE || null }); @@ -245,7 +262,7 @@ const sendMailsaveCertifcate = async (doc, P12Buffer, url, isCustomMail, mailPro //below is used to save signed certificate in exports folder fs.writeFileSync('./exports/certificate.pdf', signedCertificate); - const file = await uploadFile('certificate.pdf', './exports/certificate.pdf'); + const file = await uploadFile('certificate.pdf', './exports/certificate.pdf', adapterConfig); const body = { CertificateUrl: file.imageUrl }; await axios.put(serverUrl + '/classes/contracts_Document/' + doc.objectId, body, { headers: { @@ -258,12 +275,11 @@ const sendMailsaveCertifcate = async (doc, P12Buffer, url, isCustomMail, mailPro if (doc.IsSendMail === false) { console.log("don't send mail"); } else { - const mailObj = { url: url, isCustomMail: isCustomMail, doc: doc, mailProvider: mailProvider }; - sendCompletedMail(mailObj); + sendCompletedMail({ isCustomMail, doc, mailProvider }); } - saveFileUsage(CertificateBuffer.length, file.imageUrl, userId); - sendDoctoWebhook(doc, url, 'completed', '', file.imageUrl); -}; + saveFileUsage(CertificateBuffer.length, file.imageUrl, doc?.CreatedBy?.objectId); + sendDoctoWebhook(doc, doc?.SignedUrl, 'completed', '', file.imageUrl); +} /** * * @param docId Id of Document in which user is signing @@ -280,7 +296,7 @@ async function PDF(req) { const sign = req.params.signature || ''; // below bode is used to get info of docId const docQuery = new Parse.Query('contracts_Document'); - docQuery.include('ExtUserPtr,Signers'); + docQuery.include('ExtUserPtr,Signers,ExtUserPtr.TenantId'); docQuery.equalTo('objectId', docId); const resDoc = await docQuery.first({ useMasterKey: true }); if (!resDoc) { @@ -294,6 +310,13 @@ async function PDF(req) { } } const _resDoc = resDoc?.toJSON(); + // `FileAdapter` && `ActiveFileAdapter` is used to save file in user's fileAdapter + const FileAdapter = _resDoc?.ExtUserPtr?.TenantId?.FileAdapter; + const ActiveFileAdapter = _resDoc?.ExtUserPtr?.TenantId?.ActiveFileAdapter; + let adapterConfig = {}; + if (FileAdapter && ActiveFileAdapter) { + adapterConfig = { ActiveFileAdapter: ActiveFileAdapter, ...FileAdapter }; + } let signUser; let className; // `reqUserId` is send throught pdfrequest signing flow @@ -339,7 +362,7 @@ async function PDF(req) { } const randomNumber = Math.floor(Math.random() * 5000); const name = `exported_file_${randomNumber}.pdf`; - const pdfName = `./exports/${name}`; + const filePath = `./exports/${name}`; let pdfSize = PdfBuffer.length; if (isCompleted) { const signersName = _resDoc.Signers?.map(x => x.Name + ' <' + x.Email + '>'); @@ -376,22 +399,22 @@ async function PDF(req) { const signedDocs = await OBJ.sign(PdfBuffer, p12Cert); //`saveUrl` is used to save signed pdf in exports folder - const saveUrl = fs.writeFileSync(pdfName, signedDocs); + fs.writeFileSync(filePath, signedDocs); pdfSize = signedDocs.length; } else { //`saveUrl` is used to save signed pdf in exports folder - const saveUrl = fs.writeFileSync(pdfName, PdfBuffer); + fs.writeFileSync(filePath, PdfBuffer); pdfSize = PdfBuffer.length; } // `uploadFile` is used to upload pdf to aws s3 and get it's url - const data = await uploadFile(name, pdfName); + const data = await uploadFile(name, filePath, adapterConfig); if (data && data.imageUrl) { // `axios` is used to update signed pdf url in contracts_Document classes for given DocId const updatedDoc = await updateDoc( req.params.docId, //docId - data.imageUrl, // url + data.imageUrl, // SignedUrl signUser.objectId, // userID userIP, // client ipAddress, _resDoc, // auditTrail, signers, etc data @@ -401,19 +424,12 @@ async function PDF(req) { sendDoctoWebhook(_resDoc, data.imageUrl, 'signed', signUser); saveFileUsage(pdfSize, data.imageUrl, _resDoc?.CreatedBy?.objectId); if (updatedDoc && updatedDoc.isCompleted) { - const doc = { ..._resDoc, AuditTrail: updatedDoc.AuditTrail }; - sendMailsaveCertifcate( - doc, - P12Buffer, - data.imageUrl, - isCustomMail, - mailProvider, - _resDoc?.CreatedBy?.objectId - ); + const doc = { ..._resDoc, AuditTrail: updatedDoc.AuditTrail, SignedUrl: data.imageUrl }; + sendMailsaveCertifcate(doc, P12Buffer, isCustomMail, mailProvider, adapterConfig); } // `fs.unlinkSync` is used to remove exported signed pdf file from exports folder - fs.unlinkSync(pdfName); - console.log(`New Signed PDF created called: ${pdfName}`); + fs.unlinkSync(filePath); + console.log(`New Signed PDF created called: ${filePath}`); if (updatedDoc.message === 'success') { return { status: 'success', data: data.imageUrl }; } else { diff --git a/apps/OpenSignServer/cloud/parsefunction/reportsJson.js b/apps/OpenSignServer/cloud/parsefunction/reportsJson.js index 68c91aa70..112ad2a60 100644 --- a/apps/OpenSignServer/cloud/parsefunction/reportsJson.js +++ b/apps/OpenSignServer/cloud/parsefunction/reportsJson.js @@ -29,6 +29,7 @@ export default function reportJson(id, userId) { 'Signers.Phone', 'Placeholders', 'IsSignyourself', + 'IsFileAdapter', ], }; @@ -74,6 +75,7 @@ export default function reportJson(id, userId) { 'AuditTrail', 'Placeholders', 'SignedUrl', + 'IsFileAdapter', ], }; // In progess report @@ -113,6 +115,7 @@ export default function reportJson(id, userId) { 'SendMail', 'Placeholders', 'SignedUrl', + 'IsFileAdapter', ], }; // completed documents report @@ -144,6 +147,7 @@ export default function reportJson(id, userId) { 'Placeholders', 'IsSignyourself', 'IsCompleted', + 'IsFileAdapter', ], }; // declined documents report @@ -173,6 +177,7 @@ export default function reportJson(id, userId) { 'Placeholders', 'DeclineReason', 'SignedUrl', + 'IsFileAdapter', ], }; // Expired Documents report @@ -205,6 +210,7 @@ export default function reportJson(id, userId) { 'Signers.Phone', 'Placeholders', 'SignedUrl', + 'IsFileAdapter', ], }; // Recently sent for signatures report show on dashboard @@ -242,6 +248,7 @@ export default function reportJson(id, userId) { 'ExpiryDate', 'Placeholders', 'SignedUrl', + 'IsFileAdapter', ], }; // Recent signature requests report show on dashboard @@ -284,6 +291,7 @@ export default function reportJson(id, userId) { 'Signers.Phone', 'Placeholders', 'SignedUrl', + 'IsFileAdapter', ], }; // Drafts report show on dashboard @@ -312,6 +320,7 @@ export default function reportJson(id, userId) { 'Signers.Email', 'Signers.Phone', 'Placeholders', + 'IsFileAdapter', ], }; // contact book report @@ -352,6 +361,7 @@ export default function reportJson(id, userId) { 'IsPublic', 'SharedWith.Name', 'SendinOrder', + 'IsFileAdapter', ], }; default: diff --git a/apps/OpenSignServer/cloud/parsefunction/saveToFileAdapter.js b/apps/OpenSignServer/cloud/parsefunction/saveToFileAdapter.js new file mode 100644 index 000000000..02daeab91 --- /dev/null +++ b/apps/OpenSignServer/cloud/parsefunction/saveToFileAdapter.js @@ -0,0 +1,56 @@ +import uploadFileToS3 from './uploadFiletoS3.js'; + +export default async function saveToFileAdapter(request) { + if (!request?.user) { + throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.'); + } + + if (!request.params.fileBase64) { + throw new Parse.Error(Parse.Error.INVALID_QUERY, 'Please provide file.'); + } + const fileBase64 = request.params.fileBase64; + try { + const extCls = new Parse.Query('contracts_Users'); + extCls.equalTo('UserId', request.user); + extCls.include('TenantId'); + const resExt = await extCls.first({ useMasterKey: true }); + if (resExt) { + const _resExt = JSON.parse(JSON.stringify(resExt)); + + if (_resExt?.TenantId.FileAdapter?.accessKeyId) { + const adapterConfig = { + fileAdapter: _resExt?.TenantId?.ActiveFileAdapter, + bucketName: _resExt?.TenantId?.FileAdapter?.bucketName, + region: _resExt?.TenantId?.FileAdapter?.region, + endpoint: _resExt?.TenantId?.FileAdapter?.endpoint, + accessKeyId: _resExt?.TenantId?.FileAdapter?.accessKeyId, + secretAccessKey: _resExt?.TenantId?.FileAdapter?.secretAccessKey, + baseUrl: _resExt?.TenantId?.FileAdapter?.baseUrl, + }; + const buffer = Buffer.from(fileBase64, 'base64'); + const fileName = request.params.fileName; + const ext = request.params.fileName?.split('.')?.pop(); + let mimeType; + if (ext === 'pdf') { + mimeType = 'application/pdf'; + } else if (ext === 'png' || ext === 'jpeg' || ext === 'jpg') { + mimeType = `image/${ext}`; + } + try { + const presignedUrl = await uploadFileToS3(buffer, fileName, mimeType, adapterConfig); + return { url: presignedUrl }; + } catch (err) { + console.error('Error generate presigned url:', err); + throw new Parse.Error(400, 'Something went wrong.'); + } + } else { + throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'S3 credentials not found.'); + } + } else { + throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'User not found.'); + } + } catch (err) { + console.log('err in savetoS3', err); + throw err; + } +} diff --git a/apps/OpenSignServer/cloud/parsefunction/uploadFiletoS3.js b/apps/OpenSignServer/cloud/parsefunction/uploadFiletoS3.js new file mode 100644 index 000000000..7947b69c6 --- /dev/null +++ b/apps/OpenSignServer/cloud/parsefunction/uploadFiletoS3.js @@ -0,0 +1,38 @@ +import { S3Client, PutObjectCommand, GetObjectCommand } from '@aws-sdk/client-s3'; +import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; +import * as crypto from 'node:crypto'; +async function uploadFileToS3(buffer, fileName, mimeType, adapter) { + const bucketName = adapter?.bucketName; + let client; + if (adapter?.fileAdapter === 'digitalocean') { + client = new S3Client({ + endpoint: adapter?.endpoint, + region: adapter?.region, + credentials: { accessKeyId: adapter?.accessKeyId, secretAccessKey: adapter?.secretAccessKey }, + }); + } else { + client = new S3Client({ + region: adapter?.region, + credentials: { accessKeyId: adapter?.accessKeyId, secretAccessKey: adapter?.secretAccessKey }, + }); + } + const prefixId = crypto.randomBytes(16).toString('hex'); + const fileKey = `${prefixId}_${fileName}`; + const uploadParams = { Bucket: bucketName, Key: fileKey, Body: buffer, ContentType: mimeType }; + + try { + // Upload the buffer to the Space + const command = new PutObjectCommand(uploadParams); + await client.send(command); + const getCommand = new GetObjectCommand({ Bucket: bucketName, Key: fileKey }); + + // Generate a presigned URL for the uploaded file + const presignedUrl = await getSignedUrl(client, getCommand, { expiresIn: 900 }); // URL expiration time in seconds (e.g., 15 min) + return presignedUrl; + } catch (error) { + console.error('Error uploading file to aws:', error); + throw error; + } +} + +export default uploadFileToS3; diff --git a/apps/OpenSignServer/databases/migrations/20241004104551-isfileadapter_doccls.cjs b/apps/OpenSignServer/databases/migrations/20241004104551-isfileadapter_doccls.cjs new file mode 100644 index 000000000..109feeb44 --- /dev/null +++ b/apps/OpenSignServer/databases/migrations/20241004104551-isfileadapter_doccls.cjs @@ -0,0 +1,21 @@ +/** + * + * @param {Parse} Parse + */ +exports.up = async Parse => { + const className = 'contracts_Document'; + const schema = new Parse.Schema(className); + schema.addBoolean('IsFileAdapter'); + return schema.update(); +}; + +/** + * + * @param {Parse} Parse + */ +exports.down = async Parse => { + const className = 'contracts_Document'; + const schema = new Parse.Schema(className); + schema.deleteField('IsFileAdapter'); + return schema.update(); +}; diff --git a/apps/OpenSignServer/package-lock.json b/apps/OpenSignServer/package-lock.json index cd5e58bb6..a586f8e63 100644 --- a/apps/OpenSignServer/package-lock.json +++ b/apps/OpenSignServer/package-lock.json @@ -9,6 +9,8 @@ "version": "1.4.0", "license": "MIT", "dependencies": { + "@aws-sdk/client-s3": "^3.664.0", + "@aws-sdk/s3-request-presigner": "^3.664.0", "@parse/fs-files-adapter": "^3.0.0", "@parse/s3-files-adapter": "^2.2.0", "@pdf-lib/fontkit": "^1.1.1", @@ -23,7 +25,6 @@ "form-data": "^4.0.0", "generate-api-key": "^1.0.2", "googleapis": "^144.0.0", - "jsonschema": "^1.4.1", "mailgun.js": "^10.2.3", "mongoose": "^8.7.0", "multer": "^1.4.5-lts.1", @@ -32,17 +33,17 @@ "nodemailer": "^6.9.15", "parse": "^5.3.0", "parse-dbtool": "^1.2.0", - "parse-server": "^7.3.0-alpha.8", + "parse-server": "^7.3.0", "parse-server-api-mail-adapter": "^4.0.0", "pdf-lib": "^1.17.1", "posthog-node": "^4.2.0", "ws": "^8.18.0" }, "devDependencies": { - "@babel/eslint-parser": "^7.25.1", + "@babel/eslint-parser": "^7.25.7", "eslint": "^9.11.1", - "jasmine": "^5.3.0", - "mongodb-runner": "^5.6.6", + "jasmine": "^5.3.1", + "mongodb-runner": "^5.7.0", "nodemon": "^3.1.7", "nyc": "^17.1.0", "prettier": "^3.3.3" @@ -345,7 +346,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", - "peer": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -359,7 +359,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", - "peer": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -370,7 +369,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", - "peer": true, "dependencies": { "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", @@ -384,7 +382,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -396,7 +393,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "peer": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -409,7 +405,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "peer": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -422,7 +417,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", - "peer": true, "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -437,7 +431,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -449,7 +442,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "peer": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -462,7 +454,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "peer": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -475,7 +466,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", - "peer": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -489,7 +479,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", - "peer": true, "dependencies": { "tslib": "^2.6.2" } @@ -498,7 +487,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "peer": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -509,7 +497,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -521,7 +508,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "peer": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -534,7 +520,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "peer": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -544,68 +529,67 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.629.0.tgz", - "integrity": "sha512-Q0YXKdUA7NboPl94JOKD4clHHuERG1Kwy0JPbU+3Hvmz/UuwUGBmlfaRAqd9y4LXsTv/2xKtFPW9R+nBfy9mwA==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.664.0.tgz", + "integrity": "sha512-DKGTqHilRJnFt38YRtxZL0Tuw4DuTgr3i017v8lUDW7aOo+5Fqa3FFwFPliFsb3WQRiLsrvUpQT8Zx4GM3/Xrw==", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.629.0", - "@aws-sdk/client-sts": "3.629.0", - "@aws-sdk/core": "3.629.0", - "@aws-sdk/credential-provider-node": "3.629.0", - "@aws-sdk/middleware-bucket-endpoint": "3.620.0", - "@aws-sdk/middleware-expect-continue": "3.620.0", - "@aws-sdk/middleware-flexible-checksums": "3.620.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-location-constraint": "3.609.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-sdk-s3": "3.629.0", - "@aws-sdk/middleware-ssec": "3.609.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/signature-v4-multi-region": "3.629.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@aws-sdk/xml-builder": "3.609.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.2", - "@smithy/eventstream-serde-browser": "^3.0.6", - "@smithy/eventstream-serde-config-resolver": "^3.0.3", - "@smithy/eventstream-serde-node": "^3.0.5", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-blob-browser": "^3.1.2", - "@smithy/hash-node": "^3.0.3", - "@smithy/hash-stream-node": "^3.1.2", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/md5-js": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", + "@aws-sdk/client-sso-oidc": "3.664.0", + "@aws-sdk/client-sts": "3.664.0", + "@aws-sdk/core": "3.664.0", + "@aws-sdk/credential-provider-node": "3.664.0", + "@aws-sdk/middleware-bucket-endpoint": "3.664.0", + "@aws-sdk/middleware-expect-continue": "3.664.0", + "@aws-sdk/middleware-flexible-checksums": "3.664.0", + "@aws-sdk/middleware-host-header": "3.664.0", + "@aws-sdk/middleware-location-constraint": "3.664.0", + "@aws-sdk/middleware-logger": "3.664.0", + "@aws-sdk/middleware-recursion-detection": "3.664.0", + "@aws-sdk/middleware-sdk-s3": "3.664.0", + "@aws-sdk/middleware-ssec": "3.664.0", + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/region-config-resolver": "3.664.0", + "@aws-sdk/signature-v4-multi-region": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@aws-sdk/util-user-agent-browser": "3.664.0", + "@aws-sdk/util-user-agent-node": "3.664.0", + "@aws-sdk/xml-builder": "3.662.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.7", + "@smithy/eventstream-serde-browser": "^3.0.10", + "@smithy/eventstream-serde-config-resolver": "^3.0.7", + "@smithy/eventstream-serde-node": "^3.0.9", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-blob-browser": "^3.1.6", + "@smithy/hash-node": "^3.0.7", + "@smithy/hash-stream-node": "^3.1.6", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/md5-js": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.22", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.14", - "@smithy/util-defaults-mode-node": "^3.0.14", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-stream": "^3.1.3", + "@smithy/util-defaults-mode-browser": "^3.0.22", + "@smithy/util-defaults-mode-node": "^3.0.22", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", + "@smithy/util-stream": "^3.1.9", "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.2", + "@smithy/util-waiter": "^3.1.6", "tslib": "^2.6.2" }, "engines": { @@ -613,47 +597,46 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.629.0.tgz", - "integrity": "sha512-2w8xU4O0Grca5HmT2dXZ5fF0g39RxODtmoqHJDsK5DSt750LqDG4w3ktmBvQs3+SrpkkJOjlX5v/hb2PCxVbww==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.664.0.tgz", + "integrity": "sha512-E0MObuGylqY2yf47bZZAFK+4+C13c4Cs3HobXgCV3+myoHaxxQHltQuGrapxWOiJJzNmABKEPjBcMnRWnZHXCQ==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.629.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.2", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", + "@aws-sdk/core": "3.664.0", + "@aws-sdk/middleware-host-header": "3.664.0", + "@aws-sdk/middleware-logger": "3.664.0", + "@aws-sdk/middleware-recursion-detection": "3.664.0", + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/region-config-resolver": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@aws-sdk/util-user-agent-browser": "3.664.0", + "@aws-sdk/util-user-agent-node": "3.664.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.7", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.22", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.14", - "@smithy/util-defaults-mode-node": "^3.0.14", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", + "@smithy/util-defaults-mode-browser": "^3.0.22", + "@smithy/util-defaults-mode-node": "^3.0.22", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -662,48 +645,47 @@ } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.629.0.tgz", - "integrity": "sha512-3if0LauNJPqubGYf8vnlkp+B3yAeKRuRNxfNbHlE6l510xWGcKK/ZsEmiFmfePzKKSRrDh/cxMFMScgOrXptNg==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.664.0.tgz", + "integrity": "sha512-VgnAnQwt88oj6OSnIEouvTKN8JI2PzcC3qWQSL87ZtzBSscfrSwbtBNqBxk6nQWwE7AlZuzvT7IN6loz6c7kGA==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.629.0", - "@aws-sdk/credential-provider-node": "3.629.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.2", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", + "@aws-sdk/core": "3.664.0", + "@aws-sdk/credential-provider-node": "3.664.0", + "@aws-sdk/middleware-host-header": "3.664.0", + "@aws-sdk/middleware-logger": "3.664.0", + "@aws-sdk/middleware-recursion-detection": "3.664.0", + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/region-config-resolver": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@aws-sdk/util-user-agent-browser": "3.664.0", + "@aws-sdk/util-user-agent-node": "3.664.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.7", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.22", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.14", - "@smithy/util-defaults-mode-node": "^3.0.14", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", + "@smithy/util-defaults-mode-browser": "^3.0.22", + "@smithy/util-defaults-mode-node": "^3.0.22", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -711,53 +693,52 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.629.0" + "@aws-sdk/client-sts": "^3.664.0" } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.629.0.tgz", - "integrity": "sha512-RjOs371YwnSVGxhPjuluJKaxl4gcPYTAky0nPjwBime0i9/iS9nI8R8l5j7k7ec9tpFWjBPvNnThCU07pvjdzw==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.664.0.tgz", + "integrity": "sha512-+kFS+B/U/thLi8yxYgKc7QFsababYrgrIkbVgTvSzudkzk5RIlDu753L/DfXqYOtecbc6WUwlTKA+Ltee3OVXg==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.629.0", - "@aws-sdk/core": "3.629.0", - "@aws-sdk/credential-provider-node": "3.629.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.2", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", + "@aws-sdk/client-sso-oidc": "3.664.0", + "@aws-sdk/core": "3.664.0", + "@aws-sdk/credential-provider-node": "3.664.0", + "@aws-sdk/middleware-host-header": "3.664.0", + "@aws-sdk/middleware-logger": "3.664.0", + "@aws-sdk/middleware-recursion-detection": "3.664.0", + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/region-config-resolver": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@aws-sdk/util-user-agent-browser": "3.664.0", + "@aws-sdk/util-user-agent-node": "3.664.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.7", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.22", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.14", - "@smithy/util-defaults-mode-node": "^3.0.14", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", + "@smithy/util-defaults-mode-browser": "^3.0.22", + "@smithy/util-defaults-mode-node": "^3.0.22", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -766,19 +747,19 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.629.0.tgz", - "integrity": "sha512-+/ShPU/tyIBM3oY1cnjgNA/tFyHtlWq+wXF9xEKRv19NOpYbWQ+xzNwVjGq8vR07cCRqy/sDQLWPhxjtuV/FiQ==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.664.0.tgz", + "integrity": "sha512-QdfMpTpJqtpuFIFfUJEgJ+Rq/dO3I5iaViLKr9Zad4Gfi/GiRWTeXd4IvjcyRntB5GkyCak9RKMkxkECQavPJg==", "dependencies": { - "@smithy/core": "^2.3.2", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", + "@aws-sdk/types": "3.664.0", + "@smithy/core": "^2.4.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/property-provider": "^3.1.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/signature-v4": "^4.2.0", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/util-middleware": "^3.0.7", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, @@ -787,14 +768,13 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", - "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.664.0.tgz", + "integrity": "sha512-95rE+9Voaco0nmKJrXqfJAxSSkSWqlBy76zomiZrUrv7YuijQtHCW8jte6v6UHAFAaBzgFsY7QqBxs15u9SM7g==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -802,19 +782,18 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.622.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz", - "integrity": "sha512-VUHbr24Oll1RK3WR8XLUugLpgK9ZuxEm/NVeVqyFts1Ck9gsKpRg1x4eH7L7tW3SJ4TDEQNMbD7/7J+eoL2svg==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.664.0.tgz", + "integrity": "sha512-svaPwVfWV3g/qjd4cYHTUyBtkdOwcVjC+tSj6EjoMrpZwGUXcCbYe04iU0ARZ6tuH/u3vySbTLOGjSa7g8o9Qw==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", + "@aws-sdk/types": "3.664.0", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/util-stream": "^3.1.9", "tslib": "^2.6.2" }, "engines": { @@ -822,47 +801,45 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.629.0.tgz", - "integrity": "sha512-r9fI7BABARvVDp77DBUImQzYdvarAIdhbvpCEZib0rlpvfWu3zxE9KZcapCAAi0MPjxeDfb7RMehFQIkAP7mYw==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.664.0.tgz", + "integrity": "sha512-ykRLQi9gqY7xlgC33iEWyPMv19JDMpOqQfqb5zaV46NteT60ouBrS3WsCrDiwygF7HznGLpr0lpt17/C6Mq27g==", "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.622.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.629.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/credential-provider-env": "3.664.0", + "@aws-sdk/credential-provider-http": "3.664.0", + "@aws-sdk/credential-provider-process": "3.664.0", + "@aws-sdk/credential-provider-sso": "3.664.0", + "@aws-sdk/credential-provider-web-identity": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.629.0" + "@aws-sdk/client-sts": "^3.664.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.629.0.tgz", - "integrity": "sha512-868hnVOLlXOBHk91Rl0jZIRgr/M4WJCa0nOrW9A9yidsQxuZp9P0vshDmm4hMvNZadmPIfo0Rra2MpA4RELoCw==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.664.0.tgz", + "integrity": "sha512-JrLtx4tEtEzqYAmk+pz8B7QcBCNRN+lZAh3fbQox7q9YQaIELLM3MA6LM5kEp/uHop920MQvdhHOMtR5jjJqWA==", "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.622.0", - "@aws-sdk/credential-provider-ini": "3.629.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.629.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/credential-provider-env": "3.664.0", + "@aws-sdk/credential-provider-http": "3.664.0", + "@aws-sdk/credential-provider-ini": "3.664.0", + "@aws-sdk/credential-provider-process": "3.664.0", + "@aws-sdk/credential-provider-sso": "3.664.0", + "@aws-sdk/credential-provider-web-identity": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -870,15 +847,14 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", - "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.664.0.tgz", + "integrity": "sha512-sQicIw/qWTsmMw8EUQNJXdrWV5SXaZc2zGdCQsQxhR6wwNO2/rZ5JmzdcwUADmleBVyPYk3KGLhcofF/qXT2Ng==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -886,17 +862,16 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.629.0.tgz", - "integrity": "sha512-Lf4XOuj6jamxgGZGrVojERh5S+NS2t2S4CUOnAu6tJ5U0GPlpjhINUKlcVxJBpsIXudMGW1nkumAd3+kazCPig==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.664.0.tgz", + "integrity": "sha512-r7m+XkTAvGT9nW4aHqjWOHcoo3EfUsXx6d9JJjWn/gnvdsvhobCJx8p621aR9WeSBUTKJg5+EXGhZF6awRdZGQ==", "dependencies": { - "@aws-sdk/client-sso": "3.629.0", - "@aws-sdk/token-providers": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/client-sso": "3.664.0", + "@aws-sdk/token-providers": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -904,21 +879,20 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", - "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.664.0.tgz", + "integrity": "sha512-10ltP1BfSKRJVXd8Yr5oLbo+VSDskWbps0X3szSsxTk0Dju1xvkz7hoIjylWLvtGbvQ+yb2pmsJYKCudW/4DJg==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.621.0" + "@aws-sdk/client-sts": "^3.664.0" } }, "node_modules/@aws-sdk/lib-storage": { @@ -959,16 +933,15 @@ } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz", - "integrity": "sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.664.0.tgz", + "integrity": "sha512-KP+foxGaAclhRI63ElZPvVeG5oajkbNhE7wiW34UoSw8wI2l+lmm36zkiebfP4K5HRyADS+KvGw95851N++s2A==", "dependencies": { - "@aws-sdk/types": "3.609.0", + "@aws-sdk/types": "3.664.0", "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", "@smithy/util-config-provider": "^3.0.0", "tslib": "^2.6.2" }, @@ -977,14 +950,13 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz", - "integrity": "sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.664.0.tgz", + "integrity": "sha512-7hvF+HQhDFvBCzxWFmFOa6tWkVjRAaTR/Ltt03TAZ6JzfIayqnqKFvmdvYFfIeD2w3x4gx24zooRillFk4e3mQ==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.664.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -992,17 +964,18 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz", - "integrity": "sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.664.0.tgz", + "integrity": "sha512-XO3T3hFrGKeaTvnWGLbgii//9SAfxock57dz5x3Hutzw+9ckVvNroOWFNHvyTPSDJ+w5Vwq5mLWVDs9tlejBtg==", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", - "@aws-sdk/types": "3.609.0", + "@aws-sdk/types": "3.664.0", "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "@smithy/util-middleware": "^3.0.7", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -1011,14 +984,13 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", - "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.664.0.tgz", + "integrity": "sha512-4tCXJ+DZWTq38eLmFgnEmO8X4jfWpgPbWoCyVYpRHCPHq6xbrU65gfwS9jGx25L4YdEce641ChI9TKLryuUgRA==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.664.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -1026,13 +998,12 @@ } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.609.0.tgz", - "integrity": "sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.664.0.tgz", + "integrity": "sha512-hHMdJqq83cDnSTVhrSDsOrm1DyFtS1rteSwuqN7dGNr093bluCqH1VpnS/8juYzux8QGnzRecs9qV3hncGGxPw==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.664.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -1040,13 +1011,12 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", - "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.664.0.tgz", + "integrity": "sha512-eNykMqQuv7eg9pAcaLro44fscIe1VkFfhm+gYnlxd+PH6xqapRki1E68VHehnIptnVBdqnWfEqLUSLGm9suqhg==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.664.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -1054,14 +1024,13 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", - "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.664.0.tgz", + "integrity": "sha512-jq27WMZhm+dY8BWZ9Ipy3eXtZj0lJzpaKQE3A3tH5AOIlUV/gqrmnJ9CdqVVef4EJsq9Yil4ZzQjKKmPsxveQg==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.664.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -1069,23 +1038,22 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.629.0.tgz", - "integrity": "sha512-FRXLcnPWXBoq/T9mnGnrpqhrSKNSm22rqJ0L7P14KESmbGuwhF/7ELYYxXIpgnIpb/CIUVmIU5EE8lsW1VTe8A==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.664.0.tgz", + "integrity": "sha512-NzAVrsx4R7JZ6EPgZ0I71eRxSyW43rJYZwGkxgKmk94fh+UA7C2t0ntXwZwBrWPyH/f+P5aiz8iYL+qSbqYX8A==", "dependencies": { - "@aws-sdk/core": "3.629.0", - "@aws-sdk/types": "3.609.0", + "@aws-sdk/core": "3.664.0", + "@aws-sdk/types": "3.664.0", "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/core": "^2.3.2", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", + "@smithy/core": "^2.4.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/protocol-http": "^4.1.4", + "@smithy/signature-v4": "^4.2.0", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-stream": "^3.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-stream": "^3.1.9", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -1094,13 +1062,12 @@ } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.609.0.tgz", - "integrity": "sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.664.0.tgz", + "integrity": "sha512-uyMnxku5ygRxr/z4pO9ul8Rgn2CoFcKCaKnfHfTgVo2yV/jKHI3rAvyD3OtOO7k4S0odaJzss2Fw6GsIKZy5AQ==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.664.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -1108,15 +1075,15 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz", - "integrity": "sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.664.0.tgz", + "integrity": "sha512-Kp5UwXwayO6d472nntiwgrxqay2KS9ozXNmKjQfDrUWbEzvgKI+jgKNMia8MMnjSxYoBGpQ1B8NGh8a6KMEJJg==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@smithy/core": "^2.4.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -1124,16 +1091,33 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", - "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.664.0.tgz", + "integrity": "sha512-o/B8dg8K+9714RGYPgMxZgAChPe/MTSMkf/eHXTUFHNik5i1HgVKfac22njV2iictGy/6GhpFsKa1OWNYAkcUg==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.664.0", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/util-middleware": "^3.0.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/s3-request-presigner": { + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.664.0.tgz", + "integrity": "sha512-nXsqGdHSo9+hcxPsvAChg/kR7hqpuHIUA0XHlkgBcrpz6yjNwnXLQ3K7LP1DC1ELj5uTZPXqdKK+0wiATPUgRA==", + "dependencies": { + "@aws-sdk/signature-v4-multi-region": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-format-url": "3.664.0", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -1141,16 +1125,15 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.629.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.629.0.tgz", - "integrity": "sha512-GPX6dnmuLGDFp7CsGqGCzleEoNyr9ekgOzSBtcL5nKX++NruxO7f1QzJAbcYvz0gdKvz958UO0EKsGM6hnkTSg==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.664.0.tgz", + "integrity": "sha512-5g3yYecstcpSzJLRChGHK2Sy+YWONPWdKi5aJt/hLXEljVM8doXD9JWN6hb4OElWx2ASfaJZQk73Z7UwLKq/2Q==", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.629.0", - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/middleware-sdk-s3": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/signature-v4": "^4.2.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -1158,31 +1141,29 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", - "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.664.0.tgz", + "integrity": "sha512-dBAvXW2/6bAxidvKARFxyCY2uCynYBKRFN00NhS1T5ggxm3sUnuTpWw1DTjl02CVPkacBOocZf10h8pQbHSK8w==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.614.0" + "@aws-sdk/client-sso-oidc": "^3.664.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.664.0.tgz", + "integrity": "sha512-+GtXktvVgpreM2b+NJL9OqZGsOzHwlCUrO8jgQUvH/yA6Kd8QO2YFhQCp0C9sSzTteZJVqGBu8E0CQurxJHPbw==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -1193,7 +1174,6 @@ "version": "3.568.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", - "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1202,14 +1182,27 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz", - "integrity": "sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.664.0.tgz", + "integrity": "sha512-KrXoHz6zmAahVHkyWMRT+P6xJaxItgmklxEDrT+npsUB4d5C/lhw16Crcp9TDi828fiZK3GYKRAmmNhvmzvBNg==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "@smithy/util-endpoints": "^2.0.5", + "@aws-sdk/types": "3.664.0", + "@smithy/types": "^3.5.0", + "@smithy/util-endpoints": "^2.1.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-format-url": { + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.664.0.tgz", + "integrity": "sha512-fpaefMtChdaWD4mQ7PdFGl5x/+Z1ZoRWAUn8dXsOM+zoHWlebSN6AbfgKjyCPOvaHOgMJAF91FCP6d39NwaIuQ==", + "dependencies": { + "@aws-sdk/types": "3.664.0", + "@smithy/querystring-builder": "^3.0.7", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -1220,7 +1213,6 @@ "version": "3.568.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", - "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1229,26 +1221,25 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", - "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.664.0.tgz", + "integrity": "sha512-c/PV3+f1ss4PpskHbcOxTZ6fntV2oXy/xcDR9nW+kVaz5cM1G702gF0rvGLKPqoBwkj2rWGe6KZvEBeLzynTUQ==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.664.0", + "@smithy/types": "^3.5.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", - "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", - "peer": true, + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.664.0.tgz", + "integrity": "sha512-l/m6KkgrTw1p/VTJTk0IoP9I2OnpWp3WbBgzxoNeh9cUcxTufIn++sBxKj5hhDql57LKWsckScG/MhFuH0vZZA==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -1264,12 +1255,11 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.609.0.tgz", - "integrity": "sha512-l9XxNcA4HX98rwCC2/KoiWcmEiRfZe4G+mYwDbCFT87JIMj6GBhLDkAzr/W8KAaA2IDr8Vc6J8fZPgVulxxfMA==", - "peer": true, + "version": "3.662.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.662.0.tgz", + "integrity": "sha512-ikLkXn0igUpnJu2mCZjklvmcDGWT9OaLRv3JyC/cRkTaaSrblPjPM7KKsltxdMTLQ+v7fjCN0TsJpxphMfaOPA==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -1326,9 +1316,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz", - "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.7.tgz", + "integrity": "sha512-B+BO9x86VYsQHimucBAL1fxTJKF4wyKY6ZVzee9QgzdZOUfs3BaR6AQrgoGrRI+7IFS1wUz/VyQ+SoBcSpdPbw==", "dev": true, "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", @@ -3024,11 +3014,11 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.5.tgz", + "integrity": "sha512-DhNPnqTqPoG8aZ5dWkFOgsuY+i0GQ3CI6hMmvCoduNsnU9gUZWZBwGfDQsTTB7NvFPkom1df7jMIJWU90kuXXg==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3039,7 +3029,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", - "peer": true, "dependencies": { "tslib": "^2.6.2" } @@ -3048,22 +3037,20 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", - "peer": true, "dependencies": { "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/config-resolver": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", - "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", - "peer": true, + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.9.tgz", + "integrity": "sha512-5d9oBf40qC7n2xUoHmntKLdqsyTMMo/r49+eqSIjJ73eDfEtljAxEhzIQ3bkgXJtR3xiv7YzMT/3FF3ORkjWdg==", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/util-middleware": "^3.0.7", "tslib": "^2.6.2" }, "engines": { @@ -3071,18 +3058,19 @@ } }, "node_modules/@smithy/core": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.3.2.tgz", - "integrity": "sha512-in5wwt6chDBcUv1Lw1+QzZxN9fBffi+qOixfb65yK4sDuKG7zAUO9HAFqmVzsZM3N+3tTyvZjtnDXePpvp007Q==", - "peer": true, + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.7.tgz", + "integrity": "sha512-goqMjX+IoVEnHZjYuzu8xwoZjoteMiLXsPHuXPBkWsGwu0o9c3nTjqkUlP1Ez/V8E501aOU7CJ3INk8mQcW2gw==", "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.14", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.22", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { @@ -3090,15 +3078,14 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz", - "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==", - "peer": true, + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.4.tgz", + "integrity": "sha512-S9bb0EIokfYEuar4kEbLta+ivlKCWOCFsLZuilkNy9i0uEUEHSi47IFLPaxqqCl+0ftKmcOTHayY5nQhAuq7+w==", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", "tslib": "^2.6.2" }, "engines": { @@ -3106,25 +3093,23 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.2.tgz", - "integrity": "sha512-0mBcu49JWt4MXhrhRAlxASNy0IjDRFU+aWNDRal9OtUJvJNiwDuyKMUONSOjLjSCeGwZaE0wOErdqULer8r7yw==", - "peer": true, + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.6.tgz", + "integrity": "sha512-SBiOYPBH+5wOyPS7lfI150ePfGLhnp/eTu5RnV9xvhGvRiKfnl6HzRK9wehBph+il8FxS9KTeadx7Rcmf1GLPQ==", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "@smithy/util-hex-encoding": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.6.tgz", - "integrity": "sha512-2hM54UWQUOrki4BtsUI1WzmD13/SeaqT/AB3EUJKbcver/WgKNaiJ5y5F5XXuVe6UekffVzuUDrBZVAA3AWRpQ==", - "peer": true, + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.10.tgz", + "integrity": "sha512-1i9aMY6Pl/SmA6NjvidxnfBLHMPzhKu2BP148pEt5VwhMdmXn36PE2kWKGa9Hj8b0XGtCTRucpCncylevCtI7g==", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.5", - "@smithy/types": "^3.3.0", + "@smithy/eventstream-serde-universal": "^3.0.9", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3132,12 +3117,11 @@ } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.3.tgz", - "integrity": "sha512-NVTYjOuYpGfrN/VbRQgn31x73KDLfCXCsFdad8DiIc3IcdxL+dYA9zEQPyOP7Fy2QL8CPy2WE4WCUD+ZsLNfaQ==", - "peer": true, + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.7.tgz", + "integrity": "sha512-eVzhGQBPEqXXYHvIUku0jMTxd4gDvenRzUQPTmKVWdRvp9JUCKrbAXGQRYiGxUYq9+cqQckRm0wq3kTWnNtDhw==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3145,13 +3129,12 @@ } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.5.tgz", - "integrity": "sha512-+upXvnHNyZP095s11jF5dhGw/Ihzqwl5G+/KtMnoQOpdfC3B5HYCcDVG9EmgkhJMXJlM64PyN5gjJl0uXFQehQ==", - "peer": true, + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.9.tgz", + "integrity": "sha512-JE0Guqvt0xsmfQ5y1EI342/qtJqznBv8cJqkHZV10PwC8GWGU5KNgFbQnsVCcX+xF+qIqwwfRmeWoJCjuOLmng==", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.5", - "@smithy/types": "^3.3.0", + "@smithy/eventstream-serde-universal": "^3.0.9", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3159,13 +3142,12 @@ } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.5.tgz", - "integrity": "sha512-5u/nXbyoh1s4QxrvNre9V6vfyoLWuiVvvd5TlZjGThIikc3G+uNiG9uOTCWweSRjv1asdDIWK7nOmN7le4RYHQ==", - "peer": true, + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.9.tgz", + "integrity": "sha512-bydfgSisfepCufw9kCEnWRxqxJFzX/o8ysXWv+W9F2FIyiaEwZ/D8bBKINbh4ONz3i05QJ1xE7A5OKYvgJsXaw==", "dependencies": { - "@smithy/eventstream-codec": "^3.1.2", - "@smithy/types": "^3.3.0", + "@smithy/eventstream-codec": "^3.1.6", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3173,36 +3155,34 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz", + "integrity": "sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/querystring-builder": "^3.0.7", + "@smithy/types": "^3.5.0", "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-blob-browser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.2.tgz", - "integrity": "sha512-hAbfqN2UbISltakCC2TP0kx4LqXBttEv2MqSPE98gVuDFMf05lU+TpC41QtqGP3Ff5A3GwZMPfKnEy0VmEUpmg==", - "peer": true, + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.6.tgz", + "integrity": "sha512-BKNcMIaeZ9lB67sgo88iCF4YB35KT8X2dNJ8DqrtZNTgN6tUDYBKThzfGtos/mnZkGkW91AYHisESHmSiYQmKw==", "dependencies": { "@smithy/chunked-blob-reader": "^3.0.0", "@smithy/chunked-blob-reader-native": "^3.0.0", - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-node": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", - "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", - "peer": true, + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.7.tgz", + "integrity": "sha512-SAGHN+QkrwcHFjfWzs/czX94ZEjPJ0CrWJS3M43WswDXVEuP4AVy9gJ3+AF6JQHZD13bojmuf/Ap/ItDeZ+Qfw==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -3212,12 +3192,11 @@ } }, "node_modules/@smithy/hash-stream-node": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.2.tgz", - "integrity": "sha512-PBgDMeEdDzi6JxKwbfBtwQG9eT9cVwsf0dZzLXoJF4sHKHs5HEo/3lJWpn6jibfJwT34I1EBXpBnZE8AxAft6g==", - "peer": true, + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.6.tgz", + "integrity": "sha512-sFSSt7cmCpFWZPfVx7k80Bgb1K2VJ27VmMxH8X+dDhp7Wv8IBgID4K2VK5ehMJROF8hQgcj4WywnkHIwX/xlwQ==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -3226,12 +3205,11 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", - "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", - "peer": true, + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.7.tgz", + "integrity": "sha512-Bq00GsAhHeYSuZX8Kpu4sbI9agH2BNYnqUmmbTGWOhki9NVsWn2jFr896vvoTMH8KAjNX/ErC/8t5QHuEXG+IA==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" } }, @@ -3247,24 +3225,22 @@ } }, "node_modules/@smithy/md5-js": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.3.tgz", - "integrity": "sha512-O/SAkGVwpWmelpj/8yDtsaVe6sINHLB1q8YE/+ZQbDxIw3SRLbTZuRaI10K12sVoENdnHqzPp5i3/H+BcZ3m3Q==", - "peer": true, + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.7.tgz", + "integrity": "sha512-+wco9IN9uOW4tNGkZIqTR6IXyfO7Z8A+IOq82QCRn/f/xcmt7H1fXwmQVbfDSvbeFwfNnhv7s+u0G9PzPG6o2w==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/middleware-content-length": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz", - "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==", - "peer": true, + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.9.tgz", + "integrity": "sha512-t97PidoGElF9hTtLCrof32wfWMqC5g2SEJNxaVH3NjlatuNGsdxXRYO/t+RPnxA15RpYiS0f+zG7FuE2DeGgjA==", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3272,16 +3248,16 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.4.tgz", + "integrity": "sha512-/ChcVHekAyzUbyPRI8CzPPLj6y8QRAfJngWcLMgsWxKVzw/RzBV69mSOzJYDD3pRwushA1+5tHtPF8fjmzBnrQ==", "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "@smithy/util-middleware": "^3.0.7", "tslib": "^2.6.2" }, "engines": { @@ -3289,18 +3265,17 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.14.tgz", - "integrity": "sha512-7ZaWZJOjUxa5hgmuMspyt8v/zVsh0GXYuF7OvCmdcbVa/xbnKQoYC+uYKunAqRGTkxjOyuOCw9rmFUFOqqC0eQ==", - "peer": true, + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.22.tgz", + "integrity": "sha512-svEN7O2Tf7BoaBkPzX/8AE2Bv7p16d9/ulFAD1Gmn5g19iMqNk1WIkMxAY7SpB9/tVtUwKx0NaIsBRl88gumZA==", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/service-error-classification": "^3.0.3", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/protocol-http": "^4.1.4", + "@smithy/service-error-classification": "^3.0.7", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -3309,11 +3284,11 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.7.tgz", + "integrity": "sha512-VytaagsQqtH2OugzVTq4qvjkLNbWehHfGcGr0JLJmlDRrNCeZoWkWsSOw1nhS/4hyUUWF/TLGGml4X/OnEep5g==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3321,11 +3296,11 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.7.tgz", + "integrity": "sha512-EyTbMCdqS1DoeQsO4gI7z2Gzq1MoRFAeS8GkFYIwbedB7Lp5zlLHJdg+56tllIIG5Hnf9ZWX48YKSHlsKvugGA==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3333,13 +3308,13 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.8.tgz", + "integrity": "sha512-E0rU0DglpeJn5ge64mk8wTGEXcQwmpUTY5Zr7IzTpDLmHKiIamINERNZYrPQjg58Ck236sEKSwRSHA4CwshU6Q==", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3347,14 +3322,14 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.4.tgz", + "integrity": "sha512-49reY3+JgLMFNm7uTAKBWiKCA6XSvkNp9FqhVmusm2jpVnHORYFeFZ704LShtqWfjZW/nhX+7Iexyb6zQfXYIQ==", "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/abort-controller": "^3.1.5", + "@smithy/protocol-http": "^4.1.4", + "@smithy/querystring-builder": "^3.0.7", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3362,11 +3337,11 @@ } }, "node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.7.tgz", + "integrity": "sha512-QfzLi1GPMisY7bAM5hOUqBdGYnY5S2JAlr201pghksrQv139f8iiiMalXtjczIP5f6owxFn3MINLNUNvUkgtPw==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3374,11 +3349,11 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.4.tgz", + "integrity": "sha512-MlWK8eqj0JlpZBnWmjQLqmFp71Ug00P+m72/1xQB3YByXD4zZ+y9N4hYrR0EDmrUCZIkyATWHOXFgtavwGDTzQ==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3386,11 +3361,11 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.7.tgz", + "integrity": "sha512-65RXGZZ20rzqqxTsChdqSpbhA6tdt5IFNgG6o7e1lnPVLCe6TNWQq4rTl4N87hTDD8mV4IxJJnvyE7brbnRkQw==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "@smithy/util-uri-escape": "^3.0.0", "tslib": "^2.6.2" }, @@ -3399,11 +3374,11 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.7.tgz", + "integrity": "sha512-Fouw4KJVWqqUVIu1gZW8BH2HakwLz6dvdrAhXeXfeymOBrZw+hcqaWs+cS1AZPVp4nlbeIujYrKA921ZW2WMPA==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3411,23 +3386,22 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", - "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", - "peer": true, + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.7.tgz", + "integrity": "sha512-91PRkTfiBf9hxkIchhRKJfl1rsplRDyBnmyFca3y0Z3x/q0JJN480S83LBd8R6sBCkm2bBbqw2FHp0Mbh+ecSA==", "dependencies": { - "@smithy/types": "^3.3.0" + "@smithy/types": "^3.5.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.8.tgz", + "integrity": "sha512-0NHdQiSkeGl0ICQKcJQ2lCOKH23Nb0EaAa7RDRId6ZqwXkw4LJyIyZ0t3iusD4bnKYDPLGy2/5e2rfUhrt0Acw==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3435,16 +3409,15 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz", - "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==", - "peer": true, + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.0.tgz", + "integrity": "sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ==", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/util-middleware": "^3.0.7", "@smithy/util-uri-escape": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -3454,15 +3427,15 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.12.tgz", - "integrity": "sha512-wtm8JtsycthkHy1YA4zjIh2thJgIQ9vGkoR639DBx5lLlLNU0v4GARpQZkr2WjXue74nZ7MiTSWfVrLkyD8RkA==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.3.6.tgz", + "integrity": "sha512-qdH+mvDHgq1ss6mocyIl2/VjlWXew7pGwZQydwYJczEc22HZyX3k8yVPV9aZsbYbssHPvMDRA5rfBDrjQUbIIw==", "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "@smithy/util-stream": "^3.1.9", "tslib": "^2.6.2" }, "engines": { @@ -3470,9 +3443,9 @@ } }, "node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.5.0.tgz", + "integrity": "sha512-QN0twHNfe8mNJdH9unwsCK13GURU7oEAZqkBI+rsvpv1jrmserO+WnLE7jidR9W/1dxwZ0u/CB01mV2Gms/K2Q==", "dependencies": { "tslib": "^2.6.2" }, @@ -3481,12 +3454,12 @@ } }, "node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.7.tgz", + "integrity": "sha512-70UbSSR8J97c1rHZOWhl+VKiZDqHWxs/iW8ZHrHp5fCCPLSBE7GcUlUvKSle3Ca+J9LLbYCj/A79BxztBvAfpA==", "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/querystring-parser": "^3.0.7", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" } }, @@ -3507,7 +3480,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", - "peer": true, "dependencies": { "tslib": "^2.6.2" } @@ -3516,7 +3488,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", - "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -3540,7 +3511,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", - "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -3549,14 +3519,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.14.tgz", - "integrity": "sha512-0iwTgKKmAIf+vFLV8fji21Jb2px11ktKVxbX6LIDPAUJyWQqGqBVfwba7xwa1f2FZUoolYQgLvxQEpJycXuQ5w==", - "peer": true, + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.22.tgz", + "integrity": "sha512-WKzUxNsOun5ETwEOrvooXeI1mZ8tjDTOcN4oruELWHhEYDgQYWwxZupURVyovcv+h5DyQT/DzK5nm4ZoR/Tw5Q==", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -3565,17 +3534,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.14.tgz", - "integrity": "sha512-e9uQarJKfXApkTMMruIdxHprhcXivH1flYCe8JRDTzkkLx8dA3V5J8GZlST9yfDiRWkJpZJlUXGN9Rc9Ade3OQ==", - "peer": true, + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.22.tgz", + "integrity": "sha512-hUsciOmAq8fsGwqg4+pJfNRmrhfqMH4Y9UeGcgeUl88kPAoYANFATJqCND+O4nUvwp5TzsYwGpqpcBKyA8LUUg==", "dependencies": { - "@smithy/config-resolver": "^3.0.5", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.1.12", - "@smithy/types": "^3.3.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/property-provider": "^3.1.7", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3583,13 +3551,12 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", - "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", - "peer": true, + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.3.tgz", + "integrity": "sha512-34eACeKov6jZdHqS5hxBMJ4KyWKztTMulhuQ2UdOoP6vVxMLrOKUqIXAwJe/wiWMhXhydLW664B02CNpQBQ4Aw==", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3608,11 +3575,11 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.7.tgz", + "integrity": "sha512-OVA6fv/3o7TMJTpTgOi1H5OTwnuUa8hzRzhSFDtZyNxi6OZ70L/FHattSmhE212I7b6WSOJAAmbYnvcjTHOJCA==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3620,13 +3587,12 @@ } }, "node_modules/@smithy/util-retry": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", - "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", - "peer": true, + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.7.tgz", + "integrity": "sha512-nh1ZO1vTeo2YX1plFPSe/OXaHkLAHza5jpokNiiKX2M5YpNUv6RxGJZhpfmiR4jSvVHCjIDmILjrxKmP+/Ghug==", "dependencies": { - "@smithy/service-error-classification": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/service-error-classification": "^3.0.7", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -3634,13 +3600,13 @@ } }, "node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.9.tgz", + "integrity": "sha512-7YAR0Ub3MwTMjDfjnup4qa6W8gygZMxikBhFMPESi6ASsl/rZJhwLpF/0k9TuezScCojsM0FryGdz4LZtjKPPQ==", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/types": "^3.5.0", "@smithy/util-base64": "^3.0.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-hex-encoding": "^3.0.0", @@ -3675,13 +3641,12 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz", - "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==", - "peer": true, + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.6.tgz", + "integrity": "sha512-xs/KAwWOeCklq8aMlnpk25LgxEYHKOEodfjfKclDMLcBJEVEKzDLxZxBQyztcuPJ7F54213NJS8PxoiHNMdItQ==", "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/types": "^3.3.0", + "@smithy/abort-controller": "^3.1.5", + "@smithy/types": "^3.5.0", "tslib": "^2.6.2" }, "engines": { @@ -4338,8 +4303,7 @@ "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "peer": true + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -7405,9 +7369,9 @@ } }, "node_modules/jasmine": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-5.3.0.tgz", - "integrity": "sha512-Vrv5VWTXVZ/5xcNawlYCmE24pOaZu3KduLr9iAaENoMJ8W8Ryvhfpw2cf3rI4Unc2ajvu2t4tCKjS72TnraBGQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-5.3.1.tgz", + "integrity": "sha512-3zeUCfr3d1iga3s+NgDpggCP+ex5sdbNgqNn+Tq4yw/QfnwGrWC/ZvXX1IRm5deSIZ1LnvoeGY55F/ztbVOXPQ==", "dev": true, "dependencies": { "glob": "^10.2.2", @@ -7515,14 +7479,6 @@ "node": ">=6" } }, - "node_modules/jsonschema": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", - "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", - "engines": { - "node": "*" - } - }, "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -8123,15 +8079,15 @@ } }, "node_modules/mongodb-runner": { - "version": "5.6.6", - "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-5.6.6.tgz", - "integrity": "sha512-PxmDhfY12GHiY/HoRgR0d4cJLs5lC9cd3ebnOdhNIxJdSiYDKcfgmJIAA0O+dPbrGOSv8AvxckfUEpYkp62W2w==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-5.7.0.tgz", + "integrity": "sha512-G7GmVj5SzoSL/GY7lMnhNSSrPUZLkWuV1/CtSwdadsrA7aGuxB0KDviTmyecfI2/OWsT39t8X3ISE5R30EV5Xg==", "dev": true, "dependencies": { "@mongodb-js/mongodb-downloader": "^0.3.6", "@mongodb-js/saslprep": "^1.1.9", "debug": "^4.3.4", - "mongodb": "^6.8.0", + "mongodb": "^6.9.0", "mongodb-connection-string-url": "^3.0.0", "yargs": "^17.7.2" }, @@ -8201,9 +8157,9 @@ } }, "node_modules/mongodb-runner/node_modules/mongodb": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.8.0.tgz", - "integrity": "sha512-HGQ9NWDle5WvwMnrvUxsFYPd3JEbqD3RgABHBQRuoCEND0qzhsd0iH5ypHsf1eJ+sXmvmyKpP+FLOKY8Il7jMw==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.9.0.tgz", + "integrity": "sha512-UMopBVx1LmEUbW/QE0Hw18u583PEDVQmUmVzzBRH0o/xtE9DBRA5ZYLOjpLIa03i8FXjzvQECJcqoMvCXftTUA==", "dev": true, "dependencies": { "@mongodb-js/saslprep": "^1.1.5", @@ -9199,9 +9155,9 @@ } }, "node_modules/parse-server": { - "version": "7.3.0-alpha.8", - "resolved": "https://registry.npmjs.org/parse-server/-/parse-server-7.3.0-alpha.8.tgz", - "integrity": "sha512-w6AWqazo7Ksq/BgHbBnIhqN/qnhATHt9LruXFgV/SPpfTqJo6FBWDtUb84HoyhMP6WdHr5YiKoCSpJSPNTac7A==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse-server/-/parse-server-7.3.0.tgz", + "integrity": "sha512-YL6hypvVpwxMvi3HCaL7o6wAIwiDbf2uwoy9z72t5A1iphy9fqzwdtefG8P27xWaO3HlUhQ+CuusuoKADcavpA==", "hasInstallScript": true, "dependencies": { "@apollo/server": "4.10.5", diff --git a/apps/OpenSignServer/package.json b/apps/OpenSignServer/package.json index 2c7a31874..9e5d5d233 100644 --- a/apps/OpenSignServer/package.json +++ b/apps/OpenSignServer/package.json @@ -18,6 +18,8 @@ "watch": "nodemon index.js" }, "dependencies": { + "@aws-sdk/client-s3": "^3.664.0", + "@aws-sdk/s3-request-presigner": "^3.664.0", "@parse/fs-files-adapter": "^3.0.0", "@parse/s3-files-adapter": "^2.2.0", "@pdf-lib/fontkit": "^1.1.1", @@ -32,7 +34,6 @@ "form-data": "^4.0.0", "generate-api-key": "^1.0.2", "googleapis": "^144.0.0", - "jsonschema": "^1.4.1", "mailgun.js": "^10.2.3", "mongoose": "^8.7.0", "multer": "^1.4.5-lts.1", @@ -41,7 +42,7 @@ "nodemailer": "^6.9.15", "parse": "^5.3.0", "parse-dbtool": "^1.2.0", - "parse-server": "^7.3.0-alpha.8", + "parse-server": "^7.3.0", "parse-server-api-mail-adapter": "^4.0.0", "pdf-lib": "^1.17.1", "posthog-node": "^4.2.0", @@ -49,10 +50,10 @@ }, "type": "module", "devDependencies": { - "@babel/eslint-parser": "^7.25.1", + "@babel/eslint-parser": "^7.25.7", "eslint": "^9.11.1", - "jasmine": "^5.3.0", - "mongodb-runner": "^5.6.6", + "jasmine": "^5.3.1", + "mongodb-runner": "^5.7.0", "nodemon": "^3.1.7", "nyc": "^17.1.0", "prettier": "^3.3.3" From c57957b56da75c29673d2ec028517118aa7b2d0c Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Fri, 4 Oct 2024 18:45:15 +0530 Subject: [PATCH 23/23] fix: add error for uncompatible pdf --- .../public/locales/en/translation.json | 3 +- .../public/locales/es/translation.json | 4 +- .../public/locales/fr/translation.json | 3 +- apps/OpenSign/src/constant/Utils.js | 613 +++++++++--------- apps/OpenSign/src/pages/PdfRequestFiles.js | 304 ++++----- apps/OpenSign/src/pages/SignyourselfPdf.js | 20 +- .../src/script/locales/en/translation.json | 5 +- .../src/script/locales/es/translation.json | 3 +- .../src/script/locales/fr/translation.json | 5 +- 9 files changed, 499 insertions(+), 461 deletions(-) diff --git a/apps/OpenSign/public/locales/en/translation.json b/apps/OpenSign/public/locales/en/translation.json index 461ce6af7..0f544addd 100644 --- a/apps/OpenSign/public/locales/en/translation.json +++ b/apps/OpenSign/public/locales/en/translation.json @@ -673,6 +673,7 @@ "server-down": "Unable to connect to the OpenSign server. If you are self-hosting OpenSign, please ensure that all the steps in the documentation have been followed correctly. If you're running OpenSign locally, you might be accessing it through an incorrect port number.", "admin-exists": "Admin already exists. Please login to the application using admin credentials in order to manage users.", "public-tour-message":"The template needs to be public before you can generate a shareable link.", - "add-user-template": "You need to add a role before you can add fields for it." + "add-user-template": "You need to add a role before you can add fields for it.", + "pdf-uncompatible": "This pdf is not compatible with opensign, please contact " } diff --git a/apps/OpenSign/public/locales/es/translation.json b/apps/OpenSign/public/locales/es/translation.json index 02365d194..2ea7c7c4c 100644 --- a/apps/OpenSign/public/locales/es/translation.json +++ b/apps/OpenSign/public/locales/es/translation.json @@ -673,5 +673,7 @@ "server-down": "No se pudo conectar al servidor de OpenSign. Si estás alojando OpenSign por tu cuenta, por favor, asegúrate de que todos los pasos de la documentación han sido seguidos correctamente. Si estás ejecutando OpenSign localmente, puedes estar accediendo a OpenSign por un número de puerto incorrecto.", "admin-exists": "El administrador ya existe. Por favor, inicia sesión en la aplicación usando las credenciales de administrador para poder administrar los usuarios.", "public-tour-message": "Por favor, convierte la plantilla en pública para copiar la URL pública", - "add-user-template": "Es necesario agregar un rol antes de poder agregarle campos." + "add-user-template": "Es necesario agregar un rol antes de poder agregarle campos.", + "pdf-uncompatible": "Este pdf no es compatible con opensign, comuníquese con " + } diff --git a/apps/OpenSign/public/locales/fr/translation.json b/apps/OpenSign/public/locales/fr/translation.json index 52dbd9933..3d3de12c3 100644 --- a/apps/OpenSign/public/locales/fr/translation.json +++ b/apps/OpenSign/public/locales/fr/translation.json @@ -672,7 +672,8 @@ "server-down": "Impossible de se connecter au serveur OpenSign. Si vous hébergez vous-même OpenSign, veuillez vous assurer que toutes les étapes de la documentation ont été correctement suivies. Si vous exécutez OpenSign localement, vous y accédez peut-être via un numéro de port incorrect.", "admin-exists": "L'administrateur existe déjà. Veuillez vous connecter à l'application en utilisant les informations d'identification de l'administrateur afin de gérer les utilisateurs.", "public-tour-message": "Le modèle doit être public avant que vous puissiez générer un lien partageable.", - "add-user-template":"Vous devez ajouter un rôle avant de pouvoir lui ajouter des champs. " + "add-user-template":"Vous devez ajouter un rôle avant de pouvoir lui ajouter des champs. ", + "pdf-uncompatible":"Ce pdf n'est pas compatible avec opensign, veuillez contacter " } diff --git a/apps/OpenSign/src/constant/Utils.js b/apps/OpenSign/src/constant/Utils.js index f9926022b..8ddedf5cf 100644 --- a/apps/OpenSign/src/constant/Utils.js +++ b/apps/OpenSign/src/constant/Utils.js @@ -1086,18 +1086,22 @@ export const embedDocId = async (pdfDoc, documentId, allPages) => { const textContent = documentId && `OpenSign™ DocumentId: ${documentId} `; const pages = pdfDoc.getPages(); const page = pages[i]; - const getObj = compensateRotation( - page.getRotation().angle, - 10, - 5, - 1, - page.getSize(), - fontSize, - rgb(0.5, 0.5, 0.5), - font, - page - ); - page.drawText(textContent, getObj); + try { + const getObj = compensateRotation( + page.getRotation().angle, + 10, + 5, + 1, + page.getSize(), + fontSize, + rgb(0.5, 0.5, 0.5), + font, + page + ); + page.drawText(textContent, getObj); + } catch (err) { + console.log("Err in embed docId on page", i + 1, err?.message); + } } }; @@ -1327,7 +1331,9 @@ export const multiSignEmbed = async ( ); pdfDoc.registerFontkit(fontkit); const font = await pdfDoc.embedFont(fontBytes, { subset: true }); + let hasError = false; for (let item of widgets) { + if (hasError) break; // Stop the outer loop if an error occurred const containerScale = getContainerScale( pdfOriginalWH, item?.pageNumber, @@ -1370,308 +1376,323 @@ export const multiSignEmbed = async ( } }) ); - widgetsPositionArr.forEach(async (position, id) => { - let img; - if (["signature", "stamp", "initials", "image"].includes(position.type)) { - if (position.ImageType && position.ImageType === "image/jpeg") { - img = await pdfDoc.embedJpg(images[id]); - } else { - img = await pdfDoc.embedPng(images[id]); - } - } else if (!position.type) { - // to handle old widget when only stamp and signature are exists - if (position.ImageType && position.ImageType === "image/jpeg") { - img = await pdfDoc.embedJpg(images[id]); - } else { - img = await pdfDoc.embedPng(images[id]); - } - } - let widgetWidth, widgetHeight; - widgetWidth = placeholderWidth(position); - widgetHeight = placeholderHeight(position); - const xPos = (position) => { - const resizePos = position.xPosition; - //first two condition handle to old data already saved from mobile view which scale point diffrent - if (isMobile && position.isMobile) { - //if pos.isMobile false -- placeholder saved from desktop view then handle position in mobile view divided by scale - const x = resizePos * (position.scale / scale); - return x * scale; - } else if (position.isMobile && position.scale) { - const x = resizePos * position.scale; - return x; - } else { - return resizePos; - } - }; - const yPos = (position) => { - const resizePos = position.yPosition; - - if (position.isMobile && position.scale) { - if (position.IsResize) { - const y = resizePos * position.scale; - return y; + for (let [id, position] of widgetsPositionArr.entries()) { + if (hasError) break; // Stop the inner loop if an error occurred + try { + let img; + if ( + ["signature", "stamp", "initials", "image"].includes(position.type) + ) { + if (position.ImageType && position.ImageType === "image/jpeg") { + img = await pdfDoc.embedJpg(images[id]); } else { - const y = resizePos * position.scale; - return y; + img = await pdfDoc.embedPng(images[id]); } - } else { - return resizePos; - } - }; - const color = position?.options?.fontColor; - const updateColorInRgb = getWidgetsFontColor(color); - const fontSize = parseInt(position?.options?.fontSize || 12); - const widgetTypeExist = [ - textWidget, - textInputWidget, - "name", - "company", - "job title", - "date", - "email" - ].includes(position.type); - if (position.type === "checkbox") { - let checkboxGapFromTop, isCheck; - let y = yPos(position); - const optionsFontSize = fontSize || 13; - const checkboxSize = fontSize; - const checkboxTextGapFromLeft = fontSize + 5 || 22; - if (position?.options?.values.length > 0) { - position?.options?.values.forEach((item, ind) => { - const checkboxRandomId = "checkbox" + randomId(); - - if ( - position?.options?.response && - position?.options?.response?.length > 0 - ) { - isCheck = position?.options?.response?.includes(ind); - } else if (position?.options?.defaultValue) { - isCheck = position?.options?.defaultValue?.includes(ind); - } - - const checkbox = form.createCheckBox(checkboxRandomId); - - if (ind > 0) { - y = y + checkboxGapFromTop; - } else { - checkboxGapFromTop = fontSize + 5 || 26; - } - - if (!position?.options?.isHideLabel) { - // below line of code is used to embed label with radio button in pdf - const optionsPosition = compensateRotation( - page.getRotation().angle, - xPos(position) + checkboxTextGapFromLeft, - y, - 1, - page.getSize(), - optionsFontSize, - updateColorInRgb, - font, - page - ); - page.drawText(item, optionsPosition); - } - let checkboxObj = { - x: xPos(position), - y: y, - width: checkboxSize, - height: checkboxSize - }; - checkboxObj = getWidgetPosition(page, checkboxObj, 1); - checkbox.addToPage(page, checkboxObj); - - //applied which checkbox should be checked - if (isCheck) { - checkbox.check(); - } else { - checkbox.uncheck(); - } - checkbox.enableReadOnly(); - }); - } - } else if (widgetTypeExist) { - const fontSize = calculateFontSize( - position, - containerScale, - signyourself, - position.Height - ); - parseInt(fontSize); - let textContent; - if (position?.options?.response) { - textContent = position.options?.response; - } else if (position?.options?.defaultValue) { - textContent = position?.options?.defaultValue; - } - const fixedWidth = widgetWidth; // Set your fixed width - const isNewOnEnterLineExist = textContent.includes("\n"); - - // Function to break text into lines based on the fixed width - const NewbreakTextIntoLines = (textContent, width) => { - const lines = []; - let currentLine = ""; - - for (const word of textContent.split(" ")) { - //get text line width - const lineWidth = font.widthOfTextAtSize( - `${currentLine} ${word}`, - fontSize - ); - //check text content line width is less or equal to container width - if (lineWidth <= width) { - currentLine += ` ${word}`; - } else { - lines.push(currentLine.trim()); - currentLine = `${word}`; - } + } else if (!position.type) { + // to handle old widget when only stamp and signature are exists + if (position.ImageType && position.ImageType === "image/jpeg") { + img = await pdfDoc.embedJpg(images[id]); + } else { + img = await pdfDoc.embedPng(images[id]); + } + } + let widgetWidth, widgetHeight; + widgetWidth = placeholderWidth(position); + widgetHeight = placeholderHeight(position); + const xPos = (position) => { + const resizePos = position.xPosition; + //first two condition handle to old data already saved from mobile view which scale point diffrent + if (isMobile && position.isMobile) { + //if pos.isMobile false -- placeholder saved from desktop view then handle position in mobile view divided by scale + const x = resizePos * (position.scale / scale); + return x * scale; + } else if (position.isMobile && position.scale) { + const x = resizePos * position.scale; + return x; + } else { + return resizePos; } - lines.push(currentLine.trim()); - return lines; }; + const yPos = (position) => { + const resizePos = position.yPosition; - // Function to break text into lines based on when user go next line on press enter button - const breakTextIntoLines = (textContent, width) => { - const lines = []; - - for (const word of textContent.split("\n")) { - const lineWidth = font.widthOfTextAtSize(`${word}`, fontSize); - //checking string length to container width - //if string length is less then container width it means user press enter button - if (lineWidth <= width) { - lines.push(word); - } - //else adjust text content according to width and send it in new line - else { - const newLine = NewbreakTextIntoLines(word, width); - lines.push(...newLine); + if (position.isMobile && position.scale) { + if (position.IsResize) { + const y = resizePos * position.scale; + return y; + } else { + const y = resizePos * position.scale; + return y; } + } else { + return resizePos; } - - return lines; }; + const color = position?.options?.fontColor; + const updateColorInRgb = getWidgetsFontColor(color); + const fontSize = parseInt(position?.options?.fontSize || 12); + const widgetTypeExist = [ + textWidget, + textInputWidget, + "name", + "company", + "job title", + "date", + "email" + ].includes(position.type); + if (position.type === "checkbox") { + let checkboxGapFromTop, isCheck; + let y = yPos(position); + const optionsFontSize = fontSize || 13; + const checkboxSize = fontSize; + const checkboxTextGapFromLeft = fontSize + 5 || 22; + if (position?.options?.values.length > 0) { + position?.options?.values.forEach((item, ind) => { + const checkboxRandomId = "checkbox" + randomId(); - //check if text content have `\n` string it means user press enter to go next line and handle condition - //else auto adjust text content according to container width - const lines = isNewOnEnterLineExist - ? breakTextIntoLines(textContent, fixedWidth) - : NewbreakTextIntoLines(textContent, fixedWidth); - // Set initial y-coordinate for the first line - let x = xPos(position); - let y = yPos(position); - // Embed each line on the page - for (const line of lines) { - const textPosition = compensateRotation( - page.getRotation().angle, - x, - y, - 1, - page.getSize(), - fontSize, - updateColorInRgb, - font, - page + if ( + position?.options?.response && + position?.options?.response?.length > 0 + ) { + isCheck = position?.options?.response?.includes(ind); + } else if (position?.options?.defaultValue) { + isCheck = position?.options?.defaultValue?.includes(ind); + } + + const checkbox = form.createCheckBox(checkboxRandomId); + + if (ind > 0) { + y = y + checkboxGapFromTop; + } else { + checkboxGapFromTop = fontSize + 5 || 26; + } + + if (!position?.options?.isHideLabel) { + // below line of code is used to embed label with radio button in pdf + const optionsPosition = compensateRotation( + page.getRotation().angle, + xPos(position) + checkboxTextGapFromLeft, + y, + 1, + page.getSize(), + optionsFontSize, + updateColorInRgb, + font, + page + ); + page.drawText(item, optionsPosition); + } + let checkboxObj = { + x: xPos(position), + y: y, + width: checkboxSize, + height: checkboxSize + }; + checkboxObj = getWidgetPosition(page, checkboxObj, 1); + checkbox.addToPage(page, checkboxObj); + + //applied which checkbox should be checked + if (isCheck) { + checkbox.check(); + } else { + checkbox.uncheck(); + } + checkbox.enableReadOnly(); + }); + } + } else if (widgetTypeExist) { + const fontSize = calculateFontSize( + position, + containerScale, + signyourself, + position.Height ); - page.drawText(line, textPosition); - y += 18; // Adjust the line height as needed - } - } else if (position.type === "dropdown") { - const fontsize = parseInt(position?.options?.fontSize) || 12; + parseInt(fontSize); + let textContent; + if (position?.options?.response) { + textContent = position.options?.response; + } else if (position?.options?.defaultValue) { + textContent = position?.options?.defaultValue; + } + const fixedWidth = widgetWidth; // Set your fixed width + const isNewOnEnterLineExist = textContent.includes("\n"); - const dropdownRandomId = "dropdown" + randomId(); - const dropdown = form.createDropdown(dropdownRandomId); - dropdown.addOptions(position?.options?.values); - if (position?.options?.response) { - dropdown.select(position.options?.response); - } else if (position?.options?.defaultValue) { - dropdown.select(position?.options?.defaultValue); - } - // Define the default appearance string - // Example format: `/FontName FontSize Tf 0 g` where: - // - `/FontName` is the name of the font (e.g., `/Helv` for Helvetica) - // - `FontSize` is the size you want to set (e.g., 12) - // - `Tf` specifies the font and size - // - `0 g` sets the text color to black - const defaultAppearance = `/Helv ${fontsize} Tf 0 g`; - // Set the default appearance for the dropdown field - dropdown.acroField.setDefaultAppearance(defaultAppearance); - dropdown.setFontSize(fontsize); - const dropdownObj = { - x: xPos(position), - y: yPos(position), - width: widgetWidth, - height: widgetHeight - }; - const dropdownOption = getWidgetPosition(page, dropdownObj, 1); - const dropdownSelected = { ...dropdownOption, font: font }; - dropdown.defaultUpdateAppearances(font); - dropdown.addToPage(page, dropdownSelected); - dropdown.enableReadOnly(); - } else if (position.type === radioButtonWidget) { - const radioRandomId = "radio" + randomId(); - const radioGroup = form.createRadioGroup(radioRandomId); - let radioOptionGapFromTop; - const optionsFontSize = fontSize || 13; - const radioTextGapFromLeft = fontSize + 5 || 20; - const radioSize = fontSize; - let y = yPos(position); - if (position?.options?.values.length > 0) { - position?.options?.values.forEach((item, ind) => { - if (ind > 0) { - y = y + radioOptionGapFromTop; - } else { - radioOptionGapFromTop = fontSize + 10 || 25; - } - if (!position?.options?.isHideLabel) { - // below line of code is used to embed label with radio button in pdf + // Function to break text into lines based on the fixed width + const NewbreakTextIntoLines = (textContent, width) => { + const lines = []; + let currentLine = ""; - const optionsPosition = compensateRotation( - page.getRotation().angle, - xPos(position) + radioTextGapFromLeft, - y, - 1, - page.getSize(), - optionsFontSize, - updateColorInRgb, - font, - page + for (const word of textContent.split(" ")) { + //get text line width + const lineWidth = font.widthOfTextAtSize( + `${currentLine} ${word}`, + fontSize ); - - page.drawText(item, optionsPosition); + //check text content line width is less or equal to container width + if (lineWidth <= width) { + currentLine += ` ${word}`; + } else { + lines.push(currentLine.trim()); + currentLine = `${word}`; + } } - let radioObj = { - x: xPos(position), - y: y, - width: radioSize, - height: radioSize - }; + lines.push(currentLine.trim()); + return lines; + }; - radioObj = getWidgetPosition(page, radioObj, 1); - radioGroup.addOptionToPage(item, page, radioObj); - }); - } - if (position?.options?.response) { - radioGroup.select(position.options?.response); - } else if (position?.options?.defaultValue) { - radioGroup.select(position?.options?.defaultValue); - } - radioGroup.enableReadOnly(); - } else { - const signature = { - x: xPos(position), - y: yPos(position), - width: widgetWidth, - height: widgetHeight - }; + // Function to break text into lines based on when user go next line on press enter button + const breakTextIntoLines = (textContent, width) => { + const lines = []; - const imageOptions = getWidgetPosition(page, signature, 1); - page.drawImage(img, imageOptions); + for (const word of textContent.split("\n")) { + const lineWidth = font.widthOfTextAtSize(`${word}`, fontSize); + //checking string length to container width + //if string length is less then container width it means user press enter button + if (lineWidth <= width) { + lines.push(word); + } + //else adjust text content according to width and send it in new line + else { + const newLine = NewbreakTextIntoLines(word, width); + lines.push(...newLine); + } + } + + return lines; + }; + + //check if text content have `\n` string it means user press enter to go next line and handle condition + //else auto adjust text content according to container width + const lines = isNewOnEnterLineExist + ? breakTextIntoLines(textContent, fixedWidth) + : NewbreakTextIntoLines(textContent, fixedWidth); + // Set initial y-coordinate for the first line + let x = xPos(position); + let y = yPos(position); + // Embed each line on the page + for (const line of lines) { + const textPosition = compensateRotation( + page.getRotation().angle, + x, + y, + 1, + page.getSize(), + fontSize, + updateColorInRgb, + font, + page + ); + page.drawText(line, textPosition); + y += 18; // Adjust the line height as needed + } + } else if (position.type === "dropdown") { + const fontsize = parseInt(position?.options?.fontSize) || 12; + + const dropdownRandomId = "dropdown" + randomId(); + const dropdown = form.createDropdown(dropdownRandomId); + dropdown.addOptions(position?.options?.values); + if (position?.options?.response) { + dropdown.select(position.options?.response); + } else if (position?.options?.defaultValue) { + dropdown.select(position?.options?.defaultValue); + } + // Define the default appearance string + // Example format: `/FontName FontSize Tf 0 g` where: + // - `/FontName` is the name of the font (e.g., `/Helv` for Helvetica) + // - `FontSize` is the size you want to set (e.g., 12) + // - `Tf` specifies the font and size + // - `0 g` sets the text color to black + const defaultAppearance = `/Helv ${fontsize} Tf 0 g`; + // Set the default appearance for the dropdown field + dropdown.acroField.setDefaultAppearance(defaultAppearance); + dropdown.setFontSize(fontsize); + const dropdownObj = { + x: xPos(position), + y: yPos(position), + width: widgetWidth, + height: widgetHeight + }; + const dropdownOption = getWidgetPosition(page, dropdownObj, 1); + const dropdownSelected = { ...dropdownOption, font: font }; + dropdown.defaultUpdateAppearances(font); + dropdown.addToPage(page, dropdownSelected); + dropdown.enableReadOnly(); + } else if (position.type === radioButtonWidget) { + const radioRandomId = "radio" + randomId(); + const radioGroup = form.createRadioGroup(radioRandomId); + let radioOptionGapFromTop; + const optionsFontSize = fontSize || 13; + const radioTextGapFromLeft = fontSize + 5 || 20; + const radioSize = fontSize; + let y = yPos(position); + if (position?.options?.values.length > 0) { + position?.options?.values.forEach((item, ind) => { + if (ind > 0) { + y = y + radioOptionGapFromTop; + } else { + radioOptionGapFromTop = fontSize + 10 || 25; + } + if (!position?.options?.isHideLabel) { + // below line of code is used to embed label with radio button in pdf + + const optionsPosition = compensateRotation( + page.getRotation().angle, + xPos(position) + radioTextGapFromLeft, + y, + 1, + page.getSize(), + optionsFontSize, + updateColorInRgb, + font, + page + ); + + page.drawText(item, optionsPosition); + } + let radioObj = { + x: xPos(position), + y: y, + width: radioSize, + height: radioSize + }; + + radioObj = getWidgetPosition(page, radioObj, 1); + radioGroup.addOptionToPage(item, page, radioObj); + }); + } + if (position?.options?.response) { + radioGroup.select(position.options?.response); + } else if (position?.options?.defaultValue) { + radioGroup.select(position?.options?.defaultValue); + } + radioGroup.enableReadOnly(); + } else { + const signature = { + x: xPos(position), + y: yPos(position), + width: widgetWidth, + height: widgetHeight + }; + + const imageOptions = getWidgetPosition(page, signature, 1); + page.drawImage(img, imageOptions); + } + } catch (err) { + console.log("Err in embed widget on page ", pageNo, err?.message); + hasError = true; // Set the flag to stop both loops + break; // Exit inner loop } - }); + } + } + if (!hasError) { + const pdfBytes = await pdfDoc.saveAsBase64({ useObjectStreams: false }); + return pdfBytes; + } else { + return { + error: + "This pdf is not compatible with opensign please contact " + }; } - const pdfBytes = await pdfDoc.saveAsBase64({ useObjectStreams: false }); - //console.log("pdf", pdfBytes); - return pdfBytes; }; // function for validating URLs diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index d1a671abd..97f97c445 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -907,163 +907,171 @@ function PdfRequestFiles(props) { ); // console.log("pdfte", pdfBytes); //get ExistUserPtr object id of user class to get tenantDetails - const objectId = pdfDetails?.[0]?.ExtUserPtr?.UserId?.objectId; - let activeMailAdapter = - pdfDetails?.[0]?.ExtUserPtr?.active_mail_adapter; - - //function for call to embed signature in pdf and get digital signature pdf - const resSign = await signPdfFun( - pdfBytes, - documentId, - signerObjectId, - objectId, - isSubscribed, - activeMailAdapter, - widgets - ); - if (resSign && resSign.status === "success") { - setPdfUrl(resSign.data); - setIsSigned(true); - setSignedSigners([]); - setUnSignedSigners([]); - getDocumentDetails(documentId, true); - const index = pdfDetails?.[0]?.Signers.findIndex( - (x) => x.objectId === signerObjectId + if (!pdfBytes?.error) { + const objectId = pdfDetails?.[0]?.ExtUserPtr?.UserId?.objectId; + let activeMailAdapter = + pdfDetails?.[0]?.ExtUserPtr?.active_mail_adapter; + //function for call to embed signature in pdf and get digital signature pdf + const resSign = await signPdfFun( + pdfBytes, + documentId, + signerObjectId, + objectId, + isSubscribed, + activeMailAdapter, + widgets ); - const newIndex = index + 1; - const usermail = { - Email: pdfDetails?.[0]?.Placeholders[newIndex]?.email || "" - }; - const user = usermail?.Email - ? usermail - : pdfDetails?.[0]?.Signers[newIndex]; - if (sendmail !== "false" && sendInOrder) { - const requestBody = pdfDetails?.[0]?.RequestBody; - const requestSubject = pdfDetails?.[0]?.RequestSubject; - if (user) { - const expireDate = pdfDetails?.[0].ExpiryDate.iso; - const newDate = new Date(expireDate); - const localExpireDate = newDate.toLocaleDateString( - "en-US", - { - day: "numeric", - month: "long", - year: "numeric" - } - ); - let senderEmail = pdfDetails?.[0].ExtUserPtr.Email; - let senderPhone = pdfDetails?.[0]?.ExtUserPtr?.Phone; - const senderName = `${pdfDetails?.[0].ExtUserPtr.Name}`; + if (resSign && resSign.status === "success") { + setPdfUrl(resSign.data); + setIsSigned(true); + setSignedSigners([]); + setUnSignedSigners([]); + getDocumentDetails(documentId, true); + const index = pdfDetails?.[0]?.Signers.findIndex( + (x) => x.objectId === signerObjectId + ); + const newIndex = index + 1; + const usermail = { + Email: pdfDetails?.[0]?.Placeholders[newIndex]?.email || "" + }; + const user = usermail?.Email + ? usermail + : pdfDetails?.[0]?.Signers[newIndex]; + if (sendmail !== "false" && sendInOrder) { + const requestBody = pdfDetails?.[0]?.RequestBody; + const requestSubject = pdfDetails?.[0]?.RequestSubject; + if (user) { + const expireDate = pdfDetails?.[0].ExpiryDate.iso; + const newDate = new Date(expireDate); + const localExpireDate = newDate.toLocaleDateString( + "en-US", + { + day: "numeric", + month: "long", + year: "numeric" + } + ); + let senderEmail = pdfDetails?.[0].ExtUserPtr.Email; + let senderPhone = pdfDetails?.[0]?.ExtUserPtr?.Phone; + const senderName = `${pdfDetails?.[0].ExtUserPtr.Name}`; - try { - const imgPng = - "https://qikinnovation.ams3.digitaloceanspaces.com/logo.png"; - let url = `${localStorage.getItem( - "baseUrl" - )}functions/sendmailv3`; - const headers = { - "Content-Type": "application/json", - "X-Parse-Application-Id": - localStorage.getItem("parseAppId"), - sessionToken: localStorage.getItem("accesstoken") - }; - const objectId = user?.objectId; - const hostUrl = window.location.origin; - //encode this url value `${pdfDetails?.[0].objectId}/${user.Email}/${objectId}` to base64 using `btoa` function - let encodeBase64; - if (objectId) { - encodeBase64 = btoa( - `${pdfDetails?.[0].objectId}/${user.Email}/${objectId}` - ); - } else { - encodeBase64 = btoa( - `${pdfDetails?.[0].objectId}/${user.Email}` - ); - } - const hostPublicUrl = isStaging - ? "https://staging-app.opensignlabs.com" - : "https://app.opensignlabs.com"; - let signPdf = props?.templateId - ? `${hostPublicUrl}/login/${encodeBase64}` - : `${hostUrl}/login/${encodeBase64}`; - const openSignUrl = - "https://www.opensignlabs.com/contact-us"; - const orgName = pdfDetails[0]?.ExtUserPtr.Company - ? pdfDetails[0].ExtUserPtr.Company - : ""; - const themeBGcolor = themeColor; - let replaceVar; - if (requestBody && requestSubject && isSubscribed) { - const replacedRequestBody = requestBody.replace( - /"/g, - "'" - ); - const htmlReqBody = - "" + - replacedRequestBody + - " "; - - const variables = { - document_title: pdfDetails?.[0].Name, - sender_name: senderName, - sender_mail: senderEmail, - sender_phone: senderPhone, - receiver_name: user.Name, - receiver_email: user.Email, - receiver_phone: user.Phone, - expiry_date: localExpireDate, - company_name: orgName, - signing_url: `Sign here` + try { + const imgPng = + "https://qikinnovation.ams3.digitaloceanspaces.com/logo.png"; + let url = `${localStorage.getItem( + "baseUrl" + )}functions/sendmailv3`; + const headers = { + "Content-Type": "application/json", + "X-Parse-Application-Id": + localStorage.getItem("parseAppId"), + sessionToken: localStorage.getItem("accesstoken") }; - replaceVar = replaceMailVaribles( - requestSubject, - htmlReqBody, - variables - ); - } + const objectId = user?.objectId; + const hostUrl = window.location.origin; + //encode this url value `${pdfDetails?.[0].objectId}/${user.Email}/${objectId}` to base64 using `btoa` function + let encodeBase64; + if (objectId) { + encodeBase64 = btoa( + `${pdfDetails?.[0].objectId}/${user.Email}/${objectId}` + ); + } else { + encodeBase64 = btoa( + `${pdfDetails?.[0].objectId}/${user.Email}` + ); + } + const hostPublicUrl = isStaging + ? "https://staging-app.opensignlabs.com" + : "https://app.opensignlabs.com"; + let signPdf = props?.templateId + ? `${hostPublicUrl}/login/${encodeBase64}` + : `${hostUrl}/login/${encodeBase64}`; + const openSignUrl = + "https://www.opensignlabs.com/contact-us"; + const orgName = pdfDetails[0]?.ExtUserPtr.Company + ? pdfDetails[0].ExtUserPtr.Company + : ""; + const themeBGcolor = themeColor; + let replaceVar; + if (requestBody && requestSubject && isSubscribed) { + const replacedRequestBody = requestBody.replace( + /"/g, + "'" + ); + const htmlReqBody = + "" + + replacedRequestBody + + " "; - let params = { - mailProvider: activeMailAdapter, - extUserId: extUserId, - recipient: user.Email, - subject: requestSubject - ? replaceVar?.subject - : `${pdfDetails?.[0].ExtUserPtr.Name} has requested you to sign "${pdfDetails?.[0].Name}"`, - from: senderEmail, - plan: plancode, - html: requestBody - ? replaceVar?.body - : "

Digital Signature Request

" + - pdfDetails?.[0].ExtUserPtr.Name + - " has requested you to review and sign " + - pdfDetails?.[0].Name + - ".

Sender " + - senderEmail + - "
Organization " + - orgName + - "
Expires on " + - localExpireDate + - "

This is an automated email from OpenSign™. For any queries regarding this email, please contact the sender " + - senderEmail + - " directly.If you think this email is inappropriate or spam, you may file a complaint with OpenSign™ here.

" - }; - await axios.post(url, params, { headers: headers }); - } catch (error) { - console.log("error", error); + const variables = { + document_title: pdfDetails?.[0].Name, + sender_name: senderName, + sender_mail: senderEmail, + sender_phone: senderPhone, + receiver_name: user.Name, + receiver_email: user.Email, + receiver_phone: user.Phone, + expiry_date: localExpireDate, + company_name: orgName, + signing_url: `Sign here` + }; + replaceVar = replaceMailVaribles( + requestSubject, + htmlReqBody, + variables + ); + } + + let params = { + mailProvider: activeMailAdapter, + extUserId: extUserId, + recipient: user.Email, + subject: requestSubject + ? replaceVar?.subject + : `${pdfDetails?.[0].ExtUserPtr.Name} has requested you to sign "${pdfDetails?.[0].Name}"`, + from: senderEmail, + plan: plancode, + html: requestBody + ? replaceVar?.body + : "

Digital Signature Request

" + + pdfDetails?.[0].ExtUserPtr.Name + + " has requested you to review and sign " + + pdfDetails?.[0].Name + + ".

Sender " + + senderEmail + + "
Organization " + + orgName + + "
Expires on " + + localExpireDate + + "

This is an automated email from OpenSign™. For any queries regarding this email, please contact the sender " + + senderEmail + + " directly.If you think this email is inappropriate or spam, you may file a complaint with OpenSign™ here.

" + }; + await axios.post(url, params, { headers: headers }); + } catch (error) { + console.log("error", error); + } } } + } else { + setIsUiLoading(false); + setIsAlert({ isShow: true, alertMessage: resSign.message }); } } else { setIsUiLoading(false); - setIsAlert({ isShow: true, alertMessage: resSign.message }); + setIsAlert({ + header: t("error"), + isShow: true, + alertMessage: t("pdf-uncompatible") + }); } } catch (err) { setIsUiLoading(false); diff --git a/apps/OpenSign/src/pages/SignyourselfPdf.js b/apps/OpenSign/src/pages/SignyourselfPdf.js index ad89d82cd..c4c91950d 100644 --- a/apps/OpenSign/src/pages/SignyourselfPdf.js +++ b/apps/OpenSign/src/pages/SignyourselfPdf.js @@ -617,12 +617,8 @@ function SignYourSelf() { const checkSignUrl = requiredWidgets[i]?.pos?.SignUrl; let checkDefaultSigned = requiredWidgets[i]?.options?.defaultValue; - if (!checkSignUrl) { - if (!checkDefaultSigned) { - if (!showAlert) { - showAlert = true; - } - } + if (!checkSignUrl && !checkDefaultSigned && !showAlert) { + showAlert = true; } } } @@ -649,10 +645,9 @@ function SignYourSelf() { return; } else { setIsUiLoading(true); - const existingPdfBytes = pdfArrayBuffer; // Load a PDFDocument from the existing PDF bytes try { - const pdfDoc = await PDFDocument.load(existingPdfBytes); + const pdfDoc = await PDFDocument.load(pdfArrayBuffer); const isSignYourSelfFlow = true; const extUserPtr = pdfDetails[0].ExtUserPtr; const HeaderDocId = extUserPtr?.HeaderDocId; @@ -671,8 +666,15 @@ function SignYourSelf() { ); // console.log("pdf", pdfBytes); //function for call to embed signature in pdf and get digital signature pdf - if (pdfBytes) { + if (!pdfBytes?.error) { await signPdfFun(pdfBytes, documentId); + } else { + setIsUiLoading(false); + setIsAlert({ + header: t("error"), + isShow: true, + alertMessage: t("pdf-uncompatible") + }); } } catch (err) { setIsUiLoading(false); diff --git a/apps/OpenSign/src/script/locales/en/translation.json b/apps/OpenSign/src/script/locales/en/translation.json index f96845408..e049c3d52 100644 --- a/apps/OpenSign/src/script/locales/en/translation.json +++ b/apps/OpenSign/src/script/locales/en/translation.json @@ -672,6 +672,7 @@ "document-logs": "Document logs", "server-down": "Unable to connect to the OpenSign server. If you are self-hosting OpenSign, please ensure that all the steps in the documentation have been followed correctly. If you're running OpenSign locally, you might be accessing it through an incorrect port number.", "admin-exists": "Admin already exists. Please login to the application using admin credentials in order to manage users.", - "public-tour-message":"The template needs to be public before you can generate a shareable link.", - "add-user-template": "You need to add a role before you can add fields for it." + "public-tour-message": "The template needs to be public before you can generate a shareable link.", + "add-user-template": "You need to add a role before you can add fields for it.", + "pdf-uncompatible": "This pdf is not compatible with opensign, please contact " } diff --git a/apps/OpenSign/src/script/locales/es/translation.json b/apps/OpenSign/src/script/locales/es/translation.json index 02365d194..919219493 100644 --- a/apps/OpenSign/src/script/locales/es/translation.json +++ b/apps/OpenSign/src/script/locales/es/translation.json @@ -673,5 +673,6 @@ "server-down": "No se pudo conectar al servidor de OpenSign. Si estás alojando OpenSign por tu cuenta, por favor, asegúrate de que todos los pasos de la documentación han sido seguidos correctamente. Si estás ejecutando OpenSign localmente, puedes estar accediendo a OpenSign por un número de puerto incorrecto.", "admin-exists": "El administrador ya existe. Por favor, inicia sesión en la aplicación usando las credenciales de administrador para poder administrar los usuarios.", "public-tour-message": "Por favor, convierte la plantilla en pública para copiar la URL pública", - "add-user-template": "Es necesario agregar un rol antes de poder agregarle campos." + "add-user-template": "Es necesario agregar un rol antes de poder agregarle campos.", + "pdf-uncompatible": "Este pdf no es compatible con opensign, comuníquese con " } diff --git a/apps/OpenSign/src/script/locales/fr/translation.json b/apps/OpenSign/src/script/locales/fr/translation.json index b83b915b7..0bdd2d050 100644 --- a/apps/OpenSign/src/script/locales/fr/translation.json +++ b/apps/OpenSign/src/script/locales/fr/translation.json @@ -639,7 +639,7 @@ "public-template-mssg-3": "Besoin de plus de détails ou d'exemples ?", "public-template-mssg-4": "Visitez le", "public-template-mssg-5": "npm pour les dernières mises à jour, une documentation détaillée et l'historique des versions.", - "public-template-mssg-6": "Avant de pouvoir utiliser cet extrait de code, vous devez rendre ce modèle public.", + "public-template-mssg-6": "Avant de pouvoir utiliser cet extrait de code, vous devez rendre ce modèle public.", "copy-code": "COPIE", "copied-code": "COPIÉ", "Installation": "Installation", @@ -672,5 +672,6 @@ "server-down": "Impossible de se connecter au serveur OpenSign. Si vous hébergez vous-même OpenSign, veuillez vous assurer que toutes les étapes de la documentation ont été correctement suivies. Si vous exécutez OpenSign localement, vous y accédez peut-être via un numéro de port incorrect.", "admin-exists": "L'administrateur existe déjà. Veuillez vous connecter à l'application en utilisant les informations d'identification de l'administrateur afin de gérer les utilisateurs.", "public-tour-message": "Le modèle doit être public avant que vous puissiez générer un lien partageable.", - "add-user-template":"Vous devez ajouter un rôle avant de pouvoir lui ajouter des champs. " + "add-user-template": "Vous devez ajouter un rôle avant de pouvoir lui ajouter des champs. ", + "pdf-uncompatible": "Ce pdf n'est pas compatible avec opensign, veuillez contacter " }