| 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', |
| ]); |
|
|