From 27a3edeb9304e88dd5724c57dfa9ff4851477eb2 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Sat, 7 Oct 2023 18:34:53 +0200 Subject: [PATCH 1/3] feat: Add run method to webhook triggers --- .../triggers/new-activity/index.ts | 12 ++++++++++++ .../triggers/confidential-issue-event/index.ts | 2 ++ .../triggers/confidential-note-event/index.ts | 2 ++ .../gitlab/triggers/deployment-event/index.ts | 2 ++ .../gitlab/triggers/feature-flag-event/index.ts | 2 ++ .../apps/gitlab/triggers/issue-event/index.ts | 2 ++ .../src/apps/gitlab/triggers/job-event/index.ts | 2 ++ packages/backend/src/apps/gitlab/triggers/lib.ts | 11 +++++++++++ .../gitlab/triggers/merge-request-event/index.ts | 2 ++ .../src/apps/gitlab/triggers/note-event/index.ts | 2 ++ .../apps/gitlab/triggers/pipeline-event/index.ts | 2 ++ .../src/apps/gitlab/triggers/push-event/index.ts | 2 ++ .../apps/gitlab/triggers/release-event/index.ts | 2 ++ .../apps/gitlab/triggers/tag-push-event/index.ts | 2 ++ .../gitlab/triggers/wiki-page-event/index.ts | 2 ++ .../apps/twilio/triggers/receive-sms/index.ts | 12 ++++++++++++ .../apps/typeform/triggers/new-entry/index.ts | 12 ++++++++++++ .../webhook/triggers/catch-raw-webhook/index.ts | 16 ++++++++++++++++ 18 files changed, 89 insertions(+) diff --git a/packages/backend/src/apps/flowers-software/triggers/new-activity/index.ts b/packages/backend/src/apps/flowers-software/triggers/new-activity/index.ts index efee7fcc53..ef01d81b9c 100644 --- a/packages/backend/src/apps/flowers-software/triggers/new-activity/index.ts +++ b/packages/backend/src/apps/flowers-software/triggers/new-activity/index.ts @@ -1,3 +1,4 @@ +import Crypto from 'crypto'; import isEmpty from 'lodash/isEmpty'; import defineTrigger from '../../../../helpers/define-trigger'; import webhookFilters from '../../common/webhook-filters'; @@ -19,6 +20,17 @@ export default defineTrigger({ }, ], + async run($) { + const dataItem = { + raw: $.request.body, + meta: { + internalId: Crypto.randomUUID(), + }, + }; + + $.pushTriggerItem(dataItem); + }, + async testRun($) { const lastExecutionStep = await $.getLastExecutionStep(); diff --git a/packages/backend/src/apps/gitlab/triggers/confidential-issue-event/index.ts b/packages/backend/src/apps/gitlab/triggers/confidential-issue-event/index.ts index 662d8ccd98..72dc6ccc28 100644 --- a/packages/backend/src/apps/gitlab/triggers/confidential-issue-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/confidential-issue-event/index.ts @@ -3,6 +3,7 @@ import defineTrigger from '../../../../helpers/define-trigger'; import { GITLAB_EVENT_TYPE } from '../types'; import { getRegisterHookFn, + getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, @@ -19,6 +20,7 @@ export const triggerDescriptor: IRawTrigger = { key: GITLAB_EVENT_TYPE.confidential_issues_events, type: 'webhook', arguments: [projectArgumentDescriptor], + run: ($) => getRunFn($), testRun: getTestRunFn(data), registerHook: getRegisterHookFn(GITLAB_EVENT_TYPE.confidential_issues_events), unregisterHook, diff --git a/packages/backend/src/apps/gitlab/triggers/confidential-note-event/index.ts b/packages/backend/src/apps/gitlab/triggers/confidential-note-event/index.ts index 0033c7c688..5f37bb7eda 100644 --- a/packages/backend/src/apps/gitlab/triggers/confidential-note-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/confidential-note-event/index.ts @@ -3,6 +3,7 @@ import defineTrigger from '../../../../helpers/define-trigger'; import { GITLAB_EVENT_TYPE } from '../types'; import { getRegisterHookFn, + getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, @@ -19,6 +20,7 @@ export const triggerDescriptor: IRawTrigger = { key: GITLAB_EVENT_TYPE.confidential_note_events, type: 'webhook', arguments: [projectArgumentDescriptor], + run: ($) => getRunFn($), testRun: getTestRunFn(data), registerHook: getRegisterHookFn(GITLAB_EVENT_TYPE.confidential_note_events), unregisterHook, diff --git a/packages/backend/src/apps/gitlab/triggers/deployment-event/index.ts b/packages/backend/src/apps/gitlab/triggers/deployment-event/index.ts index 1c5a7a2993..8a5c3ef82b 100644 --- a/packages/backend/src/apps/gitlab/triggers/deployment-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/deployment-event/index.ts @@ -3,6 +3,7 @@ import defineTrigger from '../../../../helpers/define-trigger'; import { GITLAB_EVENT_TYPE } from '../types'; import { getRegisterHookFn, + getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, @@ -18,6 +19,7 @@ export const triggerDescriptor: IRawTrigger = { key: GITLAB_EVENT_TYPE.deployment_events, type: 'webhook', arguments: [projectArgumentDescriptor], + run: ($) => getRunFn($), testRun: getTestRunFn(data), registerHook: getRegisterHookFn(GITLAB_EVENT_TYPE.deployment_events), unregisterHook, diff --git a/packages/backend/src/apps/gitlab/triggers/feature-flag-event/index.ts b/packages/backend/src/apps/gitlab/triggers/feature-flag-event/index.ts index 13623ad0a6..61b1f1997d 100644 --- a/packages/backend/src/apps/gitlab/triggers/feature-flag-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/feature-flag-event/index.ts @@ -3,6 +3,7 @@ import defineTrigger from '../../../../helpers/define-trigger'; import { GITLAB_EVENT_TYPE } from '../types'; import { getRegisterHookFn, + getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, @@ -18,6 +19,7 @@ export const triggerDescriptor: IRawTrigger = { key: GITLAB_EVENT_TYPE.feature_flag_events, type: 'webhook', arguments: [projectArgumentDescriptor], + run: ($) => getRunFn($), testRun: getTestRunFn(data), registerHook: getRegisterHookFn(GITLAB_EVENT_TYPE.feature_flag_events), unregisterHook, diff --git a/packages/backend/src/apps/gitlab/triggers/issue-event/index.ts b/packages/backend/src/apps/gitlab/triggers/issue-event/index.ts index 8888844dcb..9a9c069b83 100644 --- a/packages/backend/src/apps/gitlab/triggers/issue-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/issue-event/index.ts @@ -3,6 +3,7 @@ import defineTrigger from '../../../../helpers/define-trigger'; import { GITLAB_EVENT_TYPE } from '../types'; import { getRegisterHookFn, + getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, @@ -18,6 +19,7 @@ export const triggerDescriptor: IRawTrigger = { key: GITLAB_EVENT_TYPE.issues_events, type: 'webhook', arguments: [projectArgumentDescriptor], + run: ($) => getRunFn($), testRun: getTestRunFn(data), registerHook: getRegisterHookFn(GITLAB_EVENT_TYPE.issues_events), unregisterHook, diff --git a/packages/backend/src/apps/gitlab/triggers/job-event/index.ts b/packages/backend/src/apps/gitlab/triggers/job-event/index.ts index 25ce4cd461..7150d24767 100644 --- a/packages/backend/src/apps/gitlab/triggers/job-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/job-event/index.ts @@ -3,6 +3,7 @@ import defineTrigger from '../../../../helpers/define-trigger'; import { GITLAB_EVENT_TYPE } from '../types'; import { getRegisterHookFn, + getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, @@ -17,6 +18,7 @@ export const triggerDescriptor: IRawTrigger = { key: GITLAB_EVENT_TYPE.job_events, type: 'webhook', arguments: [projectArgumentDescriptor], + run: ($) => getRunFn($), testRun: getTestRunFn(data), registerHook: getRegisterHookFn(GITLAB_EVENT_TYPE.job_events), unregisterHook, diff --git a/packages/backend/src/apps/gitlab/triggers/lib.ts b/packages/backend/src/apps/gitlab/triggers/lib.ts index fc76467220..29041908a6 100644 --- a/packages/backend/src/apps/gitlab/triggers/lib.ts +++ b/packages/backend/src/apps/gitlab/triggers/lib.ts @@ -22,6 +22,17 @@ export const projectArgumentDescriptor = { }, }; +export const getRunFn = async ($: IGlobalVariable) => { + const dataItem = { + raw: $.request.body, + meta: { + internalId: Crypto.randomUUID(), + }, + }; + + $.pushTriggerItem(dataItem); +}; + export const getTestRunFn = (eventData: IJSONObject) => ($: IGlobalVariable) => { /* diff --git a/packages/backend/src/apps/gitlab/triggers/merge-request-event/index.ts b/packages/backend/src/apps/gitlab/triggers/merge-request-event/index.ts index 497360def5..a841ec383c 100644 --- a/packages/backend/src/apps/gitlab/triggers/merge-request-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/merge-request-event/index.ts @@ -3,6 +3,7 @@ import defineTrigger from '../../../../helpers/define-trigger'; import { GITLAB_EVENT_TYPE } from '../types'; import { getRegisterHookFn, + getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, @@ -18,6 +19,7 @@ export const triggerDescriptor: IRawTrigger = { key: GITLAB_EVENT_TYPE.merge_requests_events, type: 'webhook', arguments: [projectArgumentDescriptor], + run: ($) => getRunFn($), testRun: getTestRunFn(data), registerHook: getRegisterHookFn(GITLAB_EVENT_TYPE.merge_requests_events), unregisterHook, diff --git a/packages/backend/src/apps/gitlab/triggers/note-event/index.ts b/packages/backend/src/apps/gitlab/triggers/note-event/index.ts index ac3ce464c7..21d68b46e2 100644 --- a/packages/backend/src/apps/gitlab/triggers/note-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/note-event/index.ts @@ -3,6 +3,7 @@ import defineTrigger from '../../../../helpers/define-trigger'; import { GITLAB_EVENT_TYPE } from '../types'; import { getRegisterHookFn, + getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, @@ -18,6 +19,7 @@ export const triggerDescriptor: IRawTrigger = { key: GITLAB_EVENT_TYPE.note_events, type: 'webhook', arguments: [projectArgumentDescriptor], + run: ($) => getRunFn($), testRun: getTestRunFn(data), registerHook: getRegisterHookFn(GITLAB_EVENT_TYPE.note_events), unregisterHook, diff --git a/packages/backend/src/apps/gitlab/triggers/pipeline-event/index.ts b/packages/backend/src/apps/gitlab/triggers/pipeline-event/index.ts index 471ad1aab1..10b42739b1 100644 --- a/packages/backend/src/apps/gitlab/triggers/pipeline-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/pipeline-event/index.ts @@ -3,6 +3,7 @@ import defineTrigger from '../../../../helpers/define-trigger'; import { GITLAB_EVENT_TYPE } from '../types'; import { getRegisterHookFn, + getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, @@ -18,6 +19,7 @@ export const triggerDescriptor: IRawTrigger = { key: GITLAB_EVENT_TYPE.pipeline_events, type: 'webhook', arguments: [projectArgumentDescriptor], + run: ($) => getRunFn($), testRun: getTestRunFn(data), registerHook: getRegisterHookFn(GITLAB_EVENT_TYPE.pipeline_events), unregisterHook, diff --git a/packages/backend/src/apps/gitlab/triggers/push-event/index.ts b/packages/backend/src/apps/gitlab/triggers/push-event/index.ts index 6a3a84fc01..11532a3318 100644 --- a/packages/backend/src/apps/gitlab/triggers/push-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/push-event/index.ts @@ -3,6 +3,7 @@ import defineTrigger from '../../../../helpers/define-trigger'; import { GITLAB_EVENT_TYPE } from '../types'; import { getRegisterHookFn, + getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, @@ -54,6 +55,7 @@ export const triggerDescriptor: IRawTrigger = { branchFilterStrategyArgumentDescriptor, pushEventsBranchFilterArgumentDescriptor, ], + run: ($) => getRunFn($), testRun: getTestRunFn(data), registerHook: getRegisterHookFn(GITLAB_EVENT_TYPE.push_events), unregisterHook, diff --git a/packages/backend/src/apps/gitlab/triggers/release-event/index.ts b/packages/backend/src/apps/gitlab/triggers/release-event/index.ts index 1904ffcff5..718bc7e8e4 100644 --- a/packages/backend/src/apps/gitlab/triggers/release-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/release-event/index.ts @@ -3,6 +3,7 @@ import defineTrigger from '../../../../helpers/define-trigger'; import { GITLAB_EVENT_TYPE } from '../types'; import { getRegisterHookFn, + getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, @@ -17,6 +18,7 @@ export const triggerDescriptor: IRawTrigger = { key: GITLAB_EVENT_TYPE.releases_events, type: 'webhook', arguments: [projectArgumentDescriptor], + run: ($) => getRunFn($), testRun: getTestRunFn(data), registerHook: getRegisterHookFn(GITLAB_EVENT_TYPE.releases_events), unregisterHook, diff --git a/packages/backend/src/apps/gitlab/triggers/tag-push-event/index.ts b/packages/backend/src/apps/gitlab/triggers/tag-push-event/index.ts index d1a62e29b9..556bc59180 100644 --- a/packages/backend/src/apps/gitlab/triggers/tag-push-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/tag-push-event/index.ts @@ -3,6 +3,7 @@ import defineTrigger from '../../../../helpers/define-trigger'; import { GITLAB_EVENT_TYPE } from '../types'; import { getRegisterHookFn, + getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, @@ -18,6 +19,7 @@ export const triggerDescriptor: IRawTrigger = { key: GITLAB_EVENT_TYPE.tag_push_events, type: 'webhook', arguments: [projectArgumentDescriptor], + run: ($) => getRunFn($), testRun: getTestRunFn(data), registerHook: getRegisterHookFn(GITLAB_EVENT_TYPE.tag_push_events), unregisterHook, diff --git a/packages/backend/src/apps/gitlab/triggers/wiki-page-event/index.ts b/packages/backend/src/apps/gitlab/triggers/wiki-page-event/index.ts index aa106012cf..f2f0f3a345 100644 --- a/packages/backend/src/apps/gitlab/triggers/wiki-page-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/wiki-page-event/index.ts @@ -3,6 +3,7 @@ import defineTrigger from '../../../../helpers/define-trigger'; import { GITLAB_EVENT_TYPE } from '../types'; import { getRegisterHookFn, + getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, @@ -18,6 +19,7 @@ export const triggerDescriptor: IRawTrigger = { key: GITLAB_EVENT_TYPE.wiki_page_events, type: 'webhook', arguments: [projectArgumentDescriptor], + run: ($) => getRunFn($), testRun: getTestRunFn(data), registerHook: getRegisterHookFn(GITLAB_EVENT_TYPE.wiki_page_events), unregisterHook, diff --git a/packages/backend/src/apps/twilio/triggers/receive-sms/index.ts b/packages/backend/src/apps/twilio/triggers/receive-sms/index.ts index 4aaeb9f14f..a0259ed4f4 100644 --- a/packages/backend/src/apps/twilio/triggers/receive-sms/index.ts +++ b/packages/backend/src/apps/twilio/triggers/receive-sms/index.ts @@ -1,4 +1,5 @@ import { URLSearchParams } from 'node:url'; +import Crypto from 'crypto'; import isEmpty from 'lodash/isEmpty'; import defineTrigger from '../../../../helpers/define-trigger'; import fetchMessages from './fetch-messages'; @@ -37,6 +38,17 @@ export default defineTrigger({ useSingletonWebhook: true, singletonWebhookRefValueParameter: 'phoneNumberSid', + async run($) { + const dataItem = { + raw: $.request.body, + meta: { + internalId: Crypto.randomUUID(), + }, + }; + + $.pushTriggerItem(dataItem); + }, + async testRun($) { await fetchMessages($); diff --git a/packages/backend/src/apps/typeform/triggers/new-entry/index.ts b/packages/backend/src/apps/typeform/triggers/new-entry/index.ts index 01b3c35542..8ef73a4150 100644 --- a/packages/backend/src/apps/typeform/triggers/new-entry/index.ts +++ b/packages/backend/src/apps/typeform/triggers/new-entry/index.ts @@ -1,3 +1,4 @@ +import Crypto from 'crypto'; import appConfig from '../../../../config/app'; import defineTrigger from '../../../../helpers/define-trigger'; @@ -27,6 +28,17 @@ export default defineTrigger({ }, ], + async run($) { + const dataItem = { + raw: $.request.body, + meta: { + internalId: Crypto.randomUUID(), + }, + }; + + $.pushTriggerItem(dataItem); + }, + async testRun($) { const { data: form } = await $.http.get( `/forms/${$.step.parameters.formId}` diff --git a/packages/backend/src/apps/webhook/triggers/catch-raw-webhook/index.ts b/packages/backend/src/apps/webhook/triggers/catch-raw-webhook/index.ts index 000548149d..4687337060 100644 --- a/packages/backend/src/apps/webhook/triggers/catch-raw-webhook/index.ts +++ b/packages/backend/src/apps/webhook/triggers/catch-raw-webhook/index.ts @@ -1,3 +1,4 @@ +import Crypto from 'crypto'; import isEmpty from 'lodash/isEmpty'; import defineTrigger from '../../../../helpers/define-trigger'; @@ -8,6 +9,21 @@ export default defineTrigger({ showWebhookUrl: true, description: 'Triggers when the webhook receives a request.', + async run($) { + const dataItem = { + raw: { + headers: $.request.headers, + body: $.request.body, + query: $.request.query, + }, + meta: { + internalId: Crypto.randomUUID(), + }, + }; + + $.pushTriggerItem(dataItem); + }, + async testRun($) { const lastExecutionStep = await $.getLastExecutionStep(); From 4c66cc1e33d7874923dbada18f20ec4b2d439ef9 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Sun, 8 Oct 2023 15:51:59 +0200 Subject: [PATCH 2/3] feat: Adjust webhook handler to work with run method --- .../backend/src/helpers/global-variable.ts | 8 +- .../backend/src/helpers/webhook-handler.ts | 99 ++++++++++--------- 2 files changed, 59 insertions(+), 48 deletions(-) diff --git a/packages/backend/src/helpers/global-variable.ts b/packages/backend/src/helpers/global-variable.ts index 0130515b1e..db3c8d858f 100644 --- a/packages/backend/src/helpers/global-variable.ts +++ b/packages/backend/src/helpers/global-variable.ts @@ -102,7 +102,9 @@ const globalVariable = async ( $.triggerOutput.data.push(triggerItem); - if ($.execution.testRun) { + const isWebhookApp = app.key === 'webhook'; + + if ($.execution.testRun && !isWebhookApp) { // early exit after receiving one item as it is enough for test execution throw new EarlyExitError(); } @@ -145,7 +147,9 @@ const globalVariable = async ( } const lastInternalIds = - testRun || (flow && step?.isAction) ? [] : await flow?.lastInternalIds(2000); + testRun || (flow && step?.isAction) + ? [] + : await flow?.lastInternalIds(2000); const isAlreadyProcessed = (internalId: string) => { return lastInternalIds?.includes(internalId); diff --git a/packages/backend/src/helpers/webhook-handler.ts b/packages/backend/src/helpers/webhook-handler.ts index 050c9d1d4e..e1a0c96dc5 100644 --- a/packages/backend/src/helpers/webhook-handler.ts +++ b/packages/backend/src/helpers/webhook-handler.ts @@ -1,6 +1,6 @@ -import Crypto from 'node:crypto'; import { Response } from 'express'; -import { IRequest, ITriggerItem } from '@automatisch/types'; +import { IRequest } from '@automatisch/types'; +import isEmpty from 'lodash/isEmpty'; import Flow from '../models/flow'; import { processTrigger } from '../services/trigger'; @@ -12,18 +12,12 @@ import { REMOVE_AFTER_7_DAYS_OR_50_JOBS, } from './remove-job-configuration'; -export default async (flowId: string, request: IRequest, response: Response) => { - // in case it's our built-in generic webhook trigger - let computedRequestPayload = { - headers: request.headers, - body: request.body, - query: request.query, - }; - - const flow = await Flow.query() - .findById(flowId) - .throwIfNotFound(); - +export default async ( + flowId: string, + request: IRequest, + response: Response +) => { + const flow = await Flow.query().findById(flowId).throwIfNotFound(); const user = await flow.$relatedQuery('user'); const testRun = !flow.active; @@ -37,48 +31,61 @@ export default async (flowId: string, request: IRequest, response: Response) => const app = await triggerStep.getApp(); const isWebhookApp = app.key === 'webhook'; - if ((testRun && !isWebhookApp)) { + if (testRun && !isWebhookApp) { return response.status(404); } - // in case trigger type is 'webhook' - if (!isWebhookApp) { - computedRequestPayload = request.body; - } + const connection = await triggerStep.$relatedQuery('connection'); - const triggerItem: ITriggerItem = { - raw: computedRequestPayload, - meta: { - internalId: Crypto.randomUUID(), - }, - }; - - const { executionId } = await processTrigger({ - flowId, - stepId: triggerStep.id, - triggerItem, + const $ = await globalVariable({ + flow, + connection, + app, + step: triggerStep, testRun, + request, }); - if (testRun) { - return response.status(204); - } + const triggerCommand = await triggerStep.getTriggerCommand(); + await triggerCommand.run($); - const nextStep = await triggerStep.getNextStep(); - const jobName = `${executionId}-${nextStep.id}`; + const reversedTriggerItems = $.triggerOutput.data.reverse(); - const jobPayload = { - flowId, - executionId, - stepId: nextStep.id, - }; - - const jobOptions = { - removeOnComplete: REMOVE_AFTER_7_DAYS_OR_50_JOBS, - removeOnFail: REMOVE_AFTER_30_DAYS_OR_150_JOBS, - }; + // This is the case when we filter out the incoming data + // in the run method of the webhook trigger. + // In this case, we don't want to process anything. + if (isEmpty(reversedTriggerItems)) { + return response.status(204); + } - await actionQueue.add(jobName, jobPayload, jobOptions); + for (const triggerItem of reversedTriggerItems) { + const { executionId } = await processTrigger({ + flowId, + stepId: triggerStep.id, + triggerItem, + testRun, + }); + + if (testRun) { + continue; + } + + const nextStep = await triggerStep.getNextStep(); + const jobName = `${executionId}-${nextStep.id}`; + + const jobPayload = { + flowId, + executionId, + stepId: nextStep.id, + }; + + const jobOptions = { + removeOnComplete: REMOVE_AFTER_7_DAYS_OR_50_JOBS, + removeOnFail: REMOVE_AFTER_30_DAYS_OR_150_JOBS, + }; + + await actionQueue.add(jobName, jobPayload, jobOptions); + } return response.status(204); }; From d877f5c764150b4c90294353f34da61015322372 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Mon, 9 Oct 2023 12:05:45 +0200 Subject: [PATCH 3/3] refactor: Use trigger queue for webhook handler --- .../backend/src/helpers/webhook-handler.ts | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/packages/backend/src/helpers/webhook-handler.ts b/packages/backend/src/helpers/webhook-handler.ts index e1a0c96dc5..1f5b5887a9 100644 --- a/packages/backend/src/helpers/webhook-handler.ts +++ b/packages/backend/src/helpers/webhook-handler.ts @@ -4,7 +4,7 @@ import isEmpty from 'lodash/isEmpty'; import Flow from '../models/flow'; import { processTrigger } from '../services/trigger'; -import actionQueue from '../queues/action'; +import triggerQueue from '../queues/trigger'; import globalVariable from './global-variable'; import QuotaExceededError from '../errors/quote-exceeded'; import { @@ -59,32 +59,31 @@ export default async ( } for (const triggerItem of reversedTriggerItems) { - const { executionId } = await processTrigger({ - flowId, - stepId: triggerStep.id, - triggerItem, - testRun, - }); - if (testRun) { + await processTrigger({ + flowId, + stepId: triggerStep.id, + triggerItem, + testRun, + }); + continue; } - const nextStep = await triggerStep.getNextStep(); - const jobName = `${executionId}-${nextStep.id}`; - - const jobPayload = { - flowId, - executionId, - stepId: nextStep.id, - }; + const jobName = `${triggerStep.id}-${triggerItem.meta.internalId}`; const jobOptions = { removeOnComplete: REMOVE_AFTER_7_DAYS_OR_50_JOBS, removeOnFail: REMOVE_AFTER_30_DAYS_OR_150_JOBS, }; - await actionQueue.add(jobName, jobPayload, jobOptions); + const jobPayload = { + flowId, + stepId: triggerStep.id, + triggerItem, + }; + + await triggerQueue.add(jobName, jobPayload, jobOptions); } return response.status(204);