From e9c6509970a3171053676eed810236f1b7723347 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Thu, 22 Aug 2024 17:23:53 +0530 Subject: [PATCH 1/6] feat: autosave document and template while drafting --- apps/OpenSign/src/pages/GenerateToken.js | 6 +- apps/OpenSign/src/pages/PlaceHolderSign.js | 201 ++++++------------ .../OpenSign/src/pages/TemplatePlaceholder.js | 67 ++++-- 3 files changed, 115 insertions(+), 159 deletions(-) diff --git a/apps/OpenSign/src/pages/GenerateToken.js b/apps/OpenSign/src/pages/GenerateToken.js index c63539370..108a47deb 100644 --- a/apps/OpenSign/src/pages/GenerateToken.js +++ b/apps/OpenSign/src/pages/GenerateToken.js @@ -107,7 +107,11 @@ function GenerateToken() { }; const handleBuyAPIsModal = () => { - setIsModal((obj) => ({ ...obj, buyapis: !obj.buyapis })); + if (!validplan[isSubscribe.plan] && isEnableSubscription) { + setIsTour(true); + } else { + setIsModal((obj) => ({ ...obj, buyapis: !obj.buyapis })); + } }; const handlePricePerAPIs = (e) => { diff --git a/apps/OpenSign/src/pages/PlaceHolderSign.js b/apps/OpenSign/src/pages/PlaceHolderSign.js index 25b61f4ad..8e6a4bebb 100644 --- a/apps/OpenSign/src/pages/PlaceHolderSign.js +++ b/apps/OpenSign/src/pages/PlaceHolderSign.js @@ -77,7 +77,7 @@ function PlaceHolderSign() { const [signBtnPosition, setSignBtnPosition] = useState([]); const [xySignature, setXYSignature] = useState({}); const [dragKey, setDragKey] = useState(); - const [signersdata, setSignersData] = useState(); + const [signersdata, setSignersData] = useState([]); const [signerObjId, setSignerObjId] = useState(); const [signerPos, setSignerPos] = useState([]); const [isSelectListId, setIsSelectId] = useState(); @@ -165,24 +165,14 @@ function PlaceHolderSign() { const [{ isDragSign }, dragSignature] = useDrag({ type: "BOX", - item: { - type: "BOX", - id: 1, - text: "signature" - }, - + item: { type: "BOX", id: 1, text: "signature" }, collect: (monitor) => ({ isDragSign: !!monitor.isDragging() }) }); const [{ isDragStamp }, dragStamp] = useDrag({ type: "BOX", - item: { - type: "BOX", - id: 2, - text: "stamp" - }, - + item: { type: "BOX", id: 2, text: "stamp" }, collect: (monitor) => ({ isDragStamp: !!monitor.isDragging() }) @@ -202,7 +192,6 @@ function PlaceHolderSign() { `Parse/${localStorage.getItem("parseAppId")}/currentUser` ) ); - if (user) { try { const defaultRequestBody = `

Hi {{receiver_name}},


We hope this email finds you well. {{sender_name}} has requested you to review and sign {{document_title}}.

Your signature is crucial to proceed with the next steps as it signifies your agreement and authorization.


{{signing_url}}


If you have any questions or need further clarification regarding the document or the signing process, please contact the sender.


Thanks

Team OpenSign™


`; @@ -241,10 +230,8 @@ function PlaceHolderSign() { setZoomPercent(0); } }; - // Use setTimeout to wait for the transition to complete const timer = setTimeout(updateSize, 100); // match the transition duration - return () => clearTimeout(timer); // eslint-disable-next-line react-hooks/exhaustive-deps }, [divRef.current, isHeader]); @@ -345,11 +332,13 @@ function PlaceHolderSign() { ) { setSignerPos(documentData[0].Placeholders); let signers = [...documentData[0].Signers]; - let updatedSigners = documentData[0].Placeholders.map((x) => { + const placeholder = documentData[0]?.Placeholders.filter( + (data) => data.Role !== "prefill" + ); + let updatedSigners = placeholder.map((x) => { let matchingSigner = signers.find( (y) => x.signerObjId && x.signerObjId === y.objectId ); - if (matchingSigner) { return { ...matchingSigner, @@ -358,11 +347,7 @@ function PlaceHolderSign() { blockColor: x.blockColor }; } else { - return { - Role: x.Role, - Id: x.Id, - blockColor: x.blockColor - }; + return { Role: x.Role, Id: x.Id, blockColor: x.blockColor }; } }); setSignersData(updatedSigners); @@ -385,14 +370,12 @@ function PlaceHolderSign() { documentData[0].Placeholders && documentData[0].Placeholders.length > 0 ) { - let updatedSigners = documentData[0].Placeholders.map((x) => { - return { - Role: x.Role, - Id: x.Id, - blockColor: x.blockColor - }; + const placeholder = documentData[0]?.Placeholders.filter( + (data) => data.Role !== "prefill" + ); + let updatedSigners = placeholder.map((x) => { + return { Role: x.Role, Id: x.Id, blockColor: x.blockColor }; }); - setSignerPos(documentData[0].Placeholders); setSignersData(updatedSigners); setIsSelectId(0); @@ -404,25 +387,16 @@ function PlaceHolderSign() { documentData === "Error: Something went wrong!" || (documentData.result && documentData.result.error) ) { - const loadObj = { - isLoad: false - }; setHandleError(t("something-went-wrong-mssg")); - setIsLoading(loadObj); + setIsLoading({ isLoad: false }); } else { setHandleError(t("no-data-avaliable")); - const loadObj = { - isLoad: false - }; - setIsLoading(loadObj); + setIsLoading({ isLoad: false }); } const res = await contractUsers(); if (res === "Error: Something went wrong!") { - const loadObj = { - isLoad: false - }; setHandleError(t("something-went-wrong-mssg")); - setIsLoading(loadObj); + setIsLoading({ isLoad: false }); } else if (res.length && res[0]?.objectId) { setActiveMailAdapter(res[0]?.active_mail_adapter); setSignerUserId(res[0].objectId); @@ -439,16 +413,10 @@ function PlaceHolderSign() { setCheckTourStatus(checkTourRecipients[0].placeholder); } } - const loadObj = { - isLoad: false - }; - setIsLoading(loadObj); + setIsLoading({ isLoad: false }); } else if (res.length === 0) { setHandleError(t("no-data-avaliable")); - const loadObj = { - isLoad: false - }; - setIsLoading(loadObj); + setIsLoading({ isLoad: false }); } }; @@ -495,10 +463,7 @@ function PlaceHolderSign() { Height: widgetHeight / (containerScale * scale) }; dropData.push(dropObj); - placeHolder = { - pageNumber: pageNumber, - pos: dropData - }; + placeHolder = { pageNumber: pageNumber, pos: dropData }; } else { const offset = monitor.getClientOffset(); //This method returns the offset of the current pointer (mouse) position relative to the client viewport. @@ -528,12 +493,8 @@ function PlaceHolderSign() { Width: widgetWidth / (containerScale * scale), Height: widgetHeight / (containerScale * scale) }; - dropData.push(dropObj); - placeHolder = { - pageNumber: pageNumber, - pos: dropData - }; + placeHolder = { pageNumber: pageNumber, pos: dropData }; } setSelectWidgetId(key); if (signer) { @@ -554,15 +515,11 @@ function PlaceHolderSign() { const getPageNumer = getPlaceHolder.filter( (data) => data.pageNumber === pageNumber ); - //add entry of position for same signer on multiple page if (getPageNumer.length > 0) { const getPos = getPageNumer[0].pos; const newSignPos = getPos.concat(dropData); - let xyPos = { - pageNumber: pageNumber, - pos: newSignPos - }; + let xyPos = { pageNumber: pageNumber, pos: newSignPos }; updatePlace.push(xyPos); let updatesignerPos; if (dragTypeValue === textWidget) { @@ -574,7 +531,6 @@ function PlaceHolderSign() { x.Id === uniqueId ? { ...x, placeHolder: updatePlace } : x ); } - setSignerPos(updatesignerPos); } else { let updatesignerPos; @@ -706,14 +662,11 @@ function PlaceHolderSign() { if (filterSignerPos.length > 0) { const getPlaceHolder = filterSignerPos[0].placeHolder; - const getPageNumer = getPlaceHolder.filter( (data) => data.pageNumber === pageNumber ); - if (getPageNumer.length > 0) { const getXYdata = getPageNumer[0].pos; - const getPosData = getXYdata; const addSignPos = getPosData.map((url) => { if (url.key === keyValue) { @@ -742,36 +695,28 @@ function PlaceHolderSign() { return { ...obj, placeHolder: newUpdateSignPos }; } } - return obj; }); - setSignerPos(newUpdateSigner); } } } } - setTimeout(() => { - setIsDragging(false); - }, 200); + setTimeout(() => setIsDragging(false), 200); }; //function for delete signature block const handleDeleteSign = (key, Id) => { const updateData = []; const filterSignerPos = signerPos.filter((data) => data.Id === Id); - if (filterSignerPos.length > 0) { const getPlaceHolder = filterSignerPos[0].placeHolder; - const getPageNumer = getPlaceHolder.filter( (data) => data.pageNumber === pageNumber ); - if (getPageNumer.length > 0) { const getXYdata = getPageNumer[0].pos.filter( (data) => data.key !== key ); - if (getXYdata.length > 0) { updateData.push(getXYdata); const newUpdatePos = getPlaceHolder.map((obj) => { @@ -804,7 +749,6 @@ function PlaceHolderSign() { let signerupdate = []; signerupdate = signerPos.filter((data) => data.Id !== Id); signerupdate.push(newUpdatePos[0]); - setSignerPos(signerupdate); } else { setSignerPos(updateFilter); @@ -829,20 +773,11 @@ function PlaceHolderSign() { const touch = e.touches[0]; // Get the first touch point mouseX = touch.clientX - divRect.left; mouseY = touch.clientY - divRect.top; - setSignBtnPosition([ - { - xPos: mouseX, - yPos: mouseY - } - ]); + setSignBtnPosition([{ xPos: mouseX, yPos: mouseY }]); } else { mouseX = e.clientX - divRect.left; mouseY = e.clientY - divRect.top; - const xyPosition = { - xPos: mouseX, - yPos: mouseY - }; - setXYSignature(xyPosition); + setXYSignature({ xPos: mouseX, yPos: mouseY }); } }; @@ -925,18 +860,11 @@ function PlaceHolderSign() { } if (!signatureExist) { isSignatureExist = false; - setIsSendAlert({ - mssg: "sure", - alert: true - }); + setIsSendAlert({ mssg: "sure", alert: true }); } } - if (getPrefill && isLabel) { - setIsSendAlert({ - mssg: textWidget, - alert: true - }); + setIsSendAlert({ mssg: textWidget, alert: true }); } else if (isSignatureExist) { if (filterPrefill.length === signersdata.length) { const IsSignerNotExist = filterPrefill?.filter((x) => !x.signerObjId); @@ -949,13 +877,42 @@ function PlaceHolderSign() { saveDocumentDetails(); } } else { - setIsSendAlert({ - mssg: "sure", - alert: true - }); + setIsSendAlert({ mssg: "sure", alert: true }); } } }; + + useEffect(() => { + const timer = setTimeout(() => { + if (signerPos?.length > 0) { + autosavedetails(); + } + }, 2000); + return () => clearTimeout(timer); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [signerPos]); + + // `autosavedetails` is used to save doc details after every 2 sec when changes are happern in placeholder like drag-drop widgets, remove signers + const autosavedetails = async () => { + const signers = signersdata?.filter( + (x) => + x?.Role !== "prefill" && { + __type: "Pointer", + className: "contracts_Contactbook", + objectId: x.objectId + } + ); + try { + const docCls = new Parse.Object("contracts_Document"); + docCls.id = documentId; + docCls.set("Placeholders", signerPos); + docCls.set("Signers", signers); + await docCls.save(); + } catch (e) { + console.log("error", e); + alert(t("something-went-wrong-mssg")); + } + }; //function to use save placeholder details in contracts_document const saveDocumentDetails = async () => { setIsUiLoading(true); @@ -995,10 +952,7 @@ function PlaceHolderSign() { SignedUrl: pdfUrl, Signers: signers, SentToOthers: true, - ExpiryDate: { - iso: updateExpiryDate, - __type: "Date" - } + ExpiryDate: { iso: updateExpiryDate, __type: "Date" } }; } else { data = { @@ -1024,15 +978,10 @@ function PlaceHolderSign() { ) .then(() => { setIsMailSend(true); - setIsLoading({ - isLoad: false - }); + setIsLoading({ isLoad: false }); setIsUiLoading(false); setSignerPos([]); - setIsSendAlert({ - mssg: "confirm", - alert: true - }); + setIsSendAlert({ mssg: "confirm", alert: true }); }) .catch((err) => { console.log("axois err ", err); @@ -1047,9 +996,7 @@ function PlaceHolderSign() { const copytoclipboard = (text) => { copytoData(text); setCopied(true); - setTimeout(() => { - setCopied(false); - }, 1500); // Reset copied state after 1.5 seconds + setTimeout(() => setCopied(false), 1500); // Reset copied state after 1.5 seconds }; //function show signer list and share link to share signUrl const handleShareList = () => { @@ -1085,12 +1032,7 @@ function PlaceHolderSign() { {t("copy-link")} - + @@ -1219,9 +1161,7 @@ function PlaceHolderSign() { SendMail: true }; } else { - data = { - SendMail: true - }; + data = { SendMail: true }; } await axios @@ -1339,14 +1279,11 @@ function PlaceHolderSign() { const filterSignerPos = signerPos.filter((data) => data.Id === uniqueId); if (filterSignerPos.length > 0) { const getPlaceHolder = filterSignerPos[0].placeHolder; - const getPageNumer = getPlaceHolder.filter( (data) => data.pageNumber === pageNumber ); - if (getPageNumer.length > 0) { const getXYdata = getPageNumer[0].pos; - const getPosData = getXYdata; const addSignPos = getPosData.map((position) => { if (position.key === signKey) { @@ -1631,9 +1568,7 @@ function PlaceHolderSign() { } return { ...x }; }); - setSignerPos(updatePlaceHolder); - const updateSigner = signersdata.map((x) => { if (x.Id === uniqueId) { return { ...x, ...data, className: "contracts_Contactbook" }; @@ -1687,7 +1622,7 @@ function PlaceHolderSign() { { selector: '[data-tut="assignSigner"]', content: - " You need to attach a Signer to every role. You can do that by clicking this icon. Once you select a Signer it will be attached to all the fields associated with that role which appear in the same colour. ", + "You need to attach a Signer to every role. You can do that by clicking this icon. Once you select a Signer it will be attached to all the fields associated with that role which appear in the same colour. ", position: "top", style: { fontSize: "13px" } } @@ -1712,7 +1647,6 @@ function PlaceHolderSign() { setIsSelectId(index); setBlockColor(color[index]); } - setSignerPos(updatePlaceholderUser); setIsMailSend(false); }; @@ -1817,7 +1751,6 @@ function PlaceHolderSign() { />
{/* this modal is used show alert set placeholder for all signers before send mail */} - )} -
)} - { const touch = e.touches[0]; // Get the first touch point mouseX = touch.clientX - divRect.left; mouseY = touch.clientY - divRect.top; - setSignBtnPosition([ - { - xPos: mouseX, - yPos: mouseY - } - ]); + setSignBtnPosition([{ xPos: mouseX, yPos: mouseY }]); } else { mouseX = e.clientX - divRect.left; mouseY = e.clientY - divRect.top; - const xyPosition = { - xPos: mouseX, - yPos: mouseY - }; + const xyPosition = { xPos: mouseX, yPos: mouseY }; setXYSignature(xyPosition); } }; @@ -744,12 +736,45 @@ const TemplatePlaceholder = () => { } }; + useEffect(() => { + const timer = setTimeout(() => { + if (signerPos?.length > 0) { + autosavedetails(); + } + }, 2000); + return () => clearTimeout(timer); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [signerPos]); + + // `autosavedetails` is used to save template details after every 2 sec when changes are happern in placeholder like drag-drop widgets, remove signers + const autosavedetails = async () => { + let signers = []; + if (signersdata?.length > 0) { + signersdata.forEach((x) => { + if (x.objectId) { + const obj = { + __type: "Pointer", + className: "contracts_Contactbook", + objectId: x.objectId + }; + signers.push(obj); + } + }); + } + try { + const templateCls = new Parse.Object("contracts_Template"); + templateCls.id = templateId; + templateCls.set("Placeholders", signerPos); + templateCls.set("Signers", signers); + await templateCls.save(); + } catch (err) { + console.log("error in autosave template", err); + } + }; + const handleSaveTemplate = async () => { if (signersdata?.length) { - const loadObj = { - isLoad: true, - message: t("loading-mssg") - }; + const loadObj = { isLoad: true, message: t("loading-mssg") }; setIsLoading(loadObj); setIsSendAlert(false); let signers = []; @@ -794,16 +819,10 @@ const TemplatePlaceholder = () => { for (const key in data) { updateTemplate.set(key, data[key]); } - await updateTemplate.save(null, { - sessionToken: localStorage.getItem("accesstoken") - }); - + await updateTemplate.save(); setIsCreateDocModal(true); setIsMailSend(true); - const loadObj = { - isLoad: false - }; - setIsLoading(loadObj); + setIsLoading({ isLoad: false }); } catch (e) { setIsLoading(false); alert(t("something-went-wrong-mssg")); @@ -1005,11 +1024,12 @@ const TemplatePlaceholder = () => { setIsMailSend(false); }; - // `handleLinkUser` is used to open Add/Choose Signer Modal when user can link existing or new User with placeholder + // `handleLinkUser` is used to open Add/Choose Signer Modal when user can link existing or new User with placeholder // and update entry in signersList const handleLinkUser = (id) => { setIsAddUser({ [id]: true }); }; + // `handleAddUser` is used to adduser const handleAddUser = (data) => { const signerPtr = { __type: "Pointer", @@ -1319,6 +1339,7 @@ const TemplatePlaceholder = () => { setCurrWidgetsDetails({}); handleNameModal(); }; + const handleNameModal = () => { setIsNameModal(false); setCurrWidgetsDetails({}); From 476dcf051c37e3df541bc2263bbb137464cb62fa Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Thu, 22 Aug 2024 20:28:49 +0530 Subject: [PATCH 2/6] feat: implement autosave feature in signyourself --- .../src/components/pdf/DraftDocument.js | 2 +- apps/OpenSign/src/components/pdf/RenderPdf.js | 2 +- apps/OpenSign/src/pages/SignyourselfPdf.js | 160 +++++++----------- .../20240822201043-addfield_doccls_cjs.cjs | 21 +++ 4 files changed, 85 insertions(+), 100 deletions(-) create mode 100644 apps/OpenSignServer/databases/migrations/20240822201043-addfield_doccls_cjs.cjs diff --git a/apps/OpenSign/src/components/pdf/DraftDocument.js b/apps/OpenSign/src/components/pdf/DraftDocument.js index 461e33a7b..6256704e5 100644 --- a/apps/OpenSign/src/components/pdf/DraftDocument.js +++ b/apps/OpenSign/src/components/pdf/DraftDocument.js @@ -54,7 +54,7 @@ function DraftDocument() { navigate(`/recipientSignPdf/${data.objectId}`); } //checking if document has completed and signyour-self flow - else if (!signerExist && !isPlaceholder) { + else if ((!signerExist && !isPlaceholder) || data?.IsSignyourself) { navigate(`/signaturePdf/${data.objectId}`); } //checking if document has declined by someone diff --git a/apps/OpenSign/src/components/pdf/RenderPdf.js b/apps/OpenSign/src/components/pdf/RenderPdf.js index 61a1ce297..c877a8a4f 100644 --- a/apps/OpenSign/src/components/pdf/RenderPdf.js +++ b/apps/OpenSign/src/components/pdf/RenderPdf.js @@ -554,7 +554,7 @@ function RenderPdf({ ); }) - : xyPostion.map((data, ind) => { + : xyPostion?.map((data, ind) => { // signyourself flow return ( diff --git a/apps/OpenSign/src/pages/SignyourselfPdf.js b/apps/OpenSign/src/pages/SignyourselfPdf.js index a65fdc159..f4dc4cf56 100644 --- a/apps/OpenSign/src/pages/SignyourselfPdf.js +++ b/apps/OpenSign/src/pages/SignyourselfPdf.js @@ -165,7 +165,7 @@ function SignYourSelf() { }) }); - const index = xyPostion.findIndex((object) => { + const index = xyPostion?.findIndex((object) => { return object.pageNumber === pageNumber; }); // rowlevel={JSON.parse(localStorage.getItem("rowlevel"))} @@ -211,7 +211,6 @@ function SignYourSelf() { // Use setTimeout to wait for the transition to complete const timer = setTimeout(updateSize, 100); // match the transition duration - return () => clearTimeout(timer); // eslint-disable-next-line react-hooks/exhaustive-deps }, [divRef.current, isHeader]); @@ -226,6 +225,11 @@ function SignYourSelf() { if (documentData && documentData.length > 0) { setPdfDetails(documentData); setExtUserId(documentData[0]?.ExtUserPtr?.objectId); + const placeholders = + documentData[0]?.Placeholders?.length > 0 + ? documentData[0]?.Placeholders + : []; + setXyPostion(placeholders); const url = documentData[0] && documentData[0]?.URL; if (url) { //convert document url in array buffer format to use embed widgets in pdf using pdf-lib @@ -238,21 +242,17 @@ function SignYourSelf() { } else { setHandleError(t("something-went-wrong-mssg")); } - isCompleted = - documentData[0].IsCompleted && documentData[0].IsCompleted; + isCompleted = documentData?.[0]?.IsCompleted; if (isCompleted) { setIsCelebration(true); - setTimeout(() => { - setIsCelebration(false); - }, 5000); + setTimeout(() => setIsCelebration(false), 5000); setIsCompleted(true); setPdfUrl(documentData[0].SignedUrl); - const alreadySign = { - status: true, - mssg: t("document-signed-alert") - }; if (showComplete) { - setShowAlreadySignDoc(alreadySign); + setShowAlreadySignDoc({ + status: true, + mssg: t("document-signed-alert") + }); } else { setIsUiLoading(false); setIsSignPad(false); @@ -265,17 +265,11 @@ function SignYourSelf() { documentData === "Error: Something went wrong!" || (documentData.result && documentData.result.error) ) { - const loadObj = { - isLoad: false - }; setHandleError(t("something-went-wrong-mssg")); - setIsLoading(loadObj); + setIsLoading({ isLoad: false }); } else { setHandleError(t("no-data-avaliable")); - const loadObj = { - isLoad: false - }; - setIsLoading(loadObj); + setIsLoading({ isLoad: false }); } //function to get default signatur eof current user from `contracts_Signature` class const defaultSignRes = await getDefaultSignature(jsonSender.objectId); @@ -284,17 +278,12 @@ function SignYourSelf() { setMyInitial(defaultSignRes?.res?.defaultInitial); } else if (defaultSignRes?.status === "error") { setHandleError("Error: Something went wrong!"); - setIsLoading({ - isLoad: false - }); + setIsLoading({ isLoad: false }); } const contractUsersRes = await contractUsers(); if (contractUsersRes === "Error: Something went wrong!") { - const loadObj = { - isLoad: false - }; setHandleError(t("something-went-wrong-mssg")); - setIsLoading(loadObj); + setIsLoading({ isLoad: false }); } else if (contractUsersRes[0] && contractUsersRes.length > 0) { setActiveMailAdapter(contractUsersRes[0]?.active_mail_adapter); setContractName("_Users"); @@ -374,51 +363,32 @@ function SignYourSelf() { const addWidgetOptions = (type) => { switch (type) { case "signature": - return { - name: "signature" - }; + return { name: "signature" }; case "stamp": - return { - name: "stamp" - }; + return { name: "stamp" }; case "checkbox": - return { - name: "checkbox" - }; + return { name: "checkbox" }; case textWidget: - return { - name: "text" - }; + return { name: "text" }; case "initials": - return { - name: "initials" - }; + return { name: "initials" }; case "name": return { name: "name", defaultValue: getWidgetValue(type), - validation: { - type: "text", - pattern: "" - } + validation: { type: "text", pattern: "" } }; case "company": return { name: "company", defaultValue: getWidgetValue(type), - validation: { - type: "text", - pattern: "" - } + validation: { type: "text", pattern: "" } }; case "job title": return { name: "job title", defaultValue: getWidgetValue(type), - validation: { - type: "text", - pattern: "" - } + validation: { type: "text", pattern: "" } }; case "date": return { @@ -427,17 +397,12 @@ function SignYourSelf() { validation: { format: "MM/dd/yyyy", type: "date-format" } }; case "image": - return { - name: "image" - }; + return { name: "image" }; case "email": return { name: "email", defaultValue: getWidgetValue(type), - validation: { - type: "email", - pattern: "" - } + validation: { type: "email", pattern: "" } }; default: return {}; @@ -449,7 +414,7 @@ function SignYourSelf() { const key = randomId(); let dropData = []; let dropObj = {}; - let filterDropPos = xyPostion.filter( + let filterDropPos = xyPostion?.filter( (data) => data.pageNumber === pageNumber ); const dragTypeValue = item?.text ? item.text : monitor.type; @@ -486,7 +451,6 @@ function SignYourSelf() { Height: getHeight / (containerScale * scale), options: addWidgetOptions(dragTypeValue) }; - dropData.push(dropObj); } else { //This method returns the offset of the current pointer (mouse) position relative to the client viewport. @@ -519,25 +483,18 @@ function SignYourSelf() { options: addWidgetOptions(dragTypeValue), scale: containerScale }; - dropData.push(dropObj); } - if (filterDropPos.length > 0) { - const index = xyPostion.findIndex((object) => { + if (filterDropPos?.length > 0) { + const index = xyPostion?.findIndex((object) => { return object.pageNumber === pageNumber; }); - const updateData = filterDropPos[0].pos; + const updateData = filterDropPos?.[0].pos; const newSignPos = updateData.concat(dropData); - let xyPos = { - pageNumber: pageNumber, - pos: newSignPos - }; - xyPostion.splice(index, 1, xyPos); + let xyPos = { pageNumber: pageNumber, pos: newSignPos }; + xyPostion?.splice(index, 1, xyPos); } else { - const xyPos = { - pageNumber: pageNumber, - pos: dropData - }; + const xyPos = { pageNumber: pageNumber, pos: dropData }; setXyPostion((prev) => [...prev, xyPos]); } @@ -549,7 +506,6 @@ function SignYourSelf() { ) { setIsSignPad(true); } - if (dragTypeValue === "stamp" || dragTypeValue === "image") { setIsStamp(true); } else if (dragTypeValue === "initials") { @@ -612,6 +568,30 @@ function SignYourSelf() { setIsVerifyModal(true); await handleSendOTP(Parse.User.current().getEmail()); }; + useEffect(() => { + const timer = setTimeout(() => { + if (xyPostion?.length > 0) { + autosavedetails(); + } + }, 2000); + return () => clearTimeout(timer); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [xyPostion]); + + // `autosavedetails` is used to save doc details after every 2 sec when changes are happern in placeholder like drag-drop widgets, remove signers + const autosavedetails = async () => { + try { + const docCls = new Parse.Object("contracts_Document"); + docCls.id = documentId; + docCls.set("Placeholders", xyPostion); + docCls.set("IsSignyourself", true); + const res = await docCls.save(); + console.log("Res", res); + } catch (e) { + console.log("error", e); + alert(t("something-went-wrong-mssg")); + } + }; //function for send placeholder's co-ordinate(x,y) position embed signature url or stamp url async function embedWidgetsData() { //check current user email is verified or not @@ -791,7 +771,6 @@ function SignYourSelf() { const getNewse64 = await changeImageWH(base64Sign); //remove suffiix of base64 const suffixbase64 = getNewse64 && getNewse64.split(",").pop(); - const params = { pdfFile: base64Url, docId: documentId, @@ -825,10 +804,10 @@ function SignYourSelf() { containerWH ); if (dragKey >= 0) { - const filterDropPos = xyPostion.filter( + const filterDropPos = xyPostion?.filter( (data) => data.pageNumber === pageNumber ); - if (filterDropPos.length > 0) { + if (filterDropPos?.length > 0) { const getXYdata = xyPostion[index].pos; const getPosData = getXYdata; const addSign = getPosData.map((url) => { @@ -899,15 +878,11 @@ function SignYourSelf() { setIsSignPad(false); setIsImageSelect(false); setImage(); - if (isDefaultSign) { const img = new Image(); img.src = defaultSignImg; if (img.complete) { - imgWH = { - width: img.width, - height: img.height - }; + imgWH = { width: img.width, height: img.height }; } } const getUpdatePosition = onSaveSign( @@ -932,19 +907,11 @@ function SignYourSelf() { const touch = e.touches[0]; // Get the first touch point mouseX = touch.clientX - divRect.left; mouseY = touch.clientY - divRect.top; - setSignBtnPosition([ - { - xPos: mouseX, - yPos: mouseY - } - ]); + setSignBtnPosition([{ xPos: mouseX, yPos: mouseY }]); } else { mouseX = e.clientX - divRect.left; mouseY = e.clientY - divRect.top; - const xyPosition = { - xPos: mouseX, - yPos: mouseY - }; + const xyPosition = { xPos: mouseX, yPos: mouseY }; setXYSignature(xyPosition); } }; @@ -962,9 +929,7 @@ function SignYourSelf() { const handleDeleteSign = (key) => { setCurrWidgetsDetails({}); const updateResizeData = []; - let filterData = xyPostion[index].pos.filter((data) => data.key !== key); - //delete and update block position if (filterData.length > 0) { updateResizeData.push(filterData); @@ -1243,7 +1208,6 @@ function SignYourSelf() { )} -
{!isEmailVerified && ( { + const className = 'contracts_Document'; + const schema = new Parse.Schema(className); + schema.addBoolean('IsSignyourself'); + return schema.update(); +}; + +/** + * + * @param {Parse} Parse + */ +exports.down = async Parse => { + const className = 'contracts_Document'; + const schema = new Parse.Schema(className); + schema.deleteField('IsSignyourself'); + return schema.update(); +}; From 669ba9e8cbb1d29d3e94f5f22717d6a994991915 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Fri, 23 Aug 2024 12:40:38 +0530 Subject: [PATCH 3/6] feat: add download btn in expired document --- apps/OpenSign/src/pages/PdfRequestFiles.js | 100 ++++++------------ .../src/primitives/PdfDeclineModal.js | 32 +++--- 2 files changed, 50 insertions(+), 82 deletions(-) diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index 8bde5629a..f2296b0f4 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -34,7 +34,8 @@ import { openInNewTab, getDefaultSignature, onClickZoomIn, - onClickZoomOut + onClickZoomOut, + fetchUrl } from "../constant/Utils"; import LoaderWithMsg from "../primitives/LoaderWithMsg"; import HandleError from "../primitives/HandleError"; @@ -340,23 +341,17 @@ function PdfRequestFiles(props) { } setUnSignedSigners(placeholdersOrSigners); setPdfDetails(documentData); - setIsLoading({ - isLoad: false - }); + setIsLoading({ isLoad: false }); } else if ( documentData === "Error: Something went wrong!" || (documentData.result && documentData.result.error) ) { console.log("err in get template details "); setHandleError(t("something-went-wrong-mssg")); - setIsLoading({ - isLoad: false - }); + setIsLoading({ isLoad: false }); } else { setHandleError(t("no-data")); - setIsLoading({ - isLoad: false - }); + setIsLoading({ isLoad: false }); } } catch (err) { console.log("err in get template details ", err); @@ -424,16 +419,11 @@ function PdfRequestFiles(props) { } if (isCompleted) { setIsSigned(true); - const data = { - isCertificate: true, - isModal: true - }; + const data = { isCertificate: true, isModal: true }; setAlreadySign(true); setIsCompleted(data); setIsCelebration(true); - setTimeout(() => { - setIsCelebration(false); - }, 5000); + setTimeout(() => setIsCelebration(false), 5000); } else if (declined) { const currentDecline = { currnt: "another", @@ -449,9 +439,7 @@ function PdfRequestFiles(props) { } // Check if the current signer is not a last signer and handle the complete message. else if (isNextUser) { setIsCelebration(true); - setTimeout(() => { - setIsCelebration(false); - }, 5000); + setTimeout(() => setIsCelebration(false), 5000); setIsCompleted({ isModal: true, message: t("document-signed-alert-1") @@ -478,7 +466,8 @@ function PdfRequestFiles(props) { documentData[0].AuditTrail.length > 0 && documentData[0].AuditTrail.filter( (data) => - data.UserPtr.objectId === currUserId && data.Activity === "Signed" + data.UserPtr?.objectId === currUserId && + data.Activity === "Signed" ); if ( checkAlreadySign && @@ -558,15 +547,15 @@ function PdfRequestFiles(props) { for (const item of placeholdersOrSigners) { const checkEmail = item?.email; //if email exist then compare user signed by using email else signers objectId - const emailOrId = checkEmail ? item.email : item.objectId; + const emailOrId = checkEmail ? item.email : item?.objectId; //`isSignedSignature` variable to handle break loop whenever it get true let isSignedSignature = false; //checking the signer who signed the document by using audit trail details. //and save signedSigners and unsignedSigners details for (const doc of audittrailData) { const signedExist = checkEmail - ? doc?.UserPtr.Email - : doc?.UserPtr.objectId; + ? doc?.UserPtr?.Email + : doc?.UserPtr?.objectId; if (emailOrId === signedExist) { signers.push({ ...item }); @@ -644,15 +633,11 @@ function PdfRequestFiles(props) { (documentData.result && documentData.result.error) ) { setHandleError(t("something-went-wrong-mssg")); - setIsLoading({ - isLoad: false - }); + setIsLoading({ isLoad: false }); console.log("err in getDocument cloud function "); } else { setHandleError(t("no-data")); - setIsUiLoading({ - isLoad: false - }); + setIsUiLoading({ isLoad: false }); } //function to get default signatur eof current user from `contracts_Signature` class const defaultSignRes = await getDefaultSignature(jsonSender.objectId); @@ -662,15 +647,11 @@ function PdfRequestFiles(props) { } else if (defaultSignRes?.status === "error") { setHandleError("Error: Something went wrong!"); } - setIsLoading({ - isLoad: false - }); + setIsLoading({ isLoad: false }); } catch (err) { console.log("Error: error in getDocumentDetails", err); setHandleError("Error: Something went wrong!"); - setIsLoading({ - isLoad: false - }); + setIsLoading({ isLoad: false }); } }; //function for embed signature or image url in pdf @@ -1028,9 +1009,7 @@ function PdfRequestFiles(props) { openSignUrl + " target=_blank>here.

" }; - await axios.post(url, params, { - headers: headers - }); + await axios.post(url, params, { headers: headers }); } catch (error) { console.log("error", error); } @@ -1193,10 +1172,7 @@ function PdfRequestFiles(props) { const img = new Image(); img.src = defaultSignImg; if (img.complete) { - imgWH = { - width: img.width, - height: img.height - }; + imgWH = { width: img.width, height: img.height }; } } //get current signer placeholder position data @@ -1256,10 +1232,7 @@ function PdfRequestFiles(props) { .then(async (result) => { const res = result.data; if (res) { - const currentDecline = { - currnt: "YouDeclined", - isDeclined: true - }; + const currentDecline = { currnt: "YouDeclined", isDeclined: true }; setIsDecline(currentDecline); setIsUiLoading(false); const params = { @@ -1318,10 +1291,7 @@ function PdfRequestFiles(props) { x.signerObjId === signerObjectId ? { ...x, placeHolder: updatePlace } : x ); setSignerPos(updatesignerPos); - setDefaultSignAlert({ - isShow: false, - alertMessage: "" - }); + setDefaultSignAlert({ isShow: false, alertMessage: "" }); }; const handleDontShow = (isChecked) => { setIsDontShow(isChecked); @@ -1502,7 +1472,6 @@ function PdfRequestFiles(props) { const SendOtp = async () => { try { const params = { email: contact.email, docId: res.docId }; - const Otp = await axios.post( `${localStorage.getItem("baseUrl")}/functions/SendOTPMailV1`, params, @@ -1540,10 +1509,7 @@ function PdfRequestFiles(props) { "Content-Type": "application/json", "X-Parse-Application-Id": parseId }; - let body = { - email: contact.email, - otp: otp - }; + let body = { email: contact.email, otp: otp }; let user = await axios.post(url, body, { headers: headers }); if (user.data.result === "Invalid Otp") { alert(t("invalid-otp")); @@ -1575,9 +1541,7 @@ function PdfRequestFiles(props) { // document.getElementById("my_modal").close(); setIsPublicContact(false); setIsPublicTemplate(false); - setIsLoading({ - isLoad: false - }); + setIsLoading({ isLoad: false }); setDocumentId(res?.docId); getDocumentDetails(res?.docId); } @@ -1593,11 +1557,7 @@ function PdfRequestFiles(props) { setLoading(false); setIsOtp(false); setOtp(); - setContact({ - name: "", - email: "", - phone: "" - }); + setContact({ name: "", email: "", phone: "" }); }; const clickOnZoomIn = () => { @@ -1606,6 +1566,11 @@ function PdfRequestFiles(props) { const clickOnZoomOut = () => { onClickZoomOut(zoomPercent, scale, setZoomPercent, setScale); }; + const handleDownloadBtn = async () => { + const url = pdfDetails?.[0]?.SignedUrl || pdfDetails?.[0]?.URL; + const name = pdfDetails?.[0]?.Name; + await fetchUrl(url, name); + }; return ( @@ -1696,9 +1661,9 @@ function PdfRequestFiles(props) { headMsg={t("document-decline")} bodyMssg={ isDecline.currnt === "Sure" - ? t("decline-alert-2") + ? t("decline-alert-1") : isDecline.currnt === "YouDeclined" - ? t("decline-alert-1") + ? t("decline-alert-2") : isDecline.currnt === "another" && t("decline-alert-3") } footerMessage={isDecline.currnt === "Sure"} @@ -1710,6 +1675,8 @@ function PdfRequestFiles(props) { show={isExpired} headMsg={t("expired-doc-title")} bodyMssg={t("expired-on-mssg", { expiredDate })} + isDownloadBtn={true} + handleDownloadBtn={handleDownloadBtn} /> {!isEmailVerified && ( <VerifyEmail @@ -1723,7 +1690,6 @@ function PdfRequestFiles(props) { handleResend={handleResend} /> )} - <ModalUi isOpen={isPublicContact} title={isOtp ? t("verify-email-1") : t("contact-details")} diff --git a/apps/OpenSign/src/primitives/PdfDeclineModal.js b/apps/OpenSign/src/primitives/PdfDeclineModal.js index 58bdf91c5..37c89cce5 100644 --- a/apps/OpenSign/src/primitives/PdfDeclineModal.js +++ b/apps/OpenSign/src/primitives/PdfDeclineModal.js @@ -2,27 +2,30 @@ import React, { useState } from "react"; import "../styles/signature.css"; import { useTranslation } from "react-i18next"; -function CustomModal({ - show, - headMsg, - bodyMssg, - footerMessage, - declineDoc, - setIsDecline -}) { +function CustomModal(props) { const { t } = useTranslation(); const [reason, setReason] = useState(""); return ( - show && ( + props.show && ( <dialog className="op-modal op-modal-open absolute z-[448]"> <div className="w-[95%] md:w-[60%] lg:w-[40%] op-modal-box p-0 overflow-y-auto hide-scrollbar text-sm"> <h3 className="text-base-content font-bold text-lg pt-[15px] px-[20px]"> - {headMsg && headMsg} + {props?.headMsg && props?.headMsg} </h3> <div className="p-[10px] px-[20px]"> - <p className="text-[15px]">{bodyMssg && bodyMssg}</p> + <p className="text-[15px]">{props.bodyMssg && props.bodyMssg}</p> </div> - {footerMessage && ( + {props.isDownloadBtn && ( + <div className="flex justify-start w-full ml-[20px] mb-3 mt-1"> + <button + className="op-btn op-btn-primary " + onClick={() => props.handleDownloadBtn()} + > + Download + </button> + </div> + )} + {props.footerMessage && ( <> <div className="mx-3"> <textarea @@ -33,14 +36,13 @@ function CustomModal({ onChange={(e) => setReason(e.target.value)} ></textarea> </div> - {/* <div className="h-[1px] bg-[#9f9f9f] w-full"></div> */} <div className="m-[15px]"> <button className="op-btn op-btn-primary mr-2 px-6" type="button" onClick={() => { setReason(""); - declineDoc(reason); + props.declineDoc(reason); }} > {t("yes")} @@ -50,7 +52,7 @@ function CustomModal({ className="op-btn op-btn-secondary" onClick={() => { setReason(""); - setIsDecline({ isDeclined: false }); + props.setIsDecline({ isDeclined: false }); }} > {t("close")} From 07878207de396ed444efe3765b068f9eb472f6f2 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs <prafull.navkar@nxglabs.com> Date: Fri, 23 Aug 2024 17:06:53 +0530 Subject: [PATCH 4/6] fix: validation of api token --- apps/OpenSign/src/components/BulkSendUi.js | 105 +++++++++++++-------- apps/OpenSign/src/pages/GenerateToken.js | 25 +++-- 2 files changed, 81 insertions(+), 49 deletions(-) diff --git a/apps/OpenSign/src/components/BulkSendUi.js b/apps/OpenSign/src/components/BulkSendUi.js index f04130cbf..c71ab35ed 100644 --- a/apps/OpenSign/src/components/BulkSendUi.js +++ b/apps/OpenSign/src/components/BulkSendUi.js @@ -6,8 +6,11 @@ import { useTranslation } from "react-i18next"; import Parse from "parse"; import ModalUi from "../primitives/ModalUi"; import { isEnableSubscription } from "../constant/const"; +import { fetchSubscription } from "../constant/Utils"; +import { useNavigate } from "react-router-dom"; const BulkSendUi = (props) => { const { t } = useTranslation(); + const navigate = useNavigate(); const [forms, setForms] = useState([]); const [formId, setFormId] = useState(2); const formRef = useRef(null); @@ -25,6 +28,7 @@ const BulkSendUi = (props) => { }); const [isQuotaReached, setIsQuotaReached] = useState(false); const [isLoader, setIsLoader] = useState(false); + const [isFreePlan, setIsFreePlan] = useState(false); const allowedSigners = 50; useEffect(() => { signatureExist(); @@ -36,6 +40,10 @@ const BulkSendUi = (props) => { if (isEnableSubscription) { setIsLoader(true); try { + const subscription = await fetchSubscription(); + if (subscription?.plan === "freeplan") { + setIsFreePlan(true); + } const allowedquicksend = await Parse.Cloud.run("allowedquicksend"); if (allowedquicksend > 0) { setIsBulkAvailable(true); @@ -273,6 +281,9 @@ const BulkSendUi = (props) => { const handleCloseQuotaReached = () => { setIsQuotaReached(false); }; + const handleNavigation = () => { + navigate("/subscription"); + }; return ( <> {isLoader ? ( @@ -385,46 +396,62 @@ const BulkSendUi = (props) => { )} </> ) : ( - <form onSubmit={handleAddOnQuickSubmit} className="p-3"> - <p className="flex justify-center text-center mx-2 mb-3 text-base op-text-accent font-medium"> - {t("additional-quicksend")} - </p> - <div className="mb-3 flex justify-between"> - <label - htmlFor="quantity" - className="block text-xs text-gray-700 font-semibold" - > - {t("quantityofquicksend")} - <span className="text-[red] text-[13px]">*</span> - </label> - <select - value={amount.quantity} - onChange={(e) => handlePricePerQuick(e)} - name="quantity" - className="op-select op-select-bordered op-select-sm focus:outline-none hover:border-base-content w-1/4 text-xs" - required - > - {quantityList.length > 0 && - quantityList.map((x) => ( - <option key={x} value={x}> - {x} - </option> - ))} - </select> - </div> - <div className="mb-3 flex justify-between"> - <label className="block text-xs text-gray-700 font-semibold"> - {t("Price")} (1 * {amount.priceperbulksend}) - </label> - <div className="w-1/4 flex justify-center items-center text-sm"> - USD {amount.price} + <> + {isFreePlan ? ( + <div className="w-full h-[130px] flex flex-col justify-center items-center text-center p-4"> + <p className="text-base font-medium mb-2.5"> + Please upgrade to Professional or Team plan to use quicksend + </p> + <button + onClick={() => handleNavigation()} + className="op-btn op-btn-primary" + > + Upgrade Now + </button> </div> - </div> - <hr className="text-base-content mb-3" /> - <button className="op-btn op-btn-primary w-full mt-2"> - {t("Proceed")} - </button> - </form> + ) : ( + <form onSubmit={handleAddOnQuickSubmit} className="p-3"> + <p className="flex justify-center text-center mx-2 mb-3 text-base op-text-accent font-medium"> + {t("additional-quicksend")} + </p> + <div className="mb-3 flex justify-between"> + <label + htmlFor="quantity" + className="block text-xs text-gray-700 font-semibold" + > + {t("quantityofquicksend")} + <span className="text-[red] text-[13px]">*</span> + </label> + <select + value={amount.quantity} + onChange={(e) => handlePricePerQuick(e)} + name="quantity" + className="op-select op-select-bordered op-select-sm focus:outline-none hover:border-base-content w-1/4 text-xs" + required + > + {quantityList.length > 0 && + quantityList.map((x) => ( + <option key={x} value={x}> + {x} + </option> + ))} + </select> + </div> + <div className="mb-3 flex justify-between"> + <label className="block text-xs text-gray-700 font-semibold"> + {t("Price")} (1 * {amount.priceperbulksend}) + </label> + <div className="w-1/4 flex justify-center items-center text-sm"> + USD {amount.price} + </div> + </div> + <hr className="text-base-content mb-3" /> + <button className="op-btn op-btn-primary w-full mt-2"> + {t("Proceed")} + </button> + </form> + )} + </> )} </> )} diff --git a/apps/OpenSign/src/pages/GenerateToken.js b/apps/OpenSign/src/pages/GenerateToken.js index 108a47deb..0cbcfa198 100644 --- a/apps/OpenSign/src/pages/GenerateToken.js +++ b/apps/OpenSign/src/pages/GenerateToken.js @@ -9,7 +9,6 @@ import Tooltip from "../primitives/Tooltip"; import Loader from "../primitives/Loader"; import SubscribeCard from "../primitives/SubscribeCard"; import Tour from "reactour"; -import { validplan } from "../json/plansArr"; import { useTranslation } from "react-i18next"; import Parse from "parse"; @@ -65,7 +64,7 @@ function GenerateToken() { }; const handleSubmit = async (e) => { e.preventDefault(); - if (!validplan[isSubscribe.plan] && isEnableSubscription) { + if (isSubscribe?.plan === "freeplan" && isEnableSubscription) { setIsTour(true); } else { setIsLoader(true); @@ -103,11 +102,15 @@ function GenerateToken() { setTimeout(() => setIsAlert({ type: "success", msg: "" }), 1500); // Reset copied state after 1.5 seconds }; const handleModal = () => { - setIsModal((obj) => ({ ...obj, generateapi: !obj.generateapi })); + if (isSubscribe?.plan === "freeplan" && isEnableSubscription) { + setIsTour(true); + } else { + setIsModal((obj) => ({ ...obj, generateapi: !obj.generateapi })); + } }; const handleBuyAPIsModal = () => { - if (!validplan[isSubscribe.plan] && isEnableSubscription) { + if (isSubscribe?.plan === "freeplan" && isEnableSubscription) { setIsTour(true); } else { setIsModal((obj) => ({ ...obj, buyapis: !obj.buyapis })); @@ -176,16 +179,18 @@ function GenerateToken() { <span id="token" className={`${ - validplan[isSubscribe.plan] - ? "" - : "bg-white/20 pointer-events-none select-none" + isSubscribe?.plan === "freeplan" + ? "bg-white/20 pointer-events-none select-none" + : "" } md:text-end py-2 md:py-0`} > <span className="cursor-pointer" onClick={() => copytoclipboard(apiToken)} > - {apiToken ? apiToken : "_____"} + {isSubscribe?.plan !== "freeplan" && apiToken + ? apiToken + : "_____"} </span> <button className="op-btn op-btn-accent op-btn-outline op-btn-sm ml-2 cursor-pointer" @@ -303,9 +308,9 @@ function GenerateToken() { </form> </ModalUi> </div> - {!validplan[isSubscribe.plan] && isEnableSubscription && ( + {isSubscribe?.plan === "freeplan" && isEnableSubscription && ( <div data-tut="apisubscribe"> - <SubscribeCard plan_code={isSubscribe.plan} /> + <SubscribeCard plan_code={isSubscribe?.plan} /> </div> )} </> From bd4d333d596775209ddad76fcb3ad722db7a6af4 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs <prafull.navkar@nxglabs.com> Date: Fri, 23 Aug 2024 17:32:53 +0530 Subject: [PATCH 5/6] build(deps): update dependencies --- apps/OpenSign/package-lock.json | 1047 +++++++++-------- apps/OpenSign/package.json | 16 +- .../public/locales/en/translation.json | 3 +- .../public/locales/fr/translation.json | 3 +- apps/OpenSign/src/components/BulkSendUi.js | 4 +- apps/OpenSignServer/package-lock.json | 32 +- apps/OpenSignServer/package.json | 4 +- 7 files changed, 601 insertions(+), 508 deletions(-) diff --git a/apps/OpenSign/package-lock.json b/apps/OpenSign/package-lock.json index 4bf010e87..888e55a5c 100644 --- a/apps/OpenSign/package-lock.json +++ b/apps/OpenSign/package-lock.json @@ -9,16 +9,16 @@ "version": "0.1.0", "dependencies": { "@formkit/auto-animate": "^0.8.2", - "@lottiefiles/dotlottie-react": "^0.8.7", + "@lottiefiles/dotlottie-react": "^0.8.9", "@pdf-lib/fontkit": "^1.1.1", "@radix-ui/themes": "^3.1.3", "@react-pdf/renderer": "^3.4.4", "@reduxjs/toolkit": "^2.2.7", "axios": "^1.7.4", "file-saver": "^2.0.5", - "i18next": "^23.12.2", + "i18next": "^23.14.0", "i18next-browser-languagedetector": "^8.0.0", - "i18next-http-backend": "^2.5.2", + "i18next-http-backend": "^2.6.1", "jwt-decode": "^4.0.0", "moment": "^2.30.1", "nth-check": "^2.1.1", @@ -41,10 +41,10 @@ "react-i18next": "^15.0.1", "react-konva": "^18.2.10", "react-pdf": "^9.1.0", - "react-quill-new": "^3.2.2", + "react-quill-new": "^3.3.0", "react-redux": "^9.1.2", "react-rnd": "^10.4.11", - "react-router-dom": "^6.26.0", + "react-router-dom": "^6.26.1", "react-scripts": "5.0.1", "react-scrollbars-custom": "^4.1.1", "react-select": "^5.8.0", @@ -62,9 +62,9 @@ }, "devDependencies": { "@babel/core": "^7.25.2", - "@babel/preset-env": "^7.25.3", + "@babel/preset-env": "^7.25.4", "@babel/preset-react": "^7.24.7", - "@babel/runtime-corejs2": "^7.25.0", + "@babel/runtime-corejs2": "^7.25.4", "autoprefixer": "^10.4.20", "babel-loader": "^9.1.3", "clean-webpack-plugin": "^4.0.0", @@ -78,7 +78,7 @@ "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.34.3", "lint-staged": "^15.2.8", - "mini-css-extract-plugin": "^2.9.0", + "mini-css-extract-plugin": "^2.9.1", "postcss": "^8.4.41", "prettier": "^3.3.3", "pretty-quick": "^4.0.0", @@ -139,9 +139,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "engines": { "node": ">=6.9.0" } @@ -201,11 +201,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.25.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz", + "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==", "dependencies": { - "@babel/types": "^7.25.0", + "@babel/types": "^7.25.4", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -253,16 +253,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", - "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "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==", "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.0", + "@babel/traverse": "^7.25.4", "semver": "^6.3.1" }, "engines": { @@ -483,11 +483,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz", + "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==", "dependencies": { - "@babel/types": "^7.25.2" + "@babel/types": "^7.25.4" }, "bin": { "parser": "bin/babel-parser.js" @@ -977,14 +977,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", - "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "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==", "dependencies": { "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-remap-async-to-generator": "^7.25.0", "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.0" + "@babel/traverse": "^7.25.4" }, "engines": { "node": ">=6.9.0" @@ -1038,12 +1038,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "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==", "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.4", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1069,15 +1069,15 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", - "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "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==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", + "@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.0", + "@babel/traverse": "^7.25.4", "globals": "^11.1.0" }, "engines": { @@ -1509,12 +1509,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "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==", "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.4", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1811,12 +1811,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", - "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "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==", "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.2", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1826,11 +1826,11 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", - "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", + "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", "dependencies": { - "@babel/compat-data": "^7.25.2", + "@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", @@ -1859,13 +1859,13 @@ "@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.0", + "@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.24.7", + "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.0", + "@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", @@ -1893,7 +1893,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.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", @@ -1906,10 +1906,10 @@ "@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.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.37.1", "semver": "^6.3.1" @@ -1988,9 +1988,9 @@ } }, "node_modules/@babel/runtime-corejs2": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.25.0.tgz", - "integrity": "sha512-aoYVE3tm+vgAoezmXFWmVcp+NlSdsUqQMPL7c6zRxq8KDHCf570pamC7005Q/UkSlTuoL6oeE16zIw/9J3YFyw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.25.4.tgz", + "integrity": "sha512-6IxkDkxN13FQAB8FGF+vrvZVA77EqG4UzCwVGc9x9Ylerj70W3nMUwoXDbj2LtJxXlFKM256APcDQIItT2OFYA==", "dev": true, "dependencies": { "core-js": "^2.6.12", @@ -2026,15 +2026,15 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz", + "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", + "@babel/generator": "^7.25.4", + "@babel/parser": "^7.25.4", "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", + "@babel/types": "^7.25.4", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2043,9 +2043,9 @@ } }, "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz", + "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==", "dependencies": { "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", @@ -3615,11 +3615,11 @@ "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" }, "node_modules/@lottiefiles/dotlottie-react": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.8.7.tgz", - "integrity": "sha512-vytNbD6tpmuBNrkfPHBC0luStanaihmL1CXwdFw2sXbRl/5V7r2ZzclhMd+rIczYqg1rEa9vTRepF2bl/7pHrQ==", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.8.9.tgz", + "integrity": "sha512-J+pFtN2vRw6gAVb0xsz5JWZfHxwSEIGCIHx8ZFvOEyv4LRBzIeUbkSwuSB6tS4SFG508g4Xj8ra2z3R+Yktxxw==", "dependencies": { - "@lottiefiles/dotlottie-web": "0.30.2", + "@lottiefiles/dotlottie-web": "0.31.0", "debounce": "^2.0.0" }, "peerDependencies": { @@ -3628,9 +3628,9 @@ } }, "node_modules/@lottiefiles/dotlottie-web": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-web/-/dotlottie-web-0.30.2.tgz", - "integrity": "sha512-HAUDPouNGqSIB+6b72bSmv6AC+RpMKk5RAzd9G2Wj9m/+pZRlQTFRUYBMqcRgkCtXIOagkgtwQw9fMg1/a4gxQ==" + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-web/-/dotlottie-web-0.31.0.tgz", + "integrity": "sha512-cb3+FZEDRpTuDeD8xafJPOeHEX5ijF+riwsugkZWH/2fhF4RfprCebx/C2Y+YhGMsNp6/hH6docYGP9K09yHXQ==" }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.11", @@ -5411,9 +5411,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.0.tgz", - "integrity": "sha512-zDICCLKEwbVYTS6TjYaWtHXxkdoUvD/QXvyVZjGCsWz5vyH7aFeONlPffPdW+Y/t6KT0MgXb2Mfjun9YpWN1dA==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", "engines": { "node": ">=14.0.0" } @@ -6236,94 +6236,6 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", - "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", - "dependencies": { - "@typescript-eslint/utils": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", @@ -6366,6 +6278,62 @@ } } }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/types": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", @@ -6442,62 +6410,6 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", @@ -10711,33 +10623,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.0" - } - }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", @@ -10780,129 +10665,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@babel/plugin-syntax-flow": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.9", - "eslint": "^8.1.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", - "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", - "dependencies": { - "aria-query": "~5.1.3", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.9.1", - "axobject-query": "~3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.19", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, "node_modules/eslint-plugin-prettier": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", @@ -10964,17 +10726,6 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -11002,21 +10753,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-testing-library": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", - "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", - "dependencies": { - "@typescript-eslint/utils": "^5.58.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" - }, - "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" - } - }, "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -11043,64 +10779,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -12947,9 +12625,9 @@ "integrity": "sha512-SejXzIpv9gOVdDWXd4suM1fdF1k2dxZGvuTdkOVLoazYfK7O4DykIQbdrvuyG+EaTNlXAGhMndtKrhykgbt0gg==" }, "node_modules/i18next": { - "version": "23.12.3", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.12.3.tgz", - "integrity": "sha512-DyigQmrR10V9U2N6pjhbfahW13GY7n8BQD9swN09JuRRropgsksWVi4vRLeex0Qf7zCPnBfIqQfhcBzdZBQBYw==", + "version": "23.14.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.14.0.tgz", + "integrity": "sha512-Y5GL4OdA8IU2geRrt2+Uc1iIhsjICdHZzT9tNwQ3TVqdNzgxHToGCKf/TPRP80vTCAP6svg2WbbJL+Gx5MFQVA==", "funding": [ { "type": "individual", @@ -12977,9 +12655,9 @@ } }, "node_modules/i18next-http-backend": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.5.2.tgz", - "integrity": "sha512-+K8HbDfrvc1/2X8jpb7RLhI9ZxBDpx3xogYkQwGKlWAUXLSEGXzgdt3EcUjLlBCdMwdQY+K+EUF6oh8oB6rwHw==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.6.1.tgz", + "integrity": "sha512-rCilMAnlEQNeKOZY1+x8wLM5IpYOj10guGvEpeC59tNjj6MMreLIjIW8D1RclhD3ifLwn6d/Y9HEM1RUE6DSog==", "dependencies": { "cross-fetch": "4.0.0" } @@ -17359,9 +17037,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", - "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz", + "integrity": "sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ==", "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -20858,9 +20536,9 @@ } }, "node_modules/react-quill-new": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/react-quill-new/-/react-quill-new-3.2.2.tgz", - "integrity": "sha512-pWMfSVAG/ErEh8qjffEp7g8FxRZOcYgTjyi0lp5aLRc/8Ii6u9u95NWu4oeDhFJuZ0NX/h1VnOul8WWKvsl0uQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/react-quill-new/-/react-quill-new-3.3.0.tgz", + "integrity": "sha512-nhr6Z8MrhVjRZuCpXn/MU6FDbTuvmPXCm6N9+ZJldsu/F5uucBu7RNoKs9jKIUp7+Ek3FlvWT+vCIki+pQfqBA==", "dependencies": { "lodash-es": "^4.17.21", "quill": "~2.0.2" @@ -20989,11 +20667,11 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/react-router": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.0.tgz", - "integrity": "sha512-wVQq0/iFYd3iZ9H2l3N3k4PL8EEHcb0XlU2Na8nEwmiXgIUElEH6gaJDtUQxJ+JFzmIXaQjfdpcGWaM6IoQGxg==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", "dependencies": { - "@remix-run/router": "1.19.0" + "@remix-run/router": "1.19.1" }, "engines": { "node": ">=14.0.0" @@ -21003,12 +20681,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.0.tgz", - "integrity": "sha512-RRGUIiDtLrkX3uYcFiCIxKFWMcWQGMojpYZfcstc63A1+sSnVgILGIm9gNUA6na3Fm1QuPGSBQH2EMbAZOnMsQ==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", "dependencies": { - "@remix-run/router": "1.19.0", - "react-router": "6.26.0" + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" }, "engines": { "node": ">=14.0.0" @@ -21090,6 +20768,128 @@ } } }, + "node_modules/react-scripts/node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/react-scripts/node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "dependencies": { + "@typescript-eslint/utils": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/react-scripts/node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/react-scripts/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/react-scripts/node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/react-scripts/node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/react-scripts/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -21173,6 +20973,262 @@ "node": ">=10" } }, + "node_modules/react-scripts/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/react-scripts/node_modules/eslint-config-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/react-scripts/node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" + } + }, + "node_modules/react-scripts/node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/react-scripts/node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/react-scripts/node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-scripts/node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/react-scripts/node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/react-scripts/node_modules/eslint-plugin-jsx-a11y": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", + "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", + "dependencies": { + "aria-query": "~5.1.3", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.9.1", + "axobject-query": "~3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.19", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/react-scripts/node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/react-scripts/node_modules/eslint-plugin-testing-library": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", + "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/react-scripts/node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/react-scripts/node_modules/eslint-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/react-scripts/node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/react-scripts/node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/react-scripts/node_modules/eslint-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/react-scripts/node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -21214,6 +21270,41 @@ "node": ">=12" } }, + "node_modules/react-scripts/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-scripts/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/react-scripts/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/react-scripts/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", diff --git a/apps/OpenSign/package.json b/apps/OpenSign/package.json index 815aa0268..f139bdaca 100644 --- a/apps/OpenSign/package.json +++ b/apps/OpenSign/package.json @@ -4,16 +4,16 @@ "private": true, "dependencies": { "@formkit/auto-animate": "^0.8.2", - "@lottiefiles/dotlottie-react": "^0.8.7", + "@lottiefiles/dotlottie-react": "^0.8.9", "@pdf-lib/fontkit": "^1.1.1", "@radix-ui/themes": "^3.1.3", "@react-pdf/renderer": "^3.4.4", "@reduxjs/toolkit": "^2.2.7", "axios": "^1.7.4", "file-saver": "^2.0.5", - "i18next": "^23.12.2", + "i18next": "^23.14.0", "i18next-browser-languagedetector": "^8.0.0", - "i18next-http-backend": "^2.5.2", + "i18next-http-backend": "^2.6.1", "jwt-decode": "^4.0.0", "moment": "^2.30.1", "nth-check": "^2.1.1", @@ -36,10 +36,10 @@ "react-i18next": "^15.0.1", "react-konva": "^18.2.10", "react-pdf": "^9.1.0", - "react-quill-new": "^3.2.2", + "react-quill-new": "^3.3.0", "react-redux": "^9.1.2", "react-rnd": "^10.4.11", - "react-router-dom": "^6.26.0", + "react-router-dom": "^6.26.1", "react-scripts": "5.0.1", "react-scrollbars-custom": "^4.1.1", "react-select": "^5.8.0", @@ -94,9 +94,9 @@ }, "devDependencies": { "@babel/core": "^7.25.2", - "@babel/preset-env": "^7.25.3", + "@babel/preset-env": "^7.25.4", "@babel/preset-react": "^7.24.7", - "@babel/runtime-corejs2": "^7.25.0", + "@babel/runtime-corejs2": "^7.25.4", "autoprefixer": "^10.4.20", "babel-loader": "^9.1.3", "clean-webpack-plugin": "^4.0.0", @@ -110,7 +110,7 @@ "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.34.3", "lint-staged": "^15.2.8", - "mini-css-extract-plugin": "^2.9.0", + "mini-css-extract-plugin": "^2.9.1", "postcss": "^8.4.41", "prettier": "^3.3.3", "pretty-quick": "^4.0.0", diff --git a/apps/OpenSign/public/locales/en/translation.json b/apps/OpenSign/public/locales/en/translation.json index 6077d59dd..51e6ac36d 100644 --- a/apps/OpenSign/public/locales/en/translation.json +++ b/apps/OpenSign/public/locales/en/translation.json @@ -616,5 +616,6 @@ "buycredits": "Buy credits", "rotate-right":"Rotate right", "rotate-left":"Rotate left", - "rotate-alert-mssg":"All widgets on this page will be lost. Are you sure you want to proceed?" + "rotate-alert-mssg":"All widgets on this page will be lost. Are you sure you want to proceed?", + "bulksendsubcriptionalert":"Please upgrade to Professional or Team plan to use quicksend." } diff --git a/apps/OpenSign/public/locales/fr/translation.json b/apps/OpenSign/public/locales/fr/translation.json index 53b329712..52340b7ba 100644 --- a/apps/OpenSign/public/locales/fr/translation.json +++ b/apps/OpenSign/public/locales/fr/translation.json @@ -616,5 +616,6 @@ "buycredits": "Acheter des crédits", "rotate-right" :"Faire pivoter à droite", "rotate-left" :"Faire pivoter à gauche", - "rotate-alert-mssg" :"Tous les widgets de cette page seront perdus. Êtes-vous sûr de vouloir continuer ?" + "rotate-alert-mssg" :"Tous les widgets de cette page seront perdus. Êtes-vous sûr de vouloir continuer ?", + "bulksendsubcriptionalert":"Veuillez passer au forfait Professionnel ou Équipe pour utiliser Quicksend." } diff --git a/apps/OpenSign/src/components/BulkSendUi.js b/apps/OpenSign/src/components/BulkSendUi.js index c71ab35ed..5a6e218fb 100644 --- a/apps/OpenSign/src/components/BulkSendUi.js +++ b/apps/OpenSign/src/components/BulkSendUi.js @@ -400,13 +400,13 @@ const BulkSendUi = (props) => { {isFreePlan ? ( <div className="w-full h-[130px] flex flex-col justify-center items-center text-center p-4"> <p className="text-base font-medium mb-2.5"> - Please upgrade to Professional or Team plan to use quicksend + {t("bulksendsubcriptionalert")} </p> <button onClick={() => handleNavigation()} className="op-btn op-btn-primary" > - Upgrade Now + {t("upgrade-now")} </button> </div> ) : ( diff --git a/apps/OpenSignServer/package-lock.json b/apps/OpenSignServer/package-lock.json index a5059eb1d..641e91475 100644 --- a/apps/OpenSignServer/package-lock.json +++ b/apps/OpenSignServer/package-lock.json @@ -15,7 +15,7 @@ "@signpdf/placeholder-pdf-lib": "^3.2.4", "@signpdf/signer-p12": "^3.2.4", "@signpdf/signpdf": "^3.2.4", - "aws-sdk": "^2.1674.0", + "aws-sdk": "^2.1681.0", "axios": "^1.7.4", "cors": "^2.8.5", "dotenv": "^16.4.5", @@ -42,7 +42,7 @@ "@babel/eslint-parser": "^7.25.1", "eslint": "^9.9.0", "jasmine": "^5.2.0", - "mongodb-runner": "^5.6.4", + "mongodb-runner": "^5.6.5", "nodemon": "^3.1.4", "nyc": "^17.0.0", "prettier": "^3.3.3" @@ -2315,14 +2315,14 @@ "deprecated": "This package has been decomissioned. See https://github.com/ldapjs/node-ldapjs/blob/8ffd0bc9c149088a10ec4c1ec6a18450f76ad05d/README.md" }, "node_modules/@mongodb-js/mongodb-downloader": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-downloader/-/mongodb-downloader-0.3.3.tgz", - "integrity": "sha512-PIu8qF6J02lQsxfq8vdcfvueb8H5mrB43UaOl1E4AQMrOhm403imAZYKH61qe+7J7WzlVFck0zGI/7brHLHcNQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-downloader/-/mongodb-downloader-0.3.5.tgz", + "integrity": "sha512-0tNik3E/eQxx8EkJpsa9+IIK5LtMle3N7M/1wtKQKMixJjZ1vsgAjJGguYbLfCyJqfnrw9KMyD1cwgaS37tvRA==", "dev": true, "dependencies": { "debug": "^4.3.4", "decompress": "^4.2.1", - "mongodb-download-url": "^1.3.0", + "mongodb-download-url": "^1.5.1", "node-fetch": "^2.6.11", "tar": "^6.1.15" } @@ -4120,9 +4120,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1674.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1674.0.tgz", - "integrity": "sha512-VTijN8+pKrf4sfM2t+ISXjypJ+k3AiP6OMzyLoWJ7jfMBtBfWbQc1rN07OndNb0CZRBBukOHoBhYDPuyae+/1Q==", + "version": "2.1681.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1681.0.tgz", + "integrity": "sha512-oeCr0muJraT+g7ceTMlJcidVayPMfT69EEvDIWMbeBIHqbLOJVtpsF577VZJNEh2Zkj+8DivR69kWdu+Y9JSyQ==", "hasInstallScript": true, "dependencies": { "buffer": "4.9.2", @@ -8077,9 +8077,9 @@ } }, "node_modules/mongodb-download-url": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mongodb-download-url/-/mongodb-download-url-1.5.0.tgz", - "integrity": "sha512-zQP7t3aEpbWabn4ZlYapu8ODm7iRA0ON7hVFqxW2fSmY1kdCoYmKTW4LK+WfaokWOPGpLt4ZPtiWL54Bv1r87g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/mongodb-download-url/-/mongodb-download-url-1.5.1.tgz", + "integrity": "sha512-AJH2lqb7mBo7tT7RyFWK3P/ZMh7RC1qWJgOaAVrBdKeuPuCWGCESrti+ZMt6FA6mJ4eU58Lm7iG2rTkl94pBdQ==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -8104,12 +8104,12 @@ } }, "node_modules/mongodb-runner": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-5.6.4.tgz", - "integrity": "sha512-pwWsei3btwq9omPLjNaERmSxwt72/OzQx1O468XBuUfhmlTJ+Ta+CIUYOX8vP3K0vSS6E/NUQBG/3ctEoLqOCA==", + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-5.6.5.tgz", + "integrity": "sha512-joZJL5YKuwP7MNegz0CKt7rAPgAeUcWhOfJZPgifnKD+3tl4oMbRwP+HjcQjBieT1dr9lh+kI1MQuGInRtQzMw==", "dev": true, "dependencies": { - "@mongodb-js/mongodb-downloader": "^0.3.3", + "@mongodb-js/mongodb-downloader": "^0.3.5", "@mongodb-js/saslprep": "^1.1.8", "debug": "^4.3.4", "mongodb": "^6.8.0", diff --git a/apps/OpenSignServer/package.json b/apps/OpenSignServer/package.json index 7f7afd2ce..b09e006fa 100644 --- a/apps/OpenSignServer/package.json +++ b/apps/OpenSignServer/package.json @@ -24,7 +24,7 @@ "@signpdf/placeholder-pdf-lib": "^3.2.4", "@signpdf/signer-p12": "^3.2.4", "@signpdf/signpdf": "^3.2.4", - "aws-sdk": "^2.1674.0", + "aws-sdk": "^2.1681.0", "axios": "^1.7.4", "cors": "^2.8.5", "dotenv": "^16.4.5", @@ -52,7 +52,7 @@ "@babel/eslint-parser": "^7.25.1", "eslint": "^9.9.0", "jasmine": "^5.2.0", - "mongodb-runner": "^5.6.4", + "mongodb-runner": "^5.6.5", "nodemon": "^3.1.4", "nyc": "^17.0.0", "prettier": "^3.3.3" From 7b7b10c9a5b4f0d5eca097c73345e22e4a897b7a Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs <prafull.navkar@nxglabs.com> Date: Tue, 27 Aug 2024 13:22:48 +0530 Subject: [PATCH 6/6] fix: api token visible --- apps/OpenSign/src/pages/GenerateToken.js | 18 ++++++++++++------ .../cloud/parsefunction/getapitoken.js | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/apps/OpenSign/src/pages/GenerateToken.js b/apps/OpenSign/src/pages/GenerateToken.js index 0cbcfa198..52fcd2413 100644 --- a/apps/OpenSign/src/pages/GenerateToken.js +++ b/apps/OpenSign/src/pages/GenerateToken.js @@ -14,8 +14,8 @@ import Parse from "parse"; function GenerateToken() { const { t } = useTranslation(); - const [parseBaseUrl] = useState(localStorage.getItem("baseUrl")); - const [parseAppId] = useState(localStorage.getItem("parseAppId")); + const parseBaseUrl = localStorage.getItem("baseUrl"); + const parseAppId = localStorage.getItem("parseAppId"); const [apiToken, SetApiToken] = useState(""); const [isLoader, setIsLoader] = useState(true); const [isModal, setIsModal] = useState({ @@ -49,11 +49,17 @@ function GenerateToken() { const subscribe = await checkIsSubscribed(); setIsSubscribe(subscribe); } - const res = await Parse.Cloud.run("getapitoken"); + const url = parseBaseUrl + "functions/getapitoken"; + const headers = { + "Content-Type": "application/json", + "X-Parse-Application-Id": parseAppId, + sessiontoken: localStorage.getItem("accesstoken") + }; + const res = await axios.post(url, {}, { headers: headers }); if (res) { const allowedapis = await Parse.Cloud.run("allowedapis"); setAmount((obj) => ({ ...obj, totalapis: allowedapis })); - SetApiToken(res?.result); + SetApiToken(res?.data?.result?.result); } setIsLoader(false); } catch (err) { @@ -122,7 +128,7 @@ function GenerateToken() { const price = quantity > 0 ? (Math.round(quantity * amount.priceperapi * 100) / 100).toFixed(2) - : 500 * amount.priceperapi; + : (Math.round(500 * amount.priceperapi * 100) / 100).toFixed(2); setAmount((prev) => ({ ...prev, quantity: quantity, price: price })); }; const handleAddOnApiSubmit = async (e) => { @@ -138,7 +144,7 @@ function GenerateToken() { if (_resAddon.status === "success") { setAmount((obj) => ({ ...obj, - quantity: 1, + quantity: 500, priceperapi: 0.15, price: (75.0).toFixed(2), totalapis: _resAddon.addon diff --git a/apps/OpenSignServer/cloud/parsefunction/getapitoken.js b/apps/OpenSignServer/cloud/parsefunction/getapitoken.js index b76217f85..0f051e011 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getapitoken.js +++ b/apps/OpenSignServer/cloud/parsefunction/getapitoken.js @@ -1,7 +1,17 @@ +import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; + export default async function getapitoken(request) { try { - if (request?.user) { - const userId = request?.user?.id; + const serverUrl = cloudServerUrl; //process.env.SERVER_URL; + const userRes = await axios.get(serverUrl + '/users/me', { + headers: { + 'X-Parse-Application-Id': process.env.APP_ID, + 'X-Parse-Session-Token': request.headers['sessiontoken'], + }, + }); + const userId = userRes.data && userRes.data.objectId; + if (userId) { const tokenQuery = new Parse.Query('appToken'); tokenQuery.equalTo('userId', { __type: 'Pointer', className: '_User', objectId: userId }); const res = await tokenQuery.first({ useMasterKey: true });