n8n-nodes-tls-request 1.0.1

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 ADDED
@@ -0,0 +1,48 @@
1
+ # 🌐 TLS Request Node for n8n
2
+
3
+ ![n8n-nodes-tls-request](https://img.shields.io/npm/v/n8n-nodes-tls-request?color=blue&label=npm+version)
4
+ ![License](https://img.shields.io/npm/l/n8n-nodes-tls-request)
5
+
6
+ This node allows you to make HTTP requests with specific TLS Client Hello fingerprints. It allows you to simulate various browser environments (Chrome, Firefox, Safari, iOS, Android) for your requests.
7
+
8
+ It is built on top of the [node-tls-client](https://github.com/Sahil1337/node-tls-client) library, which is a wrapper around [tls-client](https://github.com/bogdanfinn/tls-client).
9
+
10
+ ## ✨ Features
11
+
12
+ - **TLS Fingerprinting**: Choose from a wide range of TLS fingerprints:
13
+ - **Desktop**: Chrome (105-120), Firefox (102-117), Safari (macOS), Opera.
14
+ - **Mobile**: Safari iOS (15.5-16.0), Android (OkHttp 4.9-4.10).
15
+ - **Proxy Support**: Connect via HTTP/SOCKS proxies.
16
+ - **Familiar Interface**: Works similarly to the standard HTTP Request node with automatic JSON parsing.
17
+
18
+ ---
19
+
20
+ ## 🚀 Installation
21
+
22
+ ### Option 1: Install via n8n Interface (Recommended)
23
+ 1. In your n8n instance, go to **Settings** > **Community Nodes**.
24
+ 2. Click **Install**.
25
+ 3. Enter the package name: `n8n-nodes-tls-request`.
26
+ 4. Click **Install**.
27
+
28
+ ### Option 2: CLI Installation
29
+ ```bash
30
+ npm install n8n-nodes-tls-request
31
+ ```
32
+
33
+ ---
34
+
35
+ ## 🛠️ Usage
36
+
37
+ 1. Search for **"TLS Request"** in your n8n workflow editor.
38
+ 2. Add the node to your canvas.
39
+ 3. Configure the **Browser ID**, **URL**, and **Method**.
40
+ 4. (Optional) Add a proxy connection string.
41
+
42
+ ## 🤝 Credits
43
+ This project relies on the excellent work of:
44
+ - [Sahil1337](https://github.com/Sahil1337) (node-tls-client)
45
+ - [Bogdanfinn](https://github.com/bogdanfinn) (tls-client)
46
+
47
+ ## 📄 License
48
+ MIT
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TlsRequest = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const node_tls_client_1 = require("node-tls-client");
6
+ class TlsRequest {
7
+ constructor() {
8
+ this.description = {
9
+ displayName: 'TLS Request',
10
+ name: 'tlsRequest',
11
+ icon: 'fa:globe',
12
+ group: ['transform'],
13
+ version: 1,
14
+ description: 'Make HTTP requests with browser TLS fingerprints (like noble-tls)',
15
+ defaults: {
16
+ name: 'TLS Request',
17
+ },
18
+ inputs: ['main'],
19
+ outputs: ['main'],
20
+ properties: [
21
+ {
22
+ displayName: 'Method',
23
+ name: 'method',
24
+ type: 'options',
25
+ options: [
26
+ { name: 'GET', value: 'GET' },
27
+ { name: 'POST', value: 'POST' },
28
+ { name: 'PUT', value: 'PUT' },
29
+ { name: 'DELETE', value: 'DELETE' },
30
+ { name: 'PATCH', value: 'PATCH' },
31
+ { name: 'HEAD', value: 'HEAD' },
32
+ ],
33
+ default: 'GET',
34
+ },
35
+ {
36
+ displayName: 'URL',
37
+ name: 'url',
38
+ type: 'string',
39
+ default: '',
40
+ placeholder: 'https://example.com',
41
+ required: true,
42
+ },
43
+ {
44
+ displayName: 'Browser ID',
45
+ name: 'browserId',
46
+ type: 'options',
47
+ options: [
48
+ // Chrome
49
+ { name: 'Chrome 120', value: 'chrome_120' },
50
+ { name: 'Chrome 119', value: 'chrome_119' },
51
+ { name: 'Chrome 118', value: 'chrome_118' },
52
+ { name: 'Chrome 117', value: 'chrome_117' },
53
+ { name: 'Chrome 112', value: 'chrome_112' },
54
+ { name: 'Chrome 105', value: 'chrome_105' },
55
+ // Firefox
56
+ { name: 'Firefox 117', value: 'firefox_117' },
57
+ { name: 'Firefox 110', value: 'firefox_110' },
58
+ { name: 'Firefox 102', value: 'firefox_102' },
59
+ // Safari (macOS)
60
+ { name: 'Safari 16.0', value: 'safari_16_0' },
61
+ { name: 'Safari 15.6.1', value: 'safari_15_6_1' },
62
+ { name: 'Safari 15.3', value: 'safari_15_3' },
63
+ // Mobile - iOS
64
+ { name: 'Safari iOS 16.0', value: 'safari_ios_16_0' },
65
+ { name: 'Safari iOS 15.6', value: 'safari_ios_15_6' },
66
+ { name: 'Safari iOS 15.5', value: 'safari_ios_15_5' },
67
+ // Mobile - Android (OkHttp)
68
+ { name: 'Android 13 (OkHttp 4.10)', value: 'okhttp4_android_13' },
69
+ { name: 'Android 12 (OkHttp 4.9)', value: 'okhttp4_android_12' },
70
+ { name: 'Android 11 (OkHttp 4.9)', value: 'okhttp4_android_11' },
71
+ { name: 'Android 10 (OkHttp 4.9)', value: 'okhttp4_android_10' },
72
+ { name: 'Android 9 (OkHttp 4.9)', value: 'okhttp4_android_9' },
73
+ { name: 'Android 8 (OkHttp 4.9)', value: 'okhttp4_android_8' },
74
+ { name: 'Android 7 (OkHttp 4.9)', value: 'okhttp4_android_7' },
75
+ // Opera
76
+ { name: 'Opera 90', value: 'opera_90' },
77
+ { name: 'Opera 89', value: 'opera_89' },
78
+ ],
79
+ default: 'chrome_120',
80
+ description: 'The browser TLS fingerprint to impersonate',
81
+ },
82
+ {
83
+ displayName: 'Proxy',
84
+ name: 'proxy',
85
+ type: 'string',
86
+ default: '',
87
+ placeholder: 'http://user:pass@host:port',
88
+ description: 'Proxy connection string',
89
+ },
90
+ {
91
+ displayName: 'Headers',
92
+ name: 'headers',
93
+ type: 'fixedCollection',
94
+ typeOptions: {
95
+ multipleValues: true,
96
+ },
97
+ placeholder: 'Add Header',
98
+ default: {},
99
+ options: [
100
+ {
101
+ name: 'parameter',
102
+ displayName: 'Header',
103
+ values: [
104
+ {
105
+ displayName: 'Name',
106
+ name: 'name',
107
+ type: 'string',
108
+ default: '',
109
+ },
110
+ {
111
+ displayName: 'Value',
112
+ name: 'value',
113
+ type: 'string',
114
+ default: '',
115
+ },
116
+ ],
117
+ },
118
+ ],
119
+ },
120
+ {
121
+ displayName: 'JSON Body',
122
+ name: 'jsonBody',
123
+ type: 'boolean',
124
+ default: true,
125
+ displayOptions: {
126
+ show: {
127
+ method: ['POST', 'PUT', 'PATCH'],
128
+ },
129
+ },
130
+ description: 'Whether to send the body as JSON',
131
+ },
132
+ {
133
+ displayName: 'Body',
134
+ name: 'body',
135
+ type: 'json',
136
+ default: '{}',
137
+ displayOptions: {
138
+ show: {
139
+ method: ['POST', 'PUT', 'PATCH'],
140
+ jsonBody: [true],
141
+ },
142
+ },
143
+ description: 'The JSON body to send',
144
+ },
145
+ {
146
+ displayName: 'Raw Body',
147
+ name: 'rawBody',
148
+ type: 'string',
149
+ default: '',
150
+ displayOptions: {
151
+ show: {
152
+ method: ['POST', 'PUT', 'PATCH'],
153
+ jsonBody: [false],
154
+ },
155
+ },
156
+ description: 'The raw body to send',
157
+ },
158
+ {
159
+ displayName: 'Follow Redirects',
160
+ name: 'followRedirects',
161
+ type: 'boolean',
162
+ default: true,
163
+ },
164
+ {
165
+ displayName: 'Timeout (Seconds)',
166
+ name: 'timeout',
167
+ type: 'number',
168
+ default: 30,
169
+ },
170
+ ],
171
+ };
172
+ }
173
+ async execute() {
174
+ const items = this.getInputData();
175
+ const returnData = [];
176
+ for (let i = 0; i < items.length; i++) {
177
+ try {
178
+ const method = this.getNodeParameter('method', i);
179
+ const url = this.getNodeParameter('url', i);
180
+ const browserId = this.getNodeParameter('browserId', i);
181
+ const proxy = this.getNodeParameter('proxy', i);
182
+ const timeout = this.getNodeParameter('timeout', i);
183
+ const followRedirects = this.getNodeParameter('followRedirects', i);
184
+ // Handle Headers
185
+ const headerItems = this.getNodeParameter('headers.parameter', i, []);
186
+ const headers = {};
187
+ for (const item of headerItems) {
188
+ headers[item.name] = item.value;
189
+ }
190
+ // Handle Body
191
+ let body = undefined;
192
+ let isJsonBody = false;
193
+ if (['POST', 'PUT', 'PATCH'].includes(method)) {
194
+ isJsonBody = this.getNodeParameter('jsonBody', i);
195
+ if (isJsonBody) {
196
+ const bodyParam = this.getNodeParameter('body', i);
197
+ if (typeof bodyParam === 'string') {
198
+ try {
199
+ body = JSON.parse(bodyParam);
200
+ }
201
+ catch (e) {
202
+ body = bodyParam;
203
+ }
204
+ }
205
+ else {
206
+ body = bodyParam;
207
+ }
208
+ }
209
+ else {
210
+ body = this.getNodeParameter('rawBody', i);
211
+ }
212
+ }
213
+ // Initialize Node TLS Client Session
214
+ const session = new node_tls_client_1.Session({
215
+ sessionId: `n8n-${Math.random().toString(36).substring(7)}`,
216
+ clientIdentifier: browserId,
217
+ timeout: timeout * 1000,
218
+ proxy: proxy || undefined,
219
+ });
220
+ const requestOptions = {
221
+ headers,
222
+ followRedirects,
223
+ };
224
+ // node-tls-client usually expects the body string/object directly based on implementation
225
+ // but common usage with high-level clients suggests passing it in options
226
+ if (body !== undefined && ['POST', 'PUT', 'PATCH'].includes(method)) {
227
+ requestOptions.body = isJsonBody ? JSON.stringify(body) : body;
228
+ }
229
+ // Execute Request
230
+ let response;
231
+ if (method === 'GET') {
232
+ response = await session.get(url, requestOptions);
233
+ }
234
+ else if (method === 'POST') {
235
+ response = await session.post(url, requestOptions);
236
+ }
237
+ else if (method === 'PUT') {
238
+ response = await session.put(url, requestOptions);
239
+ }
240
+ else if (method === 'PATCH') {
241
+ response = await session.patch(url, requestOptions);
242
+ }
243
+ else if (method === 'DELETE') {
244
+ response = await session.delete(url, requestOptions);
245
+ }
246
+ else if (method === 'HEAD') {
247
+ response = await session.head(url, requestOptions);
248
+ }
249
+ else {
250
+ throw new Error(`Method ${method} not implemented yet`);
251
+ }
252
+ const responseData = {
253
+ status: response.status,
254
+ headers: response.headers,
255
+ data: response.body
256
+ };
257
+ // Try to parse JSON response
258
+ if (typeof responseData.data === 'string') {
259
+ try {
260
+ if (responseData.data.trim().startsWith('{') || responseData.data.trim().startsWith('[')) {
261
+ responseData.data = JSON.parse(responseData.data);
262
+ }
263
+ }
264
+ catch (e) {
265
+ // Keep as string
266
+ }
267
+ }
268
+ returnData.push({
269
+ json: responseData,
270
+ });
271
+ }
272
+ catch (error) {
273
+ if (this.continueOnFail()) {
274
+ returnData.push({
275
+ json: {
276
+ error: error.message,
277
+ },
278
+ });
279
+ continue;
280
+ }
281
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), error, { itemIndex: i });
282
+ }
283
+ }
284
+ return [returnData];
285
+ }
286
+ }
287
+ exports.TlsRequest = TlsRequest;
288
+ //# sourceMappingURL=TlsRequest.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TlsRequest.node.js","sourceRoot":"","sources":["../../../nodes/TlsRequest/TlsRequest.node.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "n8n-nodes-tls-request",
3
+ "version": "1.0.1",
4
+ "description": "n8n node for making HTTP requests with custom TLS fingerprints (Chrome, Firefox, Safari) using node-tls-client.",
5
+ "keywords": [
6
+ "n8n-community-node-package"
7
+ ],
8
+ "license": "MIT",
9
+ "author": {
10
+ "name": "Antigravity",
11
+ "email": "antigravity@example.com"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/example/n8n-nodes-tls-request.git"
16
+ },
17
+ "main": "index.js",
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "dev": "tsc --watch",
21
+ "lint": "tslint -p tsconfig.json -c tslint.json",
22
+ "prepublishOnly": "npm run build"
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "n8n": {
28
+ "nodes": [
29
+ "dist/nodes/TlsRequest/TlsRequest.node.js"
30
+ ]
31
+ },
32
+ "dependencies": {
33
+ "node-tls-client": "^2.1.0"
34
+ },
35
+ "devDependencies": {
36
+ "n8n-workflow": "*",
37
+ "typescript": "^5.0.0",
38
+ "@types/node": "^18.0.0"
39
+ }
40
+ }