@emircansahin/ghostfetch 0.1.2 → 0.2.0
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 +99 -114
- package/dist/cjs/client.js +61 -11
- package/dist/cjs/client.js.map +1 -1
- package/dist/esm/client.js +61 -11
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types.d.ts +53 -1
- package/dist/types/types.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -6,16 +6,11 @@ Built for backend developers who need to fetch data from sites that aggressively
|
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
|
-
- **CycleTLS** — TLS fingerprint spoofing (
|
|
10
|
-
- **Proxy rotation** — random proxy selection
|
|
11
|
-
- **Smart
|
|
12
|
-
- **Proxy banning** — auto-ban failing proxies with configurable TTL
|
|
13
|
-
- **Custom interceptors** — per-site response handling (`retry`, `ban`, `skip`)
|
|
14
|
-
- **Default status handling** — 429/503 auto-retry, 407 proxy ban
|
|
9
|
+
- **CycleTLS** — TLS fingerprint spoofing (JA3, JA4R, HTTP/2, QUIC)
|
|
10
|
+
- **Proxy rotation** — random proxy selection with health check, banning, and country filtering
|
|
11
|
+
- **Smart retry** — auto-retry on 429/503, custom interceptors for per-site logic
|
|
15
12
|
- **Cloudflare detection** — JS challenge detection with descriptive errors
|
|
16
|
-
- **
|
|
17
|
-
- **forceProxy mode** — wait for available proxy instead of proceeding without one
|
|
18
|
-
- **Health check on init** — dead proxies are discarded before any request
|
|
13
|
+
- **Protocol control** — force HTTP/1.1 or HTTP/3, disable redirects, header ordering
|
|
19
14
|
|
|
20
15
|
## Install
|
|
21
16
|
|
|
@@ -36,163 +31,156 @@ const client = new GhostFetch({
|
|
|
36
31
|
'http://user:pass@host:8002',
|
|
37
32
|
],
|
|
38
33
|
timeout: 30000,
|
|
39
|
-
retry: { delays: [5000, 15000, 30000] },
|
|
34
|
+
retry: { delays: [5000, 15000, 30000] },
|
|
40
35
|
ban: { maxFailures: 3, duration: 60 * 60 * 1000 },
|
|
41
36
|
// ban: false — disable proxy banning entirely
|
|
42
37
|
});
|
|
43
38
|
|
|
44
|
-
// Wait for health check to complete
|
|
45
39
|
const health = await client.ready();
|
|
46
|
-
console.log(health);
|
|
47
40
|
// { total: 2, healthy: 2, dead: 0, countries: { US: 1, DE: 1 }, proxies: { ... } }
|
|
48
41
|
|
|
49
|
-
// Make requests
|
|
50
42
|
const res = await client.get('https://api.example.com/data');
|
|
51
43
|
console.log(res.status, res.body);
|
|
52
44
|
```
|
|
53
45
|
|
|
54
|
-
##
|
|
46
|
+
## TLS Fingerprinting & Advanced Options
|
|
55
47
|
|
|
56
|
-
|
|
48
|
+
All fingerprint options are **config-level only** — they define the client identity and apply to every request. Other options can be set at config level (default) and overridden per-request.
|
|
57
49
|
|
|
58
|
-
|
|
50
|
+
**Getting your fingerprint:** Open your browser and visit [`https://tls.peet.ws/api/all`](https://tls.peet.ws/api/all). The JSON response contains everything you need:
|
|
59
51
|
|
|
60
|
-
|
|
52
|
+
| peet.ws field | GhostFetch option |
|
|
53
|
+
|---|---|
|
|
54
|
+
| `tls.ja3` | `ja3` |
|
|
55
|
+
| `tls.ja4_r` | `ja4r` |
|
|
56
|
+
| `http2.akamai_fingerprint` | `http2Fingerprint` |
|
|
57
|
+
| `user_agent` | `userAgent` |
|
|
58
|
+
| `http2.sent_frames[2].headers` | `headerOrder` (exclude pseudo-headers like `:method`, `:path`) |
|
|
61
59
|
|
|
62
60
|
```ts
|
|
63
|
-
client
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
61
|
+
const client = new GhostFetch({
|
|
62
|
+
// Copy these from tls.peet.ws (use the same browser for all values)
|
|
63
|
+
ja3: '771,4865-4866-4867-...',
|
|
64
|
+
ja4r: 't13d1516h2_002f,0035,...',
|
|
65
|
+
http2Fingerprint: '1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p',
|
|
66
|
+
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...',
|
|
67
|
+
headerOrder: ['upgrade-insecure-requests', 'user-agent', 'accept', 'accept-encoding', 'accept-language'],
|
|
68
|
+
|
|
69
|
+
// Protocol & behavior (config default, overridable per-request)
|
|
70
|
+
disableRedirect: false,
|
|
71
|
+
insecureSkipVerify: false,
|
|
72
|
+
cookies: { session: 'abc123' },
|
|
72
73
|
});
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Request-level interceptor
|
|
76
74
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
check: (res) => {
|
|
83
|
-
if (res.status === 401) return 'skip';
|
|
84
|
-
if (res.status === 200 && res.body.includes('error')) return 'retry';
|
|
85
|
-
return null;
|
|
86
|
-
},
|
|
87
|
-
},
|
|
75
|
+
// Per-request override
|
|
76
|
+
await client.get('https://example.com', {
|
|
77
|
+
disableRedirect: true,
|
|
78
|
+
cookies: [{ name: 'token', value: 'xyz', domain: '.example.com' }],
|
|
79
|
+
serverName: 'cdn.example.com',
|
|
88
80
|
});
|
|
89
81
|
```
|
|
90
82
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
1. **Request-level interceptor** — checked first, if it returns non-null action, it wins
|
|
94
|
-
2. **Instance-level interceptors** — checked next, first `match` takes ownership
|
|
95
|
-
3. **Default status handling** — only runs if no interceptor claimed the response
|
|
96
|
-
|
|
97
|
-
### Actions
|
|
83
|
+
> **Important:** All fingerprint values (`ja3`, `ja4r`, `http2Fingerprint`, `userAgent`) must come from the same browser. Mixing Chrome JA3 with Firefox User-Agent is a common detection vector.
|
|
98
84
|
|
|
99
|
-
|
|
|
100
|
-
|
|
101
|
-
| `
|
|
102
|
-
| `
|
|
103
|
-
| `
|
|
104
|
-
| `
|
|
85
|
+
| Option | Config | Per-request | Default | What it does |
|
|
86
|
+
|--------|:------:|:-----------:|---------|-------------|
|
|
87
|
+
| `ja3` / `ja4r` | yes | — | auto | TLS ClientHello fingerprint |
|
|
88
|
+
| `http2Fingerprint` | yes | — | auto | HTTP/2 SETTINGS frame fingerprint |
|
|
89
|
+
| `quicFingerprint` | yes | — | auto | QUIC transport parameters fingerprint |
|
|
90
|
+
| `disableGrease` | yes | — | `false` | Disable random GREASE values |
|
|
91
|
+
| `headerOrder` | yes | yes | auto | Control header send order |
|
|
92
|
+
| `orderAsProvided` | yes | yes | `false` | Send headers in provided order |
|
|
93
|
+
| `forceHTTP1` / `forceHTTP3` | yes | yes | `false` | Force protocol version |
|
|
94
|
+
| `disableRedirect` | yes | yes | `false` | Return 3xx instead of following |
|
|
95
|
+
| `insecureSkipVerify` | yes | yes | `false` | Skip TLS cert validation |
|
|
96
|
+
| `serverName` | yes | yes | from URL | Override TLS SNI hostname |
|
|
97
|
+
| `cookies` | yes | yes | none | Send cookies (per-request replaces config) |
|
|
105
98
|
|
|
106
|
-
##
|
|
107
|
-
|
|
108
|
-
All proxies are automatically resolved via ipinfo.io on init. This gives you country-level control over which proxy handles which request — useful when certain APIs only accept traffic from specific regions.
|
|
99
|
+
## Request Body
|
|
109
100
|
|
|
110
101
|
```ts
|
|
111
|
-
//
|
|
112
|
-
|
|
113
|
-
country: 'DE',
|
|
114
|
-
});
|
|
115
|
-
```
|
|
102
|
+
// JSON — auto content-type: application/json
|
|
103
|
+
await client.post(url, { body: { key: 'value' } });
|
|
116
104
|
|
|
117
|
-
|
|
105
|
+
// Form — auto content-type: application/x-www-form-urlencoded
|
|
106
|
+
await client.post(url, { body: new URLSearchParams({ user: 'foo', pass: 'bar' }) });
|
|
118
107
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
108
|
+
// Raw string — set content-type yourself
|
|
109
|
+
await client.post(url, { body: '<xml/>', headers: { 'content-type': 'application/xml' } });
|
|
110
|
+
```
|
|
122
111
|
|
|
123
|
-
|
|
124
|
-
|----------|----------|
|
|
125
|
-
| Proxy list is empty (none configured) | Throws `NoProxyAvailableError` immediately — nothing to wait for |
|
|
126
|
-
| Proxies exist but all banned | Waits until a ban expires or `onProxyRefresh` provides fresh proxies |
|
|
112
|
+
## Custom Interceptors
|
|
127
113
|
|
|
128
|
-
|
|
114
|
+
Define per-site response handling. Instance-level interceptors match by URL; request-level interceptors apply to that single request and take priority.
|
|
129
115
|
|
|
130
116
|
```ts
|
|
131
|
-
// Instance
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
117
|
+
// Instance-level
|
|
118
|
+
client.addInterceptor({
|
|
119
|
+
name: 'example-api',
|
|
120
|
+
match: (url) => url.includes('example.com'),
|
|
121
|
+
check: (res) => {
|
|
122
|
+
if (res.status === 401) return 'skip'; // don't retry
|
|
123
|
+
if (res.body.includes('rate limit')) return 'retry'; // retry, proxy is fine
|
|
124
|
+
if (res.body.includes('blocked')) return 'ban'; // retry + penalize proxy
|
|
125
|
+
return null; // default behavior
|
|
126
|
+
},
|
|
140
127
|
});
|
|
141
128
|
|
|
142
|
-
//
|
|
143
|
-
|
|
144
|
-
|
|
129
|
+
// Request-level (no match needed, takes priority)
|
|
130
|
+
await client.get('https://special-api.com/data', {
|
|
131
|
+
interceptor: {
|
|
132
|
+
check: (res) => res.status === 401 ? 'skip' : null,
|
|
133
|
+
},
|
|
145
134
|
});
|
|
146
135
|
```
|
|
147
136
|
|
|
148
|
-
|
|
137
|
+
| Action | Proxy effect | Retry? |
|
|
138
|
+
|--------|-------------|--------|
|
|
139
|
+
| `'retry'` | not penalized | yes |
|
|
140
|
+
| `'ban'` | fail count +1 | yes |
|
|
141
|
+
| `'skip'` | not penalized | no, returns response |
|
|
142
|
+
| `null` | — | falls through to defaults |
|
|
143
|
+
|
|
144
|
+
## Proxy Options
|
|
149
145
|
|
|
150
|
-
|
|
146
|
+
### Country selection
|
|
147
|
+
|
|
148
|
+
Proxies are auto-resolved via ipinfo.io on init. Request a specific country:
|
|
151
149
|
|
|
152
150
|
```ts
|
|
153
|
-
const
|
|
154
|
-
proxies: [...],
|
|
155
|
-
ban: false, // no proxy will ever be banned
|
|
156
|
-
});
|
|
151
|
+
const res = await client.get('https://eu-only-api.com/data', { country: 'DE' });
|
|
157
152
|
```
|
|
158
153
|
|
|
159
|
-
|
|
154
|
+
### Force proxy mode
|
|
155
|
+
|
|
156
|
+
By default, if all proxies are banned, requests proceed without one. Set `forceProxy: true` to wait until a proxy becomes available.
|
|
160
157
|
|
|
161
|
-
|
|
158
|
+
```ts
|
|
159
|
+
const client = new GhostFetch({ proxies: [...], forceProxy: true });
|
|
162
160
|
|
|
163
|
-
|
|
161
|
+
// Override per-request
|
|
162
|
+
await client.get('https://public-api.com', { forceProxy: false });
|
|
163
|
+
```
|
|
164
164
|
|
|
165
|
-
|
|
166
|
-
|--------|----------|
|
|
167
|
-
| `onProxyRefresh` only | No automatic refresh — call `client.refreshProxies()` manually |
|
|
168
|
-
| `onProxyRefresh` + `proxyRefreshInterval` | Auto-refresh at the given interval |
|
|
169
|
-
| Neither | No refresh capability — initial proxy list is used for the lifetime |
|
|
165
|
+
### Proxy refresh
|
|
170
166
|
|
|
171
167
|
```ts
|
|
172
|
-
// Auto-refresh every hour
|
|
173
168
|
const client = new GhostFetch({
|
|
174
169
|
proxies: [...],
|
|
175
170
|
proxyRefreshInterval: 60 * 60 * 1000,
|
|
176
|
-
onProxyRefresh: async () =>
|
|
177
|
-
return ['http://user:pass@newhost:8001', ...];
|
|
178
|
-
},
|
|
171
|
+
onProxyRefresh: async () => ['http://user:pass@newhost:8001'],
|
|
179
172
|
});
|
|
180
173
|
|
|
181
|
-
// Or manual
|
|
182
|
-
const client2 = new GhostFetch({
|
|
183
|
-
proxies: [...],
|
|
184
|
-
onProxyRefresh: async () => fetchFromProvider(),
|
|
185
|
-
});
|
|
186
|
-
await client2.refreshProxies(); // triggers onProxyRefresh → health check → pool updated
|
|
174
|
+
// Or manual: await client.refreshProxies()
|
|
187
175
|
```
|
|
188
176
|
|
|
189
|
-
|
|
177
|
+
### Disable banning
|
|
190
178
|
|
|
191
|
-
|
|
179
|
+
```ts
|
|
180
|
+
const client = new GhostFetch({ proxies: [...], ban: false });
|
|
181
|
+
```
|
|
192
182
|
|
|
193
|
-
|
|
194
|
-
- **`NoProxyAvailableError`** — all proxies are banned and `forceProxy` is not enabled, or the proxy list is empty.
|
|
195
|
-
- **`MaxRetriesExceededError`** — all retry attempts failed. Contains `.attempts` count and `.lastError` with the final error details.
|
|
183
|
+
## Error Handling
|
|
196
184
|
|
|
197
185
|
```ts
|
|
198
186
|
import {
|
|
@@ -207,9 +195,6 @@ try {
|
|
|
207
195
|
if (err instanceof CloudflareJSChallengeError) {
|
|
208
196
|
// Needs headless browser (puppeteer-extra with stealth plugin)
|
|
209
197
|
}
|
|
210
|
-
if (err instanceof NoProxyAvailableError) {
|
|
211
|
-
// All proxies banned or list empty
|
|
212
|
-
}
|
|
213
198
|
if (err instanceof MaxRetriesExceededError) {
|
|
214
199
|
console.log(err.attempts, err.lastError);
|
|
215
200
|
}
|
package/dist/cjs/client.js
CHANGED
|
@@ -303,22 +303,60 @@ class GhostFetch {
|
|
|
303
303
|
const cycleTLSOptions = {
|
|
304
304
|
headers,
|
|
305
305
|
timeout,
|
|
306
|
-
disableRedirect: false,
|
|
306
|
+
disableRedirect: options?.disableRedirect ?? this.config.disableRedirect ?? false,
|
|
307
307
|
};
|
|
308
308
|
if (proxy) {
|
|
309
309
|
cycleTLSOptions.proxy = proxy;
|
|
310
310
|
}
|
|
311
|
-
|
|
311
|
+
// Client identity fingerprints (config-only)
|
|
312
|
+
if (this.config.ja3)
|
|
312
313
|
cycleTLSOptions.ja3 = this.config.ja3;
|
|
313
|
-
|
|
314
|
-
if (this.config.userAgent) {
|
|
314
|
+
if (this.config.userAgent)
|
|
315
315
|
cycleTLSOptions.userAgent = this.config.userAgent;
|
|
316
|
-
|
|
316
|
+
if (this.config.ja4r)
|
|
317
|
+
cycleTLSOptions.ja4r = this.config.ja4r;
|
|
318
|
+
if (this.config.http2Fingerprint)
|
|
319
|
+
cycleTLSOptions.http2Fingerprint = this.config.http2Fingerprint;
|
|
320
|
+
if (this.config.quicFingerprint)
|
|
321
|
+
cycleTLSOptions.quicFingerprint = this.config.quicFingerprint;
|
|
322
|
+
if (this.config.disableGrease != null)
|
|
323
|
+
cycleTLSOptions.disableGrease = this.config.disableGrease;
|
|
324
|
+
// Per-request overrides (request > config)
|
|
325
|
+
const headerOrder = options?.headerOrder ?? this.config.headerOrder;
|
|
326
|
+
if (headerOrder)
|
|
327
|
+
cycleTLSOptions.headerOrder = headerOrder;
|
|
328
|
+
const orderAsProvided = options?.orderAsProvided ?? this.config.orderAsProvided;
|
|
329
|
+
if (orderAsProvided != null)
|
|
330
|
+
cycleTLSOptions.orderAsProvided = orderAsProvided;
|
|
331
|
+
const insecureSkipVerify = options?.insecureSkipVerify ?? this.config.insecureSkipVerify;
|
|
332
|
+
if (insecureSkipVerify != null)
|
|
333
|
+
cycleTLSOptions.insecureSkipVerify = insecureSkipVerify;
|
|
334
|
+
const forceHTTP1 = options?.forceHTTP1 ?? this.config.forceHTTP1;
|
|
335
|
+
if (forceHTTP1 != null)
|
|
336
|
+
cycleTLSOptions.forceHTTP1 = forceHTTP1;
|
|
337
|
+
const forceHTTP3 = options?.forceHTTP3 ?? this.config.forceHTTP3;
|
|
338
|
+
if (forceHTTP3 != null)
|
|
339
|
+
cycleTLSOptions.forceHTTP3 = forceHTTP3;
|
|
340
|
+
const serverName = options?.serverName ?? this.config.serverName;
|
|
341
|
+
if (serverName)
|
|
342
|
+
cycleTLSOptions.serverName = serverName;
|
|
343
|
+
const cookies = options?.cookies ?? this.config.cookies;
|
|
344
|
+
if (cookies)
|
|
345
|
+
cycleTLSOptions.cookies = cookies;
|
|
346
|
+
// Body handling
|
|
317
347
|
if (options?.body) {
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
348
|
+
if (options.body instanceof URLSearchParams) {
|
|
349
|
+
cycleTLSOptions.body = options.body;
|
|
350
|
+
const hasContentType = Object.keys(headers).some((k) => k.toLowerCase() === 'content-type');
|
|
351
|
+
if (!hasContentType) {
|
|
352
|
+
headers['content-type'] = 'application/x-www-form-urlencoded';
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
else if (typeof options.body === 'string') {
|
|
356
|
+
cycleTLSOptions.body = options.body;
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
cycleTLSOptions.body = JSON.stringify(options.body);
|
|
322
360
|
const hasContentType = Object.keys(headers).some((k) => k.toLowerCase() === 'content-type');
|
|
323
361
|
if (!hasContentType) {
|
|
324
362
|
headers['content-type'] = 'application/json';
|
|
@@ -326,7 +364,7 @@ class GhostFetch {
|
|
|
326
364
|
}
|
|
327
365
|
}
|
|
328
366
|
const response = await client(url, cycleTLSOptions, method.toLowerCase());
|
|
329
|
-
const body =
|
|
367
|
+
const body = decodeResponseData(response.data);
|
|
330
368
|
return {
|
|
331
369
|
status: response.status,
|
|
332
370
|
headers: (response.headers ?? {}),
|
|
@@ -357,7 +395,8 @@ class GhostFetch {
|
|
|
357
395
|
}
|
|
358
396
|
try {
|
|
359
397
|
const res = await client('https://ipinfo.io/json', { proxy, timeout: 10000, headers: {} }, 'get');
|
|
360
|
-
const
|
|
398
|
+
const decoded = decodeResponseData(res.data);
|
|
399
|
+
const data = decoded ? JSON.parse(decoded) : {};
|
|
361
400
|
const country = data.country ?? null;
|
|
362
401
|
if (country) {
|
|
363
402
|
countryEntries.push([proxy, country]);
|
|
@@ -410,4 +449,15 @@ exports.GhostFetch = GhostFetch;
|
|
|
410
449
|
function sleep(ms) {
|
|
411
450
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
412
451
|
}
|
|
452
|
+
/** Decode CycleTLS v2 response data — v2 returns native Buffer objects. */
|
|
453
|
+
function decodeResponseData(data) {
|
|
454
|
+
if (data == null)
|
|
455
|
+
return '';
|
|
456
|
+
if (Buffer.isBuffer(data)) {
|
|
457
|
+
return data.length === 0 ? '' : data.toString('utf-8');
|
|
458
|
+
}
|
|
459
|
+
if (typeof data === 'string')
|
|
460
|
+
return data;
|
|
461
|
+
return JSON.stringify(data);
|
|
462
|
+
}
|
|
413
463
|
//# sourceMappingURL=client.js.map
|
package/dist/cjs/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/client.js
CHANGED
|
@@ -297,22 +297,60 @@ export class GhostFetch {
|
|
|
297
297
|
const cycleTLSOptions = {
|
|
298
298
|
headers,
|
|
299
299
|
timeout,
|
|
300
|
-
disableRedirect: false,
|
|
300
|
+
disableRedirect: options?.disableRedirect ?? this.config.disableRedirect ?? false,
|
|
301
301
|
};
|
|
302
302
|
if (proxy) {
|
|
303
303
|
cycleTLSOptions.proxy = proxy;
|
|
304
304
|
}
|
|
305
|
-
|
|
305
|
+
// Client identity fingerprints (config-only)
|
|
306
|
+
if (this.config.ja3)
|
|
306
307
|
cycleTLSOptions.ja3 = this.config.ja3;
|
|
307
|
-
|
|
308
|
-
if (this.config.userAgent) {
|
|
308
|
+
if (this.config.userAgent)
|
|
309
309
|
cycleTLSOptions.userAgent = this.config.userAgent;
|
|
310
|
-
|
|
310
|
+
if (this.config.ja4r)
|
|
311
|
+
cycleTLSOptions.ja4r = this.config.ja4r;
|
|
312
|
+
if (this.config.http2Fingerprint)
|
|
313
|
+
cycleTLSOptions.http2Fingerprint = this.config.http2Fingerprint;
|
|
314
|
+
if (this.config.quicFingerprint)
|
|
315
|
+
cycleTLSOptions.quicFingerprint = this.config.quicFingerprint;
|
|
316
|
+
if (this.config.disableGrease != null)
|
|
317
|
+
cycleTLSOptions.disableGrease = this.config.disableGrease;
|
|
318
|
+
// Per-request overrides (request > config)
|
|
319
|
+
const headerOrder = options?.headerOrder ?? this.config.headerOrder;
|
|
320
|
+
if (headerOrder)
|
|
321
|
+
cycleTLSOptions.headerOrder = headerOrder;
|
|
322
|
+
const orderAsProvided = options?.orderAsProvided ?? this.config.orderAsProvided;
|
|
323
|
+
if (orderAsProvided != null)
|
|
324
|
+
cycleTLSOptions.orderAsProvided = orderAsProvided;
|
|
325
|
+
const insecureSkipVerify = options?.insecureSkipVerify ?? this.config.insecureSkipVerify;
|
|
326
|
+
if (insecureSkipVerify != null)
|
|
327
|
+
cycleTLSOptions.insecureSkipVerify = insecureSkipVerify;
|
|
328
|
+
const forceHTTP1 = options?.forceHTTP1 ?? this.config.forceHTTP1;
|
|
329
|
+
if (forceHTTP1 != null)
|
|
330
|
+
cycleTLSOptions.forceHTTP1 = forceHTTP1;
|
|
331
|
+
const forceHTTP3 = options?.forceHTTP3 ?? this.config.forceHTTP3;
|
|
332
|
+
if (forceHTTP3 != null)
|
|
333
|
+
cycleTLSOptions.forceHTTP3 = forceHTTP3;
|
|
334
|
+
const serverName = options?.serverName ?? this.config.serverName;
|
|
335
|
+
if (serverName)
|
|
336
|
+
cycleTLSOptions.serverName = serverName;
|
|
337
|
+
const cookies = options?.cookies ?? this.config.cookies;
|
|
338
|
+
if (cookies)
|
|
339
|
+
cycleTLSOptions.cookies = cookies;
|
|
340
|
+
// Body handling
|
|
311
341
|
if (options?.body) {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
342
|
+
if (options.body instanceof URLSearchParams) {
|
|
343
|
+
cycleTLSOptions.body = options.body;
|
|
344
|
+
const hasContentType = Object.keys(headers).some((k) => k.toLowerCase() === 'content-type');
|
|
345
|
+
if (!hasContentType) {
|
|
346
|
+
headers['content-type'] = 'application/x-www-form-urlencoded';
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
else if (typeof options.body === 'string') {
|
|
350
|
+
cycleTLSOptions.body = options.body;
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
cycleTLSOptions.body = JSON.stringify(options.body);
|
|
316
354
|
const hasContentType = Object.keys(headers).some((k) => k.toLowerCase() === 'content-type');
|
|
317
355
|
if (!hasContentType) {
|
|
318
356
|
headers['content-type'] = 'application/json';
|
|
@@ -320,7 +358,7 @@ export class GhostFetch {
|
|
|
320
358
|
}
|
|
321
359
|
}
|
|
322
360
|
const response = await client(url, cycleTLSOptions, method.toLowerCase());
|
|
323
|
-
const body =
|
|
361
|
+
const body = decodeResponseData(response.data);
|
|
324
362
|
return {
|
|
325
363
|
status: response.status,
|
|
326
364
|
headers: (response.headers ?? {}),
|
|
@@ -351,7 +389,8 @@ export class GhostFetch {
|
|
|
351
389
|
}
|
|
352
390
|
try {
|
|
353
391
|
const res = await client('https://ipinfo.io/json', { proxy, timeout: 10000, headers: {} }, 'get');
|
|
354
|
-
const
|
|
392
|
+
const decoded = decodeResponseData(res.data);
|
|
393
|
+
const data = decoded ? JSON.parse(decoded) : {};
|
|
355
394
|
const country = data.country ?? null;
|
|
356
395
|
if (country) {
|
|
357
396
|
countryEntries.push([proxy, country]);
|
|
@@ -403,3 +442,14 @@ export class GhostFetch {
|
|
|
403
442
|
function sleep(ms) {
|
|
404
443
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
405
444
|
}
|
|
445
|
+
/** Decode CycleTLS v2 response data — v2 returns native Buffer objects. */
|
|
446
|
+
function decodeResponseData(data) {
|
|
447
|
+
if (data == null)
|
|
448
|
+
return '';
|
|
449
|
+
if (Buffer.isBuffer(data)) {
|
|
450
|
+
return data.length === 0 ? '' : data.toString('utf-8');
|
|
451
|
+
}
|
|
452
|
+
if (typeof data === 'string')
|
|
453
|
+
return data;
|
|
454
|
+
return JSON.stringify(data);
|
|
455
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,cAAc,EAEd,UAAU,EACX,MAAM,SAAS,CAAC;AAQjB,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAA2C;gBAEzD,MAAM,GAAE,gBAAqB;IAoBzC;;;;;;;;;;;;;OAaG;IACG,KAAK,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAKzC,yCAAyC;YAC3B,YAAY;IAa1B,iEAAiE;IACjE,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAI9C,qCAAqC;IACrC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrC,uEAAuE;IACjE,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBrC,+BAA+B;IAC/B,IAAI,KAAK;;;;MAMR;IAIK,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIvE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIxE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIvE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAI1E,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIzE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAMxE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoHrG;;;;OAIG;YACW,SAAS;IA+BvB,6HAA6H;IAC7H,OAAO,CAAC,uBAAuB;YAqCjB,cAAc;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,cAAc,EAEd,UAAU,EACX,MAAM,SAAS,CAAC;AAQjB,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAA2C;gBAEzD,MAAM,GAAE,gBAAqB;IAoBzC;;;;;;;;;;;;;OAaG;IACG,KAAK,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAKzC,yCAAyC;YAC3B,YAAY;IAa1B,iEAAiE;IACjE,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAI9C,qCAAqC;IACrC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrC,uEAAuE;IACjE,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBrC,+BAA+B;IAC/B,IAAI,KAAK;;;;MAMR;IAIK,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIvE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIxE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIvE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAI1E,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIzE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAMxE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoHrG;;;;OAIG;YACW,SAAS;IA+BvB,6HAA6H;IAC7H,OAAO,CAAC,uBAAuB;YAqCjB,cAAc;IA0F5B;;;;;OAKG;YACW,kBAAkB;IA8DhC,mEAAmE;IAC7D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB/B"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { GhostFetch } from './client';
|
|
2
2
|
export { ProxyManager } from './proxy-manager';
|
|
3
3
|
export { GhostFetchRequestError, CloudflareJSChallengeError, NoProxyAvailableError, MaxRetriesExceededError, } from './errors';
|
|
4
|
-
export type { GhostFetchConfig, GhostFetchResponse, GhostFetchError, HealthCheckResult, Interceptor, InterceptorAction, RequestInterceptor, RequestOptions, RetryConfig, BanConfig, ErrorType, HttpMethod, } from './types';
|
|
4
|
+
export type { Cookie, GhostFetchConfig, GhostFetchResponse, GhostFetchError, HealthCheckResult, Interceptor, InterceptorAction, RequestInterceptor, RequestOptions, RetryConfig, BanConfig, ErrorType, HttpMethod, } from './types';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,SAAS,EACT,SAAS,EACT,UAAU,GACX,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,MAAM,EACN,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,SAAS,EACT,SAAS,EACT,UAAU,GACX,MAAM,SAAS,CAAC"}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
export interface Cookie {
|
|
2
|
+
name: string;
|
|
3
|
+
value: string;
|
|
4
|
+
path?: string;
|
|
5
|
+
domain?: string;
|
|
6
|
+
expires?: string;
|
|
7
|
+
rawExpires?: string;
|
|
8
|
+
maxAge?: number;
|
|
9
|
+
secure?: boolean;
|
|
10
|
+
httpOnly?: boolean;
|
|
11
|
+
sameSite?: string;
|
|
12
|
+
}
|
|
1
13
|
export interface GhostFetchConfig {
|
|
2
14
|
/** List of proxy URLs in format http://user:pass@host:port */
|
|
3
15
|
proxies?: string[];
|
|
@@ -26,6 +38,30 @@ export interface GhostFetchConfig {
|
|
|
26
38
|
ja3?: string;
|
|
27
39
|
/** User-Agent string (optional — CycleTLS picks a realistic default) */
|
|
28
40
|
userAgent?: string;
|
|
41
|
+
/** JA4R fingerprint string (client identity — applied to all requests) */
|
|
42
|
+
ja4r?: string;
|
|
43
|
+
/** HTTP/2 frame settings fingerprint (client identity — applied to all requests) */
|
|
44
|
+
http2Fingerprint?: string;
|
|
45
|
+
/** QUIC fingerprint (client identity — applied to all requests) */
|
|
46
|
+
quicFingerprint?: string;
|
|
47
|
+
/** Disable GREASE (applied to all requests) */
|
|
48
|
+
disableGrease?: boolean;
|
|
49
|
+
/** Default header order for all requests */
|
|
50
|
+
headerOrder?: string[];
|
|
51
|
+
/** Send headers in the order they are provided */
|
|
52
|
+
orderAsProvided?: boolean;
|
|
53
|
+
/** Disable following redirects (default: false) */
|
|
54
|
+
disableRedirect?: boolean;
|
|
55
|
+
/** Skip TLS certificate verification */
|
|
56
|
+
insecureSkipVerify?: boolean;
|
|
57
|
+
/** Force HTTP/1.1 for all requests */
|
|
58
|
+
forceHTTP1?: boolean;
|
|
59
|
+
/** Force HTTP/3 (QUIC) for all requests */
|
|
60
|
+
forceHTTP3?: boolean;
|
|
61
|
+
/** Override TLS SNI server name */
|
|
62
|
+
serverName?: string;
|
|
63
|
+
/** Default cookies for all requests */
|
|
64
|
+
cookies?: Cookie[] | Record<string, string>;
|
|
29
65
|
}
|
|
30
66
|
export interface RetryConfig {
|
|
31
67
|
/**
|
|
@@ -106,7 +142,7 @@ export interface RequestOptions {
|
|
|
106
142
|
/** Override timeout for this request */
|
|
107
143
|
timeout?: number;
|
|
108
144
|
/** Request body (for POST, PUT, PATCH) */
|
|
109
|
-
body?: string | Record<string, unknown
|
|
145
|
+
body?: string | Record<string, unknown> | URLSearchParams;
|
|
110
146
|
/** Force a specific proxy for this request */
|
|
111
147
|
proxy?: string;
|
|
112
148
|
/** Override retry config for this request */
|
|
@@ -126,6 +162,22 @@ export interface RequestOptions {
|
|
|
126
162
|
* Require a proxy from this country (ISO 3166-1 alpha-2, e.g. 'US', 'DE').
|
|
127
163
|
*/
|
|
128
164
|
country?: string;
|
|
165
|
+
/** Override header order for this request */
|
|
166
|
+
headerOrder?: string[];
|
|
167
|
+
/** Send headers in the order they are provided */
|
|
168
|
+
orderAsProvided?: boolean;
|
|
169
|
+
/** Disable following redirects for this request */
|
|
170
|
+
disableRedirect?: boolean;
|
|
171
|
+
/** Skip TLS certificate verification for this request */
|
|
172
|
+
insecureSkipVerify?: boolean;
|
|
173
|
+
/** Force HTTP/1.1 for this request */
|
|
174
|
+
forceHTTP1?: boolean;
|
|
175
|
+
/** Force HTTP/3 (QUIC) for this request */
|
|
176
|
+
forceHTTP3?: boolean;
|
|
177
|
+
/** Override TLS SNI server name for this request */
|
|
178
|
+
serverName?: string;
|
|
179
|
+
/** Cookies for this request (replaces config-level cookies) */
|
|
180
|
+
cookies?: Cookie[] | Record<string, string>;
|
|
129
181
|
}
|
|
130
182
|
export interface HealthCheckResult {
|
|
131
183
|
/** Total proxies that were tested */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB,yEAAyE;IACzE,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IAExB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;IAEpD,wEAAwE;IACxE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@emircansahin/ghostfetch",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Resilient HTTP client with CycleTLS, proxy rotation, smart error classification, and per-site interceptors",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"author": "Emircan Sahin",
|
|
45
45
|
"license": "MIT",
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"cycletls": "^
|
|
47
|
+
"cycletls": "^2.0.5",
|
|
48
48
|
"form-data": "^4.0.5"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|