diff --git a/apps/remix/app/routes/api+/webhook.trigger.ts b/apps/remix/app/routes/api+/webhook.trigger.ts index 582c86296..d7ed16a96 100644 --- a/apps/remix/app/routes/api+/webhook.trigger.ts +++ b/apps/remix/app/routes/api+/webhook.trigger.ts @@ -1,3 +1,4 @@ +// Todo: [Webhooks] delete file after deployment. import { handlerTriggerWebhooks } from '@documenso/lib/server-only/webhooks/trigger/handler'; import type { Route } from './+types/webhook.trigger'; diff --git a/packages/lib/server-only/webhooks/trigger/handler.ts b/packages/lib/server-only/webhooks/trigger/handler.ts index 55d287bac..3b99cc092 100644 --- a/packages/lib/server-only/webhooks/trigger/handler.ts +++ b/packages/lib/server-only/webhooks/trigger/handler.ts @@ -13,6 +13,7 @@ export type HandlerTriggerWebhooksResponse = error: string; }; +// Todo: [Webhooks] delete after deployment. export const handlerTriggerWebhooks = async (req: Request) => { const signature = req.headers.get('x-webhook-signature'); diff --git a/packages/lib/server-only/webhooks/trigger/trigger-webhook.ts b/packages/lib/server-only/webhooks/trigger/trigger-webhook.ts index 998da6e53..49c18e048 100644 --- a/packages/lib/server-only/webhooks/trigger/trigger-webhook.ts +++ b/packages/lib/server-only/webhooks/trigger/trigger-webhook.ts @@ -1,7 +1,6 @@ import type { WebhookTriggerEvents } from '@prisma/client'; -import { NEXT_PRIVATE_INTERNAL_WEBAPP_URL } from '../../../constants/app'; -import { sign } from '../../crypto/sign'; +import { jobs } from '../../../jobs/client'; import { getAllWebhooksByEventTrigger } from '../get-all-webhooks-by-event-trigger'; export type TriggerWebhookOptions = { @@ -13,35 +12,26 @@ export type TriggerWebhookOptions = { export const triggerWebhook = async ({ event, data, userId, teamId }: TriggerWebhookOptions) => { try { - const body = { - event, - data, - userId, - teamId, - }; - const registeredWebhooks = await getAllWebhooksByEventTrigger({ event, userId, teamId }); if (registeredWebhooks.length === 0) { return; } - const signature = sign(body); - - await Promise.race([ - fetch(`${NEXT_PRIVATE_INTERNAL_WEBAPP_URL()}/api/webhook/trigger`, { - method: 'POST', - headers: { - 'content-type': 'application/json', - 'x-webhook-signature': signature, - }, - body: JSON.stringify(body), + await Promise.allSettled( + registeredWebhooks.map(async (webhook) => { + await jobs.triggerJob({ + name: 'internal.execute-webhook', + payload: { + event, + webhookId: webhook.id, + data, + }, + }); }), - new Promise((_, reject) => { - setTimeout(() => reject(new Error('Request timeout')), 500); - }), - ]).catch(() => null); + ); } catch (err) { + console.error(err); throw new Error(`Failed to trigger webhook`); } };