| | import type { HeaderGeneratorOptions } from 'header-generator'; |
| | import { HeaderGenerator, PRESETS } from 'header-generator'; |
| |
|
| | export { PRESETS } from 'header-generator'; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | const isValidUserAgent = (userAgent: string, browser: string): boolean => { |
| | browser = browser.toLowerCase(); |
| |
|
| | if (browser === 'chrome') { |
| | return !(userAgent.includes('Chrome-Lighthouse') || userAgent.includes('Gener8') || userAgent.includes('HeadlessChrome') || userAgent.includes('SMTBot') || userAgent.includes('Electron') || userAgent.includes('Code')); |
| | } |
| |
|
| | if (browser === 'safari') { |
| | return !userAgent.includes('Applebot'); |
| | } |
| |
|
| | return true; |
| | }; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | const generatorCache = new Map<string, HeaderGenerator>(); |
| |
|
| | export const generateHeaders = (preset: Partial<HeaderGeneratorOptions> = PRESETS.MODERN_MACOS_CHROME) => { |
| | const cacheKey = JSON.stringify(preset); |
| | let generator = generatorCache.get(cacheKey); |
| | if (!generator) { |
| | generator = new HeaderGenerator(preset); |
| | generatorCache.set(cacheKey, generator); |
| | } |
| | let headers = generator.getHeaders(); |
| |
|
| | const userAgent = headers['user-agent']; |
| | let detectedBrowser: string; |
| | if (userAgent.includes('Firefox')) { |
| | detectedBrowser = 'firefox'; |
| | } else if (userAgent.includes('Safari') && !userAgent.includes('Chrome')) { |
| | detectedBrowser = 'safari'; |
| | } else { |
| | detectedBrowser = 'chrome'; |
| | } |
| |
|
| | let attempts = 0; |
| | while (!isValidUserAgent(headers['user-agent'], detectedBrowser) && attempts < 10) { |
| | headers = generator.getHeaders(); |
| | attempts++; |
| | } |
| |
|
| | return headers; |
| | }; |
| |
|
| | |
| | |
| | |
| | export const generatedHeaders = new Set([ |
| | |
| | |
| | |
| | 'sec-ch-ua', |
| | 'sec-ch-ua-mobile', |
| | 'sec-ch-ua-platform', |
| | |
| | |
| | 'upgrade-insecure-requests', |
| | |
| | 'accept', |
| | |
| | 'sec-fetch-site', |
| | 'sec-fetch-mode', |
| | 'sec-fetch-user', |
| | 'sec-fetch-dest', |
| | |
| | 'accept-encoding', |
| | 'accept-language', |
| | |
| | 'priority', |
| | ]); |
| |
|