mirror of
https://github.com/CompeyDev/fxtwitter-docker.git
synced 2025-04-07 19:40:54 +01:00
47 lines
2.2 KiB
TypeScript
47 lines
2.2 KiB
TypeScript
/* We keep this value up-to-date for making our requests to Twitter as
|
|
indistinguishable from normal user traffic as possible. */
|
|
const fakeChromeVersion = 118;
|
|
const platformWindows = 'Windows NT 10.0; Win64; x64';
|
|
const platformMac = 'Macintosh; Intel Mac OS X 10_15_7';
|
|
const platformLinux = 'X11; Linux x86_64';
|
|
const platformAndroid = 'Linux; Android 10; K';
|
|
const chromeUA = `Mozilla/5.0 ({platform}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{version}.0.0.0 Safari/537.36`;
|
|
const edgeUA = `Mozilla/5.0 ({platform}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{version}.0.0.0 Safari/537.36 Edg/{version}.0.0.0`;
|
|
const chromeMobileUA = `Mozilla/5.0 ({platform}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{version}.0.0.0 Mobile Safari/537.36`;
|
|
const edgeMobileUA = `Mozilla/5.0 ({platform}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{version}.0.0.0 Mobile Safari/537.36 Edg/{version}.0.0.0`;
|
|
|
|
enum Platforms {
|
|
Windows,
|
|
Mac,
|
|
Linux,
|
|
Android
|
|
}
|
|
|
|
/* Return a random version of Chrome between current and 2 previous versions (i.e. For 109, also return 108 or 107) */
|
|
const getRandomVersion = (): number => fakeChromeVersion - Math.floor(Math.random() * 3);
|
|
|
|
export const generateUserAgent = (): [string, string] => {
|
|
const platform = Math.floor(Math.random() * 4);
|
|
const isEdge = Math.random() > 0.5;
|
|
const version = getRandomVersion();
|
|
|
|
let userAgent = isEdge ? edgeUA : chromeUA;
|
|
userAgent = userAgent.format({ version: String(version) });
|
|
const secChUaChrome = `".Not/A)Brand";v="99", "Google Chrome";v="{version}", "Chromium";v="{version}"`;
|
|
const secChUaEdge = `".Not/A)Brand";v="99", "Microsoft Edge";v="{version}", "Chromium";v="{version}"`;
|
|
const secChUa = (isEdge ? secChUaEdge : secChUaChrome).format({
|
|
version: String(version)
|
|
});
|
|
|
|
switch (platform) {
|
|
case Platforms.Mac:
|
|
return [userAgent.format({ platform: platformMac }), secChUa];
|
|
case Platforms.Linux:
|
|
return [userAgent.format({ platform: platformLinux }), secChUa];
|
|
case Platforms.Android:
|
|
userAgent = isEdge ? edgeMobileUA : chromeMobileUA;
|
|
return [userAgent.format({ platform: platformAndroid, version: String(version) }), secChUa];
|
|
default:
|
|
return [userAgent.format({ platform: platformWindows }), secChUa];
|
|
}
|
|
};
|