user_agent_parser 2.16.0 → 2.18.0

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/vendor/uap-core/regexes.yaml +115 -21
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a48095209e88dd1c8b49954029334bddecbbb1facb44cbf3b2ed5e700b259541
4
- data.tar.gz: 06b14639160f7cdc6f3b0cc0ffc88147cee9cd1b92dc8a10ad61a420edb4a5fb
3
+ metadata.gz: ab744225e30c5d7b104c90cbfc58113edbeb9d4ea9f11273e88dd260619ba3eb
4
+ data.tar.gz: 0a6e00fa9452546627f2a753a35617d6c72ad8d69c1afc50aa46060db3c53ee5
5
5
  SHA512:
6
- metadata.gz: 94d1c6ad450918654bf5c6b9e9aaffd6ba3e28a01d17741a4443dc63110c30d310b81654de91297e9ce79ec31de3da40d8088d792cb100aca91d486b5410cf67
7
- data.tar.gz: be73315646276e7ab2db8ce86cc54e5802fcd6cff84c8176c2af9db935911f853606edada097ac1ab471c5b9b4557363b27099412388599279790edf10882565
6
+ metadata.gz: 36330441c91ddfe3fcfe35c31da5aa188ef5f902078a1dc8ec0731c6e8e90a8617a50c975ed1ea666fd7f48e69be8bcc4aafad05a12e4c4d4fd60e75eafb497b
7
+ data.tar.gz: 505a97655bbcc6d7e838577baf1e30e1bfddec25ba3e50820620d73cdc85c974bb530cff89cda473c2a4f2c6b1759feccd213ec6d7958c0104e3df70cbe66ae4
@@ -217,7 +217,7 @@ user_agent_parsers:
217
217
  family_replacement: 'Twitter'
218
218
 
219
219
  # Phantom app
220
- - regex: 'Mozilla.{1,200}Mobile.{1,100}(Phantom\/ios|android).(\d+)\.(\d+)\.(\d+)'
220
+ - regex: 'Mozilla.{1,200}Mobile.{1,100}(Phantom\/ios|Phantom\/android).(\d+)\.(\d+)\.(\d+)'
221
221
  family_replacement: 'Phantom'
222
222
 
223
223
  # aspiegel.com spider (owned by Huawei, later called PetalBot)
@@ -378,6 +378,29 @@ user_agent_parsers:
378
378
  - regex: '(Nintendo 3DS)'
379
379
  family_replacement: 'NetFront NX'
380
380
 
381
+ # Huawei Browser, should go before Safari and Chrome Mobile
382
+ - regex: '(HuaweiBrowser)/(\d+)\.(\d+)\.(\d+)\.\d+'
383
+ family_replacement: 'Huawei Browser'
384
+
385
+ # AVG
386
+ - regex: '(AVG)/(\d+)\.(\d+)\.(\d+)\.\d+'
387
+ family_replacement: 'AVG'
388
+
389
+ # Avast
390
+ - regex: '(AvastSecureBrowser|Avast)/(\d+)\.(\d+)\.(\d+)'
391
+ family_replacement: 'Avast Secure Browser'
392
+
393
+ # Instabridge
394
+ - regex: '(Instabridge)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
395
+
396
+ # Aloha Browser
397
+ - regex: '(AlohaBrowser)/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|)'
398
+ family_replacement: 'Aloha Browser'
399
+
400
+ # Brave Browser https://brave.com/ , should go before Safari and Chrome Mobile
401
+ - regex: '((?:B|b)rave(?:\sChrome)?)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|)'
402
+ family_replacement: 'Brave'
403
+
381
404
  # Amazon Silk, should go before Safari and Chrome Mobile
382
405
  - regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+)|)'
383
406
  family_replacement: 'Amazon Silk'
@@ -388,7 +411,7 @@ user_agent_parsers:
388
411
  # Edge Mobile
389
412
  - regex: 'Windows Phone .{0,200}(Edge)/(\d+)\.(\d+)'
390
413
  family_replacement: 'Edge Mobile'
