n8n-nodes-custom-webhook-wait 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -7,10 +7,10 @@ class WebhookWait {
|
|
|
7
7
|
displayName: 'Webhook Wait',
|
|
8
8
|
name: 'webhookWait',
|
|
9
9
|
icon: 'fa:pause-circle',
|
|
10
|
-
group: ['
|
|
10
|
+
group: ['transform'],
|
|
11
11
|
version: 1,
|
|
12
12
|
subtitle: '={{$parameter["httpMethod"] + ": /" + $parameter["path"]}}',
|
|
13
|
-
description: 'Pauses workflow execution and waits for a webhook call to
|
|
13
|
+
description: 'Pauses workflow execution and waits for a webhook call to resume. Uses a static URL.',
|
|
14
14
|
defaults: {
|
|
15
15
|
name: 'Webhook Wait',
|
|
16
16
|
},
|
|
@@ -20,28 +20,27 @@ class WebhookWait {
|
|
|
20
20
|
{
|
|
21
21
|
name: 'default',
|
|
22
22
|
httpMethod: '={{$parameter["httpMethod"]}}',
|
|
23
|
-
responseMode: '
|
|
23
|
+
responseMode: 'onReceived',
|
|
24
24
|
path: '={{$parameter["path"]}}',
|
|
25
25
|
restartWebhook: true,
|
|
26
26
|
},
|
|
27
27
|
],
|
|
28
28
|
properties: [
|
|
29
29
|
{
|
|
30
|
-
displayName: '
|
|
31
|
-
name: '
|
|
30
|
+
displayName: 'How It Works',
|
|
31
|
+
name: 'notice',
|
|
32
32
|
type: 'notice',
|
|
33
33
|
default: '',
|
|
34
|
-
|
|
35
|
-
description: '<strong>Test URL:</strong><br>{{$parameter["httpMethod"]}} <code style="user-select:all">{{$baseUrl}}/webhook-test/{{$parameter["path"]}}</code><br><br><strong>Production URL:</strong><br>{{$parameter["httpMethod"]}} <code style="user-select:all">{{$baseUrl}}/webhook/{{$parameter["path"]}}</code>',
|
|
34
|
+
description: 'When the workflow reaches this node, it will pause. Call the webhook URL to resume. The URL will be shown in the execution panel when waiting.',
|
|
36
35
|
},
|
|
37
36
|
{
|
|
38
37
|
displayName: 'Path',
|
|
39
38
|
name: 'path',
|
|
40
39
|
type: 'string',
|
|
41
40
|
default: '',
|
|
42
|
-
placeholder: 'my-webhook-
|
|
41
|
+
placeholder: 'my-webhook-path',
|
|
43
42
|
required: true,
|
|
44
|
-
description: 'The path
|
|
43
|
+
description: 'The webhook path suffix. Full URL will be shown when workflow is waiting.',
|
|
45
44
|
},
|
|
46
45
|
{
|
|
47
46
|
displayName: 'HTTP Method',
|
|
@@ -58,268 +57,114 @@ class WebhookWait {
|
|
|
58
57
|
default: 'POST',
|
|
59
58
|
description: 'The HTTP method to listen to',
|
|
60
59
|
},
|
|
61
|
-
{
|
|
62
|
-
displayName: 'Response Mode',
|
|
63
|
-
name: 'responseMode',
|
|
64
|
-
type: 'options',
|
|
65
|
-
options: [
|
|
66
|
-
{
|
|
67
|
-
name: 'When Webhook Is Received',
|
|
68
|
-
value: 'onReceived',
|
|
69
|
-
description: 'Respond immediately when webhook is received',
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
name: 'When Last Node Finishes',
|
|
73
|
-
value: 'lastNode',
|
|
74
|
-
description: 'Respond after the workflow completes',
|
|
75
|
-
},
|
|
76
|
-
],
|
|
77
|
-
default: 'onReceived',
|
|
78
|
-
description: 'When to respond to the webhook call',
|
|
79
|
-
},
|
|
80
60
|
{
|
|
81
61
|
displayName: 'Response Code',
|
|
82
62
|
name: 'responseCode',
|
|
83
63
|
type: 'number',
|
|
84
64
|
default: 200,
|
|
85
|
-
description: 'The HTTP response code to return
|
|
65
|
+
description: 'The HTTP response code to return',
|
|
86
66
|
},
|
|
87
67
|
{
|
|
88
68
|
displayName: 'Response Data',
|
|
89
69
|
name: 'responseData',
|
|
90
70
|
type: 'options',
|
|
91
71
|
options: [
|
|
92
|
-
{
|
|
93
|
-
name: 'All Entries',
|
|
94
|
-
value: 'allEntries',
|
|
95
|
-
description: 'Return all entries from the webhook data',
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
name: 'First Entry JSON',
|
|
99
|
-
value: 'firstEntryJson',
|
|
100
|
-
description: 'Return the first entry as JSON',
|
|
101
|
-
},
|
|
102
72
|
{
|
|
103
73
|
name: 'No Response Body',
|
|
104
74
|
value: 'noData',
|
|
105
75
|
description: 'Return no response body',
|
|
106
76
|
},
|
|
77
|
+
{
|
|
78
|
+
name: 'Received Data',
|
|
79
|
+
value: 'allEntries',
|
|
80
|
+
description: 'Return the received webhook data',
|
|
81
|
+
},
|
|
107
82
|
{
|
|
108
83
|
name: 'Custom Response',
|
|
109
84
|
value: 'customResponse',
|
|
110
|
-
description: 'Return a custom response
|
|
85
|
+
description: 'Return a custom response',
|
|
111
86
|
},
|
|
112
87
|
],
|
|
113
88
|
default: 'noData',
|
|
114
89
|
description: 'What data to return in the webhook response',
|
|
115
90
|
},
|
|
116
91
|
{
|
|
117
|
-
displayName: '
|
|
118
|
-
name: '
|
|
92
|
+
displayName: 'Response Message',
|
|
93
|
+
name: 'responseMessage',
|
|
119
94
|
type: 'string',
|
|
120
95
|
displayOptions: {
|
|
121
96
|
show: {
|
|
122
97
|
responseData: ['customResponse'],
|
|
123
98
|
},
|
|
124
99
|
},
|
|
125
|
-
default: '{"status": "
|
|
126
|
-
description: 'Custom JSON response
|
|
100
|
+
default: '{"status": "ok"}',
|
|
101
|
+
description: 'Custom JSON response to send back',
|
|
127
102
|
},
|
|
128
103
|
{
|
|
129
|
-
displayName: '
|
|
130
|
-
name: '
|
|
131
|
-
type: '
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
{
|
|
143
|
-
displayName: 'Response Headers',
|
|
144
|
-
name: 'responseHeaders',
|
|
145
|
-
type: 'fixedCollection',
|
|
146
|
-
typeOptions: {
|
|
147
|
-
multipleValues: true,
|
|
148
|
-
},
|
|
149
|
-
default: {},
|
|
150
|
-
options: [
|
|
151
|
-
{
|
|
152
|
-
name: 'entries',
|
|
153
|
-
displayName: 'Header',
|
|
154
|
-
values: [
|
|
155
|
-
{
|
|
156
|
-
displayName: 'Name',
|
|
157
|
-
name: 'name',
|
|
158
|
-
type: 'string',
|
|
159
|
-
default: '',
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
displayName: 'Value',
|
|
163
|
-
name: 'value',
|
|
164
|
-
type: 'string',
|
|
165
|
-
default: '',
|
|
166
|
-
},
|
|
167
|
-
],
|
|
168
|
-
},
|
|
169
|
-
],
|
|
170
|
-
description: 'Custom response headers',
|
|
171
|
-
},
|
|
172
|
-
{
|
|
173
|
-
displayName: 'Authentication',
|
|
174
|
-
name: 'authentication',
|
|
175
|
-
type: 'options',
|
|
176
|
-
options: [
|
|
177
|
-
{ name: 'None', value: 'none' },
|
|
178
|
-
{ name: 'Basic Auth', value: 'basicAuth' },
|
|
179
|
-
{ name: 'Header Auth', value: 'headerAuth' },
|
|
180
|
-
],
|
|
181
|
-
default: 'none',
|
|
182
|
-
description: 'Authentication method for the webhook',
|
|
183
|
-
},
|
|
184
|
-
{
|
|
185
|
-
displayName: 'Auth Header Name',
|
|
186
|
-
name: 'authHeaderName',
|
|
187
|
-
type: 'string',
|
|
188
|
-
default: 'Authorization',
|
|
189
|
-
displayOptions: {
|
|
190
|
-
show: {
|
|
191
|
-
authentication: ['headerAuth'],
|
|
192
|
-
},
|
|
193
|
-
},
|
|
194
|
-
description: 'Name of the header to check for authentication',
|
|
195
|
-
},
|
|
196
|
-
{
|
|
197
|
-
displayName: 'Auth Header Value',
|
|
198
|
-
name: 'authHeaderValue',
|
|
199
|
-
type: 'string',
|
|
200
|
-
typeOptions: {
|
|
201
|
-
password: true,
|
|
202
|
-
},
|
|
203
|
-
default: '',
|
|
204
|
-
displayOptions: {
|
|
205
|
-
show: {
|
|
206
|
-
authentication: ['headerAuth'],
|
|
207
|
-
},
|
|
208
|
-
},
|
|
209
|
-
description: 'Expected value of the authentication header',
|
|
210
|
-
},
|
|
211
|
-
{
|
|
212
|
-
displayName: 'Basic Auth Username',
|
|
213
|
-
name: 'basicAuthUsername',
|
|
214
|
-
type: 'string',
|
|
215
|
-
default: '',
|
|
216
|
-
displayOptions: {
|
|
217
|
-
show: {
|
|
218
|
-
authentication: ['basicAuth'],
|
|
219
|
-
},
|
|
220
|
-
},
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
displayName: 'Basic Auth Password',
|
|
224
|
-
name: 'basicAuthPassword',
|
|
225
|
-
type: 'string',
|
|
226
|
-
typeOptions: {
|
|
227
|
-
password: true,
|
|
228
|
-
},
|
|
229
|
-
default: '',
|
|
230
|
-
displayOptions: {
|
|
231
|
-
show: {
|
|
232
|
-
authentication: ['basicAuth'],
|
|
233
|
-
},
|
|
234
|
-
},
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
displayName: 'Merge Input Data',
|
|
238
|
-
name: 'mergeInputData',
|
|
239
|
-
type: 'boolean',
|
|
240
|
-
default: true,
|
|
241
|
-
description: 'Whether to merge the input data from previous nodes with the webhook data',
|
|
104
|
+
displayName: 'Limit Wait Time',
|
|
105
|
+
name: 'limitWaitTime',
|
|
106
|
+
type: 'boolean',
|
|
107
|
+
default: false,
|
|
108
|
+
description: 'Whether to limit how long the workflow will wait',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
displayName: 'Max Wait Time',
|
|
112
|
+
name: 'maxWaitTime',
|
|
113
|
+
type: 'number',
|
|
114
|
+
displayOptions: {
|
|
115
|
+
show: {
|
|
116
|
+
limitWaitTime: [true],
|
|
242
117
|
},
|
|
243
|
-
|
|
118
|
+
},
|
|
119
|
+
default: 60,
|
|
120
|
+
description: 'Maximum time to wait in minutes',
|
|
244
121
|
},
|
|
245
122
|
],
|
|
246
123
|
};
|
|
247
124
|
}
|
|
248
125
|
async webhook() {
|
|
249
|
-
var _a;
|
|
250
126
|
const req = this.getRequestObject();
|
|
251
|
-
const res = this.getResponseObject();
|
|
252
127
|
const responseCode = this.getNodeParameter('responseCode', 200);
|
|
253
128
|
const responseData = this.getNodeParameter('responseData', 'noData');
|
|
254
|
-
|
|
255
|
-
// Handle authentication
|
|
256
|
-
if (options.authentication === 'headerAuth') {
|
|
257
|
-
const headerName = options.authHeaderName || 'Authorization';
|
|
258
|
-
const expectedValue = options.authHeaderValue || '';
|
|
259
|
-
const actualValue = req.headers[headerName.toLowerCase()];
|
|
260
|
-
if (actualValue !== expectedValue) {
|
|
261
|
-
res.status(401).json({ error: 'Unauthorized' });
|
|
262
|
-
return { noWebhookResponse: true };
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
if (options.authentication === 'basicAuth') {
|
|
266
|
-
const authHeader = req.headers.authorization;
|
|
267
|
-
if (!authHeader || !authHeader.startsWith('Basic ')) {
|
|
268
|
-
res.status(401).json({ error: 'Unauthorized' });
|
|
269
|
-
return { noWebhookResponse: true };
|
|
270
|
-
}
|
|
271
|
-
const base64Credentials = authHeader.split(' ')[1];
|
|
272
|
-
const credentials = Buffer.from(base64Credentials, 'base64').toString('utf-8');
|
|
273
|
-
const [username, password] = credentials.split(':');
|
|
274
|
-
if (username !== options.basicAuthUsername || password !== options.basicAuthPassword) {
|
|
275
|
-
res.status(401).json({ error: 'Unauthorized' });
|
|
276
|
-
return { noWebhookResponse: true };
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
// Set custom headers
|
|
280
|
-
if ((_a = options.responseHeaders) === null || _a === void 0 ? void 0 : _a.entries) {
|
|
281
|
-
for (const header of options.responseHeaders.entries) {
|
|
282
|
-
res.setHeader(header.name, header.value);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
// Set content type
|
|
286
|
-
if (options.responseContentType) {
|
|
287
|
-
res.setHeader('Content-Type', options.responseContentType);
|
|
288
|
-
}
|
|
289
|
-
// Prepare webhook data
|
|
129
|
+
// Prepare the webhook data to pass to the next node
|
|
290
130
|
const webhookData = {
|
|
291
131
|
json: {
|
|
132
|
+
body: req.body,
|
|
292
133
|
headers: req.headers,
|
|
293
|
-
params: req.params,
|
|
294
134
|
query: req.query,
|
|
295
|
-
|
|
296
|
-
webhookUrl: req.url,
|
|
297
|
-
method: req.method,
|
|
298
|
-
timestamp: new Date().toISOString(),
|
|
135
|
+
params: req.params,
|
|
299
136
|
},
|
|
300
137
|
};
|
|
138
|
+
// If body has properties, spread them for easier access
|
|
139
|
+
if (req.body && typeof req.body === 'object' && !Buffer.isBuffer(req.body)) {
|
|
140
|
+
webhookData.json = {
|
|
141
|
+
...req.body,
|
|
142
|
+
_webhookData: {
|
|
143
|
+
headers: req.headers,
|
|
144
|
+
query: req.query,
|
|
145
|
+
params: req.params,
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
301
149
|
// Handle binary data if present
|
|
302
150
|
if (req.body && Buffer.isBuffer(req.body)) {
|
|
303
151
|
webhookData.binary = {
|
|
304
152
|
data: await this.helpers.prepareBinaryData(req.body, 'data'),
|
|
305
153
|
};
|
|
306
154
|
}
|
|
307
|
-
// Prepare response
|
|
155
|
+
// Prepare response
|
|
308
156
|
let responseBody;
|
|
309
157
|
switch (responseData) {
|
|
310
158
|
case 'allEntries':
|
|
311
159
|
responseBody = webhookData.json;
|
|
312
160
|
break;
|
|
313
|
-
case 'firstEntryJson':
|
|
314
|
-
responseBody = webhookData.json.body;
|
|
315
|
-
break;
|
|
316
161
|
case 'customResponse':
|
|
317
|
-
const
|
|
162
|
+
const responseMessage = this.getNodeParameter('responseMessage', '{}');
|
|
318
163
|
try {
|
|
319
|
-
responseBody = JSON.parse(
|
|
164
|
+
responseBody = JSON.parse(responseMessage);
|
|
320
165
|
}
|
|
321
166
|
catch {
|
|
322
|
-
responseBody = { message:
|
|
167
|
+
responseBody = { message: responseMessage };
|
|
323
168
|
}
|
|
324
169
|
break;
|
|
325
170
|
case 'noData':
|
|
@@ -336,29 +181,25 @@ class WebhookWait {
|
|
|
336
181
|
};
|
|
337
182
|
}
|
|
338
183
|
async execute() {
|
|
339
|
-
|
|
340
|
-
const
|
|
341
|
-
const
|
|
342
|
-
//
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
timestamp: new Date().toISOString(),
|
|
354
|
-
},
|
|
355
|
-
},
|
|
356
|
-
binary: item.binary,
|
|
357
|
-
}));
|
|
358
|
-
// Put execution to wait - will resume when webhook is called
|
|
359
|
-
const waitUntil = new Date(Date.now() + 365 * 24 * 60 * 60 * 1000); // 1 year max
|
|
184
|
+
// Get wait time configuration
|
|
185
|
+
const limitWaitTime = this.getNodeParameter('limitWaitTime', 0);
|
|
186
|
+
const maxWaitTime = this.getNodeParameter('maxWaitTime', 0, 60);
|
|
187
|
+
// Calculate wait until time
|
|
188
|
+
let waitUntil;
|
|
189
|
+
if (limitWaitTime && maxWaitTime > 0) {
|
|
190
|
+
waitUntil = new Date(Date.now() + maxWaitTime * 60 * 1000);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
// Wait for 1 year (effectively forever)
|
|
194
|
+
waitUntil = new Date(Date.now() + 365 * 24 * 60 * 60 * 1000);
|
|
195
|
+
}
|
|
196
|
+
// This pauses the execution and waits for the webhook to be called
|
|
197
|
+
// The webhook URL will be shown in the execution panel
|
|
360
198
|
await this.putExecutionToWait(waitUntil);
|
|
361
|
-
|
|
199
|
+
// This code runs after the webhook resumes the execution
|
|
200
|
+
// But actually, when resumed by webhook, the webhook() function provides the data
|
|
201
|
+
// So this return is only used if the wait times out
|
|
202
|
+
return [this.getInputData()];
|
|
362
203
|
}
|
|
363
204
|
}
|
|
364
205
|
exports.WebhookWait = WebhookWait;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebhookWait.node.js","sourceRoot":"","sources":["../../../nodes/WebhookWait/WebhookWait.node.ts"],"names":[],"mappings":";;;AASA,MAAa,WAAW;IAAxB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,cAAc;YAC3B,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"WebhookWait.node.js","sourceRoot":"","sources":["../../../nodes/WebhookWait/WebhookWait.node.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED