isbot
Advanced tools
Comparing version 4.4.0 to 5.0.0
@@ -0,6 +1,3 @@ | ||
export declare function getPattern(): RegExp; | ||
/** | ||
* A pattern that matches bot identifiers in user agent strings. | ||
*/ | ||
export declare const pattern: RegExp; | ||
/** | ||
* A list of bot identifiers to be used in a regular expression against user agent strings. | ||
@@ -7,0 +4,0 @@ */ |
@@ -27,17 +27,21 @@ var isbot = (() => { | ||
// src/pattern.ts | ||
var fullPattern = " 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 fullPattern = " 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/|^track|^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|node|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|tools|torrent|trace|transcoder|twingly recon|url|virtuoso|wappalyzer|webglance|webkit2png|whatcms/|wordpress|zgrab"; | ||
// src/index.ts | ||
var naivePattern = /bot|spider|crawl|http|lighthouse/i; | ||
var usedPattern; | ||
function isbot(userAgent) { | ||
if (typeof usedPattern === "undefined") { | ||
try { | ||
usedPattern = new RegExp(fullPattern, "i"); | ||
} catch (error) { | ||
usedPattern = naivePattern; | ||
} | ||
var pattern; | ||
function getPattern() { | ||
if (pattern instanceof RegExp) { | ||
return pattern; | ||
} | ||
return Boolean(userAgent) && usedPattern.test(userAgent); | ||
try { | ||
pattern = new RegExp(fullPattern, "i"); | ||
} catch (error) { | ||
pattern = naivePattern; | ||
} | ||
return pattern; | ||
} | ||
function isbot(userAgent) { | ||
return Boolean(userAgent) && getPattern().test(userAgent); | ||
} | ||
@@ -44,0 +48,0 @@ // src/browser.ts |
39
index.js
@@ -24,2 +24,3 @@ var __defProp = Object.defineProperty; | ||
createIsbotFromList: () => createIsbotFromList, | ||
getPattern: () => getPattern, | ||
isbot: () => isbot, | ||
@@ -31,11 +32,6 @@ isbotMatch: () => isbotMatch, | ||
isbotPatterns: () => isbotPatterns, | ||
list: () => list, | ||
pattern: () => pattern | ||
list: () => list | ||
}); | ||
module.exports = __toCommonJS(src_exports); | ||
// src/pattern.ts | ||
var fullPattern = " 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; | ||
// src/patterns.json | ||
@@ -115,2 +111,3 @@ var patterns_default = [ | ||
"^thumbor/", | ||
"^track", | ||
"^tumblr/", | ||
@@ -174,2 +171,3 @@ "^user-agent:", | ||
"neustar wpm", | ||
"node", | ||
"nutch", | ||
@@ -208,2 +206,3 @@ "offbyone", | ||
"synthetic", | ||
"tools", | ||
"torrent", | ||
@@ -223,17 +222,23 @@ "trace", | ||
// src/pattern.ts | ||
var fullPattern = " 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/|^track|^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|node|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|tools|torrent|trace|transcoder|twingly recon|url|virtuoso|wappalyzer|webglance|webkit2png|whatcms/|wordpress|zgrab"; | ||
// src/index.ts | ||
var naivePattern = /bot|spider|crawl|http|lighthouse/i; | ||
var pattern = regularExpression; | ||
var pattern; | ||
function getPattern() { | ||
if (pattern instanceof RegExp) { | ||
return pattern; | ||
} | ||
try { | ||
pattern = new RegExp(fullPattern, "i"); | ||
} catch (error) { | ||
pattern = naivePattern; | ||
} | ||
return pattern; | ||
} | ||
var list = patterns_default; | ||
var isbotNaive = (userAgent) => Boolean(userAgent) && naivePattern.test(userAgent); | ||
var usedPattern; | ||
function isbot(userAgent) { | ||
if (typeof usedPattern === "undefined") { | ||
try { | ||
usedPattern = new RegExp(fullPattern, "i"); | ||
} catch (error) { | ||
usedPattern = naivePattern; | ||
} | ||
} | ||
return Boolean(userAgent) && usedPattern.test(userAgent); | ||
return Boolean(userAgent) && getPattern().test(userAgent); | ||
} | ||
@@ -245,5 +250,5 @@ var createIsbot = (customPattern) => (userAgent) => Boolean(userAgent) && customPattern.test(userAgent); | ||
}; | ||
var isbotMatch = (userAgent) => userAgent?.match(pattern)?.[0] ?? null; | ||
var isbotMatch = (userAgent) => userAgent?.match(getPattern())?.[0] ?? null; | ||
var isbotMatches = (userAgent) => list.map((part) => userAgent?.match(new RegExp(part, "i"))?.[0]).filter(Boolean); | ||
var isbotPattern = (userAgent) => userAgent ? list.find((pattern2) => new RegExp(pattern2, "i").test(userAgent)) ?? null : null; | ||
var isbotPatterns = (userAgent) => userAgent ? list.filter((pattern2) => new RegExp(pattern2, "i").test(userAgent)) : []; |
{ | ||
"name": "isbot", | ||
"version": "4.4.0", | ||
"description": "🤖 Recognise bots/crawlers/spiders using the user agent string.", | ||
"version": "5.0.0", | ||
"description": "🤖/👨🦰 Recognise bots/crawlers/spiders using the user agent string.", | ||
"keywords": [ | ||
@@ -62,6 +62,6 @@ "bot", | ||
"devDependencies": { | ||
"@types/jest": "^29.5.11", | ||
"esbuild": "^0.19.9", | ||
"@types/jest": "^29.5.12", | ||
"esbuild": "^0.20.0", | ||
"jest": "^29.7.0", | ||
"prettier": "^3.1.1", | ||
"prettier": "^3.2.5", | ||
"pug": "^3.0.2", | ||
@@ -71,5 +71,5 @@ "stdline": "^1.1.1", | ||
"typescript": "^5.3.3", | ||
"user-agents": "^1.1.53", | ||
"user-agents": "^1.1.116", | ||
"yaml": "^2.3.4" | ||
} | ||
} |
@@ -50,14 +50,14 @@ # isbot 🤖/👨🦰 | ||
| import | Type | Description | | ||
| ------------------- | ------------------------------------------------- | ---------------------------------------------------------------------------- | | ||
| isbot | _(userAgent: string): boolean_ | Check if the user agent is a bot | | ||
| isbotNaive | _(userAgent: string): boolean_ | Check if the user agent is a bot using a naive pattern (less accurate) | | ||
| pattern | _RegExp_ | The regular expression used to identify bots | | ||
| list | _string[]_ | List of all individual pattern parts | | ||
| isbotMatch | _(userAgent: string): string \| null_ | The substring matched by the regular expression | | ||
| isbotMatches | _(userAgent: string): string[]_ | All substrings matched by the regular expression | | ||
| isbotPattern | _(userAgent: string): string \| null_ | The regular expression used to identify bot substring in the user agent | | ||
| isbotPatterns | _(userAgent: string): string[]_ | All regular expressions used to identify bot substrings in the user agent | | ||
| createIsbot | _(pattern: RegExp): (userAgent: string): boolean_ | Create a custom isbot function | | ||
| createIsbotFromList | _(list: string): (userAgent: string): boolean_ | Create a custom isbot function from a list of string representation patterns | | ||
| import | Type | Description | | ||
| ------------------- | -------------------------------- | ---------------------------------------------------------------------------- | | ||
| isbot | _(string?): boolean_ | Check if the user agent is a bot | | ||
| isbotNaive | _(string?): boolean_ | Check if the user agent is a bot using a naive pattern (less accurate) | | ||
| getPattern | (): _RegExp_ | The regular expression used to identify bots | | ||
| list | _string[]_ | List of all individual pattern parts | | ||
| isbotMatch | _(string?): string \| null_ | The substring matched by the regular expression | | ||
| isbotMatches | _(string?): string[]_ | All substrings matched by the regular expression | | ||
| isbotPattern | _(string?): string \| null_ | The regular expression used to identify bot substring in the user agent | | ||
| isbotPatterns | _(string?): string[]_ | All regular expressions used to identify bot substrings in the user agent | | ||
| createIsbot | _(RegExp): (string?): boolean_ | Create a custom isbot function | | ||
| createIsbotFromList | _(string[]): (string?): boolean_ | Create a custom isbot function from a list of string representation patterns | | ||
@@ -64,0 +64,0 @@ ## Example usages of helper functions |
Sorry, the diff of this file is not supported yet
29407
570