From 92b5639733bc2e6a37fee99385381685c3b5fca0 Mon Sep 17 00:00:00 2001 From: Swapnil Sahu Date: Fri, 10 Apr 2026 21:48:44 +0530 Subject: [PATCH] feat: add support for HeyTap Browser and Vivo Browser identification (#621) --- src/constants.js | 4 ++++ src/parser-browsers.js | 30 ++++++++++++++++++++++++++++ test/acceptance/useragentstrings.yml | 28 ++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) diff --git a/src/constants.js b/src/constants.js index 2d06c97..32f6441 100644 --- a/src/constants.js +++ b/src/constants.js @@ -25,6 +25,7 @@ export const BROWSER_ALIASES_MAP = { 'Google Search': 'google_search', Googlebot: 'googlebot', GPTBot: 'gptbot', + 'HeyTap Browser': 'heytap', 'Internet Explorer': 'ie', InternetArchiveCrawler: 'internetarchivecrawler', 'K-Meleon': 'k_meleon', @@ -62,6 +63,7 @@ export const BROWSER_ALIASES_MAP = { Swing: 'swing', Tizen: 'tizen', 'UC Browser': 'uc', + 'Vivo Browser': 'vivo', Vivaldi: 'vivaldi', 'WebOS Browser': 'webos', WeChat: 'wechat', @@ -97,6 +99,7 @@ export const BROWSER_MAP = { google_search: 'Google Search', googlebot: 'Googlebot', gptbot: 'GPTBot', + heytap: 'HeyTap Browser', ie: 'Internet Explorer', internetarchivecrawler: 'InternetArchiveCrawler', k_meleon: 'K-Meleon', @@ -133,6 +136,7 @@ export const BROWSER_MAP = { swing: 'Swing', tizen: 'Tizen', uc: 'UC Browser', + vivo: 'Vivo Browser', vivaldi: 'Vivaldi', webos: 'WebOS Browser', wechat: 'WeChat', diff --git a/src/parser-browsers.js b/src/parser-browsers.js index 1cc8440..e917faa 100644 --- a/src/parser-browsers.js +++ b/src/parser-browsers.js @@ -503,6 +503,36 @@ const browsersList = [ return browser; }, }, + { + test: [/HeyTapBrowser/i], + describe(ua) { + const browser = { + name: 'HeyTap Browser', + }; + const version = Utils.getFirstMatch(/(?:HeyTapBrowser)[\s/](\d+(?:\.\d+)*)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, + { + test: [/VivoBrowser/i], + describe(ua) { + const browser = { + name: 'Vivo Browser', + }; + const version = Utils.getFirstMatch(/(?:VivoBrowser)[\s/](\d+(?:\.\d+)*)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua); + + if (version) { + browser.version = version; + } + + return browser; + }, + }, { test: [/MZBrowser/i], describe(ua) { diff --git a/test/acceptance/useragentstrings.yml b/test/acceptance/useragentstrings.yml index 2c62c7e..0f4dc85 100644 --- a/test/acceptance/useragentstrings.yml +++ b/test/acceptance/useragentstrings.yml @@ -435,6 +435,34 @@ engine: name: "WebKit" version: "605.1.15" + HeyTap Browser: + - + ua: "Mozilla/5.0 (Linux; U; Android 13; en-in; RMX3370 Build/TP1A.220905.001) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.72 Mobile Safari/537.36 HeyTapBrowser/45.13.8.1" + spec: + browser: + name: "HeyTap Browser" + version: "45.13.8.1" + os: + name: "Android" + version: "13" + platform: + type: "mobile" + engine: + name: "Blink" + Vivo Browser: + - + ua: "Mozilla/5.0 (Linux; Android 13; V2279A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.200 Mobile Safari/537.36 VivoBrowser/28.4.3.0" + spec: + browser: + name: "Vivo Browser" + version: "28.4.3.0" + os: + name: "Android" + version: "13" + platform: + type: "mobile" + engine: + name: "Blink" Amazon Silk: - ua: "Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.4 Mobile Safari/535.19 Silk-Accelerated=true"