From ba5dd3b75a41d670619743a40195feb23716f614 Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 17:59:15 +0200 Subject: [PATCH] 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 607b746..2f4f718 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 3c4ae40..0f071a6 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 00d60ee..74889a5 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 c6f5ea1..0f41035 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)"