n8n-nodes-custom-webhook-wait 1.0.4 → 1.0.5
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.
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { INodeType, INodeTypeDescription, IWebhookFunctions, IWebhookResponseData } from 'n8n-workflow';
|
|
2
2
|
export declare class WebhookWait implements INodeType {
|
|
3
3
|
description: INodeTypeDescription;
|
|
4
4
|
webhook(this: IWebhookFunctions): Promise<IWebhookResponseData>;
|
|
5
|
-
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
6
5
|
}
|
|
@@ -10,7 +10,7 @@ class WebhookWait {
|
|
|
10
10
|
group: ['trigger'],
|
|
11
11
|
version: 1,
|
|
12
12
|
subtitle: '={{$parameter["httpMethod"] + ": /" + $parameter["path"]}}',
|
|
13
|
-
description: 'Pauses workflow execution and waits for a webhook call to continue.
|
|
13
|
+
description: 'Pauses workflow execution and waits for a webhook call to continue. Works with a static URL.',
|
|
14
14
|
defaults: {
|
|
15
15
|
name: 'Webhook Wait',
|
|
16
16
|
},
|
|
@@ -20,28 +20,20 @@ class WebhookWait {
|
|
|
20
20
|
{
|
|
21
21
|
name: 'default',
|
|
22
22
|
httpMethod: '={{$parameter["httpMethod"]}}',
|
|
23
|
-
responseMode: '
|
|
23
|
+
responseMode: 'onReceived',
|
|
24
24
|
path: '={{$parameter["path"]}}',
|
|
25
|
-
restartWebhook:
|
|
25
|
+
restartWebhook: false,
|
|
26
26
|
},
|
|
27
27
|
],
|
|
28
28
|
properties: [
|
|
29
|
-
{
|
|
30
|
-
displayName: 'Webhook URLs',
|
|
31
|
-
name: 'webhookUrls',
|
|
32
|
-
type: 'notice',
|
|
33
|
-
default: '',
|
|
34
|
-
// eslint-disable-next-line n8n-nodes-base/node-param-description-unencoded-angle-brackets
|
|
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>',
|
|
36
|
-
},
|
|
37
29
|
{
|
|
38
30
|
displayName: 'Path',
|
|
39
31
|
name: 'path',
|
|
40
32
|
type: 'string',
|
|
41
|
-
default: '',
|
|
42
|
-
placeholder: 'my-webhook-
|
|
33
|
+
default: 'webhook-wait',
|
|
34
|
+
placeholder: 'my-webhook-path',
|
|
43
35
|
required: true,
|
|
44
|
-
description: 'The path for the webhook URL
|
|
36
|
+
description: 'The path for the webhook. Your URL will be: https://your-n8n/webhook/[path] (production) or https://your-n8n/webhook-test/[path] (test)',
|
|
45
37
|
},
|
|
46
38
|
{
|
|
47
39
|
displayName: 'HTTP Method',
|
|
@@ -58,268 +50,92 @@ class WebhookWait {
|
|
|
58
50
|
default: 'POST',
|
|
59
51
|
description: 'The HTTP method to listen to',
|
|
60
52
|
},
|
|
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
53
|
{
|
|
81
54
|
displayName: 'Response Code',
|
|
82
55
|
name: 'responseCode',
|
|
83
56
|
type: 'number',
|
|
84
57
|
default: 200,
|
|
85
|
-
description: 'The HTTP response code to return
|
|
58
|
+
description: 'The HTTP response code to return',
|
|
86
59
|
},
|
|
87
60
|
{
|
|
88
61
|
displayName: 'Response Data',
|
|
89
62
|
name: 'responseData',
|
|
90
63
|
type: 'options',
|
|
91
64
|
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
65
|
{
|
|
103
66
|
name: 'No Response Body',
|
|
104
67
|
value: 'noData',
|
|
105
68
|
description: 'Return no response body',
|
|
106
69
|
},
|
|
70
|
+
{
|
|
71
|
+
name: 'Received Data',
|
|
72
|
+
value: 'allEntries',
|
|
73
|
+
description: 'Return the received webhook data',
|
|
74
|
+
},
|
|
107
75
|
{
|
|
108
76
|
name: 'Custom Response',
|
|
109
77
|
value: 'customResponse',
|
|
110
|
-
description: 'Return a custom response
|
|
78
|
+
description: 'Return a custom response',
|
|
111
79
|
},
|
|
112
80
|
],
|
|
113
81
|
default: 'noData',
|
|
114
82
|
description: 'What data to return in the webhook response',
|
|
115
83
|
},
|
|
116
84
|
{
|
|
117
|
-
displayName: '
|
|
118
|
-
name: '
|
|
85
|
+
displayName: 'Response Message',
|
|
86
|
+
name: 'responseMessage',
|
|
119
87
|
type: 'string',
|
|
120
88
|
displayOptions: {
|
|
121
89
|
show: {
|
|
122
90
|
responseData: ['customResponse'],
|
|
123
91
|
},
|
|
124
92
|
},
|
|
125
|
-
default: '{"status": "
|
|
126
|
-
description: 'Custom JSON response
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
displayName: 'Options',
|
|
130
|
-
name: 'options',
|
|
131
|
-
type: 'collection',
|
|
132
|
-
placeholder: 'Add Option',
|
|
133
|
-
default: {},
|
|
134
|
-
options: [
|
|
135
|
-
{
|
|
136
|
-
displayName: 'Response Content-Type',
|
|
137
|
-
name: 'responseContentType',
|
|
138
|
-
type: 'string',
|
|
139
|
-
default: 'application/json',
|
|
140
|
-
description: 'The content type of the response',
|
|
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',
|
|
242
|
-
},
|
|
243
|
-
],
|
|
93
|
+
default: '{"status": "ok"}',
|
|
94
|
+
description: 'Custom JSON response to send back',
|
|
244
95
|
},
|
|
245
96
|
],
|
|
246
97
|
};
|
|
247
98
|
}
|
|
248
99
|
async webhook() {
|
|
249
|
-
var _a;
|
|
250
100
|
const req = this.getRequestObject();
|
|
251
|
-
const res = this.getResponseObject();
|
|
252
101
|
const responseCode = this.getNodeParameter('responseCode', 200);
|
|
253
102
|
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
|
|
103
|
+
// Prepare the webhook data to pass to the next node
|
|
290
104
|
const webhookData = {
|
|
291
105
|
json: {
|
|
292
106
|
headers: req.headers,
|
|
293
107
|
params: req.params,
|
|
294
108
|
query: req.query,
|
|
295
109
|
body: req.body,
|
|
296
|
-
webhookUrl: req.url,
|
|
297
110
|
method: req.method,
|
|
298
|
-
timestamp: new Date().toISOString(),
|
|
299
111
|
},
|
|
300
112
|
};
|
|
113
|
+
// If body is the main payload, make it easier to access
|
|
114
|
+
if (req.body && typeof req.body === 'object' && !Buffer.isBuffer(req.body)) {
|
|
115
|
+
webhookData.json = {
|
|
116
|
+
...webhookData.json,
|
|
117
|
+
...req.body,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
301
120
|
// Handle binary data if present
|
|
302
121
|
if (req.body && Buffer.isBuffer(req.body)) {
|
|
303
122
|
webhookData.binary = {
|
|
304
123
|
data: await this.helpers.prepareBinaryData(req.body, 'data'),
|
|
305
124
|
};
|
|
306
125
|
}
|
|
307
|
-
// Prepare response
|
|
126
|
+
// Prepare response
|
|
308
127
|
let responseBody;
|
|
309
128
|
switch (responseData) {
|
|
310
129
|
case 'allEntries':
|
|
311
130
|
responseBody = webhookData.json;
|
|
312
131
|
break;
|
|
313
|
-
case 'firstEntryJson':
|
|
314
|
-
responseBody = webhookData.json.body;
|
|
315
|
-
break;
|
|
316
132
|
case 'customResponse':
|
|
317
|
-
const
|
|
133
|
+
const responseMessage = this.getNodeParameter('responseMessage', '{}');
|
|
318
134
|
try {
|
|
319
|
-
responseBody = JSON.parse(
|
|
135
|
+
responseBody = JSON.parse(responseMessage);
|
|
320
136
|
}
|
|
321
137
|
catch {
|
|
322
|
-
responseBody = { message:
|
|
138
|
+
responseBody = { message: responseMessage };
|
|
323
139
|
}
|
|
324
140
|
break;
|
|
325
141
|
case 'noData':
|
|
@@ -335,31 +151,6 @@ class WebhookWait {
|
|
|
335
151
|
workflowData: [[webhookData]],
|
|
336
152
|
};
|
|
337
153
|
}
|
|
338
|
-
async execute() {
|
|
339
|
-
const items = this.getInputData();
|
|
340
|
-
const path = this.getNodeParameter('path', 0);
|
|
341
|
-
const options = this.getNodeParameter('options', 0, {});
|
|
342
|
-
// Store input data in workflow static data so webhook can access it
|
|
343
|
-
const staticData = this.getWorkflowStaticData('node');
|
|
344
|
-
staticData.inputData = items;
|
|
345
|
-
staticData.mergeInputData = options.mergeInputData !== false;
|
|
346
|
-
// Add webhook info to output for reference
|
|
347
|
-
const outputItems = items.map((item) => ({
|
|
348
|
-
json: {
|
|
349
|
-
...item.json,
|
|
350
|
-
_webhookWait: {
|
|
351
|
-
path,
|
|
352
|
-
waitingForWebhook: true,
|
|
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
|
|
360
|
-
await this.putExecutionToWait(waitUntil);
|
|
361
|
-
return [outputItems];
|
|
362
|
-
}
|
|
363
154
|
}
|
|
364
155
|
exports.WebhookWait = WebhookWait;
|
|
365
156
|
//# sourceMappingURL=WebhookWait.node.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebhookWait.node.js","sourceRoot":"","sources":["../../../nodes/WebhookWait/WebhookWait.node.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"WebhookWait.node.js","sourceRoot":"","sources":["../../../nodes/WebhookWait/WebhookWait.node.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED