rsshub
Version:
Make RSS Great Again!
61 lines (59 loc) • 2.35 kB
JavaScript
import { HeaderGenerator, PRESETS, PRESETS as PRESETS$1 } from "header-generator";
//#region lib/utils/header-generator.ts
/**
* Checks if a generated user agent is valid (doesn't contain unwanted strings)
*
* @param {string} userAgent The user agent string to validate
* @param {string} browser The browser type (used to determine which filters to apply)
* @returns {boolean} True if the user agent is valid, false if it contains unwanted strings
*/
const isValidUserAgent = (userAgent, browser) => {
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;
};
/**
* @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 (!isValidUserAgent(headers["user-agent"], 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 = 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 };