UNPKG

@techmely/utils

Version:

Collection of helpful JavaScript / TypeScript utils

241 lines (236 loc) 8.44 kB
'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;