From 9bef871e41906664dd41d051e099ac540e9314af Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Tue, 2 Sep 2025 22:00:02 +0700 Subject: [PATCH] [helpers] Update isAIBot() list using Crawlers enum --- src/enums/ua-parser-enums.js | 5 +- src/helpers/ua-parser-helpers.js | 105 +++++++++++++++---------------- 2 files changed, 55 insertions(+), 55 deletions(-) diff --git a/src/enums/ua-parser-enums.js b/src/enums/ua-parser-enums.js index 7d5eb6d..a8fb97c 100644 --- a/src/enums/ua-parser-enums.js +++ b/src/enums/ua-parser-enums.js @@ -469,7 +469,7 @@ const Extension = Object.freeze({ BRAVE_BOT: 'Bravebot', BYTEDANCE_BYTESPIDER: 'Bytespider', BYTEDANCE_TIKTOKSPIDER: 'TikTokSpider', - CC_BOT: 'CCBot', + COMMON_CRAWL_CCBOT: 'CCBot', COCCOC_BOT_WEB: 'coccocbot-web', COCCOC_BOT_IMAGE: 'coccocbot-image', COHERE_TRAINING_DATA_CRAWLER: 'cohere-training-data-crawler', @@ -497,6 +497,7 @@ const Extension = Object.freeze({ GOOGLE_BOT_NEWS: 'Googlebot-News', GOOGLE_BOT_VIDEO: 'Googlebot-Video', GOOGLE_CLOUDVERTEXBOT: 'Google-CloudVertexBot', + GOOGLE_EXTENDED: 'Google-Extended', GOOGLE_INSPECTIONTOOL: 'Google-InspectionTool', GOOGLE_OTHER: 'GoogleOther', GOOGLE_OTHER_IMAGE: 'GoogleOther-Image', @@ -529,7 +530,7 @@ const Extension = Object.freeze({ ONCRAWL: 'OnCrawl', ONESPOT_SCRAPERBOT: 'Onespot-ScraperBot', OPENAI_GPTBOT: 'GPTBot', - OPENAI_SEARCH: 'OAI-SearchBot', + OPENAI_SEARCH_BOT: 'OAI-SearchBot', PERPLEXITY_BOT: 'PerplexityBot', QIHOO_360_SPIDER: '360Spider', QWANT_BOT: 'Qwantbot', diff --git a/src/helpers/ua-parser-helpers.js b/src/helpers/ua-parser-helpers.js index e8af693..d6825e0 100644 --- a/src/helpers/ua-parser-helpers.js +++ b/src/helpers/ua-parser-helpers.js @@ -8,7 +8,7 @@ /*jshint esversion: 6 */ const { UAParser } = require('../main/ua-parser'); -const { CPUArch, OSName, EngineName } = require('../enums/ua-parser-enums'); +const { CPUArch, OSName, EngineName, Extension } = require('../enums/ua-parser-enums'); const { Bots } = require('../extensions/ua-parser-extensions'); const { isFromEU } = require('detect-europe-js'); const { isFrozenUA } = require('ua-is-frozen'); @@ -41,125 +41,124 @@ const isAppleSilicon = (resultOrUA) => { return false; } +const Crawler = Extension.BrowserName.Crawlers; const isAIBot = (resultOrUA) => [ // AI2 - 'ai2bot', + Crawler.AI2_BOT, // Amazon - 'amazonbot', + Crawler.AMAZON_BOT, // Anthropic - 'anthropic-ai', - 'claude-web', - 'claude-searchbot', - 'claudebot', + Crawler.ANTHROPIC_AI, + Crawler.ANTHROPIC_CLAUDE_BOT, + Crawler.ANTHROPIC_CLAUDE_SEARCHBOT, + Crawler.ANTHROPIC_CLAUDE_WEB, // Apple - 'applebot', - 'applebot-extended', + Crawler.APPLE_BOT, + Crawler.APPLE_BOT_EXTENDED, // Brave - 'bravebot', + Crawler.BRAVE_BOT, // ByteDance - 'bytespider', - 'tiktokspider', + Crawler.BYTEDANCE_BYTESPIDER, + Crawler.BYTEDANCE_TIKTOKSPIDER, // Cohere - 'cohere-training-data-crawler', + Crawler.COHERE_TRAINING_DATA_CRAWLER, // Common Crawl - 'ccbot', + Crawler.COMMON_CRAWL_CCBOT, // Coveo - 'coveobot', + Crawler.COVEO_BOT, // DataForSeo - 'dataforseobot', + Crawler.DATAFORSEO_BOT, // DeepSeek - 'deepseekbot', + Crawler.DEEPSEEK_BOT, // Diffbot - 'diffbot', + Crawler.DIFFBOT, // Google - 'googleother', - 'googleother-image', - 'googleother-video', - 'google-cloudvertexbot', - 'google-extended', + Crawler.GOOGLE_EXTENDED, + Crawler.GOOGLE_OTHER, + Crawler.GOOGLE_OTHER_IMAGE, + Crawler.GOOGLE_OTHER_VIDEO, + Crawler.GOOGLE_CLOUDVERTEXBOT, // Hive AI - 'imagesiftbot', + Crawler.HIVE_IMAGESIFTBOT, // Huawei - 'petalbot', - 'pangubot', + Crawler.HUAWEI_PETALBOT, + Crawler.HUAWEI_PANGUBOT, // Hugging Face - 'huggingface-bot', + Crawler.HUGGINGFACE_BOT, // Kangaroo - 'kangaroo bot', + Crawler.KANGAROO_BOT, // Mendable.ai - 'firecrawlagent', + Crawler.FIRECRAWL_AGENT, // Meta - 'facebookbot', - 'meta-externalagent', + Crawler.META_FACEBOOKBOT, + Crawler.META_EXTERNALAGENT, // OpenAI - 'gptbot', - 'oai-searchbot', + Crawler.OPENAI_GPTBOT, + Crawler.OPENAI_SEARCH_BOT, // Perplexity - 'perplexitybot', + Crawler.PERPLEXITY_BOT, // Replicate - 'replicate-bot', + Crawler.REPLICATE_BOT, // Runpod - 'runpod-bot', + Crawler.RUNPOD_BOT, // SB Intuitions - 'sbintuitionsbot', + Crawler.SB_INTUITIONS_BOT, // Semrush - 'semrushbot-ocob', + Crawler.SEMRUSH_BOT_CONTENTSHAKE, // Timpi - 'timpibot', + Crawler.TIMPI_BOT, // Together AI - 'together-bot', + Crawler.TOGETHER_BOT, // Velen.io - 'velenpublicwebcrawler', + Crawler.HUNTER_VELENPUBLICWEBCRAWLER, // Vercel - 'v0bot', + Crawler.VERCEL_V0BOT, // Webz.io - 'omgili', - 'omgilibot', - 'webzio-extended', + Crawler.WEBZIO_OMGILI, + Crawler.WEBZIO_OMGILI_BOT, + Crawler.WEBZIO_EXTENDED, // X - 'xai-bot', + Crawler.XAI_BOT, // You.com - 'youbot', + Crawler.YOU_BOT, // Zhipu AI - 'chatglm-spider', - - // Zyte - 'scrapy' - - ].includes(String(toResult(resultOrUA, Bots).browser.name).toLowerCase()); + Crawler.ZHIPU_CHATGLM_SPIDER + ] + .map((s) => s.toLowerCase()) + .includes(String(toResult(resultOrUA, Bots).browser.name).toLowerCase()); const isBot = (resultOrUA) => [ 'cli',