Add Webhook response node (#2254)

* ✨ Add Webhook-Response-Node

* ⚡ Replace callback function with promise

* ✨ Add support for Bull and binary-data

* ✨ Add string response option

* ⚡ Remove some comments

* ✨ Make more generically possible & fix issue multi call in
queue mode

* ⚡ Fix startup and eslint issues

* ⚡ Improvements to webhook response node and functionality

* ⚡ Replace data with more generic type

* ⚡ Make statusMessage optional

* ⚡ Change parameter order

* ⚡ Move Response Code underneath options

* ⚡ Hide Response Code on Webhook node if mode responseNode got selected

* ⚡ Minor improvements

* ⚡ Add missing file and fix lint issue

* ⚡ Fix some node linting issues

* ⚡ Apply feedback

* ⚡ Minor improvements
This commit is contained in:
Jan
2021-11-05 10:45:51 -06:00
committed by GitHub
parent 70a9f0446e
commit 7b8d388d17
23 changed files with 664 additions and 65 deletions

View File

@@ -1,12 +1,21 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
import * as Bull from 'bull';
import * as config from '../config';
// eslint-disable-next-line import/no-cycle
import { IBullJobData } from './Interfaces';
import { IBullJobData, IBullWebhookResponse } from './Interfaces';
// eslint-disable-next-line import/no-cycle
import * as ActiveExecutions from './ActiveExecutions';
// eslint-disable-next-line import/no-cycle
import * as WebhookHelpers from './WebhookHelpers';
export class Queue {
private activeExecutions: ActiveExecutions.ActiveExecutions;
private jobQueue: Bull.Queue;
constructor() {
this.activeExecutions = ActiveExecutions.getInstance();
const prefix = config.get('queue.bull.prefix') as string;
const redisOptions = config.get('queue.bull.redis') as object;
// Disabling ready check is necessary as it allows worker to
@@ -16,6 +25,14 @@ export class Queue {
// More here: https://github.com/OptimalBits/bull/issues/890
// @ts-ignore
this.jobQueue = new Bull('jobs', { prefix, redis: redisOptions, enableReadyCheck: false });
this.jobQueue.on('global:progress', (jobId, progress: IBullWebhookResponse) => {
this.activeExecutions.resolveResponsePromise(
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
progress.executionId,
WebhookHelpers.decodeWebhookResponse(progress.response),
);
});
}
async add(jobData: IBullJobData, jobOptions: object): Promise<Bull.Job> {