File size: 1,893 Bytes
bf48b89
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// Worker-compatible fetch wrapper
// Simplified version without proxy, rate limiting, or header-generator
import { config } from '@/config';
import logger from '@/utils/logger';

// Static browser headers (Chrome-like fingerprint)
const STATIC_BROWSER_HEADERS: Record<string, string> = {
    accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8',
    'accept-language': 'en-US,en;q=0.9',
    'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
};

const originalFetch = globalThis.fetch;

const wrappedFetch = (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {
    const request = new Request(input, init);

    logger.debug(`Outgoing request: ${request.method} ${request.url}`);

    // Set User-Agent if not provided
    if (!request.headers.has('user-agent')) {
        request.headers.set('user-agent', config.ua);
    }

    // Set browser headers if not provided
    for (const [header, value] of Object.entries(STATIC_BROWSER_HEADERS)) {
        if (!request.headers.has(header)) {
            request.headers.set(header, value);
        }
    }

    // Set Referer if not provided
    if (!request.headers.get('referer')) {
        try {
            const urlHandler = new URL(request.url);
            request.headers.set('referer', urlHandler.origin);
        } catch {
            // ignore
        }
    }

    // Remove x-prefer-proxy header (not supported in Workers)
    if (request.headers.has('x-prefer-proxy')) {
        request.headers.delete('x-prefer-proxy');
    }

    return originalFetch(request);
};

export default wrappedFetch;