Merge tag '2.0.3' into pro-business

This commit is contained in:
Faisal Salman
2025-03-21 17:40:51 +07:00
182 changed files with 12343 additions and 9296 deletions

View File

@@ -1,6 +1,6 @@
# Prerequisites
- [ ] I have read and follow the contributing guidelines
- [ ] I have read and follow the [contributing](https://github.com/faisalman/ua-parser-js/blob/master/CONTRIBUTING.md) guidelines
- [ ] I have read and accept the [Contributor License Agreement (CLA)](https://gist.github.com/faisalman/2ed16621ebb544157eba85a7f7381417) Document and I hereby sign the CLA
# Type of Change

View File

@@ -10,14 +10,19 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
arch: [amd64, ppc64le]
arch: [amd64]
node-version: ['22.13', 'lts/*']
include:
- arch: ppc64le
node-version: 20
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 'lts/*'
node-version: ${{ matrix.node-version }}
- name: Run the test
run: |
echo "Running on ubuntu-latest-${{ matrix.arch }} with node version set as ${{ matrix.node-version }}"
npm ci
npx playwright install
npx playwright install --with-deps
npm test

View File

@@ -65,6 +65,59 @@
---
## Version 2.0.3
- Add new browser: Dooble, Ecosia, LG Browser, Otter, qutebrowser, Surf
- Add new device: BLU, Facebook Portal TV
- Improve device detection: Archos, LG, Meta Quest
- Remove jazzer.js fuzz test
- Improve `withClientHints()`:
- Browser naming adjustments:
- `HuaweiBrowser` => `Huawei Browser`
- `Miui Browser` => `MIUI Browser`
- `OperaMobile` => `Opera Mobi`
- `YaBrowser` => `Yandex`
- `extensions` submodule:
- Add new Crawler: AdIdxBot, Linespider, LinkedInBot, OpenAI Image Downloader, SemrushBot, Yahoo! Slurp
- Add new Fetcher: Better Uptime Bot, Google-PageRenderer, GoogleImageProxy, MicrosoftPreview, Snap URL Preview, SkypeUriPreview, TelegramBot
- Add new Vehicles: BMW, Jeep
- Add OS detection of WhatsApp user-agent
## Version 2.0.2
- Fix TypeScript dependency issue
## Version 2.0.1
- Add new browser: Ladybird, Daum
- Add new device: Apple HomePod
- Add new device vendor: HMD
- Add new OS: Ubuntu Touch, Windows IoT
- Improve CPU detection: ARM, x86
- Improve device detection: Lenovo, Nokia, Nvidia, Xiaomi
- Tablet: Google, Honor, Huawei, Infinix, Nokia, OnePlus, Xiaomi
- Wearable: Asus, Google, LG, Motorola, OnePlus, Oppo, Samsung, Sony
- Smart-TV: Xiaomi, unidentified vendors
- Improve detection for unknown VR devices
- Improve device model detection for Generic devices
- Improve OS detection: Linux, Symbian
- Improve TypeScript definitions for Headers
- Improve `withClientHints()`:
- `engine.version` also get updated
- Infer `device.vendor` & `device.type` by guessing from `device.model`
- Browser naming adjustments:
- `Google Chrome` => `Chrome`
- `Microsoft Edge` => `Edge`
- `Android WebView` => `Chrome WebView`
- `HeadlessChrome` => `Chrome Headless`
- `enums` submodule:
- Add TypeScript definitions
- `extensions` submodule:
- Add new list:
- `Vehicles`: BYD, Rivian, Volvo
- Add new Fetcher: Bluesky
- Add new Library: Apache-HttpClient, go-http-client, got, GuzzleHttp, Java-http-client, libwww-perl, lua-resty-http, Needle, OkHttp, node-fetch, PHP-SOAP, PostmanRuntime, superagent
## Version 2.0.0
- `ua-parser-js/extensions` submodule:
@@ -166,6 +219,23 @@
---
## Version 0.7.40 / 1.0.40
- Add new browser: 115, LibreWolf, Slimboat, Slimjet
- Add new device: Advan, Cat, Energizer, IMO, Micromax, Smartfren
- Add new engine: ArkWeb, Servo
- Add new os: OpenHarmony
- Improve browser detection: 2345, 360, Dragon, Iron, Maxthon
- Recognize Honor as a separate device vendor from Huawei
- Fix Python Request mistakenly identified as Meta Quest
## Version 0.7.39 / 1.0.39
- Add new feature: executable command using `npx ua-parser-js "[INSERT-UA-HERE]"`
- Add new browser: Helio, Pico Browser, Wolvic
- Add new device vendor: itel, Nothing, TCL
- Improve browser detection: ICEBrowser, Klar, QQBrowser, Quark, Rekonq, Sleipnir
- Improve device detection: Xiaomi Pro, Amazon Echo Show, Samsung Galaxy Watch
- Removed from browser: Viera
## Version 0.7.38 / 1.0.38
- Fix error on getOS() when userAgentData.platform is undefined
- Add new browser: Opera GX, Twitter
@@ -251,4 +321,4 @@ Version 1.0.x is basically the equivalent of version 0.7.x (mirror/duplicate). S
## Version 0.8
Version 0.8 was created by accident. This version is now deprecated and no longer maintained, please update to version 0.7 / 1.0.
Version 0.8 was created by accident. This version is now deprecated and no longer maintained, please update to version 0.7 / 1.0.

View File

@@ -4,4 +4,4 @@
* Make some changes as required
* Write unit test to showcase its functionality under `/test`
* Run the test suites to make sure it's not breaking anything `$ npm run build+test`
* Submit a pull request under `develop` branch & check the CLA in the submission form
* Submit a pull request & check the CLA in the submission form

View File

@@ -14,6 +14,7 @@ If you have not yet purchased a license, you may do so at https://store.faisalma
npm install @ua-parser-js/pro-business
```
# Documentation
https://docs.uaparser.dev
@@ -26,4 +27,4 @@ import { UAParser } from '@ua-parser-js/pro-business';
UAParser.js PRO Business
Copyright (c) 2023-2024 Faisal Salman <<f@faisalman.com>>
Copyright (c) 2023-2024 Faisal Salman <<f@faisalman.com>>

File diff suppressed because one or more lines are too long

4
dist/ua-parser.min.mjs vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

4
dist/ua-parser.pack.mjs vendored Normal file

File diff suppressed because one or more lines are too long

3535
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{
"title": "UAParser.js PRO Business",
"name": "@ua-parser-js/pro-business",
"version": "2.0.0",
"version": "2.0.3",
"author": "Faisal Salman <f@faisalman.com> (http://faisalman.com)",
"description": "Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent & Client Hints data. Supports browser & node.js environment",
"keywords": [
@@ -25,14 +25,17 @@
"contributors": [
"Aamir Poonawalla <aamir@urx.com>",
"Admas <mollases@users.noreply.github.com>",
"Aiyush <aiyushdhar85@gmail.com>",
"algenon <m@antonz.ru>",
"Alvin Portillo <alvin@8thwall.com>",
"Amumu <yoyo837@hotmail.com>",
"Andreas Kogler <andreas.kogler@bitmovin.com>",
"Andrea Vaghi <andrea.vaghi@jobrapido.com>",
"Anton Zhiyanov <m@antonz.ru>",
"Arturo Mejia <amejia@blim.com>",
"Arun Rama Reddy <arunramareddy@gmail.com>",
"Austin Pray <austin@austinpray.com>",
"Beat YT <66485277+Beat-YT@users.noreply.github.com>",
"Bendeguz <symunona@gmail.com>",
"Benjamin Bertrand <bertrand.design@gmail.com>",
"Benjamin Urban <benjamin.urban@sueddeutsche.de>",
@@ -44,6 +47,8 @@
"chenyuan-new <53860479+chenyuan-new@users.noreply.github.com>",
"Christopher De Cairos <chris.decairos@gmail.com>",
"Cyrille David <cyrille@qonto.eu>",
"Dai Jie <daijie@php.net>",
"Danila Rodichkin <daniluk4000@outlook.com>",
"Dante <duanjl.china@gmail.com>",
"Dario Vladovic <d.vladimyr@gmail.com>",
"David Annez <david.annez@gmail.com>",
@@ -73,11 +78,15 @@
"Grigory Dmitrenko <grigory@snsk.ru>",
"gulpin <gulping.gulpin@gmail.com>",
"Hans Ott <hansott@hotmail.be>",
"Harald Reingruber <74898239+haraldreingruber-dedalus@users.noreply.github.com>",
"Hendrik Helwich <h.helwich@iplabs.de>",
"Hermann Ebert <ebbmo@HE.local>",
"hr6r <hedian@gmail.com>",
"Hyewon Kang <gpffps369@gmail.com>",
"Hyunbin <47051820+hyunbinseo@users.noreply.github.com>",
"Igor Topal <i.topal@smartweb.com.ua>",
"Ildar Kamalov <i.kamalov@adguard.com>",
"Ilya Daraseliya <idarase@gmail.com>",
"insanehong <insane.hong@navercorp.com>",
"jackpoll <jackpoll123456@gmail.com>",
"Jacky Choo <jackychoo@adly-macbook.local>",
@@ -98,6 +107,7 @@
"Liam Quinn <lquinn@blackberry.com>",
"Lithin <lithin@webklipper.com>",
"liujunlve <liujunlve@henhaoji.com>",
"lj0812 <xoyljlj@163.com>",
"ll-syber <670159357@qq.com>",
"Loris Guignard <loris.guignard@gmail.com>",
"Lukas Drgon <lukas.drgon@gmail.com>",
@@ -111,6 +121,7 @@
"Max Maurer <maxemanuel.maurer@gmail.com>",
"Max Nordlund <max.nordlund@gmail.com>",
"Michael Hess <mhess@connectify.me>",
"Mike <mikehuebner@me.com>",
"MimyyK <michele.marais@hakisa.com>",
"Mok <mok@moekm.com>",
"nabetama <mao.nabeta@gmail.com>",
@@ -124,6 +135,7 @@
"o.drapeza <o.drapeza@tinkoff.ru>",
"Oscar Becerra <oscarbecerra@google.com>",
"otakuSiD <otakusid@gmail.com>",
"Pablo Osés <opablo@gmail.com>",
"Paris Morgan <paris@8thwall.com>",
"patrick-nurt <github@pereira.dk>",
"Pavel Studeny <studeny@avast.com>",
@@ -202,31 +214,32 @@
"scripts": {
"build": "./script/build-dist.sh && ./script/build-esm.js",
"build+test": "npm run build && npm run test",
"fuzz": "jazzer ./test/jazzer-fuzz-test.js --sync",
"fuzz": "jazzer ./test/fuzz/redos.js --sync",
"test": "./script/test-all.sh",
"test:dts-lint": "tsd --typings src/main/ua-parser.d.ts --files test/dts-test.ts",
"test:dts-lint": "tsd --typings src/main/ua-parser.d.ts --files test/static/dts-lint.ts",
"test:eslint": "eslint src && eslint script",
"test:jshint": "jshint src/main",
"test:lockfile-lint": "npx lockfile-lint -p package-lock.json",
"test:mocha": "mocha test/mocha*js",
"test:playwright": "playwright test"
"test:mocha": "mocha test/unit",
"test:playwright": "npx playwright install && playwright test test/e2e --browser all"
},
"dependencies": {
"detect-europe-js": "^0.1.2",
"is-standalone-pwa": "^0.1.1",
"ua-is-frozen": "^0.1.2"
"ua-is-frozen": "^0.1.2",
"node-fetch": "^2.7.0",
"@types/node-fetch": "^2.6.12"
},
"devDependencies": {
"@babel/parser": "7.15.8",
"@babel/traverse": "7.23.2",
"@jazzer.js/core": "^1.4.0",
"@playwright/test": "~1.32.2",
"@playwright/test": "^1.49.0",
"jshint": "~2.13.6",
"mocha": "~8.2.0",
"requirejs": "2.3.2",
"safe-regex": "^2.1.1",
"tsd": "^0.29.0",
"uglify-js": "~3.12.0"
"uglify-js": "~3.19.3"
},
"repository": {
"type": "git",

View File

@@ -4,10 +4,20 @@ SRC_PATH="src/main/ua-parser.js"
MIN_PATH="dist/ua-parser.min.js"
PACK_PATH="dist/ua-parser.pack.js"
SRC_PATH_MJS="src/main/ua-parser.mjs"
MIN_PATH_MJS="dist/ua-parser.min.mjs"
PACK_PATH_MJS="dist/ua-parser.pack.mjs"
# minified
echo "Generate ${MIN_PATH}"
uglifyjs $SRC_PATH -o $MIN_PATH --comments "/^ UA/"
echo "Generate ${MIN_PATH_MJS}"
uglifyjs $SRC_PATH_MJS -o $MIN_PATH_MJS --comments "/^ UA/" --module
# packed
echo "Generate ${PACK_PATH}"
uglifyjs $SRC_PATH -o $PACK_PATH --comments "/^ UA/" --compress --mangle
uglifyjs $SRC_PATH -o $PACK_PATH --comments "/^ UA/" --compress --mangle
echo "Generate ${PACK_PATH_MJS}"
uglifyjs $SRC_PATH_MJS -o $PACK_PATH_MJS --comments "/^ UA/" --compress --mangle --module

374
src/enums/ua-parser-enums.d.ts vendored Normal file
View 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";
}>;

View File

@@ -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',

View File

@@ -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',

View File

@@ -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;

View File

@@ -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
};

View File

@@ -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
};

View File

@@ -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;

View File

@@ -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',

View File

@@ -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',

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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;

View File

@@ -511,6 +511,16 @@
"major" : "2"
}
},
{
"desc" : "Dooble",
"ua" : "Mozilla/5.0 (X11; Haiku BePC) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.15.17 Chrome/87.0.4280.144 Safari/537.36 Dooble/2023.12.25 Dooble/2023.12.25",
"expect" :
{
"name" : "Dooble",
"version" : "2023.12.25",
"major" : "2023"
}
},
{
"desc" : "Doris",
"ua" : "Doris/1.15 [en] (Symbian)",
@@ -541,6 +551,26 @@
"major" : "5"
}
},
{
"desc" : "Ecosia on Android",
"ua" : "Mozilla/5.0 (Linux; Android 10; SM-G975U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36 (Ecosia android@85.0.4183.127)",
"expect" :
{
"name" : "Ecosia",
"version" : "85.0.4183.127",
"major" : "85"
}
},
{
"desc" : "Ecosia on iOS",
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 (Ecosia ios@3.0.1.533)",
"expect" :
{
"name" : "Ecosia",
"version" : "3.0.1.533",
"major" : "3"
}
},
{
"desc" : "Epiphany",
"ua" : "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7) Gecko/20040628 Epiphany/1.2.6",
@@ -1006,6 +1036,16 @@
"major" : "5"
}
},
{
"desc" : "Otter",
"ua" : "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/602.1 (KHTML, like Gecko) Otter/1.0.81",
"expect" :
{
"name" : "Otter",
"version" : "1.0.81",
"major" : "1"
}
},
{
"desc" : "PicoBrowser",
"ua" : "Mozilla/5.0 (X11; Linux x86_64; Pico Neo3 Link OS5.8.4.0 like Quest) AppleWebKit/537.36 (KHTML, like Gecko) PicoBrowser/3.3.22 Chrome/105.0.5195.68 VR Safari/537.36",
@@ -1067,13 +1107,33 @@
}
},
{
"desc" : "LibreWolf",
"ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 LibreWolf/91.0",
"desc" : "Surf Browser",
"ua" : "Mozilla/5.0 (Android 6.0; HUAWEI ALE-L21) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 SurfBrowser/3.0",
"expect" :
{
"name" : "LibreWolf",
"version" : "91.0",
"major" : "91"
"name" : "Surf",
"version" : "3.0",
"major" : "3"
}
},
{
"desc" : "LG Browser",
"ua" : "Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/537.1+ (KHTML, like Gecko) Safari/537.1+ LG Browser/6.00.00(+mouse+3D+SCREEN+TUNER; LGE; 47LA621V-ZD; 04.28.17; 0x00000001;); LG NetCast.TV-2013 /04.28.17 (LG, 47LA621V-ZD, wired)",
"expect" :
{
"name" : "LG Browser",
"version" : "6.00.00",
"major" : "6"
}
},
{
"desc" : "Ladybird",
"ua" : "Mozilla/5.0 (Linux; x86_64) Ladybird/1.0",
"expect" :
{
"name" : "Ladybird",
"version" : "1.0",
"major" : "1"
}
},
{
@@ -1618,6 +1678,16 @@
"major" : "1"
}
},
{
"desc" : "qutebrowser",
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) qutebrowser/2.4.0 QtWebEngine/5.15.6 Chrome/95.0.4628.2 Safari/537.36",
"expect" :
{
"name" : "qutebrowser",
"version" : "2.4.0",
"major" : "2"
}
},
{
"desc" : "Rekonq 2",
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) rekonq/2.2.1 Safari/537.21",
@@ -2493,6 +2563,26 @@
"type" : "inapp"
}
},
{
"desc" : "Daum App Android",
"ua" : "Mozilla/5.0 (Linux; Android 11; SM-G970N Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36 DaumApps/7.5.0 DaumDevice/mobile",
"expect" : {
"name" : "Daum",
"version": "7.5.0",
"major" : "7",
"type" : "inapp"
}
},
{
"desc" : "Daum App iOS",
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 18_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Safari/605.1.15 Mobile/15E148 DaumApps/7.5.1 DaumDevice/mobile",
"expect" : {
"name" : "Daum",
"version": "7.5.1",
"major" : "7",
"type" : "inapp"
}
},
{
"desc" : "TikTok",
"ua" : "Mozilla/5.0 (Linux; Android 11; 21061119AG Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 trill_2022109040 JsSdk/1.0 NetType/MOBILE Channel/googleplay AppName/musical_ly app_version/21.9.4 ByteLocale/ru-RU ByteFullLocale/ru-RU Region/KG BytedanceWebview/d8a21c6",

View File

@@ -7,6 +7,14 @@
"architecture" : "ia32"
}
},
{
"desc" : "i686",
"ua" : "Mozilla/5.0 (X11; U; CrOS i686 9.10.0; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.253.0 Safari/532.5",
"expect" :
{
"architecture" : "ia32"
}
},
{
"desc" : "i386",
"ua" : "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7) Gecko/20040628 Epiphany/1.2.6",
@@ -167,6 +175,14 @@
"architecture" : "arm64"
}
},
{
"desc" : "Google Search App",
"ua" : "Mozilla/5.0 (Linux; Android 9; JAT-LX1 Build/HONORJAT-LX1; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.96 Mobile Safari/537.36 GoogleApp/11.11.10.21.arm",
"expect" :
{
"architecture" : "arm"
}
},
{
"desc" : "Google Search App",
"ua" : "Mozilla/5.0 (Linux; Android 6.0; M5s Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/44.0.2403.147 Mobile Safari/537.36 GSA/12.40.17.23.arm64",
@@ -262,5 +278,13 @@
{
"architecture" : "68k"
}
},
{
"desc" : "x86",
"ua" : "Mozilla/5.0 (Photon; U; QNX x86pc; en-US; rv:1.8.1.20) Gecko/20090127 BonEcho/2.0.0.20",
"expect" :
{
"architecture" : "ia32"
}
}
]

View File

@@ -0,0 +1,302 @@
[
{
"desc": "Generic Android Device",
"ua": "Dalvik/2.1.0 (Linux; U; Android 9; X96mini_RP Build/X96mini_RP)",
"expect": {
"vendor": "Generic",
"model": "X96mini_RP"
}
},
{
"desc": "Generic Android Device",
"ua": "Mozilla/5.0 (Linux; U; Android 6.0.1; i980 Build/MRA58K)",
"expect": {
"vendor": "Generic",
"model": "i980"
}
},
{
"desc": "K",
"ua": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "undefined",
"model": "K",
"type": "mobile"
}
},
{
"desc": "Unknown VR Device",
"ua": "Mozilla/5.0 (Linux; Android 5.0.2; Unknown Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile VR Safari/537.36",
"expect": {
"model": "Unknown",
"type": "xr"
}
},
{
"desc": "Desktop (IE11 with Tablet string)",
"ua": "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0; GWX:MANAGED; rv:11.0) like Gecko",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "undefined"
}
},
{
"desc": "Mobile (DuckDuckGo mobile browser)",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile DuckDuckGo/5 Safari/537.36",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "mobile"
}
},
{
"desc": "ChangHong Android TV",
"ua": "Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; ChangHong Android TV Build/LMY49J) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/10.8 Mobile Safari/537.36",
"expect": {
"vendor": "undefined",
"model": "ChangHong",
"type": "smarttv"
}
},
{
"desc": "MStar Android TV",
"ua": "Mozilla/5.0 (Linux; Android 4.3.1; MStar Android TV Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.95 Safari/537.36",
"expect": {
"vendor": "undefined",
"model": "MStar",
"type": "smarttv"
}
},
{
"desc": "ONIDA Android TV",
"ua": "Mozilla/5.0 (Linux; Android 6.0; ONIDA Android TV Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2542.0 Mobile Safari/537.36",
"expect": {
"vendor": "undefined",
"model": "ONIDA",
"type": "smarttv"
}
},
{
"desc": "JVC LT-43V55LFA Smart TV",
"ua": "Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 OPR/40.0.2207.0 OMI/4.9.0.237.DOM3-OPT.245 Model/Vestel-MB211 VSTVB MB200 HbbTV/1.2.1 (; JVC; MB211; 3.19.4.2; _TV_NT72563_2017 SmartTvA/3.0.0",
"expect": {
"vendor": "JVC",
"model": "MB211",
"type": "smarttv"
}
},
{
"desc": "JVC LT-43V65LUA Smart TV",
"ua": "Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 OPR/40.0.2207.0 OMI/4.9.0.237.DOM3-OPT.245 Model/Vestel-MB130 VSTVB MB100 HbbTV/1.2.1 (; JVC; MB130; 5.7.20.0; _TV_G10_2017;) SmartTvA/3.0.0",
"expect": {
"vendor": "JVC",
"model": "MB130",
"type": "smarttv"
}
},
{
"desc": "Loewe Smart TV",
"ua": "Mozilla/5.0 (Linux; U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2207.0 LOEWE-SL410/5.2.0.0 HbbTV/1.4.1 (; LOEWE; SL410; LOH/5.2.0.0;;) FVC/3.0 (LOEWE; SL410;) CE-HTML/1.0 Config (L:deu,CC:DEU) NETRANGEMMH",
"expect": {
"vendor": "LOEWE",
"model": "SL410",
"type": "smarttv"
}
},
{
"desc": "Issue #747",
"ua": "python-requests/2.25.1",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "undefined"
}
},
{
"desc": "Issue #454",
"ua": "Mosamzilla/5.0 (Windows; U; Win98; en-US; rv:1.7.5) Gecko/20050603 Netscape/8.0.2",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "undefined"
}
},
{
"desc": "OnePlus 7T Pro",
"ua": "Mozilla/5.0 (Linux; Android 10; HD1913) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.5563.57 Mobile Safari/537.36 EdgA/110.0.1587.66",
"expect": {
"vendor": "undefined",
"model": "HD1913",
"type": "mobile"
}
},
{
"desc": "Philips SmartTV",
"ua": "Opera/9.80 HbbTV/1.1.1 (; Philips; ; ; ; ) NETTV/4.0.2; en) Version/11.60",
"expect": {
"vendor": "Philips",
"model": "",
"type": "smarttv"
}
},
{
"desc": "Philips 32PFL6606K/02 SmartTV (2011)",
"ua": "Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.1.0; en) Presto/2.6.33 Version/10.70",
"expect": {
"vendor": "Philips",
"model": "",
"type": "smarttv"
}
},
{
"desc": "Philips 32PFL6606K/02 SmartTV (2013)",
"ua": "Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.1.0; en) Presto/2.6.33 Version/10.70",
"expect": {
"vendor": "Philips",
"model": "",
"type": "smarttv"
}
},
{
"desc": "Philips 32PHS5301/12 SmartTV (2016)",
"ua": "Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36 OPR/29.0.1803.0 OMI/4.5.23.37.MOT2.13 HbbTV/1.2.1 (;Philips;32PHS5301/12;;_TV_MT5800;) Firmware/TPM161E_012.002.045.001 en",
"expect": {
"vendor": "Philips",
"model": "32PHS5301/12",
"type": "smarttv"
}
},
{
"desc": "Samsung SmartTV",
"ua": "Mozilla/5.0 (SMART-TV; X11; Linux armv7l) AppleWebkit/537.42 (KHTML, like Gecko) Safari/537.42",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "smarttv"
}
},
{
"desc": "Android Phone Unidentified Vendor (docomo F-04K)",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; F-04K Build/V15R060P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Mobile Safari/537.36",
"expect": {
"model": "F-04K",
"type": "mobile"
}
},
{
"desc": "Android Tablet Unidentified Vendor (docomo F-02K)",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; F-02K Build/V44R059G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Safari/537.36",
"expect": {
"model": "F-02K",
"type": "tablet"
}
},
{
"desc": "Android Tablet Unidentified Vendor (docomo d-02K)",
"ua": "Mozilla/5.0 (Linux; Android 9; d-02K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.136 Safari/537.36",
"expect": {
"model": "d-02K",
"type": "tablet"
}
},
{
"desc": "Android TV",
"ua": "Mozilla/5.0 (Linux; Android 10; 2020/2021 UHD Android TV Build/QTG3.201102.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "smarttv"
}
},
{
"desc": "Unknown Mobile using Firefox",
"ua": "Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "mobile"
}
},
{
"desc": "Unknown Tablet using Firefox",
"ua": "Mozilla/5.0 (Android 4.4; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "tablet"
}
},
{
"desc": "Unknown Mobile using Focus for Android",
"ua": "Mozilla/5.0 (Linux; Android 7.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/1.0 Chrome/59.0.3029.83 Mobile Safari/537.36",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "mobile"
}
},
{
"desc": "Unknown Tablet using Focus for Android",
"ua": "Mozilla/5.0 (Linux; Android 7.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/1.0 Chrome/59.0.3029.83 Safari/537.36",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "tablet"
}
},
{
"desc": "Unknown Device using Focus for Android with GeckoView",
"ua": "Mozilla/5.0 (Android 7.0; Mobile; rv:62.0) Gecko/62.0 Firefox/62.0",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "mobile"
}
},
{
"desc": "Unknown Mobile using Firefox OS",
"ua": "Mozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "mobile"
}
},
{
"desc": "Unknown Tablet using Firefox OS",
"ua": "Mozilla/5.0 (Tablet; rv:26.0) Gecko/26.0 Firefox/26.0",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "tablet"
}
},
{
"desc": "Unknown TV using Firefox OS",
"ua": "Mozilla/5.0 (TV; rv:44.0) Gecko/44.0 Firefox/44.0",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "smarttv"
}
},
{
"desc": "PDA with Windows CE",
"ua": "Mozilla/4.0 (PDA; Windows CE/1.0.1) NetFront/3.0",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "mobile"
}
},
{
"desc" : "Windows IoT",
"ua" : "Mozilla/5.0 (Windows IoT 10.0; Android 6.0.1; WebView/3.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Mobile Safari/537.36 Edge/18.17763",
"expect": {
"vendor": "undefined",
"model": "undefined",
"type": "embedded"
}
}
]

View File

@@ -0,0 +1,11 @@
[
{
"desc": "Acer Iconia A1-810",
"ua": "Mozilla/5.0 (Linux; Android 4.2.2; A1-810 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Safari/537.36",
"expect": {
"vendor": "Acer",
"model": "A1-810",
"type": "tablet"
}
}
]

View File

@@ -0,0 +1,29 @@
[
{
"desc": "Advan M4",
"ua": "Mozilla/5.0 (Linux; U; Android 6.0; ADVAN M4 Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/44.0.2403.119 Mobile Safari/537.36 OPR/28.0.2254.119214",
"expect": {
"vendor": "ADVAN",
"model": "M4",
"type": "mobile"
}
},
{
"desc": "Advan S40",
"ua": "Mozilla/5.0 (Linux; Android 7.0; ADVAN S40 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Mobile Safari/537.36 EdgA/79.0.309.58",
"expect": {
"vendor": "ADVAN",
"model": "S40",
"type": "mobile"
}
},
{
"desc": "Advan Sketsa 2",
"ua": "Mozilla/5.0 (Linux; Android 11; ADVAN 1011) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.101 Safari/537.36",
"expect": {
"vendor": "ADVAN",
"model": "1011",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,29 @@
[
{
"desc": "Alcatel 4056W",
"ua": "Mozilla/5.0 (Mobile; ALCATEL 4056W; rv:84.0) Gecko/84.0 Firefox/84.0 KAIOS/3.0",
"expect": {
"vendor": "ALCATEL",
"model": "4056W",
"type": "mobile"
}
},
{
"desc": "Alcatel A564C",
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; ALCATEL A564C Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.133 Mobile Safari/537.36",
"expect": {
"vendor": "ALCATEL",
"model": "A564C",
"type": "mobile"
}
},
{
"desc": "Alcatel Go Flip",
"ua": "Mozilla/5.0 (Mobile; ALCATEL4044T; rv:37.0) Gecko/37.0 Firefox/37.0 KaiOS/1.0",
"expect": {
"vendor": "ALCATEL",
"model": "4044T",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,137 @@
[
{
"desc": "Kindle Fire HD",
"ua": "Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.4 Mobile Safari/535.19 Silk-Accelerated=true",
"expect": {
"vendor": "Amazon",
"model": "KFTT",
"type": "tablet"
}
},
{
"desc": "Kindle Fire HD",
"ua": "Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.4 Mobile Safari/535.19 Silk-Accelerated=true",
"expect": {
"vendor": "Amazon",
"model": "KFTT",
"type": "tablet"
}
},
{
"desc": "Echo Show 5",
"ua": "Mozilla/5.0 (Linux; Android 5.1; AEORK Build/LVY48F; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.110 Mobile Safari/537.36",
"expect": {
"vendor": "Amazon",
"model": "AEORK",
"type": "tablet"
}
},
{
"desc": "Echo Show 8",
"ua": "Mozilla/5.0 (Linux; Android 7.1; AEOCH) AppleWebKit/537.36 (KHTML, like Gecko) Silk/77.2.21 like Chrome/77.0.3865.92 Mobile Safari/537.36",
"expect": {
"vendor": "Amazon",
"model": "AEOCH",
"type": "tablet"
}
},
{
"desc": "Echo Show 8",
"ua": "Mozilla/5.0 (Linux; Android 7.1.2; AEOCW) AppleWebKit/537.36 (KHTML, like Gecko) Silk/106.3.3 like Chrome/106.0.5249.170 Safari/537.36",
"expect": {
"vendor": "Amazon",
"model": "AEOCW",
"type": "tablet"
}
},
{
"desc": "Echo Show 15",
"ua": "Mozilla/5.0 (Linux; Android 9; AEOHY) AppleWebKit/537.36 (KHTML, like Gecko) Silk/112.6.3 like Chrome/112.0.5615.213 Safari/537.36",
"expect": {
"vendor": "Amazon",
"model": "AEOHY",
"type": "tablet"
}
},
{
"desc": "Echo Dot",
"ua": "Dalvik/2.1.0 (Linux; U; Android 5.1.1; AEOBC Build/LVY48F)",
"expect": {
"vendor": "Amazon",
"model": "AEOBC",
"type": "embedded"
}
},
{
"desc": "Amazon Kindle Fire Tablet",
"ua": "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFSAWI Build/KTU84M) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.66 like Chrome/39.0.2171.93 Safari/537.36",
"expect": {
"vendor": "Amazon",
"model": "KFSAWI",
"type": "tablet"
}
},
{
"desc": "Amazon Kindle Fire Tablet",
"ua": "Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; KFSAWI) AppleWebKit/537.36 (KHTML, like Gecko) Silk/3.66 like Chrome/39.0.2171.93 Safari/537.36",
"expect": {
"vendor": "Amazon",
"model": "KFSAWI",
"type": "tablet"
}
},
{
"desc": "Amazon Kindle Fire Tablet",
"ua": "Mozilla/5.0 (Linux; Android 9; KFMAWI Build/PS7312; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.110 Safari/537.36",
"expect": {
"vendor": "Amazon",
"model": "KFMAWI",
"type": "tablet"
}
},
{
"desc": "Amazon Fire TV",
"ua": "Mozilla/5.0 (Linux; Android 4.2.2; AFTB Build/JDQ39) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.173 Mobile Safari/537.22",
"expect": {
"vendor": "Amazon",
"model": "B",
"type": "smarttv"
}
},
{
"desc": "Amazon Fire TV",
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; AFTT) AppleWebKit/537.36 (KHTML, like Gecko) Silk/86.3.20 like Chrome/86.0.4240.198 Safari/537.36",
"expect": {
"vendor": "Amazon",
"model": "T",
"type": "smarttv"
}
},
{
"desc": "Amazon Fire TV",
"ua": "Mozilla/5.0 (Linux; Android 9; AFTKA Build/PS7633.3445N; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/108.0.5359.160 Mobile Safari/537.36",
"expect": {
"vendor": "Amazon",
"model": "KA",
"type": "smarttv"
}
},
{
"desc": "Amazon Fire 7",
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; KFAUWI) AppleWebKit/537.36 (KHTML, like Gecko) Silk/80.5.3 like Chrome/80.0.3987.162 Safari/537.36",
"expect": {
"vendor": "Amazon",
"model": "KFAUWI",
"type": "tablet"
}
},
{
"desc": "Amazon Alexa Echo Show",
"ua": "AlexaWebMediaPlayer/1.0.200641.0 (Linux;Android 5.1.1)",
"expect": {
"vendor": "Amazon",
"model": "Alexa",
"type": "tablet"
}
}
]

View File

@@ -0,0 +1,137 @@
[
{
"desc": "Apple Desktop",
"ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15",
"expect": {
"vendor": "Apple",
"model": "Macintosh",
"type": "undefined"
}
},
{
"desc": "Apple Watch",
"ua": "atc/1.0 watchOS/7.3.3 model/Watch4,2 hwp/t8006 build/18S830 (6; dt:191)",
"expect": {
"vendor": "Apple",
"model": "watch",
"type": "wearable"
}
},
{
"desc": "iPad using UCBrowser",
"ua": "Mozilla/5.0 (iPad; U; CPU OS 11_2 like Mac OS X; zh-CN; iPad5,3) AppleWebKit/534.46 (KHTML, like Gecko) UCBrowser/3.0.1.776 U3/ Mobile/10A403 Safari/7543.48.3",
"expect": {
"vendor": "Apple",
"model": "iPad",
"type": "tablet"
}
},
{
"desc": "iPad Air",
"ua": "Mozilla/5.0 (iPad; CPU OS 12_4_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [FBAN/FBIOS;FBDV/iPad4,1;FBMD/iPad;FBSN/iOS;FBSV/12.4.5;FBSS/2;FBID/tablet;FBLC/en_US;FBOP/5;FBCR/]",
"expect": {
"vendor": "Apple",
"model": "iPad",
"type": "tablet"
}
},
{
"desc": "iPad using Facebook Browser",
"ua": "Mozilla/5.0 (iPad; CPU OS 14_4_2 like Mac OS X) WebKit/8610 (KHTML, like Gecko) Mobile/18D70 [FBAN/FBIOS;FBDV/iPad7,11;FBMD/iPad;FBSN/iOS;FBSV/14.4.2;FBSS/2;FBID/tablet;FBLC/en_US;FBOP/5]",
"expect": {
"vendor": "Apple",
"model": "iPad",
"type": "tablet"
}
},
{
"desc": "iPod",
"ua": "Mozilla/5.0 (iPod touch; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B554a Safari/9537.53",
"expect": {
"vendor": "Apple",
"model": "iPod touch",
"type": "mobile"
}
},
{
"desc": "iPhone",
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53",
"expect": {
"vendor": "Apple",
"model": "iPhone",
"type": "mobile"
}
},
{
"desc": "iPhone SE",
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [FBAN/FBIOS;FBDV/iPhone8,4;FBMD/iPhone;FBSN/iOS;FBSV/13.3.1;FBSS/2;FBID/phone;FBLC/en_US;FBOP/5;FBCR/]",
"expect": {
"vendor": "Apple",
"model": "iPhone",
"type": "mobile"
}
},
{
"desc": "iPhone SE using Facebook App",
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [FBAN/FBIOS;FBDV/iPhone8,4;FBMD/iPhone;FBSN/iOS;FBSV/13.3.1;FBSS/2;FBID/phone;FBLC/en_US;FBOP/5;FBCR/]",
"expect": {
"vendor": "Apple",
"model": "iPhone",
"type": "mobile"
}
},
{
"desc": "iPhone 11 Pro Max",
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [FBAN/FBIOS;FBDV/iPhone12,5;FBMD/iPhone;FBSN/iOS;FBSV/13.3.1;FBSS/3;FBID/phone;FBLC/en_US;FBOP/5;FBCR/]",
"expect": {
"vendor": "Apple",
"model": "iPhone",
"type": "mobile"
}
},
{
"desc": "iPhone XS",
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [FBAN/FBIOS;FBDV/iPhone11,2;FBMD/iPhone;FBSN/iOS;FBSV/13.3.1;FBSS/3;FBID/phone;FBLC/en_US;FBOP/5;FBCR/]",
"expect": {
"vendor": "Apple",
"model": "iPhone",
"type": "mobile"
}
},
{
"desc": "iPod touch",
"ua": "Mozilla/5.0 (iPod touch; CPU iPhone OS 7_0_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A501 Safari/9537.53",
"expect": {
"vendor": "Apple",
"model": "iPod touch",
"type": "mobile"
}
},
{
"desc": "FaceBook Mobile App",
"ua": "[FBAN/FBIOS;FBAV/283.0.0.44.117;FBBV/238386386;FBDV/iPhone12,1;FBMD/iPhone;FBSN/iOS;FBSV/13.6.1;FBSS/2;FBID/phone;FBLC/en_US;FBOP/5;FBRV/240127608]",
"expect": {
"vendor": "Apple",
"model": "iPhone12,1",
"type": "mobile"
}
},
{
"desc": "Apple HomePod",
"ua": "AppleCoreMedia/1.0.0.15D61 (HomePod; U; CPU OS 11_2_5 like Mac OS X; en_us)",
"expect": {
"vendor": "Apple",
"model": "HomePod",
"type": "embedded"
}
},
{
"desc": "Issue #519",
"ua": "ios/iPhone/14.2/SOME_CUSTOM_APP_VERSION",
"expect": {
"vendor": "Apple",
"model": "iPhone",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,227 @@
[
{
"desc": "Archos 5",
"ua": "Mozilla/5.0 (Linux; U; Android 1.6; fr-fr; Archos5 Build/Donut) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"expect": {
"vendor": "Archos",
"model": "5",
"type": "tablet"
}
},
{
"desc": "Archos 40b Titanium Surround",
"ua": "Mozilla/5.0 (Linux; Android 4.2.2; Archos 40b Titanium Surround Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "40b Titanium Surround",
"type": "mobile"
}
},
{
"desc": "Archos 40c Titanium v2",
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; ARCHOS 40C TIv2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "40C TIv2",
"type": "mobile"
}
},
{
"desc": "Archos 45 Neon",
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; Archos 45 Neon Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "45 Neon",
"type": "mobile"
}
},
{
"desc": "Archos 45 Neon",
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; AC45NE Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 YaBrowser/15.6.2311.6088.00 Mobile Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "AC45NE",
"type": "mobile"
}
},
{
"desc": "Archos 45B Helium",
"ua": "Mozilla/5.0 (Linux; Android 7.0; AC45BHE Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "AC45BHE",
"type": "mobile"
}
},
{
"desc": "Archos 45B Titanium",
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; Archos 45B Titanium) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "45B Titanium",
"type": "mobile"
}
},
{
"desc": "Archos 50 Cesium",
"ua": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; ARCHOS; AC50CE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/13.10586",
"expect": {
"vendor": "Archos",
"model": "AC50CE",
"type": "mobile"
}
},
{
"desc": "Archos 50B Helium 4G",
"ua": "Mozilla/5.0 (Linux; Android 4.4.4; AC50BHE Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "AC50BHE",
"type": "mobile"
}
},
{
"desc": "Archos 55 diamond Selfie",
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; Archos 55 diamond Selfie Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/68.0.3440.91 Mobile Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "55 diamond Selfie",
"type": "mobile"
}
},
{
"desc": "Archos 80 G9",
"ua": "Mozilla/5.0 (Linux; U; Android 4.0.4; zh-tw; ARCHOS 80G9 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30",
"expect": {
"vendor": "Archos",
"model": "80G9",
"type": "tablet"
}
},
{
"desc": "Archos 80 Xenon",
"ua": "Mozilla/5.0 (Linux; Android 4.1.2; Archos 80 Xenon Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.99 Safari/537.36 OPR/50.6.2426.201126",
"expect": {
"vendor": "Archos",
"model": "80 Xenon",
"type": "tablet"
}
},
{
"desc": "Archos 97c Platinum",
"ua": "Mozilla/5.0 (Linux; Android 6.0; Archos 97c Platinum Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "97c Platinum",
"type": "tablet"
}
},
{
"desc": "Archos 101 Access 3G V2",
"ua": "Mozilla/5.0 (Linux; Android 7.0; Archos Access 101 3G V2 Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/114.0.5735.130 Safari/537.36[FBAN/EMA;FBLC/pt_PT;FBAV/360.0.0.7.53;]",
"expect": {
"vendor": "Archos",
"model": "Access 101 3G V2",
"type": "tablet"
}
},
{
"desc": "Archos 101 Oxygen 4G",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; Archos 101 Oxygen 4G Build/O11019; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.71 Safari/537.36 [FB_IAB/FB4A;FBAV/374.0.0.20.109;]",
"expect": {
"vendor": "Archos",
"model": "101 Oxygen 4G",
"type": "tablet"
}
},
{
"desc": "Archos 101 Platinum 3G V2",
"ua": "Mozilla/5.0 (Linux; Android 7.0; AC101PL3GV2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "AC101PL3GV2",
"type": "tablet"
}
},
{
"desc": "Archos 101B Helium 4G",
"ua": "Mozilla/5.0 (Linux; Android 6.0; AC101BHE Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.91 Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "AC101BHE",
"type": "tablet"
}
},
{
"desc": "Archos 101s Oxygen Ardoiz",
"ua": "Mozilla/5.0 (Linux; Android 9; Archos Oxygen 101S ARDOIZ Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.102 Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "Oxygen 101S ARDOIZ",
"type": "tablet"
}
},
{
"desc": "Archos GAMEPAD2",
"ua": "Mozilla/5.0 (Linux; Android 4.2.2; ARCHOS GAMEPAD2 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "GAMEPAD2",
"type": "tablet"
}
},
{
"desc": "Archos Hello 7",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; Archos Hello 7 Build/O11019; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.53 Safari/537.36 GoogleApp/13.24.9.26.arm64",
"expect": {
"vendor": "Archos",
"model": "Hello 7",
"type": "tablet"
}
},
{
"desc": "Archos Sense 101 X",
"ua": "Mozilla/5.0 (Linux; arm; Android 7.0; Archos Sense 101 X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 YaBrowser/20.2.0.215.01 Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "Sense 101 X",
"type": "tablet"
}
},
{
"desc": "Archos T101 FHD WiFi",
"ua": "Mozilla/5.0 (Linux; Android 13; ARCHOS T101 FHD WiFi Build/T00624; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/124.0.6367.159 Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "T101 FHD WiFi",
"type": "tablet"
}
},
{
"desc": "Archos Tikeasy 10d",
"ua": "Mozilla/5.0 (Linux; Android 13; Tikeasy 10d Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/131.0.6778.260 Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "Tikeasy 10d",
"type": "tablet"
}
},
{
"desc": "Archos T96 WIFI",
"ua": "Mozilla/5.0 (Linux; Android 11; ARCHOS T96 WIFI_EEA Build/RP1A.201005.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/102.0.5005.78 Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "T96 WIFI_EEA",
"type": "tablet"
}
},
{
"desc": "Archos X67 5G",
"ua": "Mozilla/5.0 (Linux; Android 10; X67 5G Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.58 Mobile Safari/537.36",
"expect": {
"vendor": "Archos",
"model": "X67 5G",
"type": "tablet"
}
}
]

View File

@@ -0,0 +1,164 @@
[
{
"desc": "ASUS Nexus 7",
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 7 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "Nexus 7",
"type": "tablet"
}
},
{
"desc": "ASUS Padfone",
"ua": "Mozilla/5.0 (Linux; Android 4.1.1; PadFone 2 Build/JRO03L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "PadFone",
"type": "tablet"
}
},
{
"desc": "ASUS ZenPad 10",
"ua": "Mozilla/5.0 (Linux; Android 6.0; P00C Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "P00C",
"type": "tablet"
}
},
{
"desc": "ASUS ZenPad Z8s",
"ua": "Mozilla/5.0 (Linux; Android 7.0; ASUS_P00J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.111 Safari/537.36\n",
"expect": {
"vendor": "ASUS",
"model": "P00J",
"type": "tablet"
}
},
{
"desc": "ASUS ROG",
"ua": "Mozilla/5.0 (Linux; Android 8.1; ZS600KL Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.126 Mobile Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "ZS600KL",
"type": "mobile"
}
},
{
"desc": "ASUS ROG II",
"ua": "Mozilla/5.0 (Linux; Android 9; ASUS_I001DA Build/PKQ1.190414.001; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "I001DA",
"type": "mobile"
}
},
{
"desc": "ASUS Zenfone 2",
"ua": "Mozilla/5.0 (Linux; Android 5.0; ASUS ZenFone 2 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "ZenFone 2",
"type": "mobile"
}
},
{
"desc": "ASUS Zenfone 3 Deluxe",
"ua": "Mozilla/5.0 (Linux; Android 6.0; ASUS_Z016D Build/MXB48T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.132 Mobile Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "Z016D",
"type": "mobile"
}
},
{
"desc": "ASUS Zenfone 5",
"ua": "Mozilla/5.0 (Linux; Android 8.0; ZE620KL Build/OPR1.170623.032) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Mobile Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "ZE620KL",
"type": "mobile"
}
},
{
"desc": "ASUS Zenfone 7",
"ua": "Mozilla/5.0 (Linux; Android 10; ASUS_I002D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.81 Mobile Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "I002D",
"type": "mobile"
}
},
{
"desc": "ASUS Zenfone 7 Pro",
"ua": "Mozilla/5.0 (Linux; Android 10; ZS671KS) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Mobile Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "ZS671KS",
"type": "mobile"
}
},
{
"desc": "ASUS Zenfone Max Pro",
"ua": "Mozilla/5.0 (Linux; Android 9; ZB602KL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.116 Mobile Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "ZB602KL",
"type": "mobile"
}
},
{
"desc": "ASUS Zenfone Max Pro (M1)",
"ua": "Mozilla/5.0 (Linux; Android 8.1; ASUS_X00TD Build/OPM1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Mobile Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "X00TD",
"type": "mobile"
}
},
{
"desc": "ASUS Zenfone Max M2",
"ua": "Mozilla/5.0 (Linux; Android 8.1; ASUS_X01AD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.99 Mobile Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "X01AD",
"type": "mobile"
}
},
{
"desc": "ASUS Zenfone Max Pro M2",
"ua": "Mozilla/5.0 (Linux; Android 8.1; ASUS_X01BDA) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.99 Mobile Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "X01BDA",
"type": "mobile"
}
},
{
"desc": "ASUS Zenfone Go",
"ua": "Mozilla/5.0 (Linux; Android 6.0; ASUS_X009DA Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "X009DA",
"type": "mobile"
}
},
{
"desc": "ASUS Zenfone 2 Laser",
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; ASUS_Z00ED) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "Z00ED",
"type": "mobile"
}
},
{
"desc": "ASUS ZenWatch",
"ua": "Mozilla/5.0 (Linux; Android 5.0.1; ASUS ZenWatch Build/LWX48S) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/19.77.34.5 Mobile Safari/537.36",
"expect": {
"vendor": "ASUS",
"model": "ZenWatch",
"type": "wearable"
}
}
]

View File

@@ -0,0 +1,47 @@
[
{
"desc": "BlackBerry Priv",
"ua": "User-Agent: Mozilla/5.0 (Linux; Android 5.1.1; STV100-1 Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/46.0.2490.76 Mobile Safari/537.36",
"expect": {
"vendor": "BlackBerry",
"model": "STV100-1",
"type": "mobile"
}
},
{
"desc": "BlackBerry Keyone",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; BBB100-1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.111 Mobile Safari/537.36",
"expect": {
"vendor": "BlackBerry",
"model": "BBB100-1",
"type": "mobile"
}
},
{
"desc": "BlackBerry Key2",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; BBF100-1 Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.91 Mobile Safari/537.36",
"expect": {
"vendor": "BlackBerry",
"model": "BBF100-1",
"type": "mobile"
}
},
{
"desc": "BlackBerry Key2 LE",
"ua": "User-Agent: Mozilla/5.0 (Linux; Android 8.1.0; BBE100-1 Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497 Mobile Safari/537.36",
"expect": {
"vendor": "BlackBerry",
"model": "BBE100-1",
"type": "mobile"
}
},
{
"desc": "Blackview 4900Pro",
"ua": "Mozilla/5.0 (Linux; Android 12; BV4900Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "undefined",
"model": "BV4900Pro",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,101 @@
[
{
"desc": "BLU Grand X LTE",
"ua": "Mozilla/5.0 (Linux; Android 7.0; BLU Grand X LTE Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Mobile Safari/537.36",
"expect": {
"vendor": "BLU",
"model": "Grand X LTE",
"type": "mobile"
}
},
{
"desc": "BLU Neo Energy Mini",
"ua": "Mozilla/5.0 (Linux; Android 10; BLU_NEO_ENERGY_MINI Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/101.0.4951.54 Mobile Safari/537.36",
"expect": {
"vendor": "BLU",
"model": "NEO_ENERGY_MINI",
"type": "mobile"
}
},
{
"desc": "BLU NEO X PLUS",
"ua": "Mozilla/5.0 (Linux; Android 5.1; BLU NEO X PLUS Build/N090U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36",
"expect": {
"vendor": "BLU",
"model": "NEO X PLUS",
"type": "mobile"
}
},
{
"desc": "BLU STUDIO X MINI",
"ua": "Mozilla/5.0 (Linux; Android 5.1; BLU STUDIO X MINI Build/S0150UU) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.93 Mobile Safari/537.36",
"expect": {
"vendor": "BLU",
"model": "STUDIO X MINI",
"type": "mobile"
}
},
{
"desc": "BLU Tank Mega",
"ua": "Mozilla/5.0 (Mobile; BLU_TankMega_3G; rv:48.0; CAEN) Gecko/48.0 Firefox/48.0 KAIOS/2.5.1.1",
"expect": {
"vendor": "BLU",
"model": "TankMega_3G",
"type": "mobile"
}
},
{
"desc": "BLU TOUCHBOOK G7",
"ua": "Mozilla/5.0 (Linux; Android 5.0; BLU TOUCHBOOK G7 Build/LRX21M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.107 Safari/537.36 OPR/29.0.1809.91837",
"expect": {
"vendor": "BLU",
"model": "TOUCHBOOK G7",
"type": "mobile"
}
},
{
"desc": "BLU Vivo 5 Mini",
"ua": "Mozilla/5.0 (Linux; Android 7.0; Vivo 5 Mini Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36",
"expect": {
"vendor": "BLU",
"model": "Vivo 5 Mini",
"type": "mobile"
}
},
{
"desc": "BLU VIVO AIR LTE",
"ua": "Mozilla/5.0 (Linux; Android 5.0.2; BLU VIVO AIR LTE Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.107 Mobile Safari/537.36 OPR/29.0.1809.91837",
"expect": {
"vendor": "BLU",
"model": "VIVO AIR LTE",
"type": "mobile"
}
},
{
"desc": "BLU VIVO GO",
"ua": "Mozilla/5.0 (Linux; U; Android 9; VIVO GO Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/72.0.3626.121 Mobile Safari/537.36 OPR/50.0.2254.149182",
"expect": {
"vendor": "BLU",
"model": "VIVO GO",
"type": "mobile"
}
},
{
"desc": "BLU Vivo One Plus 2019",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; Vivo One Plus 2019 Build/O11019; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/277.0.0.41.126;]",
"expect": {
"vendor": "BLU",
"model": "Vivo One Plus 2019",
"type": "mobile"
}
},
{
"desc": "BLU VIVO SELFIE",
"ua": "Mozilla/5.0 (Linux; U; Android 5.0; es-LA; BLU VIVO SELFIE Build/LRX21M) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/11.3.5.972 U3/0.8.0 Mobile Safari/534.30",
"expect": {
"vendor": "BLU",
"model": "VIVO SELFIE",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,38 @@
[
{
"desc": "Cat B15Q",
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; B15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Mobile Safari/537.36",
"expect": {
"vendor": "Cat",
"model": "B15Q",
"type": "mobile"
}
},
{
"desc": "Cat B35",
"ua": "Mozilla/5.0 (Mobile; CAT B35; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5.1",
"expect": {
"vendor": "Cat",
"model": "B35",
"type": "mobile"
}
},
{
"desc": "Cat S22 Flip",
"ua": "Mozilla/5.0 (Linux; Android 11; S22 FLIP Build/RKQ1.210416.002) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.165 Mobile Safari/537.36",
"expect": {
"vendor": "Cat",
"model": "S22 FLIP",
"type": "mobile"
}
},
{
"desc": "Cat S62 Pro",
"ua": "Mozilla/5.0 (Linux; Android 11; S62 Pro Build/RKQ1.210406.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/94.0.4606.85 Mobile Safari/537.36 GSA/12.34.17.23.arm64",
"expect": {
"vendor": "Cat",
"model": "S62 Pro",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,29 @@
[
{
"desc": "Energizer Energy 400",
"ua": "Mozilla/5.0 (Linux; Android 6.0; Energy400 Build/MRA58K test-keys; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.158 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/172.0.0.66.93;]",
"expect": {
"vendor": "Energizer",
"model": "Energy400",
"type": "mobile"
}
},
{
"desc": "Energizer Energy 400S",
"ua": "Mozilla/5.0 (Linux; Android 6.0; Energy 400S Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/68.0.3440.85 Mobile Safari/537.36",
"expect": {
"vendor": "Energizer",
"model": "Energy 400S",
"type": "mobile"
}
},
{
"desc": "Energizer Ultimate 65G",
"ua": "Mozilla/5.0 (Linux; Android 14; Energizer Ultimate 65G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Energizer",
"model": "Ultimate 65G",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,47 @@
[
{
"desc": "Oculus Quest",
"ua": "Mozilla/5.0 (Linux; Android 10; Quest) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/15.0.0.0.22.280317669 SamsungBrowser/4.0 Chrome/89.0.4389.90 VR Safari/537.36",
"expect": {
"vendor": "Facebook",
"model": "Quest",
"type": "xr"
}
},
{
"desc": "Oculus Quest 2",
"ua": "Mozilla/5.0 (Linux; Android 10; Quest 2) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/15.0.0.0.22.280317669 SamsungBrowser/4.0 Chrome/89.0.4389.90 VR Safari/537.36",
"expect": {
"vendor": "Facebook",
"model": "Quest 2",
"type": "xr"
}
},
{
"desc": "Oculus Quest 3",
"ua": "Mozilla/5.0 (X11; Linux x86_64; Quest 3) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/31.4.0.6.51.566757996 Chrome/120.0.6099.283 VR Safari/537.36",
"expect": {
"vendor": "Facebook",
"model": "Quest 3",
"type": "xr"
}
},
{
"desc": "Oculus Quest Pro",
"ua": "Mozilla/5.0 (X11; Linux x86_64; Quest Pro) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/24.4.0.22.60.426469926 SamsungBrowser/4.0 Chrome/106.0.5249.181 VR Safari/537.36",
"expect": {
"vendor": "Facebook",
"model": "Quest Pro",
"type": "xr"
}
},
{
"desc": "Portal TV",
"ua": "Mozilla/5.0 (Linux; Android 9; PortalTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.120 Mobile Safari/537.36",
"expect": {
"vendor": "Facebook",
"model": "PortalTV",
"type": "smarttv"
}
}
]

View File

@@ -0,0 +1,29 @@
[
{
"desc": "Fairphone 1U",
"ua": "Mozilla/5.0 (Linux; U; Android 4.2.2; FP1U Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
"expect": {
"vendor": "Fairphone",
"model": "FP1U",
"type": "mobile"
}
},
{
"desc": "Fairphone 2",
"ua": "Mozilla/5.0 (Linux; Android 7.1.2; FP2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Mobile Safari/537.36",
"expect": {
"vendor": "Fairphone",
"model": "FP2",
"type": "mobile"
}
},
{
"desc": "Fairphone 3",
"ua": "Mozilla/5.0 (Linux; Android 9; FP3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.93 Mobile Safari/537.36",
"expect": {
"vendor": "Fairphone",
"model": "FP3",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,236 @@
[
{
"desc": "Google Chromecast with Google TV",
"ua": "Mozilla/5.0 (Linux; Android 12.0; Build/STTL.240206.002) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.0 Safari/537.36 CrKey/1.56.500000 DeviceType/AndroidTV",
"expect": {
"vendor": "Google",
"model": "Chromecast AndroidTV",
"type": "smarttv"
}
},
{
"desc": "Google Chromecast Mini Smart Speaker",
"ua": "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.225 Safari/537.36 CrKey/1.56.500000 DeviceType/SmartSpeaker",
"expect": {
"vendor": "Google",
"model": "Chromecast SmartSpeaker",
"type": "smarttv"
}
},
{
"desc": "Google Chromecast Third Generation",
"ua": "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.225 Safari/537.36 CrKey/1.56.500000 DeviceType/Chromecast",
"expect": {
"vendor": "Google",
"model": "Chromecast Third Generation",
"type": "smarttv"
}
},
{
"desc": "Google Chromecast Nest Hub",
"ua": "Mozilla/5.0 (Fuchsia) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 CrKey/1.56.500000",
"expect": {
"vendor": "Google",
"model": "Chromecast Nest Hub",
"type": "smarttv"
}
},
{
"desc": "Google Chromecast",
"ua": "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.84 Safari/537.36 CrKey/1.22.79313",
"expect": {
"vendor": "Google",
"model": "Chromecast",
"type": "smarttv"
}
},
{
"desc": "Google Pixel C",
"ua": "Mozilla/5.0 (Linux; Android 7.0; Pixel C Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel C",
"type": "tablet"
}
},
{
"desc": "Google Pixel C",
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.64 Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel C",
"type": "tablet"
}
},
{
"desc": "Google Pixel",
"ua": "Mozilla/5.0 (Linux; Android 7.1; Pixel Build/NDE63V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.85 Mobile Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel",
"type": "mobile"
}
},
{
"desc": "Google Pixel Tablet",
"ua": "Mozilla/5.0 (Linux; Android 14; Pixel Tablet Build/AP2A.240905.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.107 Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel Tablet",
"type": "tablet"
}
},
{
"desc": "Google Pixel Watch",
"ua": "Dalvik/2.1.0 (Linux; U; Android 13; Google Pixel Watch Build/TWD4.231005.002)",
"expect": {
"vendor": "Google",
"model": "Pixel Watch",
"type": "wearable"
}
},
{
"desc": "Google Pixel Watch 2",
"ua": "Dalvik/2.1.0 (Linux; U; Android 13; Google Pixel Watch 2 Build/TWD9.240605.001.A1)",
"expect": {
"vendor": "Google",
"model": "Pixel Watch 2",
"type": "wearable"
}
},
{
"desc": "Google Pixel XL",
"ua": "Mozilla/5.0 (Linux; Android 7.1; Pixel XL Build/NDE63X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.85 Mobile Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel XL",
"type": "mobile"
}
},
{
"desc": "Google Pixel XL",
"ua": "Mozilla/5.0 (Linux; Android 9; Pixel XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel XL",
"type": "mobile"
}
},
{
"desc": "Google Pixel 2",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; Pixel 2 Build/OPM1.171019.013) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel 2",
"type": "mobile"
}
},
{
"desc": "Google Pixel 2 XL",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; Pixel 2 XL Build/OPM1.171019.013) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel 2 XL",
"type": "mobile"
}
},
{
"desc": "Google Pixel 2 XL",
"ua": "Mozilla/5.0 (Linux; Android 9; Pixel 2 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel 2 XL",
"type": "mobile"
}
},
{
"desc": "Google Pixel 3",
"ua": "Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PD1A.180720.030) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel 3",
"type": "mobile"
}
},
{
"desc": "Google Pixel 3 XL",
"ua": "Mozilla/5.0 (Linux; Android 9; Pixel 3 XL Build/PD1A.180720.030) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel 3 XL",
"type": "mobile"
}
},
{
"desc": "Google Pixel 3 XL",
"ua": "Mozilla/5.0 (Linux; Android 9; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel 3 XL",
"type": "mobile"
}
},
{
"desc": "Google Pixel 3a",
"ua": "Mozilla/5.0 (Linux; Android 10; Pixel 3a) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel 3a",
"type": "mobile"
}
},
{
"desc": "Google Pixel 3a XL",
"ua": "Mozilla/5.0 (Linux; Android 10; Pixel 3a XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel 3a XL",
"type": "mobile"
}
},
{
"desc": "Google Pixel 4",
"ua": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel 4",
"type": "mobile"
}
},
{
"desc": "Google Pixel 4a",
"ua": "Mozilla/5.0 (Linux; Android 10; Pixel 4a) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.83 Mobile Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel 4a",
"type": "mobile"
}
},
{
"desc": "Google Pixel 4 XL",
"ua": "Mozilla/5.0 (Linux; Android 10; Pixel 4 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel 4 XL",
"type": "mobile"
}
},
{
"desc": "Google Pixel 5",
"ua": "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.120 Mobile Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel 5",
"type": "mobile"
}
},
{
"desc": "Google Pixel 7",
"ua": "Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Google",
"model": "Pixel 7",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,38 @@
[
{
"desc": "HMD Barbie Phone",
"ua": "Mozilla/5.0 (Mobile; HMD Barbie Phone; rv:84.0) Gecko/84.0 Firefox/84.0 KAIOS/3.1",
"expect": {
"vendor": "HMD",
"model": "Barbie Phone",
"type": "mobile"
}
},
{
"desc": "HMD Pulse",
"ua": "Mozilla/5.0 (Linux; Android 14; HMD Pulse) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "HMD",
"model": "Pulse",
"type": "mobile"
}
},
{
"desc": "HMD Pulse Plus",
"ua": "Mozilla/5.0 (Linux; Android 14; HMD Pulse Plus) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "HMD",
"model": "Pulse Plus",
"type": "mobile"
}
},
{
"desc": "HMD Pulse Pro",
"ua": "Mozilla/5.0 (Linux; Android 14; HMD Pulse Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "HMD",
"model": "Pulse Pro",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,164 @@
[
{
"desc": "Honor MagicPad 13 WiFi",
"ua": "Mozilla/5.0 (Linux; U; Android 13; zh-CN; GDI-W09 Build/HONORGDI-W09) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.58 UCBrowser/16.3.9.1290 Mobile Safari/537.36",
"expect": {
"vendor": "Honor",
"model": "GDI-W09",
"type": "tablet"
}
},
{
"desc": "Honor Pad 2",
"ua": "Mozilla/5.0 (Linux; U; Android 6.0.1; en-nz; JDN-W09 Build/HuaweiMediaPad) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/6.0 Mobile Safari/537.36",
"expect": {
"vendor": "Honor",
"model": "JDN-W09",
"type": "tablet"
}
},
{
"desc": "Honor Pad 2",
"ua": "Mozilla/5.0 (Linux; U; Android 9; zh-Hans-CN; JDN2-W09HN Build/HUAWEIJDN2-W09HN) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Quark/4.6.6.164 Mobile Safari/537.36",
"expect": {
"vendor": "Honor",
"model": "JDN2-W09HN",
"type": "tablet"
}
},
{
"desc": "Honor Pad 7 10.1",
"ua": "Mozilla/5.0 (Linux; Android 12; AGM3-AL09HN Build/HONORAGM3-AL09HN; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/131.0.6778.46 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/490.0.0.63.82;IABMV/1;]",
"expect": {
"vendor": "Honor",
"model": "AGM3-AL09HN",
"type": "tablet"
}
},
{
"desc": "Honor Pad 8 12.0",
"ua": "Mozilla/5.0 (Linux; Android 12; HEY-W09 Build/HONORHEY-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.107 Safari/537.36",
"expect": {
"vendor": "Honor",
"model": "HEY-W09",
"type": "tablet"
}
},
{
"desc": "Honor Pad 9 12.1",
"ua": "Mozilla/5.0 (Linux; Android 13; HEY2-N09 Build/HONORHEY2-N09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.107 Safari/537.36 [FB_IAB/FB4A;FBAV/465.0.0.63.83;]",
"expect": {
"vendor": "Honor",
"model": "HEY2-N09",
"type": "tablet"
}
},
{
"desc": "Honor Pad 9 12.1 WiFi",
"ua": "Mozilla/5.0 (Linux; Android 14; HEY2-W09 Build/HONORHEY2-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/129.0.6668.102 Safari/537.36 [FB_IAB/FB4A;FBAV/489.0.0.66.81;IABMV/1;]",
"expect": {
"vendor": "Honor",
"model": "HEY2-W09",
"type": "tablet"
}
},
{
"desc": "Honor Pad V7 Pro 11",
"ua": "Mozilla/5.0 (Linux; Android 12; BRT-AN09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 EdgA/109.0.1518.53",
"expect": {
"vendor": "Honor",
"model": "BRT-AN09",
"type": "tablet"
}
},
{
"desc": "Honor Pad V7 Pro 11 WiFi",
"ua": "Mozilla/5.0 (Linux; U; Android 12; zh-Hans-CN; BRT-W09 Build/HONORBRT-W09) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.58 Quark/6.5.0.336 Mobile Safari/537.36",
"expect": {
"vendor": "Honor",
"model": "BRT-W09",
"type": "tablet"
}
},
{
"desc": "Honor Pad X6",
"ua": "Mozilla/5.0 (Linux; Android 10; AGR-W09HN Build/HUAWEIAGR-W09HN; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/12.9 SP-engine/2.28.0 baiduboxapp/12.9.0.11 (Baidu; P1 10) NABar/1.0",
"expect": {
"vendor": "Honor",
"model": "AGR-W09HN",
"type": "tablet"
}
},
{
"desc": "Honor Pad X7 8 LTE",
"ua": "Mozilla/5.0 (Linux; Android 10; KOB2-AL00HN; HMSCore 6.0.0.306) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 HuaweiBrowser/11.1.3.300 Mobile Safari/537.36",
"expect": {
"vendor": "Honor",
"model": "KOB2-AL00HN",
"type": "tablet"
}
},
{
"desc": "Honor Pad X7 8 WiFi",
"ua": "Mozilla/5.0 (Linux; Android 10; KOB2-W09HN; HMSCore 6.1.0.314) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.105 HuaweiBrowser/12.0.0.301 Mobile Safari/537.36",
"expect": {
"vendor": "Honor",
"model": "KOB2-W09HN",
"type": "tablet"
}
},
{
"desc": "Honor Pad X8 Lite",
"ua": "Mozilla/5.0 (Linux; Android 12; AGM-W09HN) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36",
"expect": {
"vendor": "Honor",
"model": "AGM-W09HN",
"type": "tablet"
}
},
{
"desc": "Honor Pad X9 11.5 LTE",
"ua": "Mozilla/5.0 (Linux; Android 13; ELN-L09 Build/HONORELN-L09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.86 Mobile Safari/537.36[FBAN/EMA;FBLC/zh_CN;FBAV/432.0.0.9.110;FBCX/modulariab;]",
"expect": {
"vendor": "Honor",
"model": "ELN-L09",
"type": "tablet"
}
},
{
"desc": "Honor Pad X9 11.5 WiFi",
"ua": "Mozilla/5.0 (Linux; Android 13; ELN-W09 Build/HONORELN-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.86 Safari/537.36",
"expect": {
"vendor": "Honor",
"model": "ELN-W09",
"type": "tablet"
}
},
{
"desc": "Huawei Honor 6A",
"ua": "Mozilla/5.0 (Linux; Android 7.0; DLI-L22 Build/HONORDLI-L22; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/79.0.3945.116 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/252.0.0.22.355;]",
"expect": {
"vendor": "Honor",
"model": "DLI-L22",
"type": "mobile"
}
},
{
"desc": "Huawei Honor 7",
"ua": "Mozilla/5.0 (Linux; Android 6.0; PLK-L01 Build/HONORPLK-L01; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/79.0.3945.116 Mobile Safari/537.36",
"expect": {
"vendor": "Honor",
"model": "PLK-L01",
"type": "mobile"
}
},
{
"desc": "Huawei 10 Lite",
"ua": "Mozilla/5.0 (Linux; Android 9; HRY-LX1 Build/HONORHRY-LX1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.91 Mobile Safari/537.36",
"expect": {
"vendor": "Honor",
"model": "HRY-LX1",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,29 @@
[
{
"desc": "HTC Desire 820",
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; HTC Desire 820 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36",
"expect": {
"vendor": "HTC",
"model": "Desire 820",
"type": "mobile"
}
},
{
"desc": "HTC Evo Shift 4G",
"ua": "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Sprint APA7373KT Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0",
"expect": {
"vendor": "Sprint",
"model": "APA7373KT",
"type": "mobile"
}
},
{
"desc": "HTC Nexus 9",
"ua": "Mozilla/5.0 (Linux; Android 5.0; Nexus 9 Build/LRX21R) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Mobile Crosswalk/7.36.154.13 Safari/537.36",
"expect": {
"vendor": "HTC",
"model": "Nexus 9",
"type": "tablet"
}
}
]

View File

@@ -0,0 +1,947 @@
[
{
"desc": "Huawei Honor",
"ua": "Mozilla/5.0 (Linux; U; Android 2.3; xx-xx; U8860 Build/HuaweiU8860) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"expect": {
"vendor": "Huawei",
"model": "U8860",
"type": "mobile"
}
},
{
"desc": "Huawei Honor 20 Pro",
"ua": "Mozilla/5.0 (Linux; Android 10; YAL-L41) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "YAL-L41",
"type": "mobile"
}
},
{
"desc": "Huawei Honor 20 Pro",
"ua": "Mozilla/5.0 (Linux; Android 10; YAL-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "YAL-AL10",
"type": "mobile"
}
},
{
"desc": "Huawei Nexus 6P",
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 6P Build/MTC19V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.81 Mobile Safari/537",
"expect": {
"vendor": "Huawei",
"model": "Nexus 6P",
"type": "mobile"
}
},
{
"desc": "Huawei P10",
"ua": "Mozilla/5.0 (Linux; Android 7.0; VTR-L09 Build/HUAWEIVTR-L09; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/56.0.2924.87 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "VTR-L09",
"type": "mobile"
}
},
{
"desc": "Huawei Y3II",
"ua": "Mozilla/5.0 (Linux; U; Android 5.1; xx-xx; HUAWEI LUA-L03 Build/HUAWEILUA-L03) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "LUA-L03",
"type": "mobile"
}
},
{
"desc": "HUAWEI MediaPad C5 8",
"ua": "Mozilla/5.0 (Linux; Android 7.0; MON-AL19B Build/HUAWEIMON-AL19; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.83 Mobile Safari/537.36 T7/11.7 baiduboxapp/11.7.0.10 (Baidu; P1 7.0)",
"expect": {
"vendor": "Huawei",
"model": "MON-AL19B",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad M2 10.1",
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; HUAWEI M2-A01L Build/HUAWEIM2-A01L; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/95.0.4638.74 Safari/537.36[FBAN/EMA;FBLC/fr_FR;FBAV/421.0.0.14.100;]",
"expect": {
"vendor": "Huawei",
"model": "M2-A01L",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad M3",
"ua": "Mozilla/5.0 (Linux; U; Android 6.0; en-US; BTV-DL09 Build/HUAWEIBEETHOVEN-DL09) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.5.0.1015 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "BTV-DL09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad M3 8",
"ua": "Mozilla/5.0 (Linux; Android 7.0; HUAWEI BTV-W09 Build/NMF26F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.96 Mobile Safari/537.36 AlohaBrowser/3.1.1",
"expect": {
"vendor": "Huawei",
"model": "BTV-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad M3 Lite",
"ua": "Mozilla/5.0 (Linux; Android 7.0; CPN-L09 Build/HUAWEICPN-L09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36[FBAN/EMA;FBLC/ru_RU;FBAV/233.0.0.12.118;]",
"expect": {
"vendor": "Huawei",
"model": "CPN-L09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad M3 Lite",
"ua": "Mozilla/5.0 (Linux; Android 7.0; CPN-W09 Build/HUAWEICPN-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.71 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/374.0.0.20.109;]",
"expect": {
"vendor": "Huawei",
"model": "CPN-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad M3 Lite 10",
"ua": "Mozilla/5.0 (Linux; Android 7.0; BAH-L09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "BAH-L09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad M5 10.8",
"ua": "Mozilla/5.0 (Linux; Android 9; CMR-W09 Build/HUAWEICMR-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.102 Safari/537.36 Line/14.18.1/IAB",
"expect": {
"vendor": "Huawei",
"model": "CMR-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad M5 Lite",
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; BAH2-W19 Build/HUAWEIBAH2-W19; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "BAH2-W19",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad M5 Lite",
"ua": "Mozilla/5.0 (Linux; Android 9; JDN2-W09 Build/HUAWEIJDN2-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/90.0.4430.210 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/318.0.0.39.154;]",
"expect": {
"vendor": "Huawei",
"model": "JDN2-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad M5 Lite",
"ua": "Mozilla/5.0 (Linux; Android 9; JDN2-AL50 Build/HUAWEIJDN2-AL50; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/12.13.0 SP-engine/2.29.0 matrixstyle/0 lite baiduboxapp/5.8.0.10 (Baidu; P1 9) NABar/1.",
"expect": {
"vendor": "Huawei",
"model": "JDN2-AL50",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad M5 8.4",
"ua": "Mozilla/5.0 (Linux; Android 9; SHT-W09 Build/HUAWEISHT-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.87 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "SHT-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad M5",
"ua": "Mozilla/5.0 (Linux; Android 9; SHT-AL09 Build/HUAWEISHT-AL09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.90 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "SHT-AL09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad M6 10.8",
"ua": "Mozilla/5.0 (Linux; Android 14; SCM-W09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6612.143 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "SCM-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad M6 8.4",
"ua": "Mozilla/5.0 (Linux; Android 9; VRD-W09; HMSCore 6.14.0.321; GMSCore 22.26.15) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/15.0.4.312 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "VRD-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T5",
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; AGS2-L09 Build/HUAWEIAGS2-L09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/84.0.4147.125 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "AGS2-L09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T10",
"ua": "Mozilla/5.0 (Linux; U; Android 10; en-US; AGR-L09 Build/HUAWEIAGR-L09) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 UCBrowser/13.3.8.1305 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "AGR-L09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T10",
"ua": "Mozilla/5.0 (Linux; Android 10; AGR-W09 Build/HUAWEIAGR-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "AGR-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T10s",
"ua": "Mozilla/5.0 (Linux; Android 10; AGS3-W09 Build/HUAWEIAGS3-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "AGS3-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T 8.0",
"ua": "Mozilla/5.0 (Linux; Android 10; KOB2-L09 Build/HUAWEIKOB2-L09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.105 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/396.0.0.21.104;]",
"expect": {
"vendor": "Huawei",
"model": "KOB2-L09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T 8.0",
"ua": "Mozilla/5.0 (Linux; Android 10; KOB2-W09 Build/HUAWEIKOB2-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.105 Mobile Safari/537.36 HuaweiBrowser/15.0.4.312 HMSCore/6.14.0.301",
"expect": {
"vendor": "Huawei",
"model": "KOB2-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T1 10",
"ua": "Mozilla/5.0 (Linux; Android 4.4.4; T1-A21w Build/HuaweiMediaPad) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Safari/537.36 SputnikBrowser/1.2.8.161",
"expect": {
"vendor": "Huawei",
"model": "T1-A21w",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T1 10",
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; T1-A23L Build/HuaweiMediaPad; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36 BingWeb/6.9.10",
"expect": {
"vendor": "Huawei",
"model": "T1-A23L",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T1 10",
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; T1-A21L Build/HuaweiMediaPad) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.93 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "T1-A21L",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T1 7",
"ua": "Mozilla/5.0 (Linux; 4.4.2; T1-701u) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "T1-701u",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T1 8",
"ua": "Mozilla/5.0 (Linux; U; Android 9.0; MediaPad T1 8.0 Build/HuaweiMediaPad) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30 OPR/28.0.2254.119224",
"expect": {
"vendor": "Huawei",
"model": "MediaPad T1 8.0",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T10 9.7",
"ua": "Mozilla/5.0 (Linux; U; Android 10; en-US; AGRK-L09 Build/HUAWEIAGRK-L09) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 UCBrowser/13.6.0.1315 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "AGRK-L09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T10 9.7 WiFi",
"ua": "Mozilla/5.0 (Linux; Android 10; AGRK-W09; HMSCore 6.14.0.321) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/15.0.4.312 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "AGRK-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T10s 10.1 LTE",
"ua": "Mozilla/5.0 (Linux; Android 10; AGS3K-L09 Build/HUAWEIAGS3K-L09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.105 Safari/537.36 [FB_IAB/FB4A;FBAV/362.0.0.27.109;]",
"expect": {
"vendor": "Huawei",
"model": "AGS3K-L09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T10s 10.1 WiFi",
"ua": "Mozilla/5.0 (Linux; Android 10; AGS3K-W09; HMSCore 6.14.0.321) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/15.0.4.312 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "AGS3K-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T2 10.0 Pro",
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; 605HW Build/HuaweiMediaPad; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/102.0.5005.78 Safari/537.36 [FB_IAB/FB4A;FBAV/436.0.0.35.101;]",
"expect": {
"vendor": "Huawei",
"model": "605HW",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T2 7.0 Pro",
"ua": "Mozilla/5.0 (Linux; Android 6.0; BGO-DL09 Build/HuaweiBAGGIO; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/106.0.5249.126 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/407.0.0.30.97;]",
"expect": {
"vendor": "Huawei",
"model": "BGO-DL09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T3 10",
"ua": "Mozilla/5.0 (Linux; Android 7.0; AGS-W09 Build/HUAWEIAGS-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.90 Safari/537.36 GSA/10.83.10.21.arm64",
"expect": {
"vendor": "Huawei",
"model": "AGS-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T3 7",
"ua": "Mozilla/5.0 (Linux; Android 7.0; BG2-U03 Build/HUAWEIBG2-U03; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/84.0.4147.111 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "BG2-U03",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T3 8",
"ua": "Mozilla/5.0 (Linux; Android 7.0; KOB-W09 Build/HUAWEIKOB-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Safari/537.36 [FB_IAB/Orca-Android;FBAV/354.0.0.10.113;]",
"expect": {
"vendor": "Huawei",
"model": "KOB-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad T5 10",
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; AGS2-W09 Build/HUAWEIAGS2-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.107 Safari/537.36 Flipboard/4.3.31/5486,4.3.31.5486",
"expect": {
"vendor": "Huawei",
"model": "AGS2-W09",
"type": "tablet"
}
},
{
"desc": "HUAWEI MediaPad X2",
"ua": "Mozilla/5.0 (Linux; Android 8.0; GEM-703L Build/HUAWEIGEM-703L; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/043906 Mobile Safari/537.36 MicroMessenger/6.6.3.1260(0x26060339) NetType/WIFI Language/zh_",
"expect": {
"vendor": "Huawei",
"model": "GEM-703L",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad 10.4",
"ua": "Mozilla/5.0 (Linux; Android 10; HarmonyOS; BAH3-W09; HMSCore 6.14.0.322) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/15.0.4.312 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "BAH3-W09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad 10.4",
"ua": "Mozilla/5.0 (Linux; Android 10; HarmonyOS; BAH3-L09; HMSCore 6.14.0.322) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/15.0.4.312 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "BAH3-L09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad 10.4 WiFi",
"ua": "Mozilla/5.0 (Linux; Android 10; BAH3-W59 Build/HUAWEIBAH3-W59; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.105 Safari/537.36HiSearch/22.0.6.315",
"expect": {
"vendor": "Huawei",
"model": "BAH3-W59",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad 10.4 (2022)",
"ua": "Mozilla/5.0 (Linux; Android 10; BAH4-L09 Build/HUAWEIBAH4-L09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.105 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "BAH4-L09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad 10.4 (2022) WiFi",
"ua": "Mozilla/5.0 (Linux; Android 10; HarmonyOS; BAH4-W09; HMSCore 6.14.0.322) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/15.0.4.312 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "BAH4-W09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad 10.4 SE",
"ua": "Mozilla/5.0 (Linux; Android 12; AGS5-L09 Build/HUAWEIAGS5-L09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/99.0.4844.88 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "AGS5-L09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad 10.4 SE WiFi",
"ua": "Mozilla/5.0 (Linux; Android 12; AGS5-W09 Build/HUAWEIAGS5-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/99.0.4844.88 Safari/537.36 [FB_IAB/FB4A;FBAV/480.0.0.54.88;]",
"expect": {
"vendor": "Huawei",
"model": "AGS5-W09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad 11 (2023) WiFi",
"ua": "Mozilla/5.0 (Linux; U; Android 12; zh-Hans-CN; DBR-W10 Build/HUAWEIDBR-W10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.58 Quark/6.9.6.501 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "DBR-W10",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad 11 WiFi",
"ua": "Mozilla/5.0 (Linux; U; Android 12; zh-cn; DBY-W09 Build/HUAWEIDBY-W09) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/109.0.5414.86 MQQBrowser/14.6 Mobile Safari/537.36 COVC/046801",
"expect": {
"vendor": "Huawei",
"model": "DBY-W09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad 11.5 Air WiFi",
"ua": "Mozilla/5.0 (Linux; U; Android 12; zh-Hans-CN; DBY2-W00 Build/HUAWEIDBY2-W00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.58 Quark/7.3.8.663 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "DBY2-W00",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad 11.5 LTE",
"ua": "Mozilla/5.0 (Linux; Android 12; HarmonyOS; BTK-AL09; HMSCore 6.14.0.322) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/15.0.4.312 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "BTK-AL09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad 11.5 S WiFi",
"ua": "Mozilla/5.0 (Linux; Android 12; HarmonyOS; TGR-W09; HMSCore 6.14.0.322; GMSCore 0.3.3.1.240913) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.88 HuaweiBrowser/14.0.2.317 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "TGR-W09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad 11.5 WiFi",
"ua": "Mozilla/5.0 (Linux; Android 12; HarmonyOS; BTK-W09; HMSCore 6.14.0.322; GMSCore 214816056) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/15.0.4.312 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "BTK-W09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad C5 8",
"ua": "Mozilla/5.0 (Linux; Android 7.0; MON-W19 Build/HUAWEIMON-W19; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.111 Mobile Safari/537.36 [Pinterest/Android]",
"expect": {
"vendor": "Huawei",
"model": "MON-W19",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad Pro 11",
"ua": "Mozilla/5.0 (Linux; arm_64; Android 12; GOT-AL09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 YaBrowser/23.5.5.60.01 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "GOT-AL09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad Pro 11 WiFi",
"ua": "Mozilla/5.0 (Linux; Android 12; GOT-W09 Build/HUAWEIGOT-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/97.0.4692.98 Safari/537.36 T7/13.19 BDOS/1.0 (HarmonyOS 3.0.0) SP-engine/2.57.0 baiduboxapp/13.19.0.12 (Baidu; P1 12) NABar/1.0",
"expect": {
"vendor": "Huawei",
"model": "GOT-W09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad Pro 12.6 WiFi",
"ua": "Mozilla/5.0 (Linux; Android 10; WGR-W09 Build/HUAWEIWGR-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.105 Safari/537.36[FBAN/EMA;FBLC/en_US;FBAV/412.0.0.8.106;]",
"expect": {
"vendor": "Huawei",
"model": "WGR-W09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad SE 11 WiFi",
"ua": "Mozilla/5.0 (Linux; Android 10; HarmonyOS; AGS6-W09; HMSCore 6.12.2.309) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 HuaweiBrowser/11.1.5.315 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "AGS6-W09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad Pro 13.2",
"ua": "Mozilla/5.0 (Linux; Android 12; HarmonyOS; PCE-W29; HMSCore 6.14.0.322) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/15.0.4.312 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "PCE-W29",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad T 10",
"ua": "Mozilla/5.0 (Linux; Android 10; AGR-L09; HMSCore 5.0.4.301) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 HuaweiBrowser/11.0.3.304 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "AGR-L09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad T10s",
"ua": "Mozilla/5.0 (Linux; U; Android 10; zh-cn; AGS3-AL00 Build/HUAWEIAGS3-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/11.4 Mobile Safari/537.36 COVC/045530",
"expect": {
"vendor": "Huawei",
"model": "AGS3-AL00",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad T10s WiFi",
"ua": "Mozilla/5.0 (Linux; U; Android 10; AGS3-W09 Build/HUAWEIAGS3-W09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.93 Safari/537.36 OPR/60.0.2254.59405",
"expect": {
"vendor": "Huawei",
"model": "AGS3-W09",
"type": "tablet"
}
},
{
"desc": "Huawei MatePad T8 8 LTE",
"ua": "Mozilla/5.0 (Linux; U; Android 10; KOB2K-L09 Build/HUAWEIKOB2K-L09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Safari/537.36 OPR/83.0.2254.73002",
"expect": {
"vendor": "Huawei",
"model": "KOB2K-L09",
"type": "tablet"
}
},
{
"desc": "Huawei M3",
"ua": "Mozilla/5.0 (Linux; Android 7.0; BTV-W09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.116 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "BTV-W09",
"type": "tablet"
}
},
{
"desc": "Huawei Mate 10 Pro",
"ua": "Mozilla/5.0 (Linux; Android 8.0; BLA-L29 Build/HUAWEIBLA-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3236.6 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "BLA-L29",
"type": "mobile"
}
},
{
"desc": "Huawei Mate X",
"ua": "Mozilla/5.0 (Linux; Android 9; TAH-AN00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.111 Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "TAH-AN00",
"type": "mobile"
}
},
{
"desc": "Huawei Mate X2",
"ua": "Mozilla/5.0 (Linux; Android 10; TET-AN00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.96 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "TET-AN00",
"type": "mobile"
}
},
{
"desc": "Huawei Mate 20 X",
"ua": "Mozilla/5.0 (Linux; Android 9; EVR-L29 Build/HUAWEIEVR-L29; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.110 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "EVR-L29",
"type": "mobile"
}
},
{
"desc": "Huawei Mate 20 Pro",
"ua": "Mozilla/5.0 (Linux; Android 9; LYA-L09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "LYA-L09",
"type": "mobile"
}
},
{
"desc": "Huawei Mate 20 Pro",
"ua": "Mozilla/5.0 (Linux; Android 9; LYA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "LYA-AL00",
"type": "mobile"
}
},
{
"desc": "Huawei Mate 20 Pro",
"ua": "Mozilla/5.0 (Linux; Android 9; LYA-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "LYA-AL10",
"type": "mobile"
}
},
{
"desc": "Huawei Mate 20 Pro",
"ua": "Mozilla/5.0 (Linux; Android 9; LYA-L0C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "LYA-L0C",
"type": "mobile"
}
},
{
"desc": "Huawei Mate 20 Pro",
"ua": "Mozilla/5.0 (Linux; Android 9; LYA-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "LYA-L29",
"type": "mobile"
}
},
{
"desc": "Huawei Mate 20 Pro",
"ua": "Mozilla/5.0 (Linux; Android 9; LYA-TL00) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "LYA-TL00",
"type": "mobile"
}
},
{
"desc": "Huawei Mate 50 Pro",
"ua": "Mozilla/5.0 (Linux; Android 12; DCO-LX9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "DCO-LX9",
"type": "mobile"
}
},
{
"desc": "Huawei P20 Lite",
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; ANE-LX1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.143 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "ANE-LX1",
"type": "mobile"
}
},
{
"desc": "Huawei P20",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; EML-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "EML-L29",
"type": "mobile"
}
},
{
"desc": "Huawei P20 Pro",
"ua": "Mozilla/5.0 (Linux; Android 9; CLT-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.90 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "CLT-L29",
"type": "mobile"
}
},
{
"desc": "Huawei P30",
"ua": "Mozilla/5.0 (Linux; Android 9; ELE-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.90 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "ELE-L29",
"type": "mobile"
}
},
{
"desc": "Huawei P30 Pro",
"ua": "Mozilla/5.0 (Linux; Android 9; VOG-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.143 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "VOG-L29",
"type": "mobile"
}
},
{
"desc": "Huawei P40",
"ua": "Mozilla/5.0 (Linux; Android 10; ANA-AN00 Build/HUAWEIANA-AN00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/11.26 SP-engine/2.22.0 baiduboxapp/11.26.0.10 (Baidu; P1 10) NABar/1.0",
"expect": {
"vendor": "Huawei",
"model": "ANA-AN00",
"type": "mobile"
}
},
{
"desc": "Huawei P40 Pro",
"ua": "Mozilla/5.0 (Linux; Android 10; ELS-AN00 Build/HUAWEIELS-AN00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Mobile Safari/537.36 mailapp/6.0.0",
"expect": {
"vendor": "Huawei",
"model": "ELS-AN00",
"type": "mobile"
}
},
{
"desc": "Huawei 30 Pro+",
"ua": "Mozilla/5.0 (Linux; Android 10; EBG-AN10 Build/HUAWEIEBG-AN10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.86 Mobile Safari/537.36 EdgA/42.0.0.2741",
"expect": {
"vendor": "Huawei",
"model": "EBG-AN10",
"type": "mobile"
}
},
{
"desc": "Huawei 30S",
"ua": "Mozilla/5.0 (Linux; Android 10; CDY-AN90 Build/HUAWEICDY-AN90; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 Mobile Safari/537.36 mailapp/5.8.0",
"expect": {
"vendor": "Huawei",
"model": "CDY-AN90",
"type": "mobile"
}
},
{
"desc": "Huawei Nova 5T",
"ua": "Mozilla/5.0 (Linux; Android 10; YAL-L21) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "YAL-L21",
"type": "mobile"
}
},
{
"desc": "Huawei Nova 5T",
"ua": "Mozilla/5.0 (Linux; Android 10; YAL-L61) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "YAL-L61",
"type": "mobile"
}
},
{
"desc": "Huawei Nova 5T",
"ua": "Mozilla/5.0 (Linux; Android 10; YAL-L71) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "YAL-L71",
"type": "mobile"
}
},
{
"desc": "Huawei Nova 5T",
"ua": "Mozilla/5.0 (Linux; Android 10; YAL-L61D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "YAL-L61D",
"type": "mobile"
}
},
{
"desc": "Huawei Nova 5T",
"ua": "Mozilla/5.0 (Linux; Android 10; YALE-L61A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "YALE-L61A",
"type": "mobile"
}
},
{
"desc": "Huawei Nova 5T",
"ua": "Mozilla/5.0 (Linux; Android 10; YALE-L61D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "YALE-L61D",
"type": "mobile"
}
},
{
"desc": "Huawei Nova 5T",
"ua": "Mozilla/5.0 (Linux; Android 10; YALE-L71A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "YALE-L71A",
"type": "mobile"
}
},
{
"desc": "Huawei Enjoy10e",
"ua": "Dalvik/2.1.0 (Linux; U; Android 10; MED-AL00 Build/HUAWEIMED-AL00)",
"expect": {
"vendor": "Huawei",
"model": "MED-AL00",
"type": "mobile"
}
},
{
"desc": "Huawei Y7 2018",
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; LDN-L01) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.62 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "LDN-L01",
"type": "mobile"
}
},
{
"desc": "Huawei Honor 8X",
"ua": "Mozilla/5.0 (Linux; Android 9; JSN-L21) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "JSN-L21",
"type": "mobile"
}
},
{
"desc": "Huawei Y6 2019",
"ua": "Mozilla/5.0 (Linux; Android 9; MRD-LX1N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "MRD-LX1N",
"type": "mobile"
}
},
{
"desc": "Huawei Y9 2019",
"ua": "Mozilla/5.0 (Linux; Android 9; JKM-LX2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.136 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "JKM-LX2",
"type": "mobile"
}
},
{
"desc": "Huawei Y5",
"ua": "Mozilla/5.0 (Linux; Android 9; AMN-LX3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.116 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "AMN-LX3",
"type": "mobile"
}
},
{
"desc": "Huawei Y7p",
"ua": "Mozilla/5.0 (Linux; Android 9; ART-L29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.92 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "ART-L29",
"type": "mobile"
}
},
{
"desc": "Huawei Mate 20 Lite",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; SNE-LX1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.116 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "SNE-LX1",
"type": "mobile"
}
},
{
"desc": "Huawei P10 Lite",
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; WAS-LX1A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.90 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "WAS-LX1A",
"type": "mobile"
}
},
{
"desc": "Huawei Y5 Lite 2018",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; DRA-LX5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "DRA-LX5",
"type": "mobile"
}
},
{
"desc": "Huawei Honor 8C",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; BKK-LX2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Mobile Safari/537.36",
"expect": {
"vendor": "Huawei",
"model": "BKK-LX2",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,38 @@
[
{
"desc": "IMO FEEL A2",
"ua": "Mozilla/5.0 (Linux; Android 5.1; IMO FEEL A2 Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/49.0.2623.105 Mobile Safari/537.36",
"expect": {
"vendor": "IMO",
"model": "FEEL A2",
"type": "mobile"
}
},
{
"desc": "IMO Q2",
"ua": "Mozilla/5.0 (Linux; Android 5.1; IMO Q2 Build/LMY47D; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/65.0.3325.109 Mobile Safari/537.36 GSA/7.22.24.21.arm",
"expect": {
"vendor": "IMO",
"model": "Q2",
"type": "mobile"
}
},
{
"desc": "IMO S2",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; IMO S2 Build/O11019; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.162 Mobile Safari/537.36",
"expect": {
"vendor": "IMO",
"model": "S2",
"type": "mobile"
}
},
{
"desc": "IMO Tab X9",
"ua": "Mozilla/5.0 (Linux; U; Android 4.0.3; id-id; IMO TAB X9 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30",
"expect": {
"vendor": "IMO",
"model": "TAB X9",
"type": "tablet"
}
}
]

View File

@@ -0,0 +1,56 @@
[
{
"desc": "Infinix Hot 7 Pro",
"ua": "Mozilla/5.0 (Linux; Android 9; Infinix X625C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Infinix",
"model": "X625C",
"type": "mobile"
}
},
{
"desc": "Infinix Hot 10T",
"ua": "Mozilla/5.0 (Linux; Android 11; Infinix X689C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Infinix",
"model": "X689C",
"type": "mobile"
}
},
{
"desc": "Infinix Hot 11s",
"ua": "Mozilla/5.0 (Linux; Android 11; Infinix X6812 Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/111.0.5563.116 Mobile Safari/537.36",
"expect": {
"vendor": "Infinix",
"model": "X6812",
"type": "mobile"
}
},
{
"desc": "Infinix Smart 5",
"ua": "Mozilla/5.0 (Linux; Android 10; Infinix X657C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Infinix",
"model": "X657C",
"type": "mobile"
}
},
{
"desc": "Infinix XPad",
"ua": "Mozilla/5.0 (Linux; Android 14; Infinix X1101B Build/UP1A.231005.007; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.99 Safari/537.36 [FB_IAB/FB4A;FBAV/489.0.0.66.81;IABMV/1;]",
"expect": {
"vendor": "Infinix",
"model": "X1101B",
"type": "tablet"
}
},
{
"desc": "Infinix Zero 5G",
"ua": "Mozilla/5.0 (Linux; Android 12; Infinix X6815B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Infinix",
"model": "X6815B",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,56 @@
[
{
"desc": "itel A25",
"ua": "Mozilla/5.0 (Linux; Android 9; itel L5002) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.130 Mobile Safari/537.36 OPR/63.3.3216.58675",
"expect": {
"vendor": "itel",
"model": "L5002",
"type": "mobile"
}
},
{
"desc": "itel A50",
"ua": "Mozilla/5.0 (Linux; U; Android 14; itel A667L Build/UP1A.231005.007; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/127.0.6533.103 Mobile Safari/537.36 OPR/83.1.2254.73239",
"expect": {
"vendor": "itel",
"model": "A667L",
"type": "mobile"
}
},
{
"desc": "itel KidPad 1",
"ua": "Mozilla/5.0 (Linux; Android 10; Itel W7001) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.101 Mobile Safari/537.36",
"expect": {
"vendor": "itel",
"model": "W7001",
"type": "tablet"
}
},
{
"desc": "itel Pad One",
"ua": "Mozilla/5.0 (Linux; Android 12; itel P10001L Build/SP1A.210812.016) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.172 Safari/537.36",
"expect": {
"vendor": "itel",
"model": "P10001L",
"type": "tablet"
}
},
{
"desc": "itel RS4",
"ua": "Mozilla/5.0 (Linux; Android 13; itel S666LN Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/125.0.6422.165 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/468.1.0.56.78;]",
"expect": {
"vendor": "itel",
"model": "S666LN",
"type": "mobile"
}
},
{
"desc": "itel Vision 2S",
"ua": "Mozilla/5.0 (Linux; Android 11; itel P651L Build/RP1A.201005.001) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.76 Mobile Safari/537.36",
"expect": {
"vendor": "itel",
"model": "P651L",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,11 @@
[
{
"desc": "Jolla",
"ua": "Mozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0",
"expect": {
"vendor": "Jolla",
"model": "undefined",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,20 @@
[
{
"desc": "Kobo eReader",
"ua": "Mozilla/5.0 (Unknown; Linux) AppleWebKit/538.1 (KHTML, like Gecko) Kobo eReader Safari/538.1",
"expect": {
"vendor": "Kobo",
"model": "eReader",
"type": "tablet"
}
},
{
"desc": "Kobo Touch",
"ua": "Mozilla/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit/538.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/538.1 (Kobo Touch 0377/4.20.14622)",
"expect": {
"vendor": "Kobo",
"model": "Touch",
"type": "tablet"
}
}
]

File diff suppressed because it is too large Load Diff

191
test/data/ua/device/lg.json Normal file
View File

@@ -0,0 +1,191 @@
[
{
"desc": "LG V40 ThinQ",
"ua": "Mozilla/5.0 (Linux; Android 9; LM-V405) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.136 Mobile Safari/537.36",
"expect": {
"vendor": "LG",
"model": "LM-V405",
"type": "mobile"
}
},
{
"desc": "LG K30",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; LM-X410.F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.116 Mobile Safari/537.36",
"expect": {
"vendor": "LG",
"model": "LM-X410.F",
"type": "mobile"
}
},
{
"desc": "LG K30",
"ua": "Mozilla/5.0 (Linux; Android 9; LM-X410.FGN) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.93 Mobile Safari/537.36",
"expect": {
"vendor": "LG",
"model": "LM-X410.FGN",
"type": "mobile"
}
},
{
"desc": "LG K40",
"ua": "Mozilla/5.0 (Linux; Android 10; LM-X420) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.5563.57 Mobile Safari/537.36",
"expect": {
"vendor": "LG",
"model": "LM-X420",
"type": "mobile"
}
},
{
"desc": "LG Stylo 4",
"ua": "Mozilla/5.0 (Linux; Android 10; LM-Q710(FGN)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.5563.57 Mobile Safari/537.36",
"expect": {
"vendor": "undefined",
"model": "LM-Q710(FGN)",
"type": "mobile"
}
},
{
"desc": "LG Stylo 5",
"ua": "Mozilla/5.0 (Linux; Android 9; LM-Q720) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.96 Mobile Safari/537.36",
"expect": {
"vendor": "LG",
"model": "LM-Q720",
"type": "mobile"
}
},
{
"desc": "LG G7 ThinQ",
"ua": "Mozilla/5.0 (Linux; Android 9; LM-G710VM Build/PKQ1.181105.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/79.0.3945.136 Mobile Safari/537.36",
"expect": {
"vendor": "LG",
"model": "LM-G710VM",
"type": "mobile"
}
},
{
"desc": "LG K20",
"ua": "Mozilla/5.0 (Android 13; Mobile; LG-M255; rv:111.0) Gecko/111.0 Firefox/111.0",
"expect": {
"vendor": "LG",
"model": "M255",
"type": "mobile"
}
},
{
"desc": "LG K500",
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; LG-K500 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36",
"expect": {
"vendor": "LG",
"model": "K500",
"type": "mobile"
}
},
{
"desc": "LG Nexus 4",
"ua": "Mozilla/5.0 (Linux; Android 4.2.1; Nexus 4 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19",
"expect": {
"vendor": "LG",
"model": "Nexus 4",
"type": "mobile"
}
},
{
"desc": "LG Nexus 4",
"ua": "Mozilla/5.0 (Linux; U; Android 4.3; en-us; Google Nexus 4 - 4.3 - API 18 - 768x1280 Build/JLS36G) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
"expect": {
"vendor": "LG",
"model": "Nexus 4",
"type": "mobile"
}
},
{
"desc": "LG Nexus 5",
"ua": "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19",
"expect": {
"vendor": "LG",
"model": "Nexus 5",
"type": "mobile"
}
},
{
"desc": "LG Wing",
"ua": "Mozilla/5.0 (Linux; Android 10; LM-F100N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.101 Mobile Safari/537.36",
"expect": {
"vendor": "LG",
"model": "LM-F100N",
"type": "mobile"
}
},
{
"desc": "LG Smart TV",
"ua": "Mozilla/5.0 (DirectFB; U; Linux mips; en) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) LG Browser (; LG NetCast.TV-2011)",
"expect": {
"vendor": "LG",
"model": "undefined",
"type": "smarttv"
}
},
{
"desc": "LG Smart TV",
"ua": "Mozilla/5.0 (Linux; NetCast; U) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/53.0.2785 34 Safari/537.31 SmartTV/8.5",
"expect": {
"vendor": "LG",
"model": "undefined",
"type": "smarttv"
}
},
{
"desc": "LG Smart TV",
"ua": "Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.41 (KHTML, like Gecko) Large Screen Safari/537.41 LG Browser/7.00.00(LGE; 42LB670V-ZA; 05.05.90; 1); webOS.TV-2014; LG NetCast.TV-2013 Compatible (LGE, 42LB670V-ZA, wireless)",
"expect": {
"vendor": "LG",
"model": "42LB670V-ZA",
"type": "smarttv"
}
},
{
"desc": "LG Android TV",
"ua": "Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; LG Android TV Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30",
"expect": {
"vendor": "LG",
"model": "undefined",
"type": "smarttv"
}
},
{
"desc": "LG VK Series Tablet",
"ua": "Mozilla/5.0 (Linux; Android 5.0.2; VK700 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.84 Safari/537.36",
"expect": {
"vendor": "LG",
"model": "VK700",
"type": "tablet"
}
},
{
"desc": "LG LK Series Tablet",
"ua": "Mozilla/5.0 (Linux; Android 5.0.1; LGLK430 Build/LRX21Y) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/38.0.2125.102 Safari/537.36",
"expect": {
"vendor": "LG",
"model": "LK430",
"type": "tablet"
}
},
{
"desc": "LG Watch Urbane",
"ua": "Mozilla/5.0 Linux; Android 7.1.1; LG Watch Urbane Build/NWD1.180306.004 AppleWebKit/537.36 KHTML, like Gecko Chrome/19.77.34.5 Mobile Safari/537.36",
"expect": {
"vendor": "LG",
"model": "Watch Urbane",
"type": "wearable"
}
},
{
"desc": "LG G Watch R",
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; G Watch R Build/LCA44B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Crosswalk/15.44.384.12 Mobile Safari/537.36",
"expect": {
"vendor": "LG",
"model": "G Watch R",
"type": "wearable"
}
}
]

View File

@@ -0,0 +1,20 @@
[
{
"desc": "Meizu M5 Note",
"ua": "Mozilla/5.0 (Linux; Android 6.0; M5 Note Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043024 Safari/537.36 MicroMessenger/6.5.7.1040 NetType/WIFI Language/zh_CN",
"expect": {
"vendor": "Meizu",
"model": "M5 Note",
"type": "mobile"
}
},
{
"desc": "Meizu M3S",
"ua": "Mozilla/5.0 (X11; Linux; Android 5.1; MZ-M3s Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrom/45.0.2454.94 Mobile Safari/537.36",
"expect": {
"vendor": "Meizu",
"model": "M3s",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,30 @@
[
{
"desc": "Micromax Bharat 2 Plus",
"ua": "Mozilla/5.0 (Linux; U; Android 7.0; en-US; Micromax Q402Plus Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.12.9.1226 Mobile Safari/537.36",
"expect": {
"vendor": "Micromax",
"model": "Q402Plus",
"type": "mobile"
}
},
{
"desc": "Micromax Canvas Infinity",
"ua": "Mozilla/5.0 (Linux; U; Android 7.1.2; en-US; Micromax HS2 Build/N2G47H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/13.2.0.1296 (SpeedMode) U4/1.0 UCWEB/2.0 Mobile Safari/534.30",
"expect": {
"vendor": "Micromax",
"model": "HS2",
"type": "mobile"
}
},
{
"desc": "Micromax In 1b",
"ua": "Mozilla/5.0 (Linux; U; Android 10; Micromax E7533 Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.101 Mobile Safari/537.36 OPR/54.0.2254.56148",
"expect": {
"vendor": "Micromax",
"model": "E7533",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,47 @@
[
{
"desc": "Microsoft Lumia 950",
"ua": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/13.10586",
"expect": {
"vendor": "Microsoft",
"model": "Lumia 950",
"type": "mobile"
}
},
{
"desc": "Microsoft Surface Duo",
"ua": "Dalvik/2.1.0 (Linux; U; Android 10; Surface Duo Build/2020.1014.61)",
"expect": {
"vendor": "Microsoft",
"model": "Surface Duo",
"type": "tablet"
}
},
{
"desc": "Microsoft Lumia 950",
"ua": "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/13.10586",
"expect": {
"vendor": "Microsoft",
"model": "Lumia 950",
"type": "mobile"
}
},
{
"desc": "Xbox",
"ua": "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Xbox)",
"expect": {
"vendor": "Microsoft",
"model": "Xbox",
"type": "console"
}
},
{
"desc": "Xbox One",
"ua": "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; Xbox; Xbox One)",
"expect": {
"vendor": "Microsoft",
"model": "Xbox One",
"type": "console"
}
}
]

View File

@@ -0,0 +1,92 @@
[
{
"desc": "Motorola Moto X",
"ua": "Mozilla/5.0 (Linux; Android 4.4.4; XT1097 Build/KXE21.187-38) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36",
"expect": {
"vendor": "Motorola",
"model": "XT1097",
"type": "mobile"
}
},
{
"desc": "Motorola Moto Z3 Play",
"ua": "Mozilla/5.0 (Linux; Android 9; Moto Z3 Play) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Motorola",
"model": "Moto Z3 Play",
"type": "mobile"
}
},
{
"desc": "Motorola Nexus 6",
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.20 Mobile Safari/537.36",
"expect": {
"vendor": "Motorola",
"model": "Nexus 6",
"type": "mobile"
}
},
{
"desc": "Motorola Droid RAZR 4G",
"ua": "Mozilla/5.0 (Linux; U; Android 2.3; xx-xx; DROID RAZR 4G Build/6.5.1-73_DHD-11_M1-29) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"expect": {
"vendor": "Motorola",
"model": "DROID RAZR 4G",
"type": "mobile"
}
},
{
"desc": "Motorola RAZR 2019",
"ua": "Mozilla/5.0 (Linux; Android 9; motorola razr) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/11.1 Chrome/75.0.3770.143 Mobile Safari/537.36",
"expect": {
"vendor": "Motorola",
"model": "razr",
"type": "mobile"
}
},
{
"desc": "Moto X",
"ua": "Mozilla/5.0 (Linux; U; Android 4.2; xx-xx; XT1058 Build/13.9.0Q2.X-70-GHOST-ATT_LE-2) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
"expect": {
"vendor": "Motorola",
"model": "XT1058",
"type": "mobile"
}
},
{
"desc": "Motorola Moto g(6) Play",
"ua": "Mozilla/5.0 (Linux; Android 9; moto g(6) play) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Mobile Safari/537.36",
"expect": {
"vendor": "Motorola",
"model": "moto g(6) play",
"type": "mobile"
}
},
{
"desc": "Motorola Moto g(7) Supra",
"ua": "Mozilla/5.0 (Linux; Android 9; moto g(7) supra Build/PCOS29.114-134-2; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3683.90 Mobile Safari/537.36",
"expect": {
"vendor": "Motorola",
"model": "moto g(7) supra",
"type": "mobile"
}
},
{
"desc": "Motorola Moto E",
"ua": "Mozilla/5.0 (Linux; Android 7.1.1; Moto E (4) Build/NDQS26.69-64-11-7; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/56.0.2924.87 Mobile Safari/537.36",
"expect": {
"vendor": "Motorola",
"model": "Moto E (4)",
"type": "mobile"
}
},
{
"desc": "Motorola Moto 360",
"ua": "Mozilla/5.0 (Linux; Android 4.4; Moto 360 Build/KNX01S) AppleWebKit/537.36 (KHTML, like Gecko) WIB/0.9.8 Mobile Safari/537.36",
"expect": {
"vendor": "Motorola",
"model": "Moto 360",
"type": "wearable"
}
}
]

View File

@@ -0,0 +1,47 @@
[
{
"desc": "Nintendo Switch",
"ua": "Mozilla/5.0 (Nintendo Switch; WifiWebAuthApplet) AppleWebKit/606.4 (KHTML, like Gecko) NF/6.0.1.15.4 NintendoBrowser/5.1.0.20393",
"expect": {
"vendor": "Nintendo",
"model": "Switch",
"type": "console"
}
},
{
"desc": "Nintendo WiiU",
"ua": "Mozilla/5.0 (Nintendo WiiU) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.4.2.9 NintendoBrowser/4.2.0.11146.EU",
"expect": {
"vendor": "Nintendo",
"model": "WiiU",
"type": "console"
}
},
{
"desc": "Nintendo Wii",
"ua": "Opera/9.10 (Nintendo Wii; U; ; 1621; en)",
"expect": {
"vendor": "Nintendo",
"model": "Wii",
"type": "console"
}
},
{
"desc": "Nintendo 3DS",
"ua": "Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1.7610.EU",
"expect": {
"vendor": "Nintendo",
"model": "3DS",
"type": "console"
}
},
{
"desc": "Nintendo 3DS",
"ua": "Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.15 Mobile NintendoBrowser/1.3.10126.EU",
"expect": {
"vendor": "Nintendo",
"model": "3DS",
"type": "console"
}
}
]

View File

@@ -0,0 +1,119 @@
[
{
"desc": "Nokia3xx",
"ua": "Nokia303/14.87 CLDC-1.1",
"expect": {
"vendor": "Nokia",
"model": "303",
"type": "mobile"
}
},
{
"desc": "Nokia 3.2",
"ua": "Mozilla/5.0 (Linux; Android 10; Nokia 3.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Mobile Safari/537.36",
"expect": {
"vendor": "Nokia",
"model": "3.2",
"type": "mobile"
}
},
{
"desc": "Nokia 5800 XpressMusic",
"ua": "Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Nokia5800d-1/10.4.016; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413",
"expect": {
"vendor": "Nokia",
"model": "5800d-1",
"type": "mobile"
}
},
{
"desc": "Nokia 7",
"ua": "Mozilla/5.0 (Linux; Android 11; Nokia 7.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Nokia",
"model": "7.2",
"type": "mobile"
}
},
{
"desc": "Nokia 808 PureView",
"ua": "Mozilla/5.0 (Symbian; U; Nokia808 PureView; en-GB) AppleWebKit/534.3 (KHTML, like Gecko) Version/3.0 Mobile/1A543a Mobile Safari/534.3",
"expect": {
"vendor": "Nokia",
"model": "808 PureView",
"type": "mobile"
}
},
{
"desc": "Nokia 808 PureView",
"ua": "Mozilla/5.0 (Symbian/3; Series60/5.5 Nokia808PureView/113.010.1508; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/535.1 (KHTML, like Gecko) NokiaBrowser/8.3.2.21 Mobile Safari/535.1 3gpp-gba",
"expect": {
"vendor": "Nokia",
"model": "808PureView",
"type": "mobile"
}
},
{
"desc": "Nokia Lumia 630",
"ua": "UCWEB/2.0 (Windows; U; wds 8.10; en-IN; NOKIA; RM-978_1046) U2/1.0.0 UCBrowser/4.2.0.524 U2/1.0.0 Mobile",
"expect": {
"vendor": "Nokia",
"model": "RM-978",
"type": "mobile"
}
},
{
"desc": "Nokia N9",
"ua": "Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13",
"expect": {
"vendor": "Nokia",
"model": "N9",
"type": "mobile"
}
},
{
"desc": "Nokia N900",
"ua": "Mozilla/5.0 (Linux; Maemo 5.0; Nokia N900; Build/4.0.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0 Mobile Safari/537.36",
"expect": {
"vendor": "Nokia",
"model": "N900",
"type": "mobile"
}
},
{
"desc": "Nokia T20",
"ua": "Mozilla/5.0 (Linux; Android 12; Nokia T20) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36",
"expect": {
"vendor": "Nokia",
"model": "T20",
"type": "tablet"
}
},
{
"desc": "Nokia T20",
"ua": "Mozilla/5.0 (Linux; Android 11; Nokia T20 Build/RP1A.201005.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/93.0.4577.62 Safari/537.36",
"expect": {
"vendor": "Nokia",
"model": "T20",
"type": "tablet"
}
},
{
"desc": "Nokia T21",
"ua": "Dalvik/2.1.0 (Linux; U; Android 13; Nokia T21 Build/TP1A.220624.014)",
"expect": {
"vendor": "Nokia",
"model": "T21",
"type": "tablet"
}
},
{
"desc": "Nokia 2720 Flip",
"ua": "Mozilla/5.0 (Mobile; Nokia_2720_Flip; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5.2",
"expect": {
"vendor": "Nokia",
"model": "2720 Flip",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,29 @@
[
{
"desc": "Nothing 1",
"ua": "Mozilla/5.0 (Linux; Android 13; A063) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/22.0 Chrome/111.0.5563.116 Mobile Safari/537.36",
"expect": {
"vendor": "Nothing",
"model": "A063",
"type": "mobile"
}
},
{
"desc": "Nothing 2",
"ua": "Mozilla/5.0 (Linux; Android 14; A065 Build/UP1A.231005.007; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/125.0.6422.53 Mobile Safari/537.36",
"expect": {
"vendor": "Nothing",
"model": "A065",
"type": "mobile"
}
},
{
"desc": "Nothing 2a",
"ua": "Mozilla/5.0 (Linux; Android 14; A142 Build/UP1A.231005.007; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.71 Mobile Safari/537.36",
"expect": {
"vendor": "Nothing",
"model": "A142",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,47 @@
[
{
"desc": "Tegra Note 7",
"ua": "Mozilla/5.0 (Linux; Android 5.1; TegraNote-P1640 Build/LMY47D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.133 Safari/537.36",
"expect": {
"vendor": "Nvidia",
"model": "TegraNote-P1640",
"type": "tablet"
}
},
{
"desc": "Nvidia Shield",
"ua": "Mozilla/5.0 (Linux; Android 5.1; SHIELD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.74 Mobile Safari/537.36",
"expect": {
"vendor": "Nvidia",
"model": "SHIELD",
"type": "console"
}
},
{
"desc": "Nvidia Shield Tablet",
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; SHIELD Tablet Build/LVY48E; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/45.0.2454.19 Safari/537.36",
"expect": {
"vendor": "Nvidia",
"model": "SHIELD Tablet",
"type": "tablet"
}
},
{
"desc": "Nvidia Shield Tablet K1",
"ua": "Mozilla/5.0 (Linux; Android 7.0; SHIELD Tablet K1 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Safari/537.36",
"expect": {
"vendor": "Nvidia",
"model": "SHIELD Tablet K1",
"type": "tablet"
}
},
{
"desc": "Nvidia Shield TV",
"ua": "Mozilla/5.0 (Linux; Android 11; SHIELD Android TV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Mobile Safari/537.36 ",
"expect": {
"vendor": "Nvidia",
"model": "SHIELD Android TV",
"type": "smarttv"
}
}
]

View File

@@ -0,0 +1,128 @@
[
{
"desc": "OnePlus One",
"ua": "Mozilla/5.0 (Linux; Android 4.4.4; A0001 Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.59 Mobile Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "A0001",
"type": "mobile"
}
},
{
"desc": "OnePlus One",
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; OnePlus One A0001 Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Mobile Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "A0001",
"type": "mobile"
}
},
{
"desc": "OnePlus 2",
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; ONE A2003) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.93 Mobile Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "A2003",
"type": "mobile"
}
},
{
"desc": "OnePlus 3",
"ua": "Mozilla/5.0 (Linux; Android 7.1.1; ONEPLUS A3000 Build/NMF26F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "A3000",
"type": "mobile"
}
},
{
"desc": "OnePlus 6",
"ua": "Mozilla/5.0 (Linux; Android 9; ONEPLUS A6003) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.89 Mobile Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "A6003",
"type": "mobile"
}
},
{
"desc": "OnePlus 6T",
"ua": "Mozilla/5.0 (Linux; Android 9; ONEPLUS A6010) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.96 Mobile Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "A6010",
"type": "mobile"
}
},
{
"desc": "OnePlus 8T",
"ua": "Mozilla/5.0 (Linux; Android 11; KB2005) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "KB2005",
"type": "mobile"
}
},
{
"desc": "OnePlus 8 Pro",
"ua": "Mozilla/5.0 (Linux; Android 10; IN2025) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.119 Mobile Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "IN2025",
"type": "mobile"
}
},
{
"desc": "OnePlus Nord N100",
"ua": "Mozilla/5.0 (Linux; Android 10; BE2015 Build/QKQ1.200719.002; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "BE2015",
"type": "mobile"
}
},
{
"desc": "OnePlus Nord N10 5G",
"ua": "Mozilla/5.0 (Linux; Android 10; BE2029) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.185 Mobile Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "BE2029",
"type": "mobile"
}
},
{
"desc": "OnePlus Pad Go 11.35",
"ua": "Mozilla/5.0 (Linux; arm_64; Android 14; OPD2304) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.629 YaApp_Android/24.101/apad YaSearchBrowser/24.101/apad BroPP/1.0 SA/3 Mobile Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "OPD2304",
"type": "tablet"
}
},
{
"desc": "OnePlus Pad 2 12.1 WiFi",
"ua": "Mozilla/5.0 (Linux; Android 14; OPD2403 Build/UKQ1.231108.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.107 Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "OPD2403",
"type": "tablet"
}
},
{
"desc": "OnePlus Pad 11.61 WiFi",
"ua": "Mozilla/5.0 (Linux; Android 14; OPD2203 Build/UKQ1.230924.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.107 Safari/537.36",
"expect": {
"vendor": "OnePlus",
"model": "OPD2203",
"type": "tablet"
}
},
{
"desc": "OnePlus Watch 2",
"ua": "Dalvik/2.1.0 (Linux; U; Android 13; OPWWE231 Build/TWR7.231113.001.OPWWE231_11_A.117.240703)",
"expect": {
"vendor": "OnePlus",
"model": "OPWWE231",
"type": "wearable"
}
}
]

View File

@@ -0,0 +1,173 @@
[
{
"desc": "OnePlus 10RT",
"ua": "Mozilla/5.0 (Linux; Android 13; CPH2413) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "CPH2413",
"type": "mobile"
}
},
{
"desc": "OPPO Pad",
"ua": "Mozilla/5.0 (Linux; U; Android 13; zh-CN; OPD2101 Build/TP1A.220905.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.58 UCBrowser/16.3.9.1290 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "OPD2101",
"type": "tablet"
}
},
{
"desc": "OPPO Neo",
"ua": "Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; R831T Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 OppoBrowser/3.3.2 Mobile Safari/534.30",
"expect": {
"vendor": "OPPO",
"model": "R831T",
"type": "mobile"
}
},
{
"desc": "OPPO R7s",
"ua": "Mozilla/5.0 (Linux; U; Android 4.4.4; zh-cn; OPPO R7s Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.1 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "R7s",
"type": "mobile"
}
},
{
"desc": "OPPO A3s",
"ua": "Mozilla/5.0 (Linux; Android 8.1; CPH1803 Build/OPM1.171019.026; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "CPH1803",
"type": "mobile"
}
},
{
"desc": "OPPO A12",
"ua": "Mozilla/5.0 (Linux; Android 9; CPH2083) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.116 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "CPH2083",
"type": "mobile"
}
},
{
"desc": "OPPO Reno",
"ua": "Mozilla/5.0 (Linux; Android 9; PCAT00 Build/PKQ1.190101.001; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.110 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "PCAT00",
"type": "mobile"
}
},
{
"desc": "OPPO Reno3 Pro 5G",
"ua": "Mozilla/5.0 (Linux; Android 10; PCLM50) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.117 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "PCLM50",
"type": "mobile"
}
},
{
"desc": "OPPO Reno4 SE",
"ua": "Mozilla/5.0 (Linux; U; Android 10; xx-xx; PEAM00 Build/QP1A.190711.020) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.80 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "PEAM00",
"type": "mobile"
}
},
{
"desc": "OPPO Reno4 5G",
"ua": "Mozilla/5.0 (Linux; Android 10; PDPM00 Build/QKQ1.200216.002; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "PDPM00",
"type": "mobile"
}
},
{
"desc": "OPPO Reno4 Pro 5G",
"ua": "Mozilla/5.0 (Linux; U; Android 10; xx-xx; PDNT00 Build/QKQ1.200216.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.80 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "PDNT00",
"type": "mobile"
}
},
{
"desc": "OPPO Reno5 A",
"ua": "Mozilla/5.0 (Linux; Android 11; A101OP) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "A101OP",
"type": "mobile"
}
},
{
"desc": "OPPO Find X",
"ua": "Mozilla/5.0 (Linux; Android 8.1; PAFM00 Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "PAFM00",
"type": "mobile"
}
},
{
"desc": "OPPO Find 7a",
"ua": "Mozilla/5.0 (Linux; U; Android 4.3; xx-xx; X9007 Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
"expect": {
"vendor": "OPPO",
"model": "X9007",
"type": "mobile"
}
},
{
"desc": "OPPO F5",
"ua": "ozilla/5.0 (Linux; Android 7.1.1; CPH1723) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "CPH1723",
"type": "mobile"
}
},
{
"desc": "OPPO Watch 46mm",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; OW19W3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "OW19W3",
"type": "wearable"
}
},
{
"desc": "OPPO Watch 41mm",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; OW19W2 Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.98 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "OW19W2",
"type": "wearable"
}
},
{
"desc": "OPPO Watch 2",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; OW20W1 Build/OPM1.171019.026.11_A.37.210713172937; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.98 Mobile Safari/537.36",
"expect": {
"vendor": "OPPO",
"model": "OW20W1",
"type": "wearable"
}
},
{
"desc": "OPPO Watch X",
"ua": "Dalvik/2.1.0 (Linux; U; Android 13; OWWE231 Build/TWR7.231113.001.OWWE231_11_A.117.240703)",
"expect": {
"vendor": "OPPO",
"model": "OWWE231",
"type": "wearable"
}
}
]

View File

@@ -0,0 +1,11 @@
[
{
"desc": "Ouya",
"ua": "Mozilla/5.0 (Linux; Android 4.1.2; OUYA Console Build/JZO54L-OUYA) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.84 Safari/537.36",
"expect": {
"vendor": "OUYA",
"model": "undefined",
"type": "console"
}
}
]

View File

@@ -0,0 +1,47 @@
[
{
"desc": "Panasonic T31",
"ua": "Mozilla/5.0 (Linux; Android 4.2.2; Panasonic T31 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.170 Mobile Safari/537.36 ",
"expect": {
"vendor": "Panasonic",
"model": "T31",
"type": "mobile"
}
},
{
"desc": "Panasonic TX-32CSW514 SmartTV",
"ua": "HbbTV/1.2.1 (;Panasonic;VIERA 2015;3.014;a001-003 4000-0000;)",
"expect": {
"vendor": "Panasonic",
"model": "VIERA 2015",
"type": "smarttv"
}
},
{
"desc": "Panasonic TX-40FXW724 SmartTV",
"ua": "HbbTV/1.4.1 (+DRM;Panasonic;SmartTV2018mid;3.024;4301-0003 0002-0000;SmartTV2018;)",
"expect": {
"vendor": "Panasonic",
"model": "SmartTV2018mid",
"type": "smarttv"
}
},
{
"desc": "Panasonic TX-43HXW904 SmartTV",
"ua": "HbbTV/1.5.1 (+DRM;Panasonic;SmartTV2020mid;3.326;4301-0003 0008-0000;com.panasonic.SmartTV2020mid;)",
"expect": {
"vendor": "Panasonic",
"model": "SmartTV2020mid",
"type": "smarttv"
}
},
{
"desc": "Panasonic DMR-HST130 SAT receiver",
"ua": "HbbTV/1.1.1 (+PVR;Panasonic;DIGA WebKit M8658;3.420;;)",
"expect": {
"vendor": "Panasonic",
"model": "DIGA WebKit M8658",
"type": "smarttv"
}
}
]

View File

@@ -0,0 +1,29 @@
[
{
"desc": "Pico 4",
"ua": "Mozilla/5.0 (X11; Linux x86_64; PICO 4 OS5.8.2 like Quest) AppleWebKit/537.36 (KHTML, like Gecko) PicoBrowser/3.3.38 Chrome/105.0.5195.68 VR Safari/537.36",
"expect": {
"vendor": "PICO",
"model": "4",
"type": "xr"
}
},
{
"desc": "Pico 4",
"ua": "Mozilla/5.0 (X11; Linux x86_64; PICO 4 OS5.4.0 like Quest) AppleWebKit/537.36 (KHTML, like Gecko) PicoBrowser/3.3.22 Chrome/105.0.5195.68 VR Safari/537.36 OculusBrowser/7.0",
"expect": {
"vendor": "PICO",
"model": "4",
"type": "xr"
}
},
{
"desc": "Pico Neo3 Link",
"ua": "Mozilla/5.0 (X11; Linux x86_64; Pico Neo3 Link OS5.8.4.0 like Quest) AppleWebKit/537.36 (KHTML, like Gecko) PicoBrowser/3.3.22 Chrome/105.0.5195.68 VR Safari/537.36",
"expect": {
"vendor": "Pico",
"model": "Neo3 Link",
"type": "xr"
}
}
]

View File

@@ -0,0 +1,38 @@
[
{
"desc": "Polytron Prime 7 Pro",
"ua": "Mozilla/5.0 (Linux; U; Android 7.0; POLYTRON_P552 Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 OPR/50.0.2254.149182",
"expect": {
"vendor": "POLYTRON",
"model": "P552",
"type": "mobile"
}
},
{
"desc": "Polytron Rocket T1",
"ua": "Mozilla/5.0 (Linux; U; Android 5.0; en-US; POLYTRON R2501 Build/LRX21M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/13.1.2.1293 Mobile Safari/537.36",
"expect": {
"vendor": "POLYTRON",
"model": "R2501",
"type": "mobile"
}
},
{
"desc": "Polytron Rocket T6",
"ua": "Mozilla/5.0 (Linux; Android 7.0; POLYTRON R2509) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.92 Mobile Safari/537.36",
"expect": {
"vendor": "POLYTRON",
"model": "R2509",
"type": "mobile"
}
},
{
"desc": "Polytron Zap 6 Posh",
"ua": "Mozilla/5.0 (Linux; U; Android 5.1; in-ID; POLYTRON_4G501 Build/LMY47D) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.10.0.1163 UCTurbo/1.9.9.900 Mobile Safari/537.36",
"expect": {
"vendor": "POLYTRON",
"model": "4G501",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,74 @@
[
{
"desc": "Realme C1",
"ua": "Mozilla/5.0 (Linux; Android 8.1; RMX1811 Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.126 Mobile Safari/537.36",
"expect": {
"vendor": "Realme",
"model": "RMX1811",
"type": "mobile"
}
},
{
"desc": "Realme C2",
"ua": "Mozilla/5.0 (Linux; Android 9; RMX1941) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
"expect": {
"vendor": "Realme",
"model": "RMX1941",
"type": "mobile"
}
},
{
"desc": "Realme Narzo 20",
"ua": "Mozilla/5.0 (Linux; U; Android 10; xx-xx; RMX2193 Build/QP1A.190711.020) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.80 Mobile Safari/537.36",
"expect": {
"vendor": "Realme",
"model": "RMX2193",
"type": "mobile"
}
},
{
"desc": "Realme 2 Pro",
"ua": "Mozilla/5.0 (Linux; Android 9; RMX1801) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.136 Mobile Safari/537.36",
"expect": {
"vendor": "Realme",
"model": "RMX1801",
"type": "mobile"
}
},
{
"desc": "Realme 3 Pro",
"ua": "Mozilla/5.0 (Linux; Android 11; RMX1851) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Realme",
"model": "RMX1851",
"type": "mobile"
}
},
{
"desc": "Realme 8",
"ua": "Mozilla/5.0 (Linux; Android 12; RMX3085) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Realme",
"model": "RMX3085",
"type": "mobile"
}
},
{
"desc": "Realme 9 Pro",
"ua": "Mozilla/5.0 (Linux; Android 13; RMX3471) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Realme",
"model": "RMX3471",
"type": "mobile"
}
},
{
"desc": "Realme GT Master",
"ua": "Mozilla/5.0 (Linux; Android 13; RMX3363) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Realme",
"model": "RMX3363",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,29 @@
[
{
"desc": "Roku",
"ua": "Mozilla/5.0 (Roku) AppleWebKit/537.36 (KHTML, like Gecko) Web/1.1 Safari/537.36",
"expect": {
"vendor": "Roku",
"model": "",
"type": "smarttv"
}
},
{
"desc": "Roku",
"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36 Roku/DVP-8.10 (468.10E04145A)",
"expect": {
"vendor": "Roku",
"model": "DVP-8.10",
"type": "smarttv"
}
},
{
"desc": "Roku",
"ua": "Roku4640X/DVP-7.70 (297.70E04154A)",
"expect": {
"vendor": "Roku",
"model": "DVP-7.70",
"type": "smarttv"
}
}
]

View File

@@ -0,0 +1,389 @@
[
{
"desc": "Samsung Galaxy A21s",
"ua": "Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-A217F) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/11.0 Chrome/75.0.3770.143 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-A217F",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy A31",
"ua": "Mozilla/5.0 (Linux; Android 10; SM-A315G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-A315G",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy A50",
"ua": "Mozilla/5.0 (Linux; Android 9; SM-A505F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.105 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-A505F",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy A50s",
"ua": "Mozilla/5.0 (Linux; Android 11; SM-A507FN) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-A507FN",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy A52s",
"ua": "Mozilla/5.0 (Linux; Android 13; SM-A528B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-A528B",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy A80",
"ua": "Mozilla/5.0 (Linux; Android 9; SM-A805F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.112 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-A805F",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy Fold",
"ua": "Mozilla/5.0 (Linux; Android 9; SAMSUNG SM-F900U Build/PPR1.180610.011) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/9.2 Chrome/67.0.3396.87 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-F900U",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy Z Flip",
"ua": "Mozilla/5.0 (Linux; Android 10; SM-F700N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-F700N",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy Z Fold2",
"ua": "Mozilla/5.0 (Linux; Android 10; SM-F916B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-F916B",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy S10E",
"ua": "Mozilla/5.0 (Linux; Android 9; SM-G970F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-G970F",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy S20 5G",
"ua": "Mozilla/5.0 (Linux; Android 10; SCG01) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SCG01",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy Note 10+",
"ua": "Mozilla/5.0 (Linux; Android 9; SM-N976V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.89 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-N976V",
"type": "mobile"
}
},
{
"desc": "Samsung SM-C5000",
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; SM-C5000 Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2704.81 Mobile Safari/537.36 wkbrowser 4.1.35 3065",
"expect": {
"vendor": "Samsung",
"model": "SM-C5000",
"type": "mobile"
}
},
{
"desc": "Samsung C8",
"ua": "Mozilla/5.0 (Linux; Android 7.1.1; SM-C7108) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-C7108",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy Note 8",
"ua": "Mozilla/5.0 (Linux; Android 4.2.2; GT-N5100 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "GT-N5100",
"type": "tablet"
}
},
{
"desc": "Samsung SM-T231",
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; SM-T231 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-T231",
"type": "tablet"
}
},
{
"desc": "Samsung Galaxy Tab 6 Lite",
"ua": "Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-P610) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/12.0 Chrome/79.0.3945.136 Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-P610",
"type": "tablet"
}
},
{
"desc": "Samsung Galaxy Tab A 9.7",
"ua": "Mozilla/5.0 (Linux; Android 7.1.1; SM-P550 Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.90 Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-P550",
"type": "tablet"
}
},
{
"desc": "Samsung Galaxy Tab A 10.1",
"ua": " Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-T515) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/13.0 Chrome/83.0.4103.106 Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-T515",
"type": "tablet"
}
},
{
"desc": "Samsung Galaxy Tab S7",
"ua": "Mozilla/5.0 (Linux; Android 10; SM-T870) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-T870",
"type": "tablet"
}
},
{
"desc": "Samsung Galaxy Tab S8",
"ua": "Mozilla/5.0 (Linux; Android 12; SM-X706B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-X706B",
"type": "tablet"
}
},
{
"desc": "Samsung Galaxy Tab S",
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; SM-T700 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-T700",
"type": "tablet"
}
},
{
"desc": "Samsung Galaxy Tab Pro 10.1",
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; SM-T520 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-T520",
"type": "tablet"
}
},
{
"desc": "Samsung Galaxy Watch",
"ua": "Mozilla/5.0 (Linux; Tizen 5.5; SAMSUNG SM-R805W) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/2.0 Chrome/69.0.3497.106 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-R805W",
"type": "wearable"
}
},
{
"desc": "Samsung Galaxy Watch Active 2",
"ua": "Mozilla/5.0 (Linux; Tizen 5.5; SAMSUNG SM-R820) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/2.0 Chrome/69.0.3497.106 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-R820",
"type": "wearable"
}
},
{
"desc": "Samsung Galaxy Watch4",
"ua": "Mozilla/5.0 (Linux; Android 11; SAMSUNG SM-R875U) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/2.2. Chrome/102.0.5005.125 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-R875U",
"type": "wearable"
}
},
{
"desc": "Samsung Galaxy Watch5 Pro",
"ua": "Mozilla/5.0 (Linux; Android 11; SAMSUNG SM-R925U) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.2. Chrome/111.0.5563.116 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-R925U",
"type": "wearable"
}
},
{
"desc": "Samsung Galaxy Watch7",
"ua": "Dalvik/2.1.0 (Linux; U; Android 14; SM-L300 Build/AW2E.240318.016)",
"expect": {
"vendor": "Samsung",
"model": "SM-L300",
"type": "wearable"
}
},
{
"desc": "Samsung Note 10.1",
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; SM-P605) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-P605",
"type": "tablet"
}
},
{
"desc": "Samsung SmartTV2011",
"ua": "HbbTV/1.1.1 (;;;;;) Maple;2011",
"expect": {
"vendor": "Samsung",
"model": "SmartTV2011",
"type": "smarttv"
}
},
{
"desc": "Samsung SmartTV2012",
"ua": "HbbTV/1.1.1 (;Samsung;SmartTV2012;;;) WebKit",
"expect": {
"vendor": "Samsung",
"model": "SmartTV2012",
"type": "smarttv"
}
},
{
"desc": "Samsung SmartTV2014",
"ua": "HbbTV/1.1.1 (;Samsung;SmartTV2014;T-NT14UDEUC-1060.4;;) WebKit",
"expect": {
"vendor": "Samsung",
"model": "SmartTV2014",
"type": "smarttv"
}
},
{
"desc": "Samsung SmartTV",
"ua": "Mozilla/5.0 (SMART-TV; Linux; Tizen 2.3) AppleWebkit/538.1 (KHTML, like Gecko) SamsungBrowser/1.0 TV Safari/538.1",
"expect": {
"vendor": "Samsung",
"model": "undefined",
"type": "smarttv"
}
},
{
"desc": "Samsung SmartTV HBBTV",
"ua": "HbbTV/1.5.1 (+DRM;Samsung;SmartTV2021:UAU7000;T-KSU2EDEUC-1506.0;KantSU2e;urn:samsungtv:familyname:21_KANTSU2E_UHD_BASIC:2021;) Tizen/6.0 (+TVPLUS+SmartHubLink) Chrome/76 LaTivu_1.0.1_2021 RVID/17",
"expect": {
"vendor": "Samsung",
"model": "SmartTV2021:UAU7000",
"type": "smarttv"
}
},
{
"desc": "Galaxy Nexus",
"ua": "Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19",
"expect": {
"vendor": "Samsung",
"model": "Galaxy Nexus",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy C9 Pro",
"ua": "Mozilla/5.0 (Linux; Android 6.0; SAMSUNG SM-C900F Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.2 Chrome/44.0.2403.133 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-C900F",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy S5",
"ua": "Mozilla/5.0 (Linux; Android 5.0; SM-G900F Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-G900F",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy J7 Prime",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; SM-G610F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-G610F",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy S6",
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; SM-G920I Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-G920I",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy S6 Edge",
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; SM-G925I Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-G925I",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy Note 5 Chrome",
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; SM-N920C Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.91 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-N920C",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy Note 5 Samsung Browser",
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; SAMSUNG SM-N920C Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "SM-N920C",
"type": "mobile"
}
},
{
"desc": "Samsung Galaxy Gear Live",
"ua": "Mozilla/5.0 (Linux; Android 4.4; Gear Live Build/KMV78X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/19.77.34.5 Mobile Safari/537.36",
"expect": {
"vendor": "Samsung",
"model": "Gear Live",
"type": "wearable"
}
}
]

View File

@@ -0,0 +1,56 @@
[
{
"desc": "Sharp AQUOS-TVX19B",
"ua": "Mozilla/5.0 (Linux; Android 9; AQUOS-TVX19B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Sharp",
"model": "AQUOS-TVX19B",
"type": "smarttv"
}
},
{
"desc": "Sharp Aquos B10",
"ua": "Mozilla/5.0 (Linux; Android 7.0; SH-A01) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Mobile Safari/537.36",
"expect": {
"vendor": "Sharp",
"model": "SH-A01",
"type": "mobile"
}
},
{
"desc": "Sharp Aquos L2",
"ua": "Mozilla/5.0 (Linux; Android 7.0; SH-L02 Build/S4045) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36",
"expect": {
"vendor": "Sharp",
"model": "SH-L02",
"type": "mobile"
}
},
{
"desc": "Sharp Aquos L2",
"ua": "Mozilla/5.0 (Linux; Android 7.0; SH-L02) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Sharp",
"model": "SH-L02",
"type": "mobile"
}
},
{
"desc": "Sharp Aquos R2",
"ua": "Mozilla/5.0 (Linux; Android 8.0; SHV42) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.92 Mobile Safari/537.36",
"expect": {
"vendor": "Sharp",
"model": "SHV42",
"type": "mobile"
}
},
{
"desc": "Docomo SH-02M",
"ua": "Mozilla/5.0 (Linux; Android 9; SH-02M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.136 Mobile Safari/537.36",
"expect": {
"vendor": "Sharp",
"model": "SH-02M",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,29 @@
[
{
"desc": "Smartfren Andromax L",
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; Andromax B26D2H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36",
"expect": {
"vendor": "Smartfren",
"model": "Andromax B26D2H",
"type": "mobile"
}
},
{
"desc": "Smartfren Andromax G2",
"ua": "Mozilla/5.0 (Linux; Android 4.4.2; Smartfren Andromax AD9A1H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.83 Mobile Safari/537.36",
"expect": {
"vendor": "Smartfren",
"model": "Andromax AD9A1H",
"type": "mobile"
}
},
{
"desc": "Smartfren New Andromax I",
"ua": "Mozilla/5.0 (Linux; U; Android 4.1.2; id-id; New Andromax-i Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
"expect": {
"vendor": "Smartfren",
"model": "New Andromax-i",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,218 @@
[
{
"desc": "SONY Xperia 1 III",
"ua": "Mozilla/5.0 (Linux; Android 11; A101SO) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "A101SO",
"type": "mobile"
}
},
{
"desc": "Sony G8141 (Xperia XZ1)",
"ua": "Mozilla/5.0 (Linux; Android 9; SO-01K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "SO-01K",
"type": "mobile"
}
},
{
"desc": "Sony G8141 (Xperia XZ Premium)",
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; G8141) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Mobile Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "G8141",
"type": "mobile"
}
},
{
"desc": "Sony C5303 (Xperia SP)",
"ua": "Mozilla/5.0 (Linux; Android 4.3; C5303 Build/12.1.A.1.205) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Mobile Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "C5303",
"type": "mobile"
}
},
{
"desc": "Sony SO-02F (Xperia Z1 F)",
"ua": "Mozilla/5.0 (Linux; Android 4.2.2; SO-02F Build/14.1.H.2.119) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "SO-02F",
"type": "mobile"
}
},
{
"desc": "Sony D6653 (Xperia Z3)",
"ua": "Mozilla/5.0 (Linux; Android 4.4; D6653 Build/23.0.A.0.376) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "D6653",
"type": "mobile"
}
},
{
"desc": "Sony Xperia SOL25 (ZL2)",
"ua": "Mozilla/5.0 (Linux; U; Android 4.4; SOL25 Build/17.1.1.C.1.64) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
"expect": {
"vendor": "Sony",
"model": "SOL25",
"type": "mobile"
}
},
{
"desc": "Sony Xperia SP",
"ua": "Mozilla/5.0 (Linux; Android 4.3; C5302 Build/12.1.A.1.201) AppleWebkit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "C5302",
"type": "mobile"
}
},
{
"desc": "Sony Xperia L4",
"ua": "Mozilla/5.0 (Linux; Android 9; XQ-AD51) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.83 Mobile Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "XQ-AD51",
"type": "mobile"
}
},
{
"desc": "Sony Xperia 1ii",
"ua": "Mozilla/5.0 (Linux; Android 10; XQ-AT51) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Mobile Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "XQ-AT51",
"type": "mobile"
}
},
{
"desc": "Sony Xperia 1ii",
"ua": "Mozilla/5.0 (Linux; Android 10; SOG01) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "SOG01",
"type": "mobile"
}
},
{
"desc": "Sony Xperia 10ii",
"ua": "Mozilla/5.0 (Linux; Android 10; XQ-AU52) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "XQ-AU52",
"type": "mobile"
}
},
{
"desc": "Sony Xperia Pro",
"ua": "Mozilla/5.0 (Linux; Android 10; XQ-AQ52) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.185 Mobile Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "XQ-AQ52",
"type": "mobile"
}
},
{
"desc": "Sony SGP521 (Xperia Z2 Tablet)",
"ua": "Mozilla/5.0 (Linux; Android 4.4; SGP521 Build/17.1.A.0.432) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "Xperia Tablet",
"type": "tablet"
}
},
{
"desc": "Sony Xperia Z2 Tablet",
"ua": "Mozilla/5.0 (Linux; Android 5.1.1; SGP561) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.99 Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "Xperia Tablet",
"type": "tablet"
}
},
{
"desc": "Sony Tablet S",
"ua": "Mozilla/5.0 (Linux; U; Android 3.1; Sony Tablet S Build/THMAS10000) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
"expect": {
"vendor": "Sony",
"model": "Xperia Tablet",
"type": "tablet"
}
},
{
"desc": "Sony Tablet Z LTE",
"ua": "Mozilla/5.0 (Linux; U; Android 4.1; SonySGP321 Build/10.2.C.0.143) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30",
"expect": {
"vendor": "Sony",
"model": "Xperia Tablet",
"type": "tablet"
}
},
{
"desc": "Sony BRAVIA 4K GB ATV3",
"ua": "Mozilla/5.0 (Linux; Andr0id 9; BRAVIA 4K GB ATV3 Build/PTT1.190515.001.S38) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36 OPR/46.0.2207.0 OMI/4.13.0.180.DIA5.104 Model/Sony-BRAVIA-4K-GB-ATV3",
"expect": {
"vendor": "Sony",
"model": "BRAVIA 4K GB ATV3",
"type": "smarttv"
}
},
{
"desc": "Sony BRAVIA 4K GB ATV3",
"ua": "Mozilla/5.0 (Linux; Android 9; BRAVIA 4K GB ATV3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "BRAVIA 4K GB ATV3",
"type": "smarttv"
}
},
{
"desc": "Sony Bravia 4k UR2",
"ua": "Mozilla/5.0 (Linux: Andr0id 9: BRAVIA 4K UR2 Build/PTT1.190515.001.S104) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36 OPR/46.0.2207.0 OMI/4.13.5.431.DIA5HBBTV.250 Model/Sony-BRAVIA-4K-UR2",
"expect": {
"vendor": "Sony",
"model": "BRAVIA 4K UR2",
"type": "smarttv"
}
},
{
"desc": "PlayStation 4",
"ua": "Mozilla/5.0 (PlayStation 4 3.00) AppleWebKit/537.73 (KHTML, like Gecko)",
"expect": {
"vendor": "Sony",
"model": "PlayStation 4",
"type": "console"
}
},
{
"desc": "PlayStation 5",
"ua": "Mozilla/5.0 (Playstation; Playstation 5/1.05) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15",
"expect": {
"vendor": "Sony",
"model": "Playstation 5",
"type": "console"
}
},
{
"desc": "PlayStation Vita",
"ua": "Mozilla/5.0 (PlayStation Vita 3.52) AppleWebKit/537.73 (KHTML, like Gecko) Silk/3.2",
"expect": {
"vendor": "Sony",
"model": "PlayStation Vita",
"type": "console"
}
},
{
"desc": "Sony SmartWatch 3",
"ua": "Mozilla/5.0 (Linux; Android 5.0.2; SmartWatch 3 Build/LWX49K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/19.77.34.5 Mobile Safari/537.36",
"expect": {
"vendor": "Sony",
"model": "SmartWatch 3",
"type": "wearable"
}
}
]

View File

@@ -0,0 +1,488 @@
[
{
"desc": "TCL 10 5G",
"ua": "Mozilla/5.0 (Linux; Android 11; T790Y) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36 EdgA/114.0.1823.43",
"expect": {
"vendor": "TCL",
"model": "T790Y",
"type": "mobile"
}
},
{
"desc": "TCL 10 5G UW",
"ua": "Mozilla/5.0 (Linux; Android 10; T790S) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T790S",
"type": "mobile"
}
},
{
"desc": "TCL 10 Plus",
"ua": "Mozilla/5.0 (Linux; Android 11; T782H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Mobile Safari/537.36 OPR/64.3.3282.60839",
"expect": {
"vendor": "TCL",
"model": "T782H",
"type": "mobile"
}
},
{
"desc": "TCL 10 Pro",
"ua": "Mozilla/5.0 (Linux; Android 10; T799B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.87 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T799B",
"type": "mobile"
}
},
{
"desc": "TCL 10 SE",
"ua": "Mozilla/5.0 (Linux; Android 10; T766H_RU) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.85 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T766H",
"type": "mobile"
}
},
{
"desc": "TCL 10 TabMax",
"ua": "Mozilla/5.0 (Linux; Android 11; 9296Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "9296Q",
"type": "tablet"
}
},
{
"desc": "TCL 10 TabMax 4G",
"ua": "Mozilla/5.0 (Linux; Android 10; 9295G_EEA) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "9295G",
"type": "tablet"
}
},
{
"desc": "TCL 10 TabMax WiFi",
"ua": "Mozilla/5.0 (Linux; Android 10; 9296G_TR) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.101 Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "9296G",
"type": "tablet"
}
},
{
"desc": "TCL 10L",
"ua": "Mozilla/5.0 (Linux; Android 10; T770B Build/QKQ1.200329.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36 GSA/11.41.10.23.arm64",
"expect": {
"vendor": "TCL",
"model": "T770B",
"type": "mobile"
}
},
{
"desc": "TCL 10L",
"ua": "Mozilla/5.0 (Linux; Android 11; T770H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T770H",
"type": "mobile"
}
},
{
"desc": "TCL 20 5G",
"ua": "Mozilla/5.0 (Linux; Android 11; T781) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T781",
"type": "mobile"
}
},
{
"desc": "TCL 20 Pro 5G",
"ua": "Mozilla/5.0 (Linux; Android 12; T810S) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36 EdgA/113.0.1774.63",
"expect": {
"vendor": "TCL",
"model": "T810S",
"type": "mobile"
}
},
{
"desc": "TCL 20 SE",
"ua": "Mozilla/5.0 (Linux; Android 11; T671H Build/RKQ1.201112.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/99.0.4844.73 Mobile Safari/537.36 GoogleApp/13.9.7.23.arm64",
"expect": {
"vendor": "TCL",
"model": "T671H",
"type": "mobile"
}
},
{
"desc": "TCL 20 XE",
"ua": "Mozilla/5.0 (Linux; Android 11; 5087Z) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "5087Z",
"type": "mobile"
}
},
{
"desc": "TCL 20B",
"ua": "Mozilla/5.0 (Linux; Android 11; 6159K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "6159K",
"type": "mobile"
}
},
{
"desc": "TCL 205",
"ua": "Mozilla/5.0 (Linux; Android 11; 4187D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "4187D",
"type": "mobile"
}
},
{
"desc": "TCL 20E",
"ua": "Mozilla/5.0 (Linux; Android 11; 6125A) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/18.0 Chrome/99.0.4844.88 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "6125A",
"type": "mobile"
}
},
{
"desc": "TCL 20L",
"ua": "Mozilla/5.0 (Linux; Android 11; T774H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.59 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T774H",
"type": "mobile"
}
},
{
"desc": "TCL 20L Plus",
"ua": "Mozilla/5.0 (Linux; Android 11; T775H Build/RKQ1.210107.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/114.0.5735.61 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T775H",
"type": "mobile"
}
},
{
"desc": "TCL 20R 5G",
"ua": "Mozilla/5.0 (Linux; Android 11; T767H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.97 Mobile Safari/537.36 OPR/71.3.3718.67322",
"expect": {
"vendor": "TCL",
"model": "T767H",
"type": "mobile"
}
},
{
"desc": "TCL 20S",
"ua": "Mozilla/5.0 (Linux; Android 11; T773O) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T773O",
"type": "mobile"
}
},
{
"desc": "TCL 20Y",
"ua": "Mozilla/5.0 (Linux; Android 11; 6156D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.134 Mobile Safari/537.36 OPR/70.3.3653.66287",
"expect": {
"vendor": "TCL",
"model": "6156D",
"type": "mobile"
}
},
{
"desc": "TCL 30 V 5G",
"ua": "Mozilla/5.0 (Linux; Android 11; T781S Build/RKQ1.210614.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/115.0.5790.166 Mobile Safari/537.36[FBAN/EMA;FBLC/en_US;FBAV/369.0.0.5.110;]",
"expect": {
"vendor": "TCL",
"model": "T781S",
"type": "mobile"
}
},
{
"desc": "TCL 30 XE 5G",
"ua": "Mozilla/5.0 (Linux; Android 12; T767W Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/113.0.5672.162 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/416.0.0.35.85;]",
"expect": {
"vendor": "TCL",
"model": "T767W",
"type": "mobile"
}
},
{
"desc": "TCL 305",
"ua": "Mozilla/5.0 (Linux; arm; Android 11; 6102D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.167 YaBrowser/22.7.6.96.00 SA/3 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "6102D",
"type": "mobile"
}
},
{
"desc": "TCL 306",
"ua": "Mozilla/5.0 (Linux; Android 12; 6102H Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/107.0.5304.141 Mobile Safari/537.36[FBAN/EMA;FBLC/it_IT;FBAV/332.0.0.22.108;]",
"expect": {
"vendor": "TCL",
"model": "6102H",
"type": "mobile"
}
},
{
"desc": "TCL 30",
"ua": "Mozilla/5.0 (Linux; Android 12; T676H Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/113.0.5672.162 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T676H",
"type": "mobile"
}
},
{
"desc": "TCL 30+",
"ua": "Mozilla/5.0 (Linux; Android 12; T676J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T676J",
"type": "mobile"
}
},
{
"desc": "TCL 30 5G",
"ua": "Mozilla/5.0 (Linux; Android 12; T776H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T776H",
"type": "mobile"
}
},
{
"desc": "TCL 30 LE",
"ua": "Mozilla/5.0 (Linux; Android 12; 4188V Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/112.0.5615.136 Mobile Safari/537.36[FBAN/EMA;FBLC/en_US;FBAV/352.0.0.14.108;]",
"expect": {
"vendor": "TCL",
"model": "4188V",
"type": "mobile"
}
},
{
"desc": "TCL 30 SE",
"ua": "Mozilla/5.0 (Linux; Android 12; 6165H Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/108.0.5359.128 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/396.1.0.28.104;]",
"expect": {
"vendor": "TCL",
"model": "6165H",
"type": "mobile"
}
},
{
"desc": "TCL 30E",
"ua": "Mozilla/5.0 (Linux; Android 12; 6127I) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "6127I",
"type": "mobile"
}
},
{
"desc": "TCL 40 NxtPaper",
"ua": "Mozilla/5.0 (Linux; Android 13; T612B Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/125.0.6422.53 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T612B",
"type": "mobile"
}
},
{
"desc": "TCL 4056S",
"ua": "Mozilla/5.0 (Mobile; TCL 4056S; rv:84.0) Gecko/84.0 Firefox/84.0 KAIOS/3.0",
"expect": {
"vendor": "TCL",
"model": "4056S",
"type": "mobile"
}
},
{
"desc": "TCL A3",
"ua": "Mozilla/5.0 (Linux; Android 11; A509DL Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/101.0.4951.61 Mobile Safari/537.36 GSA/13.18.7.23.arm64",
"expect": {
"vendor": "TCL",
"model": "A509DL",
"type": "mobile"
}
},
{
"desc": "TCL A30",
"ua": "Mozilla/5.0 (Linux; Android 11; 5102L Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/112.0.5615.136 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/413.0.0.30.104;]",
"expect": {
"vendor": "TCL",
"model": "5102L",
"type": "mobile"
}
},
{
"desc": "TCL 40 SE",
"ua": "Mozilla/5.0 (Linux; Android 13; T610K Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/115.0.5790.166 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T610K",
"type": "mobile"
}
},
{
"desc": "TCL 40 XE 5G",
"ua": "Mozilla/5.0 (Linux; Android 13; T609DL Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/125.0.6422.136 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/466.1.0.57.85;]",
"expect": {
"vendor": "TCL",
"model": "T609DL",
"type": "mobile"
}
},
{
"desc": "TCL 403",
"ua": "Mozilla/5.0 (Linux; Android 12; T431D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T431D",
"type": "mobile"
}
},
{
"desc": "TCL 405",
"ua": "Mozilla/5.0 (Linux; Android 12; T506D Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/113.0.5672.162 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/418.0.0.33.69;]",
"expect": {
"vendor": "TCL",
"model": "T506D",
"type": "mobile"
}
},
{
"desc": "TCL 408",
"ua": "Mozilla/5.0 (Linux; U; Android 12; T507U Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/105.0.5195.136 Mobile Safari/537.36 OPR/75.0.2254.68857",
"expect": {
"vendor": "TCL",
"model": "T507U",
"type": "mobile"
}
},
{
"desc": "TCL 40R 5G",
"ua": "Mozilla/5.0 (Linux; Android 12; T771K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36 EdgA/114.0.1823.37",
"expect": {
"vendor": "TCL",
"model": "T771K",
"type": "mobile"
}
},
{
"desc": "TCL Ion X",
"ua": "Mozilla/5.0 (Linux; Android 12; T430W Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/114.0.5735.60 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T430W",
"type": "mobile"
}
},
{
"desc": "TCL NxtPaper 11",
"ua": "Mozilla/5.0 (Linux; Android 13; 9466X Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.179 Safari/537.36 [FB_IAB/FB4A;FBAV/473.0.0.41.81;]",
"expect": {
"vendor": "TCL",
"model": "9466X",
"type": "tablet"
}
},
{
"desc": "TCL Stylus 5G",
"ua": "Mozilla/5.0 (Linux; Android 12; T779W Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/127.0.6533.2 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "T779W",
"type": "mobile"
}
},
{
"desc": "TCL Tab 8 4G",
"ua": "Mozilla/5.0 (Linux; Android 10; 9048S) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "9048S",
"type": "tablet"
}
},
{
"desc": "TCL Tab 8 LE",
"ua": "Mozilla/5.0 (Linux; Android 12; 9137W Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/114.0.5735.61 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "9137W",
"type": "tablet"
}
},
{
"desc": "TCL Tab 10 FHD 4G",
"ua": "Mozilla/5.0 (Linux; Android 11; 9060G Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/114.0.5735.196 Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "9060G",
"type": "tablet"
}
},
{
"desc": "TCL Tab 10 HD 4G",
"ua": "Mozilla/5.0 (Linux; Android 11; 9060X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "9060X",
"type": "tablet"
}
},
{
"desc": "TCL Tab 10 LTE",
"ua": "Mozilla/5.0 (Linux; Android 13; 8196G Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.162 Safari/537.36 [FB_IAB/FB4A;FBAV/471.0.0.35.80;]",
"expect": {
"vendor": "TCL",
"model": "8196G",
"type": "tablet"
}
},
{
"desc": "TCL Tab 10 WiFi",
"ua": "Mozilla/5.0 (Linux; Android 13; 8496G Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/127.0.6533.61 Safari/537.36 [FB_IAB/FB4A;FBAV/474.0.0.52.74;]",
"expect": {
"vendor": "TCL",
"model": "8496G",
"type": "tablet"
}
},
{
"desc": "TCL Tab 10L",
"ua": "Mozilla/5.0 (Linux; Android 11; 8491X_EEA Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/107.0.5304.105 Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "8491X",
"type": "tablet"
}
},
{
"desc": "TCL Tab 10s 4G",
"ua": "Mozilla/5.0 (Linux; Android 11; 9080G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "9080G",
"type": "tablet"
}
},
{
"desc": "TCL Xess P17AA",
"ua": "Mozilla/5.0 (Linux; Android 5.1; TCL Xess P17AA Build/LMY47D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.85 Safari/537.36",
"expect": {
"vendor": "TCL",
"model": "Xess P17AA",
"type": "tablet"
}
}
]

View File

@@ -0,0 +1,20 @@
[
{
"desc": "TechniSAT Digit ISIO S SAT receiver",
"ua": "Opera/9.80 (Linux sh4; U; HbbTV/1.1.1 (;;;;;); CE-HTML; TechniSat Digit ISIO S; de) Presto/2.9.167 Version/11.50",
"expect": {
"vendor": "TechniSat",
"model": "Digit ISIO S",
"type": "smarttv"
}
},
{
"desc": "TechniSAT MultyVision SmartTV",
"ua": "Opera/9.80 (Linux i686; U; HbbTV/1.1.1 (;;;;;); CE-HTML; TechniSat MultyVision ISIO; de) Presto/2.9.167 Version/11.50",
"expect": {
"vendor": "TechniSat",
"model": "MultyVision ISIO",
"type": "smarttv"
}
}
]

View File

@@ -0,0 +1,20 @@
[
{
"desc": "Tecno KC8",
"ua": "Mozilla/5.0 (Linux; Android 10; TECNO KC8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "TECNO",
"model": "KC8",
"type": "mobile"
}
},
{
"desc": "Tecno Spark 8C",
"ua": "Mozilla/5.0 (Linux; Android 11; TECNO KG5n) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "TECNO",
"model": "KG5n",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,20 @@
[
{
"desc": "Tesla",
"ua": "Mozilla/5.0 (X11; GNU/Linux) AppleWebKit/601.1 (KHTML, like Gecko) Tesla QtCarBrowser Safari/601.1",
"expect": {
"vendor": "Tesla",
"model": "undefined",
"type": "embedded"
}
},
{
"desc": "Tesla",
"ua": "Mozilla/5.0 (X11; GNU/Linux) AppleWebKit/537.36 (KHTML, like Gecko) Chromium/79.0.3945.130 Chrome/79.0.3945.130 Safari/537.36 Tesla/2020.16.2.1-e99c70fff409",
"expect": {
"vendor": "Tesla",
"model": "undefined",
"type": "embedded"
}
}
]

View File

@@ -0,0 +1,92 @@
[
{
"desc": "Ulefone Armor",
"ua": "Mozilla/5.0 (Linux; Android 6.0; Armor Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36",
"expect": {
"vendor": "Ulefone",
"model": "Armor",
"type": "mobile"
}
},
{
"desc": "Ulefone Armor",
"ua": "Mozilla/5.0 (Linux; arm_64; Android 6.0; Armor) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 YaBrowser/20.4.2.101.00 SA/1 Mobile Safari/537.36",
"expect": {
"vendor": "Ulefone",
"model": "Armor",
"type": "mobile"
}
},
{
"desc": "Ulefone Armor 8 Pro",
"ua": "Mozilla/5.0 (Linux; Android 11; Armor 8 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.192 Mobile Safari/537.36 OPR/74.1.3922.71199",
"expect": {
"vendor": "Ulefone",
"model": "Armor 8 Pro",
"type": "mobile"
}
},
{
"desc": "Ulefone Armor 12 5G",
"ua": "Mozilla/5.0 (Linux; Android 11; Armor 12 5G Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/115.0.5790.166 Mobile Safari/537.36",
"expect": {
"vendor": "Ulefone",
"model": "Armor 12 5G",
"type": "mobile"
}
},
{
"desc": "Ulefone Armor 20WT",
"ua": "Mozilla/5.0 (Linux; Android 12; Armor 20WT) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/22.0 Chrome/111.0.5563.116 Mobile Safari/537.36",
"expect": {
"vendor": "Ulefone",
"model": "Armor 20WT",
"type": "mobile"
}
},
{
"desc": "Ulefone Armor Pad",
"ua": "Mozilla/5.0 (Linux; Android 12; Armor Pad Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/431.0.0.30.108;]",
"expect": {
"vendor": "Ulefone",
"model": "Armor Pad",
"type": "mobile"
}
},
{
"desc": "Ulefone Armor X5 Pro",
"ua": "Mozilla/5.0 (Linux; Android 10; Armor X5 Pro Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/430.0.0.23.113;]",
"expect": {
"vendor": "Ulefone",
"model": "Armor X5 Pro",
"type": "mobile"
}
},
{
"desc": "Ulefone Power Armor 14 Pro",
"ua": "Mozilla/5.0 (Linux; Android 12; Power Armor14 Pro Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/115.0.5790.138 Mobile Safari/537.36",
"expect": {
"vendor": "Ulefone",
"model": "Power Armor14 Pro",
"type": "mobile"
}
},
{
"desc": "Ulefone Power Armor 18T",
"ua": "Mozilla/5.0 (Linux; Android 12; Power Armor 18T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Ulefone",
"model": "Power Armor 18T",
"type": "mobile"
}
},
{
"desc": "Ulefone Power Armor 19T",
"ua": "Mozilla/5.0 (Linux; Android 12; Power Armor 19T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.192 Mobile Safari/537.36 OPR/74.3.3922.71982",
"expect": {
"vendor": "Ulefone",
"model": "Power Armor 19T",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,74 @@
[
{
"desc": "Vivo S1 Pro",
"ua": "Mozilla/5.0 (Linux; Android 11; vivo 1920) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Vivo",
"model": "1920",
"type": "mobile"
}
},
{
"desc": "Vivo Y52s",
"ua": "Mozilla/5.0 (Linux; Android 10; V2057A Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/12.10 SP-engine/2.28.0 baiduboxapp/12.10.0.10 (Baidu; P1 10) NABar/1.0",
"expect": {
"vendor": "Vivo",
"model": "V2057A",
"type": "mobile"
}
},
{
"desc": "Vivo X60",
"ua": "Mozilla/5.0 (Linux; Android 11; V2046A; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36 VivoBrowser/8.8.71.0",
"expect": {
"vendor": "Vivo",
"model": "V2046A",
"type": "mobile"
}
},
{
"desc": "Vivo Y79A",
"ua": "Mozilla/5.0 (Linux; Android 7.1.2; vivo Y79A Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36 VivoBrowser/9.0.14.0",
"expect": {
"vendor": "Vivo",
"model": "Y79A",
"type": "mobile"
}
},
{
"desc": "Vivo Y93",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; vivo 1814) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Vivo",
"model": "1814",
"type": "mobile"
}
},
{
"desc": "Vivo Y97",
"ua": "Mozilla/5.0 (Linux; Android 8.1.0; V1813T Build/O11019; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36 VivoBrowser/9.0.14.0",
"expect": {
"vendor": "Vivo",
"model": "V1813T",
"type": "mobile"
}
},
{
"desc": "Vivo iQOO Pro",
"ua": "Mozilla/5.0 (Linux; Android 11; V1916A; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36 VivoBrowser/9.1.10.6",
"expect": {
"vendor": "Vivo",
"model": "V1916A",
"type": "mobile"
}
},
{
"desc": "Vivo 1906 (Y11)",
"ua": "Mozilla/5.0 (Linux; Android 11; vivo 1906) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Vivo",
"model": "1906",
"type": "mobile"
}
}
]

View File

@@ -0,0 +1,569 @@
[
{
"desc": "MIUI Xiaomi Mi MIX 3 5G",
"ua": "Dalvik/2.1.0 (Linux; U; Android 9; Mi MIX 3 5G MIUI/V10.3.2.0.PEMEUVF)",
"expect": {
"vendor": "Xiaomi",
"model": "Mi MIX 3 5G",
"type": "mobile"
}
},
{
"desc": "MIUI POCOPHONE F1",
"ua": "Dalvik/2.1.0 (Linux; U; Android 9; POCOPHONE F1 MIUI/9.6.27)",
"expect": {
"vendor": "Xiaomi",
"model": "POCOPHONE F1",
"type": "mobile"
}
},
{
"desc": "MIUI Xiaomi M2006C3MT",
"ua": "Dalvik/2.1.0 (Linux; U; Android 10; M2006C3MT MIUI/V12.0.7.0.QCRMIXM)",
"expect": {
"vendor": "Xiaomi",
"model": "M2006C3MT",
"type": "mobile"
}
},
{
"desc": "Xiaomi 2201117TG",
"ua": "Mozilla/5.0 (Linux; Android 11; 2201117TG) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.98 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "2201117TG",
"type": "mobile"
}
},
{
"desc": "Xiaomi M2004J19C",
"ua": "Mozilla/5.0 (Linux; Android 11; M2004J19C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/113.0.5672.77 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "M2004J19C",
"type": "mobile"
}
},
{
"desc": "Xiaomi M2006C3MNG",
"ua": "Mozilla/5.0 (Linux; Android 11; M2006C3MNG) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.85 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "M2006C3MNG",
"type": "mobile"
}
},
{
"desc": "Xiaomi 21061119DG",
"ua": "Mozilla/5.0 (Linux; arm_64; Android 11; 21061119DG) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 YaBrowser/23.3.7.24.00 SA/3 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "21061119DG",
"type": "mobile"
}
},
{
"desc": "Xiaomi 2013023",
"ua": "Mozilla/5.0 (Linux; U; Android 4.2.2; en-US; 2013023 Build/HM2013023) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/10.0.1.512 U3/0.8.0 Mobile Safari/533.1",
"expect": {
"vendor": "Xiaomi",
"model": "2013023",
"type": "mobile"
}
},
{
"desc": "Xiaomi Hongmi Note 1W",
"ua": "Mozilla/5.0 (Linux; U; Android 4.2.2; zh-CN; HM NOTE 1W Build/JDQ39) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.7.9.439 U3/0.8.0 Mobile Safari/533.1",
"expect": {
"vendor": "Xiaomi",
"model": "HM NOTE 1W",
"type": "mobile"
}
},
{
"desc": "Xiaomi Mi 3C",
"ua": "Mozilla/5.0 (Linux; U; Android 4.3; zh-CN; MI 3C Build/JLS36C) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.7.9.439 U3/0.8.0 Mobile Safari/533.1",
"expect": {
"vendor": "Xiaomi",
"model": "MI 3C",
"type": "mobile"
}
},
{
"desc": "Xiaomi Mi 5",
"ua": "Mozilla/5.0 (Linux; Android 7.0; MI 5 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.83 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "MI 5",
"type": "mobile"
}
},
{
"desc": "Xiaomi Mi 6",
"ua": "Mozilla/5.0 (Linux; Android 7.1; MI 6 Build/NMF26X; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/59.0.3071.125 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "MI 6",
"type": "mobile"
}
},
{
"desc": "Xiaomi Mi 10 Pro",
"ua": "Linux; U; Android 13; Mi 10 Pro Build/TKQ1.221114.001",
"expect": {
"vendor": "Xiaomi",
"model": "Mi 10 Pro",
"type": "mobile"
}
},
{
"desc": "Xiaomi Mi 5s Plus",
"ua": "Mozilla/5.0 (Linux; U; Android 6.0.1; zh-cn; MI 5s Plus Build/MXB48T) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/8.7.1",
"expect": {
"vendor": "Xiaomi",
"model": "MI 5s Plus",
"type": "mobile"
}
},
{
"desc": "Xiaomi Mi A1",
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; Mi A1 Build/OPR1.170623.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "Mi A1",
"type": "mobile"
}
},
{
"desc": "Xiaomi Mi Note",
"ua": "Mozilla/5.0 (Linux; Android 4.4.4; MI NOTE LTE Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "MI NOTE LTE",
"type": "mobile"
}
},
{
"desc": "Xiaomi Mi One Plus",
"ua": "Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; MI-ONE Plus Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
"expect": {
"vendor": "Xiaomi",
"model": "MI-ONE Plus",
"type": "mobile"
}
},
{
"desc": "Xiaomi Mi Max 3",
"ua": "Mozilla/5.0 (Linux; Android 9; MI MAX 3 Build/PKQ1.181007.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/79.0.3945.116 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "MI MAX 3",
"type": "mobile"
}
},
{
"desc": "Xiaomi Mi A1",
"ua": "Mozilla/5.0 (Linux; Android 9; Mi A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.101 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "Mi A1",
"type": "mobile"
}
},
{
"desc": "Xiaomi Mi A2 Lite",
"ua": "Mozilla/5.0 (Linux; Android 9; Mi A2 Lite) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.62 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "Mi A2 Lite",
"type": "mobile"
}
},
{
"desc": "Xiaomi Mi 9 SE",
"ua": "Mozilla/5.0 (Linux; Android 9; Mi 9 SE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.136 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "Mi 9 SE",
"type": "mobile"
}
},
{
"desc": "Xiaomi Mi A2",
"ua": "Mozilla/5.0 (Linux; Android 9; Mi A2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "Mi A2",
"type": "mobile"
}
},
{
"desc": "Xiaomi Mi CC9",
"ua": "Mozilla/5.0 (Linux; U; Android 11; zh-cn; MI CC 9 Build/RKQ1.200826.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.116 Mobile Safari/537.36 XiaoMi/MiuiBrowser/15.5.18",
"expect": {
"vendor": "Xiaomi",
"model": "MI CC 9",
"type": "mobile"
}
},
{
"desc": "Xiaomi MI PAD",
"ua": "Mozilla/5.0 (Linux; U; Android 4.4.4; en-us; MI PAD Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/9.3.2",
"expect": {
"vendor": "Xiaomi",
"model": "MI PAD",
"type": "tablet"
}
},
{
"desc": "Xiaomi MI PAD 2",
"ua": "Mozilla/5.0 (Linux; Android 5.1; MI PAD 2 Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/60.0.3112.107 Safari/537.36 [FB_IAB/FB4A;FBAV/137.0.0.24.91;]",
"expect": {
"vendor": "Xiaomi",
"model": "MI PAD 2",
"type": "tablet"
}
},
{
"desc": "Xiaomi MI PAD 2",
"ua": "Mozilla/5.0 (Linux; x86_64; Android 5.1; MI PAD 2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 YaBrowser/20.11.2.69.01 Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "MI PAD 2",
"type": "tablet"
}
},
{
"desc": "Xiaomi MI PAD 3",
"ua": "Mozilla/5.0 (Linux; arm_64; Android 7.0; MI PAD 3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.216 YaBrowser/21.5.6.56.01 Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "MI PAD 3",
"type": "tablet"
}
},
{
"desc": "Xiaomi MI PAD 4",
"ua": "Mozilla/5.0 (Linux; arm_64; Android 8.1.0; MI PAD 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 YaBrowser/19.9.1.126.01 Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "MI PAD 4",
"type": "tablet"
}
},
{
"desc": "Xiaomi MI PAD 4 PLUS",
"ua": "Mozilla/5.0 (Linux; Android 8.1; MI PAD 4 PLUS) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "MI PAD 4 PLUS",
"type": "tablet"
}
},
{
"desc": "Xiaomi MI PAD 4 WiFi",
"ua": "Mozilla/5.0 (Linux; Android 8.1; Mi Pad4 Wi-Fi) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Mobile Safari/537.36 EdgA/86.0.622.61",
"expect": {
"vendor": "Xiaomi",
"model": "Mi Pad4 Wi-Fi",
"type": "tablet"
}
},
{
"desc": "Xiaomi Mi Pad 5",
"ua": "Mozilla/5.0 (Linux; Android 13; 21051182G Build/TKQ1.221013.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.107 Safari/537.36 Flipboard/4.3.31/5486,4.3.31.5486",
"expect": {
"vendor": "Xiaomi",
"model": "21051182G",
"type": "tablet"
}
},
{
"desc": "Xiaomi Mi Pad 5 Pro",
"ua": "Mozilla/5.0 (Linux; Android 11; M2105K81AC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Safari/537.36 Line/13.15.1/IAB",
"expect": {
"vendor": "Xiaomi",
"model": "M2105K81AC",
"type": "tablet"
}
},
{
"desc": "Xiaomi Mi Pad 5 Pro 5G",
"ua": "Mozilla/5.0 (Linux; Android 12; M2105K81C) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/23.0 Chrome/115.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "M2105K81C",
"type": "tablet"
}
},
{
"desc": "Xiaomi Mi Pad 6 Max 14",
"ua": "Mozilla/5.0 (Linux; U; Android 14; zh-tw; 2307BRPDCC Build/UKQ1.230804.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/109.0.5414.118 Mobile Safari/537.36 Device/yudi Model/2307BRPDCC XiaoMi/MiuiBrowser/14.10.6",
"expect": {
"vendor": "Xiaomi",
"model": "2307BRPDCC",
"type": "tablet"
}
},
{
"desc": "Xiaomi Mi Pad 6 Pro",
"ua": "Mozilla/5.0 (Linux; U; Android 13; en-US; 23046RP50C Build/TKQ1.221114.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 UCBrowser/13.6.2.1316 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "23046RP50C",
"type": "tablet"
}
},
{
"desc": "Xiaomi Pad 6S Pro 12.4",
"ua": "Mozilla/5.0 (Linux; Android 14; 24018RPACC) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "24018RPACC",
"type": "tablet"
}
},
{
"desc": "Xiaomi POCO X2",
"ua": "Mozilla/5.0 (Linux; Android 10; POCO X2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "POCO X2",
"type": "mobile"
}
},
{
"desc": "Xiaomi POCO X3 Pro",
"ua": "Mozilla/5.0 (Linux; Android 11; M2102J20SI) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "M2102J20SI",
"type": "mobile"
}
},
{
"desc": "Xiaomi POCO X3 Pro",
"ua": "Mozilla/5.0 (Linux; Android 12; M2102J20SG) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "M2102J20SG",
"type": "mobile"
}
},
{
"desc": "Xiaomi POCO X3 NFC",
"ua": "Mozilla/5.0 (Linux; Android 12; M2007J20CG) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "M2007J20CG",
"type": "mobile"
}
},
{
"desc": "Xiaomi POCO M2 Pro",
"ua": "Mozilla/5.0 (Linux; arm_64; Android 11; POCO M2 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 YaBrowser/22.11.7.42.00 SA/3 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "POCO M2 Pro",
"type": "mobile"
}
},
{
"desc": "Xiaomi POCO M3",
"ua": "Mozilla/5.0 (Linux; Android 10; M2010J19CI) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "M2010J19CI",
"type": "mobile"
}
},
{
"desc": "Xiaomi POCOPHONE F1",
"ua": "Mozilla/5.0 (Linux; Android 10; POCOPHONE F1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "POCOPHONE F1",
"type": "mobile"
}
},
{
"desc": "Xiaomi Redmi 4A",
"ua": "Mozilla/5.0 (Linux; Android 6.0; Redmi 4A Build/MMB29M; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/56.0.2924.87 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "Redmi 4A",
"type": "mobile"
}
},
{
"desc": "Xiaomi Redmi 10C",
"ua": "Mozilla/5.0 (Linux; Android 12; 220333QAG) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "220333QAG",
"type": "mobile"
}
},
{
"desc": "Xiaomi Redmi K30 5G",
"ua": "Mozilla/5.0 (Linux; Android 10; Redmi K30 5G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.96 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "Redmi K30 5G",
"type": "mobile"
}
},
{
"desc": "Xiaomi Redmi K30 Pro",
"ua": "Mozilla/5.0 (Linux; Android 10; Redmi K30 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "Redmi K30 Pro",
"type": "mobile"
}
},
{
"desc": "Xiaomi Redmi Note 3",
"ua": "Mozilla/5.0 (Linux; Android 6.0.1; Redmi Note 3 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.116 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "Redmi Note 3",
"type": "mobile"
}
},
{
"desc": "Xiaomi Redmi Note 9 Pro Max",
"ua": "Mozilla/5.0 (Linux; Android 10; Redmi Note 9 Pro Max) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.99 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "Redmi Note 9 Pro Max",
"type": "mobile"
}
},
{
"desc": "XiaoMi Redmi Note 9S",
"ua": "Mozilla/5.0 (Linux; Android 10; Redmi Note 9S) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "Redmi Note 9S",
"type": "mobile"
}
},
{
"desc": "XiaoMi Redmi Note 10 5G",
"ua": "Mozilla/5.0 (Linux; Android 12; M2103K19C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.88 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "M2103K19C",
"type": "mobile"
}
},
{
"desc": "XiaoMi Redmi Note 10 Pro",
"ua": "Mozilla/5.0 (Linux; Android 13; M2101K6P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "M2101K6P",
"type": "mobile"
}
},
{
"desc": "XiaoMi Redmi Note 10 Pro",
"ua": "Mozilla/5.0 (Linux; Android 12; M2101K6G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "M2101K6G",
"type": "mobile"
}
},
{
"desc": "XiaoMi Redmi Note 8",
"ua": "Mozilla/5.0 (Linux; Android 10; Redmi Note 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "Redmi Note 8",
"type": "mobile"
}
},
{
"desc": "XiaoMi Redmi Note 12 Turbo",
"ua": "Mozilla/5.0 (Linux; Android 13; 23049RAD8C; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36 VivoBrowser/16.7.1.1",
"expect": {
"vendor": "Xiaomi",
"model": "23049RAD8C",
"type": "mobile"
}
},
{
"desc": "XiaoMi Redmi Pad",
"ua": "Mozilla/5.0 (Linux; U; Android 12; id-id; Redmi Pad Build/SP1A.210812.016) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/112.0.5615.136 Mobile Safari/537.36 XiaoMi/MiuiBrowser/14.1.1-gn",
"expect": {
"vendor": "Xiaomi",
"model": "Redmi Pad",
"type": "tablet"
}
},
{
"desc": "XiaoMi Redmi Pad",
"ua": "Mozilla/5.0 (Linux; Android 14; 22081283G Build/UP1A.231005.007; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.107 Safari/537.36 Flipboard/4.3.31/5486,4.3.31.5486",
"expect": {
"vendor": "Xiaomi",
"model": "22081283G",
"type": "tablet"
}
},
{
"desc": "XiaoMi Redmi Pad Pro",
"ua": "Mozilla/5.0 (Linux; Android 14; 2405CRPFDG Build/UKQ1.240116.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/127.0.6533.97 Safari/537.36 [FB_IAB/FB4A;FBAV/476.0.0.49.74;] FBNV/1",
"expect": {
"vendor": "Xiaomi",
"model": "2405CRPFDG",
"type": "tablet"
}
},
{
"desc": "XiaoMi Redmi Pad SE",
"ua": "Dalvik/2.1.0 (Linux; U; Android 14; 23073RPBFG Build/UKQ1.231003.002)",
"expect": {
"vendor": "Xiaomi",
"model": "23073RPBFG",
"type": "tablet"
}
},
{
"desc": "XiaoMi Redmi Pad SE 8.7",
"ua": "Mozilla/5.0 (Linux; Android 14; 24076RP19G Build/UP1A.231005.007; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.107 Mobile Safari/537.36 Line/14.18.1/IAB",
"expect": {
"vendor": "Xiaomi",
"model": "24076RP19G",
"type": "tablet"
}
},
{
"desc": "Xiaomi TV",
"ua": "Mozilla/5.0 (Linux; Android 10; MiTV-MOOQ0 Build/QTG3.200305.006; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/94.0.4606.61 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "MiTV-MOOQ0",
"type": "smarttv"
}
},
{
"desc": "Xiaomi Mi TV",
"ua": "Mozilla/5.0 (Linux; Android 9; MiTV4I Build/PI; en-in) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36 Puffin/7.8.3.40913AP",
"expect": {
"vendor": "Xiaomi",
"model": "MiTV4I",
"type": "smarttv"
}
},
{
"desc": "Xiaomi Mi Box",
"ua": "Mozilla/5.0 (Linux; Android 9; MIBOX3 Build/PI; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/119.0.6045.193 Mobile Safari/537.36",
"expect": {
"vendor": "Xiaomi",
"model": "MIBOX3",
"type": "smarttv"
}
}
]

View File

@@ -0,0 +1,11 @@
[
{
"desc": "ZTE Blade A6",
"ua": "Mozilla/5.0 (Linux; Android 7.1.1; ZTE BLADE A0620 Build/NMF26F; ru-ru) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 Mobile Safari/537.36 Puffin/9.2.0.50586AP",
"expect": {
"vendor": "ZTE",
"model": "BLADE A0620",
"type": "mobile"
}
}
]

View File

@@ -62,6 +62,15 @@
"version" : "4.5.4"
}
},
{
"desc" : "LibWeb",
"ua" : "Mozilla/5.0 (Linux; x86_64) Ladybird/1.0",
"expect" :
{
"name" : "LibWeb",
"version" : "undefined"
}
},
{
"desc" : "LibWeb",
"ua" : "Mozilla/4.0 (SerenityOS; x86) LibWeb+LibJS (Not KHTML, nor Gecko) LibWeb",

View File

@@ -9,6 +9,16 @@
"type" : "crawler"
}
},
{
"desc" : "AdIdxBot",
"ua" : "Mozilla/5.0 (compatible; adidxbot/2.0; +http://www.bing.com/bingbot.htm)",
"expect" :
{
"name" : "adidxbot",
"version" : "2.0",
"type" : "crawler"
}
},
{
"desc" : "AdsBot Mobile Web",
"ua" : "AdsBot-Google (+http://www.google.com/adsbot.html)",
@@ -79,6 +89,16 @@
"type" : "crawler"
}
},
{
"desc" : "Applebot-Extended",
"ua" : "Applebot-Extended",
"expect" :
{
"name" : "Applebot-Extended",
"version" : "undefined",
"type" : "crawler"
}
},
{
"desc" : "Amazonbot",
"ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot)",
@@ -89,6 +109,126 @@
"type" : "crawler"
}
},
{
"desc" : "Anthropic AI",
"ua" : "anthropic-ai",
"expect" :
{
"name" : "anthropic-ai",
"version" : "undefined",
"type" : "crawler"
}
},
{
"desc" : "Archive.org Bot",
"ua" : "ia_archiver/8.1 (Windows 2000 1.9; en-US;)",
"expect" :
{
"name" : "ia_archiver",
"version" : "8.1",
"type" : "crawler"
}
},
{
"desc" : "Archive.org Bot",
"ua" : "Mozilla/5.0 (compatible; archive.org_bot/3.3.0 +https://archive.org/details/archive.org_bot)",
"expect" :
{
"name" : "archive.org_bot",
"version" : "3.3.0",
"type" : "crawler"
}
},
{
"desc" : "Baiduspider",
"ua" : "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)",
"expect" :
{
"name" : "Baiduspider",
"version" : "2.0",
"type" : "crawler"
}
},
{
"desc" : "Baiduspider-ads",
"ua" : "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0; Baiduspider-ads) Gecko/17.0 Firefox/17.0",
"expect" :
{
"name" : "Baiduspider-ads",
"version" : "undefined",
"type" : "crawler"
}
},
{
"desc" : "Baiduspider-cpro",
"ua" : "Mozilla/5.0 (compatible; Baiduspider-cpro; +http://www.baidu.com/search/spider.html)",
"expect" :
{
"name" : "Baiduspider-cpro",
"version" : "undefined",
"type" : "crawler"
}
},
{
"desc" : "Baiduspider-favo",
"ua" : "Baiduspider-favo",
"expect" :
{
"name" : "Baiduspider-favo",
"version" : "undefined",
"type" : "crawler"
}
},
{
"desc" : "Baiduspider-image",
"ua" : "Baiduspider-image+(+http://www.baidu.com/search/spider.htm)",
"expect" :
{
"name" : "Baiduspider-image",
"version" : "undefined",
"type" : "crawler"
}
},
{
"desc" : "Baiduspider-news",
"ua" : "Baiduspider-news",
"expect" :
{
"name" : "Baiduspider-news",
"version" : "undefined",
"type" : "crawler"
}
},
{
"desc" : "Baiduspider-render",
"ua" : "Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)",
"expect" :
{
"name" : "Baiduspider-render",
"version" : "2.0",
"type" : "crawler"
}
},
{
"desc" : "Baiduspider-video",
"ua" : "Baiduspider-video",
"expect" :
{
"name" : "Baiduspider-video",
"version" : "undefined",
"type" : "crawler"
}
},
{
"desc" : "Bingbot",
"ua" : "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/",
"expect" :
{
"name" : "bingbot",
"version" : "2.0",
"type" : "crawler"
}
},
{
"desc" : "Bytespider",
"ua" : "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.1511.1269 Mobile Safari/537.36; Bytespider",
@@ -179,6 +319,16 @@
"type" : "crawler"
}
},
{
"desc" : "DuckDuckBot",
"ua" : "DuckDuckBot/1.1; ( http://duckduckgo.com/duckduckbot.html)",
"expect" :
{
"name" : "DuckDuckBot",
"version" : "1.1",
"type" : "crawler"
}
},
{
"desc" : "Exabot",
"ua" : "Mozilla/5.0 (compatible; Exabot/3.0; +http://www.exabot.com/go/robot)",
@@ -339,26 +489,6 @@
"type" : "crawler"
}
},
{
"desc" : "Archive.org Bot",
"ua" : "ia_archiver/8.1 (Windows 2000 1.9; en-US;)",
"expect" :
{
"name" : "ia_archiver",
"version" : "8.1",
"type" : "crawler"
}
},
{
"desc" : "Archive.org Bot",
"ua" : "Mozilla/5.0 (compatible; archive.org_bot/3.3.0 +https://archive.org/details/archive.org_bot)",
"expect" :
{
"name" : "archive.org_bot",
"version" : "3.3.0",
"type" : "crawler"
}
},
{
"desc" : "ImagesiftBot",
"ua" : "Mozilla/5.0 (compatible; ImagesiftBot; +imagesift.com)",
@@ -369,6 +499,26 @@
"type" : "crawler"
}
},
{
"desc" : "Linespider",
"ua" : "Mozilla/5.0 (compatible; Linespider/1.1; +https://lin.ee/4dwXkTH)",
"expect" :
{
"name" : "Linespider",
"version" : "1.1",
"type" : "crawler"
}
},
{
"desc" : "LinkedInBot",
"ua" : "LinkedInBot/1.0 (compatible; Mozilla/5.0; Apache-HttpClient +http://www.linkedin.com)",
"expect" :
{
"name" : "LinkedInBot",
"version" : "1.0",
"type" : "crawler"
}
},
{
"desc" : "magpie-crawler",
"ua" : "magpie-crawler/1.1 (robots-txt-checker; +http://www.brandwatch.net)",
@@ -462,7 +612,7 @@
},
{
"desc" : "PetalBot",
"ua" : "Mozilla/5.0 (Linux; Android 7.0;) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; PetalBot;+https://webmaster.petalsearch.com/site/petalbot) ",
"ua" : "Mozilla/5.0 (Linux; Android 7.0;) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; PetalBot;+https://webmaster.petalsearch.com/site/petalbot)",
"expect" :
{
"name" : "PetalBot",
@@ -480,6 +630,36 @@
"type" : "crawler"
}
},
{
"desc" : "SemrushBot for Backlink Audit tool",
"ua" : "Mozilla/5.0 (compatible; SemrushBot-BA; +http://www.semrush.com/bot.html)",
"expect" :
{
"name" : "SemrushBot-BA",
"version" : "undefined",
"type" : "crawler"
}
},
{
"desc" : "SemrushBot for On Page SEO Checker tool",
"ua" : "Mozilla/5.0 (compatible; SemrushBot-SI/0.97; +http://www.semrush.com/bot.html)",
"expect" :
{
"name" : "SemrushBot-SI",
"version" : "0.97",
"type" : "crawler"
}
},
{
"desc" : "SemrushBot for ContentShake AI tool",
"ua" : "Mozilla/5.0 (compatible; SemrushBot-OCOB/1; +https://www.semrush.com/bot/)",
"expect" :
{
"name" : "SemrushBot-OCOB",
"version" : "1",
"type" : "crawler"
}
},
{
"desc" : "SeznamBot",
"ua" : "Mozilla/5.0 (compatible; SeznamBot/4.0-RC1; +http://napoveda.seznam.cz/seznambot-intro/)",
@@ -490,6 +670,16 @@
"type" : "crawler"
}
},
{
"desc" : "Sogou",
"ua" : "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)",
"expect" :
{
"name" : "Sogou web spider",
"version" : "4.0",
"type" : "crawler"
}
},
{
"desc" : "Teoma",
"ua" : "Mozilla/2.0 (compatible; Ask Jeeves/Teoma; +http://sp.ask.com/docs/about/tech_crawling.html)",
@@ -540,6 +730,16 @@
"type" : "crawler"
}
},
{
"desc" : "Yahoo! Slurp",
"ua" : "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp) ",
"expect" :
{
"name" : "Yahoo! Slurp",
"version" : "undefined",
"type" : "crawler"
}
},
{
"desc" : "YandexBot",
"ua" : "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)",

View File

@@ -9,6 +9,16 @@
"type" : "fetcher"
}
},
{
"desc" : "Better Uptime Bot",
"ua" : "Better Uptime Bot Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
"expect" :
{
"name" : "Better Uptime Bot",
"version" : "undefined",
"type" : "fetcher"
}
},
{
"desc" : "BingPreview",
"ua" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) BingPreview/1.0b",
@@ -19,6 +29,16 @@
"type" : "fetcher"
}
},
{
"desc" : "Bluesky",
"ua" : "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Bluesky Cardyb/1.1; +mailto:support@bsky.app) Chrome/100.0.0.0 Safari/537.36",
"expect" :
{
"name" : "Bluesky",
"version" : "1.1",
"type" : "fetcher"
}
},
{
"desc" : "ChatGPT-User",
"ua" : "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot",
@@ -49,6 +69,16 @@
"type" : "fetcher"
}
},
{
"desc" : "Google Image Proxy",
"ua" : "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)",
"expect" :
{
"name" : "GoogleImageProxy",
"version" : "undefined",
"type" : "fetcher"
}
},
{
"desc" : "Google Read Aloud - Mobile agent",
"ua" : "Mozilla/5.0 (Linux; Android 7.0; SM-G930V Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36 (compatible; Google-Read-Aloud; +https://support.google.com/webmasters/answer/1061943)",
@@ -69,6 +99,16 @@
"type" : "fetcher"
}
},
{
"desc" : "Google Page Renderer",
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 Google-PageRenderer Google (+https://developers.google.com/+/web/snippet/) ",
"expect" :
{
"name" : "Google-PageRenderer",
"version" : "undefined",
"type" : "fetcher"
}
},
{
"desc" : "Google Publisher Center",
"ua" : "GoogleProducer; (+https://developers.google.com/search/docs/crawling-indexing/google-producer)",
@@ -99,6 +139,26 @@
"type" : "fetcher"
}
},
{
"desc" : "MicrosoftPreview",
"ua" : "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; MicrosoftPreview/2.0; +https://aka.ms/MicrosoftPreview) Chrome/W.X.Y.Z Safari/537.36",
"expect" :
{
"name" : "MicrosoftPreview",
"version" : "2.0",
"type" : "fetcher"
}
},
{
"desc" : "Pinterestbot",
"ua" : "Mozilla/5.0 (compatible; Pinterestbot/1.0; +http://www.pinterest.com/bot.html)",
"expect" :
{
"name" : "Pinterestbot",
"version" : "1.0",
"type" : "fetcher"
}
},
{
"desc" : "Rogerbot",
"ua" : "Mozilla/5.0 (compatible; rogerBot/1.0; UrlCrawler; http://www.seomoz.org/dp/rogerbot)",
@@ -109,6 +169,46 @@
"type" : "fetcher"
}
},
{
"desc" : "SiteAuditBot",
"ua" : "Mozilla/5.0 (compatible; SiteAuditBot/0.97; +http://www.semrush.com/bot.html)",
"expect" :
{
"name" : "SiteAuditBot",
"version" : "0.97",
"type" : "fetcher"
}
},
{
"desc" : "Snap URL Preview",
"ua" : "Snap URL Preview Service; bot; snapchat; https://developers.snap.com/robots ",
"expect" :
{
"name" : "Snap URL Preview",
"version" : "undefined",
"type" : "fetcher"
}
},
{
"desc" : "SkypeUriPreview",
"ua" : "Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5 skype-url-preview@microsoft.com",
"expect" :
{
"name" : "SkypeUriPreview",
"version" : "0.5",
"type" : "fetcher"
}
},
{
"desc" : "TelegramBot",
"ua" : "TelegramBot (like TwitterBot)",
"expect" :
{
"name" : "TelegramBot",
"version" : "undefined",
"type" : "fetcher"
}
},
{
"desc" : "UptimeRobot",
"ua" : "Mozilla/5.0 (compatible; UptimeRobot/2.0; http://www.uptimerobot.com/)",
@@ -128,5 +228,15 @@
"version" : "undefined",
"type" : "fetcher"
}
},
{
"desc" : "WhatsApp",
"ua" : "WhatsApp/2.23.20.0",
"expect" :
{
"name" : "WhatsApp",
"version" : "2.23.20.0",
"type" : "fetcher"
}
}
]

View File

@@ -0,0 +1,32 @@
[
{
"desc" : "Slack on mac",
"ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Slack/4.39.90 Chrome/127.0.6533.72 Electron/13.1.9 Safari/537.36",
"expect" :
{
"name" : "Slack",
"version" : "4.39.90",
"type" : "inapp"
}
},
{
"desc" : "Yahoo! Japan on Android",
"ua" : "Mozilla/5.0 (Linux; Android 13; SH-M20 Build/TKQ1.220915.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/132.0.6834.163 Mobile Safari/537.36 YJApp-ANDROID jp.co.yahoo.android.yjtop/3.187.0",
"expect" :
{
"name" : "Yahoo! Japan",
"version" : "3.187.0",
"type" : "inapp"
}
},
{
"desc" : "Yahoo! Japan on iOS",
"ua" : "Mozilla/5.0 (iPad; CPU OS 18_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 YJApp-IOS jp.co.yahoo.ipn.appli/4.131.0",
"expect" :
{
"name" : "Yahoo! Japan",
"version" : "4.131.0",
"type" : "inapp"
}
}
]

View File

@@ -0,0 +1,192 @@
[
{
"desc" : "Apache-HttpClient",
"ua" : "Apache-HttpClient/4.5.14 (Java/17.0.12)",
"expect" :
{
"name" : "Apache-HttpClient",
"version" : "4.5.14",
"type" : "library"
}
},
{
"desc" : "Axios",
"ua" : "axios/1.7.2",
"expect" :
{
"name" : "axios",
"version" : "1.7.2",
"type" : "library"
}
},
{
"desc" : "go-http-client",
"ua" : "go-http-client/1.1",
"expect" :
{
"name" : "go-http-client",
"version" : "1.1",
"type" : "library"
}
},
{
"desc" : "got",
"ua" : "got/9.6.0 (https://github.com/sindresorhus/got)",
"expect" :
{
"name" : "got",
"version" : "9.6.0",
"type" : "library"
}
},
{
"desc" : "GuzzleHttp",
"ua" : "GuzzleHttp/6.5.5 curl/7.70.0 PHP/7.4.22",
"expect" :
{
"name" : "GuzzleHttp",
"version" : "6.5.5",
"type" : "library"
}
},
{
"desc" : "Java",
"ua" : "Java/1.6.0_14",
"expect" :
{
"name" : "Java",
"version" : "1.6.0_14",
"type" : "library"
}
},
{
"desc" : "Java HTTPClient",
"ua" : "Java-http-client/11.0.6",
"expect" :
{
"name" : "Java-http-client",
"version" : "11.0.6",
"type" : "library"
}
},
{
"desc" : "jsdom",
"ua" : "Mozilla/5.0 (unknown OS) AppleWebKit/537.36 (KHTML, like Gecko) jsdom/11.12.0",
"expect" :
{
"name" : "jsdom",
"version" : "11.12.0",
"type" : "library"
}
},
{
"desc" : "libwww-perl",
"ua" : "libwww-perl/6.05",
"expect" :
{
"name" : "libwww-perl",
"version" : "6.05",
"type" : "library"
}
},
{
"desc" : "lua-resty-http",
"ua" : "lua-resty-http/0.07 (Lua)",
"expect" :
{
"name" : "lua-resty-http",
"version" : "0.07",
"type" : "library"
}
},
{
"desc" : "Needle",
"ua" : "Needle/3.2.0 (Node.js v18.14.2; win32 x64)",
"expect" :
{
"name" : "Needle",
"version" : "3.2.0",
"type" : "library"
}
},
{
"desc" : "OkHttp",
"ua" : "okhttp/3.2.0",
"expect" :
{
"name" : "okhttp",
"version" : "3.2.0",
"type" : "library"
}
},
{
"desc" : "node-fetch",
"ua" : "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)",
"expect" :
{
"name" : "node-fetch",
"version" : "1.0",
"type" : "library"
}
},
{
"desc" : "PHP-SOAP",
"ua" : "PHP-SOAP/7.4.33",
"expect" :
{
"name" : "PHP-SOAP",
"version" : "7.4.33",
"type" : "library"
}
},
{
"desc" : "PostmanRuntime",
"ua" : "PostmanRuntime/7.26.5",
"expect" :
{
"name" : "PostmanRuntime",
"version" : "7.26.5",
"type" : "library"
}
},
{
"desc" : "Python urllib",
"ua" : "Python-urllib/2.6",
"expect" :
{
"name" : "Python-urllib",
"version" : "2.6",
"type" : "library"
}
},
{
"desc" : "Python requests",
"ua" : "python-requests/2.32",
"expect" :
{
"name" : "python-requests",
"version" : "2.32",
"type" : "library"
}
},
{
"desc" : "Scrapy",
"ua" : "Scrapy/1.5.0 (+https://scrapy.org)",
"expect" :
{
"name" : "Scrapy",
"version" : "1.5.0",
"type" : "library"
}
},
{
"desc" : "superagent",
"ua" : "node-superagent/5.0.2",
"expect" :
{
"name" : "node-superagent",
"version" : "5.0.2",
"type" : "library"
}
}
]

View File

@@ -24,9 +24,9 @@
"ua" : "AppleTV/3.0.2 (Macintosh; Intel Mac OS X 10.4.7) AppleWebKit/528.18",
"expect" :
{
"name" : "WebKit",
"version" : "528.18",
"major" : "528"
"name" : "AppleTV",
"version" : "3.0.2",
"major" : "3"
}
},
{
@@ -109,16 +109,6 @@
"major" : "1"
}
},
{
"desc" : "Dalvik",
"ua" : "Dalvik/1.2.0 (Linux; U; Android 2.2.1; GT-S5830L Build/FROYO)",
"expect" :
{
"name" : "Dalvik",
"version" : "1.2.0",
"major" : "1"
}
},
{
"desc" : "NexPlayer",
"ua" : "E97510d/ Player/NexPlayer 4.0",
@@ -189,16 +179,6 @@
"major" : "3"
}
},
{
"desc" : "Java",
"ua" : "Java/1.4.1_04",
"expect" :
{
"name" : "Java",
"version" : "1.4.1_04",
"major" : "1"
}
},
{
"desc" : "LG Player",
"ua" : "LG Player 1.0; Android",
@@ -509,16 +489,6 @@
"major" : "3"
}
},
{
"desc" : "Wget",
"ua" : "Wget/1.12 (darwin10.7.0)",
"expect" :
{
"name" : "Wget",
"version" : "1.12",
"major" : "1"
}
},
{
"desc" : "Winamp",
"ua" : "Winamp 2.81",

View File

@@ -0,0 +1,62 @@
[
{
"desc" : "BMW",
"ua" : "Mozilla/5.0 (Linux; Android 9; AFTLBT962E2) AppleWebKit/537.36 (KHTML, like Gecko) Silk/118.3.1 like Chrome/118.0.5993.155 Safari/537.36",
"expect" :
{
"vendor" : "BMW",
"model" : "undefined",
"type" : "undefined"
}
},
{
"desc" : "BYD",
"ua" : "Mozilla/5.0 (Linux; Android 10; DiLink3.0 For BYD AUTO Build/QKQ1.200816.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.186 Safari/537.36",
"expect" :
{
"vendor" : "BYD",
"model" : "undefined",
"type" : "undefined"
}
},
{
"desc" : "Jeep",
"ua" : "Mozilla/5.0 (Linux; Android 9; AFTLFT962X3) AppleWebKit/537.36 (KHTML, like Gecko) Silk/124.5.2 like Chrome/124.0.6367.248 Safari/537.36",
"expect" :
{
"vendor" : "Jeep",
"model" : "Wagooner",
"type" : "undefined"
}
},
{
"desc" : "Rivian",
"ua" : "Dalvik/2.1.0 (Linux; U; Android 10; Rivian R1T Build/QQ3A.200605.002)",
"expect" :
{
"vendor" : "Rivian",
"model" : "R1T",
"type" : "undefined"
}
},
{
"desc" : "Tesla",
"ua" : "Mozilla/5.0 (X11; GNU/Linux) AppleWebKit/537.36 (KHTML, like Gecko) Chromium/79.0.3945.130 Chrome/79.0.3945.130 Safari/537.36 Tesla/2020.36.16-3e9e4e8dd287",
"expect" :
{
"vendor" : "Tesla",
"model" : "undefined",
"type" : "embedded"
}
},
{
"desc" : "Volvo",
"ua" : "Mozilla/5.0 (VCC; 1.0; like Gecko) NetFront/4.2",
"expect" :
{
"vendor" : "Volvo",
"model" : "undefined",
"type" : "undefined"
}
}
]

11
test/data/ua/os/aix.json Normal file
View File

@@ -0,0 +1,11 @@
[
{
"desc" : "AIX",
"ua" : "Mozilla/5.0 (X11; U; AIX 000138384C00; en-US; rv:1.0.1) Gecko/20030213 Netscape/7.0",
"expect" :
{
"name" : "AIX",
"version" : "undefined"
}
}
]

View File

@@ -0,0 +1,11 @@
[
{
"desc" : "AmigaOS",
"ua" : "Mozilla/4.0 (compatible; AWEB 3.4 SE; AmigaOS)",
"expect" :
{
"name" : "AmigaOS",
"version" : "undefined"
}
}
]

View File

@@ -0,0 +1,11 @@
[
{
"desc" : "Android-x86",
"ua" : "Mozilla/5.0 (Linux; Android 7.1.2; Generic Android-x86) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 OPR/61.2.3076.56749",
"expect" :
{
"name" : "Android-x86",
"version" : "7.1.2"
}
}
]

View File

@@ -0,0 +1,29 @@
[
{
"desc" : "Android",
"ua" : "Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; VM670 Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko)",
"expect" :
{
"name" : "Android",
"version" : "2.2.2"
}
},
{
"desc" : "MIUI",
"ua" : "Dalvik/2.1.0 (Linux; U; Android 9; Mi MIX 3 5G MIUI/V10.3.2.0.PEMEUVF)",
"expect" :
{
"name" : "Android",
"version" : "9"
}
},
{
"desc" : "KTB-Nexus 5",
"ua" : "APP-My App/1.0 (Linux; Android 4.2.1; Nexus 5 Build/JOP40D)",
"expect" :
{
"name" : "Android",
"version" : "4.2.1"
}
}
]

11
test/data/ua/os/arch.json Normal file
View File

@@ -0,0 +1,11 @@
[
{
"desc" : "Arch",
"ua" : "Uzbl (Webkit 1.1.10) (Arch Linux)",
"expect" :
{
"name" : "Arch",
"version" : "undefined"
}
}
]

11
test/data/ua/os/bada.json Normal file
View File

@@ -0,0 +1,11 @@
[
{
"desc" : "Bada",
"ua" : "Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S5253/S5253DDKC1; U; Bada/1.0; en-us) AppleWebKit/533.1 (KHTML, like Gecko) Dolfin/2.0 Mobile WQVGA SMM-MMS/1.2.0 OPN-B",
"expect" :
{
"name" : "Bada",
"version" : "1.0"
}
}
]

11
test/data/ua/os/beos.json Normal file
View File

@@ -0,0 +1,11 @@
[
{
"desc" : "BeOS",
"ua" : "Mozilla/5.0 (BeOS; U; BeOS BePC; en-US; rv:1.8.1.8pre) Gecko/20070926 SeaMonkey/1.1.5pre",
"expect" :
{
"name" : "BeOS",
"version" : "undefined"
}
}
]

View File

@@ -0,0 +1,20 @@
[
{
"desc" : "BlackBerry",
"ua" : "BlackBerry9300/5.0.0.912 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/378",
"expect" :
{
"name" : "BlackBerry",
"version" : "5.0.0.912"
}
},
{
"desc" : "BlackBerry 10",
"ua" : "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.3+ (KHTML, like Gecko) Version/10.0.9.386 Mobile Safari/537.3+",
"expect" :
{
"name" : "BlackBerry",
"version" : "10"
}
}
]

View File

@@ -0,0 +1,11 @@
[
{
"desc" : "CentOS",
"ua" : "Konqueror/15.13 (CentOS Linux 7.4; cs-CZ;)",
"expect" :
{
"name" : "CentOS",
"version" : "7.4"
}
}
]

View File

@@ -0,0 +1,20 @@
[
{
"desc" : "Chrome OS",
"ua" : "Mozilla/5.0 (X11; CrOS x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.0.0 Safari/537.36",
"expect" :
{
"name" : "Chrome OS",
"version" : "undefined"
}
},
{
"desc" : "Chromium OS",
"ua" : "Mozilla/5.0 (X11; CrOS x86_64 10575.58.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
"expect" :
{
"name" : "Chrome OS",
"version" : "10575.58.0"
}
}
]

Some files were not shown because too many files have changed in this diff Show More