@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 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 (bypasses Cloudflare and similar WAFs)
10
- - **Proxy rotation** — random proxy selection per request with automatic health check
11
- - **Smart error classification** — proxy vs server vs ambiguous errors
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
- - **Country-based proxy selection** — auto-resolved via ipinfo.io
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] }, // 3 retries: wait 5s, 15s, 30s
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
- ## Custom Interceptors
46
+ ## TLS Fingerprinting & Advanced Options
55
47
 
56
- Interceptors let you define per-site response handling. You can add them at the instance level (applies to all matching requests) or at the request level (applies to that single request only).
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
- ### Instance-level interceptor
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
- Matches requests by URL. First matching interceptor takes full ownership — default status handling (429, 503, etc.) is bypassed.
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.addInterceptor({
64
- name: 'example-api',
65
- match: (url) => url.includes('example.com'),
66
- check: (res) => {
67
- if (res.status === 401) return 'skip'; // don't retry auth errors
68
- if (res.body.includes('rate limit')) return 'retry'; // retry with different proxy
69
- if (res.body.includes('blocked')) return 'ban'; // ban this proxy + retry
70
- return null; // use default behavior
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
- No `match` needed — it applies to this specific request. Takes priority over instance-level interceptors.
78
-
79
- ```ts
80
- const res = await client.get('https://special-api.com/data', {
81
- interceptor: {
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
- ### Interceptor priority
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
- | Action | Proxy effect | Retry | Default bypass |
100
- |--------|-------------|-------|----------------|
101
- | `'retry'` | not penalized | yes | yes |
102
- | `'ban'` | fail count +1 | yes | yes |
103
- | `'skip'` | not penalized | no, return response | yes |
104
- | `null` | | — | no, defaults apply |
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
- ## Country-Based Proxy Selection
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
- // Only use a German proxy for this request
112
- const res = await client.get('https://eu-only-api.com/data', {
113
- country: 'DE',
114
- });
115
- ```
102
+ // JSON auto content-type: application/json
103
+ await client.post(url, { body: { key: 'value' } });
116
104
 
117
- ## Force Proxy Mode
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
- By default, if all proxies are banned or unavailable, requests proceed without a proxy. Enable `forceProxy` to make the request wait until a proxy becomes available (ban expires or proxy list is refreshed). This is useful for cron jobs where requests without a proxy are pointless.
120
-
121
- **What happens when `forceProxy: true` and no proxy is available?**
108
+ // Raw string set content-type yourself
109
+ await client.post(url, { body: '<xml/>', headers: { 'content-type': 'application/xml' } });
110
+ ```
122
111
 
123
- | Scenario | Behavior |
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
- You can set it as the instance default or override per-request:
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 default: all requests wait for proxy
132
- const client = new GhostFetch({
133
- proxies: [...],
134
- forceProxy: true,
135
- });
136
-
137
- // Override per-request: this specific endpoint works without proxy
138
- const publicData = await client.get('https://public-api.com/data', {
139
- forceProxy: false,
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
- // Or the other way: instance default is false, but this request needs a proxy
143
- const protectedData = await client.get('https://protected-api.com/data', {
144
- forceProxy: true,
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
- ## Disable Proxy Banning
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
- If your proxy provider handles rotation internally (e.g. BrightData, Oxylabs residential) or you have a small proxy pool you don't want to lose, you can disable banning entirely:
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 client = new GhostFetch({
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
- With `ban: false`, failed proxies are never penalized — they stay in rotation regardless of errors. Retry still works, just without proxy exclusion logic.
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
- ## Proxy Refresh
158
+ ```ts
159
+ const client = new GhostFetch({ proxies: [...], forceProxy: true });
162
160
 
163
- Provide an `onProxyRefresh` callback to fetch a fresh proxy list from your provider. When triggered, all existing bans are cleared and the new proxies go through health check before entering the pool.
161
+ // Override per-request
162
+ await client.get('https://public-api.com', { forceProxy: false });
163
+ ```
164
164
 
165
- | Config | Behavior |
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-only: no interval, call when you need it
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
- ## Error Handling
177
+ ### Disable banning
190
178
 
191
- ghostfetch throws specific error classes so you can handle each scenario precisely:
179
+ ```ts
180
+ const client = new GhostFetch({ proxies: [...], ban: false });
181
+ ```
192
182
 
193
- - **`CloudflareJSChallengeError`** — the target site requires a browser-level JS challenge that CycleTLS can't solve. You'll need puppeteer-extra with stealth plugin for this.
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
  }
@@ -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
- if (this.config.ja3) {
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
- cycleTLSOptions.body = typeof options.body === 'string'
319
- ? options.body
320
- : JSON.stringify(options.body);
321
- if (typeof options.body !== 'string') {
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 = response.body == null ? '' : typeof response.body === 'string' ? response.body : JSON.stringify(response.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 data = typeof res.body === 'string' ? JSON.parse(res.body) : res.body;
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
@@ -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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"}
@@ -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
- if (this.config.ja3) {
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
- cycleTLSOptions.body = typeof options.body === 'string'
313
- ? options.body
314
- : JSON.stringify(options.body);
315
- if (typeof options.body !== 'string') {
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 = response.body == null ? '' : typeof response.body === 'string' ? response.body : JSON.stringify(response.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 data = typeof res.body === 'string' ? JSON.parse(res.body) : res.body;
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;IA4D5B;;;;;OAKG;YACW,kBAAkB;IA6DhC,mEAAmE;IAC7D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB/B"}
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"}
@@ -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"}
@@ -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":"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"}
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.1.2",
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": "^1.0.26",
47
+ "cycletls": "^2.0.5",
48
48
  "form-data": "^4.0.5"
49
49
  },
50
50
  "devDependencies": {