ua-parser-js 1.0.37 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +616 -0
- package/README.md +251 -0
- package/dist/icons/color/LICENSE.md +3 -0
- package/dist/icons/color/browser/android-browser.svg +1 -0
- package/dist/icons/color/browser/avant.png +0 -0
- package/dist/icons/color/browser/basilisk.png +0 -0
- package/dist/icons/color/browser/basilisk.svg +1 -0
- package/dist/icons/color/browser/brave.png +0 -0
- package/dist/icons/color/browser/brave.svg +1 -0
- package/dist/icons/color/browser/chrome.png +0 -0
- package/dist/icons/color/browser/chrome.svg +1 -0
- package/dist/icons/color/browser/chromium.png +0 -0
- package/dist/icons/color/browser/chromium.svg +1 -0
- package/dist/icons/color/browser/coc-coc.png +0 -0
- package/dist/icons/color/browser/default.png +0 -0
- package/dist/icons/color/browser/default.svg +1 -0
- package/dist/icons/color/browser/dolphin.png +0 -0
- package/dist/icons/color/browser/edge.png +0 -0
- package/dist/icons/color/browser/edge.svg +1 -0
- package/dist/icons/color/browser/electron.png +0 -0
- package/dist/icons/color/browser/electron.svg +1 -0
- package/dist/icons/color/browser/falkon.png +0 -0
- package/dist/icons/color/browser/falkon.svg +1 -0
- package/dist/icons/color/browser/firefox-reality.png +0 -0
- package/dist/icons/color/browser/firefox-reality.svg +1 -0
- package/dist/icons/color/browser/firefox.png +0 -0
- package/dist/icons/color/browser/firefox.svg +1 -0
- package/dist/icons/color/browser/gsa.svg +9 -0
- package/dist/icons/color/browser/icecat.png +0 -0
- package/dist/icons/color/browser/ie.svg +6 -0
- package/dist/icons/color/browser/konqueror.png +0 -0
- package/dist/icons/color/browser/konqueror.svg +1 -0
- package/dist/icons/color/browser/maxthon.png +0 -0
- package/dist/icons/color/browser/midori.png +0 -0
- package/dist/icons/color/browser/midori.svg +1 -0
- package/dist/icons/color/browser/netsurf.png +0 -0
- package/dist/icons/color/browser/netsurf.svg +1 -0
- package/dist/icons/color/browser/opera-gx.png +0 -0
- package/dist/icons/color/browser/opera-gx.svg +1 -0
- package/dist/icons/color/browser/opera-mini.png +0 -0
- package/dist/icons/color/browser/opera-touch.png +0 -0
- package/dist/icons/color/browser/opera.png +0 -0
- package/dist/icons/color/browser/opera.svg +1 -0
- package/dist/icons/color/browser/palemoon.png +0 -0
- package/dist/icons/color/browser/puffin.png +0 -0
- package/dist/icons/color/browser/safari.png +0 -0
- package/dist/icons/color/browser/safari.svg +1 -0
- package/dist/icons/color/browser/samsung-internet.png +0 -0
- package/dist/icons/color/browser/samsung-internet.svg +1 -0
- package/dist/icons/color/browser/seamonkey.png +0 -0
- package/dist/icons/color/browser/silk.png +0 -0
- package/dist/icons/color/browser/sogou-mobile.png +0 -0
- package/dist/icons/color/browser/ucbrowser.png +0 -0
- package/dist/icons/color/browser/ucbrowser.svg +1 -0
- package/dist/icons/color/browser/vivaldi.png +0 -0
- package/dist/icons/color/browser/vivaldi.svg +1 -0
- package/dist/icons/color/browser/webkit.png +0 -0
- package/dist/icons/color/browser/webkit.svg +1 -0
- package/dist/icons/color/browser/yandex.png +0 -0
- package/dist/icons/color/os/centos.svg +1 -0
- package/dist/icons/mono/LICENSE.md +3 -0
- package/dist/icons/mono/browser/alipay.svg +1 -0
- package/dist/icons/mono/browser/android-browser.svg +1 -0
- package/dist/icons/mono/browser/avast-secure-browser.svg +1 -0
- package/dist/icons/mono/browser/baidu-browser.svg +1 -0
- package/dist/icons/mono/browser/brave.svg +1 -0
- package/dist/icons/mono/browser/chrome-headless.svg +1 -0
- package/dist/icons/mono/browser/chrome-webview.svg +1 -0
- package/dist/icons/mono/browser/chrome.svg +1 -0
- package/dist/icons/mono/browser/chromium.svg +1 -0
- package/dist/icons/mono/browser/duckduckgo.svg +1 -0
- package/dist/icons/mono/browser/edge.svg +1 -0
- package/dist/icons/mono/browser/electron.svg +1 -0
- package/dist/icons/mono/browser/facebook.svg +1 -0
- package/dist/icons/mono/browser/firefox-focus.svg +1 -0
- package/dist/icons/mono/browser/firefox-reality.svg +1 -0
- package/dist/icons/mono/browser/firefox.svg +1 -0
- package/dist/icons/mono/browser/gsa.svg +1 -0
- package/dist/icons/mono/browser/huawei-browser.svg +1 -0
- package/dist/icons/mono/browser/icecat.svg +1 -0
- package/dist/icons/mono/browser/ie.svg +1 -0
- package/dist/icons/mono/browser/instagram.svg +1 -0
- package/dist/icons/mono/browser/jasmine.svg +1 -0
- package/dist/icons/mono/browser/kakaotalk.svg +1 -0
- package/dist/icons/mono/browser/klarna.svg +1 -0
- package/dist/icons/mono/browser/line.svg +1 -0
- package/dist/icons/mono/browser/linkedin.svg +1 -0
- package/dist/icons/mono/browser/miui-browser.svg +1 -0
- package/dist/icons/mono/browser/mobile-chrome.svg +1 -0
- package/dist/icons/mono/browser/mobile-firefox.svg +1 -0
- package/dist/icons/mono/browser/mobile-safari.svg +1 -0
- package/dist/icons/mono/browser/mozilla.svg +1 -0
- package/dist/icons/mono/browser/naver.svg +1 -0
- package/dist/icons/mono/browser/nokia-browser.svg +1 -0
- package/dist/icons/mono/browser/oculus-browser.svg +1 -0
- package/dist/icons/mono/browser/opera-coast.svg +1 -0
- package/dist/icons/mono/browser/opera-gx.svg +1 -0
- package/dist/icons/mono/browser/opera-mini.svg +1 -0
- package/dist/icons/mono/browser/opera-mobi.svg +1 -0
- package/dist/icons/mono/browser/opera-tablet.svg +1 -0
- package/dist/icons/mono/browser/opera-touch.svg +1 -0
- package/dist/icons/mono/browser/opera.svg +1 -0
- package/dist/icons/mono/browser/qqbrowser.svg +1 -0
- package/dist/icons/mono/browser/qqbrowserlite.svg +1 -0
- package/dist/icons/mono/browser/safari.svg +1 -0
- package/dist/icons/mono/browser/sailfish-browser.svg +1 -0
- package/dist/icons/mono/browser/samsung-internet.svg +1 -0
- package/dist/icons/mono/browser/smart-lenovo-browser.svg +1 -0
- package/dist/icons/mono/browser/snapchat.svg +1 -0
- package/dist/icons/mono/browser/sogou-explorer.svg +1 -0
- package/dist/icons/mono/browser/sogou-mobile.svg +1 -0
- package/dist/icons/mono/browser/tesla.svg +1 -0
- package/dist/icons/mono/browser/tiktok.svg +1 -0
- package/dist/icons/mono/browser/twitter.svg +1 -0
- package/dist/icons/mono/browser/vivaldi.svg +1 -0
- package/dist/icons/mono/browser/vivo-browser.svg +1 -0
- package/dist/icons/mono/browser/wechat.svg +1 -0
- package/dist/icons/mono/browser/weibo.svg +1 -0
- package/dist/icons/mono/browser/yandex.svg +1 -0
- package/dist/icons/mono/device/acer.svg +1 -0
- package/dist/icons/mono/device/amazon.svg +1 -0
- package/dist/icons/mono/device/apple.svg +1 -0
- package/dist/icons/mono/device/asus.svg +1 -0
- package/dist/icons/mono/device/att.svg +1 -0
- package/dist/icons/mono/device/blackberry.svg +1 -0
- package/dist/icons/mono/device/dell.svg +1 -0
- package/dist/icons/mono/device/facebook.svg +1 -0
- package/dist/icons/mono/device/fairphone.svg +1 -0
- package/dist/icons/mono/device/google.svg +1 -0
- package/dist/icons/mono/device/hp.svg +1 -0
- package/dist/icons/mono/device/huawei.svg +1 -0
- package/dist/icons/mono/device/lenovo.svg +1 -0
- package/dist/icons/mono/device/lg.svg +1 -0
- package/dist/icons/mono/device/meizu.svg +1 -0
- package/dist/icons/mono/device/microsoft.svg +1 -0
- package/dist/icons/mono/device/motorola.svg +1 -0
- package/dist/icons/mono/device/nintendo.svg +1 -0
- package/dist/icons/mono/device/nokia.svg +1 -0
- package/dist/icons/mono/device/nvidia.svg +1 -0
- package/dist/icons/mono/device/oneplus.svg +1 -0
- package/dist/icons/mono/device/oppo.svg +1 -0
- package/dist/icons/mono/device/panasonic.svg +1 -0
- package/dist/icons/mono/device/roku.svg +1 -0
- package/dist/icons/mono/device/samsung.svg +1 -0
- package/dist/icons/mono/device/siemens.svg +1 -0
- package/dist/icons/mono/device/sony.svg +1 -0
- package/dist/icons/mono/device/tesla.svg +1 -0
- package/dist/icons/mono/device/vivo.svg +1 -0
- package/dist/icons/mono/device/vodafone.svg +1 -0
- package/dist/icons/mono/device/xiaomi.svg +1 -0
- package/dist/icons/mono/device/zebra.svg +1 -0
- package/dist/icons/mono/os/android.svg +1 -0
- package/dist/icons/mono/os/arch.svg +1 -0
- package/dist/icons/mono/os/blackberry.svg +1 -0
- package/dist/icons/mono/os/centos.svg +1 -0
- package/dist/icons/mono/os/chrome-os.svg +1 -0
- package/dist/icons/mono/os/chromecast.svg +1 -0
- package/dist/icons/mono/os/debian.svg +1 -0
- package/dist/icons/mono/os/deepin.svg +1 -0
- package/dist/icons/mono/os/elementary-os.svg +1 -0
- package/dist/icons/mono/os/fedora.svg +1 -0
- package/dist/icons/mono/os/firefox.svg +1 -0
- package/dist/icons/mono/os/freebsd.svg +1 -0
- package/dist/icons/mono/os/gentoo.svg +1 -0
- package/dist/icons/mono/os/gnu.svg +1 -0
- package/dist/icons/mono/os/harmonyos.svg +1 -0
- package/dist/icons/mono/os/ios.svg +1 -0
- package/dist/icons/mono/os/kaios.svg +1 -0
- package/dist/icons/mono/os/linux.svg +1 -0
- package/dist/icons/mono/os/macos.svg +1 -0
- package/dist/icons/mono/os/manjaro.svg +1 -0
- package/dist/icons/mono/os/mint.svg +1 -0
- package/dist/icons/mono/os/netbsd.svg +1 -0
- package/dist/icons/mono/os/nintendo.svg +1 -0
- package/dist/icons/mono/os/openbsd.svg +1 -0
- package/dist/icons/mono/os/playstation.svg +1 -0
- package/dist/icons/mono/os/raspbian.svg +1 -0
- package/dist/icons/mono/os/redhat.svg +1 -0
- package/dist/icons/mono/os/sailfish.svg +1 -0
- package/dist/icons/mono/os/slackware.svg +1 -0
- package/dist/icons/mono/os/suse.svg +1 -0
- package/dist/icons/mono/os/ubuntu.svg +1 -0
- package/dist/icons/mono/os/windows.svg +1 -0
- package/dist/icons/mono/os/xbox.svg +1 -0
- package/dist/ua-parser.min.js +4 -4
- package/dist/ua-parser.min.mjs +4 -0
- package/dist/ua-parser.pack.js +4 -4
- package/dist/ua-parser.pack.mjs +4 -0
- package/package.json +86 -36
- package/script/cli.js +4 -0
- package/src/enums/ua-parser-enums.d.ts +366 -0
- package/src/enums/ua-parser-enums.js +393 -0
- package/src/enums/ua-parser-enums.mjs +397 -0
- package/src/extensions/ua-parser-extensions.d.ts +16 -0
- package/src/extensions/ua-parser-extensions.js +366 -0
- package/src/extensions/ua-parser-extensions.mjs +370 -0
- package/src/helpers/ua-parser-helpers.d.ts +27 -0
- package/src/helpers/ua-parser-helpers.js +137 -0
- package/src/helpers/ua-parser-helpers.mjs +141 -0
- package/src/main/ua-parser.d.ts +113 -0
- package/src/main/ua-parser.js +1439 -0
- package/src/main/ua-parser.mjs +1397 -0
- package/license.md +0 -21
- package/readme.md +0 -385
- package/src/ua-parser.js +0 -946
@@ -0,0 +1,366 @@
|
|
1
|
+
///////////////////////////////////////////////
|
2
|
+
/* Extensions for UAParser.js v2.0.2
|
3
|
+
https://github.com/faisalman/ua-parser-js
|
4
|
+
Author: Faisal Salman <f@faisalman.com>
|
5
|
+
AGPLv3 License */
|
6
|
+
//////////////////////////////////////////////
|
7
|
+
|
8
|
+
/*jshint esversion: 6 */
|
9
|
+
|
10
|
+
const MODEL = 'model';
|
11
|
+
const NAME = 'name';
|
12
|
+
const TYPE = 'type';
|
13
|
+
const VENDOR = 'vendor';
|
14
|
+
const VERSION = 'version';
|
15
|
+
const MOBILE = 'mobile';
|
16
|
+
const TABLET = 'tablet';
|
17
|
+
const CRAWLER = 'crawler';
|
18
|
+
const CLI = 'cli';
|
19
|
+
const EMAIL = 'email';
|
20
|
+
const FETCHER = 'fetcher';
|
21
|
+
const INAPP = 'inapp';
|
22
|
+
const MEDIAPLAYER = 'mediaplayer';
|
23
|
+
const LIBRARY = 'library';
|
24
|
+
|
25
|
+
//////////////////////
|
26
|
+
// COMMAND LINE APPS
|
27
|
+
/////////////////////
|
28
|
+
|
29
|
+
const CLIs = Object.freeze({
|
30
|
+
browser : [
|
31
|
+
// wget / curl / Lynx / ELinks / HTTPie
|
32
|
+
[/(wget|curl|lynx|elinks|httpie)[\/ ]\(?([\w\.-]+)/i], [NAME, VERSION, [TYPE, CLI]]
|
33
|
+
]
|
34
|
+
});
|
35
|
+
|
36
|
+
////////////////////////
|
37
|
+
// CRAWLERS / SPIDERS
|
38
|
+
///////////////////////
|
39
|
+
|
40
|
+
const Crawlers = Object.freeze({
|
41
|
+
browser : [
|
42
|
+
[
|
43
|
+
// AhrefsBot - https://ahrefs.com/robot
|
44
|
+
// Amazonbot - https://developer.amazon.com/amazonbot
|
45
|
+
// Bingbot - http://www.bing.com/bingbot.htm
|
46
|
+
// CCBot - https://commoncrawl.org/faq
|
47
|
+
// Dotbot - https://moz.com/help/moz-procedures/crawlers/dotbot
|
48
|
+
// DuckDuckBot - http://duckduckgo.com/duckduckbot.html
|
49
|
+
// FacebookBot - https://developers.facebook.com/docs/sharing/bot/
|
50
|
+
// GPTBot - https://platform.openai.com/docs/gptbot
|
51
|
+
// MJ12bot - https://mj12bot.com/
|
52
|
+
// MojeekBot - https://www.mojeek.com/bot.html
|
53
|
+
// OpenAI's SearchGPT - https://platform.openai.com/docs/bots
|
54
|
+
// PerplexityBot - https://perplexity.ai/perplexitybot
|
55
|
+
// SemrushBot - http://www.semrush.com/bot.html
|
56
|
+
// SeznamBot - http://napoveda.seznam.cz/seznambot-intro
|
57
|
+
/((?:ahrefs|amazon|bing|cc|dot|duckduck|exa|facebook|gpt|mj12|mojeek|oai-search|perplexity|semrush|seznam)bot)\/([\w\.-]+)/i,
|
58
|
+
|
59
|
+
// Applebot - http://apple.com/go/applebot
|
60
|
+
/(applebot(?:-extended)?)\/([\w\.]+)/i,
|
61
|
+
|
62
|
+
// Baiduspider https://help.baidu.com/question?prod_id=99&class=0&id=3001
|
63
|
+
/(baiduspider)[-imagevdonsfcpr]{0,6}\/([\w\.]+)/i,
|
64
|
+
|
65
|
+
// ClaudeBot (Anthropic)
|
66
|
+
/(claude(?:bot|-web)|anthropic-ai)\/?([\w\.]*)/i,
|
67
|
+
|
68
|
+
// Coc Coc Bot - https://help.coccoc.com/en/search-engine
|
69
|
+
/(coccocbot-(?:image|web))\/([\w\.]+)/i,
|
70
|
+
|
71
|
+
// Facebook / Meta
|
72
|
+
// https://developers.facebook.com/docs/sharing/webmasters/web-crawlers
|
73
|
+
/(facebook(?:externalhit|catalog)|meta-externalagent)\/([\w\.]+)/i,
|
74
|
+
|
75
|
+
// Googlebot - http://www.google.com/bot.html
|
76
|
+
/(google(?:bot|other|-inspectiontool)(?:-image|-video|-news)?|storebot-google)\/?([\w\.]*)/i,
|
77
|
+
|
78
|
+
// Internet Archive (archive.org)
|
79
|
+
/(ia_archiver|archive\.org_bot)\/?([\w\.]*)/i,
|
80
|
+
|
81
|
+
// Sogou Spider
|
82
|
+
/(sogou (?:pic|head|web|orion|news) spider)\/([\w\.]+)/i,
|
83
|
+
|
84
|
+
// Yahoo! Japan - https://support.yahoo-net.jp/PccSearch/s/article/H000007955
|
85
|
+
/(y!?j-(?:asr|br[uw]|dscv|mmp|vsidx|wsc))\/([\w\.]+)/i,
|
86
|
+
|
87
|
+
// Yandex Bots - https://yandex.com/bots
|
88
|
+
/(yandex(?:(?:mobile)?(?:accessibility|additional|renderresources|screenshot|sprav)?bot|image(?:s|resizer)|video(?:parser)?|blogs|adnet|favicons|fordomain|market|media|metrika|news|ontodb(?:api)?|pagechecker|partner|rca|tracker|turbo|vertis|webmaster|antivirus))\/([\w\.]+)/i,
|
89
|
+
|
90
|
+
// Yeti (Naver)
|
91
|
+
/(yeti)\/([\w\.]+)/i,
|
92
|
+
|
93
|
+
// aiHitBot / Diffbot / Magpie-Crawler / Omgilibot / Webzio-Extended / Screaming Frog SEO Spider / Timpibot / VelenPublicWebCrawler / YisouSpider / YouBot
|
94
|
+
/((?:aihit|diff|timpi|you)bot|omgili(?:bot)?|(?:magpie-|velenpublicweb)crawler|webzio-extended|(?:screaming frog seo |yisou)spider)\/?([\w\.]*)/i
|
95
|
+
],
|
96
|
+
|
97
|
+
[NAME, VERSION, [TYPE, CRAWLER]],
|
98
|
+
|
99
|
+
[
|
100
|
+
// Google Bots
|
101
|
+
/((?:adsbot|apis|mediapartners)-google(?:-mobile)?|google-?(?:other|cloudvertexbot|extended|safety))/i,
|
102
|
+
|
103
|
+
// AI2Bot - https://allenai.org/crawler
|
104
|
+
// Bytespider
|
105
|
+
// DataForSeoBot - https://dataforseo.com/dataforseo-bot
|
106
|
+
// Huawei AspiegelBot / PetalBot https://aspiegel.com/petalbot
|
107
|
+
// ImagesiftBot - https://imagesift.com/about
|
108
|
+
// Qihoo 360Spider
|
109
|
+
// TurnitinBot - https://www.turnitin.com/robot/crawlerinfo.html
|
110
|
+
// Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
|
111
|
+
/\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|(?=yahoo! )slurp)/i
|
112
|
+
],
|
113
|
+
[NAME, [TYPE, CRAWLER]]
|
114
|
+
]
|
115
|
+
});
|
116
|
+
|
117
|
+
//////////////////
|
118
|
+
// EXTRA DEVICES
|
119
|
+
/////////////////
|
120
|
+
|
121
|
+
const ExtraDevices = Object.freeze({
|
122
|
+
device : [[
|
123
|
+
/(nook)[\w ]+build\/(\w+)/i, // Nook
|
124
|
+
/(dell) (strea[kpr\d ]*[\dko])/i, // Dell Streak
|
125
|
+
/(le[- ]+pan)[- ]+(\w{1,9}) bui/i, // Le Pan Tablets
|
126
|
+
/(trinity)[- ]*(t\d{3}) bui/i, // Trinity Tablets
|
127
|
+
/(gigaset)[- ]+(q\w{1,9}) bui/i, // Gigaset Tablets
|
128
|
+
/(vodafone) ([\w ]+)(?:\)| bui)/i // Vodafone
|
129
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
130
|
+
|
131
|
+
/(u304aa)/i // AT&T
|
132
|
+
], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [
|
133
|
+
|
134
|
+
/\bsie-(\w*)/i // Siemens
|
135
|
+
], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
|
136
|
+
|
137
|
+
/\b(rct\w+) b/i // RCA Tablets
|
138
|
+
], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [
|
139
|
+
|
140
|
+
/\b(venue[\d ]{2,7}) b/i // Dell Venue Tablets
|
141
|
+
], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [
|
142
|
+
|
143
|
+
/\b(q(?:mv|ta)\w+) b/i // Verizon Tablet
|
144
|
+
], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [
|
145
|
+
|
146
|
+
/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i // Barnes & Noble Tablet
|
147
|
+
], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [
|
148
|
+
|
149
|
+
/\b(tm\d{3}\w+) b/i
|
150
|
+
], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [
|
151
|
+
|
152
|
+
/\b(k88) b/i // ZTE K Series Tablet
|
153
|
+
], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [
|
154
|
+
|
155
|
+
/\b(nx\d{3}j) b/i // ZTE Nubia
|
156
|
+
], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [
|
157
|
+
|
158
|
+
/\b(gen\d{3}) b.+49h/i // Swiss GEN Mobile
|
159
|
+
], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [
|
160
|
+
|
161
|
+
/\b(zur\d{3}) b/i // Swiss ZUR Tablet
|
162
|
+
], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
|
163
|
+
|
164
|
+
/^((zeki)?tb.*\b) b/i // Zeki Tablets
|
165
|
+
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
166
|
+
|
167
|
+
/\b([yr]\d{2}) b/i,
|
168
|
+
/\b(?:dragon[- ]+touch |dt)(\w{5}) b/i // Dragon Touch Tablet
|
169
|
+
], [MODEL, [VENDOR, 'Dragon Touch'], [TYPE, TABLET]], [
|
170
|
+
|
171
|
+
/\b(ns-?\w{0,9}) b/i // Insignia Tablets
|
172
|
+
], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [
|
173
|
+
|
174
|
+
/\b((nxa|next)-?\w{0,9}) b/i // NextBook Tablets
|
175
|
+
], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [
|
176
|
+
|
177
|
+
/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones
|
178
|
+
], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [
|
179
|
+
|
180
|
+
/\b(lvtel\-)?(v1[12]) b/i // LvTel Phones
|
181
|
+
], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
|
182
|
+
|
183
|
+
/\b(ph-1) /i // Essential PH-1
|
184
|
+
], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [
|
185
|
+
|
186
|
+
/\b(v(100md|700na|7011|917g).*\b) b/i // Envizen Tablets
|
187
|
+
], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
|
188
|
+
|
189
|
+
/\b(trio[-\w\. ]+) b/i // MachSpeed Tablets
|
190
|
+
], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [
|
191
|
+
|
192
|
+
/\btu_(1491) b/i // Rotor Tablets
|
193
|
+
], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]]
|
194
|
+
]
|
195
|
+
});
|
196
|
+
|
197
|
+
///////////////
|
198
|
+
// EMAIL APPS
|
199
|
+
//////////////
|
200
|
+
|
201
|
+
const Emails = Object.freeze({
|
202
|
+
browser : [
|
203
|
+
[
|
204
|
+
// Evolution / Kontact/KMail / [Microsoft/Mac] Outlook / Thunderbird
|
205
|
+
/(airmail|bluemail|emclient|evolution|foxmail|kmail2?|kontact|(?:microsoft |mac)?outlook(?:-express)?|navermailapp|(?!chrom.+)sparrow|thunderbird|yahoo)(?:m.+ail; |[\/ ])([\w\.]+)/i
|
206
|
+
], [NAME, VERSION, [TYPE, EMAIL]]
|
207
|
+
]
|
208
|
+
});
|
209
|
+
|
210
|
+
///////////////////////
|
211
|
+
// ON-DEMAND SCRAPERS
|
212
|
+
//////////////////////
|
213
|
+
|
214
|
+
const Fetchers = Object.freeze({
|
215
|
+
browser : [
|
216
|
+
[
|
217
|
+
// AhrefsSiteAudit - https://ahrefs.com/robot/site-audit
|
218
|
+
// ChatGPT-User - https://platform.openai.com/docs/plugins/bot
|
219
|
+
// DuckAssistBot - https://duckduckgo.com/duckassistbot/
|
220
|
+
// BingPreview / Mastodon / Pinterestbot / Redditbot / Rogerbot / Telegrambot / Twitterbot / UptimeRobot
|
221
|
+
// Google Site Verifier / Meta / Yahoo! Japan
|
222
|
+
// Yandex Bots - https://yandex.com/bots
|
223
|
+
/(ahrefssiteaudit|bingpreview|chatgpt-user|mastodon|(?:discord|duckassist|linkedin|pinterest|reddit|roger|telegram|twitter|uptimero)bot|google-site-verification|meta-externalfetcher|y!?j-dlc|yandex(?:calendar|direct(?:dyn)?|searchshop)|yadirectfetcher)\/([\w\.]+)/i,
|
224
|
+
|
225
|
+
// Bluesky
|
226
|
+
/(bluesky) cardyb\/([\w\.]+)/i,
|
227
|
+
|
228
|
+
// Slackbot - https://api.slack.com/robots
|
229
|
+
/(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i,
|
230
|
+
|
231
|
+
// WhatsApp
|
232
|
+
/(whatsapp)\/([\w\.]+)[\/ ][ianw]/i
|
233
|
+
],
|
234
|
+
[NAME, VERSION, [TYPE, FETCHER]],
|
235
|
+
|
236
|
+
[
|
237
|
+
// Google Bots / Cohere / Snapchat / Vercelbot / Yandex Bots
|
238
|
+
/(cohere-ai|vercelbot|feedfetcher-google|google(?:-read-aloud|producer)|(?=bot; )snapchat|yandex(?:sitelinks|userproxy))/i
|
239
|
+
],
|
240
|
+
[NAME, [TYPE, FETCHER]],
|
241
|
+
]
|
242
|
+
});
|
243
|
+
|
244
|
+
////////////////////
|
245
|
+
// IN-APP BROWSERS
|
246
|
+
///////////////////
|
247
|
+
|
248
|
+
const InApps = Object.freeze({
|
249
|
+
browser : [
|
250
|
+
// Slack
|
251
|
+
[/chatlyio\/([\d\.]+)/i], [VERSION, 'Slack', [TYPE, INAPP]],
|
252
|
+
|
253
|
+
// Yahoo! Japan
|
254
|
+
[/jp\.co\.yahoo\.android\.yjtop\/([\d\.]+)/i], [VERSION, 'Yahoo! Japan', [TYPE, INAPP]]
|
255
|
+
]
|
256
|
+
});
|
257
|
+
|
258
|
+
//////////////////////
|
259
|
+
// MEDIA PLAYER APPS
|
260
|
+
/////////////////////
|
261
|
+
|
262
|
+
const MediaPlayers = Object.freeze({
|
263
|
+
browser : [[
|
264
|
+
/(apple(?:coremedia|tv))\/([\w\._]+)/i, // Generic Apple CoreMedia
|
265
|
+
/(coremedia) v([\w\._]+)/i,
|
266
|
+
// Ares/Nexplayer/OSSProxy
|
267
|
+
/(ares|clementine|music player daemon|nexplayer|ossproxy) ([\w\.-]+)/i,
|
268
|
+
// Aqualung/Lyssna/BSPlayer/Clementine/MPD
|
269
|
+
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/GnomeMplayer/MoC
|
270
|
+
// NSPlayer/PSP-InternetRadioPlayer/Videos
|
271
|
+
// Nero Home/Nero Scout/Nokia
|
272
|
+
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
273
|
+
// SoundTap/Totem/Stagefright/Streamium
|
274
|
+
// XBMC/gvfs/Xine/XMMS/irapp
|
275
|
+
/^(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,
|
276
|
+
/(lg player|nexplayer) ([\d\.]+)/i,
|
277
|
+
/player\/(nexplayer|lg player) ([\w\.-]+)/i, // NexPlayer/LG Player
|
278
|
+
/(gstreamer) souphttpsrc.+libsoup\/([\w\.-]+)/i, // Gstreamer
|
279
|
+
/(htc streaming player) [\w_]+ \/ ([\d\.]+)/i, // HTC Streaming Player
|
280
|
+
/(lavf)([\d\.]+)/i, // Lavf (FFMPEG)
|
281
|
+
// MPlayer SVN
|
282
|
+
/(mplayer)(?: |\/)(?:(?:sherpya-){0,1}svn)(?:-| )(r\d+(?:-\d+[\w\.-]+))/i,
|
283
|
+
/ (songbird)\/([\w\.-]+)/i, // Songbird/Philips-Songbird
|
284
|
+
/(winamp)(?:3 version|mpeg| ) ([\w\.-]+)/i, // Winamp
|
285
|
+
/(vlc)(?:\/| media player - version )([\w\.-]+)/i, // VLC Videolan
|
286
|
+
/^(foobar2000|itunes|smp)\/([\d\.]+)/i, // Foobar2000/iTunes/SMP
|
287
|
+
/com\.(riseupradioalarm)\/([\d\.]*)/i, // RiseUP Radio Alarm
|
288
|
+
/(mplayer)(?:\s|\/| unknown-)([\w\.\-]+)/i, // MPlayer
|
289
|
+
// Windows Media Server
|
290
|
+
/(windows)\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ home media server/i
|
291
|
+
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
292
|
+
|
293
|
+
/(flrp)\/([\w\.-]+)/i // Flip Player
|
294
|
+
], [[NAME, 'Flip Player'], VERSION, [TYPE, MEDIAPLAYER]], [
|
295
|
+
// FStream/NativeHost/QuerySeekSpider
|
296
|
+
// MPlayer (no other info)/Media Player Classic/Nero ShowTime
|
297
|
+
// OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
298
|
+
// inlight radio / YourMuze
|
299
|
+
/(fstream|media player classic|inlight radio|mplayer|nativehost|nero showtime|ocms-bot|queryseekspider|tapinradio|tunein radio|winamp|yourmuze)/i
|
300
|
+
], [NAME, [TYPE, MEDIAPLAYER]], [
|
301
|
+
|
302
|
+
/(htc_one_s|windows-media-player|wmplayer)\/([\w\.-]+)/i, // HTC One S / Windows Media Player
|
303
|
+
], [[NAME, /[_-]/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
304
|
+
|
305
|
+
/(rad.io|radio.(?:de|at|fr)) ([\d\.]+)/i // Rad.io
|
306
|
+
], [[NAME, 'rad.io'], VERSION, [TYPE, MEDIAPLAYER]]
|
307
|
+
]
|
308
|
+
});
|
309
|
+
|
310
|
+
/////////////
|
311
|
+
// LIBRARIES
|
312
|
+
//////////////
|
313
|
+
|
314
|
+
const Libraries = Object.freeze({
|
315
|
+
browser : [
|
316
|
+
// 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
|
317
|
+
[
|
318
|
+
/^(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,
|
319
|
+
/(jsdom|(?<=\()java)\/([\w\.]+)/i
|
320
|
+
], [NAME, VERSION, [TYPE, LIBRARY]]
|
321
|
+
]
|
322
|
+
});
|
323
|
+
|
324
|
+
/////////////
|
325
|
+
// VEHICLES
|
326
|
+
////////////
|
327
|
+
|
328
|
+
const Vehicles = Object.freeze({
|
329
|
+
device : [
|
330
|
+
[
|
331
|
+
/dilink.+(byd) auto/i, // BYD
|
332
|
+
], [VENDOR], [
|
333
|
+
|
334
|
+
/(rivian) (r1t)/i, // Rivian
|
335
|
+
], [VENDOR, MODEL], [
|
336
|
+
|
337
|
+
/vcc.+netfront/i, // Volvo
|
338
|
+
], [[VENDOR, 'Volvo']]
|
339
|
+
]
|
340
|
+
});
|
341
|
+
|
342
|
+
//////////
|
343
|
+
// BOTS
|
344
|
+
/////////
|
345
|
+
|
346
|
+
const Bots = Object.freeze({
|
347
|
+
browser : [
|
348
|
+
...CLIs.browser,
|
349
|
+
...Crawlers.browser,
|
350
|
+
...Fetchers.browser,
|
351
|
+
...Libraries.browser
|
352
|
+
]
|
353
|
+
});
|
354
|
+
|
355
|
+
module.exports = {
|
356
|
+
Bots,
|
357
|
+
CLIs,
|
358
|
+
Crawlers,
|
359
|
+
ExtraDevices,
|
360
|
+
Emails,
|
361
|
+
Fetchers,
|
362
|
+
InApps,
|
363
|
+
Libraries,
|
364
|
+
MediaPlayers,
|
365
|
+
Vehicles
|
366
|
+
};
|