ua-parser-js 2.0.0-rc.3 → 2.0.1
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/README.md +25 -6
- package/dist/ua-parser.min.js +2 -2
- package/dist/ua-parser.min.mjs +4 -0
- package/dist/ua-parser.pack.js +2 -2
- package/dist/ua-parser.pack.mjs +4 -0
- package/package.json +12 -8
- package/src/enums/ua-parser-enums.d.ts +366 -0
- package/src/enums/ua-parser-enums.js +7 -1
- package/src/enums/ua-parser-enums.mjs +7 -1
- package/src/extensions/ua-parser-extensions.d.ts +3 -2
- package/src/extensions/ua-parser-extensions.js +86 -121
- package/src/extensions/ua-parser-extensions.mjs +86 -121
- package/src/helpers/ua-parser-helpers.d.ts +7 -5
- package/src/helpers/ua-parser-helpers.js +86 -5
- package/src/helpers/ua-parser-helpers.mjs +86 -5
- package/src/main/ua-parser.d.ts +9 -5
- package/src/main/ua-parser.js +147 -81
- package/src/main/ua-parser.mjs +147 -81
@@ -1,5 +1,5 @@
|
|
1
1
|
///////////////////////////////////////////////
|
2
|
-
/* Extensions for UAParser.js v2.0.
|
2
|
+
/* Extensions for UAParser.js v2.0.1
|
3
3
|
https://github.com/faisalman/ua-parser-js
|
4
4
|
Author: Faisal Salman <f@faisalman.com>
|
5
5
|
AGPLv3 License */
|
@@ -28,8 +28,8 @@ const LIBRARY = 'library';
|
|
28
28
|
|
29
29
|
const CLIs = Object.freeze({
|
30
30
|
browser : [
|
31
|
-
// wget / curl /
|
32
|
-
[/(wget|curl|lynx)[\/ ]([\w
|
31
|
+
// wget / curl / Lynx / ELinks / HTTPie
|
32
|
+
[/(wget|curl|lynx|elinks|httpie)[\/ ]\(?([\w\.-]+)/i], [NAME, VERSION, [TYPE, CLI]]
|
33
33
|
]
|
34
34
|
});
|
35
35
|
|
@@ -42,7 +42,6 @@ const Crawlers = Object.freeze({
|
|
42
42
|
[
|
43
43
|
// AhrefsBot - https://ahrefs.com/robot
|
44
44
|
// Amazonbot - https://developer.amazon.com/amazonbot
|
45
|
-
// Applebot - http://apple.com/go/applebot
|
46
45
|
// Bingbot - http://www.bing.com/bingbot.htm
|
47
46
|
// CCBot - https://commoncrawl.org/faq
|
48
47
|
// Dotbot - https://moz.com/help/moz-procedures/crawlers/dotbot
|
@@ -54,13 +53,17 @@ const Crawlers = Object.freeze({
|
|
54
53
|
// OpenAI's SearchGPT - https://platform.openai.com/docs/bots
|
55
54
|
// PerplexityBot - https://perplexity.ai/perplexitybot
|
56
55
|
// SemrushBot - http://www.semrush.com/bot.html
|
57
|
-
/
|
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,
|
58
61
|
|
59
62
|
// Baiduspider https://help.baidu.com/question?prod_id=99&class=0&id=3001
|
60
63
|
/(baiduspider)[-imagevdonsfcpr]{0,6}\/([\w\.]+)/i,
|
61
64
|
|
62
65
|
// ClaudeBot (Anthropic)
|
63
|
-
/(claude(?:bot|-web))
|
66
|
+
/(claude(?:bot|-web)|anthropic-ai)\/?([\w\.]*)/i,
|
64
67
|
|
65
68
|
// Coc Coc Bot - https://help.coccoc.com/en/search-engine
|
66
69
|
/(coccocbot-(?:image|web))\/([\w\.]+)/i,
|
@@ -87,8 +90,8 @@ const Crawlers = Object.freeze({
|
|
87
90
|
// Yeti (Naver)
|
88
91
|
/(yeti)\/([\w\.]+)/i,
|
89
92
|
|
90
|
-
// YisouSpider
|
91
|
-
/(
|
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
|
92
95
|
],
|
93
96
|
|
94
97
|
[NAME, VERSION, [TYPE, CRAWLER]],
|
@@ -97,13 +100,15 @@ const Crawlers = Object.freeze({
|
|
97
100
|
// Google Bots
|
98
101
|
/((?:adsbot|apis|mediapartners)-google(?:-mobile)?|google-?(?:other|cloudvertexbot|extended|safety))/i,
|
99
102
|
|
103
|
+
// AI2Bot - https://allenai.org/crawler
|
100
104
|
// Bytespider
|
101
105
|
// DataForSeoBot - https://dataforseo.com/dataforseo-bot
|
102
106
|
// Huawei AspiegelBot / PetalBot https://aspiegel.com/petalbot
|
107
|
+
// ImagesiftBot - https://imagesift.com/about
|
103
108
|
// Qihoo 360Spider
|
104
109
|
// TurnitinBot - https://www.turnitin.com/robot/crawlerinfo.html
|
105
110
|
// Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
|
106
|
-
|
111
|
+
/\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|(?=yahoo! )slurp)/i
|
107
112
|
],
|
108
113
|
[NAME, [TYPE, CRAWLER]]
|
109
114
|
]
|
@@ -156,7 +161,7 @@ const ExtraDevices = Object.freeze({
|
|
156
161
|
/\b(zur\d{3}) b/i // Swiss ZUR Tablet
|
157
162
|
], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
|
158
163
|
|
159
|
-
|
164
|
+
/^((zeki)?tb.*\b) b/i // Zeki Tablets
|
160
165
|
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
161
166
|
|
162
167
|
/\b([yr]\d{2}) b/i,
|
@@ -195,8 +200,10 @@ const ExtraDevices = Object.freeze({
|
|
195
200
|
|
196
201
|
const Emails = Object.freeze({
|
197
202
|
browser : [
|
203
|
+
[
|
198
204
|
// Evolution / Kontact/KMail / [Microsoft/Mac] Outlook / Thunderbird
|
199
|
-
|
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]]
|
200
207
|
]
|
201
208
|
});
|
202
209
|
|
@@ -211,31 +218,25 @@ const Fetchers = Object.freeze({
|
|
211
218
|
// ChatGPT-User - https://platform.openai.com/docs/plugins/bot
|
212
219
|
// DuckAssistBot - https://duckduckgo.com/duckassistbot/
|
213
220
|
// BingPreview / Mastodon / Pinterestbot / Redditbot / Rogerbot / Telegrambot / Twitterbot / UptimeRobot
|
214
|
-
/
|
215
|
-
|
216
|
-
|
217
|
-
/(google-site-verification)\/([\w\.]+)/i,
|
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,
|
218
224
|
|
219
|
-
//
|
220
|
-
/(
|
225
|
+
// Bluesky
|
226
|
+
/(bluesky) cardyb\/([\w\.]+)/i,
|
221
227
|
|
222
228
|
// Slackbot - https://api.slack.com/robots
|
223
229
|
/(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i,
|
224
230
|
|
225
231
|
// WhatsApp
|
226
|
-
/(whatsapp)\/([\w\.]+)[\/ ][ianw]/i
|
227
|
-
|
228
|
-
// Yahoo! Japan
|
229
|
-
/(y!?j-dlc)\/([\w\.]+)/i,
|
230
|
-
|
231
|
-
// Yandex Bots - https://yandex.com/bots
|
232
|
-
/(yandex(?:calendar|direct(?:dyn)?|searchshop)|yadirectfetcher)\/([\w\.]+)/i,
|
233
|
-
/(yandex(?:sitelinks|userproxy))/i
|
232
|
+
/(whatsapp)\/([\w\.]+)[\/ ][ianw]/i
|
234
233
|
],
|
235
234
|
[NAME, VERSION, [TYPE, FETCHER]],
|
236
235
|
|
237
|
-
|
238
|
-
|
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
|
+
],
|
239
240
|
[NAME, [TYPE, FETCHER]],
|
240
241
|
]
|
241
242
|
});
|
@@ -260,106 +261,48 @@ const InApps = Object.freeze({
|
|
260
261
|
|
261
262
|
const MediaPlayers = Object.freeze({
|
262
263
|
browser : [[
|
263
|
-
|
264
|
-
/(
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
270
|
-
|
271
|
-
/(ares|ossproxy)\s([\w\.-]+)/i // Ares/OSSProxy
|
272
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
273
|
-
|
274
|
-
/(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\/([\w\.-]+)/i,
|
275
|
-
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC
|
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
|
276
270
|
// NSPlayer/PSP-InternetRadioPlayer/Videos
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
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
|
282
291
|
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
283
292
|
|
284
293
|
/(flrp)\/([\w\.-]+)/i // Flip Player
|
285
294
|
], [[NAME, 'Flip Player'], VERSION, [TYPE, MEDIAPLAYER]], [
|
286
|
-
|
287
|
-
/(fstream|nativehost|queryseekspider)/i
|
288
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
|
289
300
|
], [NAME, [TYPE, MEDIAPLAYER]], [
|
290
301
|
|
291
|
-
/(
|
292
|
-
|
293
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
302
|
+
/(htc_one_s|windows-media-player|wmplayer)\/([\w\.-]+)/i, // HTC One S / Windows Media Player
|
303
|
+
], [[NAME, /[_-]/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
294
304
|
|
295
|
-
/(
|
296
|
-
/(java|python-urllib|python-requests|wget|libcurl)\/([\w\.-_]+)/i,
|
297
|
-
// Java/urllib/requests/wget/cURL
|
298
|
-
/(lavf)([\d\.]+)/i // Lavf (FFMPEG)
|
299
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
300
|
-
|
301
|
-
/(htc_one_s)\/([\d\.]+)/i, // HTC One S
|
302
|
-
], [[NAME, /_/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
303
|
-
|
304
|
-
/(mplayer)(?:\s|\/)(?:(?:sherpya-){0,1}svn)(?:-|\s)(r\d+(?:-\d+[\w\.-]+))/i,
|
305
|
-
// MPlayer SVN
|
306
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
307
|
-
|
308
|
-
/(mplayer)(?:\s|\/)([\w\.-]+)/i, // MPlayer
|
309
|
-
/(mplayer) unknown-([\w\.\-]+)/i // MPlayer UNKNOWN
|
310
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
311
|
-
|
312
|
-
/(mplayer)/i, // MPlayer (no other info)
|
313
|
-
/(yourmuze)/i, // YourMuze
|
314
|
-
/(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime
|
315
|
-
], [NAME, [TYPE, MEDIAPLAYER]], [
|
316
|
-
|
317
|
-
/(nero (?:home|scout))\/([\w\.-]+)/i // Nero Home/Nero Scout
|
318
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
319
|
-
|
320
|
-
/(nokia\d+)\/([\w\.-]+)/i // Nokia
|
321
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
322
|
-
|
323
|
-
/\s(songbird)\/([\w\.-]+)/i // Songbird/Philips-Songbird
|
324
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
325
|
-
|
326
|
-
/(winamp)3 version ([\w\.-]+)/i, // Winamp
|
327
|
-
/(winamp)\s([\w\.-]+)/i,
|
328
|
-
/(winamp)mpeg\/([\w\.-]+)/i
|
329
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
330
|
-
|
331
|
-
/(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
332
|
-
// inlight radio
|
333
|
-
], [NAME, [TYPE, MEDIAPLAYER]], [
|
334
|
-
|
335
|
-
/(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\/([\w\.-]+)/i
|
336
|
-
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
337
|
-
// SoundTap/Totem/Stagefright/Streamium
|
338
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
339
|
-
|
340
|
-
/(smp)([\d\.]+)/i // SMP
|
341
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
342
|
-
|
343
|
-
/(vlc) media player - version ([\w\.]+)/i, // VLC Videolan
|
344
|
-
/(vlc)\/([\w\.-]+)/i,
|
345
|
-
/(xbmc|gvfs|xine|xmms|irapp)\/([\w\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp
|
346
|
-
/(foobar2000)\/([\d\.]+)/i, // Foobar2000
|
347
|
-
/(itunes)\/([\d\.]+)/i // iTunes
|
348
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
349
|
-
|
350
|
-
/(wmplayer)\/([\w\.-]+)/i, // Windows Media Player
|
351
|
-
/(windows-media-player)\/([\w\.-]+)/i
|
352
|
-
], [[NAME, /-/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
353
|
-
|
354
|
-
/windows\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ (home media server)/i,
|
355
|
-
// Windows Media Server
|
356
|
-
], [VERSION, [NAME, 'Windows'], [TYPE, MEDIAPLAYER]], [
|
357
|
-
|
358
|
-
/(com\.riseupradioalarm)\/([\d\.]*)/i // RiseUP Radio Alarm
|
359
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
360
|
-
|
361
|
-
/(rad.io)\s([\d\.]+)/i, // Rad.io
|
362
|
-
/(radio.(?:de|at|fr))\s([\d\.]+)/i
|
305
|
+
/(rad.io|radio.(?:de|at|fr)) ([\d\.]+)/i // Rad.io
|
363
306
|
], [[NAME, 'rad.io'], VERSION, [TYPE, MEDIAPLAYER]]
|
364
307
|
]
|
365
308
|
});
|
@@ -370,8 +313,29 @@ const MediaPlayers = Object.freeze({
|
|
370
313
|
|
371
314
|
const Libraries = Object.freeze({
|
372
315
|
browser : [
|
373
|
-
// Axios/jsdom/Scrapy
|
374
|
-
[
|
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']]
|
375
339
|
]
|
376
340
|
});
|
377
341
|
|
@@ -397,5 +361,6 @@ module.exports = {
|
|
397
361
|
Fetchers,
|
398
362
|
InApps,
|
399
363
|
Libraries,
|
400
|
-
MediaPlayers
|
364
|
+
MediaPlayers,
|
365
|
+
Vehicles
|
401
366
|
};
|
@@ -3,7 +3,7 @@
|
|
3
3
|
// Source: /src/extensions/ua-parser-extensions.js
|
4
4
|
|
5
5
|
///////////////////////////////////////////////
|
6
|
-
/* Extensions for UAParser.js v2.0.
|
6
|
+
/* Extensions for UAParser.js v2.0.1
|
7
7
|
https://github.com/faisalman/ua-parser-js
|
8
8
|
Author: Faisal Salman <f@faisalman.com>
|
9
9
|
AGPLv3 License */
|
@@ -32,8 +32,8 @@ const LIBRARY = 'library';
|
|
32
32
|
|
33
33
|
const CLIs = Object.freeze({
|
34
34
|
browser : [
|
35
|
-
// wget / curl /
|
36
|
-
[/(wget|curl|lynx)[\/ ]([\w
|
35
|
+
// wget / curl / Lynx / ELinks / HTTPie
|
36
|
+
[/(wget|curl|lynx|elinks|httpie)[\/ ]\(?([\w\.-]+)/i], [NAME, VERSION, [TYPE, CLI]]
|
37
37
|
]
|
38
38
|
});
|
39
39
|
|
@@ -46,7 +46,6 @@ const Crawlers = Object.freeze({
|
|
46
46
|
[
|
47
47
|
// AhrefsBot - https://ahrefs.com/robot
|
48
48
|
// Amazonbot - https://developer.amazon.com/amazonbot
|
49
|
-
// Applebot - http://apple.com/go/applebot
|
50
49
|
// Bingbot - http://www.bing.com/bingbot.htm
|
51
50
|
// CCBot - https://commoncrawl.org/faq
|
52
51
|
// Dotbot - https://moz.com/help/moz-procedures/crawlers/dotbot
|
@@ -58,13 +57,17 @@ const Crawlers = Object.freeze({
|
|
58
57
|
// OpenAI's SearchGPT - https://platform.openai.com/docs/bots
|
59
58
|
// PerplexityBot - https://perplexity.ai/perplexitybot
|
60
59
|
// SemrushBot - http://www.semrush.com/bot.html
|
61
|
-
/
|
60
|
+
// SeznamBot - http://napoveda.seznam.cz/seznambot-intro
|
61
|
+
/((?:ahrefs|amazon|bing|cc|dot|duckduck|exa|facebook|gpt|mj12|mojeek|oai-search|perplexity|semrush|seznam)bot)\/([\w\.-]+)/i,
|
62
|
+
|
63
|
+
// Applebot - http://apple.com/go/applebot
|
64
|
+
/(applebot(?:-extended)?)\/([\w\.]+)/i,
|
62
65
|
|
63
66
|
// Baiduspider https://help.baidu.com/question?prod_id=99&class=0&id=3001
|
64
67
|
/(baiduspider)[-imagevdonsfcpr]{0,6}\/([\w\.]+)/i,
|
65
68
|
|
66
69
|
// ClaudeBot (Anthropic)
|
67
|
-
/(claude(?:bot|-web))
|
70
|
+
/(claude(?:bot|-web)|anthropic-ai)\/?([\w\.]*)/i,
|
68
71
|
|
69
72
|
// Coc Coc Bot - https://help.coccoc.com/en/search-engine
|
70
73
|
/(coccocbot-(?:image|web))\/([\w\.]+)/i,
|
@@ -91,8 +94,8 @@ const Crawlers = Object.freeze({
|
|
91
94
|
// Yeti (Naver)
|
92
95
|
/(yeti)\/([\w\.]+)/i,
|
93
96
|
|
94
|
-
// YisouSpider
|
95
|
-
/(
|
97
|
+
// aiHitBot / Diffbot / Magpie-Crawler / Omgilibot / Webzio-Extended / Screaming Frog SEO Spider / Timpibot / VelenPublicWebCrawler / YisouSpider / YouBot
|
98
|
+
/((?:aihit|diff|timpi|you)bot|omgili(?:bot)?|(?:magpie-|velenpublicweb)crawler|webzio-extended|(?:screaming frog seo |yisou)spider)\/?([\w\.]*)/i
|
96
99
|
],
|
97
100
|
|
98
101
|
[NAME, VERSION, [TYPE, CRAWLER]],
|
@@ -101,13 +104,15 @@ const Crawlers = Object.freeze({
|
|
101
104
|
// Google Bots
|
102
105
|
/((?:adsbot|apis|mediapartners)-google(?:-mobile)?|google-?(?:other|cloudvertexbot|extended|safety))/i,
|
103
106
|
|
107
|
+
// AI2Bot - https://allenai.org/crawler
|
104
108
|
// Bytespider
|
105
109
|
// DataForSeoBot - https://dataforseo.com/dataforseo-bot
|
106
110
|
// Huawei AspiegelBot / PetalBot https://aspiegel.com/petalbot
|
111
|
+
// ImagesiftBot - https://imagesift.com/about
|
107
112
|
// Qihoo 360Spider
|
108
113
|
// TurnitinBot - https://www.turnitin.com/robot/crawlerinfo.html
|
109
114
|
// Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
|
110
|
-
|
115
|
+
/\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|(?=yahoo! )slurp)/i
|
111
116
|
],
|
112
117
|
[NAME, [TYPE, CRAWLER]]
|
113
118
|
]
|
@@ -160,7 +165,7 @@ const ExtraDevices = Object.freeze({
|
|
160
165
|
/\b(zur\d{3}) b/i // Swiss ZUR Tablet
|
161
166
|
], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
|
162
167
|
|
163
|
-
|
168
|
+
/^((zeki)?tb.*\b) b/i // Zeki Tablets
|
164
169
|
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
165
170
|
|
166
171
|
/\b([yr]\d{2}) b/i,
|
@@ -199,8 +204,10 @@ const ExtraDevices = Object.freeze({
|
|
199
204
|
|
200
205
|
const Emails = Object.freeze({
|
201
206
|
browser : [
|
207
|
+
[
|
202
208
|
// Evolution / Kontact/KMail / [Microsoft/Mac] Outlook / Thunderbird
|
203
|
-
|
209
|
+
/(airmail|bluemail|emclient|evolution|foxmail|kmail2?|kontact|(?:microsoft |mac)?outlook(?:-express)?|navermailapp|(?!chrom.+)sparrow|thunderbird|yahoo)(?:m.+ail; |[\/ ])([\w\.]+)/i
|
210
|
+
], [NAME, VERSION, [TYPE, EMAIL]]
|
204
211
|
]
|
205
212
|
});
|
206
213
|
|
@@ -215,31 +222,25 @@ const Fetchers = Object.freeze({
|
|
215
222
|
// ChatGPT-User - https://platform.openai.com/docs/plugins/bot
|
216
223
|
// DuckAssistBot - https://duckduckgo.com/duckassistbot/
|
217
224
|
// BingPreview / Mastodon / Pinterestbot / Redditbot / Rogerbot / Telegrambot / Twitterbot / UptimeRobot
|
218
|
-
/
|
219
|
-
|
220
|
-
|
221
|
-
/(google-site-verification)\/([\w\.]+)/i,
|
225
|
+
// Google Site Verifier / Meta / Yahoo! Japan
|
226
|
+
// Yandex Bots - https://yandex.com/bots
|
227
|
+
/(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,
|
222
228
|
|
223
|
-
//
|
224
|
-
/(
|
229
|
+
// Bluesky
|
230
|
+
/(bluesky) cardyb\/([\w\.]+)/i,
|
225
231
|
|
226
232
|
// Slackbot - https://api.slack.com/robots
|
227
233
|
/(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i,
|
228
234
|
|
229
235
|
// WhatsApp
|
230
|
-
/(whatsapp)\/([\w\.]+)[\/ ][ianw]/i
|
231
|
-
|
232
|
-
// Yahoo! Japan
|
233
|
-
/(y!?j-dlc)\/([\w\.]+)/i,
|
234
|
-
|
235
|
-
// Yandex Bots - https://yandex.com/bots
|
236
|
-
/(yandex(?:calendar|direct(?:dyn)?|searchshop)|yadirectfetcher)\/([\w\.]+)/i,
|
237
|
-
/(yandex(?:sitelinks|userproxy))/i
|
236
|
+
/(whatsapp)\/([\w\.]+)[\/ ][ianw]/i
|
238
237
|
],
|
239
238
|
[NAME, VERSION, [TYPE, FETCHER]],
|
240
239
|
|
241
|
-
|
242
|
-
|
240
|
+
[
|
241
|
+
// Google Bots / Cohere / Snapchat / Vercelbot / Yandex Bots
|
242
|
+
/(cohere-ai|vercelbot|feedfetcher-google|google(?:-read-aloud|producer)|(?=bot; )snapchat|yandex(?:sitelinks|userproxy))/i
|
243
|
+
],
|
243
244
|
[NAME, [TYPE, FETCHER]],
|
244
245
|
]
|
245
246
|
});
|
@@ -264,106 +265,48 @@ const InApps = Object.freeze({
|
|
264
265
|
|
265
266
|
const MediaPlayers = Object.freeze({
|
266
267
|
browser : [[
|
267
|
-
|
268
|
-
/(
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
274
|
-
|
275
|
-
/(ares|ossproxy)\s([\w\.-]+)/i // Ares/OSSProxy
|
276
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
277
|
-
|
278
|
-
/(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\/([\w\.-]+)/i,
|
279
|
-
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC
|
268
|
+
/(apple(?:coremedia|tv))\/([\w\._]+)/i, // Generic Apple CoreMedia
|
269
|
+
/(coremedia) v([\w\._]+)/i,
|
270
|
+
// Ares/Nexplayer/OSSProxy
|
271
|
+
/(ares|clementine|music player daemon|nexplayer|ossproxy) ([\w\.-]+)/i,
|
272
|
+
// Aqualung/Lyssna/BSPlayer/Clementine/MPD
|
273
|
+
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/GnomeMplayer/MoC
|
280
274
|
// NSPlayer/PSP-InternetRadioPlayer/Videos
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
275
|
+
// Nero Home/Nero Scout/Nokia
|
276
|
+
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
277
|
+
// SoundTap/Totem/Stagefright/Streamium
|
278
|
+
// XBMC/gvfs/Xine/XMMS/irapp
|
279
|
+
/^(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,
|
280
|
+
/(lg player|nexplayer) ([\d\.]+)/i,
|
281
|
+
/player\/(nexplayer|lg player) ([\w\.-]+)/i, // NexPlayer/LG Player
|
282
|
+
/(gstreamer) souphttpsrc.+libsoup\/([\w\.-]+)/i, // Gstreamer
|
283
|
+
/(htc streaming player) [\w_]+ \/ ([\d\.]+)/i, // HTC Streaming Player
|
284
|
+
/(lavf)([\d\.]+)/i, // Lavf (FFMPEG)
|
285
|
+
// MPlayer SVN
|
286
|
+
/(mplayer)(?: |\/)(?:(?:sherpya-){0,1}svn)(?:-| )(r\d+(?:-\d+[\w\.-]+))/i,
|
287
|
+
/ (songbird)\/([\w\.-]+)/i, // Songbird/Philips-Songbird
|
288
|
+
/(winamp)(?:3 version|mpeg| ) ([\w\.-]+)/i, // Winamp
|
289
|
+
/(vlc)(?:\/| media player - version )([\w\.-]+)/i, // VLC Videolan
|
290
|
+
/^(foobar2000|itunes|smp)\/([\d\.]+)/i, // Foobar2000/iTunes/SMP
|
291
|
+
/com\.(riseupradioalarm)\/([\d\.]*)/i, // RiseUP Radio Alarm
|
292
|
+
/(mplayer)(?:\s|\/| unknown-)([\w\.\-]+)/i, // MPlayer
|
293
|
+
// Windows Media Server
|
294
|
+
/(windows)\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ home media server/i
|
286
295
|
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
287
296
|
|
288
297
|
/(flrp)\/([\w\.-]+)/i // Flip Player
|
289
298
|
], [[NAME, 'Flip Player'], VERSION, [TYPE, MEDIAPLAYER]], [
|
290
|
-
|
291
|
-
/(fstream|nativehost|queryseekspider)/i
|
292
299
|
// FStream/NativeHost/QuerySeekSpider
|
300
|
+
// MPlayer (no other info)/Media Player Classic/Nero ShowTime
|
301
|
+
// OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
302
|
+
// inlight radio / YourMuze
|
303
|
+
/(fstream|media player classic|inlight radio|mplayer|nativehost|nero showtime|ocms-bot|queryseekspider|tapinradio|tunein radio|winamp|yourmuze)/i
|
293
304
|
], [NAME, [TYPE, MEDIAPLAYER]], [
|
294
305
|
|
295
|
-
/(
|
296
|
-
|
297
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
306
|
+
/(htc_one_s|windows-media-player|wmplayer)\/([\w\.-]+)/i, // HTC One S / Windows Media Player
|
307
|
+
], [[NAME, /[_-]/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
298
308
|
|
299
|
-
/(
|
300
|
-
/(java|python-urllib|python-requests|wget|libcurl)\/([\w\.-_]+)/i,
|
301
|
-
// Java/urllib/requests/wget/cURL
|
302
|
-
/(lavf)([\d\.]+)/i // Lavf (FFMPEG)
|
303
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
304
|
-
|
305
|
-
/(htc_one_s)\/([\d\.]+)/i, // HTC One S
|
306
|
-
], [[NAME, /_/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
307
|
-
|
308
|
-
/(mplayer)(?:\s|\/)(?:(?:sherpya-){0,1}svn)(?:-|\s)(r\d+(?:-\d+[\w\.-]+))/i,
|
309
|
-
// MPlayer SVN
|
310
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
311
|
-
|
312
|
-
/(mplayer)(?:\s|\/)([\w\.-]+)/i, // MPlayer
|
313
|
-
/(mplayer) unknown-([\w\.\-]+)/i // MPlayer UNKNOWN
|
314
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
315
|
-
|
316
|
-
/(mplayer)/i, // MPlayer (no other info)
|
317
|
-
/(yourmuze)/i, // YourMuze
|
318
|
-
/(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime
|
319
|
-
], [NAME, [TYPE, MEDIAPLAYER]], [
|
320
|
-
|
321
|
-
/(nero (?:home|scout))\/([\w\.-]+)/i // Nero Home/Nero Scout
|
322
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
323
|
-
|
324
|
-
/(nokia\d+)\/([\w\.-]+)/i // Nokia
|
325
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
326
|
-
|
327
|
-
/\s(songbird)\/([\w\.-]+)/i // Songbird/Philips-Songbird
|
328
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
329
|
-
|
330
|
-
/(winamp)3 version ([\w\.-]+)/i, // Winamp
|
331
|
-
/(winamp)\s([\w\.-]+)/i,
|
332
|
-
/(winamp)mpeg\/([\w\.-]+)/i
|
333
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
334
|
-
|
335
|
-
/(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
336
|
-
// inlight radio
|
337
|
-
], [NAME, [TYPE, MEDIAPLAYER]], [
|
338
|
-
|
339
|
-
/(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\/([\w\.-]+)/i
|
340
|
-
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
341
|
-
// SoundTap/Totem/Stagefright/Streamium
|
342
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
343
|
-
|
344
|
-
/(smp)([\d\.]+)/i // SMP
|
345
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
346
|
-
|
347
|
-
/(vlc) media player - version ([\w\.]+)/i, // VLC Videolan
|
348
|
-
/(vlc)\/([\w\.-]+)/i,
|
349
|
-
/(xbmc|gvfs|xine|xmms|irapp)\/([\w\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp
|
350
|
-
/(foobar2000)\/([\d\.]+)/i, // Foobar2000
|
351
|
-
/(itunes)\/([\d\.]+)/i // iTunes
|
352
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
353
|
-
|
354
|
-
/(wmplayer)\/([\w\.-]+)/i, // Windows Media Player
|
355
|
-
/(windows-media-player)\/([\w\.-]+)/i
|
356
|
-
], [[NAME, /-/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
357
|
-
|
358
|
-
/windows\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ (home media server)/i,
|
359
|
-
// Windows Media Server
|
360
|
-
], [VERSION, [NAME, 'Windows'], [TYPE, MEDIAPLAYER]], [
|
361
|
-
|
362
|
-
/(com\.riseupradioalarm)\/([\d\.]*)/i // RiseUP Radio Alarm
|
363
|
-
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
364
|
-
|
365
|
-
/(rad.io)\s([\d\.]+)/i, // Rad.io
|
366
|
-
/(radio.(?:de|at|fr))\s([\d\.]+)/i
|
309
|
+
/(rad.io|radio.(?:de|at|fr)) ([\d\.]+)/i // Rad.io
|
367
310
|
], [[NAME, 'rad.io'], VERSION, [TYPE, MEDIAPLAYER]]
|
368
311
|
]
|
369
312
|
});
|
@@ -374,8 +317,29 @@ const MediaPlayers = Object.freeze({
|
|
374
317
|
|
375
318
|
const Libraries = Object.freeze({
|
376
319
|
browser : [
|
377
|
-
// Axios/jsdom/Scrapy
|
378
|
-
[
|
320
|
+
// 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
|
321
|
+
[
|
322
|
+
/^(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,
|
323
|
+
/(jsdom|(?<=\()java)\/([\w\.]+)/i
|
324
|
+
], [NAME, VERSION, [TYPE, LIBRARY]]
|
325
|
+
]
|
326
|
+
});
|
327
|
+
|
328
|
+
/////////////
|
329
|
+
// VEHICLES
|
330
|
+
////////////
|
331
|
+
|
332
|
+
const Vehicles = Object.freeze({
|
333
|
+
device : [
|
334
|
+
[
|
335
|
+
/dilink.+(byd) auto/i, // BYD
|
336
|
+
], [VENDOR], [
|
337
|
+
|
338
|
+
/(rivian) (r1t)/i, // Rivian
|
339
|
+
], [VENDOR, MODEL], [
|
340
|
+
|
341
|
+
/vcc.+netfront/i, // Volvo
|
342
|
+
], [[VENDOR, 'Volvo']]
|
379
343
|
]
|
380
344
|
});
|
381
345
|
|
@@ -401,5 +365,6 @@ export {
|
|
401
365
|
Fetchers,
|
402
366
|
InApps,
|
403
367
|
Libraries,
|
404
|
-
MediaPlayers
|
368
|
+
MediaPlayers,
|
369
|
+
Vehicles
|
405
370
|
};
|