UNPKG

trainingpeaks-sdk

Version:
206 lines (205 loc) 8.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateConsistentBrowserHeaders = exports.generateRandomBrowserHeaders = exports.generateRandomViewport = exports.getCommonViewportSizes = exports.isMobileUserAgent = exports.parseUserAgent = exports.generateSpecificUserAgent = exports.generateRandomUserAgent = void 0; const generateRandomUserAgent = () => { const browsers = [ { name: 'Chrome', versions: [ '120.0.0.0', '121.0.0.0', '122.0.0.0', '123.0.0.0', '124.0.0.0', ], webkit: '537.36', }, { name: 'Firefox', versions: ['120.0', '121.0', '122.0', '123.0', '124.0'], webkit: '537.36', }, { name: 'Safari', versions: ['17.0', '17.1', '17.2', '17.3', '17.4'], webkit: '605.1.15', }, ]; const os = [ 'Macintosh; Intel Mac OS X 10_15_7', 'Macintosh; Intel Mac OS X 14_0_0', 'Macintosh; Intel Mac OS X 14_1_0', 'Windows NT 10.0; Win64; x64', 'Windows NT 11.0; Win64; x64', 'X11; Linux x86_64', ]; const browser = browsers[Math.floor(Math.random() * browsers.length)]; const version = browser.versions[Math.floor(Math.random() * browser.versions.length)]; const operatingSystem = os[Math.floor(Math.random() * os.length)]; if (browser.name === 'Chrome') { return `Mozilla/5.0 (${operatingSystem}) AppleWebKit/${browser.webkit} (KHTML, like Gecko) Chrome/${version} Safari/${browser.webkit}`; } else if (browser.name === 'Firefox') { return `Mozilla/5.0 (${operatingSystem}; rv:${version}) Gecko/20100101 Firefox/${version}`; } else if (browser.name === 'Safari') { return `Mozilla/5.0 (${operatingSystem}) AppleWebKit/${browser.webkit} (KHTML, like Gecko) Version/${version} Safari/${browser.webkit}`; } return `Mozilla/5.0 (${operatingSystem}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36`; }; exports.generateRandomUserAgent = generateRandomUserAgent; const generateSpecificUserAgent = (browser, os, version) => { const browserConfig = { Chrome: { webkit: '537.36', defaultVersion: '120.0.0.0', }, Firefox: { webkit: '537.36', defaultVersion: '120.0', }, Safari: { webkit: '605.1.15', defaultVersion: '17.0', }, }; const osConfig = { macOS: 'Macintosh; Intel Mac OS X 10_15_7', Windows: 'Windows NT 10.0; Win64; x64', Linux: 'X11; Linux x86_64', }; const config = browserConfig[browser]; const operatingSystem = osConfig[os]; const browserVersion = version || config.defaultVersion; if (browser === 'Chrome') { return `Mozilla/5.0 (${operatingSystem}) AppleWebKit/${config.webkit} (KHTML, like Gecko) Chrome/${browserVersion} Safari/${config.webkit}`; } else if (browser === 'Firefox') { return `Mozilla/5.0 (${operatingSystem}; rv:${browserVersion}) Gecko/20100101 Firefox/${browserVersion}`; } else if (browser === 'Safari') { return `Mozilla/5.0 (${operatingSystem}) AppleWebKit/${config.webkit} (KHTML, like Gecko) Version/${browserVersion} Safari/${config.webkit}`; } return `Mozilla/5.0 (${operatingSystem}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36`; }; exports.generateSpecificUserAgent = generateSpecificUserAgent; const parseUserAgent = (userAgent) => { const chromeMatch = userAgent.match(/Chrome\/([0-9.]+)/); const firefoxMatch = userAgent.match(/Firefox\/([0-9.]+)/); const safariMatch = userAgent.match(/Version\/([0-9.]+)/); const osMatch = userAgent.match(/\((.*?)\)/); let browser = 'Unknown'; let version = 'Unknown'; let os = 'Unknown'; if (chromeMatch) { browser = 'Chrome'; version = chromeMatch[1] ?? 'Unknown'; } else if (firefoxMatch) { browser = 'Firefox'; version = firefoxMatch[1] ?? 'Unknown'; } else if (safariMatch) { browser = 'Safari'; version = safariMatch[1] ?? 'Unknown'; } if (osMatch) { os = osMatch[1] ?? 'Unknown'; } return { browser, version, os }; }; exports.parseUserAgent = parseUserAgent; const isMobileUserAgent = (userAgent) => { const mobileKeywords = [ 'Mobile', 'Android', 'iPhone', 'iPad', 'iPod', 'BlackBerry', 'Windows Phone', ]; return mobileKeywords.some((keyword) => userAgent.toLowerCase().includes(keyword.toLowerCase())); }; exports.isMobileUserAgent = isMobileUserAgent; const getCommonViewportSizes = () => ({ desktop: [ { width: 1920, height: 1080 }, { width: 1366, height: 768 }, { width: 1440, height: 900 }, { width: 1536, height: 864 }, { width: 1280, height: 720 }, ], tablet: [ { width: 768, height: 1024 }, { width: 820, height: 1180 }, { width: 834, height: 1194 }, ], mobile: [ { width: 375, height: 667 }, { width: 414, height: 896 }, { width: 360, height: 640 }, ], }); exports.getCommonViewportSizes = getCommonViewportSizes; const generateRandomViewport = () => { const sizes = (0, exports.getCommonViewportSizes)(); const allSizes = [...sizes.desktop, ...sizes.tablet, ...sizes.mobile]; return allSizes[Math.floor(Math.random() * allSizes.length)]; }; exports.generateRandomViewport = generateRandomViewport; const generateRandomChromeVersion = () => { const majorVersions = [120, 121, 122, 123, 124, 125, 126, 127, 128]; const majorVersion = majorVersions[Math.floor(Math.random() * majorVersions.length)]; const minorVersion = Math.floor(Math.random() * 10); const patchVersion = Math.floor(Math.random() * 10); const buildVersion = Math.floor(Math.random() * 1000); return `${majorVersion}.${minorVersion}.${patchVersion}.${buildVersion}`; }; const generateRandomSecChUa = () => { const brandOptions = [ '"Not)A;Brand"', '"Not_A Brand"', '"Not;A=Brand"', '"Not A;Brand"', ]; const brand = brandOptions[Math.floor(Math.random() * brandOptions.length)]; const brandVersion = Math.floor(Math.random() * 24) + 8; const chromeVersion = generateRandomChromeVersion().split('.')[0]; return `${brand};v="${brandVersion}", "Chromium";v="${chromeVersion}", "Google Chrome";v="${chromeVersion}"`; }; const generateRandomPlatform = () => { const platforms = ['"macOS"', '"Windows"', '"Linux"']; return platforms[Math.floor(Math.random() * platforms.length)]; }; const generateRandomMobile = () => { return Math.random() > 0.8 ? '?1' : '?0'; }; const generateRandomBrowserHeaders = () => { return { 'sec-ch-ua': generateRandomSecChUa(), 'sec-ch-ua-mobile': generateRandomMobile(), 'sec-ch-ua-platform': generateRandomPlatform(), 'user-agent': (0, exports.generateRandomUserAgent)(), }; }; exports.generateRandomBrowserHeaders = generateRandomBrowserHeaders; const generateConsistentBrowserHeaders = () => { const userAgent = (0, exports.generateRandomUserAgent)(); const parsed = (0, exports.parseUserAgent)(userAgent); const isMobile = (0, exports.isMobileUserAgent)(userAgent); const platform = parsed.os.includes('Mac') ? '"macOS"' : parsed.os.includes('Windows') ? '"Windows"' : '"Linux"'; const chromeMatch = userAgent.match(/Chrome\/([0-9]+)/); const chromeVersion = chromeMatch ? chromeMatch[1] : '120'; return { 'sec-ch-ua': `"Not)A;Brand";v="8", "Chromium";v="${chromeVersion}", "Google Chrome";v="${chromeVersion}"`, 'sec-ch-ua-mobile': isMobile ? '?1' : '?0', 'sec-ch-ua-platform': platform, 'user-agent': userAgent, }; }; exports.generateConsistentBrowserHeaders = generateConsistentBrowserHeaders;