mirror of
https://github.com/documenso/documenso.git
synced 2026-07-11 13:35:20 +10:00
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import { executeWebhookCall } from '@documenso/lib/server-only/webhooks/execute-webhook-call';
|
|
import { prisma } from '@documenso/prisma';
|
|
import type { Prisma } from '@prisma/client';
|
|
import { WebhookCallStatus } from '@prisma/client';
|
|
|
|
import type { JobRunIO } from '../../client/_internal/job';
|
|
import type { TExecuteWebhookJobDefinition } from './execute-webhook';
|
|
|
|
export const run = async ({ payload, io: _io }: { payload: TExecuteWebhookJobDefinition; io: JobRunIO }) => {
|
|
const { event, webhookId, data } = payload;
|
|
|
|
const webhook = await prisma.webhook.findUniqueOrThrow({
|
|
where: {
|
|
id: webhookId,
|
|
},
|
|
});
|
|
|
|
const { webhookUrl: url, secret } = webhook;
|
|
|
|
const payloadData = {
|
|
event,
|
|
payload: data,
|
|
createdAt: new Date().toISOString(),
|
|
webhookEndpoint: url,
|
|
};
|
|
|
|
const result = await executeWebhookCall({ url, body: payloadData, secret });
|
|
|
|
await prisma.webhookCall.create({
|
|
data: {
|
|
url,
|
|
event,
|
|
status: result.success ? WebhookCallStatus.SUCCESS : WebhookCallStatus.FAILED,
|
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
requestBody: payloadData as Prisma.InputJsonValue,
|
|
responseCode: result.responseCode,
|
|
responseBody: result.responseBody,
|
|
responseHeaders: result.responseHeaders,
|
|
webhookId: webhook.id,
|
|
},
|
|
});
|
|
|
|
if (!result.success) {
|
|
throw new Error(`Webhook execution failed with status ${result.responseCode}`);
|
|
}
|
|
|
|
return {
|
|
success: true,
|
|
status: result.responseCode,
|
|
};
|
|
};
|