@linkorb/n8n-nodes-nebula 1.1.0 → 1.1.2
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.
- package/README.md +29 -288
- package/dist/credentials/NebulaTriggerAuth.credentials.d.ts +16 -0
- package/dist/credentials/NebulaTriggerAuth.credentials.d.ts.map +1 -0
- package/dist/credentials/NebulaTriggerAuth.credentials.js +34 -0
- package/dist/credentials/NebulaTriggerAuth.credentials.js.map +1 -0
- package/dist/nodes/NebulaTrigger/NebulaTrigger.node.d.ts.map +1 -1
- package/dist/nodes/NebulaTrigger/NebulaTrigger.node.js +88 -0
- package/dist/nodes/NebulaTrigger/NebulaTrigger.node.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -1,30 +1,23 @@
|
|
|
1
1
|
# n8n-nodes-nebula
|
|
2
2
|
|
|
3
|
-
A custom n8n
|
|
3
|
+
A collection of custom n8n nodes for integrating with **Nebula** - enabling Human-in-the-Loop (HITL) workflows, action execution, and webhook-based triggers.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Nodes
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
| Node | Description |
|
|
8
|
+
|------|-------------|
|
|
9
|
+
| [Nebula HITL Request](nodes/NebulaHitlRequest/README.md) | Create human approval/input requests that pause workflow execution until a human responds |
|
|
10
|
+
| [Nebula Action](nodes/NebulaAction/README.md) | Execute Nebula Actions via the Nebula API |
|
|
11
|
+
| [Nebula Trigger](nodes/NebulaTrigger/README.md) | Webhook-based trigger that starts workflows with Survey.js form data |
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
## Credentials
|
|
10
14
|
|
|
11
|
-
|
|
15
|
+
| Credential | Description |
|
|
16
|
+
|------------|-------------|
|
|
17
|
+
| [Nebula API](credentials/README.md#nebula-api) | Authentication for outbound requests to Nebula |
|
|
18
|
+
| [Nebula Trigger Auth](credentials/README.md#nebula-trigger-auth) | Authentication for incoming webhook requests |
|
|
12
19
|
|
|
13
|
-
|
|
14
|
-
- 🔐 **Configurable Backend**: Connect to your own REST API endpoint
|
|
15
|
-
- 📝 **Multiple Response Types**: Ok, Yes/No, Text, or Custom options
|
|
16
|
-
- 🏷️ **Rich Metadata**: Support for priority, assignee, tags, and custom data
|
|
17
|
-
- 🔄 **Webhook-based Responses**: Automatically resume workflow when human responds
|
|
18
|
-
- ⏰ **Configurable Timeout**: Set how long to wait for a response
|
|
19
|
-
- 📊 **Full Context**: Pass workflow and execution context to your backend
|
|
20
|
-
|
|
21
|
-
### How It Works
|
|
22
|
-
|
|
23
|
-
1. **Request Creation**: The node POSTs a request to your backend with all details including a webhook URL
|
|
24
|
-
2. **Workflow Pauses**: The n8n execution enters a "waiting" state - no resources are consumed while waiting
|
|
25
|
-
3. **Human Action**: Your backend displays the request to a human for action
|
|
26
|
-
4. **Webhook Callback**: When the human responds, your backend POSTs to the webhook URL
|
|
27
|
-
5. **Workflow Resumes**: n8n receives the webhook, resumes the workflow with the response data as output
|
|
20
|
+
See the [credentials documentation](credentials/README.md) for setup instructions.
|
|
28
21
|
|
|
29
22
|
## Installation
|
|
30
23
|
|
|
@@ -93,268 +86,19 @@ services:
|
|
|
93
86
|
- N8N_CUSTOM_EXTENSIONS=/home/node/.n8n/custom
|
|
94
87
|
```
|
|
95
88
|
|
|
96
|
-
##
|
|
89
|
+
## Quick Start
|
|
97
90
|
|
|
98
|
-
###
|
|
91
|
+
### 1. Set Up Credentials
|
|
99
92
|
|
|
100
93
|
1. In n8n, go to **Credentials → Add Credential**
|
|
101
|
-
2. Search for "Nebula API"
|
|
102
|
-
3.
|
|
103
|
-
|
|
104
|
-
| Field | Description | Example |
|
|
105
|
-
|-------|-------------|---------|
|
|
106
|
-
| **Base URL** | Your Nebula API backend base URL | `https://api.mycompany.com/nebula` |
|
|
107
|
-
| **Username** | Authentication username | `n8n-service` |
|
|
108
|
-
| **Password** | Authentication password | `your-secure-password` |
|
|
109
|
-
| **Metadata** | Additional JSON data for all requests | `{"tenantId": "abc123"}` |
|
|
110
|
-
|
|
111
|
-
> **Note:** The webhook callback URL is automatically determined from your n8n instance configuration. You don't need to specify it manually.
|
|
112
|
-
|
|
113
|
-
## Usage
|
|
114
|
-
|
|
115
|
-
### Basic Workflow
|
|
116
|
-
|
|
117
|
-
1. Add the **Nebula HITL Request** node to your workflow
|
|
118
|
-
2. Connect it to your workflow flow
|
|
119
|
-
3. Configure the node:
|
|
120
|
-
- **Title**: A short description of what needs human attention
|
|
121
|
-
- **Message**: Detailed markdown-formatted message
|
|
122
|
-
- **Response Type**: Choose from Ok, Yes/No, Text, or Form
|
|
123
|
-
|
|
124
|
-
### Response Types
|
|
125
|
-
|
|
126
|
-
| Type | Description | Response Value |
|
|
127
|
-
|------|-------------|----------------|
|
|
128
|
-
| **Ok** | Simple acknowledgement | `"ok"` |
|
|
129
|
-
| **Yes/No** | Binary choice | `"yes"` or `"no"` |
|
|
130
|
-
| **Text** | Free-form text input | User's text input |
|
|
131
|
-
| **Form (survey.json)** | Custom form in survey.json format | Form submission data |
|
|
132
|
-
|
|
133
|
-
### Form JSON Example
|
|
134
|
-
|
|
135
|
-
The Form response type uses [survey.json](https://surveyjs.io/form-library/documentation/design-survey/create-a-simple-survey) format:
|
|
136
|
-
|
|
137
|
-
```json
|
|
138
|
-
{
|
|
139
|
-
"elements": [
|
|
140
|
-
{
|
|
141
|
-
"type": "radiogroup",
|
|
142
|
-
"name": "decision",
|
|
143
|
-
"title": "Please select an option",
|
|
144
|
-
"choices": ["Approve", "Reject", "Need More Info"]
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
"type": "text",
|
|
148
|
-
"name": "comment",
|
|
149
|
-
"title": "Additional comments"
|
|
150
|
-
}
|
|
151
|
-
]
|
|
152
|
-
}
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### Node Options
|
|
156
|
-
|
|
157
|
-
| Option | Description | Default |
|
|
158
|
-
|--------|-------------|---------|
|
|
159
|
-
| **Priority** | Request priority level | `normal` |
|
|
160
|
-
| **Timeout (Minutes)** | Auto-timeout for requests | `0` (no timeout) |
|
|
161
|
-
| **Assignee** | Email/ID to assign request to | (none) |
|
|
162
|
-
| **Tags** | Comma-separated tags | (none) |
|
|
163
|
-
|
|
164
|
-
### Additional Data
|
|
165
|
-
|
|
166
|
-
You can pass additional JSON data that will be included in the request to your backend:
|
|
167
|
-
|
|
168
|
-
```json
|
|
169
|
-
{
|
|
170
|
-
"orderId": "12345",
|
|
171
|
-
"customerName": "John Doe",
|
|
172
|
-
"amount": 150.00
|
|
173
|
-
}
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
## Backend API Requirements
|
|
177
|
-
|
|
178
|
-
Your backend API needs to implement the following endpoint:
|
|
179
|
-
|
|
180
|
-
### POST /requests
|
|
181
|
-
|
|
182
|
-
Creates a new HITL request.
|
|
183
|
-
|
|
184
|
-
**Request Body:**
|
|
185
|
-
|
|
186
|
-
```json
|
|
187
|
-
{
|
|
188
|
-
"requestId": "uuid-v4-string",
|
|
189
|
-
"title": "Approval Required",
|
|
190
|
-
"message": "Please review this order...",
|
|
191
|
-
"responseType": "yesno",
|
|
192
|
-
"form": null,
|
|
193
|
-
"webhookUrl": "https://your-n8n.com/webhook-waiting/xxx/nebula-hitl-response",
|
|
194
|
-
"priority": "normal",
|
|
195
|
-
"timeoutMinutes": 0,
|
|
196
|
-
"assignee": "john@example.com",
|
|
197
|
-
"tags": ["urgent", "finance"],
|
|
198
|
-
"metadata": {"tenantId": "abc123"},
|
|
199
|
-
"additionalData": {"orderId": "12345"},
|
|
200
|
-
"inputData": {},
|
|
201
|
-
"workflowId": "workflow-id",
|
|
202
|
-
"executionId": "execution-id",
|
|
203
|
-
"createdAt": "2024-01-15T10:30:00Z"
|
|
204
|
-
}
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
**Response:**
|
|
208
|
-
|
|
209
|
-
```json
|
|
210
|
-
{
|
|
211
|
-
"success": true,
|
|
212
|
-
"requestId": "uuid-v4-string",
|
|
213
|
-
"status": "pending"
|
|
214
|
-
}
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
### Webhook Callback (IMPORTANT - This Resumes the Workflow!)
|
|
218
|
-
|
|
219
|
-
When a human responds, your backend **MUST** call the `webhookUrl` provided in the request payload. This is what resumes the waiting n8n workflow execution.
|
|
220
|
-
|
|
221
|
-
**POST to webhookUrl:**
|
|
222
|
-
|
|
223
|
-
```json
|
|
224
|
-
{
|
|
225
|
-
"requestId": "uuid-v4-string",
|
|
226
|
-
"response": "approved",
|
|
227
|
-
"responseValue": "approved",
|
|
228
|
-
"respondedBy": "john@example.com",
|
|
229
|
-
"respondedAt": "2024-01-15T11:45:00Z",
|
|
230
|
-
"comment": "Looks good!",
|
|
231
|
-
"data": {
|
|
232
|
-
"anyAdditionalData": "you want to pass"
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
**What happens:**
|
|
238
|
-
1. n8n receives the webhook POST
|
|
239
|
-
2. The waiting workflow execution resumes
|
|
240
|
-
3. The Nebula HITL Request node outputs the webhook payload data
|
|
241
|
-
4. Subsequent nodes in your workflow can access `$json.response`, `$json.respondedBy`, etc.
|
|
242
|
-
|
|
243
|
-
**The webhook URL format:** `https://your-n8n-instance.com/webhook-waiting/{executionId}/nebula-hitl-response`
|
|
244
|
-
|
|
245
|
-
The `webhookUrl` is automatically constructed and included in the request payload sent to your backend. Your backend simply needs to POST to this URL when a human responds.
|
|
94
|
+
2. Search for "Nebula API" and configure your Nebula instance connection
|
|
95
|
+
3. See [credentials documentation](credentials/README.md) for details
|
|
246
96
|
|
|
247
|
-
###
|
|
97
|
+
### 2. Use a Node
|
|
248
98
|
|
|
249
|
-
For
|
|
250
|
-
|
|
251
|
-
**
|
|
252
|
-
|
|
253
|
-
```json
|
|
254
|
-
{
|
|
255
|
-
"status": "ok"
|
|
256
|
-
}
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
## Example Backend Implementation
|
|
260
|
-
|
|
261
|
-
Here's a minimal Express.js backend example:
|
|
262
|
-
|
|
263
|
-
```javascript
|
|
264
|
-
const express = require('express');
|
|
265
|
-
const app = express();
|
|
266
|
-
|
|
267
|
-
app.use(express.json());
|
|
268
|
-
|
|
269
|
-
// Store requests in memory (use a database in production)
|
|
270
|
-
const requests = new Map();
|
|
271
|
-
|
|
272
|
-
// Create request
|
|
273
|
-
app.post('/requests', (req, res) => {
|
|
274
|
-
const { requestId, webhookUrl, ...data } = req.body;
|
|
275
|
-
|
|
276
|
-
requests.set(requestId, {
|
|
277
|
-
...data,
|
|
278
|
-
requestId,
|
|
279
|
-
webhookUrl,
|
|
280
|
-
status: 'pending'
|
|
281
|
-
});
|
|
282
|
-
|
|
283
|
-
console.log('New Nebula HITL request:', requestId, data.title);
|
|
284
|
-
|
|
285
|
-
res.json({ success: true, requestId, status: 'pending' });
|
|
286
|
-
});
|
|
287
|
-
|
|
288
|
-
// Respond to request (called by your UI)
|
|
289
|
-
app.post('/requests/:requestId/respond', async (req, res) => {
|
|
290
|
-
const requestId = req.params.requestId;
|
|
291
|
-
const { response, respondedBy } = req.body;
|
|
292
|
-
|
|
293
|
-
const request = requests.get(requestId);
|
|
294
|
-
if (!request) {
|
|
295
|
-
return res.status(404).json({ error: 'Request not found' });
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
// Call n8n webhook to resume workflow
|
|
299
|
-
await fetch(request.webhookUrl, {
|
|
300
|
-
method: 'POST',
|
|
301
|
-
headers: { 'Content-Type': 'application/json' },
|
|
302
|
-
body: JSON.stringify({
|
|
303
|
-
requestId,
|
|
304
|
-
response,
|
|
305
|
-
responseValue: response,
|
|
306
|
-
respondedBy,
|
|
307
|
-
respondedAt: new Date().toISOString()
|
|
308
|
-
})
|
|
309
|
-
});
|
|
310
|
-
|
|
311
|
-
requests.delete(requestId);
|
|
312
|
-
|
|
313
|
-
res.json({ success: true });
|
|
314
|
-
});
|
|
315
|
-
|
|
316
|
-
// Health check
|
|
317
|
-
app.get('/health', (req, res) => {
|
|
318
|
-
res.json({ status: 'ok' });
|
|
319
|
-
});
|
|
320
|
-
|
|
321
|
-
app.listen(3000, () => {
|
|
322
|
-
console.log('Nebula HITL Backend running on port 3000');
|
|
323
|
-
});
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
## Workflow Example
|
|
327
|
-
|
|
328
|
-
```
|
|
329
|
-
[Trigger] → [Process Data] → [Nebula HITL Request] → [If Response == "approved"] → [Continue]
|
|
330
|
-
↓
|
|
331
|
-
[Handle Rejection]
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
### Accessing Response Data
|
|
335
|
-
|
|
336
|
-
After the Nebula HITL Request node resumes (when the webhook is called), the node outputs the webhook payload data. You can access:
|
|
337
|
-
|
|
338
|
-
```javascript
|
|
339
|
-
// In a Code node or expression
|
|
340
|
-
const requestId = $json.requestId; // The original request ID
|
|
341
|
-
const response = $json.response; // The response value (e.g., "approved", "yes", "rejected")
|
|
342
|
-
const responseValue = $json.responseValue; // Same as response (for compatibility)
|
|
343
|
-
const respondedBy = $json.respondedBy; // Who responded (email/ID)
|
|
344
|
-
const respondedAt = $json.respondedAt; // ISO timestamp when they responded
|
|
345
|
-
const comment = $json.comment; // Optional comment from responder
|
|
346
|
-
const data = $json.data; // Any additional data from your backend
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
**Example: Using in an IF node condition:**
|
|
350
|
-
```
|
|
351
|
-
{{ $json.response }} equals "approved"
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
**Example: Send notification with response:**
|
|
355
|
-
```
|
|
356
|
-
The request was {{ $json.response }} by {{ $json.respondedBy }} at {{ $json.respondedAt }}
|
|
357
|
-
```
|
|
99
|
+
- **For human approvals**: Use the [Nebula HITL Request](nodes/NebulaHitlRequest/README.md) node
|
|
100
|
+
- **For executing actions**: Use the [Nebula Action](nodes/NebulaAction/README.md) node
|
|
101
|
+
- **For triggering workflows**: Use the [Nebula Trigger](nodes/NebulaTrigger/README.md) node
|
|
358
102
|
|
|
359
103
|
## Development
|
|
360
104
|
|
|
@@ -363,12 +107,14 @@ The request was {{ $json.response }} by {{ $json.respondedBy }} at {{ $json.resp
|
|
|
363
107
|
```
|
|
364
108
|
n8n-nodes-nebula/
|
|
365
109
|
├── credentials/
|
|
366
|
-
│
|
|
110
|
+
│ ├── NebulaApi.credentials.ts # Outbound API authentication
|
|
111
|
+
│ ├── NebulaTriggerAuth.credentials.ts # Inbound webhook authentication
|
|
112
|
+
│ └── README.md # Credentials documentation
|
|
367
113
|
├── nodes/
|
|
368
|
-
│
|
|
369
|
-
│
|
|
370
|
-
│
|
|
371
|
-
│
|
|
114
|
+
│ ├── NebulaAction/ # Execute Nebula actions
|
|
115
|
+
│ ├── NebulaHitlRequest/ # Human-in-the-loop requests
|
|
116
|
+
│ ├── NebulaTrigger/ # Webhook trigger with forms
|
|
117
|
+
│ └── README.md # Nodes overview
|
|
372
118
|
├── package.json
|
|
373
119
|
├── tsconfig.json
|
|
374
120
|
└── README.md
|
|
@@ -402,12 +148,6 @@ pnpm format
|
|
|
402
148
|
3. Verify the custom nodes path in n8n configuration
|
|
403
149
|
4. Restart n8n completely
|
|
404
150
|
|
|
405
|
-
### Webhook not being called
|
|
406
|
-
|
|
407
|
-
1. Ensure your n8n instance is publicly accessible or your backend can reach it
|
|
408
|
-
2. Check the webhookUrl in your backend logs
|
|
409
|
-
3. Verify the requestId matches in both the request and response
|
|
410
|
-
|
|
411
151
|
### Authentication errors
|
|
412
152
|
|
|
413
153
|
1. Verify credentials in n8n are correct
|
|
@@ -431,6 +171,7 @@ MIT License - see [LICENSE](LICENSE) file for details.
|
|
|
431
171
|
|
|
432
172
|
- [n8n](https://n8n.io) - Fair-code workflow automation
|
|
433
173
|
- [n8n documentation on creating nodes](https://docs.n8n.io/integrations/creating-nodes/)
|
|
174
|
+
- [Survey.js](https://surveyjs.io) - Form library used for form definitions
|
|
434
175
|
|
|
435
176
|
## Support
|
|
436
177
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
/**
|
|
3
|
+
* NebulaTriggerAuth - Authentication credential for incoming webhook requests
|
|
4
|
+
*
|
|
5
|
+
* This is used to authenticate CALLERS to the Nebula Trigger webhook.
|
|
6
|
+
* It is distinctly different from NebulaApi credentials which authenticate
|
|
7
|
+
* outbound requests FROM n8n TO Nebula.
|
|
8
|
+
*/
|
|
9
|
+
export declare class NebulaTriggerAuth implements ICredentialType {
|
|
10
|
+
name: string;
|
|
11
|
+
displayName: string;
|
|
12
|
+
documentationUrl: string;
|
|
13
|
+
icon: "fa:key";
|
|
14
|
+
properties: INodeProperties[];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=NebulaTriggerAuth.credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NebulaTriggerAuth.credentials.d.ts","sourceRoot":"","sources":["../../credentials/NebulaTriggerAuth.credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB;;;;;;GAMG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IACvD,IAAI,SAAuB;IAC3B,WAAW,SAAyB;IACpC,gBAAgB,SAAiD;IAIjE,IAAI,EAAG,QAAQ,CAAU;IAEzB,UAAU,EAAE,eAAe,EAAE,CAY3B;CACH"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NebulaTriggerAuth = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* NebulaTriggerAuth - Authentication credential for incoming webhook requests
|
|
6
|
+
*
|
|
7
|
+
* This is used to authenticate CALLERS to the Nebula Trigger webhook.
|
|
8
|
+
* It is distinctly different from NebulaApi credentials which authenticate
|
|
9
|
+
* outbound requests FROM n8n TO Nebula.
|
|
10
|
+
*/
|
|
11
|
+
class NebulaTriggerAuth {
|
|
12
|
+
name = 'nebulaTriggerAuth';
|
|
13
|
+
displayName = 'Nebula Trigger Auth';
|
|
14
|
+
documentationUrl = 'https://github.com/linkorb/n8n-nodes-nebula';
|
|
15
|
+
// Note: Custom SVG icons don't work with N8N_CUSTOM_EXTENSIONS due to n8n bug
|
|
16
|
+
// See: https://github.com/n8n-io/n8n/issues/21360
|
|
17
|
+
// Using Font Awesome as fallback. Install via npm for custom SVG icons.
|
|
18
|
+
icon = 'fa:key';
|
|
19
|
+
properties = [
|
|
20
|
+
{
|
|
21
|
+
displayName: 'Token',
|
|
22
|
+
name: 'token',
|
|
23
|
+
type: 'string',
|
|
24
|
+
typeOptions: {
|
|
25
|
+
password: true,
|
|
26
|
+
},
|
|
27
|
+
default: '',
|
|
28
|
+
description: 'Bearer token that callers must provide to authenticate webhook requests. Callers should include this in the Authorization header as "Bearer {token}".',
|
|
29
|
+
required: true,
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
exports.NebulaTriggerAuth = NebulaTriggerAuth;
|
|
34
|
+
//# sourceMappingURL=NebulaTriggerAuth.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NebulaTriggerAuth.credentials.js","sourceRoot":"","sources":["../../credentials/NebulaTriggerAuth.credentials.ts"],"names":[],"mappings":";;;AAKA;;;;;;GAMG;AACH,MAAa,iBAAiB;IAC5B,IAAI,GAAG,mBAAmB,CAAC;IAC3B,WAAW,GAAG,qBAAqB,CAAC;IACpC,gBAAgB,GAAG,6CAA6C,CAAC;IACjE,8EAA8E;IAC9E,kDAAkD;IAClD,wEAAwE;IACxE,IAAI,GAAG,QAAiB,CAAC;IAEzB,UAAU,GAAsB;QAC9B;YACE,WAAW,EAAE,OAAO;YACpB,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE;gBACX,QAAQ,EAAE,IAAI;aACf;YACD,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,uJAAuJ;YACpK,QAAQ,EAAE,IAAI;SACf;KACF,CAAC;CACH;AAtBD,8CAsBC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NebulaTrigger.node.d.ts","sourceRoot":"","sources":["../../../nodes/NebulaTrigger/NebulaTrigger.node.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,oBAAoB,EACpB,oBAAoB,EAEpB,cAAc,EACf,MAAM,cAAc,CAAC;AAEtB,qBAAa,aAAc,YAAW,SAAS;IAC7C,WAAW,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"NebulaTrigger.node.d.ts","sourceRoot":"","sources":["../../../nodes/NebulaTrigger/NebulaTrigger.node.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,oBAAoB,EACpB,oBAAoB,EAEpB,cAAc,EACf,MAAM,cAAc,CAAC;AAEtB,qBAAa,aAAc,YAAW,SAAS;IAC7C,WAAW,EAAE,oBAAoB,CAkI/B;IAGF,cAAc;;8BAEc,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;yBAKtC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;yBAQjC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;;MAOtD;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CA0KtE"}
|
|
@@ -19,6 +19,14 @@ class NebulaTrigger {
|
|
|
19
19
|
// Trigger nodes have no inputs - they are workflow entry points
|
|
20
20
|
inputs: [],
|
|
21
21
|
outputs: ['main'],
|
|
22
|
+
// Optional credentials for authenticating incoming webhook requests
|
|
23
|
+
credentials: [
|
|
24
|
+
{
|
|
25
|
+
name: 'nebulaTriggerAuth',
|
|
26
|
+
displayName: 'Nebula Trigger Auth',
|
|
27
|
+
required: false,
|
|
28
|
+
},
|
|
29
|
+
],
|
|
22
30
|
webhooks: [
|
|
23
31
|
{
|
|
24
32
|
name: 'default',
|
|
@@ -31,6 +39,14 @@ class NebulaTrigger {
|
|
|
31
39
|
},
|
|
32
40
|
],
|
|
33
41
|
properties: [
|
|
42
|
+
// --- Authentication ---
|
|
43
|
+
{
|
|
44
|
+
displayName: 'Authenticate Caller',
|
|
45
|
+
name: 'authenticateCaller',
|
|
46
|
+
type: 'boolean',
|
|
47
|
+
default: false,
|
|
48
|
+
description: 'Whether to require authentication for incoming webhook requests. When enabled, callers must provide a valid Bearer token in the Authorization header. This is different from Nebula API credentials which authenticate n8n to Nebula.',
|
|
49
|
+
},
|
|
34
50
|
// --- Form Definition ---
|
|
35
51
|
{
|
|
36
52
|
displayName: 'Form Definition (Survey.js)',
|
|
@@ -144,6 +160,78 @@ class NebulaTrigger {
|
|
|
144
160
|
async webhook() {
|
|
145
161
|
const req = this.getRequestObject();
|
|
146
162
|
const bodyData = this.getBodyData();
|
|
163
|
+
// Check authentication if enabled
|
|
164
|
+
const authenticateCaller = this.getNodeParameter('authenticateCaller', false);
|
|
165
|
+
if (authenticateCaller) {
|
|
166
|
+
// Get the configured token from credentials
|
|
167
|
+
let expectedToken;
|
|
168
|
+
try {
|
|
169
|
+
const credentials = await this.getCredentials('nebulaTriggerAuth');
|
|
170
|
+
expectedToken = credentials?.token;
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// No credentials configured but authentication is enabled
|
|
174
|
+
return {
|
|
175
|
+
webhookResponse: {
|
|
176
|
+
status: 500,
|
|
177
|
+
body: {
|
|
178
|
+
success: false,
|
|
179
|
+
error: 'Authentication is enabled but no credentials are configured',
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
if (!expectedToken) {
|
|
185
|
+
return {
|
|
186
|
+
webhookResponse: {
|
|
187
|
+
status: 500,
|
|
188
|
+
body: {
|
|
189
|
+
success: false,
|
|
190
|
+
error: 'Authentication is enabled but token is not configured',
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// Get the Authorization header from the request
|
|
196
|
+
const authHeader = req.headers.authorization;
|
|
197
|
+
if (!authHeader) {
|
|
198
|
+
return {
|
|
199
|
+
webhookResponse: {
|
|
200
|
+
status: 401,
|
|
201
|
+
body: {
|
|
202
|
+
success: false,
|
|
203
|
+
error: 'Authorization header is required',
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
// Check for Bearer token format
|
|
209
|
+
if (!authHeader.startsWith('Bearer ')) {
|
|
210
|
+
return {
|
|
211
|
+
webhookResponse: {
|
|
212
|
+
status: 401,
|
|
213
|
+
body: {
|
|
214
|
+
success: false,
|
|
215
|
+
error: 'Authorization header must use Bearer token format',
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
const providedToken = authHeader.substring(7); // Remove 'Bearer ' prefix
|
|
221
|
+
// Constant-time comparison to prevent timing attacks
|
|
222
|
+
if (providedToken.length !== expectedToken.length ||
|
|
223
|
+
!providedToken.split('').every((char, i) => char === expectedToken[i])) {
|
|
224
|
+
return {
|
|
225
|
+
webhookResponse: {
|
|
226
|
+
status: 401,
|
|
227
|
+
body: {
|
|
228
|
+
success: false,
|
|
229
|
+
error: 'Invalid authentication token',
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
}
|
|
147
235
|
// Get node parameters
|
|
148
236
|
const formJsonStr = this.getNodeParameter('formJson', '');
|
|
149
237
|
const options = this.getNodeParameter('options', {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NebulaTrigger.node.js","sourceRoot":"","sources":["../../../nodes/NebulaTrigger/NebulaTrigger.node.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"NebulaTrigger.node.js","sourceRoot":"","sources":["../../../nodes/NebulaTrigger/NebulaTrigger.node.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@linkorb/n8n-nodes-nebula",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "n8n nodes for Nebula - Human-in-the-Loop (HITL) requests with configurable REST API backend",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|
|
@@ -44,7 +44,8 @@
|
|
|
44
44
|
"n8n": {
|
|
45
45
|
"n8nNodesApiVersion": 1,
|
|
46
46
|
"credentials": [
|
|
47
|
-
"dist/credentials/NebulaApi.credentials.js"
|
|
47
|
+
"dist/credentials/NebulaApi.credentials.js",
|
|
48
|
+
"dist/credentials/NebulaTriggerAuth.credentials.js"
|
|
48
49
|
],
|
|
49
50
|
"nodes": [
|
|
50
51
|
"dist/nodes/NebulaHitlRequest/NebulaHitlRequest.node.js",
|