Compare commits

...

39 Commits

Author SHA1 Message Date
Faisal Salman
638e237c8d [device-utils] Add new method: getMarketingName() 2024-12-02 16:15:35 +07:00
Faisal Salman
d177b83965 NEW SUBMODULE: device-utils 2024-12-02 10:45:39 +07:00
Faisal Salman
d4986af7c0 Improve device detection for Xiaomi TVs 2024-12-02 10:42:09 +07:00
Faisal Salman
fbadfd7ace Improve device detection for wearables 2024-12-01 21:51:10 +07:00
Faisal Salman
259cd1422b [test] Move all client hints-related tests into a separate file 2024-11-30 19:52:41 +07:00
Faisal Salman
aed89f0b41 Fix #660 - Infer device vendor & type from sec-ch-ua-model 2024-11-30 19:26:41 +07:00
Faisal Salman
48c221b50b Update npm version of @playwright/test to fix failed test in GitHub Actions 2024-11-30 16:17:01 +07:00
Faisal Salman
dbd24a579f Browser naming adjustments for Client Hints:
- `Google Chrome` => `Chrome`
- `Microsoft Edge` => `Edge`
- `Android WebView` => `Chrome WebView`
- `HeadlessChrome` => `Chrome Headless`
2024-11-30 13:16:53 +07:00
Faisal Salman
fc851b40c5 Improve device detection: recognize MIUI as Xiaomi 2024-11-30 08:35:19 +07:00
Faisal Salman
b2fc76fe99 [test] remove the client hints check in firefox & safari 2024-11-30 07:31:54 +07:00
Faisal Salman
e013038643 Improve cpu detection for x86 2024-11-29 20:44:37 +07:00
Faisal Salman
1a057b4be2 Reorganize test files & directories 2024-11-28 23:24:19 +07:00
Faisal Salman
aa56b2f4f3 Update engine.version to be the same as browser.version for Chromium-based browser when UA-CH is available 2024-11-28 12:56:04 +07:00
Faisal Salman
20e195de8b Move os test spec into separate files 2024-11-26 20:45:23 +07:00
Faisal Salman
c37f3863c0 [sub:extensions] Rearrange mediaplayer regexes 2024-11-26 20:13:07 +07:00
Faisal Salman
60cc84d58c [sub:extensions] Add new bots: Apache-HttpClient, go-http-client, got, GuzzleHttp, Java-http-client, libwww-perl, lua-resty-http, Needle, OkHttp, node-fetch, PHP-SOAP, PostmanRuntime, superagent 2024-11-24 12:27:08 +07:00
Faisal Salman
f5ee90fcf8 Reorganize test files 2024-11-22 22:29:03 +07:00
Faisal Salman
bcf249da06 Fix #767 #763 - Improve type definition for headers 2024-11-22 22:08:43 +07:00
Faisal Salman
b4bc86ac6d Improve device detection: Lenovo 2024-11-21 23:33:52 +07:00
Faisal Salman
a1d81c928c Move device test spec into separate files 2024-11-21 16:06:27 +07:00
Faisal Salman
94d3d84cd5 Add new device vendor: HMD 2024-11-20 18:00:18 +07:00
Faisal Salman
c72198d470 Improve device detection: Nokia tablets 2024-11-20 17:54:41 +07:00
Faisal Salman
c8ece08b1b Improve device detection: Google Pixel Watch 2024-11-20 17:19:46 +07:00
Faisal Salman
4ddbeeaa06 Insert a link to contributing guidelines in PR template 2024-11-20 17:03:06 +07:00
Faisal Salman
536031d789 Improve device detection: Google Pixel Tablet 2024-11-20 17:02:30 +07:00
Faisal Salman
4c57a5a567 Improve device detection for tablets: OnePlus, Xiaomi 2024-11-20 17:02:30 +07:00
Harald Reingruber
29b76368fd Add missing 1.0.39 changes to CHANGELOG.md (#766) 2024-11-20 15:11:31 +07:00
Faisal Salman
41de949809 Improve device detection for tablets: Honor, Huawei, Infinix 2024-11-19 23:43:21 +07:00
Faisal Salman
5742ba68ae Update README.md (3) 2024-11-19 10:18:08 +07:00
Faisal Salman
8174330d27 Update README.md (2) 2024-11-18 23:38:41 +07:00
Faisal Salman
d1f691fbc7 Update README.md 2024-11-18 16:06:23 +07:00
Faisal Salman
38baf844fc Update version to 2.0.0 2024-11-18 07:55:18 +07:00
Faisal Salman
70b3003344 [submodule:helpers] Add new method isAIBot(): detect AI bots 2024-11-16 22:14:14 +07:00
Faisal Salman
5b375b90d5 [submodule:helpers] Enable directly pass user-agent as an input to isAppleSilicon() / isBot() / isChromeFamily() 2024-11-16 21:23:39 +07:00
Faisal Salman
b1c7dfcc3a [submodule:helpers] Revert providing extra param in isAppleSilicon() and just check for window instead 2024-11-16 19:22:43 +07:00
Faisal Salman
2b125c8de4 [submodule:extensions] Add new bots: AI2Bot, aiHitBot, anthropic-ai, cohere-ai, Diffbot, ImagesiftBot, magpie-crawler, Omgilibot, Screaming Frog SEO Spider, Seznambot, Teoma, Timpibot, VelenPublicWebCrawler, Vercelbot, Webzio-Extended, YouBot 2024-11-16 18:40:02 +07:00
Faisal Salman
2181559b01 [submodule:extensions] Add new email: Airmail, BlueMail, eMClient, NaverMailApp, Sparrow, Yahoo 2024-11-16 15:28:35 +07:00
Faisal Salman
14caf6d204 [submodule:extensions] Add new library: java, python-urllib, python-requests 2024-11-15 17:25:43 +07:00
Faisal Salman
4a12562946 [submodule:extensions] Add new CLI: ELinks, HTTPie 2024-11-14 22:51:41 +07:00
179 changed files with 10869 additions and 7978 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

@@ -19,5 +19,5 @@ jobs:
- name: Run the test
run: |
npm ci
npx playwright install
npx playwright install --with-deps
npm test

View File

@@ -55,7 +55,8 @@
- **`'ua-parser-js/helpers'`**: Provides utility methods to extend detection functionality:
- `getDeviceVendor()`: Guesses the device vendor based on its model name
- `isAppleSilicon()`: Detects Apple Silicon device properties
- `isBot()`: Checks if the browser is a bot
- `isAIBot()`: Checks if the user-agent is an AI bot
- `isBot()`: Checks if the user-agent is a bot
- `isChromeFamily()`: Checks if the browser is Chrome-based (uses Blink engine) — e.g., New Opera, New Edge, Vivaldi, Brave, Arc, etc.
- `isElectron()`: Detects if current window is running within Electron
- `isFromEU()`: Detects if current browser's timezone is from an EU country
@@ -64,6 +65,17 @@
---
## Version 2.0.0
- `ua-parser-js/extensions` submodule:
- Add new CLI: ELinks, HTTPie
- Add new crawler: AI2Bot, aiHitBot, anthropic-ai, Diffbot, ImagesiftBot, magpie-crawler, Omgilibot, Screaming Frog SEO Spider, Seznambot, Teoma, Timpibot, VelenPublicWebCrawler, Webzio-Extended, YouBot
- Add new email: Airmail, BlueMail, eMClient, NaverMailApp, Sparrow, Yahoo
- Add new fetcher: cohere-ai, Vercelbot
- Add new library: java, python-urllib, python-requests
- `ua-parser-js/helpers` submodule:
- Add new method `isAIBot()`: Checks if the user-agent is an AI bot
## Version 2.0.0-rc.3
- Add support for Headers object
@@ -154,6 +166,14 @@
---
## 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
@@ -239,4 +259,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

@@ -1,7 +1,8 @@
<p align="center">
<a href="https://uaparser.dev"><img src="https://raw.githubusercontent.com/faisalman/ua-parser-js/gh-pages/images/uap-header.png"></a>
</p>
[![https://uaparser.dev](https://raw.githubusercontent.com/faisalman/ua-parser-js/gh-pages/images/uap-header.png)](https://uaparser.dev)
[![https://uaparser.dev](https://github.com/user-attachments/assets/9f30f3d4-5cfe-441c-8f86-ead7c955f940)](https://uaparser.dev)
[![https://uaparser.dev](https://github.com/user-attachments/assets/50da50fc-7c8a-46e3-a2bc-6a8249914372)](https://uaparser.dev)
[![https://uaparser.dev](https://github.com/user-attachments/assets/9f2aaff0-a9b4-4ac9-bdf3-eea8081a2582)](https://uaparser.dev)
<p align="center">
<a href="https://www.npmjs.com/package/ua-parser-js"><img src="https://img.shields.io/npm/dw/ua-parser-js?color=red&logo=npm&label=NPM%20DOWNLOADS&style=for-the-badge"></a>
<a href="https://www.jsdelivr.com/package/npm/ua-parser-js"><img src="https://img.shields.io/jsdelivr/gh/hw/faisalman/ua-parser-js?logo=jsdelivr&style=for-the-badge"></a>
@@ -23,6 +24,7 @@ user's Browser, Engine, OS, CPU, and Device type/model. Runs either in browser
* Live demo: https://uaparser.dev
# Documentation
* `version 1.x` : https://github.com/faisalman/ua-parser-js/tree/1.0.x#documentation
@@ -99,7 +101,15 @@ see what's new & breaking.
<td></td>
</tr>
<tr>
<td>Extras (Apps, Libs, Emails, Media Players, etc)</td>
<td>AI Bot detection</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Extras (Apps, Libs, Emails, Media Players, etc) detection</td>
<td></td>
<td></td>
<td></td>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2585
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{
"title": "UAParser.js",
"name": "ua-parser-js",
"version": "2.0.0-rc.3",
"version": "2.0.0",
"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": [
@@ -178,9 +178,15 @@
"import": "./src/main/ua-parser.mjs",
"types": "./src/main/ua-parser.d.ts"
},
"./device-utils": {
"require": "./src/device-utils/ua-parser-device-utils.js",
"import": "./src/device-utils/ua-parser-device-utils.mjs",
"types": "./src/device-utils/ua-parser-device-utils.d.ts"
},
"./enums": {
"require": "./src/enums/ua-parser-enums.js",
"import": "./src/enums/ua-parser-enums.mjs"
"import": "./src/enums/ua-parser-enums.mjs",
"types": "./src/enums/ua-parser-enums.d.ts"
},
"./extensions": {
"require": "./src/extensions/ua-parser-extensions.js",
@@ -201,14 +207,14 @@
"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": "playwright test test/e2e --browser all"
},
"dependencies": {
"detect-europe-js": "^0.1.2",
@@ -219,9 +225,12 @@
"@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",
"@types/node": "^22.9.1",
"@types/node-fetch": "^2.6.12",
"jshint": "~2.13.6",
"mocha": "~8.2.0",
"node-fetch": "^2.7.0",
"requirejs": "2.3.2",
"safe-regex": "^2.1.1",
"tsd": "^0.29.0",

View File

@@ -36,7 +36,14 @@ const modules = [
[/esversion\: 3/ig, 'esversion: 6'],
[/\/[\/\s]+export[\s\S]+/ig,'export {UAParser};']
]
},{
},
{
src : 'src/device-utils/ua-parser-device-utils.js',
dest :'src/device-utils/ua-parser-device-utils.mjs',
title : 'ua-parser-js/device-utils',
replacements : []
},
{
src : 'src/enums/ua-parser-enums.js',
dest :'src/enums/ua-parser-enums.mjs',
title : 'ua-parser-js/enums',

View File

@@ -0,0 +1,5 @@
[
{
"SM-S928N" : "Galaxy S24 Ultra"
}
]

View File

@@ -0,0 +1,5 @@
[
{
"M2101K9C" : "Mi 11 Lite 5G"
}
]

View File

@@ -0,0 +1,21 @@
// Type definitions for Device Utils submodule of UAParser.js v2.0.0
// Project: https://github.com/faisalman/ua-parser-js
// Definitions by: Faisal Salman <https://github.com/faisalman>
import type { IResult, IDevice } from "../main/ua-parser";
declare function getMarketingName(model: string, vendor: string): boolean;
declare function isMobile(val: IResult | IDevice | string): boolean;
declare function isSmartTV(val: IResult | IDevice | string): boolean;
declare function isTablet(val: IResult | IDevice | string): boolean;
declare function isWearable(val: IResult | IDevice | string): boolean;
declare function isXR(val: IResult | IDevice | string): boolean;
export {
getMarketingName,
isMobile,
isSmartTV,
isTablet,
isWearable,
isXR
};

View File

@@ -0,0 +1,51 @@
//////////////////////////////////////////////////
/* Device Utils Submodule for UAParser.js v2.0.0
https://github.com/faisalman/ua-parser-js
Author: Faisal Salman <f@faisalman.com>
AGPLv3 License */
/////////////////////////////////////////////////
/*jshint esversion: 6 */
const fs = require('fs');
const path = require('path');
const UAParser = require('../main/ua-parser');
const { Device: DeviceType } = require('../enums/ua-parser-enums');
const isDeviceType = (val, expectedType) => {
const uap = typeof val == 'string' ? UAParser(val) : val; // string
let actualType;
if (uap.hasOwnProperty('device')) { // IResult
actualType = uap.device?.type;
} else if (uap.hasOwnProperty('type')) { // IDevice
actualType = uap.type;
}
return actualType == expectedType;
};
const getMarketingName = (model, vendor) => {
const normalizedVendor = vendor.toLowerCase();
const filePath = path.resolve(__dirname, `./data/marketing-name/${normalizedVendor}.json`);
if (fs.existsSync(filePath)) {
const map = require(`./data/marketing-name/${normalizedVendor}.json`)[0];
if (model in map) {
return map[model];
}
}
return model;
};
const isMobile = val => isDeviceType(val, DeviceType.MOBILE);
const isSmartTV = val => isDeviceType(val, DeviceType.SMARTTV);
const isTablet = val => isDeviceType(val, DeviceType.TABLET);
const isWearable = val => isDeviceType(val, DeviceType.WEARABLE);
const isXR = val => isDeviceType(val, DeviceType.XR);
module.exports = {
getMarketingName,
isMobile,
isSmartTV,
isTablet,
isWearable,
isXR
};

View File

@@ -1,5 +1,5 @@
///////////////////////////////////////////////
/* Enums for UAParser.js v2.0.0-rc.3
/* Enums for UAParser.js v2.0.0
https://github.com/faisalman/ua-parser-js
Author: Faisal Salman <f@faisalman.com>
AGPLv3 License */
@@ -213,6 +213,7 @@ const Vendor = Object.freeze({
GEEKSPHONE: 'GeeksPhone',
GENERIC: 'Generic',
GOOGLE: 'Google',
HMD: 'HMD',
HP: 'HP',
HTC: 'HTC',
HUAWEI: 'Huawei',
@@ -322,6 +323,7 @@ const OS = Object.freeze({
IOS: 'iOS',
JOLI: 'Joli',
KAIOS: 'KaiOS',
KUBUNTU: 'Kubuntu',
LINPUS: 'Linpus',
LINSPIRE: 'Linspire',
LINUX: 'Linux',

View File

@@ -3,7 +3,7 @@
// Source: /src/enums/ua-parser-enums.js
///////////////////////////////////////////////
/* Enums for UAParser.js v2.0.0-rc.3
/* Enums for UAParser.js v2.0.0
https://github.com/faisalman/ua-parser-js
Author: Faisal Salman <f@faisalman.com>
AGPLv3 License */

View File

@@ -1,4 +1,4 @@
// Type definitions for Helpers submodule of UAParser.js v2.0.0-rc.3
// Type definitions for Helpers submodule of UAParser.js v2.0.0
// Project: https://github.com/faisalman/ua-parser-js
// Definitions by: Faisal Salman <https://github.com/faisalman>

View File

@@ -1,5 +1,5 @@
///////////////////////////////////////////////
/* Extensions for UAParser.js v2.0.0-rc.3
/* Extensions for UAParser.js v2.0.0
https://github.com/faisalman/ua-parser-js
Author: Faisal Salman <f@faisalman.com>
AGPLv3 License */
@@ -28,8 +28,8 @@ const LIBRARY = 'library';
const CLIs = Object.freeze({
browser : [
// wget / curl / lynx
[/(wget|curl|lynx)[\/ ]([\w\.]+)/i], [NAME, VERSION, [TYPE, CLI]]
// wget / curl / Lynx / ELinks / HTTPie
[/(wget|curl|lynx|elinks|httpie)[\/ ]\(?([\w\.-]+)/i], [NAME, VERSION, [TYPE, CLI]]
]
});
@@ -42,7 +42,6 @@ const Crawlers = Object.freeze({
[
// AhrefsBot - https://ahrefs.com/robot
// Amazonbot - https://developer.amazon.com/amazonbot
// Applebot - http://apple.com/go/applebot
// Bingbot - http://www.bing.com/bingbot.htm
// CCBot - https://commoncrawl.org/faq
// Dotbot - https://moz.com/help/moz-procedures/crawlers/dotbot
@@ -54,13 +53,17 @@ const Crawlers = Object.freeze({
// OpenAI's SearchGPT - https://platform.openai.com/docs/bots
// PerplexityBot - https://perplexity.ai/perplexitybot
// SemrushBot - http://www.semrush.com/bot.html
/((?:ahrefs|amazon|apple|bing|cc|dot|duckduck|exa|facebook|gpt|mj12|mojeek|oai-search|perplexity|semrush)bot)\/([\w\.]+)/i,
// 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,
// Applebot - http://apple.com/go/applebot
/(applebot(?:-extended)?)\/([\w\.]+)/i,
// Baiduspider https://help.baidu.com/question?prod_id=99&class=0&id=3001
/(baiduspider)[-imagevdonsfcpr]{0,6}\/([\w\.]+)/i,
// ClaudeBot (Anthropic)
/(claude(?:bot|-web))\/([\w\.]+)/i,
/(claude(?:bot|-web)|anthropic-ai)\/?([\w\.]*)/i,
// Coc Coc Bot - https://help.coccoc.com/en/search-engine
/(coccocbot-(?:image|web))\/([\w\.]+)/i,
@@ -87,8 +90,8 @@ const Crawlers = Object.freeze({
// Yeti (Naver)
/(yeti)\/([\w\.]+)/i,
// YisouSpider
/(yisouspider)\/?([\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
],
[NAME, VERSION, [TYPE, CRAWLER]],
@@ -97,13 +100,15 @@ const Crawlers = Object.freeze({
// Google Bots
/((?:adsbot|apis|mediapartners)-google(?:-mobile)?|google-?(?:other|cloudvertexbot|extended|safety))/i,
// AI2Bot - https://allenai.org/crawler
// Bytespider
// DataForSeoBot - https://dataforseo.com/dataforseo-bot
// Huawei AspiegelBot / PetalBot https://aspiegel.com/petalbot
// ImagesiftBot - https://imagesift.com/about
// Qihoo 360Spider
// TurnitinBot - https://www.turnitin.com/robot/crawlerinfo.html
// Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
/(360spider-?(?:image|video)?|bytespider|(?:aspiegel|dataforseo|petal|turnitin)bot|(?=yahoo! )slurp)/i
/\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|(?=yahoo! )slurp)/i
],
[NAME, [TYPE, CRAWLER]]
]
@@ -156,7 +161,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,
@@ -195,8 +200,10 @@ const ExtraDevices = Object.freeze({
const Emails = Object.freeze({
browser : [
[
// Evolution / Kontact/KMail / [Microsoft/Mac] Outlook / Thunderbird
[/(evolution|kmail2?|kontact|(?:microsoft |mac)outlook|thunderbird)[\s\/]([\w\.]+)/i], [NAME, VERSION, [TYPE, EMAIL]]
/(airmail|bluemail|emclient|evolution|foxmail|kmail2?|kontact|(?:microsoft |mac)?outlook(?:-express)?|navermailapp|(?!chrom.+)sparrow|thunderbird|yahoo)(?:m.+ail; |[\/ ])([\w\.]+)/i
], [NAME, VERSION, [TYPE, EMAIL]]
]
});
@@ -234,8 +241,8 @@ const Fetchers = Object.freeze({
],
[NAME, VERSION, [TYPE, FETCHER]],
// Google Bots / Snapchat
[/(feedfetcher-google|google(?:-read-aloud|producer)|(?=bot; )snapchat)/i],
// Google Bots / Cohere / Snapchat / Vercelbot
[/(cohere-ai|vercelbot|feedfetcher-google|google(?:-read-aloud|producer)|(?=bot; )snapchat)/i],
[NAME, [TYPE, FETCHER]],
]
});
@@ -260,106 +267,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
/(java|python-urllib|python-requests|wget|libcurl)\/([\w\.-_]+)/i,
// Java/urllib/requests/wget/cURL
/(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]]
]
});
@@ -370,8 +319,11 @@ const MediaPlayers = Object.freeze({
const Libraries = Object.freeze({
browser : [
// Axios/jsdom/Scrapy
[/\b(axios|jsdom|scrapy)\/([\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]]
]
});

View File

@@ -3,7 +3,7 @@
// Source: /src/extensions/ua-parser-extensions.js
///////////////////////////////////////////////
/* Extensions for UAParser.js v2.0.0-rc.3
/* Extensions for UAParser.js v2.0.0
https://github.com/faisalman/ua-parser-js
Author: Faisal Salman <f@faisalman.com>
AGPLv3 License */
@@ -32,8 +32,8 @@ const LIBRARY = 'library';
const CLIs = Object.freeze({
browser : [
// wget / curl / lynx
[/(wget|curl|lynx)[\/ ]([\w\.]+)/i], [NAME, VERSION, [TYPE, CLI]]
// wget / curl / Lynx / ELinks / HTTPie
[/(wget|curl|lynx|elinks|httpie)[\/ ]\(?([\w\.-]+)/i], [NAME, VERSION, [TYPE, CLI]]
]
});
@@ -46,7 +46,6 @@ const Crawlers = Object.freeze({
[
// AhrefsBot - https://ahrefs.com/robot
// Amazonbot - https://developer.amazon.com/amazonbot
// Applebot - http://apple.com/go/applebot
// Bingbot - http://www.bing.com/bingbot.htm
// CCBot - https://commoncrawl.org/faq
// Dotbot - https://moz.com/help/moz-procedures/crawlers/dotbot
@@ -58,13 +57,17 @@ const Crawlers = Object.freeze({
// OpenAI's SearchGPT - https://platform.openai.com/docs/bots
// PerplexityBot - https://perplexity.ai/perplexitybot
// SemrushBot - http://www.semrush.com/bot.html
/((?:ahrefs|amazon|apple|bing|cc|dot|duckduck|exa|facebook|gpt|mj12|mojeek|oai-search|perplexity|semrush)bot)\/([\w\.]+)/i,
// 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,
// Applebot - http://apple.com/go/applebot
/(applebot(?:-extended)?)\/([\w\.]+)/i,
// Baiduspider https://help.baidu.com/question?prod_id=99&class=0&id=3001
/(baiduspider)[-imagevdonsfcpr]{0,6}\/([\w\.]+)/i,
// ClaudeBot (Anthropic)
/(claude(?:bot|-web))\/([\w\.]+)/i,
/(claude(?:bot|-web)|anthropic-ai)\/?([\w\.]*)/i,
// Coc Coc Bot - https://help.coccoc.com/en/search-engine
/(coccocbot-(?:image|web))\/([\w\.]+)/i,
@@ -91,8 +94,8 @@ const Crawlers = Object.freeze({
// Yeti (Naver)
/(yeti)\/([\w\.]+)/i,
// YisouSpider
/(yisouspider)\/?([\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
],
[NAME, VERSION, [TYPE, CRAWLER]],
@@ -101,13 +104,15 @@ const Crawlers = Object.freeze({
// Google Bots
/((?:adsbot|apis|mediapartners)-google(?:-mobile)?|google-?(?:other|cloudvertexbot|extended|safety))/i,
// AI2Bot - https://allenai.org/crawler
// Bytespider
// DataForSeoBot - https://dataforseo.com/dataforseo-bot
// Huawei AspiegelBot / PetalBot https://aspiegel.com/petalbot
// ImagesiftBot - https://imagesift.com/about
// Qihoo 360Spider
// TurnitinBot - https://www.turnitin.com/robot/crawlerinfo.html
// Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
/(360spider-?(?:image|video)?|bytespider|(?:aspiegel|dataforseo|petal|turnitin)bot|(?=yahoo! )slurp)/i
/\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|(?=yahoo! )slurp)/i
],
[NAME, [TYPE, CRAWLER]]
]
@@ -199,8 +204,10 @@ const ExtraDevices = Object.freeze({
const Emails = Object.freeze({
browser : [
[
// Evolution / Kontact/KMail / [Microsoft/Mac] Outlook / Thunderbird
[/(evolution|kmail2?|kontact|(?:microsoft |mac)outlook|thunderbird)[\s\/]([\w\.]+)/i], [NAME, VERSION, [TYPE, EMAIL]]
/(airmail|bluemail|emclient|evolution|foxmail|kmail2?|kontact|(?:microsoft |mac)?outlook(?:-express)?|navermailapp|(?!chrom.+)sparrow|thunderbird|yahoo)(?:m.+ail; |[\/ ])([\w\.]+)/i
], [NAME, VERSION, [TYPE, EMAIL]]
]
});
@@ -238,8 +245,8 @@ const Fetchers = Object.freeze({
],
[NAME, VERSION, [TYPE, FETCHER]],
// Google Bots / Snapchat
[/(feedfetcher-google|google(?:-read-aloud|producer)|(?=bot; )snapchat)/i],
// Google Bots / Cohere / Snapchat / Vercelbot
[/(cohere-ai|vercelbot|feedfetcher-google|google(?:-read-aloud|producer)|(?=bot; )snapchat)/i],
[NAME, [TYPE, FETCHER]],
]
});
@@ -297,8 +304,6 @@ const MediaPlayers = Object.freeze({
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
/(htc streaming player)\s[\w_]+\s\/\s([\d\.]+)/i, // HTC Streaming Player
/(java|python-urllib|python-requests|wget|libcurl)\/([\w\.-_]+)/i,
// Java/urllib/requests/wget/cURL
/(lavf)([\d\.]+)/i // Lavf (FFMPEG)
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
@@ -374,8 +379,11 @@ const MediaPlayers = Object.freeze({
const Libraries = Object.freeze({
browser : [
// Axios/jsdom/Scrapy
[/\b(axios|jsdom|scrapy)\/([\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]]
]
});

View File

@@ -1,13 +1,14 @@
// Type definitions for Helpers submodule of UAParser.js v2.0.0-rc.3
// Type definitions for Helpers submodule of UAParser.js v2.0.0
// Project: https://github.com/faisalman/ua-parser-js
// Definitions by: Faisal Salman <https://github.com/faisalman>
import { IResult } from "../main/ua-parser";
declare function getDeviceVendor(model: string): string | undefined;
declare function isAppleSilicon(res: IResult, useFeatureDetection?: boolean): boolean;
declare function isBot(res: IResult): boolean;
declare function isChromeFamily(res: IResult): boolean;
declare function isAppleSilicon(resultOrUA: IResult | string): boolean;
declare function isAIBot(resultOrUA: IResult | string): boolean;
declare function isBot(resultOrUA: IResult | string): boolean;
declare function isChromeFamily(resultOrUA: IResult | string): boolean;
declare function isElectron(): boolean;
declare function isFromEU(): boolean;
declare function isFrozenUA(ua: string): boolean;
@@ -16,6 +17,7 @@ declare function isStandalonePWA(): boolean;
export {
getDeviceVendor,
isAppleSilicon,
isAIBot,
isBot,
isChromeFamily,
isElectron,

View File

@@ -1,5 +1,5 @@
///////////////////////////////////////////////
/* Helpers for UAParser.js v2.0.0-rc.3
/* Helpers for UAParser.js v2.0.0
https://github.com/faisalman/ua-parser-js
Author: Faisal Salman <f@faisalman.com>
AGPLv3 License */
@@ -9,18 +9,22 @@
const { UAParser } = require('../main/ua-parser');
const { CPU, OS, Engine } = require('../enums/ua-parser-enums');
const { Bots } = require('../extensions/ua-parser-extensions');
const { isFromEU } = require('detect-europe-js');
const { isFrozenUA } = require('ua-is-frozen');
const { isStandalonePWA } = require('is-standalone-pwa');
const toResult = (value, head, ext) => typeof value === 'string' ? UAParser(value, head, ext) : value;
const getDeviceVendor = (model) => UAParser(`Mozilla/5.0 (Linux; Android 10; ${model}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.0.0 Safari/537.36`).device.vendor;
const isAppleSilicon = (res, useFeatureDetection) => {
const isAppleSilicon = (resultOrUA) => {
const res = toResult(resultOrUA);
if (res.os.is(OS.MACOS)) {
if (res.cpu.is(CPU.ARM)) {
return true;
}
if (useFeatureDetection) {
if (typeof resultOrUA !== 'string' && typeof window !== 'undefined') {
try {
const canvas = document.createElement('canvas');
const webgl = canvas.getContext('webgl2') || canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
@@ -37,9 +41,85 @@ const isAppleSilicon = (res, useFeatureDetection) => {
return false;
}
const isBot = (res) => ['cli', 'crawler', 'fetcher', 'library'].includes(res.browser.type);
const isAIBot = (resultOrUA) => [
const isChromeFamily = (res) => res.engine.is(Engine.BLINK);
// AI2
'ai2bot',
// Amazon
'amazonbot',
// Anthropic
'anthropic-ai',
'claude-web',
'claudebot',
// Apple
'applebot',
'applebot-extended',
// ByteDance
'bytespider',
// Common Crawl
'ccbot',
// DataForSeo
'dataforseobot',
// Diffbot
'diffbot',
// Google
'googleother',
'googleother-image',
'googleother-video',
'google-extended',
// Hive AI
'imagesiftbot',
// Huawei
'petalbot',
// Meta
'facebookbot',
'meta-externalagent',
// OpenAI
'gptbot',
'oai-searchbot',
// Perplexity
'perplexitybot',
// Timpi
'timpibot',
// Velen.io
'velenpublicwebcrawler',
// Webz.io
'omgili',
'omgilibot',
'webzio-extended',
// You.com
'youbot',
// Zyte
'scrapy'
].includes(String(toResult(resultOrUA, Bots).browser.name).toLowerCase());
const isBot = (resultOrUA) => [
'cli',
'crawler',
'fetcher',
'library'
].includes(toResult(resultOrUA, Bots).browser.type);
const isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(Engine.BLINK);
const isElectron = () => !!(process?.versions?.hasOwnProperty('electron') || // node.js
/ electron\//i.test(navigator?.userAgent)); // browser
@@ -47,6 +127,7 @@ const isElectron = () => !!(process?.versions?.hasOwnProperty('electron') ||
module.exports = {
getDeviceVendor,
isAppleSilicon,
isAIBot,
isBot,
isChromeFamily,
isElectron,

View File

@@ -3,7 +3,7 @@
// Source: /src/helpers/ua-parser-helpers.js
///////////////////////////////////////////////
/* Helpers for UAParser.js v2.0.0-rc.3
/* Helpers for UAParser.js v2.0.0
https://github.com/faisalman/ua-parser-js
Author: Faisal Salman <f@faisalman.com>
AGPLv3 License */
@@ -13,18 +13,22 @@
import { UAParser } from '../main/ua-parser.mjs';
import { CPU, OS, Engine } from '../enums/ua-parser-enums.mjs';
import { Bots } from '../extensions/ua-parser-extensions.mjs';
import { isFromEU } from 'detect-europe-js';
import { isFrozenUA } from 'ua-is-frozen';
import { isStandalonePWA } from 'is-standalone-pwa';
const toResult = (value, head, ext) => typeof value === 'string' ? UAParser(value, head, ext) : value;
const getDeviceVendor = (model) => UAParser(`Mozilla/5.0 (Linux; Android 10; ${model}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.0.0 Safari/537.36`).device.vendor;
const isAppleSilicon = (res, useFeatureDetection) => {
const isAppleSilicon = (resultOrUA) => {
const res = toResult(resultOrUA);
if (res.os.is(OS.MACOS)) {
if (res.cpu.is(CPU.ARM)) {
return true;
}
if (useFeatureDetection) {
if (typeof resultOrUA !== 'string' && typeof window !== 'undefined') {
try {
const canvas = document.createElement('canvas');
const webgl = canvas.getContext('webgl2') || canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
@@ -41,9 +45,85 @@ const isAppleSilicon = (res, useFeatureDetection) => {
return false;
}
const isBot = (res) => ['cli', 'crawler', 'fetcher', 'library'].includes(res.browser.type);
const isAIBot = (resultOrUA) => [
const isChromeFamily = (res) => res.engine.is(Engine.BLINK);
// AI2
'ai2bot',
// Amazon
'amazonbot',
// Anthropic
'anthropic-ai',
'claude-web',
'claudebot',
// Apple
'applebot',
'applebot-extended',
// ByteDance
'bytespider',
// Common Crawl
'ccbot',
// DataForSeo
'dataforseobot',
// Diffbot
'diffbot',
// Google
'googleother',
'googleother-image',
'googleother-video',
'google-extended',
// Hive AI
'imagesiftbot',
// Huawei
'petalbot',
// Meta
'facebookbot',
'meta-externalagent',
// OpenAI
'gptbot',
'oai-searchbot',
// Perplexity
'perplexitybot',
// Timpi
'timpibot',
// Velen.io
'velenpublicwebcrawler',
// Webz.io
'omgili',
'omgilibot',
'webzio-extended',
// You.com
'youbot',
// Zyte
'scrapy'
].includes(String(toResult(resultOrUA, Bots).browser.name).toLowerCase());
const isBot = (resultOrUA) => [
'cli',
'crawler',
'fetcher',
'library'
].includes(toResult(resultOrUA, Bots).browser.type);
const isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(Engine.BLINK);
const isElectron = () => !!(process?.versions?.hasOwnProperty('electron') || // node.js
/ electron\//i.test(navigator?.userAgent)); // browser
@@ -51,6 +131,7 @@ const isElectron = () => !!(process?.versions?.hasOwnProperty('electron') ||
export {
getDeviceVendor,
isAppleSilicon,
isAIBot,
isBot,
isChromeFamily,
isElectron,

View File

@@ -1,7 +1,10 @@
// Type definitions for UAParser.js v2.0.0-rc.3
// Type definitions for UAParser.js v2.0.0
// 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,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////////////
/* UAParser.js v2.0.0-rc.3
/* UAParser.js v2.0.0
Copyright © 2012-2024 Faisal Salman <f@faisalman.com>
AGPLv3 License *//*
Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
@@ -19,7 +19,7 @@
// Constants
/////////////
var LIBVERSION = '2.0.0-rc.3',
var LIBVERSION = '2.0.0',
EMPTY = '',
UNKNOWN = '?',
FUNC_TYPE = 'function',
@@ -76,6 +76,8 @@
LG = 'LG',
MICROSOFT = 'Microsoft',
MOTOROLA = 'Motorola',
ONEPLUS = 'OnePlus',
OPPO = 'OPPO',
SAMSUNG = 'Samsung',
SHARP = 'Sharp',
SONY = 'Sony',
@@ -84,6 +86,7 @@
PREFIX_MOBILE = 'Mobile ',
SUFFIX_BROWSER = ' Browser',
CHROME = 'Chrome',
CHROMIUM = 'Chromium',
CHROMECAST = 'Chromecast',
EDGE = 'Edge',
FIREFOX = 'Firefox',
@@ -463,7 +466,7 @@
// 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
/(links) \(([\w\.]+)/i // Links
/\b(links) \(([\w\.]+)/i // Links
], [NAME, [VERSION, /_/g, '.']], [
/(cobalt)\/([\w\.]+)/i // Cobalt
@@ -476,7 +479,7 @@
], [[ARCHITECTURE, 'amd64']], [
/(ia32(?=;))/i, // IA32 (quicktime)
/((?:i[346]|x)86)[;\)]/i // IA32 (x86)
/\b((?:i[346]|x)86)\b/i // IA32 (x86)
], [[ARCHITECTURE, 'ia32']], [
/\b(aarch64|arm(v?8e?l?|_?64))\b/i // ARM64
@@ -529,34 +532,38 @@
], [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]], [
// Vivo
/vivo (\w+)(?: bui|\))/i,
@@ -570,7 +577,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 +586,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
/(nokia) (t[12][01])/i
], [VENDOR, MODEL, [TYPE, TABLET]], [
/(?:maemo|nokia).*(n900|lumia \d+)/i,
/nokia[-_ ]?([-\w\.]*)/i
], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [
/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 +618,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,
@@ -685,18 +694,19 @@
], [MODEL, [VENDOR, 'Nothing'], [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
/; (hmd|imo) ([\w ]+?)(?: bui|\))/i, // HMD/IMO
/(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
@@ -745,7 +755,7 @@
], [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]], [
@@ -773,12 +783,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]], [
@@ -1151,17 +1172,27 @@
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'
});
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 +1209,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,7 +3,7 @@
// Source: /src/main/ua-parser.js
/////////////////////////////////////////////////////////////////////////////////
/* UAParser.js v2.0.0-rc.3
/* UAParser.js v2.0.0
Copyright © 2012-2024 Faisal Salman <f@faisalman.com>
AGPLv3 License *//*
Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
@@ -21,7 +21,7 @@
// Constants
/////////////
var LIBVERSION = '2.0.0-rc.3',
var LIBVERSION = '2.0.0',
EMPTY = '',
UNKNOWN = '?',
FUNC_TYPE = 'function',
@@ -465,7 +465,7 @@
// 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
/(links) \(([\w\.]+)/i // Links
/\b(links) \(([\w\.]+)/i // Links
], [NAME, [VERSION, /_/g, '.']], [
/(cobalt)\/([\w\.]+)/i // Cobalt

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",

View File

@@ -0,0 +1,250 @@
[
{
"desc": "Generic Android Device",
"ua": "Mozilla/5.0 (Linux; U; Android 6.0.1; i980 Build/MRA58K)",
"expect": {
"vendor": "Generic",
"model": "Android 6.0.1"
}
},
{
"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": "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": "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"
}
}
]

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,20 @@
[
{
"desc": "Alcatel",
"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,128 @@
[
{
"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": "Issue #519",
"ua": "ios/iPhone/14.2/SOME_CUSTOM_APP_VERSION",
"expect": {
"vendor": "Apple",
"model": "iPhone",
"type": "mobile"
}
}
]

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,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,38 @@
[
{
"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"
}
}
]

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,29 @@
[
{
"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

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

@@ -0,0 +1,182 @@
[
{
"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 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,74 @@
[
{
"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 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 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 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,11 @@
[
{
"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"
}
}
]

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,479 @@
[
{
"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 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

@@ -9,6 +9,36 @@
"type" : "cli"
}
},
{
"desc" : "ELinks",
"ua" : "ELinks/0.11.4-3-lite (textmode; Debian; Linux 2.6.26-1-686 i686;",
"expect" :
{
"name" : "ELinks",
"version" : "0.11.4-3-lite",
"type" : "cli"
}
},
{
"desc" : "ELinks",
"ua" : "ELinks (0.11.3; Linux 2.6.23-hardened-r4 i686; 166x55)",
"expect" :
{
"name" : "ELinks",
"version" : "0.11.3",
"type" : "cli"
}
},
{
"desc" : "HTTPie",
"ua" : "HTTPie/0.9.9",
"expect" :
{
"name" : "HTTPie",
"version" : "0.9.9",
"type" : "cli"
}
},
{
"desc" : "lynx",
"ua" : "Lynx 2.8.8dev.3",

View File

@@ -49,6 +49,26 @@
"type" : "crawler"
}
},
{
"desc" : "AI2Bot",
"ua" : "Mozilla/5.0 (compatible) AI2Bot (+https://www.allenai.org/crawler)",
"expect" :
{
"name" : "AI2Bot",
"version" : "undefined",
"type" : "crawler"
}
},
{
"desc" : "aiHitBot",
"ua" : "Mozilla/5.0 (compatible; aiHitBot/2.9; +https://www.aihitdata.com/about)",
"expect" :
{
"name" : "aiHitBot",
"version" : "2.9",
"type" : "crawler"
}
},
{
"desc" : "Applebot",
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B410 Safari/600.1.4 (Applebot/0.1;+http://www.apple.com/go/applebot)",
@@ -131,7 +151,7 @@
},
{
"desc" : "DataForSEO",
"ua" : "Mozilla/5.0 (compatible; DataForSeoBot; +https://dataforseo.com/dataforseo-bot) ",
"ua" : "Mozilla/5.0 (compatible; DataForSeoBot; +https://dataforseo.com/dataforseo-bot)",
"expect" :
{
"name" : "DataForSeoBot",
@@ -139,6 +159,16 @@
"type" : "crawler"
}
},
{
"desc" : "Diffbot",
"ua" : "Diffbot/0.1",
"expect" :
{
"name" : "Diffbot",
"version" : "0.1",
"type" : "crawler"
}
},
{
"desc" : "Dotbot",
"ua" : "Mozilla/5.0 (compatible; DotBot/1.2; +https://opensiteexplorer.org/dotbot; help@moz.com)",
@@ -329,6 +359,26 @@
"type" : "crawler"
}
},
{
"desc" : "ImagesiftBot",
"ua" : "Mozilla/5.0 (compatible; ImagesiftBot; +imagesift.com)",
"expect" :
{
"name" : "ImagesiftBot",
"version" : "undefined",
"type" : "crawler"
}
},
{
"desc" : "magpie-crawler",
"ua" : "magpie-crawler/1.1 (robots-txt-checker; +http://www.brandwatch.net)",
"expect" :
{
"name" : "magpie-crawler",
"version" : "1.1",
"type" : "crawler"
}
},
{
"desc" : "Meta-ExternalAgent",
"ua" : "meta-externalagent/1.1 (+https://developers.facebook.com/docs/sharing/webmasters/crawler)",
@@ -360,6 +410,26 @@
"type" : "crawler"
}
},
{
"desc" : "Omgili",
"ua" : "omgili/0.5 +https://omgili.com",
"expect" :
{
"name" : "omgili",
"version" : "0.5",
"type" : "crawler"
}
},
{
"desc" : "Omgilibot",
"ua" : "omgilibot/0.3 +http://www.omgili.com/Crawler.html",
"expect" :
{
"name" : "omgilibot",
"version" : "0.3",
"type" : "crawler"
}
},
{
"desc" : "OpenAI Search",
"ua" : "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot",
@@ -410,6 +480,36 @@
"type" : "crawler"
}
},
{
"desc" : "SeznamBot",
"ua" : "Mozilla/5.0 (compatible; SeznamBot/4.0-RC1; +http://napoveda.seznam.cz/seznambot-intro/)",
"expect" :
{
"name" : "SeznamBot",
"version" : "4.0-RC1",
"type" : "crawler"
}
},
{
"desc" : "Teoma",
"ua" : "Mozilla/2.0 (compatible; Ask Jeeves/Teoma; +http://sp.ask.com/docs/about/tech_crawling.html)",
"expect" :
{
"name" : "Teoma",
"version" : "undefined",
"type" : "crawler"
}
},
{
"desc" : "Timpibot",
"ua" : "Timpibot/0.8 (+http://www.timpi.io)",
"expect" :
{
"name" : "Timpibot",
"version" : "0.8",
"type" : "crawler"
}
},
{
"desc" : "TurnitinBot",
"ua" : "TurnitinBot (https://turnitin.com/robot/crawlerinfo.html)",
@@ -420,6 +520,16 @@
"type" : "crawler"
}
},
{
"desc" : "VelenPublicWebCrawler",
"ua" : "Mozilla/5.0 (compatible; VelenPublicWebCrawler/1.0; +https://velen.io)",
"expect" :
{
"name" : "VelenPublicWebCrawler",
"version" : "1.0",
"type" : "crawler"
}
},
{
"desc" : "Yahoo! Japan",
"ua" : "Y!J-BRW/1.0 (https://www.yahoo-help.jp/app/answers/detail/p/595/a_id/42716)",
@@ -469,5 +579,15 @@
"version" : "undefined",
"type" : "crawler"
}
},
{
"desc" : "YouBot",
"ua" : "YouBot (+http://www.you.com)",
"expect" :
{
"name" : "YouBot",
"version" : "undefined",
"type" : "crawler"
}
}
]

View File

@@ -0,0 +1,162 @@
[
{
"desc" : "Airmail",
"ua" : "Airmail 1.0 rv:148 (Macintosh; Mac OS X 10.8.3; en_BE)",
"expect" :
{
"name" : "Airmail",
"version" : "1.0",
"type" : "email"
}
},
{
"desc" : "BlueMail",
"ua" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) BlueMail/0.10.31 Chrome/61.0.3163.100 Electron/2.0.18 Safari/537.36",
"expect" :
{
"name" : "BlueMail",
"version" : "0.10.31",
"type" : "email"
}
},
{
"desc" : "BlueMail",
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16A405 BlueMail iOS",
"expect" :
{
"name" : "BlueMail",
"version" : "iOS",
"type" : "email"
}
},
{
"desc" : "Evolution",
"ua" : "Evolution/3.52.3",
"expect" :
{
"name" : "Evolution",
"version" : "3.52.3",
"type" : "email"
}
},
{
"desc" : "eM Client",
"ua" : "eMClient/9.2.2157.0",
"expect" :
{
"name" : "eMClient",
"version" : "9.2.2157.0",
"type" : "email"
}
},
{
"desc" : "Foxmail",
"ua" : "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 foxmail/7.2.15.80",
"expect" :
{
"name" : "foxmail",
"version" : "7.2.15.80",
"type" : "email"
}
},
{
"desc" : "KMail",
"ua" : "KMail/4.14.10 (FreeBSD/12.0-CURRENT; KDE/4.14.10; amd64; ; )",
"expect" :
{
"name" : "KMail",
"version" : "4.14.10",
"type" : "email"
}
},
{
"desc" : "KMail2",
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) kmail2/5.7.3 Safari/534.34",
"expect" :
{
"name" : "kmail2",
"version" : "5.7.3",
"type" : "email"
}
},
{
"desc" : "Kontact",
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) kontact/4.13.3 Safari/534.34",
"expect" :
{
"name" : "kontact",
"version" : "4.13.3",
"type" : "email"
}
},
{
"desc" : "Microsoft Outlook",
"ua" : "Microsoft Office/16.0 (Windows NT 10.0; Microsoft Outlook 16.0.5431; Pro)",
"expect" :
{
"name" : "Microsoft Outlook",
"version" : "16.0.5431",
"type" : "email"
}
},
{
"desc" : "Microsoft Outlook for Mac",
"ua" : "MacOutlook/14.7.1.161129 (Intel Mac OS X 10.9.6)",
"expect" :
{
"name" : "MacOutlook",
"version" : "14.7.1.161129",
"type" : "email"
}
},
{
"desc" : "NaverMailApp",
"ua" : "NaverMailApp/2.1.23 (Android 10; SM-N960N)",
"expect" :
{
"name" : "NaverMailApp",
"version" : "2.1.23",
"type" : "email"
}
},
{
"desc" : "Sparrow",
"ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Sparrow/1043.1",
"expect" :
{
"name" : "Sparrow",
"version" : "1043.1",
"type" : "email"
}
},
{
"desc" : "Thunderbird",
"ua" : "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0",
"expect" :
{
"name" : "Thunderbird",
"version" : "78.13.0",
"type" : "email"
}
},
{
"desc" : "Yahoo! Mail",
"ua" : "YahooMobile/1.0 (mail; 3.0.5.1311380); (Linux; U; Android 4.0.3; htc_runnymede Build/ICE_CREAM_SANDWICH_MR1);",
"expect" :
{
"name" : "Yahoo",
"version" : "3.0.5.1311380",
"type" : "email"
}
},
{
"desc" : "Yahoo! Mail",
"ua" : "YahooMobileMail/1.0 (Android Mail; 1.3.10) (supersonic;HTC;PC36100;2.3.5/GRJ90) ",
"expect" :
{
"name" : "Yahoo",
"version" : "1.3.10",
"type" : "email"
}
}
]

View File

@@ -118,5 +118,15 @@
"version" : "2.0",
"type" : "fetcher"
}
},
{
"desc" : "Vercelbot",
"ua" : "Vercelbot (+https://vercel.com)",
"expect" :
{
"name" : "Vercelbot",
"version" : "undefined",
"type" : "fetcher"
}
}
]

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",

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"
}
}
]

View File

@@ -0,0 +1,11 @@
[
{
"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" :
{
"name" : "Chromecast Android",
"version" : "12.0"
}
}
]

View File

@@ -0,0 +1,11 @@
[
{
"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" :
{
"name" : "Chromecast Fuchsia",
"version" : "1.56.500000"
}
}
]

View File

@@ -0,0 +1,11 @@
[
{
"desc" : "Google Chromecast Legacy Linux-Based",
"ua" : "Mozilla/5.0 (X11; Linux aarch64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.81 Safari/537.36 CrKey/1.42.183786",
"expect" :
{
"name" : "Chromecast Linux",
"version" : "1.42.183786"
}
}
]

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