"use strict"; const CHROME_VERSION = "140.0.0.0"; const TARGET_HOSTS = [ "netflix.com", "assets.nflxext.com" ]; function getOperatingSystem() { const ua = globalThis.navigator?.userAgent || ""; const platform = globalThis.navigator?.platform || ""; const userAgentDataPlatform = globalThis.navigator?.userAgentData?.platform || ""; if (/Windows/i.test(ua) || /Win/i.test(platform) || /win/i.test(userAgentDataPlatform)) { return "win"; } if (/Mac/i.test(ua) || /Mac/i.test(platform) || /mac/i.test(userAgentDataPlatform)) { return "mac"; } if (/Linux/i.test(ua) || /Linux/i.test(platform) || /linux/i.test(userAgentDataPlatform)) { return "linux"; } return "linux"; } function getChromeLikeUserAgent() { const os = getOperatingSystem(); switch (os) { case "mac": return `Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${CHROME_VERSION} Safari/537.36`; case "win": return `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${CHROME_VERSION} Safari/537.36`; case "linux": default: return `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${CHROME_VERSION} Safari/537.36`; } } function isTargetHost(url) { try { const hostname = new URL(url).hostname.toLowerCase(); return hostname === "netflix.com" || hostname.endsWith(".netflix.com") || hostname === "assets.nflxext.com" || hostname.endsWith(".nflxext.com"); } catch { return false; } } const browserApi = globalThis.browser || globalThis.chrome; browserApi.webRequest.onBeforeSendHeaders.addListener( (details) => { if (!isTargetHost(details.url)) { return {}; } const requestHeaders = details.requestHeaders ?? []; const userAgentValue = getChromeLikeUserAgent(); let foundUserAgent = false; for (const header of requestHeaders) { if (header.name.toLowerCase() === "user-agent") { header.value = userAgentValue; foundUserAgent = true; break; } } if (!foundUserAgent) { requestHeaders.push({ name: "User-Agent", value: userAgentValue }); } return { requestHeaders }; }, { urls: [ "*://netflix.com/*", "*://*.netflix.com/*", "*://assets.nflxext.com/*", "*://*.nflxext.com/*" ] }, [ "blocking", "requestHeaders" ] );