From fdd5a5e8e61ad6c0da5769bf2fba343915c102e7 Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 16:56:19 +0200 Subject: [PATCH 01/16] Add support for AI crawl bots --- src/constants.js | 22 ++++ src/parser-browsers.js | 187 +++++++++++++++++++++++++++ test/acceptance/useragentstrings.yml | 135 +++++++++++++++++++ 3 files changed, 344 insertions(+) diff --git a/src/constants.js b/src/constants.js index e16e23d6..ce7d5380 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,6 +1,7 @@ // NOTE: this list must be up-to-date with browsers listed in // test/acceptance/useragentstrings.yml export const BROWSER_ALIASES_MAP = { + 'Applebot-Extended': 'applebot_extended', AmazonBot: 'amazonbot', 'Amazon Silk': 'amazon_silk', 'Android Browser': 'android', @@ -9,15 +10,21 @@ export const BROWSER_ALIASES_MAP = { BingCrawler: 'bingcrawler', BlackBerry: 'blackberry', Chrome: 'chrome', + 'ChatGPT-User': 'chatgpt_user', + ClaudeBot: 'claudebot', Chromium: 'chromium', + Diffbot: 'diffbot', DuckDuckBot: 'duckduckbot', Electron: 'electron', Epiphany: 'epiphany', + FacebookBot: 'facebookbot', Firefox: 'firefox', Focus: 'focus', Generic: 'generic', 'Google Search': 'google_search', + 'Google-Extended': 'google_extended', Googlebot: 'googlebot', + GPTBot: 'gptbot', 'Internet Explorer': 'ie', InternetArchiveCrawler: 'internetarchivecrawler', 'K-Meleon': 'k_meleon', @@ -26,11 +33,14 @@ export const BROWSER_ALIASES_MAP = { 'Microsoft Edge': 'edge', 'MZ Browser': 'mz', 'NAVER Whale Browser': 'naver', + 'OAI-SearchBot': 'oai_searchbot', + Omgilibot: 'omgilibot', Opera: 'opera', 'Opera Coast': 'opera_coast', 'Pale Moon': 'pale_moon', PhantomJS: 'phantomjs', PingdomBot: 'pingdombot', + PerplexityBot: 'perplexitybot', Puffin: 'puffin', QQ: 'qq', QQLite: 'qqlite', @@ -50,9 +60,11 @@ export const BROWSER_ALIASES_MAP = { YahooSlurp: 'yahooslurp', 'Yandex Browser': 'yandex', YandexBot: 'yandexbot', + YouBot: 'youbot', }; export const BROWSER_MAP = { + applebot_extended: 'Applebot-Extended', amazonbot: 'AmazonBot', amazon_silk: 'Amazon Silk', android: 'Android Browser', @@ -61,16 +73,22 @@ export const BROWSER_MAP = { bingcrawler: 'BingCrawler', blackberry: 'BlackBerry', chrome: 'Chrome', + chatgpt_user: 'ChatGPT-User', + claudebot: 'ClaudeBot', chromium: 'Chromium', + diffbot: 'Diffbot', duckduckbot: 'DuckDuckBot', edge: 'Microsoft Edge', electron: 'Electron', epiphany: 'Epiphany', + facebookbot: 'FacebookBot', firefox: 'Firefox', focus: 'Focus', generic: 'Generic', + google_extended: 'Google-Extended', google_search: 'Google Search', googlebot: 'Googlebot', + gptbot: 'GPTBot', ie: 'Internet Explorer', internetarchivecrawler: 'InternetArchiveCrawler', k_meleon: 'K-Meleon', @@ -83,6 +101,9 @@ export const BROWSER_MAP = { pale_moon: 'Pale Moon', phantomjs: 'PhantomJS', pingdombot: 'PingdomBot', + perplexitybot: 'PerplexityBot', + oai_searchbot: 'OAI-SearchBot', + omgilibot: 'Omgilibot', puffin: 'Puffin', qq: 'QQ Browser', qqlite: 'QQ Browser Lite', @@ -102,6 +123,7 @@ export const BROWSER_MAP = { yahooslurp: 'YahooSlurp', yandex: 'Yandex Browser', yandexbot: 'YandexBot', + youbot: 'YouBot', }; export const PLATFORMS_MAP = { diff --git a/src/parser-browsers.js b/src/parser-browsers.js index 55d4267f..dceceb8b 100644 --- a/src/parser-browsers.js +++ b/src/parser-browsers.js @@ -28,6 +28,193 @@ import Utils from './utils.js'; const commonVersionIdentifier = /version\/(\d+(\.?_?\d+)+)/i; const browsersList = [ + /* GPTBot */ + { + test: [/gptbot/i], + describe(ua) { + const browser = { + name: 'GPTBot', + }; + const version = Utils.getFirstMatch(/gptbot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* ChatGPT-User */ + { + test: [/chatgpt-user/i], + describe(ua) { + const browser = { + name: 'ChatGPT-User', + }; + const version = Utils.getFirstMatch(/chatgpt-user\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* OAI-SearchBot */ + { + test: [/oai-searchbot/i], + describe(ua) { + const browser = { + name: 'OAI-SearchBot', + }; + const version = Utils.getFirstMatch(/oai-searchbot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* Google-Extended */ + { + test: [/google-extended/i], + describe(ua) { + const browser = { + name: 'Google-Extended', + }; + const version = Utils.getFirstMatch(/google-extended\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* Applebot-Extended */ + { + test: [/applebot-extended/i], + describe(ua) { + const browser = { + name: 'Applebot-Extended', + }; + const version = Utils.getFirstMatch(/applebot-extended\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* ClaudeBot */ + { + test: [/claudebot/i, /claude-web/i], + describe(ua) { + const browser = { + name: 'ClaudeBot', + }; + const version = Utils.getFirstMatch(/(?:claudebot|claude-web)\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* Omgilibot */ + { + test: [/omgilibot/i], + describe(ua) { + const browser = { + name: 'Omgilibot', + }; + const version = Utils.getFirstMatch(/omgilibot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* FacebookBot */ + { + test: [/facebookbot/i], + describe(ua) { + const browser = { + name: 'FacebookBot', + }; + const version = Utils.getFirstMatch(/facebookbot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* Diffbot */ + { + test: [/diffbot/i], + describe(ua) { + const browser = { + name: 'Diffbot', + }; + const version = Utils.getFirstMatch(/diffbot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* PerplexityBot */ + { + test: [/perplexitybot/i], + describe(ua) { + const browser = { + name: 'PerplexityBot', + }; + const version = Utils.getFirstMatch(/perplexitybot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* YouBot */ + { + test: [/youbot/i], + describe(ua) { + const browser = { + name: 'YouBot', + }; + const version = Utils.getFirstMatch(/youbot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + /* Googlebot */ { test: [/googlebot/i], diff --git a/test/acceptance/useragentstrings.yml b/test/acceptance/useragentstrings.yml index 008dc947..c1ada06f 100644 --- a/test/acceptance/useragentstrings.yml +++ b/test/acceptance/useragentstrings.yml @@ -2549,6 +2549,141 @@ vendor: "Google" engine: name: "Blink" + GPTBot: + - + ua: "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.1; +https://openai.com/gptbot)" + spec: + browser: + name: "GPTBot" + version: "1.1" + os: {} + platform: + type: "bot" + vendor: "OpenAI" + engine: {} + ChatGPT-User: + - + ua: "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ChatGPT-User/1.0; +https://openai.com/bot)" + spec: + browser: + name: "ChatGPT-User" + version: "1.0" + os: {} + platform: + type: "bot" + vendor: "OpenAI" + engine: {} + OAI-SearchBot: + - + ua: "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot)" + spec: + browser: + name: "OAI-SearchBot" + version: "1.0" + os: {} + platform: + type: "bot" + vendor: "OpenAI" + engine: {} + Google-Extended: + - + ua: "Mozilla/5.0 (compatible; Google-Extended; +https://developers.google.com/search/help/google-extended)" + spec: + browser: + name: "Google-Extended" + os: {} + platform: + type: "bot" + vendor: "Google" + engine: {} + Applebot-Extended: + - + ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15 (compatible; Applebot-Extended/1.0; +https://support.apple.com/applebot)" + spec: + browser: + name: "Applebot-Extended" + version: "1.0" + os: + name: "macOS" + version: "10.15.7" + versionName: "Catalina" + platform: + type: "bot" + vendor: "Apple" + engine: + name: "WebKit" + ClaudeBot: + - + ua: "Mozilla/5.0 (compatible; ClaudeBot/1.0; +https://www.anthropic.com/claudebot)" + spec: + browser: + name: "ClaudeBot" + version: "1.0" + os: {} + platform: + type: "bot" + vendor: "Anthropic" + engine: {} + Omgilibot: + - + ua: "Mozilla/5.0 (compatible; Omgilibot/1.0; +https://www.omgili.com)" + spec: + browser: + name: "Omgilibot" + version: "1.0" + os: {} + platform: + type: "bot" + vendor: "Omgili" + engine: {} + FacebookBot: + - + ua: "Mozilla/5.0 (compatible; FacebookBot/1.0; +https://developers.facebook.com/docs/sharing/best-practices#crawl)" + spec: + browser: + name: "FacebookBot" + version: "1.0" + os: {} + platform: + type: "bot" + vendor: "Meta" + engine: {} + Diffbot: + - + ua: "Mozilla/5.0 (compatible; Diffbot/3.0; +http://www.diffbot.com)" + spec: + browser: + name: "Diffbot" + version: "3.0" + os: {} + platform: + type: "bot" + vendor: "Diffbot" + engine: {} + PerplexityBot: + - + ua: "Mozilla/5.0 (compatible; PerplexityBot/1.0; +https://www.perplexity.ai/bot)" + spec: + browser: + name: "PerplexityBot" + version: "1.0" + os: {} + platform: + type: "bot" + vendor: "Perplexity AI" + engine: {} + YouBot: + - + ua: "Mozilla/5.0 (compatible; YouBot/1.0; +https://you.com/bot)" + spec: + browser: + name: "YouBot" + version: "1.0" + os: {} + platform: + type: "bot" + vendor: "You.com" + engine: {} AmazonBot: - ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot)" From a5dd57db0749175a8da9387c5c426456c43999ac Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 17:21:53 +0200 Subject: [PATCH 02/16] wip --- src/constants.js | 8 +-- src/parser-browsers.js | 66 +++++-------------- src/parser-platforms.js | 99 ++++++++++++++++++++++++++++ test/acceptance/useragentstrings.yml | 42 +++--------- 4 files changed, 126 insertions(+), 89 deletions(-) diff --git a/src/constants.js b/src/constants.js index ce7d5380..2b123b3c 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,7 +1,6 @@ // NOTE: this list must be up-to-date with browsers listed in // test/acceptance/useragentstrings.yml export const BROWSER_ALIASES_MAP = { - 'Applebot-Extended': 'applebot_extended', AmazonBot: 'amazonbot', 'Amazon Silk': 'amazon_silk', 'Android Browser': 'android', @@ -17,12 +16,10 @@ export const BROWSER_ALIASES_MAP = { DuckDuckBot: 'duckduckbot', Electron: 'electron', Epiphany: 'epiphany', - FacebookBot: 'facebookbot', Firefox: 'firefox', Focus: 'focus', Generic: 'generic', 'Google Search': 'google_search', - 'Google-Extended': 'google_extended', Googlebot: 'googlebot', GPTBot: 'gptbot', 'Internet Explorer': 'ie', @@ -30,6 +27,7 @@ export const BROWSER_ALIASES_MAP = { 'K-Meleon': 'k_meleon', Maxthon: 'maxthon', MetaWebCrawler: 'metawebcrawler', + 'Meta-WebIndexer': 'meta_webindexer', 'Microsoft Edge': 'edge', 'MZ Browser': 'mz', 'NAVER Whale Browser': 'naver', @@ -64,7 +62,6 @@ export const BROWSER_ALIASES_MAP = { }; export const BROWSER_MAP = { - applebot_extended: 'Applebot-Extended', amazonbot: 'AmazonBot', amazon_silk: 'Amazon Silk', android: 'Android Browser', @@ -81,11 +78,9 @@ export const BROWSER_MAP = { edge: 'Microsoft Edge', electron: 'Electron', epiphany: 'Epiphany', - facebookbot: 'FacebookBot', firefox: 'Firefox', focus: 'Focus', generic: 'Generic', - google_extended: 'Google-Extended', google_search: 'Google Search', googlebot: 'Googlebot', gptbot: 'GPTBot', @@ -94,6 +89,7 @@ export const BROWSER_MAP = { k_meleon: 'K-Meleon', maxthon: 'Maxthon', metawebcrawler: 'MetaWebCrawler', + meta_webindexer: 'Meta-WebIndexer', mz: 'MZ Browser', naver: 'NAVER Whale Browser', opera: 'Opera', diff --git a/src/parser-browsers.js b/src/parser-browsers.js index dceceb8b..f667dbc2 100644 --- a/src/parser-browsers.js +++ b/src/parser-browsers.js @@ -79,40 +79,6 @@ const browsersList = [ }, }, - /* Google-Extended */ - { - test: [/google-extended/i], - describe(ua) { - const browser = { - name: 'Google-Extended', - }; - const version = Utils.getFirstMatch(/google-extended\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); - - if (version) { - browser.version = version; - } - - return browser; - }, - }, - - /* Applebot-Extended */ - { - test: [/applebot-extended/i], - describe(ua) { - const browser = { - name: 'Applebot-Extended', - }; - const version = Utils.getFirstMatch(/applebot-extended\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); - - if (version) { - browser.version = version; - } - - return browser; - }, - }, - /* ClaudeBot */ { test: [/claudebot/i, /claude-web/i], @@ -147,14 +113,14 @@ const browsersList = [ }, }, - /* FacebookBot */ + /* Diffbot */ { - test: [/facebookbot/i], + test: [/diffbot/i], describe(ua) { const browser = { - name: 'FacebookBot', + name: 'Diffbot', }; - const version = Utils.getFirstMatch(/facebookbot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + const version = Utils.getFirstMatch(/diffbot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; @@ -164,14 +130,14 @@ const browsersList = [ }, }, - /* Diffbot */ + /* PerplexityBot */ { - test: [/diffbot/i], + test: [/perplexitybot/i], describe(ua) { const browser = { - name: 'Diffbot', + name: 'PerplexityBot', }; - const version = Utils.getFirstMatch(/diffbot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + const version = Utils.getFirstMatch(/perplexitybot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; @@ -181,14 +147,14 @@ const browsersList = [ }, }, - /* PerplexityBot */ + /* YouBot */ { - test: [/perplexitybot/i], + test: [/youbot/i], describe(ua) { const browser = { - name: 'PerplexityBot', + name: 'YouBot', }; - const version = Utils.getFirstMatch(/perplexitybot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + const version = Utils.getFirstMatch(/youbot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; @@ -198,14 +164,14 @@ const browsersList = [ }, }, - /* YouBot */ + /* Meta-WebIndexer */ { - test: [/youbot/i], + test: [/meta-webindexer/i], describe(ua) { const browser = { - name: 'YouBot', + name: 'Meta-WebIndexer', }; - const version = Utils.getFirstMatch(/youbot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + const version = Utils.getFirstMatch(/meta-webindexer\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); if (version) { browser.version = version; diff --git a/src/parser-platforms.js b/src/parser-platforms.js index 36e1fb56..5258424e 100644 --- a/src/parser-platforms.js +++ b/src/parser-platforms.js @@ -29,6 +29,39 @@ export default [ }, }, + /* GPTBot */ + { + test: [/gptbot/i], + describe() { + return { + type: PLATFORMS_MAP.bot, + vendor: 'OpenAI', + }; + }, + }, + + /* ChatGPT-User */ + { + test: [/chatgpt-user/i], + describe() { + return { + type: PLATFORMS_MAP.bot, + vendor: 'OpenAI', + }; + }, + }, + + /* OAI-SearchBot */ + { + test: [/oai-searchbot/i], + describe() { + return { + type: PLATFORMS_MAP.bot, + vendor: 'OpenAI', + }; + }, + }, + /* Baidu */ { test: [/baiduspider/i], @@ -62,6 +95,61 @@ export default [ }, }, + /* ClaudeBot */ + { + test: [/claudebot/i, /claude-web/i, /claude-user/i, /claude-searchbot/i], + describe() { + return { + type: PLATFORMS_MAP.bot, + vendor: 'Anthropic', + }; + }, + }, + + /* Omgilibot */ + { + test: [/omgilibot/i, /webzio-extended/i], + describe() { + return { + type: PLATFORMS_MAP.bot, + vendor: 'Omgili', + }; + }, + }, + + /* Diffbot */ + { + test: [/diffbot/i], + describe() { + return { + type: PLATFORMS_MAP.bot, + vendor: 'Diffbot', + }; + }, + }, + + /* PerplexityBot */ + { + test: [/perplexitybot/i], + describe() { + return { + type: PLATFORMS_MAP.bot, + vendor: 'Perplexity AI', + }; + }, + }, + + /* YouBot */ + { + test: [/youbot/i], + describe() { + return { + type: PLATFORMS_MAP.bot, + vendor: 'You.com', + }; + }, + }, + /* Internet Archive Crawler */ { test: [/ia_archiver/i], @@ -73,6 +161,17 @@ export default [ }, }, + /* Meta-WebIndexer */ + { + test: [/meta-webindexer/i], + describe() { + return { + type: PLATFORMS_MAP.bot, + vendor: 'Meta', + }; + }, + }, + /* Meta Web Crawler */ { test: [/facebookexternalhit/i, /facebookcatalog/i], diff --git a/test/acceptance/useragentstrings.yml b/test/acceptance/useragentstrings.yml index c1ada06f..2f473bf0 100644 --- a/test/acceptance/useragentstrings.yml +++ b/test/acceptance/useragentstrings.yml @@ -2560,7 +2560,8 @@ platform: type: "bot" vendor: "OpenAI" - engine: {} + engine: + name: "Blink" ChatGPT-User: - ua: "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ChatGPT-User/1.0; +https://openai.com/bot)" @@ -2572,7 +2573,8 @@ platform: type: "bot" vendor: "OpenAI" - engine: {} + engine: + name: "Blink" OAI-SearchBot: - ua: "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot)" @@ -2584,34 +2586,8 @@ platform: type: "bot" vendor: "OpenAI" - engine: {} - Google-Extended: - - - ua: "Mozilla/5.0 (compatible; Google-Extended; +https://developers.google.com/search/help/google-extended)" - spec: - browser: - name: "Google-Extended" - os: {} - platform: - type: "bot" - vendor: "Google" - engine: {} - Applebot-Extended: - - - ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15 (compatible; Applebot-Extended/1.0; +https://support.apple.com/applebot)" - spec: - browser: - name: "Applebot-Extended" - version: "1.0" - os: - name: "macOS" - version: "10.15.7" - versionName: "Catalina" - platform: - type: "bot" - vendor: "Apple" engine: - name: "WebKit" + name: "Blink" ClaudeBot: - ua: "Mozilla/5.0 (compatible; ClaudeBot/1.0; +https://www.anthropic.com/claudebot)" @@ -2636,13 +2612,13 @@ type: "bot" vendor: "Omgili" engine: {} - FacebookBot: + Meta-WebIndexer: - - ua: "Mozilla/5.0 (compatible; FacebookBot/1.0; +https://developers.facebook.com/docs/sharing/best-practices#crawl)" + ua: "Mozilla/5.0 (compatible; meta-webindexer/1.1; +http://developer.facebook.com/docs/sharing/webmasters/crawler)" spec: browser: - name: "FacebookBot" - version: "1.0" + name: "Meta-WebIndexer" + version: "1.1" os: {} platform: type: "bot" From 6bc9041a246a21a3bc45b8b9a25318a1663843ba Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 17:24:12 +0200 Subject: [PATCH 03/16] fixed facebook --- src/constants.js | 4 ++-- src/parser-browsers.js | 4 ++-- test/acceptance/useragentstrings.yml | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/constants.js b/src/constants.js index 2b123b3c..8fc5190a 100644 --- a/src/constants.js +++ b/src/constants.js @@ -16,6 +16,7 @@ export const BROWSER_ALIASES_MAP = { DuckDuckBot: 'duckduckbot', Electron: 'electron', Epiphany: 'epiphany', + FacebookExternalHit: 'facebookexternalhit', Firefox: 'firefox', Focus: 'focus', Generic: 'generic', @@ -26,7 +27,6 @@ export const BROWSER_ALIASES_MAP = { InternetArchiveCrawler: 'internetarchivecrawler', 'K-Meleon': 'k_meleon', Maxthon: 'maxthon', - MetaWebCrawler: 'metawebcrawler', 'Meta-WebIndexer': 'meta_webindexer', 'Microsoft Edge': 'edge', 'MZ Browser': 'mz', @@ -88,7 +88,7 @@ export const BROWSER_MAP = { internetarchivecrawler: 'InternetArchiveCrawler', k_meleon: 'K-Meleon', maxthon: 'Maxthon', - metawebcrawler: 'MetaWebCrawler', + facebookexternalhit: 'FacebookExternalHit', meta_webindexer: 'Meta-WebIndexer', mz: 'MZ Browser', naver: 'NAVER Whale Browser', diff --git a/src/parser-browsers.js b/src/parser-browsers.js index f667dbc2..51a4f9db 100644 --- a/src/parser-browsers.js +++ b/src/parser-browsers.js @@ -283,12 +283,12 @@ const browsersList = [ }, }, - /* MetaWebCrawler */ + /* FacebookExternalHit */ { test: [/facebookexternalhit/i, /facebookcatalog/i], describe() { return { - name: 'MetaWebCrawler', + name: 'FacebookExternalHit', }; }, }, diff --git a/test/acceptance/useragentstrings.yml b/test/acceptance/useragentstrings.yml index 2f473bf0..24e7955b 100644 --- a/test/acceptance/useragentstrings.yml +++ b/test/acceptance/useragentstrings.yml @@ -2750,12 +2750,12 @@ type: "bot" vendor: "Internet Archive" engine: {} - MetaWebCrawler: + FacebookExternalHit: - ua: "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" spec: browser: - name: "MetaWebCrawler" + name: "FacebookExternalHit" os: {} platform: type: "bot" @@ -2765,7 +2765,7 @@ ua: "facebookexternalhit/1.1" spec: browser: - name: "MetaWebCrawler" + name: "FacebookExternalHit" os: {} platform: type: "bot" @@ -2775,7 +2775,7 @@ ua: "facebookcatalog/1.0" spec: browser: - name: "MetaWebCrawler" + name: "FacebookExternalHit" os: {} platform: type: "bot" From 95c814e1803c23f442fecce0f0df89cb76fc7ab4 Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 17:26:50 +0200 Subject: [PATCH 04/16] fixed tests --- test/acceptance/useragentstrings.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/test/acceptance/useragentstrings.yml b/test/acceptance/useragentstrings.yml index 24e7955b..fcd40635 100644 --- a/test/acceptance/useragentstrings.yml +++ b/test/acceptance/useragentstrings.yml @@ -2614,7 +2614,18 @@ engine: {} Meta-WebIndexer: - - ua: "Mozilla/5.0 (compatible; meta-webindexer/1.1; +http://developer.facebook.com/docs/sharing/webmasters/crawler)" + ua: "meta-webindexer/1.1" + spec: + browser: + name: "Meta-WebIndexer" + version: "1.1" + os: {} + platform: + type: "bot" + vendor: "Meta" + engine: {} + - + ua: "meta-webindexer/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler)" spec: browser: name: "Meta-WebIndexer" From 512aa721d846a89c8b8436cb5c4194274af14aa9 Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 17:31:40 +0200 Subject: [PATCH 05/16] perplexity --- src/constants.js | 2 ++ src/parser-browsers.js | 10 ++++++++++ src/parser-platforms.js | 11 +++++++++++ test/acceptance/useragentstrings.yml | 14 +++++++++++++- 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/constants.js b/src/constants.js index 8fc5190a..0fdbcc94 100644 --- a/src/constants.js +++ b/src/constants.js @@ -39,6 +39,7 @@ export const BROWSER_ALIASES_MAP = { PhantomJS: 'phantomjs', PingdomBot: 'pingdombot', PerplexityBot: 'perplexitybot', + 'Perplexity-User': 'perplexity_user', Puffin: 'puffin', QQ: 'qq', QQLite: 'qqlite', @@ -98,6 +99,7 @@ export const BROWSER_MAP = { phantomjs: 'PhantomJS', pingdombot: 'PingdomBot', perplexitybot: 'PerplexityBot', + perplexity_user: 'Perplexity-User', oai_searchbot: 'OAI-SearchBot', omgilibot: 'Omgilibot', puffin: 'Puffin', diff --git a/src/parser-browsers.js b/src/parser-browsers.js index 51a4f9db..b2beb415 100644 --- a/src/parser-browsers.js +++ b/src/parser-browsers.js @@ -147,6 +147,16 @@ const browsersList = [ }, }, + /* Perplexity-User */ + { + test: [/perplexity-user/i], + describe(ua) { + const browser = { + name: 'Perplexity-User', + }; + }, + }, + /* YouBot */ { test: [/youbot/i], diff --git a/src/parser-platforms.js b/src/parser-platforms.js index 5258424e..26ebc1a1 100644 --- a/src/parser-platforms.js +++ b/src/parser-platforms.js @@ -139,6 +139,17 @@ export default [ }, }, + /* Perplexity-User */ + { + test: [/perplexity-user/i], + describe() { + return { + type: PLATFORMS_MAP.bot, + vendor: 'Perplexity AI', + }; + }, + }, + /* YouBot */ { test: [/youbot/i], diff --git a/test/acceptance/useragentstrings.yml b/test/acceptance/useragentstrings.yml index fcd40635..bd942de7 100644 --- a/test/acceptance/useragentstrings.yml +++ b/test/acceptance/useragentstrings.yml @@ -2649,7 +2649,7 @@ engine: {} PerplexityBot: - - ua: "Mozilla/5.0 (compatible; PerplexityBot/1.0; +https://www.perplexity.ai/bot)" + ua: "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; PerplexityBot/1.0; +https://perplexity.ai/perplexitybot)" spec: browser: name: "PerplexityBot" @@ -2659,6 +2659,18 @@ type: "bot" vendor: "Perplexity AI" engine: {} + Perplexity‑User: + - + ua: "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Perplexity-User/1.0; +https://perplexity.ai/perplexity-user)" + spec: + browser: + name: "Perplexity-User" + version: "1.0" + os: {} + platform: + type: "bot" + vendor: "Perplexity AI" + engine: {} YouBot: - ua: "Mozilla/5.0 (compatible; YouBot/1.0; +https://you.com/bot)" From 17bd1eacd7a4d487ea85e9d9a5973cb6d35af26d Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 17:33:32 +0200 Subject: [PATCH 06/16] wip --- test/acceptance/useragentstrings.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/acceptance/useragentstrings.yml b/test/acceptance/useragentstrings.yml index bd942de7..191417c5 100644 --- a/test/acceptance/useragentstrings.yml +++ b/test/acceptance/useragentstrings.yml @@ -2658,8 +2658,9 @@ platform: type: "bot" vendor: "Perplexity AI" - engine: {} - Perplexity‑User: + engine: + name: "Blink" + Perplexity-User: - ua: "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Perplexity-User/1.0; +https://perplexity.ai/perplexity-user)" spec: From d113b3efafc28061a88e262b67d4181706d430d1 Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 17:36:15 +0200 Subject: [PATCH 07/16] wip --- src/parser-browsers.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/parser-browsers.js b/src/parser-browsers.js index b2beb415..c70383fa 100644 --- a/src/parser-browsers.js +++ b/src/parser-browsers.js @@ -154,6 +154,13 @@ const browsersList = [ const browser = { name: 'Perplexity-User', }; + const version = Utils.getFirstMatch(/perplexity-user\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; }, }, From 9862c695113c03198236f45bb98edcdc526feb69 Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 17:38:48 +0200 Subject: [PATCH 08/16] wip --- test/acceptance/useragentstrings.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/acceptance/useragentstrings.yml b/test/acceptance/useragentstrings.yml index 191417c5..0999889b 100644 --- a/test/acceptance/useragentstrings.yml +++ b/test/acceptance/useragentstrings.yml @@ -2671,7 +2671,8 @@ platform: type: "bot" vendor: "Perplexity AI" - engine: {} + engine: + name: "Blink" YouBot: - ua: "Mozilla/5.0 (compatible; YouBot/1.0; +https://you.com/bot)" From 283c07daea8cd2ce560e936f6f8a113c76e2bb2c Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 17:47:23 +0200 Subject: [PATCH 09/16] webzio --- src/parser-platforms.js | 2 +- test/acceptance/useragentstrings.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/parser-platforms.js b/src/parser-platforms.js index 26ebc1a1..00d60ee8 100644 --- a/src/parser-platforms.js +++ b/src/parser-platforms.js @@ -112,7 +112,7 @@ export default [ describe() { return { type: PLATFORMS_MAP.bot, - vendor: 'Omgili', + vendor: 'Webz.io', }; }, }, diff --git a/test/acceptance/useragentstrings.yml b/test/acceptance/useragentstrings.yml index 0999889b..e2ed5045 100644 --- a/test/acceptance/useragentstrings.yml +++ b/test/acceptance/useragentstrings.yml @@ -2610,7 +2610,7 @@ os: {} platform: type: "bot" - vendor: "Omgili" + vendor: "Webz.io" engine: {} Meta-WebIndexer: - From 8e01721a36fca496ce3068e13baf969bed80cce3 Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 17:51:16 +0200 Subject: [PATCH 10/16] alphabetical order --- src/constants.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/constants.js b/src/constants.js index 0fdbcc94..607b7460 100644 --- a/src/constants.js +++ b/src/constants.js @@ -36,10 +36,10 @@ export const BROWSER_ALIASES_MAP = { Opera: 'opera', 'Opera Coast': 'opera_coast', 'Pale Moon': 'pale_moon', - PhantomJS: 'phantomjs', - PingdomBot: 'pingdombot', PerplexityBot: 'perplexitybot', 'Perplexity-User': 'perplexity_user', + PhantomJS: 'phantomjs', + PingdomBot: 'pingdombot', Puffin: 'puffin', QQ: 'qq', QQLite: 'qqlite', @@ -79,6 +79,7 @@ export const BROWSER_MAP = { edge: 'Microsoft Edge', electron: 'Electron', epiphany: 'Epiphany', + facebookexternalhit: 'FacebookExternalHit', firefox: 'Firefox', focus: 'Focus', generic: 'Generic', @@ -89,19 +90,18 @@ export const BROWSER_MAP = { internetarchivecrawler: 'InternetArchiveCrawler', k_meleon: 'K-Meleon', maxthon: 'Maxthon', - facebookexternalhit: 'FacebookExternalHit', meta_webindexer: 'Meta-WebIndexer', mz: 'MZ Browser', naver: 'NAVER Whale Browser', opera: 'Opera', opera_coast: 'Opera Coast', + oai_searchbot: 'OAI-SearchBot', + omgilibot: 'Omgilibot', pale_moon: 'Pale Moon', - phantomjs: 'PhantomJS', - pingdombot: 'PingdomBot', perplexitybot: 'PerplexityBot', perplexity_user: 'Perplexity-User', - oai_searchbot: 'OAI-SearchBot', - omgilibot: 'Omgilibot', + phantomjs: 'PhantomJS', + pingdombot: 'PingdomBot', puffin: 'Puffin', qq: 'QQ Browser', qqlite: 'QQ Browser Lite', From 0f59e149f4f080f224bff993e6504918e805d812 Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 17:53:45 +0200 Subject: [PATCH 11/16] claudebot --- src/parser-browsers.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/parser-browsers.js b/src/parser-browsers.js index c70383fa..16a6c92a 100644 --- a/src/parser-browsers.js +++ b/src/parser-browsers.js @@ -81,13 +81,13 @@ const browsersList = [ /* ClaudeBot */ { - test: [/claudebot/i, /claude-web/i], + test: [/claudebot/i, /claude-web/i, /claude-user/i, /claude-searchbot/i], describe(ua) { const browser = { name: 'ClaudeBot', }; - const version = Utils.getFirstMatch(/(?:claudebot|claude-web)\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); - + const version = Utils.getFirstMatch(/(?:claudebot|claude-web|claude-user|claude-searchbot)\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + if (version) { browser.version = version; } @@ -103,8 +103,8 @@ const browsersList = [ const browser = { name: 'Omgilibot', }; - const version = Utils.getFirstMatch(/omgilibot\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); - + const version = Utils.getFirstMatch(/(?:omgilibot|webzio-extended)\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + if (version) { browser.version = version; } From 3801d82d4f752c54a40604a3e5758dd234d021a3 Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 17:54:10 +0200 Subject: [PATCH 12/16] webzio --- src/parser-browsers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser-browsers.js b/src/parser-browsers.js index 16a6c92a..3c4ae405 100644 --- a/src/parser-browsers.js +++ b/src/parser-browsers.js @@ -98,7 +98,7 @@ const browsersList = [ /* Omgilibot */ { - test: [/omgilibot/i], + test: [/omgilibot/i, /webzio-extended/i], describe(ua) { const browser = { name: 'Omgilibot', From 6c8b29c5a22466b972d81def3624cd35b4065637 Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 17:54:56 +0200 Subject: [PATCH 13/16] perplexity --- test/acceptance/useragentstrings.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/test/acceptance/useragentstrings.yml b/test/acceptance/useragentstrings.yml index e2ed5045..c6f5ea18 100644 --- a/test/acceptance/useragentstrings.yml +++ b/test/acceptance/useragentstrings.yml @@ -2661,18 +2661,18 @@ engine: name: "Blink" Perplexity-User: - - - ua: "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Perplexity-User/1.0; +https://perplexity.ai/perplexity-user)" - spec: - browser: - name: "Perplexity-User" - version: "1.0" - os: {} - platform: - type: "bot" - vendor: "Perplexity AI" - engine: - name: "Blink" + - + ua: "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Perplexity-User/1.0; +https://perplexity.ai/perplexity-user)" + spec: + browser: + name: "Perplexity-User" + version: "1.0" + os: {} + platform: + type: "bot" + vendor: "Perplexity AI" + engine: + name: "Blink" YouBot: - ua: "Mozilla/5.0 (compatible; YouBot/1.0; +https://you.com/bot)" From ba5dd3b75a41d670619743a40195feb23716f614 Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 17:59:15 +0200 Subject: [PATCH 14/16] meta --- src/constants.js | 6 +++ src/parser-browsers.js | 53 ++++++++++++++++++++- src/parser-platforms.js | 33 +++++++++++++ test/acceptance/useragentstrings.yml | 69 ++++++++++++++++++++++++++++ 4 files changed, 160 insertions(+), 1 deletion(-) diff --git a/src/constants.js b/src/constants.js index 607b7460..2f4f7186 100644 --- a/src/constants.js +++ b/src/constants.js @@ -27,6 +27,9 @@ export const BROWSER_ALIASES_MAP = { InternetArchiveCrawler: 'internetarchivecrawler', 'K-Meleon': 'k_meleon', Maxthon: 'maxthon', + 'Meta-ExternalAds': 'meta_externalads', + 'Meta-ExternalAgent': 'meta_externalagent', + 'Meta-ExternalFetcher': 'meta_externalfetcher', 'Meta-WebIndexer': 'meta_webindexer', 'Microsoft Edge': 'edge', 'MZ Browser': 'mz', @@ -90,6 +93,9 @@ export const BROWSER_MAP = { internetarchivecrawler: 'InternetArchiveCrawler', k_meleon: 'K-Meleon', maxthon: 'Maxthon', + meta_externalads: 'Meta-ExternalAds', + meta_externalagent: 'Meta-ExternalAgent', + meta_externalfetcher: 'Meta-ExternalFetcher', meta_webindexer: 'Meta-WebIndexer', mz: 'MZ Browser', naver: 'NAVER Whale Browser', diff --git a/src/parser-browsers.js b/src/parser-browsers.js index 3c4ae405..0f071a6e 100644 --- a/src/parser-browsers.js +++ b/src/parser-browsers.js @@ -87,7 +87,7 @@ const browsersList = [ name: 'ClaudeBot', }; const version = Utils.getFirstMatch(/(?:claudebot|claude-web|claude-user|claude-searchbot)\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); - + if (version) { browser.version = version; } @@ -198,6 +198,57 @@ const browsersList = [ }, }, + /* Meta-ExternalAds */ + { + test: [/meta-externalads/i], + describe(ua) { + const browser = { + name: 'Meta-ExternalAds', + }; + const version = Utils.getFirstMatch(/meta-externalads\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* Meta-ExternalAgent */ + { + test: [/meta-externalagent/i], + describe(ua) { + const browser = { + name: 'Meta-ExternalAgent', + }; + const version = Utils.getFirstMatch(/meta-externalagent\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + + /* Meta-ExternalFetcher */ + { + test: [/meta-externalfetcher/i], + describe(ua) { + const browser = { + name: 'Meta-ExternalFetcher', + }; + const version = Utils.getFirstMatch(/meta-externalfetcher\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + /* Googlebot */ { test: [/googlebot/i], diff --git a/src/parser-platforms.js b/src/parser-platforms.js index 00d60ee8..74889a58 100644 --- a/src/parser-platforms.js +++ b/src/parser-platforms.js @@ -183,6 +183,39 @@ export default [ }, }, + /* Meta-ExternalAds */ + { + test: [/meta-externalads/i], + describe() { + return { + type: PLATFORMS_MAP.bot, + vendor: 'Meta', + }; + }, + }, + + /* Meta-ExternalAgent */ + { + test: [/meta-externalagent/i], + describe() { + return { + type: PLATFORMS_MAP.bot, + vendor: 'Meta', + }; + }, + }, + + /* Meta-ExternalFetcher */ + { + test: [/meta-externalfetcher/i], + describe() { + return { + type: PLATFORMS_MAP.bot, + vendor: 'Meta', + }; + }, + }, + /* Meta Web Crawler */ { test: [/facebookexternalhit/i, /facebookcatalog/i], diff --git a/test/acceptance/useragentstrings.yml b/test/acceptance/useragentstrings.yml index c6f5ea18..0f410354 100644 --- a/test/acceptance/useragentstrings.yml +++ b/test/acceptance/useragentstrings.yml @@ -2635,6 +2635,75 @@ type: "bot" vendor: "Meta" engine: {} + Meta-ExternalAds: + - + ua: "meta-externalads/1.1" + spec: + browser: + name: "Meta-ExternalAds" + version: "1.1" + os: {} + platform: + type: "bot" + vendor: "Meta" + engine: {} + - + ua: "meta-externalads/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler)" + spec: + browser: + name: "Meta-ExternalAds" + version: "1.1" + os: {} + platform: + type: "bot" + vendor: "Meta" + engine: {} + Meta-ExternalAgent: + - + ua: "meta-externalagent/1.1" + spec: + browser: + name: "Meta-ExternalAgent" + version: "1.1" + os: {} + platform: + type: "bot" + vendor: "Meta" + engine: {} + - + ua: "meta-externalagent/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler)" + spec: + browser: + name: "Meta-ExternalAgent" + version: "1.1" + os: {} + platform: + type: "bot" + vendor: "Meta" + engine: {} + Meta-ExternalFetcher: + - + ua: "meta-externalfetcher/1.1" + spec: + browser: + name: "Meta-ExternalFetcher" + version: "1.1" + os: {} + platform: + type: "bot" + vendor: "Meta" + engine: {} + - + ua: "meta-externalfetcher/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler)" + spec: + browser: + name: "Meta-ExternalFetcher" + version: "1.1" + os: {} + platform: + type: "bot" + vendor: "Meta" + engine: {} Diffbot: - ua: "Mozilla/5.0 (compatible; Diffbot/3.0; +http://www.diffbot.com)" From a7d7d4b7d33f7983bc4f2a490488771bb9a40308 Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 18:00:21 +0200 Subject: [PATCH 15/16] alphabetical order --- src/constants.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/constants.js b/src/constants.js index 2f4f7186..9f3d2057 100644 --- a/src/constants.js +++ b/src/constants.js @@ -8,8 +8,8 @@ export const BROWSER_ALIASES_MAP = { Bada: 'bada', BingCrawler: 'bingcrawler', BlackBerry: 'blackberry', - Chrome: 'chrome', 'ChatGPT-User': 'chatgpt_user', + Chrome: 'chrome', ClaudeBot: 'claudebot', Chromium: 'chromium', Diffbot: 'diffbot', @@ -73,8 +73,8 @@ export const BROWSER_MAP = { bada: 'Bada', bingcrawler: 'BingCrawler', blackberry: 'BlackBerry', - chrome: 'Chrome', chatgpt_user: 'ChatGPT-User', + chrome: 'Chrome', claudebot: 'ClaudeBot', chromium: 'Chromium', diffbot: 'Diffbot', @@ -99,10 +99,10 @@ export const BROWSER_MAP = { meta_webindexer: 'Meta-WebIndexer', mz: 'MZ Browser', naver: 'NAVER Whale Browser', - opera: 'Opera', - opera_coast: 'Opera Coast', oai_searchbot: 'OAI-SearchBot', omgilibot: 'Omgilibot', + opera: 'Opera', + opera_coast: 'Opera Coast', pale_moon: 'Pale Moon', perplexitybot: 'PerplexityBot', perplexity_user: 'Perplexity-User', From 9a18fb86bb9c2680f6d202a66805b8197cb51400 Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 18:00:47 +0200 Subject: [PATCH 16/16] lint --- src/parser-browsers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser-browsers.js b/src/parser-browsers.js index 0f071a6e..621bbb9a 100644 --- a/src/parser-browsers.js +++ b/src/parser-browsers.js @@ -104,7 +104,7 @@ const browsersList = [ name: 'Omgilibot', }; const version = Utils.getFirstMatch(/(?:omgilibot|webzio-extended)\/(\d+(\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); - + if (version) { browser.version = version; }