| | |
| | |
| | import { config } from '@/config'; |
| | import logger from '@/utils/logger'; |
| |
|
| | |
| | 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}`); |
| |
|
| | |
| | if (!request.headers.has('user-agent')) { |
| | request.headers.set('user-agent', config.ua); |
| | } |
| |
|
| | |
| | for (const [header, value] of Object.entries(STATIC_BROWSER_HEADERS)) { |
| | if (!request.headers.has(header)) { |
| | request.headers.set(header, value); |
| | } |
| | } |
| |
|
| | |
| | if (!request.headers.get('referer')) { |
| | try { |
| | const urlHandler = new URL(request.url); |
| | request.headers.set('referer', urlHandler.origin); |
| | } catch { |
| | |
| | } |
| | } |
| |
|
| | |
| | if (request.headers.has('x-prefer-proxy')) { |
| | request.headers.delete('x-prefer-proxy'); |
| | } |
| |
|
| | return originalFetch(request); |
| | }; |
| |
|
| | export default wrappedFetch; |
| |
|