diff --git a/src/extensions/ua-parser-extensions.js b/src/extensions/ua-parser-extensions.js index 69ae56b..09b793c 100644 --- a/src/extensions/ua-parser-extensions.js +++ b/src/extensions/ua-parser-extensions.js @@ -218,31 +218,25 @@ const Fetchers = Object.freeze({ // ChatGPT-User - https://platform.openai.com/docs/plugins/bot // DuckAssistBot - https://duckduckgo.com/duckassistbot/ // BingPreview / Mastodon / Pinterestbot / Redditbot / Rogerbot / Telegrambot / Twitterbot / UptimeRobot - /(ahrefssiteaudit|bingpreview|chatgpt-user|mastodon|(?:discord|duckassist|linkedin|pinterest|reddit|roger|telegram|twitter|uptimero)bot)\/([\w\.]+)/i, + // Google Site Verifier / Meta / Yahoo! Japan + // Yandex Bots - https://yandex.com/bots + /(ahrefssiteaudit|bingpreview|chatgpt-user|mastodon|(?:discord|duckassist|linkedin|pinterest|reddit|roger|telegram|twitter|uptimero)bot|google-site-verification|meta-externalfetcher|y!?j-dlc|yandex(?:calendar|direct(?:dyn)?|searchshop)|yadirectfetcher)\/([\w\.]+)/i, - // Google Site Verifier - /(google-site-verification)\/([\w\.]+)/i, - - // Meta - /(meta-externalfetcher)\/([\w\.]+)/i, + // Bluesky + /(bluesky) cardyb\/([\w\.]+)/i, // Slackbot - https://api.slack.com/robots /(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i, // WhatsApp - /(whatsapp)\/([\w\.]+)[\/ ][ianw]/i, - - // Yahoo! Japan - /(y!?j-dlc)\/([\w\.]+)/i, - - // Yandex Bots - https://yandex.com/bots - /(yandex(?:calendar|direct(?:dyn)?|searchshop)|yadirectfetcher)\/([\w\.]+)/i, - /(yandex(?:sitelinks|userproxy))/i + /(whatsapp)\/([\w\.]+)[\/ ][ianw]/i ], [NAME, VERSION, [TYPE, FETCHER]], - // Google Bots / Cohere / Snapchat / Vercelbot - [/(cohere-ai|vercelbot|feedfetcher-google|google(?:-read-aloud|producer)|(?=bot; )snapchat)/i], + [ + // Google Bots / Cohere / Snapchat / Vercelbot / Yandex Bots + /(cohere-ai|vercelbot|feedfetcher-google|google(?:-read-aloud|producer)|(?=bot; )snapchat|yandex(?:sitelinks|userproxy))/i + ], [NAME, [TYPE, FETCHER]], ] }); diff --git a/test/data/ua/extension/fetcher.json b/test/data/ua/extension/fetcher.json index dfd76f1..a04e4f6 100644 --- a/test/data/ua/extension/fetcher.json +++ b/test/data/ua/extension/fetcher.json @@ -19,6 +19,16 @@ "type" : "fetcher" } }, + { + "desc" : "Bluesky", + "ua" : "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Bluesky Cardyb/1.1; +mailto:support@bsky.app) Chrome/100.0.0.0 Safari/537.36", + "expect" : + { + "name" : "Bluesky", + "version" : "1.1", + "type" : "fetcher" + } + }, { "desc" : "ChatGPT-User", "ua" : "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot", diff --git a/test/unit/extensions.js b/test/unit/extensions.js index 6fd755b..0f04732 100644 --- a/test/unit/extensions.js +++ b/test/unit/extensions.js @@ -48,6 +48,15 @@ describe('Extensions', () => { assert.deepEqual(libraryParser.setUA(axios).getBrowser(), {name: "axios", version: "1.3.5", major: "1", type: "library"}); assert.deepEqual(libraryParser.setUA(jsdom).getBrowser(), {name: "jsdom", version: "20.0.3", major: "20", type: "library"}); assert.deepEqual(libraryParser.setUA(scrapy).getBrowser(), {name: "Scrapy", version: "1.5.0", major: "1", type: "library"}); + + // Bluesky + const bluesky = 'Mozilla/5.0 (compatible; Bluesky Cardyb/1.1; +mailto:support@bsky.app)'; + assert.deepEqual(new UAParser(bluesky, Bots).getBrowser(), { + name: 'Bluesky', + version: '1.1', + major: '1', + type: 'fetcher' + }); }); describe('Merge', () => {