nyro
Version:
A simple and effective promise-based HTTP & HTTP/2 request library that supports all HTTP methods.
397 lines (368 loc) • 14.5 kB
text/typescript
import {
GenerateUserAgentOptions,
UserAgentOS,
UserAgentBrowser,
UserAgentDevice,
} from '../helpers/types';
var chromeWebkitVersions = {
"1.0": "528",
"2.0": "530",
"3.0": "532",
"4.0": "532.5",
"4.1": "49",
"5.0": "533",
"6.0": "534.3",
"7.0": "534.7",
"8.0": "534.1",
"9.0": "534.13",
"10.0": "534.16",
"11.0": "534.24",
"12.0": "534.3",
"13.0": "535.1",
"14.0": "535.2",
"15.0": "535.2",
"16.0": "535.7",
"17.0": "535.11",
"18.0": "535.19",
"19.0": "536.5",
"20.0": "536.1",
"21.0": "537.1",
"22.0": "537.4",
"23.0": "537.11",
"24.0": "537.17",
"25.0": "537.22",
"26.0": "537.31",
"27.0": "537.36"
};
var androidWebkitVersions = {
"1.5": "528.5",
"1.6": "528.5",
"2.0": "530.17",
"2.0.1": "530.17",
"2.1": "530.17",
"2.2": "533.1",
"2.3": "?",
"2.3.3": "533.1",
"3.0": "534.13",
"3.1": "534.13",
"3.2": "534.13",
"4.0": "534.30",
"4.0.3": "534.30",
"4.1": "534.30",
"4.2": "534.30",
"4.3": "534.30",
"4.4": "537.36"
};
var safariWebkitVersions = {
"1.0": "85",
"1.0.3": "85.8.5",
"1.1": "100",
"1.2": "125",
"1.3": "312",
"1.3.1": "312.3",
"1.3.2": "312.5",
"1.3.3": "312.6",
"2.0": "412",
"2.0.2": "416.11",
"2.0.4": "419.3",
"3.0": "522.11",
"3.0.2": "522.12",
"3.0.3": "522.12.1",
"3.0.4": "523.10",
"3.1": "525.13",
"3.1.1": "525.20",
"3.1.2": "525.21",
"3.2": "525.26",
"3.2.1": "525.27",
"3.2.3": "525.28",
"4.0": "530.17",
"4.0.1": "530.18",
"4.0.2": "530.19",
"4.0.3": "531.9",
"4.0.4": "531.21.10",
"4.0.5": "531.22.7",
"4.1": "533.16",
"4.1.1": "533.17.8",
"4.1.2": "533.18.5",
"4.1.3": "533.19.4",
"5.0": "533.16",
"5.0.1": "533.17.8",
"5.0.2": "533.18.5",
"5.0.3": "533.19.4",
"5.0.4": "533.20.27",
"5.0.5": "533.21.1",
"5.0.6": "533.22.3",
"5.1": "534.48.3",
"5.1.1": "534.51.22",
"5.1.2": "534.52.7",
"5.1.3": "534.53.10",
"5.1.4": "534.54.16",
"5.1.5": "534.55.3",
"5.1.6": "534.56.5",
"5.1.7": "534.57.2",
"5.1.8": "534.58.2",
"5.1.9": "534.59.8",
"5.1.10": "534.59.10",
"6.0": "536.25",
"6.0.1": "536.26",
"6.0.2": "536.26.17",
"6.0.3": "536.28.10",
"6.0.4": "536.29.13",
"6.0.5": "536.30.1",
"6.1": "537.43.58",
"6.1.1": "537.73.11",
"6.1.6": "537.78.2[24]",
"6.2.8": "537.85.17",
"7.0": "537.71",
"7.0.1": "537.73.11",
"7.0.3": "537.75.14",
"7.0.4": "537.76.4",
"7.0.5": "537.77.4",
"7.0.6": "537.78.2",
"7.1.8": "537.85.17",
"8.0": "538.35.8",
"8.0.6": "600.6.3",
"8.0.7": "600.7.12",
"9.0": "601.1.56",
"9.0.1": "601.2.7",
"9.0.2": "601.3.9",
"9.0.3": "601.4.4",
"9.1": "601.5.17",
"9.1.1": "601.6.17",
"9.1.2": "601.7.1",
"9.1.3": "601.7.8",
"10.0": "602.1.50",
"10.0.1": "602.2.14",
"10.0.2": "602.3.12",
"10.0.3": "602.4.8",
"10.1": "603.1.30",
"10.1.1": "603.2.4",
"10.1.2": "603.3.8",
"11.0.0": "604.1.28"
};
function getRandomVersion(versions: Record<string, string>) {
var availableVersions = Object.keys(versions);
var randomIndex = Math.floor(Math.random() * availableVersions.length);
return versions[availableVersions[randomIndex]];
};
function generateChrome(version?:string, os?:string, device?:string) {
return `Mozilla/5.0 (${os}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${version ?? '537.36'} Safari/537.36`;
}
function generateFirefox(version?:string, os?:string, device?:string) {
return `Mozilla/5.0 (${os}; rv:${version ?? '537.36'}) Gecko/20100101 Firefox/${version ?? '537.36'}`;
}
function generateSafari(version?:string, os?:string, device?:string) {
return `Mozilla/5.0 (${os}) AppleWebKit/${version ?? '604.1.28'} (KHTML, like Gecko) Version/${version ?? '604.1.28'} Safari/${version ?? '604.1.28'}`;
}
function generateAndroid(version?:string, device?:string, buildVersion?:string) {
return `Mozilla/5.0 (Linux; Android ${version ?? '537.36'}; ${device} Build/${buildVersion ?? '537.36'};) AppleWebKit/${version ?? '537.36'} (KHTML, like Gecko) Version/4.0 Chrome/${version ?? '537.36'} Mobile Safari/${version ?? '537.36'}`;
}
function generateEdge(version?:string, os?:string, device?:string) {
return `Mozilla/5.0 (${os};) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${version} Safari/537.36 Edge/${version}`;
}
/**
* @description Parse the type of the operating system.
* @param {string} type - The type of the operating system.
* @returns {string} The parsed type of the operating system.
* @example parseType('Win') => 'Windows'
* @example parseType('Mac') => 'Mac OS'
* @example parseType('Linux') => 'Linux'
* @example parseType('android') => 'Android'
* @example parseType('IOS') => 'iOS'
* @export parseType
*/
function parseOS(type: string): UserAgentOS {
type = type.toLocaleLowerCase();
return type.startsWith('mac') ? 'Mac OS' :
type.startsWith('windows') || type.startsWith('win') ? 'Windows' :
type.startsWith('linux') ? 'Linux' :
type.startsWith('android') ? 'Android' :
type.startsWith('ios') || type.startsWith('ıos') ? 'iOS' : 'Windows';
};
export default class UserAgent {
constructor() {
};
static getVersion(os?: UserAgentOS): string {
if (!os) os = this.getOS();
switch (os) {
case 'Windows':
return getRandomVersion(chromeWebkitVersions);
case 'Mac OS':
return getRandomVersion(safariWebkitVersions);
case 'Linux':
return getRandomVersion(chromeWebkitVersions);
case 'Android':
return getRandomVersion(androidWebkitVersions);
case 'iOS':
return getRandomVersion(safariWebkitVersions);
default:
return getRandomVersion(chromeWebkitVersions);
};
};
static getOS(): UserAgentOS {
var OSList: UserAgentOS[] = ['Windows', 'Mac OS', 'Linux', 'Android', 'iOS'];
return OSList[Math.floor(Math.random() * OSList.length)];
};
static getBrowser(): UserAgentBrowser {
var BrowserList: UserAgentBrowser[] = ['Chrome', 'Firefox', 'Safari', 'Opera', 'Edge'];
return BrowserList[Math.floor(Math.random() * BrowserList.length)];
};
static getDevice(): UserAgentDevice {
var DeviceList: UserAgentDevice[] = [
'SM-T210', 'SM-G900F', 'SM-G920F', 'SM-G930F', 'SM-G950F', 'SM-G960F', 'SM-G970F', 'SM-G973F', 'SM-G975F', 'SM-G980F', 'SM-G985F', 'SM-G988B', 'SM-N9005', 'SM-N910F', 'SM-N920C', 'SM-N950F', 'SM-N960F', 'SM-N970F', 'SM-N975F', 'SM-N980F', 'SM-N985F', 'SM-N986B', 'iPhone', 'iPad', 'iPod touch', 'Nexus 5', 'Nexus 7', 'Nexus 10', 'Nexus 4', 'Nexus 6', 'Nexus 9', 'Nexus 5X', 'Nexus 6P', 'Nexus 7 (2013)', 'Nexus 9 (2014)', 'Nexus 10 (2012)', 'Nexus 4 (2012)', 'Nexus 6 (2014)', 'Nexus 5X (2015)', 'Nexus 6P (2015)', 'Mi 9', 'Mi 9 SE', 'Mi 9T', 'Mi 9T Pro', 'Mi 10', 'Mi 10 Pro', 'Mi 10T', 'Mi 10T Pro', 'Mi 11', 'Mi 11 Lite', 'Mi 11 Ultra', 'Redmi Note 8', 'Redmi Note 8 Pro', 'Redmi Note 9', 'Redmi Note 9 Pro', 'Redmi Note 10', 'Redmi Note 10 Pro', 'Redmi Note 11', 'Redmi Note 11 Pro', 'Poco F1', 'Poco F2 Pro', 'Poco X3', 'Poco X3 Pro', 'Poco M3'
];
return DeviceList[Math.floor(Math.random() * DeviceList.length)];
};
static generate(options?: GenerateUserAgentOptions): string {
var UserAgentOptions = {} as GenerateUserAgentOptions;
if(!options) {
UserAgentOptions = {
os: this.getOS(),
browser: this.getBrowser(),
device: this.getDevice(),
version: this.getVersion('Windows')
};
} else {
var defaultBrowserList = ['Chrome', 'Firefox', 'Opera', 'Edge'];
var OS = parseOS(options.os || 'Windows');
var browser = OS == 'iOS' || OS == 'Mac OS' ? 'Safari' : defaultBrowserList[Math.floor(Math.random() * defaultBrowserList.length)] as UserAgentBrowser;
var version = options.version || this.getVersion(OS || 'Windows');
UserAgentOptions = {
os: parseOS(options?.os || 'Windows') || this.getOS(),
browser: options?.browser || browser,
device: options?.device || this.getDevice(),
version: version
};
};
var os = UserAgentOptions.os;
var parsedOS = os == 'Windows' ?
[
'Windows NT 6.1; Win64; x64',
'Windows NT 10.0; Win64; x64',
'Windows NT 6.3; Win64; x64',
'Windows NT 6.1; WOW64',
'Windows NT 10.0',
'Windows NT 5.1'
] :
os == 'Mac OS' ?
[
'Macintosh; Intel Mac OS X 10_10_5',
'Macintosh; Intel Mac OS X 10_12_2',
'Macintosh; Intel Mac OS X 10_12_3',
'Macintosh; Intel Mac OS X 10_9_5',
'Macintosh; Intel Mac OS X 10_12_0',
'Macintosh; Intel Mac OS X 10_12_1',
'Macintosh; Intel Mac OS X 10_11_6'
] :
os == 'Linux' ?
[
'X11; Ubuntu; Linux x86_64; rv:53.0',
'X11; Linux x86_64',
'X11; Linux x86_64; rv:53.0',
'X11; Linux x86_64; rv:52.0'
] :
os == 'Android' ?
[
`Linux; Android 4.2.2; ${UserAgentOptions.device}`,
`Linux; Android 4.4; ${UserAgentOptions.device}`,
`Linux; Android 5.0; ${UserAgentOptions.device}`,
`Linux; Android 5.1; ${UserAgentOptions.device}`,
`Linux; Android 6.0; ${UserAgentOptions.device}`,
`Linux; Android 7.0; ${UserAgentOptions.device}`,
`Linux; Android 7.1; ${UserAgentOptions.device}`,
`Linux; Android 8.0; ${UserAgentOptions.device}`,
`Linux; Android 9.0; ${UserAgentOptions.device}`,
`Linux; Android 10.0; ${UserAgentOptions.device}`,
`Linux; Android 11.0; ${UserAgentOptions.device}`,
`Linux; Android 12.0; ${UserAgentOptions.device}`
]
:
os == 'iOS' ?
[
`iPad; CPU OS 10_3_2 like Mac OS X`,
`iPhone; CPU OS 10_3_2 like Mac OS X`,
`iPod touch; CPU OS 10_3_2 like Mac OS X`,
`iPad; CPU OS 11_0 like Mac OS X`,
`iPhone; CPU OS 11_0 like Mac OS X`,
`iPod touch; CPU OS 11_0 like Mac OS X`,
`iPad; CPU OS 12_0 like Mac OS X`,
`iPhone; CPU OS 12_0 like Mac OS X`,
`iPod touch; CPU OS 12_0 like Mac OS X`,
`iPad; CPU OS 13_0 like Mac OS X`,
`iPhone; CPU OS 13_0 like Mac OS X`,
] :
[
'Windows NT 6.1; Win64; x64',
'Windows NT 10.0; Win64; x64',
'Windows NT 6.3; Win64; x64',
'Windows NT 6.1; WOW64',
'Windows NT 10.0',
'Windows NT 5.1',
'Macintosh; Intel Mac OS X 10_10_5',
'Macintosh; Intel Mac OS X 10_12_2',
'Macintosh; Intel Mac OS X 10_12_3',
'Macintosh; Intel Mac OS X 10_9_5',
'Macintosh; Intel Mac OS X 10_12_0',
'Macintosh; Intel Mac OS X 10_12_1',
'Macintosh; Intel Mac OS X 10_11_6',
'X11; Ubuntu; Linux x86_64; rv:53.0',
'X11; Linux x86_64',
'X11; Linux x86_64; rv:53.0',
'X11; Linux x86_64; rv:52.0',
`Linux; Android 4.2.2; ${UserAgentOptions.device}`,
`Linux; Android 4.4; ${UserAgentOptions.device}`,
`Linux; Android 5.0; ${UserAgentOptions.device}`,
`Linux; Android 5.1; ${UserAgentOptions.device}`,
`Linux; Android 6.0; ${UserAgentOptions.device}`,
`Linux; Android 7.0; ${UserAgentOptions.device}`,
`Linux; Android 7.1; ${UserAgentOptions.device}`,
`Linux; Android 8.0; ${UserAgentOptions.device}`,
`Linux; Android 9.0; ${UserAgentOptions.device}`,
`Linux; Android 10.0; ${UserAgentOptions.device}`,
`Linux; Android 11.0; ${UserAgentOptions.device}`,
`Linux; Android 12.0; ${UserAgentOptions.device}`,
`iPad; CPU OS 10_3_2 like Mac OS X`,
`iPhone; CPU OS 10_3_2 like Mac OS X`,
`iPod touch; CPU OS 10_3_2 like Mac OS X`,
`iPad; CPU OS 11_0 like Mac OS X`,
`iPhone; CPU OS 11_0 like Mac OS X`,
`iPod touch; CPU OS 11_0 like Mac OS X`,
`iPad; CPU OS 12_0 like Mac OS X`,
`iPhone; CPU OS 12_0 like Mac OS X`,
`iPod touch; CPU OS 12_0 like Mac OS X`,
`iPad; CPU OS 13_0 like Mac OS X`,
`iPhone; CPU OS 13_0 like Mac OS X`,
];
var getOS = parsedOS[Math.floor(Math.random() * parsedOS.length)];
var UserAgent = '';
if(UserAgentOptions.browser == 'Chrome') {
UserAgent = generateChrome(UserAgentOptions.version, getOS, UserAgentOptions.device);
} else if(UserAgentOptions.browser == 'Firefox') {
UserAgent = generateFirefox(UserAgentOptions.version, getOS, UserAgentOptions.device);
} else if(UserAgentOptions.browser == 'Safari') {
UserAgent = generateSafari(UserAgentOptions.version, getOS, UserAgentOptions.device);
} else if(UserAgentOptions.os == 'Android') {
UserAgent = generateAndroid(UserAgentOptions.version, getOS, UserAgentOptions.version);
} else if(UserAgentOptions.browser == 'Edge') {
UserAgent = generateEdge(UserAgentOptions.version, getOS, UserAgentOptions.device);
} else if(UserAgentOptions.browser == 'Opera') {
UserAgent = generateChrome(UserAgentOptions.version, getOS, UserAgentOptions.device);
};
return UserAgent;
};
};
export {
GenerateUserAgentOptions,
UserAgentOS,
UserAgentBrowser,
UserAgentDevice,
chromeWebkitVersions as ChromeVersions,
androidWebkitVersions as AndroidVersions,
safariWebkitVersions as SafariVersions,
getRandomVersion,
generateChrome,
generateFirefox,
generateSafari,
generateAndroid,
generateEdge
};