391
- - regex: '(EdgiOS|EdgA)/(\d+)\.(\d+)\.(\d+)(?:\.(\d+)|)'
414
+ - regex: '(EdgiOS|EdgA)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|)'
392
415
  family_replacement: 'Edge Mobile'
393
416
 
394
417
  # Oculus Browser, should go before Samsung Internet
@@ -450,13 +473,25 @@ user_agent_parsers:
450
473
  family_replacement: 'QQ Browser'
451
474
 
452
475
  # DuckDuckGo
453
- - regex: 'Mobile.{0,200}(DuckDuckGo)/(\d+)'
476
+ - regex: 'Mozilla.{1,200}Mobile.{1,100}(DuckDuckGo)/(\d+)'
477
+ family_replacement: 'DuckDuckGo Mobile'
478
+ - regex: 'Mozilla.{1,200}(DuckDuckGo)/(\d+)'
479
+ family_replacement: 'DuckDuckGo'
480
+ - regex: 'Mozilla.{1,200}Mobile.{1,100}(Ddg)/(\d+)(?:\.(\d+)|)'
454
481
  family_replacement: 'DuckDuckGo Mobile'
482
+ - regex: 'Mozilla.{1,200}(Ddg)/(\d+)(?:\.(\d+)|)'
483
+ family_replacement: 'DuckDuckGo'
455
484
 
456
485
  # Tenta Browser
457
486
  - regex: '(Tenta/)(\d+)\.(\d+)\.(\d+)'
458
487
  family_replacement: 'Tenta Browser'
459
488
 
489
+ # Ecosia on iOS / Android
490
+ - regex: '(Ecosia) ios@(\d+)\.(\d+)\.(\d+)\.(\d+)'
491
+ family_replacement: 'Ecosia iOS'
492
+ - regex: '(Ecosia) android@(\d+)\.(\d+)\.(\d+)\.(\d+)'
493
+ family_replacement: 'Ecosia Android'
494
+
460
495
  # Chrome Mobile
461
496
  - regex: 'Version/.{1,300}(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
462
497
  family_replacement: 'Chrome Mobile WebView'
@@ -464,7 +499,7 @@ user_agent_parsers:
464
499
  family_replacement: 'Chrome Mobile WebView'
465
500
  - regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
466
501
  family_replacement: 'Chrome Mobile'
467
- - regex: '(CriOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
502
+ - regex: '(CriOS)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|)'
468
503
  family_replacement: 'Chrome Mobile iOS'
469
504
  - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile(?:[ /]|$)'
470
505
  family_replacement: 'Chrome Mobile'
@@ -496,6 +531,8 @@ user_agent_parsers:
496
531
  # Yandex Browser
497
532
  - regex: '(YaBrowser)/(\d+)\.(\d+)\.(\d+)'
498
533
  family_replacement: 'Yandex Browser'
534
+ - regex: '(YaSearchBrowser)/(\d+)\.(\d+)\.(\d+)'
535
+ family_replacement: 'Yandex Browser'
499
536
 
500
537
  # Mail.ru Amigo/Internet Browser (Chromium-based)
501
538
  - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+).{0,100} MRCHROME'
@@ -600,18 +637,14 @@ user_agent_parsers:
600
637
  - regex: 'Superhuman'
601
638
  family_replacement: 'Superhuman'
602
639
 
603
- # Vivaldi uses "Vivaldi"
604
- - regex: '(Vivaldi)/(\d+)\.(\d+)\.(\d+)'
640
+ # Vivaldi
641
+ - regex: '(Vivaldi)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
605
642
 
606
643
  # Edge/major_version.minor_version
607
644
  # Edge with chromium Edg/major_version.minor_version.patch.minor_patch
608
645
  - regex: '(Edge?)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)(?:\.(\d+)|)'
609
646
  family_replacement: 'Edge'
610
647
 
611
- # Brave Browser https://brave.com/
612
- - regex: '(brave)/(\d+)\.(\d+)\.(\d+) Chrome'
613
- family_replacement: 'Brave'
614
-
615
648
  # Iron Browser ~since version 50
616
649
  - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)[\d.]{0,100} Iron[^/]'
