feat: update webhook handling and triggering

This commit is contained in:
Mythie
2024-02-27 15:16:14 +11:00
parent 488464e3e7
commit 7dd2bbd8ab
17 changed files with 263 additions and 90 deletions

View File

@ -1,39 +0,0 @@
import type { Document, Webhook } from '@documenso/prisma/client';
export type PostWebhookPayloadOptions = {
webhookData: Pick<Webhook, 'webhookUrl' | 'secret' | 'eventTriggers'>;
documentData: Document;
};
export const postWebhookPayload = async ({
webhookData,
documentData,
}: PostWebhookPayloadOptions) => {
const { webhookUrl, secret } = webhookData;
const payload = {
event: webhookData.eventTriggers.toString(),
createdAt: new Date().toISOString(),
webhookEndpoint: webhookUrl,
payload: documentData,
};
const response = await fetch(webhookUrl, {
method: 'POST',
body: JSON.stringify(payload),
headers: {
'Content-Type': 'application/json',
'X-Documenso-Secret': secret ?? '',
},
});
if (!response.ok) {
throw new Error(`Webhook failed with the status code ${response.status}`);
}
return {
status: response.status,
statusText: response.statusText,
message: 'Webhook sent successfully',
};
};

View File

@ -1,30 +0,0 @@
import type { Document, WebhookTriggerEvents } from '@documenso/prisma/client';
import { getAllWebhooksByEventTrigger } from '../server-only/webhooks/get-all-webhooks-by-event-trigger';
import { postWebhookPayload } from './post-webhook-payload';
export type TriggerWebhookOptions = {
eventTrigger: WebhookTriggerEvents;
documentData: Document;
};
export const triggerWebhook = async ({ eventTrigger, documentData }: TriggerWebhookOptions) => {
try {
const allWebhooks = await getAllWebhooksByEventTrigger({ eventTrigger });
const webhookPromises = allWebhooks.map((webhook) => {
const { webhookUrl, secret } = webhook;
postWebhookPayload({
webhookData: { webhookUrl, secret, eventTriggers: [eventTrigger] },
documentData,
}).catch((_err) => {
throw new Error(`Failed to send webhook to ${webhookUrl}`);
});
});
return Promise.all(webhookPromises);
} catch (err) {
throw new Error(`Failed to trigger webhook`);
}
};