extend webhook triggers
This commit is contained in:
@@ -9,9 +9,11 @@ import { DOCUMENT_AUDIT_LOG_TYPE } from '@documenso/lib/types/document-audit-log
|
|||||||
import { createDocumentAuditLogData } from '@documenso/lib/utils/document-audit-logs';
|
import { createDocumentAuditLogData } from '@documenso/lib/utils/document-audit-logs';
|
||||||
import { prisma } from '@documenso/prisma';
|
import { prisma } from '@documenso/prisma';
|
||||||
import { DocumentStatus, RecipientRole, SigningStatus } from '@documenso/prisma/client';
|
import { DocumentStatus, RecipientRole, SigningStatus } from '@documenso/prisma/client';
|
||||||
|
import { WebhookTriggerEvents } from '@documenso/prisma/client';
|
||||||
import { signPdf } from '@documenso/signing';
|
import { signPdf } from '@documenso/signing';
|
||||||
|
|
||||||
import type { RequestMetadata } from '../../universal/extract-request-metadata';
|
import type { RequestMetadata } from '../../universal/extract-request-metadata';
|
||||||
|
import { triggerWebhook } from '../../universal/trigger-webhook';
|
||||||
import { getFile } from '../../universal/upload/get-file';
|
import { getFile } from '../../universal/upload/get-file';
|
||||||
import { putFile } from '../../universal/upload/put-file';
|
import { putFile } from '../../universal/upload/put-file';
|
||||||
import { insertFieldInPDF } from '../pdf/insert-field-in-pdf';
|
import { insertFieldInPDF } from '../pdf/insert-field-in-pdf';
|
||||||
@@ -134,4 +136,9 @@ export const sealDocument = async ({
|
|||||||
if (sendEmail) {
|
if (sendEmail) {
|
||||||
await sendCompletedEmail({ documentId, requestMetadata });
|
await sendCompletedEmail({ documentId, requestMetadata });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await triggerWebhook({
|
||||||
|
eventTrigger: WebhookTriggerEvents.DOCUMENT_COMPLETED,
|
||||||
|
documentData: document,
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,12 +10,14 @@ import { createDocumentAuditLogData } from '@documenso/lib/utils/document-audit-
|
|||||||
import { renderCustomEmailTemplate } from '@documenso/lib/utils/render-custom-email-template';
|
import { renderCustomEmailTemplate } from '@documenso/lib/utils/render-custom-email-template';
|
||||||
import { prisma } from '@documenso/prisma';
|
import { prisma } from '@documenso/prisma';
|
||||||
import { DocumentStatus, RecipientRole, SendStatus } from '@documenso/prisma/client';
|
import { DocumentStatus, RecipientRole, SendStatus } from '@documenso/prisma/client';
|
||||||
|
import { WebhookTriggerEvents } from '@documenso/prisma/client';
|
||||||
|
|
||||||
import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app';
|
import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app';
|
||||||
import {
|
import {
|
||||||
RECIPIENT_ROLES_DESCRIPTION,
|
RECIPIENT_ROLES_DESCRIPTION,
|
||||||
RECIPIENT_ROLE_TO_EMAIL_TYPE,
|
RECIPIENT_ROLE_TO_EMAIL_TYPE,
|
||||||
} from '../../constants/recipient-roles';
|
} from '../../constants/recipient-roles';
|
||||||
|
import { triggerWebhook } from '../../universal/trigger-webhook';
|
||||||
|
|
||||||
export type SendDocumentOptions = {
|
export type SendDocumentOptions = {
|
||||||
documentId: number;
|
documentId: number;
|
||||||
@@ -163,5 +165,10 @@ export const sendDocument = async ({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await triggerWebhook({
|
||||||
|
eventTrigger: WebhookTriggerEvents.DOCUMENT_SENT,
|
||||||
|
documentData: updatedDocument,
|
||||||
|
});
|
||||||
|
|
||||||
return updatedDocument;
|
return updatedDocument;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,6 +3,10 @@ import type { RequestMetadata } from '@documenso/lib/universal/extract-request-m
|
|||||||
import { createDocumentAuditLogData } from '@documenso/lib/utils/document-audit-logs';
|
import { createDocumentAuditLogData } from '@documenso/lib/utils/document-audit-logs';
|
||||||
import { prisma } from '@documenso/prisma';
|
import { prisma } from '@documenso/prisma';
|
||||||
import { ReadStatus } from '@documenso/prisma/client';
|
import { ReadStatus } from '@documenso/prisma/client';
|
||||||
|
import { WebhookTriggerEvents } from '@documenso/prisma/client';
|
||||||
|
|
||||||
|
import { triggerWebhook } from '../../universal/trigger-webhook';
|
||||||
|
import { getDocumentAndSenderByToken } from './get-document-by-token';
|
||||||
|
|
||||||
export type ViewedDocumentOptions = {
|
export type ViewedDocumentOptions = {
|
||||||
token: string;
|
token: string;
|
||||||
@@ -23,8 +27,8 @@ export const viewedDocument = async ({ token, requestMetadata }: ViewedDocumentO
|
|||||||
|
|
||||||
const { documentId } = recipient;
|
const { documentId } = recipient;
|
||||||
|
|
||||||
await prisma.$transaction(async (tx) => {
|
const { updatedRecipient } = await prisma.$transaction(async (tx) => {
|
||||||
await tx.recipient.update({
|
const updatedRecipient = await tx.recipient.update({
|
||||||
where: {
|
where: {
|
||||||
id: recipient.id,
|
id: recipient.id,
|
||||||
},
|
},
|
||||||
@@ -50,5 +54,25 @@ export const viewedDocument = async ({ token, requestMetadata }: ViewedDocumentO
|
|||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return { updatedRecipient };
|
||||||
|
});
|
||||||
|
|
||||||
|
const document = await getDocumentAndSenderByToken({ token });
|
||||||
|
|
||||||
|
await triggerWebhook({
|
||||||
|
eventTrigger: WebhookTriggerEvents.DOCUMENT_OPENED,
|
||||||
|
documentData: {
|
||||||
|
id: document.id,
|
||||||
|
userId: document.userId,
|
||||||
|
title: document.title,
|
||||||
|
status: document.status,
|
||||||
|
documentDataId: document.documentDataId,
|
||||||
|
createdAt: document.createdAt,
|
||||||
|
updatedAt: document.updatedAt,
|
||||||
|
completedAt: document.completedAt,
|
||||||
|
deletedAt: document.deletedAt,
|
||||||
|
teamId: document.teamId,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,5 +5,8 @@ export const getWebhooksByUserId = async (userId: number) => {
|
|||||||
where: {
|
where: {
|
||||||
userId,
|
userId,
|
||||||
},
|
},
|
||||||
|
orderBy: {
|
||||||
|
createdAt: 'desc',
|
||||||
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import type { NextApiRequest, NextApiResponse } from 'next';
|
import type { NextApiRequest, NextApiResponse } from 'next';
|
||||||
|
|
||||||
import { findDocuments } from '@documenso/lib/server-only/document/find-documents';
|
import { findDocuments } from '@documenso/lib/server-only/document/find-documents';
|
||||||
|
import { getRecipientsForDocument } from '@documenso/lib/server-only/recipient/get-recipients-for-document';
|
||||||
|
|
||||||
import { getWebhooksByUserId } from '../get-webhooks-by-user-id';
|
import { getWebhooksByUserId } from '../get-webhooks-by-user-id';
|
||||||
import { validateApiToken } from './validateApiToken';
|
import { validateApiToken } from './validateApiToken';
|
||||||
@@ -12,6 +13,10 @@ export const listDocumentsHandler = async (req: NextApiRequest, res: NextApiResp
|
|||||||
|
|
||||||
const documents = await findDocuments({ userId: user.id });
|
const documents = await findDocuments({ userId: user.id });
|
||||||
const allWebhooks = await getWebhooksByUserId(user.id);
|
const allWebhooks = await getWebhooksByUserId(user.id);
|
||||||
|
const recipients = await getRecipientsForDocument({
|
||||||
|
documentId: documents.data[0].id,
|
||||||
|
userId: user.id,
|
||||||
|
});
|
||||||
|
|
||||||
if (documents.data.length > 0 && allWebhooks.length > 0) {
|
if (documents.data.length > 0 && allWebhooks.length > 0) {
|
||||||
const testWebhook = {
|
const testWebhook = {
|
||||||
@@ -29,6 +34,7 @@ export const listDocumentsHandler = async (req: NextApiRequest, res: NextApiResp
|
|||||||
completedAt: documents.data[0].completedAt,
|
completedAt: documents.data[0].completedAt,
|
||||||
deletedAt: documents.data[0].deletedAt,
|
deletedAt: documents.data[0].deletedAt,
|
||||||
teamId: documents.data[0].teamId,
|
teamId: documents.data[0].teamId,
|
||||||
|
Recipient: recipients,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
-- AlterEnum
|
||||||
|
-- This migration adds more than one value to an enum.
|
||||||
|
-- With PostgreSQL versions 11 and earlier, this is not possible
|
||||||
|
-- in a single migration. This can be worked around by creating
|
||||||
|
-- multiple migrations, each migration adding only one value to
|
||||||
|
-- the enum.
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TYPE "WebhookTriggerEvents" ADD VALUE 'DOCUMENT_SENT';
|
||||||
|
ALTER TYPE "WebhookTriggerEvents" ADD VALUE 'DOCUMENT_OPENED';
|
||||||
|
ALTER TYPE "WebhookTriggerEvents" ADD VALUE 'DOCUMENT_COMPLETED';
|
||||||
@@ -112,7 +112,10 @@ model ApiToken {
|
|||||||
|
|
||||||
enum WebhookTriggerEvents {
|
enum WebhookTriggerEvents {
|
||||||
DOCUMENT_CREATED
|
DOCUMENT_CREATED
|
||||||
|
DOCUMENT_SENT
|
||||||
|
DOCUMENT_OPENED
|
||||||
DOCUMENT_SIGNED
|
DOCUMENT_SIGNED
|
||||||
|
DOCUMENT_COMPLETED
|
||||||
}
|
}
|
||||||
|
|
||||||
model Webhook {
|
model Webhook {
|
||||||
|
|||||||
Reference in New Issue
Block a user