Add additional translations and cleanup.

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Patrick Fic
2026-04-27 11:37:25 -07:00
parent a96a1139fa
commit 6ca0ebff5f
8 changed files with 2925 additions and 157 deletions

View File

@@ -6,7 +6,7 @@ const logger = require("../utils/logger");
//Need to pull the key dynamically to send documents.
const JSR_SERVER = process.env.JSR_URL || "https://reports.imex.online";
const jsreport = require("@jsreport/nodejs-client");
const { QUERY_JOB_FOR_SIGNATURE, INSERT_ESIGNATURE_DOCUMENT, DISTRIBUTE_ESIGNATURE_DOCUMENT, QUERY_ESIGNATURE_BY_EXTERNAL_ID, UPDATE_ESIGNATURE_DOCUMENT, QUERY_DOCUMENSO_KEY } = require("../graphql-client/queries");
const { QUERY_JOB_FOR_SIGNATURE, INSERT_ESIGNATURE_DOCUMENT, DISTRIBUTE_ESIGNATURE_DOCUMENT, QUERY_ESIGNATURE_BY_EXTERNAL_ID, UPDATE_ESIGNATURE_DOCUMENT, QUERY_DOCUMENSO_KEY, INSERT_ESIG_AUDIT_TRAIL } = require("../graphql-client/queries");
const _ = require("lodash");
function parseJsonField(value, fallback = null) {
@@ -122,7 +122,6 @@ async function createEsignDocumentFromPdf({ req, bodyshop, pdfBuffer, esigData,
};
}
async function distributeDocument(req, res) {
try {
const client = req.userGraphQLClient;
@@ -159,6 +158,44 @@ async function distributeDocument(req, res) {
}
}
async function redistributeDocument(req, res) {
try {
const client = req.userGraphQLClient;
const { documentId, bodyshopid } = req.body;
const documenso = await getDocumensoClient({ bodyshopid, req })
const document = await documenso.documents.get({
documentId: parseInt(documentId)
});
const distributeResult = await documenso.documents.redistribute({
documentId: parseInt(documentId),
recipients: document.recipients.filter(r => r.signingStatus === "NOT_SIGNED").map(r => r.id)
});
await client.request(INSERT_ESIG_AUDIT_TRAIL, {
obj: {
jobid: req.body.jobid,
bodyshopid: req.body.bodyshopid,
operation: `Esignature document with title ${distributeResult.title} (ID: ${documentId}) redistributed to recipients.`,
useremail: req.user?.email,
type: 'esig-redistribute'
}
})
res.json({ success: true, distributeResult });
} catch (error) {
logger.log(`esig-redistribute-error`, "ERROR", "esig", "api", {
message: error.message, stack: error.stack,
body: req.body
});
res.status(500).json({ error: "An error occurred while redistributing the document.", message: error.message });
}
}
async function deleteDocument(req, res) {
try {
const client = req.userGraphQLClient;
@@ -413,6 +450,7 @@ module.exports = {
newEsignDocument,
newCustomEsignDocument,
distributeDocument,
redistributeDocument,
deleteDocument,
viewDocument,
getDocumensoClient

View File

@@ -16,6 +16,7 @@ const webhookTypeEnums = {
DOCUMENT_CANCELLED: "DOCUMENT_CANCELLED",
DOCUMENT_OPENED: "DOCUMENT_OPENED",
DOCUMENT_SIGNED: "DOCUMENT_SIGNED",
DOCUMENT_REMINDER_SENT: "DOCUMENT_REMINDER_SENT",
}
async function esignWebhook(req, res) {
@@ -29,6 +30,8 @@ async function esignWebhook(req, res) {
const documentId = (message.payload?.id || message.payload?.payload?.id)?.toString()
//TODO: Implement checks to prevent this from going backwards in status? If a request fails, it retries, which could cause a document marked as completed to be marked as rejected if the rejection event is processed after the completion event.
switch (message.event) {
case webhookTypeEnums.DOCUMENT_REMINDER_SENT:
break;
case webhookTypeEnums.DOCUMENT_OPENED:
//TODO: DR: Add notification for document opened.
await client.request(UPDATE_ESIGNATURE_DOCUMENT, {

View File

@@ -4,7 +4,7 @@ const multer = require("multer");
const validateFirebaseIdTokenMiddleware = require("../middleware/validateFirebaseIdTokenMiddleware");
const withUserGraphQLClientMiddleware = require("../middleware/withUserGraphQLClientMiddleware");
const { newEsignDocument, newCustomEsignDocument, distributeDocument, viewDocument, deleteDocument } = require("../esign/esign-new");
const { newEsignDocument, newCustomEsignDocument, distributeDocument, redistributeDocument, viewDocument, deleteDocument } = require("../esign/esign-new");
const { esignWebhook } = require("../esign/webhook");
const upload = multer({
@@ -16,6 +16,7 @@ const upload = multer({
router.post("/new", validateFirebaseIdTokenMiddleware, withUserGraphQLClientMiddleware, newEsignDocument);
router.post("/new-custom", validateFirebaseIdTokenMiddleware, withUserGraphQLClientMiddleware, upload.single("document"), newCustomEsignDocument);
router.post("/distribute", validateFirebaseIdTokenMiddleware, withUserGraphQLClientMiddleware, distributeDocument);
router.post("/redistribute", validateFirebaseIdTokenMiddleware, withUserGraphQLClientMiddleware, redistributeDocument);
router.post("/delete", validateFirebaseIdTokenMiddleware, withUserGraphQLClientMiddleware, deleteDocument);
router.post("/view", validateFirebaseIdTokenMiddleware, withUserGraphQLClientMiddleware, viewDocument);
router.post("/webhook", esignWebhook);