mirror of
https://github.com/faisalman/ua-parser-js.git
synced 2025-11-16 15:11:50 +03:00
Merge tag '2.0.3' into pro-business
This commit is contained in:
374
src/enums/ua-parser-enums.d.ts
vendored
Normal file
374
src/enums/ua-parser-enums.d.ts
vendored
Normal file
@@ -0,0 +1,374 @@
|
||||
// Type definitions for Enums submodule of UAParser.js v2.0.3
|
||||
// Project: https://github.com/faisalman/ua-parser-js
|
||||
// Definitions by: Faisal Salman <https://github.com/faisalman>
|
||||
|
||||
export const Browser: Readonly<{
|
||||
'115': "115";
|
||||
'2345': "2345";
|
||||
'360': "360";
|
||||
ALIPAY: "Alipay";
|
||||
AMAYA: "Amaya";
|
||||
ANDROID: "Android Browser";
|
||||
ARORA: "Arora";
|
||||
AVANT: "Avant";
|
||||
AVAST: "Avast Secure Browser";
|
||||
AVG: "AVG Secure Browser";
|
||||
BAIDU: "Baidu Browser";
|
||||
BASILISK: "Basilisk";
|
||||
BLAZER: "Blazer";
|
||||
BLU: "BLU";
|
||||
BOLT: "Bolt";
|
||||
BOWSER: "Bowser";
|
||||
BRAVE: "Brave";
|
||||
CAMINO: "Camino";
|
||||
CHIMERA: "Chimera";
|
||||
CHROME: "Chrome";
|
||||
CHROME_HEADLESS: "Chrome Headless";
|
||||
CHROME_MOBILE: "Mobile Chrome";
|
||||
CHROME_WEBVIEW: "Chrome WebView";
|
||||
CHROMIUM: "Chromium";
|
||||
COBALT: "Cobalt";
|
||||
COC_COC: "Coc Coc";
|
||||
CONKEROR: "Conkeror";
|
||||
DAUM: "Daum";
|
||||
DILLO: "Dillo";
|
||||
DOLPHIN: "Dolphin";
|
||||
DOOBLE: 'Dooble',
|
||||
DORIS: "Doris";
|
||||
DRAGON: "Dragon";
|
||||
DUCKDUCKGO: "DuckDuckGo";
|
||||
ECOSIA: "Ecosia";
|
||||
EDGE: "Edge";
|
||||
EPIPHANY: "Epiphany";
|
||||
FACEBOOK: "Facebook";
|
||||
FALKON: "Falkon";
|
||||
FIREBIRD: "Firebird";
|
||||
FIREFOX: "Firefox";
|
||||
FIREFOX_FOCUS: "Firefox Focus";
|
||||
FIREFOX_MOBILE: "Mobile Firefox";
|
||||
FIREFOX_REALITY: "Firefox Reality";
|
||||
FENNEC: "Fennec";
|
||||
FLOCK: "Flock";
|
||||
FLOW: "Flow";
|
||||
GO: "GoBrowser";
|
||||
GOOGLE_SEARCH: "GSA";
|
||||
HELIO: "Helio";
|
||||
HEYTAP: "HeyTap";
|
||||
HONOR: "Honor";
|
||||
HUAWEI: "Huawei Browser";
|
||||
ICAB: "iCab";
|
||||
ICE: "ICE Browser";
|
||||
ICEAPE: "IceApe";
|
||||
ICECAT: "IceCat";
|
||||
ICEDRAGON: "IceDragon";
|
||||
ICEWEASEL: "IceWeasel";
|
||||
IE: "IE";
|
||||
INSTAGRAM: "Instagram";
|
||||
IRIDIUM: "Iridium";
|
||||
IRON: "Iron";
|
||||
JASMINE: "Jasmine";
|
||||
KONQUEROR: "Konqueror";
|
||||
KAKAO: "KakaoTalk";
|
||||
KHTML: "KHTML";
|
||||
K_MELEON: "K-Meleon";
|
||||
KLAR: "Klar";
|
||||
KLARNA: "Klarna";
|
||||
KINDLE: "Kindle";
|
||||
LENOVO: "Smart Lenovo Browser";
|
||||
LADYBIRD: "Ladybird";
|
||||
LG: "LG Browser";
|
||||
LIBREWOLF: "LibreWolf";
|
||||
LIEBAO: "LBBROWSER";
|
||||
LINE: "Line";
|
||||
LINKEDIN: "LinkedIn";
|
||||
LINKS: "Links";
|
||||
LUNASCAPE: "Lunascape";
|
||||
LYNX: "Lynx";
|
||||
MAEMO: "Maemo Browser";
|
||||
MAXTHON: "Maxthon";
|
||||
MIDORI: "Midori";
|
||||
MINIMO: "Minimo";
|
||||
MIUI: "MIUI Browser";
|
||||
MOZILLA: "Mozilla";
|
||||
MOSAIC: "Mosaic";
|
||||
NAVER: "Naver";
|
||||
NETFRONT: "NetFront";
|
||||
NETSCAPE: "Netscape";
|
||||
NETSURF: "Netsurf";
|
||||
NOKIA: "Nokia Browser";
|
||||
OBIGO: "Obigo";
|
||||
OCULUS: "Oculus Browser";
|
||||
OMNIWEB: "OmniWeb";
|
||||
OPERA: "Opera";
|
||||
OPERA_COAST: "Opera Coast";
|
||||
OPERA_GX: "Opera GX",
|
||||
OPERA_MINI: "Opera Mini";
|
||||
OPERA_MOBI: "Opera Mobi";
|
||||
OPERA_TABLET: "Opera Tablet";
|
||||
OPERA_TOUCH: "Opera Touch";
|
||||
OTTER: "Otter";
|
||||
OVI: "OviBrowser";
|
||||
PALEMOON: "PaleMoon";
|
||||
PHANTOMJS: "PhantomJS";
|
||||
PHOENIX: "Phoenix";
|
||||
PICOBROWSER: "Pico Browser";
|
||||
POLARIS: "Polaris";
|
||||
PUFFIN: "Puffin";
|
||||
QQ: "QQBrowser";
|
||||
QQ_LITE: "QQBrowserLite";
|
||||
QUARK: "Quark";
|
||||
QUPZILLA: "QupZilla";
|
||||
QUTEBROWSER: "qutebrowser";
|
||||
REKONQ: "rekonq";
|
||||
ROCKMELT: "Rockmelt";
|
||||
SAFARI: "Safari";
|
||||
SAFARI_MOBILE: "Mobile Safari";
|
||||
SAILFISH: "Sailfish Browser";
|
||||
SAMSUNG: "Samsung Internet";
|
||||
SEAMONKEY: "SeaMonkey";
|
||||
SILK: "Silk";
|
||||
SKYFIRE: "Skyfire";
|
||||
SLEIPNIR: "Sleipnir";
|
||||
SLIMBOAT: "SlimBoat";
|
||||
SLIMBROWSER: "SlimBrowser";
|
||||
SLIMJET: "Slimjet";
|
||||
SNAPCHAT: "Snapchat";
|
||||
SOGOU_EXPLORER: "Sogou Explorer";
|
||||
SOGOU_MOBILE: "Sogou Mobile";
|
||||
SURF: "Surf";
|
||||
SWIFTFOX: "Swiftfox";
|
||||
TESLA: "Tesla";
|
||||
TIKTOK: "TikTok";
|
||||
TIZEN: "Tizen Browser";
|
||||
TWITTER: "Twitter";
|
||||
UC: "UCBrowser";
|
||||
UP: "UP.Browser";
|
||||
VIVALDI: "Vivaldi";
|
||||
VIVO: "Vivo Browser";
|
||||
W3M: "w3m";
|
||||
WATERFOX: "Waterfox";
|
||||
WEBKIT: "WebKit";
|
||||
WECHAT: "WeChat";
|
||||
WEIBO: "Weibo";
|
||||
WHALE: "Whale";
|
||||
WOLVIC: "Wolvic";
|
||||
YANDEX: "Yandex";
|
||||
}>;
|
||||
export const BrowserType: Readonly<{
|
||||
CRAWLER: "crawler";
|
||||
CLI: "cli";
|
||||
EMAIL: "email";
|
||||
FETCHER: "fetcher";
|
||||
INAPP: "inapp";
|
||||
MEDIAPLAYER: "mediaplayer";
|
||||
LIBRARY: "library";
|
||||
}>;
|
||||
export const CPU: Readonly<{
|
||||
'68K': "68k";
|
||||
ARM: "arm";
|
||||
ARM_64: "arm64";
|
||||
ARM_HF: "armhf";
|
||||
AVR: "avr";
|
||||
AVR_32: "avr32";
|
||||
IA64: "ia64";
|
||||
IRIX: "irix";
|
||||
IRIX_64: "irix64";
|
||||
MIPS: "mips";
|
||||
MIPS_64: "mips64";
|
||||
PA_RISC: "pa-risc";
|
||||
PPC: "ppc";
|
||||
SPARC: "sparc";
|
||||
SPARC_64: "sparc64";
|
||||
X86: "ia32";
|
||||
X86_64: "amd64";
|
||||
}>;
|
||||
export const Device: Readonly<{
|
||||
CONSOLE: "console";
|
||||
DESKTOP: "desktop";
|
||||
EMBEDDED: "embedded";
|
||||
MOBILE: "mobile";
|
||||
SMARTTV: "smarttv";
|
||||
TABLET: "tablet";
|
||||
WEARABLE: "wearable";
|
||||
XR: "xr";
|
||||
}>;
|
||||
export const Vendor: Readonly<{
|
||||
ACER: "Acer";
|
||||
ADVAN: "Advan";
|
||||
ALCATEL: "Alcatel";
|
||||
APPLE: "Apple";
|
||||
AMAZON: "Amazon";
|
||||
ARCHOS: "Archos";
|
||||
ASUS: "ASUS";
|
||||
ATT: "AT&T";
|
||||
BENQ: "BenQ";
|
||||
BLACKBERRY: "BlackBerry";
|
||||
CAT: "Cat";
|
||||
DELL: "Dell";
|
||||
ENERGIZER: "Energizer";
|
||||
ESSENTIAL: "Essential";
|
||||
FACEBOOK: "Facebook";
|
||||
FAIRPHONE: "Fairphone";
|
||||
GEEKSPHONE: "GeeksPhone";
|
||||
GENERIC: "Generic";
|
||||
GOOGLE: "Google";
|
||||
HMD: "HMD";
|
||||
HP: "HP";
|
||||
HTC: "HTC";
|
||||
HUAWEI: "Huawei";
|
||||
IMO: "IMO";
|
||||
INFINIX: "Infinix";
|
||||
ITEL: "itel";
|
||||
JOLLA: "Jolla";
|
||||
KOBO: "Kobo";
|
||||
LENOVO: "Lenovo";
|
||||
LG: "LG";
|
||||
MEIZU: "Meizu";
|
||||
MICROMAX: "Micromax";
|
||||
MICROSOFT: "Microsoft";
|
||||
MOTOROLA: "Motorola";
|
||||
NEXIAN: "Nexian";
|
||||
NINTENDO: "Nintendo";
|
||||
NOKIA: "Nokia";
|
||||
NOTHING: "Nothing";
|
||||
NVIDIA: "Nvidia";
|
||||
ONEPLUS: "OnePlus";
|
||||
OPPO: "OPPO";
|
||||
OUYA: "Ouya";
|
||||
PALM: "Palm";
|
||||
PANASONIC: "Panasonic";
|
||||
PEBBLE: "Pebble";
|
||||
PICO: "Pico";
|
||||
POLYTRON: "Polytron";
|
||||
REALME: "Realme";
|
||||
RIM: "RIM";
|
||||
ROKU: "Roku";
|
||||
SAMSUNG: "Samsung";
|
||||
SHARP: "Sharp";
|
||||
SIEMENS: "Siemens";
|
||||
SMARTFREN: "Smartfren";
|
||||
SONY: "Sony";
|
||||
SPRINT: "Sprint";
|
||||
TCL: "TCL";
|
||||
TECHNISAT: "TechniSAT";
|
||||
TECNO: "Tecno";
|
||||
TESLA: "Tesla";
|
||||
ULEFONE: "Ulefone";
|
||||
VIVO: "Vivo";
|
||||
VODAFONE: "Vodafone";
|
||||
XBOX: "Xbox";
|
||||
XIAOMI: "Xiaomi";
|
||||
ZEBRA: "Zebra";
|
||||
ZTE: "ZTE";
|
||||
}>;
|
||||
export const Engine: Readonly<{
|
||||
AMAYA: "Amaya";
|
||||
ARKWEB: "ArkWeb";
|
||||
BLINK: "Blink";
|
||||
EDGEHTML: "EdgeHTML";
|
||||
FLOW: "Flow";
|
||||
GECKO: "Gecko";
|
||||
GOANNA: "Goanna";
|
||||
ICAB: "iCab";
|
||||
KHTML: "KHTML";
|
||||
LIBWEB: "LibWeb";
|
||||
LINKS: "Links";
|
||||
LYNX: "Lynx";
|
||||
NETFRONT: "NetFront";
|
||||
NETSURF: "NetSurf";
|
||||
PRESTO: "Presto";
|
||||
SERVO: "Servo";
|
||||
TASMAN: "Tasman";
|
||||
TRIDENT: "Trident";
|
||||
W3M: "w3m";
|
||||
WEBKIT: "WebKit";
|
||||
}>;
|
||||
export const OS: Readonly<{
|
||||
AIX: "AIX";
|
||||
AMIGA_OS: "Amiga OS";
|
||||
ANDROID: "Android";
|
||||
ANDROID_X86: "Android-x86";
|
||||
ARCH: "Arch";
|
||||
BADA: "Bada";
|
||||
BEOS: "BeOS";
|
||||
BLACKBERRY: "BlackBerry";
|
||||
CENTOS: "CentOS";
|
||||
CHROME_OS: "Chrome OS";
|
||||
CHROMECAST: "Chromecast";
|
||||
CHROMECAST_ANDROID: "Chromecast Android";
|
||||
CHROMECAST_FUCHSIA: "Chromecast Fuchsia";
|
||||
CHROMECAST_LINUX: "Chromecast Linux";
|
||||
CHROMECAST_SMARTSPEAKER: "Chromecast SmartSpeaker";
|
||||
CONTIKI: "Contiki";
|
||||
DEBIAN: "Debian";
|
||||
DEEPIN: "Deepin";
|
||||
DRAGONFLY: "DragonFly";
|
||||
ELEMENTARY_OS: "elementary OS";
|
||||
FEDORA: "Fedora";
|
||||
FIREFOX_OS: "Firefox OS";
|
||||
FREEBSD: "FreeBSD";
|
||||
FUCHSIA: "Fuchsia";
|
||||
GENTOO: "Gentoo";
|
||||
GHOSTBSD: "GhostBSD";
|
||||
GNU: "GNU";
|
||||
HAIKU: "Haiku";
|
||||
HARMONYOS: "HarmonyOS";
|
||||
HP_UX: "HP-UX";
|
||||
HURD: "Hurd";
|
||||
IOS: "iOS";
|
||||
JOLI: "Joli";
|
||||
KAIOS: "KaiOS";
|
||||
KUBUNTU: "Kubuntu";
|
||||
LINPUS: "Linpus";
|
||||
LINSPIRE: "Linspire";
|
||||
LINUX: "Linux";
|
||||
MACOS: "macOS";
|
||||
MAEMO: "Maemo";
|
||||
MAGEIA: "Mageia";
|
||||
MANDRIVA: "Mandriva";
|
||||
MANJARO: "Manjaro";
|
||||
MEEGO: "MeeGo";
|
||||
MINIX: "Minix";
|
||||
MINT: "Mint";
|
||||
MORPH_OS: "Morph OS";
|
||||
NETBSD: "NetBSD";
|
||||
NETRANGE: "NetRange";
|
||||
NETTV: "NetTV";
|
||||
NINTENDO: "Nintendo";
|
||||
OPENHARMONY: "OpenHarmony";
|
||||
OPENBSD: "OpenBSD";
|
||||
OPENVMS: "OpenVMS";
|
||||
OS2: "OS/2";
|
||||
PALM: "Palm";
|
||||
PC_BSD: "PC-BSD";
|
||||
PCLINUXOS: "PCLinuxOS";
|
||||
PICO: "Pico";
|
||||
PLAN9: "Plan9";
|
||||
PLAYSTATION: "PlayStation";
|
||||
QNX: "QNX";
|
||||
RASPBIAN: "Raspbian";
|
||||
REDHAT: "RedHat";
|
||||
RIM_TABLET_OS: "RIM Tablet OS";
|
||||
RISC_OS: "RISC OS";
|
||||
SABAYON: "Sabayon";
|
||||
SAILFISH: "Sailfish";
|
||||
SERENITYOS: "SerenityOS";
|
||||
SERIES40: "Series40";
|
||||
SLACKWARE: "Slackware";
|
||||
SOLARIS: "Solaris";
|
||||
SUSE: "SUSE";
|
||||
SYMBIAN: "Symbian";
|
||||
TIZEN: "Tizen";
|
||||
UBUNTU: "Ubuntu";
|
||||
UBUNTU_TOUCH: "Ubuntu Touch",
|
||||
UNIX: "Unix";
|
||||
VECTORLINUX: "VectorLinux";
|
||||
WATCHOS: "watchOS";
|
||||
WEBOS: "WebOS";
|
||||
WINDOWS: "Windows";
|
||||
WINDOWS_IOT: "Windows IoT";
|
||||
WINDOWS_MOBILE: "Windows Mobile";
|
||||
WINDOWS_PHONE: "Windows Phone";
|
||||
XBOX: "Xbox";
|
||||
ZENWALK: "Zenwalk";
|
||||
}>;
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////
|
||||
/* Enums for UAParser.js v2.0.0
|
||||
/* Enums for UAParser.js v2.0.3
|
||||
https://github.com/faisalman/ua-parser-js
|
||||
Author: Faisal Salman <f@faisalman.com>
|
||||
UAParser.js PRO Business License */
|
||||
@@ -21,6 +21,7 @@ const Browser = Object.freeze({
|
||||
BAIDU: 'Baidu Browser',
|
||||
BASILISK: 'Basilisk',
|
||||
BLAZER: 'Blazer',
|
||||
BLU: 'BLU',
|
||||
BOLT: 'Bolt',
|
||||
BOWSER: 'Bowser',
|
||||
BRAVE: 'Brave',
|
||||
@@ -34,11 +35,14 @@ const Browser = Object.freeze({
|
||||
COBALT: 'Cobalt',
|
||||
COC_COC: 'Coc Coc',
|
||||
CONKEROR: 'Conkeror',
|
||||
DAUM: 'Daum',
|
||||
DILLO: 'Dillo',
|
||||
DOLPHIN: 'Dolphin',
|
||||
DOOBLE: 'Dooble',
|
||||
DORIS: 'Doris',
|
||||
DRAGON: 'Dragon',
|
||||
DUCKDUCKGO: 'DuckDuckGo',
|
||||
ECOSIA: 'Ecosia',
|
||||
EDGE: 'Edge',
|
||||
EPIPHANY: 'Epiphany',
|
||||
FACEBOOK: 'Facebook',
|
||||
@@ -76,6 +80,8 @@ const Browser = Object.freeze({
|
||||
KLARNA: 'Klarna',
|
||||
KINDLE: 'Kindle',
|
||||
LENOVO: 'Smart Lenovo Browser',
|
||||
LADYBIRD: 'Ladybird',
|
||||
LG: 'LG Browser',
|
||||
LIBREWOLF: 'LibreWolf',
|
||||
LIEBAO: 'LBBROWSER',
|
||||
LINE: 'Line',
|
||||
@@ -100,10 +106,12 @@ const Browser = Object.freeze({
|
||||
OMNIWEB: 'OmniWeb',
|
||||
OPERA: 'Opera',
|
||||
OPERA_COAST: 'Opera Coast',
|
||||
OPERA_GX: 'Opera GX',
|
||||
OPERA_MINI: 'Opera Mini',
|
||||
OPERA_MOBI: 'Opera Mobi',
|
||||
OPERA_TABLET: 'Opera Tablet',
|
||||
OPERA_TOUCH: 'Opera Touch',
|
||||
OTTER: 'Otter',
|
||||
OVI: 'OviBrowser',
|
||||
PALEMOON: 'PaleMoon',
|
||||
PHANTOMJS: 'PhantomJS',
|
||||
@@ -115,6 +123,7 @@ const Browser = Object.freeze({
|
||||
QQ_LITE: 'QQBrowserLite',
|
||||
QUARK: 'Quark',
|
||||
QUPZILLA: 'QupZilla',
|
||||
QUTEBROWSER: 'qutebrowser',
|
||||
REKONQ: 'rekonq',
|
||||
ROCKMELT: 'Rockmelt',
|
||||
SAFARI: 'Safari',
|
||||
@@ -131,6 +140,7 @@ const Browser = Object.freeze({
|
||||
SNAPCHAT: 'Snapchat',
|
||||
SOGOU_EXPLORER: 'Sogou Explorer',
|
||||
SOGOU_MOBILE: 'Sogou Mobile',
|
||||
SURF: 'Surf',
|
||||
SWIFTFOX: 'Swiftfox',
|
||||
TESLA: 'Tesla',
|
||||
TIKTOK: 'TikTok',
|
||||
@@ -213,6 +223,7 @@ const Vendor = Object.freeze({
|
||||
GEEKSPHONE: 'GeeksPhone',
|
||||
GENERIC: 'Generic',
|
||||
GOOGLE: 'Google',
|
||||
HMD: 'HMD',
|
||||
HP: 'HP',
|
||||
HTC: 'HTC',
|
||||
HUAWEI: 'Huawei',
|
||||
@@ -322,6 +333,7 @@ const OS = Object.freeze({
|
||||
IOS: 'iOS',
|
||||
JOLI: 'Joli',
|
||||
KAIOS: 'KaiOS',
|
||||
KUBUNTU: 'Kubuntu',
|
||||
LINPUS: 'Linpus',
|
||||
LINSPIRE: 'Linspire',
|
||||
LINUX: 'Linux',
|
||||
@@ -363,11 +375,13 @@ const OS = Object.freeze({
|
||||
SYMBIAN: 'Symbian',
|
||||
TIZEN: 'Tizen',
|
||||
UBUNTU: 'Ubuntu',
|
||||
UBUNTU_TOUCH: 'Ubuntu Touch',
|
||||
UNIX: 'Unix',
|
||||
VECTORLINUX: 'VectorLinux',
|
||||
WATCHOS: 'watchOS',
|
||||
WEBOS: 'WebOS',
|
||||
WINDOWS: 'Windows',
|
||||
WINDOWS_IOT: 'Windows IoT',
|
||||
WINDOWS_MOBILE: 'Windows Mobile',
|
||||
WINDOWS_PHONE: 'Windows Phone',
|
||||
XBOX: 'Xbox',
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// Source: /src/enums/ua-parser-enums.js
|
||||
|
||||
///////////////////////////////////////////////
|
||||
/* Enums for UAParser.js v2.0.0
|
||||
/* Enums for UAParser.js v2.0.3
|
||||
https://github.com/faisalman/ua-parser-js
|
||||
Author: Faisal Salman <f@faisalman.com>
|
||||
UAParser.js PRO Business License */
|
||||
@@ -25,6 +25,7 @@ const Browser = Object.freeze({
|
||||
BAIDU: 'Baidu Browser',
|
||||
BASILISK: 'Basilisk',
|
||||
BLAZER: 'Blazer',
|
||||
BLU: 'BLU',
|
||||
BOLT: 'Bolt',
|
||||
BOWSER: 'Bowser',
|
||||
BRAVE: 'Brave',
|
||||
@@ -38,11 +39,14 @@ const Browser = Object.freeze({
|
||||
COBALT: 'Cobalt',
|
||||
COC_COC: 'Coc Coc',
|
||||
CONKEROR: 'Conkeror',
|
||||
DAUM: 'Daum',
|
||||
DILLO: 'Dillo',
|
||||
DOLPHIN: 'Dolphin',
|
||||
DOOBLE: 'Dooble',
|
||||
DORIS: 'Doris',
|
||||
DRAGON: 'Dragon',
|
||||
DUCKDUCKGO: 'DuckDuckGo',
|
||||
ECOSIA: 'Ecosia',
|
||||
EDGE: 'Edge',
|
||||
EPIPHANY: 'Epiphany',
|
||||
FACEBOOK: 'Facebook',
|
||||
@@ -80,6 +84,8 @@ const Browser = Object.freeze({
|
||||
KLARNA: 'Klarna',
|
||||
KINDLE: 'Kindle',
|
||||
LENOVO: 'Smart Lenovo Browser',
|
||||
LADYBIRD: 'Ladybird',
|
||||
LG: 'LG Browser',
|
||||
LIBREWOLF: 'LibreWolf',
|
||||
LIEBAO: 'LBBROWSER',
|
||||
LINE: 'Line',
|
||||
@@ -104,10 +110,12 @@ const Browser = Object.freeze({
|
||||
OMNIWEB: 'OmniWeb',
|
||||
OPERA: 'Opera',
|
||||
OPERA_COAST: 'Opera Coast',
|
||||
OPERA_GX: 'Opera GX',
|
||||
OPERA_MINI: 'Opera Mini',
|
||||
OPERA_MOBI: 'Opera Mobi',
|
||||
OPERA_TABLET: 'Opera Tablet',
|
||||
OPERA_TOUCH: 'Opera Touch',
|
||||
OTTER: 'Otter',
|
||||
OVI: 'OviBrowser',
|
||||
PALEMOON: 'PaleMoon',
|
||||
PHANTOMJS: 'PhantomJS',
|
||||
@@ -119,6 +127,7 @@ const Browser = Object.freeze({
|
||||
QQ_LITE: 'QQBrowserLite',
|
||||
QUARK: 'Quark',
|
||||
QUPZILLA: 'QupZilla',
|
||||
QUTEBROWSER: 'qutebrowser',
|
||||
REKONQ: 'rekonq',
|
||||
ROCKMELT: 'Rockmelt',
|
||||
SAFARI: 'Safari',
|
||||
@@ -135,6 +144,7 @@ const Browser = Object.freeze({
|
||||
SNAPCHAT: 'Snapchat',
|
||||
SOGOU_EXPLORER: 'Sogou Explorer',
|
||||
SOGOU_MOBILE: 'Sogou Mobile',
|
||||
SURF: 'Surf',
|
||||
SWIFTFOX: 'Swiftfox',
|
||||
TESLA: 'Tesla',
|
||||
TIKTOK: 'TikTok',
|
||||
@@ -217,6 +227,7 @@ const Vendor = Object.freeze({
|
||||
GEEKSPHONE: 'GeeksPhone',
|
||||
GENERIC: 'Generic',
|
||||
GOOGLE: 'Google',
|
||||
HMD: 'HMD',
|
||||
HP: 'HP',
|
||||
HTC: 'HTC',
|
||||
HUAWEI: 'Huawei',
|
||||
@@ -326,6 +337,7 @@ const OS = Object.freeze({
|
||||
IOS: 'iOS',
|
||||
JOLI: 'Joli',
|
||||
KAIOS: 'KaiOS',
|
||||
KUBUNTU: 'Kubuntu',
|
||||
LINPUS: 'Linpus',
|
||||
LINSPIRE: 'Linspire',
|
||||
LINUX: 'Linux',
|
||||
@@ -367,11 +379,13 @@ const OS = Object.freeze({
|
||||
SYMBIAN: 'Symbian',
|
||||
TIZEN: 'Tizen',
|
||||
UBUNTU: 'Ubuntu',
|
||||
UBUNTU_TOUCH: 'Ubuntu Touch',
|
||||
UNIX: 'Unix',
|
||||
VECTORLINUX: 'VectorLinux',
|
||||
WATCHOS: 'watchOS',
|
||||
WEBOS: 'WebOS',
|
||||
WINDOWS: 'Windows',
|
||||
WINDOWS_IOT: 'Windows IoT',
|
||||
WINDOWS_MOBILE: 'Windows Mobile',
|
||||
WINDOWS_PHONE: 'Windows Phone',
|
||||
XBOX: 'Xbox',
|
||||
|
||||
5
src/extensions/ua-parser-extensions.d.ts
vendored
5
src/extensions/ua-parser-extensions.d.ts
vendored
@@ -1,4 +1,4 @@
|
||||
// Type definitions for Helpers submodule of UAParser.js v2.0.0
|
||||
// Type definitions for Helpers submodule of UAParser.js v2.0.3
|
||||
// Project: https://github.com/faisalman/ua-parser-js
|
||||
// Definitions by: Faisal Salman <https://github.com/faisalman>
|
||||
|
||||
@@ -12,4 +12,5 @@ export const Emails: UAParserExt;
|
||||
export const Fetchers: UAParserExt;
|
||||
export const InApps: UAParserExt;
|
||||
export const Libraries: UAParserExt;
|
||||
export const MediaPlayers: UAParserExt;
|
||||
export const MediaPlayers: UAParserExt;
|
||||
export const Vehicles: UAParserExt;
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////
|
||||
/* Extensions for UAParser.js v2.0.0
|
||||
/* Extensions for UAParser.js v2.0.3
|
||||
https://github.com/faisalman/ua-parser-js
|
||||
Author: Faisal Salman <f@faisalman.com>
|
||||
UAParser.js PRO Business License */
|
||||
@@ -42,25 +42,25 @@ const Crawlers = Object.freeze({
|
||||
[
|
||||
// AhrefsBot - https://ahrefs.com/robot
|
||||
// Amazonbot - https://developer.amazon.com/amazonbot
|
||||
// Bingbot - http://www.bing.com/bingbot.htm
|
||||
// Bingbot / AdIdxBot - https://www.bing.com/webmasters/help/which-crawlers-does-bing-use-8c184ec0
|
||||
// CCBot - https://commoncrawl.org/faq
|
||||
// Dotbot - https://moz.com/help/moz-procedures/crawlers/dotbot
|
||||
// DuckDuckBot - http://duckduckgo.com/duckduckbot.html
|
||||
// FacebookBot - https://developers.facebook.com/docs/sharing/bot/
|
||||
// GPTBot - https://platform.openai.com/docs/gptbot
|
||||
// LinkedInBot - http://www.linkedin.com
|
||||
// MJ12bot - https://mj12bot.com/
|
||||
// MojeekBot - https://www.mojeek.com/bot.html
|
||||
// OpenAI's SearchGPT - https://platform.openai.com/docs/bots
|
||||
// PerplexityBot - https://perplexity.ai/perplexitybot
|
||||
// SemrushBot - http://www.semrush.com/bot.html
|
||||
// SeznamBot - http://napoveda.seznam.cz/seznambot-intro
|
||||
/((?:ahrefs|amazon|bing|cc|dot|duckduck|exa|facebook|gpt|mj12|mojeek|oai-search|perplexity|semrush|seznam)bot)\/([\w\.-]+)/i,
|
||||
/((?:adidx|ahrefs|amazon|bing|cc|dot|duckduck|exa|facebook|gpt|linkedin|mj12|mojeek|oai-search|perplexity|semrush|seznam)bot)\/([\w\.-]+)/i,
|
||||
|
||||
// Applebot - http://apple.com/go/applebot
|
||||
/(applebot(?:-extended)?)\/([\w\.]+)/i,
|
||||
/(applebot(?:-extended)?)\/?([\w\.]*)/i,
|
||||
|
||||
// Baiduspider https://help.baidu.com/question?prod_id=99&class=0&id=3001
|
||||
/(baiduspider)[-imagevdonsfcpr]{0,6}\/([\w\.]+)/i,
|
||||
/(baiduspider[-imagevdonwsfcpr]{0,7})\/?([\w\.]*)/i,
|
||||
|
||||
// ClaudeBot (Anthropic)
|
||||
/(claude(?:bot|-web)|anthropic-ai)\/?([\w\.]*)/i,
|
||||
@@ -78,6 +78,9 @@ const Crawlers = Object.freeze({
|
||||
// Internet Archive (archive.org)
|
||||
/(ia_archiver|archive\.org_bot)\/?([\w\.]*)/i,
|
||||
|
||||
// SemrushBot - http://www.semrush.com/bot.html
|
||||
/((?:semrush|splitsignal)bot[-abcfimostw]*)\/?([\w\.-]*)/i,
|
||||
|
||||
// Sogou Spider
|
||||
/(sogou (?:pic|head|web|orion|news) spider)\/([\w\.]+)/i,
|
||||
|
||||
@@ -90,8 +93,8 @@ const Crawlers = Object.freeze({
|
||||
// Yeti (Naver)
|
||||
/(yeti)\/([\w\.]+)/i,
|
||||
|
||||
// aiHitBot / Diffbot / Magpie-Crawler / Omgilibot / Webzio-Extended / Screaming Frog SEO Spider / Timpibot / VelenPublicWebCrawler / YisouSpider / YouBot
|
||||
/((?:aihit|diff|timpi|you)bot|omgili(?:bot)?|(?:magpie-|velenpublicweb)crawler|webzio-extended|(?:screaming frog seo |yisou)spider)\/?([\w\.]*)/i
|
||||
// aiHitBot / Diffbot / Linespider / Magpie-Crawler / Omgilibot / OpenAI Image Downloader / Webzio-Extended / Screaming Frog SEO Spider / Timpibot / VelenPublicWebCrawler / YisouSpider / YouBot
|
||||
/((?:aihit|diff|timpi|you)bot|omgili(?:bot)?|openai image downloader|(?:magpie-|velenpublicweb)crawler|webzio-extended|(?:screaming frog seo |line|yisou)spider)\/?([\w\.]*)/i
|
||||
],
|
||||
|
||||
[NAME, VERSION, [TYPE, CRAWLER]],
|
||||
@@ -108,7 +111,7 @@ const Crawlers = Object.freeze({
|
||||
// Qihoo 360Spider
|
||||
// TurnitinBot - https://www.turnitin.com/robot/crawlerinfo.html
|
||||
// Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
|
||||
/\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|(?=yahoo! )slurp)/i
|
||||
/\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|yahoo! slurp)/i
|
||||
],
|
||||
[NAME, [TYPE, CRAWLER]]
|
||||
]
|
||||
@@ -161,7 +164,7 @@ const ExtraDevices = Object.freeze({
|
||||
/\b(zur\d{3}) b/i // Swiss ZUR Tablet
|
||||
], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
|
||||
|
||||
/\b((zeki)?tb.*\b) b/i // Zeki Tablets
|
||||
/^((zeki)?tb.*\b) b/i // Zeki Tablets
|
||||
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
||||
|
||||
/\b([yr]\d{2}) b/i,
|
||||
@@ -217,33 +220,35 @@ const Fetchers = Object.freeze({
|
||||
// AhrefsSiteAudit - https://ahrefs.com/robot/site-audit
|
||||
// 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,
|
||||
// Better Uptime / BingPreview / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot
|
||||
// Google Site Verifier / Meta / Yahoo! Japan
|
||||
// Yandex Bots - https://yandex.com/bots
|
||||
/(ahrefssiteaudit|(?:bing|microsoft)preview|chatgpt-user|mastodon|(?:discord|duckassist|linkedin|pinterest|reddit|roger|siteaudit|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,
|
||||
// Bluesky
|
||||
/(bluesky) cardyb\/([\w\.]+)/i,
|
||||
|
||||
// Meta
|
||||
/(meta-externalfetcher)\/([\w\.]+)/i,
|
||||
// Skype
|
||||
/(skypeuripreview) preview\/([\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\.]+)/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
|
||||
/((?:better uptime |telegram|vercel)bot|cohere-ai|feedfetcher-google|google(?:imageproxy|-read-aloud|-pagerenderer|producer)|snap url preview|yandex(?:sitelinks|userproxy))/i
|
||||
],
|
||||
[NAME, [TYPE, FETCHER]],
|
||||
],
|
||||
|
||||
os : [
|
||||
[/whatsapp\/[\d\.]+ (a|i)/i],
|
||||
[[NAME, os => os == 'A' ? 'Android' : 'iOS' ]]
|
||||
]
|
||||
});
|
||||
|
||||
@@ -254,10 +259,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]]
|
||||
]
|
||||
});
|
||||
|
||||
@@ -267,104 +274,48 @@ const InApps = Object.freeze({
|
||||
|
||||
const MediaPlayers = Object.freeze({
|
||||
browser : [[
|
||||
|
||||
/(apple(?:coremedia|))\/([\w\._]+)/i, // Generic Apple CoreMedia
|
||||
/(coremedia) v([\w\._]+)/i
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(aqualung|lyssna|bsplayer)\/([\w\.-]+)/i // Aqualung/Lyssna/BSPlayer
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(ares|ossproxy)\s([\w\.-]+)/i // Ares/OSSProxy
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\/([\w\.-]+)/i,
|
||||
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC
|
||||
/(apple(?:coremedia|tv))\/([\w\._]+)/i, // Generic Apple CoreMedia
|
||||
/(coremedia) v([\w\._]+)/i,
|
||||
// Ares/Nexplayer/OSSProxy
|
||||
/(ares|clementine|music player daemon|nexplayer|ossproxy) ([\w\.-]+)/i,
|
||||
// Aqualung/Lyssna/BSPlayer/Clementine/MPD
|
||||
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/GnomeMplayer/MoC
|
||||
// NSPlayer/PSP-InternetRadioPlayer/Videos
|
||||
/(clementine|music player daemon)\s([\w\.-]+)/i, // Clementine/MPD
|
||||
/(lg player|nexplayer)\s([\d\.]+)/i,
|
||||
/player\/(nexplayer|lg player)\s([\w\.-]+)/i // NexPlayer/LG Player
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
/(nexplayer)\s([\w\.-]+)/i // Nexplayer
|
||||
// Nero Home/Nero Scout/Nokia
|
||||
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
||||
// SoundTap/Totem/Stagefright/Streamium
|
||||
// XBMC/gvfs/Xine/XMMS/irapp
|
||||
/^(aqualung|audacious|audimusicstream|amarok|bass|bsplayer|core|gnomemplayer|gvfs|irapp|lyssna|music on console|nero (?:home|scout)|nokia\d+|nsplayer|psp-internetradioplayer|quicktime|rma|radioapp|radioclientapplication|soundtap|stagefright|streamium|totem|videos|xbmc|xine|xmms)\/([\w\.-]+)/i,
|
||||
/(lg player|nexplayer) ([\d\.]+)/i,
|
||||
/player\/(nexplayer|lg player) ([\w\.-]+)/i, // NexPlayer/LG Player
|
||||
/(gstreamer) souphttpsrc.+libsoup\/([\w\.-]+)/i, // Gstreamer
|
||||
/(htc streaming player) [\w_]+ \/ ([\d\.]+)/i, // HTC Streaming Player
|
||||
/(lavf)([\d\.]+)/i, // Lavf (FFMPEG)
|
||||
// MPlayer SVN
|
||||
/(mplayer)(?: |\/)(?:(?:sherpya-){0,1}svn)(?:-| )(r\d+(?:-\d+[\w\.-]+))/i,
|
||||
/ (songbird)\/([\w\.-]+)/i, // Songbird/Philips-Songbird
|
||||
/(winamp)(?:3 version|mpeg| ) ([\w\.-]+)/i, // Winamp
|
||||
/(vlc)(?:\/| media player - version )([\w\.-]+)/i, // VLC Videolan
|
||||
/^(foobar2000|itunes|smp)\/([\d\.]+)/i, // Foobar2000/iTunes/SMP
|
||||
/com\.(riseupradioalarm)\/([\d\.]*)/i, // RiseUP Radio Alarm
|
||||
/(mplayer)(?:\s|\/| unknown-)([\w\.\-]+)/i, // MPlayer
|
||||
// Windows Media Server
|
||||
/(windows)\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ home media server/i
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(flrp)\/([\w\.-]+)/i // Flip Player
|
||||
], [[NAME, 'Flip Player'], VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(fstream|nativehost|queryseekspider)/i
|
||||
// FStream/NativeHost/QuerySeekSpider
|
||||
// MPlayer (no other info)/Media Player Classic/Nero ShowTime
|
||||
// OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
||||
// inlight radio / YourMuze
|
||||
/(fstream|media player classic|inlight radio|mplayer|nativehost|nero showtime|ocms-bot|queryseekspider|tapinradio|tunein radio|winamp|yourmuze)/i
|
||||
], [NAME, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(gstreamer) souphttpsrc.+libsoup\/([\w\.-]+)/i
|
||||
// Gstreamer
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
/(htc_one_s|windows-media-player|wmplayer)\/([\w\.-]+)/i, // HTC One S / Windows Media Player
|
||||
], [[NAME, /[_-]/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(htc streaming player)\s[\w_]+\s\/\s([\d\.]+)/i, // HTC Streaming Player
|
||||
/(lavf)([\d\.]+)/i // Lavf (FFMPEG)
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(htc_one_s)\/([\d\.]+)/i, // HTC One S
|
||||
], [[NAME, /_/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(mplayer)(?:\s|\/)(?:(?:sherpya-){0,1}svn)(?:-|\s)(r\d+(?:-\d+[\w\.-]+))/i,
|
||||
// MPlayer SVN
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(mplayer)(?:\s|\/)([\w\.-]+)/i, // MPlayer
|
||||
/(mplayer) unknown-([\w\.\-]+)/i // MPlayer UNKNOWN
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(mplayer)/i, // MPlayer (no other info)
|
||||
/(yourmuze)/i, // YourMuze
|
||||
/(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime
|
||||
], [NAME, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(nero (?:home|scout))\/([\w\.-]+)/i // Nero Home/Nero Scout
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(nokia\d+)\/([\w\.-]+)/i // Nokia
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/\s(songbird)\/([\w\.-]+)/i // Songbird/Philips-Songbird
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(winamp)3 version ([\w\.-]+)/i, // Winamp
|
||||
/(winamp)\s([\w\.-]+)/i,
|
||||
/(winamp)mpeg\/([\w\.-]+)/i
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
||||
// inlight radio
|
||||
], [NAME, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\/([\w\.-]+)/i
|
||||
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
||||
// SoundTap/Totem/Stagefright/Streamium
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(smp)([\d\.]+)/i // SMP
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(vlc) media player - version ([\w\.]+)/i, // VLC Videolan
|
||||
/(vlc)\/([\w\.-]+)/i,
|
||||
/(xbmc|gvfs|xine|xmms|irapp)\/([\w\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp
|
||||
/(foobar2000)\/([\d\.]+)/i, // Foobar2000
|
||||
/(itunes)\/([\d\.]+)/i // iTunes
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(wmplayer)\/([\w\.-]+)/i, // Windows Media Player
|
||||
/(windows-media-player)\/([\w\.-]+)/i
|
||||
], [[NAME, /-/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/windows\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ (home media server)/i,
|
||||
// Windows Media Server
|
||||
], [VERSION, [NAME, 'Windows'], [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(com\.riseupradioalarm)\/([\d\.]*)/i // RiseUP Radio Alarm
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(rad.io)\s([\d\.]+)/i, // Rad.io
|
||||
/(radio.(?:de|at|fr))\s([\d\.]+)/i
|
||||
/(rad.io|radio.(?:de|at|fr)) ([\d\.]+)/i // Rad.io
|
||||
], [[NAME, 'rad.io'], VERSION, [TYPE, MEDIAPLAYER]]
|
||||
]
|
||||
});
|
||||
@@ -375,8 +326,34 @@ const MediaPlayers = Object.freeze({
|
||||
|
||||
const Libraries = Object.freeze({
|
||||
browser : [
|
||||
// Axios/jsdom/Scrapy/Java/urllib/requests
|
||||
[/\b(axios|jsdom|scrapy|java|python-urllib|python-requests)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, LIBRARY]]
|
||||
// Apache-HttpClient/Axios/go-http-client/got/GuzzleHttp/Java[-HttpClient]/jsdom/libwww-perl/lua-resty-http/Needle/node-fetch/OkHttp/PHP-SOAP/PostmanRuntime/python-urllib/python-requests/Scrapy/superagent
|
||||
[
|
||||
/^(apache-httpclient|axios|(?:go|java)-http-client|got|guzzlehttp|java|libwww-perl|lua-resty-http|needle|node-(?:fetch|superagent)|okhttp|php-soap|postmanruntime|python-(?:urllib|requests)|scrapy)\/([\w\.]+)/i,
|
||||
/(jsdom|(?<=\()java)\/([\w\.]+)/i
|
||||
], [NAME, VERSION, [TYPE, LIBRARY]]
|
||||
]
|
||||
});
|
||||
|
||||
/////////////
|
||||
// VEHICLES
|
||||
////////////
|
||||
|
||||
const Vehicles = Object.freeze({
|
||||
device : [
|
||||
[/aftlbt962e2/i], // BMW
|
||||
[[VENDOR, 'BMW']],
|
||||
|
||||
[/dilink.+(byd) auto/i], // BYD
|
||||
[VENDOR],
|
||||
|
||||
[/aftlft962x3/i], // Jeep
|
||||
[[VENDOR, 'Jeep'], [MODEL, 'Wagooner']],
|
||||
|
||||
[/(rivian) (r1t)/i], // Rivian
|
||||
[VENDOR, MODEL],
|
||||
|
||||
[/vcc.+netfront/i], // Volvo
|
||||
[[VENDOR, 'Volvo']]
|
||||
]
|
||||
});
|
||||
|
||||
@@ -390,6 +367,9 @@ const Bots = Object.freeze({
|
||||
...Crawlers.browser,
|
||||
...Fetchers.browser,
|
||||
...Libraries.browser
|
||||
],
|
||||
os : [
|
||||
...Fetchers.os
|
||||
]
|
||||
});
|
||||
|
||||
@@ -402,5 +382,6 @@ module.exports = {
|
||||
Fetchers,
|
||||
InApps,
|
||||
Libraries,
|
||||
MediaPlayers
|
||||
MediaPlayers,
|
||||
Vehicles
|
||||
};
|
||||
@@ -3,7 +3,7 @@
|
||||
// Source: /src/extensions/ua-parser-extensions.js
|
||||
|
||||
///////////////////////////////////////////////
|
||||
/* Extensions for UAParser.js v2.0.0
|
||||
/* Extensions for UAParser.js v2.0.3
|
||||
https://github.com/faisalman/ua-parser-js
|
||||
Author: Faisal Salman <f@faisalman.com>
|
||||
UAParser.js PRO Business License */
|
||||
@@ -46,25 +46,25 @@ const Crawlers = Object.freeze({
|
||||
[
|
||||
// AhrefsBot - https://ahrefs.com/robot
|
||||
// Amazonbot - https://developer.amazon.com/amazonbot
|
||||
// Bingbot - http://www.bing.com/bingbot.htm
|
||||
// Bingbot / AdIdxBot - https://www.bing.com/webmasters/help/which-crawlers-does-bing-use-8c184ec0
|
||||
// CCBot - https://commoncrawl.org/faq
|
||||
// Dotbot - https://moz.com/help/moz-procedures/crawlers/dotbot
|
||||
// DuckDuckBot - http://duckduckgo.com/duckduckbot.html
|
||||
// FacebookBot - https://developers.facebook.com/docs/sharing/bot/
|
||||
// GPTBot - https://platform.openai.com/docs/gptbot
|
||||
// LinkedInBot - http://www.linkedin.com
|
||||
// MJ12bot - https://mj12bot.com/
|
||||
// MojeekBot - https://www.mojeek.com/bot.html
|
||||
// OpenAI's SearchGPT - https://platform.openai.com/docs/bots
|
||||
// PerplexityBot - https://perplexity.ai/perplexitybot
|
||||
// SemrushBot - http://www.semrush.com/bot.html
|
||||
// SeznamBot - http://napoveda.seznam.cz/seznambot-intro
|
||||
/((?:ahrefs|amazon|bing|cc|dot|duckduck|exa|facebook|gpt|mj12|mojeek|oai-search|perplexity|semrush|seznam)bot)\/([\w\.-]+)/i,
|
||||
/((?:adidx|ahrefs|amazon|bing|cc|dot|duckduck|exa|facebook|gpt|linkedin|mj12|mojeek|oai-search|perplexity|semrush|seznam)bot)\/([\w\.-]+)/i,
|
||||
|
||||
// Applebot - http://apple.com/go/applebot
|
||||
/(applebot(?:-extended)?)\/([\w\.]+)/i,
|
||||
/(applebot(?:-extended)?)\/?([\w\.]*)/i,
|
||||
|
||||
// Baiduspider https://help.baidu.com/question?prod_id=99&class=0&id=3001
|
||||
/(baiduspider)[-imagevdonsfcpr]{0,6}\/([\w\.]+)/i,
|
||||
/(baiduspider[-imagevdonwsfcpr]{0,7})\/?([\w\.]*)/i,
|
||||
|
||||
// ClaudeBot (Anthropic)
|
||||
/(claude(?:bot|-web)|anthropic-ai)\/?([\w\.]*)/i,
|
||||
@@ -82,6 +82,9 @@ const Crawlers = Object.freeze({
|
||||
// Internet Archive (archive.org)
|
||||
/(ia_archiver|archive\.org_bot)\/?([\w\.]*)/i,
|
||||
|
||||
// SemrushBot - http://www.semrush.com/bot.html
|
||||
/((?:semrush|splitsignal)bot[-abcfimostw]*)\/?([\w\.-]*)/i,
|
||||
|
||||
// Sogou Spider
|
||||
/(sogou (?:pic|head|web|orion|news) spider)\/([\w\.]+)/i,
|
||||
|
||||
@@ -94,8 +97,8 @@ const Crawlers = Object.freeze({
|
||||
// Yeti (Naver)
|
||||
/(yeti)\/([\w\.]+)/i,
|
||||
|
||||
// aiHitBot / Diffbot / Magpie-Crawler / Omgilibot / Webzio-Extended / Screaming Frog SEO Spider / Timpibot / VelenPublicWebCrawler / YisouSpider / YouBot
|
||||
/((?:aihit|diff|timpi|you)bot|omgili(?:bot)?|(?:magpie-|velenpublicweb)crawler|webzio-extended|(?:screaming frog seo |yisou)spider)\/?([\w\.]*)/i
|
||||
// aiHitBot / Diffbot / Linespider / Magpie-Crawler / Omgilibot / OpenAI Image Downloader / Webzio-Extended / Screaming Frog SEO Spider / Timpibot / VelenPublicWebCrawler / YisouSpider / YouBot
|
||||
/((?:aihit|diff|timpi|you)bot|omgili(?:bot)?|openai image downloader|(?:magpie-|velenpublicweb)crawler|webzio-extended|(?:screaming frog seo |line|yisou)spider)\/?([\w\.]*)/i
|
||||
],
|
||||
|
||||
[NAME, VERSION, [TYPE, CRAWLER]],
|
||||
@@ -112,7 +115,7 @@ const Crawlers = Object.freeze({
|
||||
// Qihoo 360Spider
|
||||
// TurnitinBot - https://www.turnitin.com/robot/crawlerinfo.html
|
||||
// Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
|
||||
/\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|(?=yahoo! )slurp)/i
|
||||
/\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|yahoo! slurp)/i
|
||||
],
|
||||
[NAME, [TYPE, CRAWLER]]
|
||||
]
|
||||
@@ -165,7 +168,7 @@ const ExtraDevices = Object.freeze({
|
||||
/\b(zur\d{3}) b/i // Swiss ZUR Tablet
|
||||
], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
|
||||
|
||||
/\b((zeki)?tb.*\b) b/i // Zeki Tablets
|
||||
/^((zeki)?tb.*\b) b/i // Zeki Tablets
|
||||
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
||||
|
||||
/\b([yr]\d{2}) b/i,
|
||||
@@ -221,33 +224,35 @@ const Fetchers = Object.freeze({
|
||||
// AhrefsSiteAudit - https://ahrefs.com/robot/site-audit
|
||||
// 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,
|
||||
// Better Uptime / BingPreview / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot
|
||||
// Google Site Verifier / Meta / Yahoo! Japan
|
||||
// Yandex Bots - https://yandex.com/bots
|
||||
/(ahrefssiteaudit|(?:bing|microsoft)preview|chatgpt-user|mastodon|(?:discord|duckassist|linkedin|pinterest|reddit|roger|siteaudit|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,
|
||||
// Bluesky
|
||||
/(bluesky) cardyb\/([\w\.]+)/i,
|
||||
|
||||
// Meta
|
||||
/(meta-externalfetcher)\/([\w\.]+)/i,
|
||||
// Skype
|
||||
/(skypeuripreview) preview\/([\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\.]+)/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
|
||||
/((?:better uptime |telegram|vercel)bot|cohere-ai|feedfetcher-google|google(?:imageproxy|-read-aloud|-pagerenderer|producer)|snap url preview|yandex(?:sitelinks|userproxy))/i
|
||||
],
|
||||
[NAME, [TYPE, FETCHER]],
|
||||
],
|
||||
|
||||
os : [
|
||||
[/whatsapp\/[\d\.]+ (a|i)/i],
|
||||
[[NAME, os => os == 'A' ? 'Android' : 'iOS' ]]
|
||||
]
|
||||
});
|
||||
|
||||
@@ -258,10 +263,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]]
|
||||
]
|
||||
});
|
||||
|
||||
@@ -271,104 +278,48 @@ const InApps = Object.freeze({
|
||||
|
||||
const MediaPlayers = Object.freeze({
|
||||
browser : [[
|
||||
|
||||
/(apple(?:coremedia|))\/([\w\._]+)/i, // Generic Apple CoreMedia
|
||||
/(coremedia) v([\w\._]+)/i
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(aqualung|lyssna|bsplayer)\/([\w\.-]+)/i // Aqualung/Lyssna/BSPlayer
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(ares|ossproxy)\s([\w\.-]+)/i // Ares/OSSProxy
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\/([\w\.-]+)/i,
|
||||
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC
|
||||
/(apple(?:coremedia|tv))\/([\w\._]+)/i, // Generic Apple CoreMedia
|
||||
/(coremedia) v([\w\._]+)/i,
|
||||
// Ares/Nexplayer/OSSProxy
|
||||
/(ares|clementine|music player daemon|nexplayer|ossproxy) ([\w\.-]+)/i,
|
||||
// Aqualung/Lyssna/BSPlayer/Clementine/MPD
|
||||
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/GnomeMplayer/MoC
|
||||
// NSPlayer/PSP-InternetRadioPlayer/Videos
|
||||
/(clementine|music player daemon)\s([\w\.-]+)/i, // Clementine/MPD
|
||||
/(lg player|nexplayer)\s([\d\.]+)/i,
|
||||
/player\/(nexplayer|lg player)\s([\w\.-]+)/i // NexPlayer/LG Player
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
/(nexplayer)\s([\w\.-]+)/i // Nexplayer
|
||||
// Nero Home/Nero Scout/Nokia
|
||||
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
||||
// SoundTap/Totem/Stagefright/Streamium
|
||||
// XBMC/gvfs/Xine/XMMS/irapp
|
||||
/^(aqualung|audacious|audimusicstream|amarok|bass|bsplayer|core|gnomemplayer|gvfs|irapp|lyssna|music on console|nero (?:home|scout)|nokia\d+|nsplayer|psp-internetradioplayer|quicktime|rma|radioapp|radioclientapplication|soundtap|stagefright|streamium|totem|videos|xbmc|xine|xmms)\/([\w\.-]+)/i,
|
||||
/(lg player|nexplayer) ([\d\.]+)/i,
|
||||
/player\/(nexplayer|lg player) ([\w\.-]+)/i, // NexPlayer/LG Player
|
||||
/(gstreamer) souphttpsrc.+libsoup\/([\w\.-]+)/i, // Gstreamer
|
||||
/(htc streaming player) [\w_]+ \/ ([\d\.]+)/i, // HTC Streaming Player
|
||||
/(lavf)([\d\.]+)/i, // Lavf (FFMPEG)
|
||||
// MPlayer SVN
|
||||
/(mplayer)(?: |\/)(?:(?:sherpya-){0,1}svn)(?:-| )(r\d+(?:-\d+[\w\.-]+))/i,
|
||||
/ (songbird)\/([\w\.-]+)/i, // Songbird/Philips-Songbird
|
||||
/(winamp)(?:3 version|mpeg| ) ([\w\.-]+)/i, // Winamp
|
||||
/(vlc)(?:\/| media player - version )([\w\.-]+)/i, // VLC Videolan
|
||||
/^(foobar2000|itunes|smp)\/([\d\.]+)/i, // Foobar2000/iTunes/SMP
|
||||
/com\.(riseupradioalarm)\/([\d\.]*)/i, // RiseUP Radio Alarm
|
||||
/(mplayer)(?:\s|\/| unknown-)([\w\.\-]+)/i, // MPlayer
|
||||
// Windows Media Server
|
||||
/(windows)\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ home media server/i
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(flrp)\/([\w\.-]+)/i // Flip Player
|
||||
], [[NAME, 'Flip Player'], VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(fstream|nativehost|queryseekspider)/i
|
||||
// FStream/NativeHost/QuerySeekSpider
|
||||
// MPlayer (no other info)/Media Player Classic/Nero ShowTime
|
||||
// OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
||||
// inlight radio / YourMuze
|
||||
/(fstream|media player classic|inlight radio|mplayer|nativehost|nero showtime|ocms-bot|queryseekspider|tapinradio|tunein radio|winamp|yourmuze)/i
|
||||
], [NAME, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(gstreamer) souphttpsrc.+libsoup\/([\w\.-]+)/i
|
||||
// Gstreamer
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
/(htc_one_s|windows-media-player|wmplayer)\/([\w\.-]+)/i, // HTC One S / Windows Media Player
|
||||
], [[NAME, /[_-]/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(htc streaming player)\s[\w_]+\s\/\s([\d\.]+)/i, // HTC Streaming Player
|
||||
/(lavf)([\d\.]+)/i // Lavf (FFMPEG)
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(htc_one_s)\/([\d\.]+)/i, // HTC One S
|
||||
], [[NAME, /_/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(mplayer)(?:\s|\/)(?:(?:sherpya-){0,1}svn)(?:-|\s)(r\d+(?:-\d+[\w\.-]+))/i,
|
||||
// MPlayer SVN
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(mplayer)(?:\s|\/)([\w\.-]+)/i, // MPlayer
|
||||
/(mplayer) unknown-([\w\.\-]+)/i // MPlayer UNKNOWN
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(mplayer)/i, // MPlayer (no other info)
|
||||
/(yourmuze)/i, // YourMuze
|
||||
/(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime
|
||||
], [NAME, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(nero (?:home|scout))\/([\w\.-]+)/i // Nero Home/Nero Scout
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(nokia\d+)\/([\w\.-]+)/i // Nokia
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/\s(songbird)\/([\w\.-]+)/i // Songbird/Philips-Songbird
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(winamp)3 version ([\w\.-]+)/i, // Winamp
|
||||
/(winamp)\s([\w\.-]+)/i,
|
||||
/(winamp)mpeg\/([\w\.-]+)/i
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
||||
// inlight radio
|
||||
], [NAME, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\/([\w\.-]+)/i
|
||||
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
||||
// SoundTap/Totem/Stagefright/Streamium
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(smp)([\d\.]+)/i // SMP
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(vlc) media player - version ([\w\.]+)/i, // VLC Videolan
|
||||
/(vlc)\/([\w\.-]+)/i,
|
||||
/(xbmc|gvfs|xine|xmms|irapp)\/([\w\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp
|
||||
/(foobar2000)\/([\d\.]+)/i, // Foobar2000
|
||||
/(itunes)\/([\d\.]+)/i // iTunes
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(wmplayer)\/([\w\.-]+)/i, // Windows Media Player
|
||||
/(windows-media-player)\/([\w\.-]+)/i
|
||||
], [[NAME, /-/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/windows\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ (home media server)/i,
|
||||
// Windows Media Server
|
||||
], [VERSION, [NAME, 'Windows'], [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(com\.riseupradioalarm)\/([\d\.]*)/i // RiseUP Radio Alarm
|
||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||
|
||||
/(rad.io)\s([\d\.]+)/i, // Rad.io
|
||||
/(radio.(?:de|at|fr))\s([\d\.]+)/i
|
||||
/(rad.io|radio.(?:de|at|fr)) ([\d\.]+)/i // Rad.io
|
||||
], [[NAME, 'rad.io'], VERSION, [TYPE, MEDIAPLAYER]]
|
||||
]
|
||||
});
|
||||
@@ -379,8 +330,34 @@ const MediaPlayers = Object.freeze({
|
||||
|
||||
const Libraries = Object.freeze({
|
||||
browser : [
|
||||
// Axios/jsdom/Scrapy/Java/urllib/requests
|
||||
[/\b(axios|jsdom|scrapy|java|python-urllib|python-requests)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, LIBRARY]]
|
||||
// Apache-HttpClient/Axios/go-http-client/got/GuzzleHttp/Java[-HttpClient]/jsdom/libwww-perl/lua-resty-http/Needle/node-fetch/OkHttp/PHP-SOAP/PostmanRuntime/python-urllib/python-requests/Scrapy/superagent
|
||||
[
|
||||
/^(apache-httpclient|axios|(?:go|java)-http-client|got|guzzlehttp|java|libwww-perl|lua-resty-http|needle|node-(?:fetch|superagent)|okhttp|php-soap|postmanruntime|python-(?:urllib|requests)|scrapy)\/([\w\.]+)/i,
|
||||
/(jsdom|(?<=\()java)\/([\w\.]+)/i
|
||||
], [NAME, VERSION, [TYPE, LIBRARY]]
|
||||
]
|
||||
});
|
||||
|
||||
/////////////
|
||||
// VEHICLES
|
||||
////////////
|
||||
|
||||
const Vehicles = Object.freeze({
|
||||
device : [
|
||||
[/aftlbt962e2/i], // BMW
|
||||
[[VENDOR, 'BMW']],
|
||||
|
||||
[/dilink.+(byd) auto/i], // BYD
|
||||
[VENDOR],
|
||||
|
||||
[/aftlft962x3/i], // Jeep
|
||||
[[VENDOR, 'Jeep'], [MODEL, 'Wagooner']],
|
||||
|
||||
[/(rivian) (r1t)/i], // Rivian
|
||||
[VENDOR, MODEL],
|
||||
|
||||
[/vcc.+netfront/i], // Volvo
|
||||
[[VENDOR, 'Volvo']]
|
||||
]
|
||||
});
|
||||
|
||||
@@ -394,6 +371,9 @@ const Bots = Object.freeze({
|
||||
...Crawlers.browser,
|
||||
...Fetchers.browser,
|
||||
...Libraries.browser
|
||||
],
|
||||
os : [
|
||||
...Fetchers.os
|
||||
]
|
||||
});
|
||||
|
||||
@@ -406,5 +386,6 @@ export {
|
||||
Fetchers,
|
||||
InApps,
|
||||
Libraries,
|
||||
MediaPlayers
|
||||
MediaPlayers,
|
||||
Vehicles
|
||||
};
|
||||
4
src/helpers/ua-parser-helpers.d.ts
vendored
4
src/helpers/ua-parser-helpers.d.ts
vendored
@@ -1,8 +1,8 @@
|
||||
// Type definitions for Helpers submodule of UAParser.js v2.0.0
|
||||
// Type definitions for Helpers submodule of UAParser.js v2.0.3
|
||||
// Project: https://github.com/faisalman/ua-parser-js
|
||||
// Definitions by: Faisal Salman <https://github.com/faisalman>
|
||||
|
||||
import { IResult } from "../main/ua-parser";
|
||||
import type { IResult } from "../main/ua-parser";
|
||||
|
||||
declare function getDeviceVendor(model: string): string | undefined;
|
||||
declare function isAppleSilicon(resultOrUA: IResult | string): boolean;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////
|
||||
/* Helpers for UAParser.js v2.0.0
|
||||
/* Helpers for UAParser.js v2.0.3
|
||||
https://github.com/faisalman/ua-parser-js
|
||||
Author: Faisal Salman <f@faisalman.com>
|
||||
UAParser.js PRO Personal License */
|
||||
@@ -93,6 +93,9 @@ const isAIBot = (resultOrUA) => [
|
||||
// Perplexity
|
||||
'perplexitybot',
|
||||
|
||||
// Semrush
|
||||
'semrushbot-ocob',
|
||||
|
||||
// Timpi
|
||||
'timpibot',
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// Source: /src/helpers/ua-parser-helpers.js
|
||||
|
||||
///////////////////////////////////////////////
|
||||
/* Helpers for UAParser.js v2.0.0
|
||||
/* Helpers for UAParser.js v2.0.3
|
||||
https://github.com/faisalman/ua-parser-js
|
||||
Author: Faisal Salman <f@faisalman.com>
|
||||
UAParser.js PRO Personal License */
|
||||
@@ -97,6 +97,9 @@ const isAIBot = (resultOrUA) => [
|
||||
// Perplexity
|
||||
'perplexitybot',
|
||||
|
||||
// Semrush
|
||||
'semrushbot-ocob',
|
||||
|
||||
// Timpi
|
||||
'timpibot',
|
||||
|
||||
|
||||
14
src/main/ua-parser.d.ts
vendored
14
src/main/ua-parser.d.ts
vendored
@@ -1,7 +1,10 @@
|
||||
// Type definitions for UAParser.js v2.0.0
|
||||
// Type definitions for UAParser.js v2.0.3
|
||||
// Project: https://github.com/faisalman/ua-parser-js
|
||||
// Definitions by: Faisal Salman <https://github.com/faisalman>
|
||||
|
||||
import type { IncomingHttpHeaders } from 'http';
|
||||
import type { Headers as FetchAPIHeaders } from 'node-fetch';
|
||||
|
||||
declare namespace UAParser {
|
||||
|
||||
interface IData<T> {
|
||||
@@ -50,11 +53,12 @@ declare namespace UAParser {
|
||||
type RegexMap = ((RegExp | string | (string | RegExp | Function)[])[])[];
|
||||
type UAParserProps = 'browser' | 'cpu' | 'device' | 'engine' | 'os';
|
||||
type UAParserExt = Partial<Record<UAParserProps, RegexMap>> | Partial<Record<UAParserProps, RegexMap>>[];
|
||||
type UAParserHeaders = Record<string, string> | IncomingHttpHeaders | FetchAPIHeaders;
|
||||
|
||||
export function UAParser(uastring?: string, extensions?: UAParserExt, headers?: Record<string, string>): IResult;
|
||||
export function UAParser(uastring?: string, headers?: Record<string, string>): IResult;
|
||||
export function UAParser(extensions?: UAParserExt, headers?: Record<string, string>): IResult;
|
||||
export function UAParser(headers?: Record<string, string>): IResult;
|
||||
export function UAParser(uastring?: string, extensions?: UAParserExt, headers?: UAParserHeaders): IResult;
|
||||
export function UAParser(uastring?: string, headers?: UAParserHeaders): IResult;
|
||||
export function UAParser(extensions?: UAParserExt, headers?: UAParserHeaders): IResult;
|
||||
export function UAParser(headers?: UAParserHeaders): IResult;
|
||||
|
||||
export class UAParser {
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
/* UAParser.js v2.0.0
|
||||
Copyright © 2012-2023 Faisal Salman <f@faisalman.com>
|
||||
/* UAParser.js v2.0.3
|
||||
Copyright © 2012-2025 Faisal Salman <f@faisalman.com>
|
||||
UAParser.js PRO Business License *//*
|
||||
Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
|
||||
Supports browser & node.js environment.
|
||||
@@ -19,20 +19,35 @@
|
||||
// Constants
|
||||
/////////////
|
||||
|
||||
var LIBVERSION = '2.0.0',
|
||||
var LIBVERSION = '2.0.3',
|
||||
UA_MAX_LENGTH = 500,
|
||||
USER_AGENT = 'user-agent',
|
||||
EMPTY = '',
|
||||
UNKNOWN = '?',
|
||||
|
||||
// typeof
|
||||
FUNC_TYPE = 'function',
|
||||
UNDEF_TYPE = 'undefined',
|
||||
OBJ_TYPE = 'object',
|
||||
STR_TYPE = 'string',
|
||||
MAJOR = 'major',
|
||||
MODEL = 'model',
|
||||
|
||||
// properties
|
||||
UA_BROWSER = 'browser',
|
||||
UA_CPU = 'cpu',
|
||||
UA_DEVICE = 'device',
|
||||
UA_ENGINE = 'engine',
|
||||
UA_OS = 'os',
|
||||
UA_RESULT = 'result',
|
||||
|
||||
NAME = 'name',
|
||||
TYPE = 'type',
|
||||
VENDOR = 'vendor',
|
||||
VERSION = 'version',
|
||||
ARCHITECTURE= 'architecture',
|
||||
MAJOR = 'major',
|
||||
MODEL = 'model',
|
||||
|
||||
// device types
|
||||
CONSOLE = 'console',
|
||||
MOBILE = 'mobile',
|
||||
TABLET = 'tablet',
|
||||
@@ -40,9 +55,11 @@
|
||||
WEARABLE = 'wearable',
|
||||
XR = 'xr',
|
||||
EMBEDDED = 'embedded',
|
||||
|
||||
// browser types
|
||||
INAPP = 'inapp',
|
||||
USER_AGENT = 'user-agent',
|
||||
UA_MAX_LENGTH = 500,
|
||||
|
||||
// client hints
|
||||
BRANDS = 'brands',
|
||||
FORMFACTORS = 'formFactors',
|
||||
FULLVERLIST = 'fullVersionList',
|
||||
@@ -59,12 +76,8 @@
|
||||
CH_HEADER_PLATFORM = CH_HEADER + '-' + PLATFORM,
|
||||
CH_HEADER_PLATFORM_VER = CH_HEADER_PLATFORM + '-version',
|
||||
CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS],
|
||||
UA_BROWSER = 'browser',
|
||||
UA_CPU = 'cpu',
|
||||
UA_DEVICE = 'device',
|
||||
UA_ENGINE = 'engine',
|
||||
UA_OS = 'os',
|
||||
UA_RESULT = 'result',
|
||||
|
||||
// device vendors
|
||||
AMAZON = 'Amazon',
|
||||
APPLE = 'Apple',
|
||||
ASUS = 'ASUS',
|
||||
@@ -76,20 +89,29 @@
|
||||
LG = 'LG',
|
||||
MICROSOFT = 'Microsoft',
|
||||
MOTOROLA = 'Motorola',
|
||||
NVIDIA = 'Nvidia',
|
||||
ONEPLUS = 'OnePlus',
|
||||
OPPO = 'OPPO',
|
||||
SAMSUNG = 'Samsung',
|
||||
SHARP = 'Sharp',
|
||||
SONY = 'Sony',
|
||||
XIAOMI = 'Xiaomi',
|
||||
ZEBRA = 'Zebra',
|
||||
PREFIX_MOBILE = 'Mobile ',
|
||||
SUFFIX_BROWSER = ' Browser',
|
||||
|
||||
// browsers
|
||||
CHROME = 'Chrome',
|
||||
CHROMIUM = 'Chromium',
|
||||
CHROMECAST = 'Chromecast',
|
||||
EDGE = 'Edge',
|
||||
FIREFOX = 'Firefox',
|
||||
OPERA = 'Opera',
|
||||
FACEBOOK = 'Facebook',
|
||||
SOGOU = 'Sogou',
|
||||
|
||||
PREFIX_MOBILE = 'Mobile ',
|
||||
SUFFIX_BROWSER = ' Browser',
|
||||
|
||||
// os
|
||||
WINDOWS = 'Windows';
|
||||
|
||||
var isWindow = typeof window !== UNDEF_TYPE,
|
||||
@@ -331,11 +353,11 @@
|
||||
/(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i, // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet
|
||||
/(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer
|
||||
|
||||
// Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
|
||||
/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon)\/([-\w\.]+)/i,
|
||||
// Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble
|
||||
/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:lg |qute)browser)\/([-\w\.]+)/i,
|
||||
// Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon
|
||||
/(heytap|ovi|115)browser\/([\d\.]+)/i, // HeyTap/Ovi/115
|
||||
/(weibo)__([\d\.]+)/i // Weibo
|
||||
/(heytap|ovi|115|surf)browser\/([\d\.]+)/i, // HeyTap/Ovi/115/Surf
|
||||
/(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i // Ecosia/Weibo
|
||||
], [NAME, VERSION], [
|
||||
/quark(?:pc)?\/([-\w\.]+)/i // Quark
|
||||
], [VERSION, [NAME, 'Quark']], [
|
||||
@@ -399,6 +421,7 @@
|
||||
/(Klarna)\/([\w\.]+)/i, // Klarna Shopping Browser for iOS & Android
|
||||
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i, // Kakao App
|
||||
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i, // Naver InApp
|
||||
/(daum)apps[\/ ]([\w\.]+)/i, // Daum App
|
||||
/safari (line)\/([\w\.]+)/i, // Line App for iOS
|
||||
/\b(line)\/([\w\.]+)\/iab/i, // Line App for Android
|
||||
/(alipay)client\/([\w\.]+)/i, // Alipay
|
||||
@@ -461,8 +484,8 @@
|
||||
/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i, // Mozilla
|
||||
|
||||
// Other
|
||||
/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
||||
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser
|
||||
/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
||||
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird
|
||||
/\b(links) \(([\w\.]+)/i // Links
|
||||
], [NAME, [VERSION, /_/g, '.']], [
|
||||
|
||||
@@ -472,30 +495,30 @@
|
||||
|
||||
cpu : [[
|
||||
|
||||
/\b(?:(amd|x|x86[-_]?|wow|win)64)\b/i // AMD64 (x64)
|
||||
/\b((amd|x|x86[-_]?|wow|win)64)\b/i // AMD64 (x64)
|
||||
], [[ARCHITECTURE, 'amd64']], [
|
||||
|
||||
/(ia32(?=;))/i, // IA32 (quicktime)
|
||||
/((?:i[346]|x)86)[;\)]/i // IA32 (x86)
|
||||
/\b((i[346]|x)86)(pc)?\b/i // IA32 (x86)
|
||||
], [[ARCHITECTURE, 'ia32']], [
|
||||
|
||||
/\b(aarch64|arm(v?8e?l?|_?64))\b/i // ARM64
|
||||
/\b(aarch64|arm(v?[89]e?l?|_?64))\b/i // ARM64
|
||||
], [[ARCHITECTURE, 'arm64']], [
|
||||
|
||||
/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i // ARMHF
|
||||
/\b(arm(v[67])?ht?n?[fl]p?)\b/i // ARMHF
|
||||
], [[ARCHITECTURE, 'armhf']], [
|
||||
|
||||
// PocketPC mistakenly identified as PowerPC
|
||||
/windows (ce|mobile); ppc;/i
|
||||
/( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i
|
||||
], [[ARCHITECTURE, 'arm']], [
|
||||
|
||||
/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i // PowerPC
|
||||
/((ppc|powerpc)(64)?)( mac|;|\))/i // PowerPC
|
||||
], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [
|
||||
|
||||
/(sun4\w)[;\)]/i // SPARC
|
||||
/ sun4\w[;\)]/i // SPARC
|
||||
], [[ARCHITECTURE, 'sparc']], [
|
||||
|
||||
/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
|
||||
/\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i
|
||||
// IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
|
||||
], [[ARCHITECTURE, lowerize]]
|
||||
],
|
||||
@@ -529,37 +552,44 @@
|
||||
], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [
|
||||
|
||||
// Honor
|
||||
/(?:honor)([-\w ]+)[;\)]/i
|
||||
/\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i
|
||||
], [MODEL, [VENDOR, HONOR], [TYPE, TABLET]], [
|
||||
/honor([-\w ]+)[;\)]/i
|
||||
], [MODEL, [VENDOR, HONOR], [TYPE, MOBILE]], [
|
||||
|
||||
// Huawei
|
||||
/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i
|
||||
/\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i
|
||||
], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [
|
||||
/(?:huawei)([-\w ]+)[;\)]/i,
|
||||
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i
|
||||
], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [
|
||||
|
||||
// Xiaomi
|
||||
/oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,
|
||||
/\b((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i // Mi Pad tablets
|
||||
],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
|
||||
|
||||
/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i, // Xiaomi POCO
|
||||
/\b; (\w+) build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
||||
/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, // Xiaomi Hongmi
|
||||
/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, // Xiaomi Redmi
|
||||
/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i, // Xiaomi Redmi 'numeric' models
|
||||
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i // Xiaomi Mi
|
||||
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i, // Xiaomi Mi
|
||||
/ ([\w ]+) miui\/v?\d/i
|
||||
], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
|
||||
/oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i, // Redmi Pad
|
||||
/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i // Mi Pad tablets
|
||||
],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
|
||||
|
||||
// OPPO
|
||||
/; (\w+) bui.+ oppo/i,
|
||||
/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
|
||||
], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [
|
||||
/\b(opd2\d{3}a?) bui/i
|
||||
], [MODEL, [VENDOR, 'OPPO'], [TYPE, TABLET]], [
|
||||
], [MODEL, [VENDOR, OPPO], [TYPE, MOBILE]], [
|
||||
/\b(opd2(\d{3}a?))(?: bui|\))/i
|
||||
], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['304', '403', '203'], '*' : OPPO }], [TYPE, TABLET]], [
|
||||
|
||||
// BLU Vivo Series
|
||||
/(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i
|
||||
], [MODEL, [VENDOR, 'BLU'], [TYPE, MOBILE]], [
|
||||
// Vivo
|
||||
/vivo (\w+)(?: bui|\))/i,
|
||||
/; vivo (\w+)(?: bui|\))/i,
|
||||
/\b(v[12]\d{3}\w?[at])(?: bui|;)/i
|
||||
], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [
|
||||
|
||||
@@ -570,7 +600,7 @@
|
||||
// Motorola
|
||||
/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
|
||||
/\bmot(?:orola)?[- ](\w*)/i,
|
||||
/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
|
||||
/((?:moto(?! 360)[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
|
||||
], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [
|
||||
/\b(mz60\d|xoom[2 ]{0,2}) build\//i
|
||||
], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [
|
||||
@@ -579,22 +609,24 @@
|
||||
/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
|
||||
], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [
|
||||
/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
|
||||
/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,
|
||||
/\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch))(\w+)/i,
|
||||
/\blg-?([\d\w]+) bui/i
|
||||
], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [
|
||||
|
||||
// Lenovo
|
||||
/(ideatab[-\w ]+)/i,
|
||||
/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i
|
||||
/(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,
|
||||
/lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i
|
||||
], [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]], [
|
||||
|
||||
// Nokia
|
||||
/(?:maemo|nokia).*(n900|lumia \d+)/i,
|
||||
/nokia[-_ ]?([-\w\.]*)/i
|
||||
], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [
|
||||
/(nokia) (t[12][01])/i
|
||||
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
||||
/(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,
|
||||
/nokia[-_ ]?(([-\w\. ]*))/i
|
||||
], [[MODEL, /_/g, ' '], [TYPE, MOBILE], [VENDOR, 'Nokia']], [
|
||||
|
||||
// Google
|
||||
/(pixel c)\b/i // Google Pixel C
|
||||
/(pixel (c|tablet))\b/i // Google Pixel C/Tablet
|
||||
], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [
|
||||
/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i // Google Pixel
|
||||
], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [
|
||||
@@ -609,7 +641,7 @@
|
||||
// OnePlus
|
||||
/ (kb2005|in20[12]5|be20[12][59])\b/i,
|
||||
/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
|
||||
], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
|
||||
], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [
|
||||
|
||||
// Amazon
|
||||
/(alexa)webm/i,
|
||||
@@ -684,21 +716,29 @@
|
||||
/droid.+; (a(?:015|06[35]|142p?))/i
|
||||
], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [
|
||||
|
||||
// Archos
|
||||
/; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,
|
||||
/archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i
|
||||
], [MODEL, [VENDOR, 'Archos'], [TYPE, TABLET]], [
|
||||
/archos ([\w ]+)( b|\))/i,
|
||||
/; (ac[3-6]\d\w{2,8})( b|\))/i
|
||||
], [MODEL, [VENDOR, 'Archos'], [TYPE, MOBILE]], [
|
||||
|
||||
// MIXED
|
||||
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
|
||||
/(imo) (tab \w+)/i, // IMO
|
||||
/(infinix) (x1101b?)/i // Infinix XPad
|
||||
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
||||
|
||||
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
|
||||
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Infinix/Tecno/Micromax/Advan
|
||||
/; (imo) ((?!tab)[\w ]+?)(?: bui|\))/i, // IMO
|
||||
/; (blu|hmd|imo|tcl)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i, // BLU/HMD/IMO/TCL
|
||||
/(hp) ([\w ]+\w)/i, // HP iPAQ
|
||||
/(asus)-?(\w+)/i, // Asus
|
||||
/(microsoft); (lumia[\w ]+)/i, // Microsoft Lumia
|
||||
/(lenovo)[-_ ]?([-\w]+)/i, // Lenovo
|
||||
/(jolla)/i, // Jolla
|
||||
/(lenovo)[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i, // Lenovo
|
||||
/(oppo) ?([\w ]+) bui/i // OPPO
|
||||
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
||||
|
||||
/(imo) (tab \w+)/i, // IMO
|
||||
/(kobo)\s(ereader|touch)/i, // Kobo
|
||||
/(archos) (gamepad2?)/i, // Archos
|
||||
/(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad
|
||||
/(kindle)\/([\w\.]+)/i // Kindle
|
||||
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
||||
@@ -707,8 +747,8 @@
|
||||
], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [
|
||||
/droid [\d\.]+; (fp\du?)(?: b|\))/i // Fairphone
|
||||
], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [
|
||||
/(shield[\w ]+) b/i // Nvidia Shield Tablets
|
||||
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [
|
||||
/((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i // Nvidia Tablets
|
||||
], [MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]], [
|
||||
/(sprint) (\w+)/i // Sprint Phones
|
||||
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
||||
/(kin\.[onetw]{3})/i // Microsoft Kin
|
||||
@@ -726,7 +766,9 @@
|
||||
], [VENDOR, [TYPE, SMARTTV]], [
|
||||
/hbbtv.+maple;(\d+)/i
|
||||
], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [
|
||||
/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i // LG SmartTV
|
||||
/tcast.+(lg)e?. ([-\w]+)/i // LG SmartTV
|
||||
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
||||
/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
|
||||
], [[VENDOR, LG], [TYPE, SMARTTV]], [
|
||||
/(apple) ?tv/i // Apple TV
|
||||
], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [
|
||||
@@ -738,21 +780,28 @@
|
||||
], [[MODEL, CHROMECAST+' Nest Hub'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
|
||||
/crkey/i // Google Chromecast, Linux-based or unknown
|
||||
], [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
|
||||
/(portaltv)/i // Facebook Portal TV
|
||||
], [MODEL, [VENDOR, FACEBOOK], [TYPE, SMARTTV]], [
|
||||
/droid.+aft(\w+)( bui|\))/i // Fire TV
|
||||
], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [
|
||||
/(shield \w+ tv)/i // Nvidia Shield TV
|
||||
], [MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]], [
|
||||
/\(dtv[\);].+(aquos)/i,
|
||||
/(aquos-tv[\w ]+)\)/i // Sharp
|
||||
], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[
|
||||
/(bravia[\w ]+)( bui|\))/i // Sony
|
||||
], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [
|
||||
/(mitv-\w{5}) bui/i // Xiaomi
|
||||
/(mi(tv|box)-?\w+) bui/i // Xiaomi
|
||||
], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [
|
||||
/Hbbtv.*(technisat) (.*);/i // TechniSAT
|
||||
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
||||
/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku
|
||||
/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i // HbbTV devices
|
||||
], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [
|
||||
/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i // SmartTV from Unidentified Vendors
|
||||
// SmartTV from Unidentified Vendors
|
||||
/droid.+; ([\w- ]+) (?:android tv|smart[- ]?tv)/i
|
||||
], [MODEL, [TYPE, SMARTTV]], [
|
||||
/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i
|
||||
], [[TYPE, SMARTTV]], [
|
||||
|
||||
///////////////////
|
||||
@@ -762,8 +811,8 @@
|
||||
/(ouya)/i, // Ouya
|
||||
/(nintendo) (\w+)/i // Nintendo
|
||||
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
||||
/droid.+; (shield) bui/i // Nvidia
|
||||
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
|
||||
/droid.+; (shield)( bui|\))/i // Nvidia Portable
|
||||
], [MODEL, [VENDOR, NVIDIA], [TYPE, CONSOLE]], [
|
||||
/(playstation \w+)/i // Playstation
|
||||
], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [
|
||||
/\b(xbox(?: one)?(?!; xbox))[\); ]/i // Microsoft Xbox
|
||||
@@ -773,12 +822,23 @@
|
||||
// WEARABLES
|
||||
///////////////////
|
||||
|
||||
/\b(sm-[lr]\d\d[05][fnuw]?s?)\b/i // Samsung Galaxy Watch
|
||||
/\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i // Samsung Galaxy Watch
|
||||
], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [
|
||||
/((pebble))app/i // Pebble
|
||||
/((pebble))app/i, // Pebble
|
||||
/(asus|google|lg|oppo) ((pixel |zen)?watch[\w ]*)( bui|\))/i // Asus ZenWatch / LG Watch / Pixel Watch
|
||||
], [VENDOR, MODEL, [TYPE, WEARABLE]], [
|
||||
/(ow(?:19|20)?we?[1-3]{1,3})/i // Oppo Watch
|
||||
], [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]], [
|
||||
/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i // Apple Watch
|
||||
], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [
|
||||
/(opwwe\d{3})/i // OnePlus Watch
|
||||
], [MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]], [
|
||||
/(moto 360)/i // Motorola 360
|
||||
], [MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]], [
|
||||
/(smartwatch 3)/i // Sony SmartWatch
|
||||
], [MODEL, [VENDOR, SONY], [TYPE, WEARABLE]], [
|
||||
/(g watch r)/i // LG G Watch R
|
||||
], [MODEL, [VENDOR, LG], [TYPE, WEARABLE]], [
|
||||
/droid.+; (wt63?0{2,3})\)/i
|
||||
], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [
|
||||
|
||||
@@ -790,7 +850,7 @@
|
||||
], [MODEL, [VENDOR, GOOGLE], [TYPE, XR]], [
|
||||
/(pico) (4|neo3(?: link|pro)?)/i // Pico
|
||||
], [VENDOR, MODEL, [TYPE, XR]], [
|
||||
/; (quest( \d| pro)?)/i // Oculus Quest
|
||||
/(quest( \d| pro)?s?).+vr/i // Meta Quest
|
||||
], [MODEL, [VENDOR, FACEBOOK], [TYPE, XR]], [
|
||||
|
||||
///////////////////
|
||||
@@ -801,20 +861,22 @@
|
||||
], [VENDOR, [TYPE, EMBEDDED]], [
|
||||
/(aeobc)\b/i // Echo Dot
|
||||
], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [
|
||||
/(homepod).+mac os/i // Apple HomePod
|
||||
], [MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]], [
|
||||
/windows iot/i
|
||||
], [[TYPE, EMBEDDED]], [
|
||||
|
||||
////////////////////
|
||||
// MIXED (GENERIC)
|
||||
///////////////////
|
||||
|
||||
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors
|
||||
], [MODEL, [TYPE, MOBILE]], [
|
||||
/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors
|
||||
], [MODEL, [TYPE, TABLET]], [
|
||||
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+?(mobile|vr|\d) safari/i
|
||||
], [MODEL, [TYPE, strMapper, { 'mobile' : 'Mobile', 'xr' : 'VR', '*' : TABLET }]], [
|
||||
/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i // Unidentifiable Tablet
|
||||
], [[TYPE, TABLET]], [
|
||||
/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile
|
||||
], [[TYPE, MOBILE]], [
|
||||
/(android[-\w\. ]{0,9});.+buil/i // Generic Android Device
|
||||
/droid .+?; ([\w\. -]+)( bui|\))/i // Generic Android Device
|
||||
], [MODEL, [VENDOR, 'Generic']]
|
||||
],
|
||||
|
||||
@@ -834,8 +896,11 @@
|
||||
/ekioh(flow)\/([\w\.]+)/i, // Flow
|
||||
/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
||||
/(icab)[\/ ]([23]\.[\d\.]+)/i, // iCab
|
||||
/\b(libweb)/i
|
||||
|
||||
/\b(libweb)/i // LibWeb
|
||||
], [NAME, VERSION], [
|
||||
/ladybird\//i
|
||||
], [[NAME, 'LibWeb']], [
|
||||
|
||||
/rv\:([\w\.]{1,9})\b.+(gecko)/i // Gecko
|
||||
], [VERSION, NAME]
|
||||
@@ -846,15 +911,15 @@
|
||||
// Windows
|
||||
/microsoft (windows) (vista|xp)/i // Windows (iTunes)
|
||||
], [NAME, VERSION], [
|
||||
/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i // Windows Phone
|
||||
/(windows (?:phone(?: os)?|mobile|iot))[\/ ]?([\d\.\w ]*)/i // Windows Phone
|
||||
], [NAME, [VERSION, strMapper, windowsVersionMap]], [
|
||||
/windows nt 6\.2; (arm)/i, // Windows RT
|
||||
/windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i,
|
||||
/windows nt 6\.2; (arm)/i, // Windows RT
|
||||
/windows[\/ ]([ntce\d\. ]+\w)(?!.+xbox)/i,
|
||||
/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i
|
||||
], [[VERSION, strMapper, windowsVersionMap], [NAME, WINDOWS]], [
|
||||
|
||||
// iOS/macOS
|
||||
/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS
|
||||
/[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS
|
||||
/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,
|
||||
/cfnetwork\/.+darwin/i
|
||||
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
||||
@@ -876,15 +941,15 @@
|
||||
|
||||
// Mobile OSes
|
||||
/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS
|
||||
], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS/OpenHarmony
|
||||
/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish|openharmony)[-\/ ]?([\w\.]*)/i,
|
||||
/(blackberry)\w*\/([\w\.]*)/i, // Blackberry
|
||||
/(tizen|kaios)[\/ ]([\w\.]+)/i, // Tizen/KaiOS
|
||||
/\((series40);/i // Series 40
|
||||
], [VERSION, NAME], [
|
||||
/(ubuntu) ([\w\.]+) like android/i // Ubuntu Touch
|
||||
], [[NAME, /(.+)/, '$1 Touch'], VERSION], [
|
||||
// Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen
|
||||
/(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\w*[-\/\.; ]?([\d\.]*)/i
|
||||
], [NAME, VERSION], [
|
||||
/\(bb(10);/i // BlackBerry 10
|
||||
], [VERSION, [NAME, BLACKBERRY]], [
|
||||
/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i // Symbian
|
||||
/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i // Symbian
|
||||
], [VERSION, [NAME, 'Symbian']], [
|
||||
/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i // Firefox OS
|
||||
], [VERSION, [NAME, FIREFOX+' OS']], [
|
||||
@@ -914,7 +979,7 @@
|
||||
/(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux
|
||||
/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
|
||||
// Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire
|
||||
/(hurd|linux) ?([\w\.]*)/i, // Hurd/Linux
|
||||
/(hurd|linux)(?: arm\w*| x86\w*| ?)([\w\.]*)/i, // Hurd/Linux
|
||||
/(gnu) ?([\w\.]*)/i, // GNU
|
||||
/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
|
||||
/(haiku) (\w+)/i // Haiku
|
||||
@@ -1151,17 +1216,31 @@
|
||||
|
||||
switch (this.itemType) {
|
||||
case UA_BROWSER:
|
||||
case UA_ENGINE:
|
||||
var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;
|
||||
if (brands) {
|
||||
for (var i in brands) {
|
||||
var brandName = strip(/(Google|Microsoft) /, brands[i].brand || brands[i]),
|
||||
var brandName = brands[i].brand || brands[i],
|
||||
brandVersion = brands[i].version;
|
||||
if (!/not.a.brand/i.test(brandName) && (!prevName || (/chrom/i.test(prevName) && !/chromi/i.test(brandName)))) {
|
||||
if (this.itemType == UA_BROWSER && !/not.a.brand/i.test(brandName) && (!prevName || (/chrom/i.test(prevName) && brandName != CHROMIUM))) {
|
||||
brandName = strMapper(brandName, {
|
||||
'Chrome' : 'Google Chrome',
|
||||
'Edge' : 'Microsoft Edge',
|
||||
'Chrome WebView' : 'Android WebView',
|
||||
'Chrome Headless' : 'HeadlessChrome',
|
||||
'Huawei Browser' : 'HuaweiBrowser',
|
||||
'MIUI Browser' : 'Miui Browser',
|
||||
'Opera Mobi' : 'OperaMobile',
|
||||
'Yandex' : 'YaBrowser'
|
||||
});
|
||||
this.set(NAME, brandName)
|
||||
.set(VERSION, brandVersion)
|
||||
.set(MAJOR, majorize(brandVersion));
|
||||
prevName = brandName;
|
||||
}
|
||||
if (this.itemType == UA_ENGINE && brandName == CHROMIUM) {
|
||||
this.set(VERSION, brandVersion);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1178,11 +1257,16 @@
|
||||
}
|
||||
if (uaCH[MODEL]) {
|
||||
this.set(MODEL, uaCH[MODEL]);
|
||||
}
|
||||
// Xbox-Specific Detection
|
||||
if (uaCH[MODEL] == 'Xbox') {
|
||||
this.set(TYPE, CONSOLE)
|
||||
.set(VENDOR, MICROSOFT);
|
||||
if (!this.get(TYPE) || !this.get(VENDOR)) {
|
||||
var reParse = {};
|
||||
rgxMapper.call(reParse, 'droid 9; ' + uaCH[MODEL] + ')', rgxMap);
|
||||
if (!this.get(TYPE) && !!reParse.type) {
|
||||
this.set(TYPE, reParse.type);
|
||||
}
|
||||
if (!this.get(VENDOR) && !!reParse.vendor) {
|
||||
this.set(VENDOR, reParse.vendor);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (uaCH[FORMFACTORS]) {
|
||||
var ff;
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
// Source: /src/main/ua-parser.js
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
/* UAParser.js v2.0.0
|
||||
Copyright © 2012-2023 Faisal Salman <f@faisalman.com>
|
||||
/* UAParser.js v2.0.3
|
||||
Copyright © 2012-2025 Faisal Salman <f@faisalman.com>
|
||||
UAParser.js PRO Business License *//*
|
||||
Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
|
||||
Supports browser & node.js environment.
|
||||
@@ -21,20 +21,35 @@
|
||||
// Constants
|
||||
/////////////
|
||||
|
||||
var LIBVERSION = '2.0.0',
|
||||
var LIBVERSION = '2.0.3',
|
||||
UA_MAX_LENGTH = 500,
|
||||
USER_AGENT = 'user-agent',
|
||||
EMPTY = '',
|
||||
UNKNOWN = '?',
|
||||
|
||||
// typeof
|
||||
FUNC_TYPE = 'function',
|
||||
UNDEF_TYPE = 'undefined',
|
||||
OBJ_TYPE = 'object',
|
||||
STR_TYPE = 'string',
|
||||
MAJOR = 'major',
|
||||
MODEL = 'model',
|
||||
|
||||
// properties
|
||||
UA_BROWSER = 'browser',
|
||||
UA_CPU = 'cpu',
|
||||
UA_DEVICE = 'device',
|
||||
UA_ENGINE = 'engine',
|
||||
UA_OS = 'os',
|
||||
UA_RESULT = 'result',
|
||||
|
||||
NAME = 'name',
|
||||
TYPE = 'type',
|
||||
VENDOR = 'vendor',
|
||||
VERSION = 'version',
|
||||
ARCHITECTURE= 'architecture',
|
||||
MAJOR = 'major',
|
||||
MODEL = 'model',
|
||||
|
||||
// device types
|
||||
CONSOLE = 'console',
|
||||
MOBILE = 'mobile',
|
||||
TABLET = 'tablet',
|
||||
@@ -42,9 +57,11 @@
|
||||
WEARABLE = 'wearable',
|
||||
XR = 'xr',
|
||||
EMBEDDED = 'embedded',
|
||||
|
||||
// browser types
|
||||
INAPP = 'inapp',
|
||||
USER_AGENT = 'user-agent',
|
||||
UA_MAX_LENGTH = 500,
|
||||
|
||||
// client hints
|
||||
BRANDS = 'brands',
|
||||
FORMFACTORS = 'formFactors',
|
||||
FULLVERLIST = 'fullVersionList',
|
||||
@@ -61,12 +78,8 @@
|
||||
CH_HEADER_PLATFORM = CH_HEADER + '-' + PLATFORM,
|
||||
CH_HEADER_PLATFORM_VER = CH_HEADER_PLATFORM + '-version',
|
||||
CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS],
|
||||
UA_BROWSER = 'browser',
|
||||
UA_CPU = 'cpu',
|
||||
UA_DEVICE = 'device',
|
||||
UA_ENGINE = 'engine',
|
||||
UA_OS = 'os',
|
||||
UA_RESULT = 'result',
|
||||
|
||||
// device vendors
|
||||
AMAZON = 'Amazon',
|
||||
APPLE = 'Apple',
|
||||
ASUS = 'ASUS',
|
||||
@@ -78,20 +91,29 @@
|
||||
LG = 'LG',
|
||||
MICROSOFT = 'Microsoft',
|
||||
MOTOROLA = 'Motorola',
|
||||
NVIDIA = 'Nvidia',
|
||||
ONEPLUS = 'OnePlus',
|
||||
OPPO = 'OPPO',
|
||||
SAMSUNG = 'Samsung',
|
||||
SHARP = 'Sharp',
|
||||
SONY = 'Sony',
|
||||
XIAOMI = 'Xiaomi',
|
||||
ZEBRA = 'Zebra',
|
||||
PREFIX_MOBILE = 'Mobile ',
|
||||
SUFFIX_BROWSER = ' Browser',
|
||||
|
||||
// browsers
|
||||
CHROME = 'Chrome',
|
||||
CHROMIUM = 'Chromium',
|
||||
CHROMECAST = 'Chromecast',
|
||||
EDGE = 'Edge',
|
||||
FIREFOX = 'Firefox',
|
||||
OPERA = 'Opera',
|
||||
FACEBOOK = 'Facebook',
|
||||
SOGOU = 'Sogou',
|
||||
|
||||
PREFIX_MOBILE = 'Mobile ',
|
||||
SUFFIX_BROWSER = ' Browser',
|
||||
|
||||
// os
|
||||
WINDOWS = 'Windows';
|
||||
|
||||
var isWindow = typeof window !== UNDEF_TYPE,
|
||||
@@ -333,11 +355,11 @@
|
||||
/(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i, // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet
|
||||
/(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer
|
||||
|
||||
// Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
|
||||
/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon)\/([-\w\.]+)/i,
|
||||
// Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble
|
||||
/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:lg |qute)browser)\/([-\w\.]+)/i,
|
||||
// Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon
|
||||
/(heytap|ovi|115)browser\/([\d\.]+)/i, // HeyTap/Ovi/115
|
||||
/(weibo)__([\d\.]+)/i // Weibo
|
||||
/(heytap|ovi|115|surf)browser\/([\d\.]+)/i, // HeyTap/Ovi/115/Surf
|
||||
/(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i // Ecosia/Weibo
|
||||
], [NAME, VERSION], [
|
||||
/quark(?:pc)?\/([-\w\.]+)/i // Quark
|
||||
], [VERSION, [NAME, 'Quark']], [
|
||||
@@ -401,6 +423,7 @@
|
||||
/(Klarna)\/([\w\.]+)/i, // Klarna Shopping Browser for iOS & Android
|
||||
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i, // Kakao App
|
||||
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i, // Naver InApp
|
||||
/(daum)apps[\/ ]([\w\.]+)/i, // Daum App
|
||||
/safari (line)\/([\w\.]+)/i, // Line App for iOS
|
||||
/\b(line)\/([\w\.]+)\/iab/i, // Line App for Android
|
||||
/(alipay)client\/([\w\.]+)/i, // Alipay
|
||||
@@ -463,8 +486,8 @@
|
||||
/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i, // Mozilla
|
||||
|
||||
// Other
|
||||
/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
||||
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser
|
||||
/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
||||
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird
|
||||
/\b(links) \(([\w\.]+)/i // Links
|
||||
], [NAME, [VERSION, /_/g, '.']], [
|
||||
|
||||
@@ -474,30 +497,30 @@
|
||||
|
||||
cpu : [[
|
||||
|
||||
/\b(?:(amd|x|x86[-_]?|wow|win)64)\b/i // AMD64 (x64)
|
||||
/\b((amd|x|x86[-_]?|wow|win)64)\b/i // AMD64 (x64)
|
||||
], [[ARCHITECTURE, 'amd64']], [
|
||||
|
||||
/(ia32(?=;))/i, // IA32 (quicktime)
|
||||
/((?:i[346]|x)86)[;\)]/i // IA32 (x86)
|
||||
/\b((i[346]|x)86)(pc)?\b/i // IA32 (x86)
|
||||
], [[ARCHITECTURE, 'ia32']], [
|
||||
|
||||
/\b(aarch64|arm(v?8e?l?|_?64))\b/i // ARM64
|
||||
/\b(aarch64|arm(v?[89]e?l?|_?64))\b/i // ARM64
|
||||
], [[ARCHITECTURE, 'arm64']], [
|
||||
|
||||
/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i // ARMHF
|
||||
/\b(arm(v[67])?ht?n?[fl]p?)\b/i // ARMHF
|
||||
], [[ARCHITECTURE, 'armhf']], [
|
||||
|
||||
// PocketPC mistakenly identified as PowerPC
|
||||
/windows (ce|mobile); ppc;/i
|
||||
/( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i
|
||||
], [[ARCHITECTURE, 'arm']], [
|
||||
|
||||
/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i // PowerPC
|
||||
/((ppc|powerpc)(64)?)( mac|;|\))/i // PowerPC
|
||||
], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [
|
||||
|
||||
/(sun4\w)[;\)]/i // SPARC
|
||||
/ sun4\w[;\)]/i // SPARC
|
||||
], [[ARCHITECTURE, 'sparc']], [
|
||||
|
||||
/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
|
||||
/\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i
|
||||
// IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
|
||||
], [[ARCHITECTURE, lowerize]]
|
||||
],
|
||||
@@ -531,37 +554,44 @@
|
||||
], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [
|
||||
|
||||
// Honor
|
||||
/(?:honor)([-\w ]+)[;\)]/i
|
||||
/\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i
|
||||
], [MODEL, [VENDOR, HONOR], [TYPE, TABLET]], [
|
||||
/honor([-\w ]+)[;\)]/i
|
||||
], [MODEL, [VENDOR, HONOR], [TYPE, MOBILE]], [
|
||||
|
||||
// Huawei
|
||||
/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i
|
||||
/\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i
|
||||
], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [
|
||||
/(?:huawei)([-\w ]+)[;\)]/i,
|
||||
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i
|
||||
], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [
|
||||
|
||||
// Xiaomi
|
||||
/oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,
|
||||
/\b((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i // Mi Pad tablets
|
||||
],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
|
||||
|
||||
/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i, // Xiaomi POCO
|
||||
/\b; (\w+) build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
||||
/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, // Xiaomi Hongmi
|
||||
/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, // Xiaomi Redmi
|
||||
/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i, // Xiaomi Redmi 'numeric' models
|
||||
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i // Xiaomi Mi
|
||||
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i, // Xiaomi Mi
|
||||
/ ([\w ]+) miui\/v?\d/i
|
||||
], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
|
||||
/oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i, // Redmi Pad
|
||||
/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i // Mi Pad tablets
|
||||
],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
|
||||
|
||||
// OPPO
|
||||
/; (\w+) bui.+ oppo/i,
|
||||
/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
|
||||
], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [
|
||||
/\b(opd2\d{3}a?) bui/i
|
||||
], [MODEL, [VENDOR, 'OPPO'], [TYPE, TABLET]], [
|
||||
], [MODEL, [VENDOR, OPPO], [TYPE, MOBILE]], [
|
||||
/\b(opd2(\d{3}a?))(?: bui|\))/i
|
||||
], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['304', '403', '203'], '*' : OPPO }], [TYPE, TABLET]], [
|
||||
|
||||
// BLU Vivo Series
|
||||
/(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i
|
||||
], [MODEL, [VENDOR, 'BLU'], [TYPE, MOBILE]], [
|
||||
// Vivo
|
||||
/vivo (\w+)(?: bui|\))/i,
|
||||
/; vivo (\w+)(?: bui|\))/i,
|
||||
/\b(v[12]\d{3}\w?[at])(?: bui|;)/i
|
||||
], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [
|
||||
|
||||
@@ -572,7 +602,7 @@
|
||||
// Motorola
|
||||
/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
|
||||
/\bmot(?:orola)?[- ](\w*)/i,
|
||||
/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
|
||||
/((?:moto(?! 360)[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
|
||||
], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [
|
||||
/\b(mz60\d|xoom[2 ]{0,2}) build\//i
|
||||
], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [
|
||||
@@ -581,22 +611,24 @@
|
||||
/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
|
||||
], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [
|
||||
/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
|
||||
/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,
|
||||
/\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch))(\w+)/i,
|
||||
/\blg-?([\d\w]+) bui/i
|
||||
], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [
|
||||
|
||||
// Lenovo
|
||||
/(ideatab[-\w ]+)/i,
|
||||
/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i
|
||||
/(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,
|
||||
/lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i
|
||||
], [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]], [
|
||||
|
||||
// Nokia
|
||||
/(?:maemo|nokia).*(n900|lumia \d+)/i,
|
||||
/nokia[-_ ]?([-\w\.]*)/i
|
||||
], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [
|
||||
/(nokia) (t[12][01])/i
|
||||
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
||||
/(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,
|
||||
/nokia[-_ ]?(([-\w\. ]*))/i
|
||||
], [[MODEL, /_/g, ' '], [TYPE, MOBILE], [VENDOR, 'Nokia']], [
|
||||
|
||||
// Google
|
||||
/(pixel c)\b/i // Google Pixel C
|
||||
/(pixel (c|tablet))\b/i // Google Pixel C/Tablet
|
||||
], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [
|
||||
/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i // Google Pixel
|
||||
], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [
|
||||
@@ -611,7 +643,7 @@
|
||||
// OnePlus
|
||||
/ (kb2005|in20[12]5|be20[12][59])\b/i,
|
||||
/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
|
||||
], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
|
||||
], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [
|
||||
|
||||
// Amazon
|
||||
/(alexa)webm/i,
|
||||
@@ -686,21 +718,29 @@
|
||||
/droid.+; (a(?:015|06[35]|142p?))/i
|
||||
], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [
|
||||
|
||||
// Archos
|
||||
/; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,
|
||||
/archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i
|
||||
], [MODEL, [VENDOR, 'Archos'], [TYPE, TABLET]], [
|
||||
/archos ([\w ]+)( b|\))/i,
|
||||
/; (ac[3-6]\d\w{2,8})( b|\))/i
|
||||
], [MODEL, [VENDOR, 'Archos'], [TYPE, MOBILE]], [
|
||||
|
||||
// MIXED
|
||||
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
|
||||
/(imo) (tab \w+)/i, // IMO
|
||||
/(infinix) (x1101b?)/i // Infinix XPad
|
||||
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
||||
|
||||
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
|
||||
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Infinix/Tecno/Micromax/Advan
|
||||
/; (imo) ((?!tab)[\w ]+?)(?: bui|\))/i, // IMO
|
||||
/; (blu|hmd|imo|tcl)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i, // BLU/HMD/IMO/TCL
|
||||
/(hp) ([\w ]+\w)/i, // HP iPAQ
|
||||
/(asus)-?(\w+)/i, // Asus
|
||||
/(microsoft); (lumia[\w ]+)/i, // Microsoft Lumia
|
||||
/(lenovo)[-_ ]?([-\w]+)/i, // Lenovo
|
||||
/(jolla)/i, // Jolla
|
||||
/(lenovo)[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i, // Lenovo
|
||||
/(oppo) ?([\w ]+) bui/i // OPPO
|
||||
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
||||
|
||||
/(imo) (tab \w+)/i, // IMO
|
||||
/(kobo)\s(ereader|touch)/i, // Kobo
|
||||
/(archos) (gamepad2?)/i, // Archos
|
||||
/(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad
|
||||
/(kindle)\/([\w\.]+)/i // Kindle
|
||||
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
||||
@@ -709,8 +749,8 @@
|
||||
], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [
|
||||
/droid [\d\.]+; (fp\du?)(?: b|\))/i // Fairphone
|
||||
], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [
|
||||
/(shield[\w ]+) b/i // Nvidia Shield Tablets
|
||||
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [
|
||||
/((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i // Nvidia Tablets
|
||||
], [MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]], [
|
||||
/(sprint) (\w+)/i // Sprint Phones
|
||||
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
||||
/(kin\.[onetw]{3})/i // Microsoft Kin
|
||||
@@ -728,7 +768,9 @@
|
||||
], [VENDOR, [TYPE, SMARTTV]], [
|
||||
/hbbtv.+maple;(\d+)/i
|
||||
], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [
|
||||
/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i // LG SmartTV
|
||||
/tcast.+(lg)e?. ([-\w]+)/i // LG SmartTV
|
||||
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
||||
/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
|
||||
], [[VENDOR, LG], [TYPE, SMARTTV]], [
|
||||
/(apple) ?tv/i // Apple TV
|
||||
], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [
|
||||
@@ -740,21 +782,28 @@
|
||||
], [[MODEL, CHROMECAST+' Nest Hub'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
|
||||
/crkey/i // Google Chromecast, Linux-based or unknown
|
||||
], [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
|
||||
/(portaltv)/i // Facebook Portal TV
|
||||
], [MODEL, [VENDOR, FACEBOOK], [TYPE, SMARTTV]], [
|
||||
/droid.+aft(\w+)( bui|\))/i // Fire TV
|
||||
], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [
|
||||
/(shield \w+ tv)/i // Nvidia Shield TV
|
||||
], [MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]], [
|
||||
/\(dtv[\);].+(aquos)/i,
|
||||
/(aquos-tv[\w ]+)\)/i // Sharp
|
||||
], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[
|
||||
/(bravia[\w ]+)( bui|\))/i // Sony
|
||||
], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [
|
||||
/(mitv-\w{5}) bui/i // Xiaomi
|
||||
/(mi(tv|box)-?\w+) bui/i // Xiaomi
|
||||
], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [
|
||||
/Hbbtv.*(technisat) (.*);/i // TechniSAT
|
||||
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
||||
/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku
|
||||
/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i // HbbTV devices
|
||||
], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [
|
||||
/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i // SmartTV from Unidentified Vendors
|
||||
// SmartTV from Unidentified Vendors
|
||||
/droid.+; ([\w- ]+) (?:android tv|smart[- ]?tv)/i
|
||||
], [MODEL, [TYPE, SMARTTV]], [
|
||||
/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i
|
||||
], [[TYPE, SMARTTV]], [
|
||||
|
||||
///////////////////
|
||||
@@ -764,8 +813,8 @@
|
||||
/(ouya)/i, // Ouya
|
||||
/(nintendo) (\w+)/i // Nintendo
|
||||
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
||||
/droid.+; (shield) bui/i // Nvidia
|
||||
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
|
||||
/droid.+; (shield)( bui|\))/i // Nvidia Portable
|
||||
], [MODEL, [VENDOR, NVIDIA], [TYPE, CONSOLE]], [
|
||||
/(playstation \w+)/i // Playstation
|
||||
], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [
|
||||
/\b(xbox(?: one)?(?!; xbox))[\); ]/i // Microsoft Xbox
|
||||
@@ -775,12 +824,23 @@
|
||||
// WEARABLES
|
||||
///////////////////
|
||||
|
||||
/\b(sm-[lr]\d\d[05][fnuw]?s?)\b/i // Samsung Galaxy Watch
|
||||
/\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i // Samsung Galaxy Watch
|
||||
], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [
|
||||
/((pebble))app/i // Pebble
|
||||
/((pebble))app/i, // Pebble
|
||||
/(asus|google|lg|oppo) ((pixel |zen)?watch[\w ]*)( bui|\))/i // Asus ZenWatch / LG Watch / Pixel Watch
|
||||
], [VENDOR, MODEL, [TYPE, WEARABLE]], [
|
||||
/(ow(?:19|20)?we?[1-3]{1,3})/i // Oppo Watch
|
||||
], [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]], [
|
||||
/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i // Apple Watch
|
||||
], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [
|
||||
/(opwwe\d{3})/i // OnePlus Watch
|
||||
], [MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]], [
|
||||
/(moto 360)/i // Motorola 360
|
||||
], [MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]], [
|
||||
/(smartwatch 3)/i // Sony SmartWatch
|
||||
], [MODEL, [VENDOR, SONY], [TYPE, WEARABLE]], [
|
||||
/(g watch r)/i // LG G Watch R
|
||||
], [MODEL, [VENDOR, LG], [TYPE, WEARABLE]], [
|
||||
/droid.+; (wt63?0{2,3})\)/i
|
||||
], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [
|
||||
|
||||
@@ -792,7 +852,7 @@
|
||||
], [MODEL, [VENDOR, GOOGLE], [TYPE, XR]], [
|
||||
/(pico) (4|neo3(?: link|pro)?)/i // Pico
|
||||
], [VENDOR, MODEL, [TYPE, XR]], [
|
||||
/; (quest( \d| pro)?)/i // Oculus Quest
|
||||
/(quest( \d| pro)?s?).+vr/i // Meta Quest
|
||||
], [MODEL, [VENDOR, FACEBOOK], [TYPE, XR]], [
|
||||
|
||||
///////////////////
|
||||
@@ -803,20 +863,22 @@
|
||||
], [VENDOR, [TYPE, EMBEDDED]], [
|
||||
/(aeobc)\b/i // Echo Dot
|
||||
], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [
|
||||
/(homepod).+mac os/i // Apple HomePod
|
||||
], [MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]], [
|
||||
/windows iot/i
|
||||
], [[TYPE, EMBEDDED]], [
|
||||
|
||||
////////////////////
|
||||
// MIXED (GENERIC)
|
||||
///////////////////
|
||||
|
||||
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors
|
||||
], [MODEL, [TYPE, MOBILE]], [
|
||||
/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors
|
||||
], [MODEL, [TYPE, TABLET]], [
|
||||
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+?(mobile|vr|\d) safari/i
|
||||
], [MODEL, [TYPE, strMapper, { 'mobile' : 'Mobile', 'xr' : 'VR', '*' : TABLET }]], [
|
||||
/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i // Unidentifiable Tablet
|
||||
], [[TYPE, TABLET]], [
|
||||
/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile
|
||||
], [[TYPE, MOBILE]], [
|
||||
/(android[-\w\. ]{0,9});.+buil/i // Generic Android Device
|
||||
/droid .+?; ([\w\. -]+)( bui|\))/i // Generic Android Device
|
||||
], [MODEL, [VENDOR, 'Generic']]
|
||||
],
|
||||
|
||||
@@ -836,8 +898,11 @@
|
||||
/ekioh(flow)\/([\w\.]+)/i, // Flow
|
||||
/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
||||
/(icab)[\/ ]([23]\.[\d\.]+)/i, // iCab
|
||||
/\b(libweb)/i
|
||||
|
||||
/\b(libweb)/i // LibWeb
|
||||
], [NAME, VERSION], [
|
||||
/ladybird\//i
|
||||
], [[NAME, 'LibWeb']], [
|
||||
|
||||
/rv\:([\w\.]{1,9})\b.+(gecko)/i // Gecko
|
||||
], [VERSION, NAME]
|
||||
@@ -848,15 +913,15 @@
|
||||
// Windows
|
||||
/microsoft (windows) (vista|xp)/i // Windows (iTunes)
|
||||
], [NAME, VERSION], [
|
||||
/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i // Windows Phone
|
||||
/(windows (?:phone(?: os)?|mobile|iot))[\/ ]?([\d\.\w ]*)/i // Windows Phone
|
||||
], [NAME, [VERSION, strMapper, windowsVersionMap]], [
|
||||
/windows nt 6\.2; (arm)/i, // Windows RT
|
||||
/windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i,
|
||||
/windows nt 6\.2; (arm)/i, // Windows RT
|
||||
/windows[\/ ]([ntce\d\. ]+\w)(?!.+xbox)/i,
|
||||
/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i
|
||||
], [[VERSION, strMapper, windowsVersionMap], [NAME, WINDOWS]], [
|
||||
|
||||
// iOS/macOS
|
||||
/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS
|
||||
/[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS
|
||||
/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,
|
||||
/cfnetwork\/.+darwin/i
|
||||
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
||||
@@ -878,15 +943,15 @@
|
||||
|
||||
// Mobile OSes
|
||||
/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS
|
||||
], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS/OpenHarmony
|
||||
/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish|openharmony)[-\/ ]?([\w\.]*)/i,
|
||||
/(blackberry)\w*\/([\w\.]*)/i, // Blackberry
|
||||
/(tizen|kaios)[\/ ]([\w\.]+)/i, // Tizen/KaiOS
|
||||
/\((series40);/i // Series 40
|
||||
], [VERSION, NAME], [
|
||||
/(ubuntu) ([\w\.]+) like android/i // Ubuntu Touch
|
||||
], [[NAME, /(.+)/, '$1 Touch'], VERSION], [
|
||||
// Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen
|
||||
/(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\w*[-\/\.; ]?([\d\.]*)/i
|
||||
], [NAME, VERSION], [
|
||||
/\(bb(10);/i // BlackBerry 10
|
||||
], [VERSION, [NAME, BLACKBERRY]], [
|
||||
/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i // Symbian
|
||||
/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i // Symbian
|
||||
], [VERSION, [NAME, 'Symbian']], [
|
||||
/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i // Firefox OS
|
||||
], [VERSION, [NAME, FIREFOX+' OS']], [
|
||||
@@ -916,7 +981,7 @@
|
||||
/(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux
|
||||
/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
|
||||
// Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire
|
||||
/(hurd|linux) ?([\w\.]*)/i, // Hurd/Linux
|
||||
/(hurd|linux)(?: arm\w*| x86\w*| ?)([\w\.]*)/i, // Hurd/Linux
|
||||
/(gnu) ?([\w\.]*)/i, // GNU
|
||||
/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
|
||||
/(haiku) (\w+)/i // Haiku
|
||||
@@ -1153,17 +1218,31 @@
|
||||
|
||||
switch (this.itemType) {
|
||||
case UA_BROWSER:
|
||||
case UA_ENGINE:
|
||||
var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;
|
||||
if (brands) {
|
||||
for (var i in brands) {
|
||||
var brandName = strip(/(Google|Microsoft) /, brands[i].brand || brands[i]),
|
||||
var brandName = brands[i].brand || brands[i],
|
||||
brandVersion = brands[i].version;
|
||||
if (!/not.a.brand/i.test(brandName) && (!prevName || (/chrom/i.test(prevName) && !/chromi/i.test(brandName)))) {
|
||||
if (this.itemType == UA_BROWSER && !/not.a.brand/i.test(brandName) && (!prevName || (/chrom/i.test(prevName) && brandName != CHROMIUM))) {
|
||||
brandName = strMapper(brandName, {
|
||||
'Chrome' : 'Google Chrome',
|
||||
'Edge' : 'Microsoft Edge',
|
||||
'Chrome WebView' : 'Android WebView',
|
||||
'Chrome Headless' : 'HeadlessChrome',
|
||||
'Huawei Browser' : 'HuaweiBrowser',
|
||||
'MIUI Browser' : 'Miui Browser',
|
||||
'Opera Mobi' : 'OperaMobile',
|
||||
'Yandex' : 'YaBrowser'
|
||||
});
|
||||
this.set(NAME, brandName)
|
||||
.set(VERSION, brandVersion)
|
||||
.set(MAJOR, majorize(brandVersion));
|
||||
prevName = brandName;
|
||||
}
|
||||
if (this.itemType == UA_ENGINE && brandName == CHROMIUM) {
|
||||
this.set(VERSION, brandVersion);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1180,11 +1259,16 @@
|
||||
}
|
||||
if (uaCH[MODEL]) {
|
||||
this.set(MODEL, uaCH[MODEL]);
|
||||
}
|
||||
// Xbox-Specific Detection
|
||||
if (uaCH[MODEL] == 'Xbox') {
|
||||
this.set(TYPE, CONSOLE)
|
||||
.set(VENDOR, MICROSOFT);
|
||||
if (!this.get(TYPE) || !this.get(VENDOR)) {
|
||||
var reParse = {};
|
||||
rgxMapper.call(reParse, 'droid 9; ' + uaCH[MODEL] + ')', rgxMap);
|
||||
if (!this.get(TYPE) && !!reParse.type) {
|
||||
this.set(TYPE, reParse.type);
|
||||
}
|
||||
if (!this.get(VENDOR) && !!reParse.vendor) {
|
||||
this.set(VENDOR, reParse.vendor);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (uaCH[FORMFACTORS]) {
|
||||
var ff;
|
||||
|
||||
Reference in New Issue
Block a user