617
650
  family_replacement: 'Iron'
@@ -1022,10 +1055,12 @@ user_agent_parsers:
1022
1055
  # HTTrack crawler
1023
1056
  - regex: '\b(HTTrack) (\d+)\.(\d+)(?:[\.\-](\d+)|)'
1024
1057
 
1025
- # SerenityOS (https://serenityos.org)
1026
- # https://github.com/SerenityOS/serenity/blob/2e1bbcb0faeae92d7595b8e0b022a8cdcecca07e/Userland/Libraries/LibWeb/Loader/ResourceLoader.h#L27
1027
- - regex: 'SerenityOS'
1028
- family_replacement: 'SerenityOS Browser'
1058
+ # Ladybird Browser (https://ladybird.dev)
1059
+ # https://github.com/SerenityOS/serenity/blob/6a662e0d43810c1dbd56fbf0c123f258aa1d694e/Userland/Libraries/LibWeb/Loader/ResourceLoader.h#L64
1060
+ - regex: '(Ladybird)\/(\d+)\.(\d+)'
1061
+
1062
+ # MullvadBrowser (https://mullvad.net/en/browser)
1063
+ - regex: '(MullvadBrowser)/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
1029
1064
 
1030
1065
  os_parsers:
1031
1066
  ##########
@@ -1110,6 +1145,29 @@ os_parsers:
1110
1145
  # Special case for new ArcGIS Mobile products
1111
1146
  - regex: 'ArcGISRuntime-(?:Android|iOS)\/\d+\.\d+(?:\.\d+|) \((Android|iOS) (\d+)(?:\.(\d+)(?:\.(\d+)|)|);'
1112
1147
 
1148
+ ##########
1149
+ # Chromecast
1150
+ ##########
1151
+ # Ex: 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
1152
+ # These are the newer Android-based "Google TV" Chromecast devices.
1153
+ # Google stopped updating the Chromecast firmware version in these, so they always say CrKey/1.56.500000. Therefore we extract the more useful Android version instead.
1154
+ - regex: '(Android) (\d+)(?:\.(\d+)).*CrKey'
1155
+ os_replacement: 'Chromecast Android'
1156
+
1157
+ # Ex: Mozilla/5.0 (Fuchsia) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 CrKey/1.56.500000
1158
+ # These are some intermediate "Nest Hub" Chromecast devices running Fuchsia.
1159
+ - regex: 'Fuchsia.*(CrKey)(?:[/](\d+)\.(\d+)(?:\.(\d+)|)|)'
1160
+ os_replacement: 'Chromecast Fuchsia'
1161
+
1162
+ # Ex: 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
1163
+ - regex: 'Linux.*(CrKey)(?:[/](\d+)\.(\d+)(?:\.(\d+)|)|).*DeviceType/SmartSpeaker'
1164
+ os_replacement: 'Chromecast SmartSpeaker'
1165
+
1166
+ # Ex: 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
1167
+ # These are the oldest Chromecast devices that ran Linux.
1168
+ - regex: 'Linux.*(CrKey)(?:[/](\d+)\.(\d+)(?:\.(\d+)|)|)'
1169
+ os_replacement: 'Chromecast Linux'
1170
+
1113
1171
  ##########
1114
1172
  # Android
1115
1173
  # can actually detect rooted android os. do we care?
@@ -1273,6 +1331,10 @@ os_parsers:
1273
1331
  ##########
1274
1332
  - regex: '(Tizen)[/ ](\d+)\.(\d+)'
1275
1333
 
1334
+ # Chrome and Edge on iOS with desktop mode contains Mac OS X, so it must be before any Mac OS check
1335
+ - regex: 'Intel Mac OS X.+(CriOS|EdgiOS)/\d+'
1336
+ os_replacement: 'iOS'
1337
+
1276
1338
  ##########
1277
1339
  # Mac OS
1278
1340
  # @ref: http://en.wikipedia.org/wiki/Mac_OS_X#Versions
@@ -1787,12 +1849,6 @@ os_parsers:
1787
1849
 
1788
1850
  - regex: '(WebTV)/(\d+).(\d+)'
