@radware/n8n-nodes-radware 0.0.0-stage → 0.1.8

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/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Radware
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,85 @@
1
- # Temporary Holding Version
1
+ # @radware/n8n-nodes-radware
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ This is an n8n community node for interacting with Radware Threat Intelligence service.
4
+
5
+ It lets you use **Radware IP Insight** in your n8n workflows.
6
+
7
+ [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.
8
+
9
+ [Installation](#installation)
10
+ [Operations](#operations)
11
+ [Credentials](#credentials)
12
+ [Compatibility](#compatibility)
13
+ [Usage](#usage)
14
+ [Resources](#resources)
15
+ [Version history](#version-history)
16
+
17
+ ## Installation
18
+
19
+ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
20
+
21
+ ## Operations
22
+
23
+ ### IP Insight
24
+
25
+ The Radware IP Insight node enables IP enrichment through Radware’s Threat Intelligence REST API endpoint.
26
+
27
+ It can process a single or multiple IPv4 addresses from different trigger types, extract IPs automatically from input data, or read them from uploaded files in various formats.
28
+
29
+ The multifunctional node is designed for secure parsing and supports retry logic for failed IP lookups.
30
+
31
+ *1)Supports auto-detect that automatically extracts IPs from input.*
32
+
33
+ * Automatically detects IPs or IP List from your input: free text, complete JSON objects, or delimiter-separated text (space, comma, newline, single quote, double quote)
34
+
35
+ *2)Body Input Mode: specific field, simple list, and raw JSON.*
36
+
37
+ * when “Auto-detect Input” turn off, you can select specific input format:
38
+
39
+ a. Field – you can select specific or multiple fields
40
+
41
+ b. Simple List – one IP per line or comma-separated or IPs with single quote and/or double quote
42
+
43
+ c. raw JSON - IP's in JSON format
44
+
45
+ *3)File Upload support with ability to parse multiple documents formatted with JSON, TXT, CSV and LOG.*
46
+
47
+ *4)Provides customizable field projection for specific API response data.*
48
+
49
+ * Projection defines which fields to return in the API response.
50
+
51
+ * By default the projection was set to “all” but you can replace it according to your specific use-case.
52
+
53
+ * Supported fields include country_iso, ip_type, risk_score, actionable_insight and more.
54
+
55
+ *5)Includes configurable output modes to control response detail level.*
56
+
57
+ * Choose between “All” (includes IP which was failures to address) or “Valid Only” (successful IP Insight result only)
58
+
59
+ ## Credentials
60
+
61
+ * This node uses **Radware IP Insight API credentials**.
62
+
63
+ * To authenticate, you must provide:
64
+
65
+ * **Context (API ID)** — Your Radware Cloud tenant/account identifier
66
+
67
+ * **x-api-key** — Your Radware API key
68
+
69
+ * Subscribe to configure Radware API keys here:
70
+
71
+ [Radware Threat Intelligence Service](https://www.radware.com/products/threat-intelligence-service/)
72
+
73
+ ## Compatibility
74
+
75
+ * Minimum n8n version: **compatible with 1.114.4 and recent n8n releases**
76
+
77
+ * Tested on: self-hosted n8n stable builds
78
+
79
+ ## Resources
80
+
81
+ [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
82
+
83
+ ## License
84
+
85
+ * MIT
@@ -0,0 +1,17 @@
1
+ import type { ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class RadwareApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ properties: INodeProperties[];
7
+ authenticate: {
8
+ type: "generic";
9
+ properties: {
10
+ headers: {
11
+ 'x-api-key': string;
12
+ Context: string;
13
+ };
14
+ };
15
+ };
16
+ test: ICredentialTestRequest;
17
+ }
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RadwareApi = void 0;
4
+ class RadwareApi {
5
+ constructor() {
6
+ this.name = 'radwareApi';
7
+ this.displayName = 'Radware API';
8
+ this.documentationUrl = 'https://github.com/Radware/n8n-nodes-radware';
9
+ this.properties = [
10
+ {
11
+ displayName: 'Context (API ID)',
12
+ name: 'context',
13
+ type: 'string',
14
+ default: '',
15
+ required: true,
16
+ description: 'Your Radware Cloud account/tenant ID',
17
+ hint: 'This is sent as the “Context” header.',
18
+ },
19
+ {
20
+ displayName: 'x-api-key (API Key)',
21
+ name: 'xApiKey',
22
+ type: 'string',
23
+ typeOptions: { password: true },
24
+ default: '',
25
+ required: true,
26
+ description: 'Your Radware API key',
27
+ hint: 'This is sent as the “x-api-key” header.',
28
+ },
29
+ ];
30
+ this.authenticate = {
31
+ type: 'generic',
32
+ properties: {
33
+ headers: {
34
+ 'x-api-key': '={{$credentials.xApiKey}}',
35
+ Context: '={{$credentials.context}}',
36
+ },
37
+ },
38
+ };
39
+ this.test = {
40
+ request: {
41
+ baseURL: 'https://api.radwarecloud.app',
42
+ url: '/api/v1/sdcc/threat/core/insight/_bulkResolve',
43
+ method: 'POST',
44
+ headers: {
45
+ 'Content-Type': 'application/json',
46
+ },
47
+ body: {
48
+ addresses: ['8.8.8.8'],
49
+ projection: ['all'],
50
+ },
51
+ },
52
+ };
53
+ }
54
+ }
55
+ exports.RadwareApi = RadwareApi;
56
+ //# sourceMappingURL=RadwareApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadwareApi.credentials.js","sourceRoot":"","sources":["../../credentials/RadwareApi.credentials.ts"],"names":[],"mappings":";;;AAMA,MAAa,UAAU;IAAvB;QACQ,SAAI,GAAG,YAAY,CAAC;QACpB,gBAAW,GAAG,aAAa,CAAC;QAG5B,qBAAgB,GAAG,8CAA8C,CAAC;QAElE,eAAU,GAAsB;YACxB;gBACQ,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,sCAAsC;gBACnD,IAAI,EAAE,uCAAuC;aACpD;YACD;gBACQ,WAAW,EAAE,qBAAqB;gBAClC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,sBAAsB;gBACnC,IAAI,EAAE,yCAAyC;aACtD;SACR,CAAC;QAEF,iBAAY,GAAG;YACP,IAAI,EAAE,SAAkB;YACxB,UAAU,EAAE;gBACJ,OAAO,EAAE;oBACD,WAAW,EAAE,2BAA2B;oBACxC,OAAO,EAAE,2BAA2B;iBAC3C;aACR;SACR,CAAC;QAEF,SAAI,GAA2B;YACvB,OAAO,EAAE;gBACD,OAAO,EAAE,8BAA8B;gBACvC,GAAG,EAAE,+CAA+C;gBACpD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACD,cAAc,EAAE,kBAAkB;iBACzC;gBACD,IAAI,EAAE;oBACE,SAAS,EAAE,CAAC,SAAS,CAAC;oBACtB,UAAU,EAAE,CAAC,KAAK,CAAC;iBAC1B;aACR;SACR,CAAC;IACV,CAAC;CAAA;AArDD,gCAqDC"}
@@ -0,0 +1,2 @@
1
+ export * from './credentials/RadwareApi.credentials';
2
+ export * from './nodes/Radware/Radware.node';
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./credentials/RadwareApi.credentials"), exports);
18
+ __exportStar(require("./nodes/Radware/Radware.node"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uEAAqD;AACrD,+DAA6C"}
@@ -0,0 +1,6 @@
1
+ import { INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ import type { IExecuteFunctions } from 'n8n-workflow';
3
+ export declare class Radware implements INodeType {
4
+ description: INodeTypeDescription;
5
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
6
+ }
@@ -0,0 +1,579 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Radware = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ function extractIpsFromText(text) {
6
+ if (!text)
7
+ return [];
8
+ const candidates = Array.from(text.matchAll(/\b(?:\d{1,3}\.){3}\d{1,3}\b/g)).map(m => m[0].trim());
9
+ const seen = new Set();
10
+ const out = [];
11
+ for (const ip of candidates)
12
+ if (ip && !seen.has(ip)) {
13
+ seen.add(ip);
14
+ out.push(ip);
15
+ }
16
+ return out;
17
+ }
18
+ function parseSimpleList(text) {
19
+ const cleaned = text
20
+ .replace(/['"]/g, '')
21
+ .replace(/[,;\n\r\t]+/g, ',')
22
+ .split(',')
23
+ .map(s => s.trim())
24
+ .filter(Boolean);
25
+ return extractIpsFromText(cleaned.join(' '));
26
+ }
27
+ function extractAddressesAuto(json) {
28
+ var _a;
29
+ if (Array.isArray(json)) {
30
+ const arr = json;
31
+ return arr.map(String).map((s) => s.trim()).filter(Boolean);
32
+ }
33
+ for (const k of ['addresses', 'ips', 'ipList']) {
34
+ const v = json[k];
35
+ if (Array.isArray(v))
36
+ return v.map(String).map((s) => s.trim()).filter(Boolean);
37
+ }
38
+ if (typeof json.ip === 'string' && json.ip.trim())
39
+ return [json.ip.trim()];
40
+ const bodyVal = json === null || json === void 0 ? void 0 : json.body;
41
+ if (bodyVal && typeof bodyVal === 'object') {
42
+ const inner = (_a = bodyVal.body) !== null && _a !== void 0 ? _a : bodyVal;
43
+ if (Array.isArray(inner)) {
44
+ return inner.map(String).map((s) => s.trim()).filter(Boolean);
45
+ }
46
+ if (Array.isArray(inner.addresses)) {
47
+ return inner.addresses.map(String).map((s) => s.trim()).filter(Boolean);
48
+ }
49
+ if (Array.isArray(inner.ips)) {
50
+ return inner.ips.map(String).map((s) => s.trim()).filter(Boolean);
51
+ }
52
+ if (Array.isArray(inner.ipList)) {
53
+ return inner.ipList.map(String).map((s) => s.trim()).filter(Boolean);
54
+ }
55
+ if (typeof inner.text === 'string' && inner.text.trim()) {
56
+ return extractIpsFromText(inner.text.trim());
57
+ }
58
+ }
59
+ for (const k of ['chatInput', 'text', 'message', 'body']) {
60
+ const raw = json[k];
61
+ if (typeof raw !== 'string' || !raw.trim())
62
+ continue;
63
+ const t = raw.trim();
64
+ if (t.startsWith('{') || t.startsWith('[')) {
65
+ try {
66
+ const parsed = JSON.parse(t);
67
+ if (Array.isArray(parsed.addresses))
68
+ return parsed.addresses.map(String).map((s) => s.trim()).filter(Boolean);
69
+ if (Array.isArray(parsed))
70
+ return parsed.map(String).map((s) => s.trim()).filter(Boolean);
71
+ }
72
+ catch { }
73
+ }
74
+ return extractIpsFromText(t);
75
+ }
76
+ return [];
77
+ }
78
+ function looksLikeJson(buffer) {
79
+ const s = buffer.slice(0, 32).toString('utf8').trim();
80
+ return s.startsWith('{') || s.startsWith('[');
81
+ }
82
+ async function addressesFromBinary(buffer, mime, ext) {
83
+ const lcMime = (mime || '').toLowerCase();
84
+ const lcExt = (ext || '').toLowerCase().replace(/^\./, '');
85
+ const ALLOWED_MIME = new Set([
86
+ 'application/json',
87
+ 'text/plain',
88
+ 'text/csv',
89
+ ]);
90
+ const ALLOWED_EXT = new Set(['json', 'txt', 'csv', 'log']);
91
+ if (![...ALLOWED_MIME].some((m) => lcMime === m) && !ALLOWED_EXT.has(lcExt)) {
92
+ throw new Error('Unsupported file type. Allowed: JSON, TXT, CSV, LOG');
93
+ }
94
+ if (lcMime === 'application/json' || lcExt === 'json' || looksLikeJson(buffer)) {
95
+ const parsed = JSON.parse(buffer.toString('utf8'));
96
+ if (Array.isArray(parsed)) {
97
+ return extractIpsFromText(parsed.map(String).join(' '));
98
+ }
99
+ if (parsed && Array.isArray(parsed.addresses)) {
100
+ return extractIpsFromText(parsed.addresses.map(String).join(' '));
101
+ }
102
+ throw new Error('JSON must be an array of IPs or have "addresses" array');
103
+ }
104
+ if (lcMime === 'text/plain' || lcMime === 'text/csv' || ['txt', 'csv', 'log'].includes(lcExt)) {
105
+ return parseSimpleList(buffer.toString('utf8'));
106
+ }
107
+ throw new Error('Unsupported file type');
108
+ }
109
+ function parseSingleIpResponse(resp) {
110
+ const failures = Array.isArray(resp === null || resp === void 0 ? void 0 : resp.failures) ? resp.failures : [];
111
+ const results = (resp === null || resp === void 0 ? void 0 : resp.results) || {};
112
+ if (failures.length > 0) {
113
+ const f = failures[0];
114
+ return { ip: f.ip, response: f };
115
+ }
116
+ const ip = Object.keys(results)[0];
117
+ if (ip && results[ip])
118
+ return { ip, response: results[ip] };
119
+ return { ip: 'unknown', response: { error: 'No data returned' } };
120
+ }
121
+ class Radware {
122
+ constructor() {
123
+ this.description = {
124
+ displayName: 'Radware',
125
+ name: 'radware',
126
+ icon: 'file:radware_v1.svg',
127
+ group: ['transform'],
128
+ version: 1,
129
+ subtitle: '={{"Radware"}}',
130
+ description: 'Radware IP Insight',
131
+ defaults: { name: 'IP Insight' },
132
+ inputs: ['main'],
133
+ outputs: ['main'],
134
+ credentials: [{ name: 'radwareApi', required: true }],
135
+ properties: [
136
+ { displayName: 'Operation', name: 'operation', type: 'options', default: 'ipInsight', options: [{ name: 'IP Insight', value: 'ipInsight' }] },
137
+ {
138
+ displayName: 'Base URL',
139
+ name: 'baseUrl',
140
+ type: 'string',
141
+ default: 'https://api.radwarecloud.app/api/v1/sdcc/threat/core',
142
+ placeholder: 'https://<host>/api/v1/sdcc/threat/core',
143
+ description: 'Do NOT include /insight/_bulkResolve — it is appended automatically.',
144
+ },
145
+ { displayName: 'HTTP Method', name: 'httpMethod', type: 'options', default: 'POST', options: [{ name: 'POST', value: 'POST' }] },
146
+ {
147
+ displayName: 'Read IPs From File',
148
+ name: 'useBinary',
149
+ type: 'boolean',
150
+ default: false,
151
+ description: 'Enable file upload to process multiple IPs. Specify the parameter name for the file field. Supported formats: JSON, TXT, CSV, LOG.',
152
+ },
153
+ {
154
+ displayName: 'File Key Name',
155
+ name: 'binaryKey',
156
+ type: 'string',
157
+ default: 'file',
158
+ placeholder: 'file, file2 or *',
159
+ description: 'Binary key name(s) on the item. Use a single key (e.g. "file"), a comma-separated list (e.g. "file,file2"), or "*" to read all binary keys.',
160
+ displayOptions: { show: { useBinary: [true] } },
161
+ },
162
+ {
163
+ displayName: 'Auto-detect Input',
164
+ name: 'autoDetect',
165
+ type: 'boolean',
166
+ noDataExpression: true,
167
+ default: true,
168
+ description: 'Automatically detects IPs from your input: free text, JSON paths like ips/ipList or ip, complete JSON objects, or delimiter-separated text (space, comma, newline, single quote, double quote).',
169
+ },
170
+ {
171
+ displayName: 'Body Input Mode',
172
+ name: 'bodyMode',
173
+ type: 'options',
174
+ default: 'fields',
175
+ options: [
176
+ { name: 'Fields', value: 'fields' },
177
+ { name: 'Simple List', value: 'list' },
178
+ { name: 'Raw JSON', value: 'raw' },
179
+ ],
180
+ description: 'Select input format: single IP address, JSON object with IP data, or Fields for a simple list.',
181
+ displayOptions: {
182
+ show: {
183
+ autoDetect: [false],
184
+ },
185
+ },
186
+ },
187
+ {
188
+ displayName: 'Addresses',
189
+ name: 'addresses',
190
+ type: 'string',
191
+ typeOptions: { multipleValues: true, multipleValueButtonText: 'Add IP' },
192
+ default: [],
193
+ placeholder: '8.8.8.8',
194
+ description: 'IP addresses to query. Radware API enforces its own limit — if exceeded, an error will be returned in output.',
195
+ displayOptions: { show: { bodyMode: ['fields'], autoDetect: [false] } },
196
+ },
197
+ {
198
+ displayName: 'Addresses (List)',
199
+ name: 'addressesText',
200
+ type: 'string',
201
+ typeOptions: { rows: 6 },
202
+ default: '',
203
+ placeholder: 'One IP per line or comma-separated (e.g. 8.8.8.8, 1.1.1.1)\n"8.8.8.8", \'1.1.1.1\'',
204
+ description: 'Paste or drag IPs. Supports: one per line, comma-separated, quoted IPs.',
205
+ displayOptions: { show: { bodyMode: ['list'], autoDetect: [false] } },
206
+ },
207
+ {
208
+ displayName: 'Raw JSON Body',
209
+ name: 'rawJsonBody',
210
+ type: 'string',
211
+ typeOptions: { rows: 8 },
212
+ default: `{\n "addresses": []\n}`,
213
+ description: 'Provide full JSON body. Drag an array pill into "addresses", e.g. {{$json.addresses}}.',
214
+ displayOptions: { show: { bodyMode: ['raw'], autoDetect: [false] } },
215
+ },
216
+ {
217
+ displayName: 'Projection (List)',
218
+ name: 'projection',
219
+ type: 'multiOptions',
220
+ options: [
221
+ { name: 'all', value: 'all' },
222
+ { name: 'country_iso', value: 'country_iso' },
223
+ { name: 'ip_type', value: 'ip_type' },
224
+ { name: 'risk_score', value: 'risk_score' },
225
+ { name: 'risk_analysis', value: 'risk_analysis' },
226
+ { name: 'currently_active_eaaf', value: 'currently_active_eaaf' },
227
+ { name: 'eaaf_current_score', value: 'eaaf_current_score' },
228
+ { name: 'aso', value: 'aso' },
229
+ { name: 'asn', value: 'asn' },
230
+ { name: 'cidr', value: 'cidr' },
231
+ { name: 'attack_categories', value: 'attack_categories' },
232
+ { name: 'attacked_verticals', value: 'attacked_verticals' },
233
+ { name: 'actionable_insight', value: 'actionable_insight' },
234
+ ],
235
+ default: ['all'],
236
+ description: 'Select specific fields to return or use "all" for complete data (choosing "all" may impact response time).',
237
+ },
238
+ {
239
+ displayName: 'Additional Projection Keys (List)',
240
+ name: 'additionalProjKeys',
241
+ type: 'string',
242
+ typeOptions: { multipleValues: true, multipleValueButtonText: 'Add key' },
243
+ default: [],
244
+ description: 'Optionally add specific keys (e.g. country_iso, ip_type, risk_score, aso, asn, cidr, attack_categories, attacked_verticals, eaaf_current_score, currently_active_eaaf, risk_score, risk_analysis).',
245
+ },
246
+ {
247
+ displayName: 'Output Mode',
248
+ name: 'outputMode',
249
+ type: 'options',
250
+ default: 'all',
251
+ options: [
252
+ { name: 'All', value: 'all' },
253
+ { name: 'Valid Only', value: 'validOnly' },
254
+ ],
255
+ description: 'Show only valid IPs or include all with errors.',
256
+ },
257
+ {
258
+ displayName: 'Query Parameters',
259
+ name: 'queryParametersUi',
260
+ type: 'fixedCollection',
261
+ typeOptions: { multipleValues: true },
262
+ default: {},
263
+ placeholder: 'Add Query Parameter',
264
+ options: [{
265
+ name: 'parameter',
266
+ displayName: 'Parameter',
267
+ values: [
268
+ { displayName: 'Name', name: 'name', type: 'string', default: '' },
269
+ { displayName: 'Value', name: 'value', type: 'string', default: '' },
270
+ ],
271
+ }],
272
+ },
273
+ {
274
+ displayName: 'Extra Headers',
275
+ name: 'headersUi',
276
+ type: 'fixedCollection',
277
+ typeOptions: { multipleValues: true },
278
+ default: {},
279
+ placeholder: 'Add Header',
280
+ options: [{
281
+ name: 'header',
282
+ displayName: 'Header',
283
+ values: [
284
+ { displayName: 'Name', name: 'name', type: 'string', default: '' },
285
+ { displayName: 'Value', name: 'value', type: 'string', default: '' },
286
+ ],
287
+ }],
288
+ },
289
+ {
290
+ displayName: 'Options',
291
+ name: 'options',
292
+ type: 'collection',
293
+ placeholder: 'Add Option',
294
+ default: {},
295
+ options: [
296
+ { displayName: 'Ignore SSL Issues', name: 'ignoreSslIssues', type: 'boolean', default: false },
297
+ { displayName: 'Proxy', name: 'proxy', type: 'string', default: '', placeholder: 'http://user:pass@host:port' },
298
+ { displayName: 'Timeout (ms)', name: 'timeout', type: 'number', default: 30000 },
299
+ { displayName: 'Return Full Response', name: 'returnFullResponse', type: 'boolean', default: false },
300
+ ],
301
+ },
302
+ ],
303
+ };
304
+ }
305
+ async execute() {
306
+ var _a, _b, _c, _d, _e;
307
+ const items = this.getInputData();
308
+ const out = [];
309
+ for (let i = 0; i < items.length; i++) {
310
+ const operation = this.getNodeParameter('operation', i);
311
+ if (operation !== 'ipInsight')
312
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Unsupported operation: ${operation}`);
313
+ const baseUrl = this.getNodeParameter('baseUrl', i) || '';
314
+ const httpMethod = this.getNodeParameter('httpMethod', i, 'POST');
315
+ const useBinary = this.getNodeParameter('useBinary', i);
316
+ const autoDetect = this.getNodeParameter('autoDetect', i);
317
+ const outputMode = this.getNodeParameter('outputMode', i);
318
+ let body;
319
+ if (useBinary) {
320
+ const binaryKeyParam = this.getNodeParameter('binaryKey', i, 'file');
321
+ const binMap = items[i].binary;
322
+ if (binMap && Object.keys(binMap).length > 0) {
323
+ const keysToRead = binaryKeyParam.trim() === '*'
324
+ ? Object.keys(binMap)
325
+ : binaryKeyParam
326
+ .split(',')
327
+ .map(k => k.trim())
328
+ .filter(Boolean);
329
+ let aggregated = [];
330
+ for (const key of keysToRead) {
331
+ const bin = binMap[key];
332
+ if (!bin)
333
+ continue;
334
+ const buffer = await this.helpers.getBinaryDataBuffer(i, key);
335
+ const mime = bin.mimeType;
336
+ const ext = bin.fileExtension;
337
+ try {
338
+ const addrs = await addressesFromBinary(buffer, mime, ext);
339
+ if (addrs === null || addrs === void 0 ? void 0 : addrs.length)
340
+ aggregated.push(...addrs);
341
+ }
342
+ catch (e) {
343
+ }
344
+ }
345
+ if (aggregated.length) {
346
+ const seen = new Set();
347
+ const addresses = aggregated.filter(ip => !seen.has(ip) && seen.add(ip));
348
+ const proj = this.getNodeParameter('projection', i, ['all']) || ['all'];
349
+ const extra = this.getNodeParameter('additionalProjKeys', i, []) || [];
350
+ body = { addresses, projection: [...new Set([...proj, ...extra])] };
351
+ }
352
+ }
353
+ }
354
+ if (!body && autoDetect) {
355
+ const auto = extractAddressesAuto(items[i].json);
356
+ if (auto.length) {
357
+ const proj = this.getNodeParameter('projection', i, ['all']) || ['all'];
358
+ const extra = this.getNodeParameter('additionalProjKeys', i, []) || [];
359
+ body = { addresses: auto, projection: [...new Set([...proj, ...extra])] };
360
+ }
361
+ }
362
+ if (!body) {
363
+ const bodyMode = this.getNodeParameter('bodyMode', i, 'list');
364
+ if (bodyMode === 'raw') {
365
+ const raw = this.getNodeParameter('rawJsonBody', i, '') || '';
366
+ if (!raw.trim())
367
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Raw JSON Body is empty.');
368
+ try {
369
+ body = JSON.parse(raw);
370
+ }
371
+ catch {
372
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Raw JSON Body is not valid JSON.');
373
+ }
374
+ const proj = this.getNodeParameter('projection', i, ['all']) || ['all'];
375
+ const extra = this.getNodeParameter('additionalProjKeys', i, []) || [];
376
+ const finalProjection = [...new Set([...proj, ...extra])];
377
+ if (finalProjection.length > 0 && body) {
378
+ body.projection = finalProjection;
379
+ }
380
+ }
381
+ else if (bodyMode === 'list') {
382
+ const addressesText = this.getNodeParameter('addressesText', i, '') || '';
383
+ const addresses = parseSimpleList(addressesText);
384
+ if (!addresses.length)
385
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Please enter at least one IP address in the list.');
386
+ const proj = this.getNodeParameter('projection', i, ['all']) || ['all'];
387
+ const extra = this.getNodeParameter('additionalProjKeys', i, []) || [];
388
+ body = { addresses, projection: [...new Set([...proj, ...extra])] };
389
+ }
390
+ else {
391
+ const addresses = this.getNodeParameter('addresses', i, []).filter(Boolean);
392
+ if (!addresses.length)
393
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Please add at least one IP address.');
394
+ const proj = this.getNodeParameter('projection', i, ['all']) || ['all'];
395
+ const extra = this.getNodeParameter('additionalProjKeys', i, []) || [];
396
+ body = { addresses, projection: [...new Set([...proj, ...extra])] };
397
+ }
398
+ }
399
+ const qpCollection = this.getNodeParameter('queryParametersUi', i, {});
400
+ const headersCollection = this.getNodeParameter('headersUi', i, {});
401
+ const qs = {};
402
+ if (qpCollection.parameter && Array.isArray(qpCollection.parameter)) {
403
+ for (const p of qpCollection.parameter)
404
+ if (p.name)
405
+ qs[p.name] = p.value;
406
+ }
407
+ const extraHeaders = {};
408
+ if (headersCollection.header && Array.isArray(headersCollection.header)) {
409
+ for (const h of headersCollection.header)
410
+ if (h.name)
411
+ extraHeaders[h.name] = h.value;
412
+ }
413
+ const options = this.getNodeParameter('options', i, {});
414
+ const timeout = (_a = options.timeout) !== null && _a !== void 0 ? _a : 30000;
415
+ const requestOptions = {
416
+ method: httpMethod,
417
+ url: `${baseUrl.replace(/\/$/, '')}/insight/_bulkResolve`,
418
+ json: true,
419
+ body,
420
+ headers: { 'Content-Type': 'application/json', ...extraHeaders },
421
+ qs,
422
+ timeout,
423
+ };
424
+ try {
425
+ const resp = await this.helpers.httpRequestWithAuthentication.call(this, 'radwareApi', requestOptions);
426
+ const failures = Array.isArray(resp === null || resp === void 0 ? void 0 : resp.failures) ? resp.failures : [];
427
+ if (failures.length > 0) {
428
+ const allResponses = { results: (resp === null || resp === void 0 ? void 0 : resp.results) || {}, failures: [] };
429
+ const originalFailureMap = new Map();
430
+ for (const f of failures) {
431
+ if (f.ip)
432
+ originalFailureMap.set(f.ip.trim(), f);
433
+ }
434
+ const ipv4FormatRegex = /^\d{1,3}(\.\d{1,3}){3}$/;
435
+ const addresses = (_b = body === null || body === void 0 ? void 0 : body.addresses) !== null && _b !== void 0 ? _b : [];
436
+ for (const ip of addresses) {
437
+ const trimmedIp = ip.trim();
438
+ if (!ipv4FormatRegex.test(trimmedIp)) {
439
+ allResponses.failures.push({
440
+ ip: trimmedIp,
441
+ reason: 'Invalid input – not an IPv4 address format',
442
+ raw: 'Invalid input – not an IPv4 address format',
443
+ });
444
+ continue;
445
+ }
446
+ const originalFailure = originalFailureMap.get(trimmedIp);
447
+ if (originalFailure) {
448
+ allResponses.failures.push({
449
+ ip: trimmedIp,
450
+ ...originalFailure,
451
+ });
452
+ continue;
453
+ }
454
+ const singleReq = {
455
+ ...requestOptions,
456
+ body: { ...body, addresses: [trimmedIp] },
457
+ };
458
+ try {
459
+ const singleResp = await this.helpers.httpRequestWithAuthentication.call(this, 'radwareApi', singleReq);
460
+ const parsed = parseSingleIpResponse(singleResp);
461
+ if (parsed.response.reason || parsed.response.error) {
462
+ allResponses.failures.push({ ip: trimmedIp, ...parsed.response });
463
+ }
464
+ else {
465
+ allResponses.results[trimmedIp] = parsed.response;
466
+ }
467
+ }
468
+ catch (e) {
469
+ const fallback = originalFailureMap.get(trimmedIp);
470
+ if (fallback) {
471
+ allResponses.failures.push({ ip: trimmedIp, ...fallback });
472
+ }
473
+ else {
474
+ const errorBody = (_c = e.response) === null || _c === void 0 ? void 0 : _c.body;
475
+ let reason = 'HTTP request failed';
476
+ if (errorBody) {
477
+ try {
478
+ const parsed = typeof errorBody === 'string' ? JSON.parse(errorBody) : errorBody;
479
+ reason = parsed.message || parsed.error || parsed.reason || JSON.stringify(parsed);
480
+ }
481
+ catch {
482
+ reason = errorBody.toString();
483
+ }
484
+ }
485
+ allResponses.failures.push({ ip: trimmedIp, reason, raw: reason });
486
+ }
487
+ }
488
+ }
489
+ if (outputMode === 'validOnly') {
490
+ for (const [ip, data] of Object.entries(allResponses.results)) {
491
+ out.push({ json: { ip, response: data } });
492
+ }
493
+ for (const f of allResponses.failures) {
494
+ out.push({ json: { ip: f.ip, response: f } });
495
+ }
496
+ }
497
+ else {
498
+ out.push({ json: allResponses });
499
+ }
500
+ continue;
501
+ }
502
+ if (outputMode === 'validOnly') {
503
+ const results = (resp === null || resp === void 0 ? void 0 : resp.results) || {};
504
+ const ips = Array.isArray(resp === null || resp === void 0 ? void 0 : resp.ips) ? resp.ips : Object.keys(results);
505
+ for (const ip of ips) {
506
+ if (results[ip]) {
507
+ out.push({ json: { ip, response: results[ip] } });
508
+ }
509
+ }
510
+ const failures = Array.isArray(resp === null || resp === void 0 ? void 0 : resp.failures) ? resp.failures : [];
511
+ for (const f of failures) {
512
+ out.push({ json: { ip: f.ip, response: f } });
513
+ }
514
+ }
515
+ else {
516
+ out.push({ json: resp });
517
+ }
518
+ }
519
+ catch (error) {
520
+ const addresses = (body === null || body === void 0 ? void 0 : body.addresses) || [];
521
+ if (addresses.length > 0) {
522
+ const allResponses = { results: {}, failures: [] };
523
+ const ipv4FormatRegex = /^\d{1,3}(\.\d{1,3}){3}$/;
524
+ for (const ip of addresses) {
525
+ const trimmedIp = ip.trim();
526
+ if (!ipv4FormatRegex.test(trimmedIp)) {
527
+ allResponses.failures.push({
528
+ ip: trimmedIp,
529
+ reason: 'Invalid input – not an IPv4 address format',
530
+ raw: 'Invalid input – not an IPv4 address format',
531
+ });
532
+ continue;
533
+ }
534
+ const singleReq = { ...requestOptions, body: { ...body, addresses: [trimmedIp] } };
535
+ try {
536
+ const singleResp = await this.helpers.httpRequestWithAuthentication.call(this, 'radwareApi', singleReq);
537
+ const parsed = parseSingleIpResponse(singleResp);
538
+ if (parsed.response.reason || parsed.response.error) {
539
+ allResponses.failures.push({ ip: trimmedIp, ...parsed.response });
540
+ }
541
+ else {
542
+ allResponses.results[trimmedIp] = parsed.response;
543
+ }
544
+ }
545
+ catch (e) {
546
+ const errorBody = (_d = e.response) === null || _d === void 0 ? void 0 : _d.body;
547
+ let reason = (errorBody === null || errorBody === void 0 ? void 0 : errorBody.toString()) || e.message || 'HTTP request failed';
548
+ if (errorBody) {
549
+ try {
550
+ const parsed = typeof errorBody === 'string' ? JSON.parse(errorBody) : errorBody;
551
+ reason = parsed.message || parsed.error || parsed.reason || JSON.stringify(parsed);
552
+ }
553
+ catch { }
554
+ }
555
+ allResponses.failures.push({ ip: trimmedIp, reason, raw: reason });
556
+ }
557
+ }
558
+ if (outputMode === 'validOnly') {
559
+ for (const [ip, data] of Object.entries(allResponses.results)) {
560
+ out.push({ json: { ip, response: data } });
561
+ }
562
+ for (const f of allResponses.failures) {
563
+ out.push({ json: { ip: f.ip, response: f } });
564
+ }
565
+ }
566
+ else {
567
+ out.push({ json: allResponses });
568
+ }
569
+ continue;
570
+ }
571
+ const apiError = ((_e = error.response) === null || _e === void 0 ? void 0 : _e.body) || error.error || { error: error.message };
572
+ out.push({ json: apiError });
573
+ }
574
+ }
575
+ return [out];
576
+ }
577
+ }
578
+ exports.Radware = Radware;
579
+ //# sourceMappingURL=Radware.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radware.node.js","sourceRoot":"","sources":["../../../nodes/Radware/Radware.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 140 140" fill="none">
2
+ <defs>
3
+ <clipPath id="clip">
4
+ <rect x="0" y="0" width="140" height="140" />
5
+ </clipPath>
6
+ </defs>
7
+ <g clip-path="url(#clip)" transform="translate(0,21)"> <!-- shift down to roughly center the 0..97 height in 0..140 box -->
8
+ <path d="M105.592 14.1328C105.592 6.32745 112.034 0 119.981 0C127.928 0 134.37 6.32745 134.37 14.1328C134.37 21.9381 127.928 28.2656 119.981 28.2656C112.041 28.2724 105.599 21.9563 105.592 14.1578C105.592 14.1495 105.592 14.1412 105.592 14.1328Z" fill="black"/>
9
+ <path d="M1.60084 14.1328C1.60084 6.32745 8.04313 -3.0672e-06 15.9901 0C23.9371 3.0672e-06 30.3794 6.32747 30.3794 14.1328C30.3794 21.9381 23.9371 28.2656 15.9901 28.2656C15.9859 28.2656 15.9816 28.2656 15.9774 28.2656C8.03744 28.2656 1.60083 21.9439 1.60083 14.1453C1.60083 14.1412 1.60083 14.1369 1.60084 14.1328Z" fill="#D2D2D2"/>
10
+ <path d="M36.1199 14.1328C36.1199 6.32745 42.5622 0 50.5093 0C58.4563 0 64.8985 6.32745 64.8985 14.1328C64.8985 21.9381 58.4563 28.2656 50.5093 28.2656C42.5622 28.2656 36.1199 21.9381 36.1199 14.1328Z" fill="#D2D2D2"/>
11
+ <path d="M105.668 48.5C105.675 40.6946 112.123 34.3728 120.07 34.3796C128.017 34.3867 134.454 40.7197 134.447 48.5249C134.439 56.3254 127.999 62.6452 120.057 62.6452C112.11 62.6452 105.668 56.3177 105.668 48.5125C105.668 48.5084 105.668 48.5041 105.668 48.5Z" fill="#D2D2D2"/>
12
+ <path d="M70.8176 14.1328C70.8176 6.32745 77.2598 0 85.2068 0C93.1539 0 99.596 6.32745 99.596 14.1328C99.596 21.9381 93.1539 28.2656 85.2068 28.2656C77.2627 28.2586 70.8244 21.9352 70.8176 14.1328Z" fill="#B4121B"/>
13
+ <path d="M70.8176 48.5C70.8244 40.6946 77.2726 34.3728 85.2196 34.3796C93.1667 34.3867 99.603 40.7197 99.596 48.5249C99.589 56.3254 93.1487 62.6452 85.2068 62.6452C77.2577 62.6384 70.8176 56.3072 70.8176 48.5Z" fill="#FAAF3F"/>
14
+ <path d="M36.5027 82.8797C36.4955 75.0745 42.9322 68.7414 50.8791 68.7344C58.8261 68.7276 65.2741 75.0493 65.2811 82.8547C65.2883 90.6601 58.8517 96.9932 50.9047 97C50.9005 97 50.896 97 50.8919 97C42.9518 97.0068 36.5097 90.6906 36.5027 82.8923C36.5027 82.8881 36.5027 82.8838 36.5027 82.8797Z" fill="#D2D2D2"/>
15
+ <path d="M70.8176 82.8172C70.8104 75.0118 77.247 68.6787 85.1938 68.6719C93.1411 68.6649 99.589 74.9868 99.596 82.792C99.603 90.5974 93.1667 96.9305 85.2196 96.9373C85.2153 96.9373 85.211 96.9373 85.2068 96.9373C77.2647 96.9373 70.8244 90.6176 70.8176 82.8172Z" fill="#00853F"/>
16
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M200.168 37.7502V28.6165H186.046C168.57 28.6165 163.71 27.5765 163.71 45.2551V96.4738H174.285V37.8003L200.168 37.7502Z" fill="black"/>
17
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M217.25 28.2782V38.1386C242.762 38.1386 247.315 39.2912 247.315 52.2713H228.181C213.574 52.2713 205.219 54.965 205.219 74.548C205.153 77.7779 205.531 81.0018 206.341 84.1327C209.186 94.1559 217.159 96.0228 227.657 96.0228C235.084 96.0228 243.717 95.7347 247.099 87.6408V96.2734H257.929V51.1688C257.877 27.8271 241.116 28.2782 217.25 28.2782ZM242.89 84.1327C239.637 86.5509 234.777 86.6386 229.954 86.6386C224.621 86.6386 220.922 86.438 218.663 84.1327C216.839 82.2533 215.975 78.9706 215.975 73.2575C215.975 62.4323 219.992 61.593 230.005 61.6681C237.456 61.6681 246.845 61.6681 246.845 61.6681V74.1972C246.845 79.3842 245.312 82.4162 242.927 84.2204L242.89 84.1327Z" fill="black"/>
18
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M316.469 3.68359V28.2782H295.803C272.945 28.2782 270.763 42.3608 270.763 62.3446C270.763 70.9772 271.171 78.432 273.44 84.1327C276.465 91.7629 282.792 96.2358 295.817 96.2358C314.363 96.2358 316.481 86.651 316.481 86.651V96.2734H327.095V3.68359H316.469ZM310.806 84.1327C308.255 85.799 304.681 86.4256 299.619 86.4256C294.555 86.4256 290.573 86.0246 287.895 84.1327C283.928 81.3387 282.447 75.2871 282.447 62.5576C282.447 41.0201 285.674 38.552 299.619 38.552C309.133 38.552 316.494 38.4517 316.481 38.552C316.481 42.3859 316.481 56.4559 316.481 62.5326C316.481 74.7233 315.396 81.1131 310.843 84.1201L310.806 84.1327Z" fill="black"/>
19
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M422.743 28.2782H412.587L401.287 75.9888L385.111 28.2782H376.346L360.593 75.9888L348.463 28.2782H337.567L354.545 96.2733H364.331L380.428 45.0295L396.643 96.2733H406.465L422.743 28.2782Z" fill="black"/>
20
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M437.693 28.2782V38.1386C463.206 38.1386 467.761 39.2912 467.761 52.2713H448.625C434.032 52.2713 425.664 54.965 425.664 74.548C425.6 77.7783 425.982 81.0025 426.799 84.1327C429.631 94.1559 437.603 96.0228 448.115 96.0228C455.527 96.0228 464.175 95.7347 467.542 87.6408V96.2734H478.399V51.1688C478.335 27.8271 461.559 28.2782 437.693 28.2782ZM463.383 84.1327C460.132 86.5509 455.272 86.6386 450.451 86.6386C445.13 86.6386 441.417 86.438 439.16 84.1327C437.336 82.2533 436.456 78.9706 436.456 73.2575C436.456 62.4323 440.487 61.593 450.488 61.6681C457.937 61.6681 467.338 61.6681 467.338 61.6681V74.1972C467.338 79.3842 465.821 82.4162 463.424 84.2204L463.383 84.1327Z" fill="black"/>
21
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M526.148 37.7502V28.6165H512.025C494.56 28.6165 489.7 27.5765 489.7 45.2551V96.4738H500.264V37.8003L526.148 37.7502Z" fill="black"/>
22
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M560.424 27.2632C532.461 27.2632 523.431 63.9985 536.9 84.1326C542.142 91.9884 550.779 97.3133 563.062 96.975C571.345 96.7594 579.489 94.8565 586.982 91.387C586.982 91.387 586.982 80.4867 586.982 80.4491C584.325 81.9809 581.501 83.2124 578.561 84.12C570.615 86.626 559.632 88.3049 551.774 84.12C545.958 81.0255 541.824 74.786 541.824 63.4221H588.117C588.117 63.4221 593.565 27.2632 560.424 27.2632ZM541.888 53.6996C542.742 47.9112 546.724 36.472 561.022 36.472C575.322 36.472 577.606 47.4726 577.81 53.6996H541.888Z" fill="black"/>
23
+ </g>
24
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,66 @@
1
1
  {
2
2
  "name": "@radware/n8n-nodes-radware",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.8",
4
+ "description": "Radware community node for n8n",
5
+ "license": "MIT",
6
+ "author": {
7
+ "name": "Radware",
8
+ "email": "securityclouds@radware.com"
9
+ },
10
+ "homepage": "https://github.com/Radware/n8n-nodes-radware",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/Radware/n8n-nodes-radware.git"
14
+ },
15
+ "bugs": {
16
+ "url": "https://github.com/Radware/n8n-nodes-radware/issues"
17
+ },
18
+ "keywords": [
19
+ "n8n-community-node-package",
20
+ "n8n",
21
+ "radware",
22
+ "threat-intelligence",
23
+ "ip-insight",
24
+ "security"
25
+ ],
26
+ "scripts": {
27
+ "build": "tsc -p tsconfig.build.json && npm run copy:assets",
28
+ "copy:assets": "mkdir -p dist/nodes/Radware && cp nodes/Radware/radware_v1.svg dist/nodes/Radware/",
29
+ "pack": "npm pack"
30
+ },
31
+ "files": [
32
+ "dist/credentials/**/*",
33
+ "dist/nodes/**/*",
34
+ "dist/index.js",
35
+ "dist/index.d.ts",
36
+ "dist/index.js.map"
37
+ ],
38
+ "n8n": {
39
+ "n8nNodesApiVersion": 1,
40
+ "strict": true,
41
+ "credentials": [
42
+ "dist/credentials/RadwareApi.credentials.js"
43
+ ],
44
+ "nodes": [
45
+ "dist/nodes/Radware/Radware.node.js"
46
+ ]
47
+ },
48
+ "devDependencies": {
49
+ "@n8n/node-cli": "*",
50
+ "@types/node": "^24.7.0",
51
+ "eslint": "9.32.0",
52
+ "n8n-core": "^1.114.0",
53
+ "n8n-workflow": "^1.112.0",
54
+ "prettier": "3.6.2",
55
+ "release-it": "^19.0.4",
56
+ "typescript": "^5.9.2"
57
+ },
58
+ "peerDependencies": {
59
+ "n8n-workflow": "*"
60
+ },
61
+ "main": "dist/index.js",
62
+ "types": "dist/index.d.ts",
63
+ "publishConfig": {
64
+ "access": "public"
65
+ }
66
+ }