From 8a05328ce09dcda4d5d0cadec77e3aa638cba7ab Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Thu, 6 Mar 2025 21:03:29 +0700 Subject: [PATCH] [extensions] Improve inapp browser detection: Slack, Yahoo! Japan --- src/extensions/ua-parser-extensions.js | 6 +++-- test/data/ua/extension/inapp.json | 32 ++++++++++++++++++++++++++ test/unit/extensions.js | 4 +++- 3 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 test/data/ua/extension/inapp.json diff --git a/src/extensions/ua-parser-extensions.js b/src/extensions/ua-parser-extensions.js index 09feadf..f1da2ac 100644 --- a/src/extensions/ua-parser-extensions.js +++ b/src/extensions/ua-parser-extensions.js @@ -253,10 +253,12 @@ const Fetchers = Object.freeze({ const InApps = Object.freeze({ browser : [ // Slack - [/chatlyio\/([\d\.]+)/i], [VERSION, 'Slack', [TYPE, INAPP]], + [/(?:slack(?=.+electron|.+ios)|chatlyio)\/([\d\.]+)/i], + [VERSION, [NAME, 'Slack'], [TYPE, INAPP]], // Yahoo! Japan - [/jp\.co\.yahoo\.android\.yjtop\/([\d\.]+)/i], [VERSION, 'Yahoo! Japan', [TYPE, INAPP]] + [/jp\.co\.yahoo\.(?:android\.yjtop|ipn\.appli)\/([\d\.]+)/i], + [VERSION, [NAME, 'Yahoo! Japan'], [TYPE, INAPP]] ] }); diff --git a/test/data/ua/extension/inapp.json b/test/data/ua/extension/inapp.json new file mode 100644 index 0000000..5512465 --- /dev/null +++ b/test/data/ua/extension/inapp.json @@ -0,0 +1,32 @@ +[ + { + "desc" : "Slack on mac", + "ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Slack/4.39.90 Chrome/127.0.6533.72 Electron/13.1.9 Safari/537.36", + "expect" : + { + "name" : "Slack", + "version" : "4.39.90", + "type" : "inapp" + } + }, + { + "desc" : "Yahoo! Japan on Android", + "ua" : "Mozilla/5.0 (Linux; Android 13; SH-M20 Build/TKQ1.220915.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/132.0.6834.163 Mobile Safari/537.36 YJApp-ANDROID jp.co.yahoo.android.yjtop/3.187.0", + "expect" : + { + "name" : "Yahoo! Japan", + "version" : "3.187.0", + "type" : "inapp" + } + }, + { + "desc" : "Yahoo! Japan on iOS", + "ua" : "Mozilla/5.0 (iPad; CPU OS 18_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 YJApp-IOS jp.co.yahoo.ipn.appli/4.131.0", + "expect" : + { + "name" : "Yahoo! Japan", + "version" : "4.131.0", + "type" : "inapp" + } + } +] diff --git a/test/unit/extensions.js b/test/unit/extensions.js index 0f04732..f4548f3 100644 --- a/test/unit/extensions.js +++ b/test/unit/extensions.js @@ -8,8 +8,9 @@ const clis = require('../data/ua/extension/cli.json'); const crawlers = require('../data/ua/extension/crawler.json'); const emails = require('../data/ua/extension/email.json'); const fetchers = require('../data/ua/extension/fetcher.json'); +const inapps = require('../data/ua/extension/inapp.json'); const libraries = require('../data/ua/extension/library.json'); -const { Bots, CLIs, Crawlers, Emails, Fetchers, Libraries } = require('../../src/extensions/ua-parser-extensions'); +const { Bots, CLIs, Crawlers, Emails, Fetchers, InApps, Libraries } = require('../../src/extensions/ua-parser-extensions'); describe('Extensions', () => { [ @@ -17,6 +18,7 @@ describe('Extensions', () => { ['Crawlers', crawlers, Crawlers], ['Emails', emails, Emails], ['Fetchers', fetchers, Fetchers], + ['InApps', inapps, InApps], ['Libraries', libraries, Libraries] ] .forEach((list) => {