1789
1851
 
1790
- ##########
1791
- # Chromecast
1792
- ##########
1793
- - regex: '(CrKey)(?:[/](\d+)\.(\d+)(?:\.(\d+)|)|)'
1794
- os_replacement: 'Chromecast'
1795
-
1796
1852
  ##########
1797
1853
  # Misc mobile
1798
1854
  ##########
@@ -2426,6 +2482,39 @@ device_parsers:
2426
2482
  brand_replacement: 'ChangJia'
2427
2483
  model_replacement: '$1'
2428
2484
 
2485
+ ##########
2486
+ # Chromecast
2487
+ # @ref: https://en.wikipedia.org/wiki/Chromecast#Hardware_and_design
2488
+ ##########
2489
+ # Ex: 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
2490
+ # Ex: 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
2491
+ # Ex: 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
2492
+ # These are the newer Chromecast devices, such as smart speakers, Google TVs, etc. that have an explicit device type.
2493
+ - regex: 'CrKey.*DeviceType/([^/]*)'
2494
+ brand_replacement: 'Google'
2495
+ device_replacement: 'Chromecast'
2496
+ model_replacement: '$1'
2497
+
2498
+ # Ex: Mozilla/5.0 (Fuchsia) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 CrKey/1.56.500000
2499
+ # These are some intermediate "Nest Hub" Chromecast devices running Fuchsia.
2500
+ - regex: 'Fuchsia.*CrKey'
2501
+ brand_replacement: 'Google'
2502
+ device_replacement: 'Chromecast'
2503
+ model_replacement: 'Nest Hub'
2504
+
2505
+ # Ex: Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.47 Safari/537.36 CrKey/1.36.159268
2506
+ # These are the first generation of Chromecast devices that ran Linux. They don't specify a device type.
2507
+ - regex: 'Linux.*CrKey/1.36'
2508
+ brand_replacement: 'Google'
2509
+ device_replacement: 'Chromecast'
2510
+ model_replacement: 'First Generation'
2511
+
2512
+ # We have no data on the user agent strings of other models, except that they all report CrKey/
2513
+ - regex: 'CrKey/'
2514
+ brand_replacement: 'Google'
2515
+ device_replacement: 'Chromecast'
2516
+ model_replacement: 'Chromecast'
2517
+
2429
2518
  #########
2430
2519
  # Cloudfone
2431
2520
  # @ref: http://www.cloudfonemobile.com/
@@ -3582,6 +3671,11 @@ device_parsers:
3582
3671
  # Meta
3583
3672
  # @ref: https://www.meta.com
3584
3673
  #########
3674
+ - regex: 'Quest 3'
3675
+ device_replacement: 'Quest'
3676
+ brand_replacement: 'Meta'
3677
+ model_replacement: 'Quest 3'
3678
+
3585
3679
  - regex: 'Quest 2'
3586
3680
  device_replacement: 'Quest'
3587
3681
  brand_replacement: 'Meta'
@@ -5615,7 +5709,7 @@ device_parsers:
5615
5709
  device_replacement: 'Nintendo Wii U'
5616
5710
  brand_replacement: 'Nintendo'
5617
5711
  model_replacement: 'Wii U'
5618
- - regex: 'Nintendo (DS|3DS|DSi|Wii);'
5712
+ - regex: 'Nintendo (Switch|DS|3DS|DSi|Wii);'
5619
5713
  device_replacement: 'Nintendo $1'
5620
5714
  brand_replacement: 'Nintendo'
5621
5715
  model_replacement: '$1'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: user_agent_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.16.0
4
+ version: 2.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Lucas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-08 00:00:00.000000000 Z
11
+ date: 2024-06-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  A simple, comprehensive Ruby gem for parsing user agent strings
@@ -48,7 +48,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
48
48
  - !ruby/object:Gem::Version
49
49
  version: '0'
50
50
  requirements: []
51
- rubygems_version: 3.4.13
51
+ rubygems_version: 3.5.11
52
52
  signing_key:
53
53
  specification_version: 4
54
54
  summary: Parsing user agent strings with the help of BrowserScope's UA database