ua-parser-js 2.0.1 → 2.0.3

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.
@@ -3,7 +3,7 @@
3
3
  // Source: /src/extensions/ua-parser-extensions.js
4
4
 
5
5
  ///////////////////////////////////////////////
6
- /* Extensions for UAParser.js v2.0.1
6
+ /* Extensions for UAParser.js v2.0.3
7
7
  https://github.com/faisalman/ua-parser-js
8
8
  Author: Faisal Salman <f@faisalman.com>
9
9
  AGPLv3 License */
@@ -46,25 +46,25 @@ const Crawlers = Object.freeze({
46
46
  [
47
47
  // AhrefsBot - https://ahrefs.com/robot
48
48
  // Amazonbot - https://developer.amazon.com/amazonbot
49
- // Bingbot - http://www.bing.com/bingbot.htm
49
+ // Bingbot / AdIdxBot - https://www.bing.com/webmasters/help/which-crawlers-does-bing-use-8c184ec0
50
50
  // CCBot - https://commoncrawl.org/faq
51
51
  // Dotbot - https://moz.com/help/moz-procedures/crawlers/dotbot
52
52
  // DuckDuckBot - http://duckduckgo.com/duckduckbot.html
53
53
  // FacebookBot - https://developers.facebook.com/docs/sharing/bot/
54
54
  // GPTBot - https://platform.openai.com/docs/gptbot
55
+ // LinkedInBot - http://www.linkedin.com
55
56
  // MJ12bot - https://mj12bot.com/
56
57
  // MojeekBot - https://www.mojeek.com/bot.html
57
58
  // OpenAI's SearchGPT - https://platform.openai.com/docs/bots
58
59
  // PerplexityBot - https://perplexity.ai/perplexitybot
59
- // SemrushBot - http://www.semrush.com/bot.html
60
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,
61
+ /((?:adidx|ahrefs|amazon|bing|cc|dot|duckduck|exa|facebook|gpt|linkedin|mj12|mojeek|oai-search|perplexity|semrush|seznam)bot)\/([\w\.-]+)/i,
62
62
 
63
63
  // Applebot - http://apple.com/go/applebot
64
- /(applebot(?:-extended)?)\/([\w\.]+)/i,
64
+ /(applebot(?:-extended)?)\/?([\w\.]*)/i,
65
65
 
66
66
  // Baiduspider https://help.baidu.com/question?prod_id=99&class=0&id=3001
67
- /(baiduspider)[-imagevdonsfcpr]{0,6}\/([\w\.]+)/i,
67
+ /(baiduspider[-imagevdonwsfcpr]{0,7})\/?([\w\.]*)/i,
68
68
 
69
69
  // ClaudeBot (Anthropic)
70
70
  /(claude(?:bot|-web)|anthropic-ai)\/?([\w\.]*)/i,
@@ -82,6 +82,9 @@ const Crawlers = Object.freeze({
82
82
  // Internet Archive (archive.org)
83
83
  /(ia_archiver|archive\.org_bot)\/?([\w\.]*)/i,
84
84
 
85
+ // SemrushBot - http://www.semrush.com/bot.html
86
+ /((?:semrush|splitsignal)bot[-abcfimostw]*)\/?([\w\.-]*)/i,
87
+
85
88
  // Sogou Spider
86
89
  /(sogou (?:pic|head|web|orion|news) spider)\/([\w\.]+)/i,
87
90
 
@@ -94,8 +97,8 @@ const Crawlers = Object.freeze({
94
97
  // Yeti (Naver)
95
98
  /(yeti)\/([\w\.]+)/i,
96
99
 
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
100
+ // aiHitBot / Diffbot / Linespider / Magpie-Crawler / Omgilibot / OpenAI Image Downloader / Webzio-Extended / Screaming Frog SEO Spider / Timpibot / VelenPublicWebCrawler / YisouSpider / YouBot
101
+ /((?:aihit|diff|timpi|you)bot|omgili(?:bot)?|openai image downloader|(?:magpie-|velenpublicweb)crawler|webzio-extended|(?:screaming frog seo |line|yisou)spider)\/?([\w\.]*)/i
99
102
  ],
100
103
 
101
104
  [NAME, VERSION, [TYPE, CRAWLER]],
@@ -112,7 +115,7 @@ const Crawlers = Object.freeze({
112
115
  // Qihoo 360Spider
113
116
  // TurnitinBot - https://www.turnitin.com/robot/crawlerinfo.html
114
117
  // Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
115
- /\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|(?=yahoo! )slurp)/i
118
+ /\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|yahoo! slurp)/i
116
119
  ],
117
120
  [NAME, [TYPE, CRAWLER]]
118
121
  ]
@@ -221,27 +224,35 @@ const Fetchers = Object.freeze({
221
224
  // AhrefsSiteAudit - https://ahrefs.com/robot/site-audit
222
225
  // ChatGPT-User - https://platform.openai.com/docs/plugins/bot
223
226
  // DuckAssistBot - https://duckduckgo.com/duckassistbot/
224
- // BingPreview / Mastodon / Pinterestbot / Redditbot / Rogerbot / Telegrambot / Twitterbot / UptimeRobot
227
+ // Better Uptime / BingPreview / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot
225
228
  // Google Site Verifier / Meta / Yahoo! Japan
226
229
  // 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,
230
+ /(ahrefssiteaudit|(?:bing|microsoft)preview|chatgpt-user|mastodon|(?:discord|duckassist|linkedin|pinterest|reddit|roger|siteaudit|twitter|uptimero)bot|google-site-verification|meta-externalfetcher|y!?j-dlc|yandex(?:calendar|direct(?:dyn)?|searchshop)|yadirectfetcher)\/([\w\.]+)/i,
228
231
 
229
232
  // Bluesky
230
233
  /(bluesky) cardyb\/([\w\.]+)/i,
231
234
 
235
+ // Skype
236
+ /(skypeuripreview) preview\/([\w\.]+)/i,
237
+
232
238
  // Slackbot - https://api.slack.com/robots
233
239
  /(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i,
234
240
 
235
241
  // WhatsApp
236
- /(whatsapp)\/([\w\.]+)[\/ ][ianw]/i
242
+ /(whatsapp)\/([\w\.]+)/i
237
243
  ],
238
244
  [NAME, VERSION, [TYPE, FETCHER]],
239
245
 
240
246
  [
241
247
  // Google Bots / Cohere / Snapchat / Vercelbot / Yandex Bots
242
- /(cohere-ai|vercelbot|feedfetcher-google|google(?:-read-aloud|producer)|(?=bot; )snapchat|yandex(?:sitelinks|userproxy))/i
248
+ /((?:better uptime |telegram|vercel)bot|cohere-ai|feedfetcher-google|google(?:imageproxy|-read-aloud|-pagerenderer|producer)|snap url preview|yandex(?:sitelinks|userproxy))/i
243
249
  ],
244
250
  [NAME, [TYPE, FETCHER]],
251
+ ],
252
+
253
+ os : [
254
+ [/whatsapp\/[\d\.]+ (a|i)/i],
255
+ [[NAME, os => os == 'A' ? 'Android' : 'iOS' ]]
245
256
  ]
246
257
  });
247
258
 
@@ -252,10 +263,12 @@ const Fetchers = Object.freeze({
252
263
  const InApps = Object.freeze({
253
264
  browser : [
254
265
  // Slack
255
- [/chatlyio\/([\d\.]+)/i], [VERSION, 'Slack', [TYPE, INAPP]],
266
+ [/(?:slack(?=.+electron|.+ios)|chatlyio)\/([\d\.]+)/i],
267
+ [VERSION, [NAME, 'Slack'], [TYPE, INAPP]],
256
268
 
257
269
  // Yahoo! Japan
258
- [/jp\.co\.yahoo\.android\.yjtop\/([\d\.]+)/i], [VERSION, 'Yahoo! Japan', [TYPE, INAPP]]
270
+ [/jp\.co\.yahoo\.(?:android\.yjtop|ipn\.appli)\/([\d\.]+)/i],
271
+ [VERSION, [NAME, 'Yahoo! Japan'], [TYPE, INAPP]]
259
272
  ]
260
273
  });
261
274
 
@@ -331,15 +344,20 @@ const Libraries = Object.freeze({
331
344
 
332
345
  const Vehicles = Object.freeze({
333
346
  device : [
334
- [
335
- /dilink.+(byd) auto/i, // BYD
336
- ], [VENDOR], [
347
+ [/aftlbt962e2/i], // BMW
348
+ [[VENDOR, 'BMW']],
349
+
350
+ [/dilink.+(byd) auto/i], // BYD
351
+ [VENDOR],
337
352
 
338
- /(rivian) (r1t)/i, // Rivian
339
- ], [VENDOR, MODEL], [
353
+ [/aftlft962x3/i], // Jeep
354
+ [[VENDOR, 'Jeep'], [MODEL, 'Wagooner']],
355
+
356
+ [/(rivian) (r1t)/i], // Rivian
357
+ [VENDOR, MODEL],
340
358
 
341
- /vcc.+netfront/i, // Volvo
342
- ], [[VENDOR, 'Volvo']]
359
+ [/vcc.+netfront/i], // Volvo
360
+ [[VENDOR, 'Volvo']]
343
361
  ]
344
362
  });
345
363
 
@@ -353,6 +371,9 @@ const Bots = Object.freeze({
353
371
  ...Crawlers.browser,
354
372
  ...Fetchers.browser,
355
373
  ...Libraries.browser
374
+ ],
375
+ os : [
376
+ ...Fetchers.os
356
377
  ]
357
378
  });
358
379
 
@@ -1,4 +1,4 @@
1
- // Type definitions for Helpers submodule of UAParser.js v2.0.1
1
+ // Type definitions for Helpers submodule of UAParser.js v2.0.3
2
2
  // Project: https://github.com/faisalman/ua-parser-js
3
3
  // Definitions by: Faisal Salman <https://github.com/faisalman>
4
4
 
@@ -1,5 +1,5 @@
1
1
  ///////////////////////////////////////////////
2
- /* Helpers for UAParser.js v2.0.1
2
+ /* Helpers for UAParser.js v2.0.3
3
3
  https://github.com/faisalman/ua-parser-js
4
4
  Author: Faisal Salman <f@faisalman.com>
5
5
  AGPLv3 License */
@@ -93,6 +93,9 @@ const isAIBot = (resultOrUA) => [
93
93
  // Perplexity
94
94
  'perplexitybot',
95
95
 
96
+ // Semrush
97
+ 'semrushbot-ocob',
98
+
96
99
  // Timpi
97
100
  'timpibot',
98
101
 
@@ -3,7 +3,7 @@
3
3
  // Source: /src/helpers/ua-parser-helpers.js
4
4
 
5
5
  ///////////////////////////////////////////////
6
- /* Helpers for UAParser.js v2.0.1
6
+ /* Helpers for UAParser.js v2.0.3
7
7
  https://github.com/faisalman/ua-parser-js
8
8
  Author: Faisal Salman <f@faisalman.com>
9
9
  AGPLv3 License */
@@ -97,6 +97,9 @@ const isAIBot = (resultOrUA) => [
97
97
  // Perplexity
98
98
  'perplexitybot',
99
99
 
100
+ // Semrush
101
+ 'semrushbot-ocob',
102
+
100
103
  // Timpi
101
104
  'timpibot',
102
105
 
@@ -1,4 +1,4 @@
1
- // Type definitions for UAParser.js v2.0.1
1
+ // Type definitions for UAParser.js v2.0.3
2
2
  // Project: https://github.com/faisalman/ua-parser-js
3
3
  // Definitions by: Faisal Salman <https://github.com/faisalman>
4
4
 
@@ -1,6 +1,6 @@
1
1
  /////////////////////////////////////////////////////////////////////////////////
2
- /* UAParser.js v2.0.1
3
- Copyright © 2012-2024 Faisal Salman <f@faisalman.com>
2
+ /* UAParser.js v2.0.3
3
+ Copyright © 2012-2025 Faisal Salman <f@faisalman.com>
4
4
  AGPLv3 License *//*
5
5
  Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
6
6
  Supports browser & node.js environment.
@@ -19,7 +19,7 @@
19
19
  // Constants
20
20
  /////////////
21
21
 
22
- var LIBVERSION = '2.0.1',
22
+ var LIBVERSION = '2.0.3',
23
23
  UA_MAX_LENGTH = 500,
24
24
  USER_AGENT = 'user-agent',
25
25
  EMPTY = '',
@@ -353,11 +353,11 @@
353
353
  /(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i, // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet
354
354
  /(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer
355
355
 
356
- // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
357
- /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon)\/([-\w\.]+)/i,
356
+ // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble
357
+ /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:lg |qute)browser)\/([-\w\.]+)/i,
358
358
  // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon
359
- /(heytap|ovi|115)browser\/([\d\.]+)/i, // HeyTap/Ovi/115
360
- /(weibo)__([\d\.]+)/i // Weibo
359
+ /(heytap|ovi|115|surf)browser\/([\d\.]+)/i, // HeyTap/Ovi/115/Surf
360
+ /(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i // Ecosia/Weibo
361
361
  ], [NAME, VERSION], [
362
362
  /quark(?:pc)?\/([-\w\.]+)/i // Quark
363
363
  ], [VERSION, [NAME, 'Quark']], [
@@ -585,8 +585,11 @@
585
585
  /\b(opd2(\d{3}a?))(?: bui|\))/i
586
586
  ], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['304', '403', '203'], '*' : OPPO }], [TYPE, TABLET]], [
587
587
 
588
+ // BLU Vivo Series
589
+ /(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i
590
+ ], [MODEL, [VENDOR, 'BLU'], [TYPE, MOBILE]], [
588
591
  // Vivo
589
- /vivo (\w+)(?: bui|\))/i,
592
+ /; vivo (\w+)(?: bui|\))/i,
590
593
  /\b(v[12]\d{3}\w?[at])(?: bui|;)/i
591
594
  ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [
592
595
 
@@ -606,7 +609,7 @@
606
609
  /((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
607
610
  ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [
608
611
  /(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
609
- /\blg[-e;\/ ]+((?!browser|netcast|android tv|watch)\w+)/i,
612
+ /\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch))(\w+)/i,
610
613
  /\blg-?([\d\w]+) bui/i
611
614
  ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [
612
615
 
@@ -713,6 +716,14 @@
713
716
  /droid.+; (a(?:015|06[35]|142p?))/i
714
717
  ], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [
715
718
 
719
+ // Archos
720
+ /; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,
721
+ /archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i
722
+ ], [MODEL, [VENDOR, 'Archos'], [TYPE, TABLET]], [
723
+ /archos ([\w ]+)( b|\))/i,
724
+ /; (ac[3-6]\d\w{2,8})( b|\))/i
725
+ ], [MODEL, [VENDOR, 'Archos'], [TYPE, MOBILE]], [
726
+
716
727
  // MIXED
717
728
  /(imo) (tab \w+)/i, // IMO
718
729
  /(infinix) (x1101b?)/i // Infinix XPad
@@ -720,7 +731,7 @@
720
731
 
721
732
  /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
722
733
  // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Infinix/Tecno/Micromax/Advan
723
- /; (hmd|imo) ([\w ]+?)(?: bui|\))/i, // HMD/IMO
734
+ /; (blu|hmd|imo|tcl)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i, // BLU/HMD/IMO/TCL
724
735
  /(hp) ([\w ]+\w)/i, // HP iPAQ
725
736
  /(microsoft); (lumia[\w ]+)/i, // Microsoft Lumia
726
737
  /(lenovo)[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i, // Lenovo
@@ -728,7 +739,6 @@
728
739
  ], [VENDOR, MODEL, [TYPE, MOBILE]], [
729
740
 
730
741
  /(kobo)\s(ereader|touch)/i, // Kobo
731
- /(archos) (gamepad2?)/i, // Archos
732
742
  /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad
733
743
  /(kindle)\/([\w\.]+)/i // Kindle
734
744
  ], [VENDOR, MODEL, [TYPE, TABLET]], [
@@ -756,7 +766,9 @@
756
766
  ], [VENDOR, [TYPE, SMARTTV]], [
757
767
  /hbbtv.+maple;(\d+)/i
758
768
  ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [
759
- /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i // LG SmartTV
769
+ /tcast.+(lg)e?. ([-\w]+)/i // LG SmartTV
770
+ ], [VENDOR, MODEL, [TYPE, SMARTTV]], [
771
+ /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
760
772
  ], [[VENDOR, LG], [TYPE, SMARTTV]], [
761
773
  /(apple) ?tv/i // Apple TV
762
774
  ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [
@@ -768,6 +780,8 @@
768
780
  ], [[MODEL, CHROMECAST+' Nest Hub'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
769
781
  /crkey/i // Google Chromecast, Linux-based or unknown
770
782
  ], [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
783
+ /(portaltv)/i // Facebook Portal TV
784
+ ], [MODEL, [VENDOR, FACEBOOK], [TYPE, SMARTTV]], [
771
785
  /droid.+aft(\w+)( bui|\))/i // Fire TV
772
786
  ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [
773
787
  /(shield \w+ tv)/i // Nvidia Shield TV
@@ -836,7 +850,7 @@
836
850
  ], [MODEL, [VENDOR, GOOGLE], [TYPE, XR]], [
837
851
  /(pico) (4|neo3(?: link|pro)?)/i // Pico
838
852
  ], [VENDOR, MODEL, [TYPE, XR]], [
839
- /; (quest( \d| pro)?)/i // Oculus Quest
853
+ /(quest( \d| pro)?s?).+vr/i // Meta Quest
840
854
  ], [MODEL, [VENDOR, FACEBOOK], [TYPE, XR]], [
841
855
 
842
856
  ///////////////////
@@ -931,7 +945,7 @@
931
945
  /(ubuntu) ([\w\.]+) like android/i // Ubuntu Touch
932
946
  ], [[NAME, /(.+)/, '$1 Touch'], VERSION], [
933
947
  // Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen
934
- /(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\w*[-\/; ]?([\d\.]*)/i
948
+ /(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\w*[-\/\.; ]?([\d\.]*)/i
935
949
  ], [NAME, VERSION], [
936
950
  /\(bb(10);/i // BlackBerry 10
937
951
  ], [VERSION, [NAME, BLACKBERRY]], [
@@ -1213,7 +1227,11 @@
1213
1227
  'Chrome' : 'Google Chrome',
1214
1228
  'Edge' : 'Microsoft Edge',
1215
1229
  'Chrome WebView' : 'Android WebView',
1216
- 'Chrome Headless' : 'HeadlessChrome'
1230
+ 'Chrome Headless' : 'HeadlessChrome',
1231
+ 'Huawei Browser' : 'HuaweiBrowser',
1232
+ 'MIUI Browser' : 'Miui Browser',
1233
+ 'Opera Mobi' : 'OperaMobile',
1234
+ 'Yandex' : 'YaBrowser'
1217
1235
  });
1218
1236
  this.set(NAME, brandName)
1219
1237
  .set(VERSION, brandVersion)
@@ -3,8 +3,8 @@
3
3
  // Source: /src/main/ua-parser.js
4
4
 
5
5
  /////////////////////////////////////////////////////////////////////////////////
6
- /* UAParser.js v2.0.1
7
- Copyright © 2012-2024 Faisal Salman <f@faisalman.com>
6
+ /* UAParser.js v2.0.3
7
+ Copyright © 2012-2025 Faisal Salman <f@faisalman.com>
8
8
  AGPLv3 License *//*
9
9
  Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
10
10
  Supports browser & node.js environment.
@@ -21,7 +21,7 @@
21
21
  // Constants
22
22
  /////////////
23
23
 
24
- var LIBVERSION = '2.0.1',
24
+ var LIBVERSION = '2.0.3',
25
25
  UA_MAX_LENGTH = 500,
26
26
  USER_AGENT = 'user-agent',
27
27
  EMPTY = '',
@@ -355,11 +355,11 @@
355
355
  /(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i, // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet
356
356
  /(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer
357
357
 
358
- // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
359
- /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon)\/([-\w\.]+)/i,
358
+ // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble
359
+ /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:lg |qute)browser)\/([-\w\.]+)/i,
360
360
  // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon
361
- /(heytap|ovi|115)browser\/([\d\.]+)/i, // HeyTap/Ovi/115
362
- /(weibo)__([\d\.]+)/i // Weibo
361
+ /(heytap|ovi|115|surf)browser\/([\d\.]+)/i, // HeyTap/Ovi/115/Surf
362
+ /(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i // Ecosia/Weibo
363
363
  ], [NAME, VERSION], [
364
364
  /quark(?:pc)?\/([-\w\.]+)/i // Quark
365
365
  ], [VERSION, [NAME, 'Quark']], [
@@ -587,8 +587,11 @@
587
587
  /\b(opd2(\d{3}a?))(?: bui|\))/i
588
588
  ], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['304', '403', '203'], '*' : OPPO }], [TYPE, TABLET]], [
589
589
 
590
+ // BLU Vivo Series
591
+ /(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i
592
+ ], [MODEL, [VENDOR, 'BLU'], [TYPE, MOBILE]], [
590
593
  // Vivo
591
- /vivo (\w+)(?: bui|\))/i,
594
+ /; vivo (\w+)(?: bui|\))/i,
592
595
  /\b(v[12]\d{3}\w?[at])(?: bui|;)/i
593
596
  ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [
594
597
 
@@ -608,7 +611,7 @@
608
611
  /((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
609
612
  ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [
610
613
  /(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
611
- /\blg[-e;\/ ]+((?!browser|netcast|android tv|watch)\w+)/i,
614
+ /\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch))(\w+)/i,
612
615
  /\blg-?([\d\w]+) bui/i
613
616
  ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [
614
617
 
@@ -715,6 +718,14 @@
715
718
  /droid.+; (a(?:015|06[35]|142p?))/i
716
719
  ], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [
717
720
 
721
+ // Archos
722
+ /; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,
723
+ /archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i
724
+ ], [MODEL, [VENDOR, 'Archos'], [TYPE, TABLET]], [
725
+ /archos ([\w ]+)( b|\))/i,
726
+ /; (ac[3-6]\d\w{2,8})( b|\))/i
727
+ ], [MODEL, [VENDOR, 'Archos'], [TYPE, MOBILE]], [
728
+
718
729
  // MIXED
719
730
  /(imo) (tab \w+)/i, // IMO
720
731
  /(infinix) (x1101b?)/i // Infinix XPad
@@ -722,7 +733,7 @@
722
733
 
723
734
  /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
724
735
  // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Infinix/Tecno/Micromax/Advan
725
- /; (hmd|imo) ([\w ]+?)(?: bui|\))/i, // HMD/IMO
736
+ /; (blu|hmd|imo|tcl)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i, // BLU/HMD/IMO/TCL
726
737
  /(hp) ([\w ]+\w)/i, // HP iPAQ
727
738
  /(microsoft); (lumia[\w ]+)/i, // Microsoft Lumia
728
739
  /(lenovo)[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i, // Lenovo
@@ -730,7 +741,6 @@
730
741
  ], [VENDOR, MODEL, [TYPE, MOBILE]], [
731
742
 
732
743
  /(kobo)\s(ereader|touch)/i, // Kobo
733
- /(archos) (gamepad2?)/i, // Archos
734
744
  /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad
735
745
  /(kindle)\/([\w\.]+)/i // Kindle
736
746
  ], [VENDOR, MODEL, [TYPE, TABLET]], [
@@ -758,7 +768,9 @@
758
768
  ], [VENDOR, [TYPE, SMARTTV]], [
759
769
  /hbbtv.+maple;(\d+)/i
760
770
  ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [
761
- /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i // LG SmartTV
771
+ /tcast.+(lg)e?. ([-\w]+)/i // LG SmartTV
772
+ ], [VENDOR, MODEL, [TYPE, SMARTTV]], [
773
+ /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
762
774
  ], [[VENDOR, LG], [TYPE, SMARTTV]], [
763
775
  /(apple) ?tv/i // Apple TV
764
776
  ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [
@@ -770,6 +782,8 @@
770
782
  ], [[MODEL, CHROMECAST+' Nest Hub'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
771
783
  /crkey/i // Google Chromecast, Linux-based or unknown
772
784
  ], [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
785
+ /(portaltv)/i // Facebook Portal TV
786
+ ], [MODEL, [VENDOR, FACEBOOK], [TYPE, SMARTTV]], [
773
787
  /droid.+aft(\w+)( bui|\))/i // Fire TV
774
788
  ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [
775
789
  /(shield \w+ tv)/i // Nvidia Shield TV
@@ -838,7 +852,7 @@
838
852
  ], [MODEL, [VENDOR, GOOGLE], [TYPE, XR]], [
839
853
  /(pico) (4|neo3(?: link|pro)?)/i // Pico
840
854
  ], [VENDOR, MODEL, [TYPE, XR]], [
841
- /; (quest( \d| pro)?)/i // Oculus Quest
855
+ /(quest( \d| pro)?s?).+vr/i // Meta Quest
842
856
  ], [MODEL, [VENDOR, FACEBOOK], [TYPE, XR]], [
843
857
 
844
858
  ///////////////////
@@ -933,7 +947,7 @@
933
947
  /(ubuntu) ([\w\.]+) like android/i // Ubuntu Touch
934
948
  ], [[NAME, /(.+)/, '$1 Touch'], VERSION], [
935
949
  // Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen
936
- /(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\w*[-\/; ]?([\d\.]*)/i
950
+ /(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\w*[-\/\.; ]?([\d\.]*)/i
937
951
  ], [NAME, VERSION], [
938
952
  /\(bb(10);/i // BlackBerry 10
939
953
  ], [VERSION, [NAME, BLACKBERRY]], [
@@ -1215,7 +1229,11 @@
1215
1229
  'Chrome' : 'Google Chrome',
1216
1230
  'Edge' : 'Microsoft Edge',
1217
1231
  'Chrome WebView' : 'Android WebView',
1218
- 'Chrome Headless' : 'HeadlessChrome'
1232
+ 'Chrome Headless' : 'HeadlessChrome',
1233
+ 'Huawei Browser' : 'HuaweiBrowser',
1234
+ 'MIUI Browser' : 'Miui Browser',
1235
+ 'Opera Mobi' : 'OperaMobile',
1236
+ 'Yandex' : 'YaBrowser'
1219
1237
  });
1220
1238
  this.set(NAME, brandName)
1221
1239
  .set(VERSION, brandVersion)