UNPKG

rsshub

Version:
63 lines (62 loc) 2.49 kB
import { HeaderGenerator, PRESETS, PRESETS as PRESETS$1 } from "header-generator"; //#region lib/utils/header-generator.ts /** * Checks if the generated headers are valid (no unwanted UA strings, required headers present) * * @param {Record<string, string>} headers The generated headers to validate * @param {string} browser The browser type (used to determine which filters to apply) * @returns {boolean} True if the headers are valid */ const isValidHeader = (headers, browser) => { browser = browser.toLowerCase(); const userAgent = headers["user-agent"]; if (browser === "chrome") { if (userAgent.includes("Chrome-Lighthouse") || userAgent.includes("Gener8") || userAgent.includes("HeadlessChrome") || userAgent.includes("SMTBot") || userAgent.includes("Electron") || userAgent.includes("Code")) return false; if (!(headers["sec-ch-ua"] && headers["sec-ch-ua-mobile"] && headers["sec-ch-ua-platform"])) return false; } return !(browser === "safari" && userAgent.includes("Applebot")); }; /** * @param {Partial<HeaderGeneratorOptions>} preset Preset from header-generator package (defaults to PRESETS.MODERN_MACOS_CHROME) * @returns Headers object with user-agent and additional headers */ const generatorCache = /* @__PURE__ */ new Map(); const generateHeaders = (preset = 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; if (userAgent.includes("Firefox")) detectedBrowser = "firefox"; else if (userAgent.includes("Safari") && !userAgent.includes("Chrome")) detectedBrowser = "safari"; else detectedBrowser = "chrome"; let attempts = 0; while (!isValidHeader(headers, detectedBrowser) && attempts < 10) { headers = generator.getHeaders(); attempts++; } return headers; }; /** List of headers to include from header-generator output * excluding headers that are typically set manually or by the environment */ const generatedHeaders = /* @__PURE__ */ 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" ]); //#endregion export { generateHeaders as n, generatedHeaders as r, PRESETS$1 as t };