@techmely/utils
Version:
Collection of helpful JavaScript / TypeScript utils
241 lines (236 loc) • 8.44 kB
JavaScript
'use strict';
/*!
* @techmely/utils
* Copyright(c) 2021-2024 Techmely <techmely.creation@gmail.com>
* MIT Licensed
*/
// src/isBot.ts
var botPatterns = [
" daum[ /]",
" deusu/",
" yadirectfetcher",
"(?:^| )site",
"(?:^|[^g])news",
"(?<! (?:channel/|google/))google(?!(app|/google| pixel))",
"(?<! cu)bot(?:[^\\w]|_|$)",
"(?<! ya(?:yandex)?)search",
"(?<!(?:lib))http",
"(?<![hg]m)score",
"@[a-z]",
"\\(at\\)[a-z]",
"\\[at\\][a-z]",
"^12345",
"^<",
"^[\\w \\.\\-\\(?:\\):]+(?:/v?\\d+(\\.\\d+)?(?:\\.\\d{1,10})?)?(?:,|$)",
"^[^ ]{50,}$",
"^active",
"^ad muncher",
"^amaya",
"^anglesharp/",
"^avsdevicesdk/",
"^bidtellect/",
"^biglotron",
"^bot",
"^btwebclient/",
"^clamav[ /]",
"^client/",
"^cobweb/",
"^coccoc",
"^custom",
"^ddg[_-]android",
"^discourse",
"^dispatch/\\d",
"^downcast/",
"^duckduckgo",
"^facebook",
"^fdm[ /]\\d",
"^getright/",
"^gozilla/",
"^hatena",
"^hobbit",
"^hotzonu",
"^hwcdn/",
"^jeode/",
"^jetty/",
"^jigsaw",
"^linkdex",
"^metauri",
"^microsoft bits",
"^movabletype",
"^mozilla/\\d\\.\\d \\(compatible;?\\)$",
"^mozilla/\\d\\.\\d \\w*$",
"^navermailapp",
"^netsurf",
"^nuclei",
"^offline explorer",
"^php",
"^postman",
"^postrank",
"^python",
"^rank",
"^read",
"^reed",
"^rest",
"^serf",
"^snapchat",
"^space bison",
"^svn",
"^swcd ",
"^taringa",
"^thumbor/",
"^tumblr/",
"^user-agent:",
"^valid",
"^venus/fedoraplanet",
"^w3c",
"^webbandit/",
"^webcopier",
"^wget",
"^whatsapp",
"^xenu link sleuth",
"^yahoo",
"^yandex",
"^zdm/\\d",
"^zoom marketplace/",
"^{{.*}}$",
"adbeat\\.com",
"appinsights",
"archive",
"ask jeeves/teoma",
"bit\\.ly/",
"bluecoat drtr",
"browsex",
"burpcollaborator",
"capture",
"catch",
"check",
"chrome-lighthouse",
"chromeframe",
"classifier",
"cloud",
"crawl",
"cryptoapi",
"dareboost",
"datanyze",
"dataprovider",
"dejaclick",
"dmbrowser",
"download",
"evc-batch/",
"feed",
"firephp",
"freesafeip",
"gomezagent",
"headless",
"httrack",
"hubspot marketing grader",
"hydra",
"ibisbrowser",
"images",
"inspect",
"iplabel",
"ips-agent",
"java(?!;)",
"library",
"mail\\.ru/",
"manager",
"monitor",
"neustar wpm",
"nutch",
"offbyone",
"optimize",
"pageburst",
"parser",
"perl",
"phantom",
"pingdom",
"powermarks",
"preview",
"proxy",
"ptst[ /]\\d",
"reader",
"reputation",
"resolver",
"retriever",
"rexx;",
"rigor",
"robot",
"rss",
"scan",
"scrape",
"server",
"sogou",
"sparkler/",
"speedcurve",
"spider",
"splash",
"statuscake",
"stumbleupon\\.com",
"supercleaner",
"synapse",
"synthetic",
"torrent",
"trace",
"transcoder",
"twingly recon",
"url",
"virtuoso",
"wappalyzer",
"webglance",
"webkit2png",
"whatcms/",
"wordpress",
"zgrab"
];
var botFullPattern = " daum[ /]| deusu/| yadirectfetcher|(?:^| )site|(?:^|[^g])news|(?<! (?:channel/|google/))google(?!(app|/google| pixel))|(?<! cu)bot(?:[^\\w]|_|$)|(?<! ya(?:yandex)?)search|(?<!(?:lib))http|(?<![hg]m)score|@[a-z]|\\(at\\)[a-z]|\\[at\\][a-z]|^12345|^<|^[\\w \\.\\-\\(?:\\):]+(?:/v?\\d+(\\.\\d+)?(?:\\.\\d{1,10})?)?(?:,|$)|^[^ ]{50,}$|^active|^ad muncher|^amaya|^anglesharp/|^avsdevicesdk/|^bidtellect/|^biglotron|^bot|^btwebclient/|^clamav[ /]|^client/|^cobweb/|^coccoc|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^facebook|^fdm[ /]\\d|^getright/|^gozilla/|^hatena|^hobbit|^hotzonu|^hwcdn/|^jeode/|^jetty/|^jigsaw|^linkdex|^metauri|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d \\(compatible;?\\)$|^mozilla/\\d\\.\\d \\w*$|^navermailapp|^netsurf|^nuclei|^offline explorer|^php|^postman|^postrank|^python|^rank|^read|^reed|^rest|^serf|^snapchat|^space bison|^svn|^swcd |^taringa|^thumbor/|^tumblr/|^user-agent:|^valid|^venus/fedoraplanet|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|^{{.*}}$|adbeat\\.com|appinsights|archive|ask jeeves/teoma|bit\\.ly/|bluecoat drtr|browsex|burpcollaborator|capture|catch|check|chrome-lighthouse|chromeframe|classifier|cloud|crawl|cryptoapi|dareboost|datanyze|dataprovider|dejaclick|dmbrowser|download|evc-batch/|feed|firephp|freesafeip|gomezagent|headless|httrack|hubspot marketing grader|hydra|ibisbrowser|images|inspect|iplabel|ips-agent|java(?!;)|library|mail\\.ru/|manager|monitor|neustar wpm|nutch|offbyone|optimize|pageburst|parser|perl|phantom|pingdom|powermarks|preview|proxy|ptst[ /]\\d|reader|reputation|resolver|retriever|rexx;|rigor|robot|rss|scan|scrape|server|sogou|sparkler/|speedcurve|spider|splash|statuscake|stumbleupon\\.com|supercleaner|synapse|synthetic|torrent|trace|transcoder|twingly recon|url|virtuoso|wappalyzer|webglance|webkit2png|whatcms/|wordpress|zgrab";
var regularExpression = / daum[ /]| deusu\/| yadirectfetcher|(?:^| )site|(?:^|[^g])news|(?<! (?:channel\/|google\/))google(?!(app|\/google| pixel))|(?<! cu)bot(?:[^\w]|_|$)|(?<! ya(?:yandex)?)search|(?<!(?:lib))http|(?<![hg]m)score|@[a-z]|\(at\)[a-z]|\[at\][a-z]|^12345|^<|^[\w \.\-\(?:\):]+(?:\/v?\d+(\.\d+)?(?:\.\d{1,10})?)?(?:,|$)|^[^ ]{50,}$|^active|^ad muncher|^amaya|^anglesharp\/|^avsdevicesdk\/|^bidtellect\/|^biglotron|^bot|^btwebclient\/|^clamav[ /]|^client\/|^cobweb\/|^coccoc|^custom|^ddg[_-]android|^discourse|^dispatch\/\d|^downcast\/|^duckduckgo|^facebook|^fdm[ /]\d|^getright\/|^gozilla\/|^hatena|^hobbit|^hotzonu|^hwcdn\/|^jeode\/|^jetty\/|^jigsaw|^linkdex|^metauri|^microsoft bits|^movabletype|^mozilla\/\d\.\d \(compatible;?\)$|^mozilla\/\d\.\d \w*$|^navermailapp|^netsurf|^nuclei|^offline explorer|^php|^postman|^postrank|^python|^rank|^read|^reed|^rest|^serf|^snapchat|^space bison|^svn|^swcd |^taringa|^thumbor\/|^tumblr\/|^user-agent:|^valid|^venus\/fedoraplanet|^w3c|^webbandit\/|^webcopier|^wget|^whatsapp|^xenu link sleuth|^yahoo|^yandex|^zdm\/\d|^zoom marketplace\/|^{{.*}}$|adbeat\.com|appinsights|archive|ask jeeves\/teoma|bit\.ly\/|bluecoat drtr|browsex|burpcollaborator|capture|catch|check|chrome-lighthouse|chromeframe|classifier|cloud|crawl|cryptoapi|dareboost|datanyze|dataprovider|dejaclick|dmbrowser|download|evc-batch\/|feed|firephp|freesafeip|gomezagent|headless|httrack|hubspot marketing grader|hydra|ibisbrowser|images|inspect|iplabel|ips-agent|java(?!;)|library|mail\.ru\/|manager|monitor|neustar wpm|nutch|offbyone|optimize|pageburst|parser|perl|phantom|pingdom|powermarks|preview|proxy|ptst[ /]\d|reader|reputation|resolver|retriever|rexx;|rigor|robot|rss|scan|scrape|server|sogou|sparkler\/|speedcurve|spider|splash|statuscake|stumbleupon\.com|supercleaner|synapse|synthetic|torrent|trace|transcoder|twingly recon|url|virtuoso|wappalyzer|webglance|webkit2png|whatcms\/|wordpress|zgrab/i;
var naivePattern = /bot|spider|crawl|http|lighthouse/i;
var botRegPattern = regularExpression;
function isBotNaive(userAgent) {
return naivePattern.test(userAgent || "");
}
var usedPattern;
function isBot(userAgent) {
if (typeof usedPattern === "undefined") {
try {
usedPattern = new RegExp(botFullPattern, "i");
} catch (error) {
usedPattern = naivePattern;
}
}
return usedPattern.test(userAgent || "");
}
function createIsBot(customPattern) {
return (userAgent) => {
return customPattern.test(userAgent || "");
};
}
function createIsBotFromList(list) {
const pattern = new RegExp(list.join("|"), "i");
return (userAgent) => {
return pattern.test(userAgent || "");
};
}
function isBotMatch(userAgent) {
return userAgent?.match(botRegPattern)?.[0] ?? null;
}
function isBotMatches(userAgent) {
return botPatterns.map((part) => userAgent?.match(new RegExp(part, "i"))?.[0]).filter(Boolean);
}
function isBotPattern(userAgent) {
return userAgent ? botPatterns.find((pattern) => new RegExp(pattern, "i").test(userAgent)) ?? null : null;
}
function isBotPatterns(userAgent) {
return userAgent ? botPatterns.filter((pattern) => new RegExp(pattern, "i").test(userAgent)) : [];
}
exports.botFullPattern = botFullPattern;
exports.botPatterns = botPatterns;
exports.botRegPattern = botRegPattern;
exports.createIsBot = createIsBot;
exports.createIsBotFromList = createIsBotFromList;
exports.isBot = isBot;
exports.isBotMatch = isBotMatch;
exports.isBotMatches = isBotMatches;
exports.isBotNaive = isBotNaive;
exports.isBotPattern = isBotPattern;
exports.isBotPatterns = isBotPatterns;