device_detector 1.1.0 → 1.1.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +19 -17
- data/lib/device_detector/browser.rb +22 -2
- data/lib/device_detector/client_hint.rb +22 -7
- data/lib/device_detector/device.rb +231 -1
- data/lib/device_detector/os.rb +10 -2
- data/lib/device_detector/parser.rb +25 -3
- data/lib/device_detector/vendor_fragment.rb +25 -0
- data/lib/device_detector/version.rb +1 -1
- data/lib/device_detector.rb +37 -5
- data/regexes/bots.yml +308 -17
- data/regexes/client/browsers.yml +82 -25
- data/regexes/client/feed_readers.yml +31 -23
- data/regexes/client/hints/apps.yml +22 -0
- data/regexes/client/hints/browsers.yml +20 -0
- data/regexes/client/libraries.yml +172 -24
- data/regexes/client/mediaplayers.yml +47 -0
- data/regexes/client/mobile_apps.yml +857 -39
- data/regexes/client/pim.yml +4 -0
- data/regexes/device/car_browsers.yml +1 -1
- data/regexes/device/consoles.yml +8 -4
- data/regexes/device/mobiles.yml +4945 -1234
- data/regexes/device/portable_media_player.yml +20 -4
- data/regexes/device/shell_tv.yml +5 -0
- data/regexes/device/televisions.yml +144 -6
- data/regexes/oss.yml +221 -107
- metadata +6 -4
|
@@ -5,75 +5,109 @@
|
|
|
5
5
|
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
|
6
6
|
###############
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
- regex: 'Fuzz Faster U Fool v(\d+[\.\d]+)'
|
|
9
|
+
name: 'FFUF'
|
|
10
|
+
version: '$1'
|
|
11
|
+
url: 'https://github.com/ffuf/ffuf'
|
|
12
|
+
|
|
13
|
+
- regex: 'Slim Framework'
|
|
14
|
+
name: 'Slim Framework'
|
|
15
|
+
version: ''
|
|
16
|
+
url: 'https://www.slimframework.com/'
|
|
17
|
+
|
|
18
|
+
- regex: 'msray-plus'
|
|
19
|
+
name: 'Msray-Plus'
|
|
11
20
|
version: ''
|
|
21
|
+
url: 'https://github.com/super-l/msray'
|
|
22
|
+
|
|
23
|
+
- regex: 'HTMLParser(?:/(\d+[\.\d]+))?'
|
|
24
|
+
name: 'HTML Parser'
|
|
25
|
+
version: '$1'
|
|
26
|
+
url: 'https://htmlparser.sourceforge.net/'
|
|
12
27
|
|
|
13
|
-
#
|
|
28
|
+
# got - a nodejs library
|
|
29
|
+
- regex: '^got(?:/(\d+\.[.\d]+))? \('
|
|
30
|
+
name: 'got'
|
|
31
|
+
version: '$1'
|
|
32
|
+
url: 'https://github.com/sindresorhus/got'
|
|
33
|
+
|
|
34
|
+
# Typhoeus
|
|
14
35
|
- regex: 'Typhoeus'
|
|
15
36
|
name: 'Typhoeus'
|
|
16
37
|
version: ''
|
|
38
|
+
url: 'https://github.com/typhoeus/typhoeus'
|
|
17
39
|
|
|
18
|
-
# req
|
|
40
|
+
# req
|
|
19
41
|
- regex: 'req/v([\.\d]+)'
|
|
20
42
|
name: 'req'
|
|
21
43
|
version: '$1'
|
|
44
|
+
url: 'https://github.com/imroc/req'
|
|
22
45
|
|
|
23
|
-
# quic-go
|
|
46
|
+
# quic-go
|
|
24
47
|
- regex: 'quic-go-HTTP/3'
|
|
25
48
|
name: 'quic-go'
|
|
26
49
|
version: ''
|
|
50
|
+
url: 'https://github.com/lucas-clemente/quic-go'
|
|
27
51
|
|
|
28
|
-
# Azure Data Factory
|
|
52
|
+
# Azure Data Factory
|
|
29
53
|
- regex: 'azure-data-factory(?:/(\d+[\.\d]+))?'
|
|
30
54
|
name: 'Azure Data Factory'
|
|
31
55
|
version: '$1'
|
|
56
|
+
url: 'https://azure.microsoft.com/en-us/products/data-factory/'
|
|
32
57
|
|
|
33
|
-
# Dart
|
|
58
|
+
# Dart
|
|
34
59
|
- regex: 'Dart(?:/(\d+[\.\d]+))?'
|
|
35
60
|
name: 'Dart'
|
|
36
61
|
version: '$1'
|
|
62
|
+
url: 'https://dart.dev/'
|
|
37
63
|
|
|
38
|
-
# r-curl
|
|
64
|
+
# r-curl
|
|
39
65
|
- regex: 'r-curl(?:/(\d+[\.\d]+))?'
|
|
40
66
|
name: 'r-curl'
|
|
41
67
|
version: '$1'
|
|
68
|
+
url: 'https://github.com/jeroen/curl'
|
|
42
69
|
|
|
43
|
-
# HTTPX
|
|
70
|
+
# HTTPX
|
|
44
71
|
- regex: 'python-httpx(?:/(\d+[\.\d]+))?'
|
|
45
72
|
name: 'HTTPX'
|
|
46
73
|
version: '$1'
|
|
74
|
+
url: 'https://www.python-httpx.org/'
|
|
47
75
|
|
|
48
|
-
# fasthttp
|
|
76
|
+
# fasthttp
|
|
49
77
|
- regex: 'fasthttp(?:/(\d+[\.\d]+))?'
|
|
50
78
|
name: 'fasthttp'
|
|
51
79
|
version: '$1'
|
|
80
|
+
url: 'https://github.com/valyala/fasthttp'
|
|
52
81
|
|
|
53
|
-
# GeoIP Update
|
|
82
|
+
# GeoIP Update
|
|
54
83
|
- regex: 'geoipupdate(?:/(\d+[\.\d]+))?'
|
|
55
84
|
name: 'GeoIP Update'
|
|
56
85
|
version: '$1'
|
|
86
|
+
url: 'https://github.com/maxmind/geoipupdate'
|
|
57
87
|
|
|
58
|
-
# PHP cURL Class
|
|
88
|
+
# PHP cURL Class
|
|
59
89
|
- regex: 'PHP-Curl-Class(?:/(\d+[\.\d]+))?'
|
|
60
90
|
name: 'PHP cURL Class'
|
|
61
91
|
version: '$1'
|
|
92
|
+
url: 'https://github.com/php-curl-class/php-curl-class'
|
|
62
93
|
|
|
63
|
-
# cPanel HTTP Client
|
|
94
|
+
# cPanel HTTP Client
|
|
64
95
|
- regex: 'Cpanel-HTTP-Client(?:/(\d+[\.\d]+))?'
|
|
65
96
|
name: 'cPanel HTTP Client'
|
|
66
97
|
version: '$1'
|
|
98
|
+
url: 'https://www.cpanel.net/'
|
|
67
99
|
|
|
68
|
-
# AnyEvent HTTP
|
|
100
|
+
# AnyEvent HTTP
|
|
69
101
|
- regex: 'AnyEvent-HTTP(?:/(\d+[\.\d]+))?'
|
|
70
102
|
name: 'AnyEvent HTTP'
|
|
71
103
|
version: '$1'
|
|
104
|
+
url: 'http://software.schmorp.de/pkg/AnyEvent'
|
|
72
105
|
|
|
73
|
-
# SlimerJS
|
|
106
|
+
# SlimerJS
|
|
74
107
|
- regex: 'SlimerJS/(\d+[\.\d]+)'
|
|
75
108
|
name: 'SlimerJS'
|
|
76
109
|
version: '$1'
|
|
110
|
+
url: 'https://www.slimerjs.org/'
|
|
77
111
|
|
|
78
112
|
- regex: 'Wget(?:/(\d+[\.\d]+))?'
|
|
79
113
|
name: 'Wget'
|
|
@@ -83,6 +117,11 @@
|
|
|
83
117
|
name: 'Guzzle (PHP HTTP Client)'
|
|
84
118
|
version: '$1'
|
|
85
119
|
|
|
120
|
+
# symphony php http client
|
|
121
|
+
- regex: '^Symfony HttpClient/'
|
|
122
|
+
name: 'Symfony'
|
|
123
|
+
version: '$1'
|
|
124
|
+
|
|
86
125
|
- regex: '(?:lib)?curl(?:/(\d+[\.\d]+))?'
|
|
87
126
|
name: 'curl'
|
|
88
127
|
version: '$1'
|
|
@@ -96,7 +135,7 @@
|
|
|
96
135
|
version: '$1'
|
|
97
136
|
url: 'https://pypi.org/project/httplib2/'
|
|
98
137
|
|
|
99
|
-
- regex: 'Python-
|
|
138
|
+
- regex: 'Python-urllib3?(?:/?(\d+[\.\d]+))?'
|
|
100
139
|
name: 'Python urllib'
|
|
101
140
|
version: '$1'
|
|
102
141
|
|
|
@@ -121,9 +160,11 @@
|
|
|
121
160
|
version: '$1'
|
|
122
161
|
url: 'https://github.com/grpc/grpc-java'
|
|
123
162
|
|
|
163
|
+
# java library
|
|
124
164
|
- regex: '(?:okhttp|network-okhttp3)/([\d\.]+)'
|
|
125
165
|
name: 'OkHttp'
|
|
126
166
|
version: '$1'
|
|
167
|
+
|
|
127
168
|
- regex: 'okhttp3-([\d\.]+)'
|
|
128
169
|
name: 'OkHttp'
|
|
129
170
|
version: '$1'
|
|
@@ -135,12 +176,12 @@
|
|
|
135
176
|
- regex: 'HTTP_Request2(?:/(\d+[\.\d]+))?'
|
|
136
177
|
name: 'HTTP_Request2'
|
|
137
178
|
version: '$1'
|
|
138
|
-
url: '
|
|
179
|
+
url: 'https://pear.php.net/package/http_request2'
|
|
139
180
|
|
|
140
181
|
- regex: 'Mechanize(?:/(\d+[\.\d]+))?'
|
|
141
182
|
name: 'Mechanize'
|
|
142
183
|
version: '$1'
|
|
143
|
-
url: '
|
|
184
|
+
url: 'https://github.com/sparklemotion/mechanize'
|
|
144
185
|
|
|
145
186
|
- regex: 'aiohttp(?:/(\d+[\.\d]+))?'
|
|
146
187
|
name: 'aiohttp'
|
|
@@ -174,14 +215,14 @@
|
|
|
174
215
|
name: 'HTTPie'
|
|
175
216
|
version: '$1'
|
|
176
217
|
|
|
177
|
-
- regex: 'rest-client/(\d
|
|
218
|
+
- regex: 'rest-client/(\d+\.[\.\d]+) .*ruby'
|
|
178
219
|
name: 'REST Client for Ruby'
|
|
179
220
|
version: '$1'
|
|
180
221
|
|
|
181
222
|
- regex: 'RestSharp/(\d+[\.\d]+)'
|
|
182
223
|
name: 'RestSharp'
|
|
183
224
|
version: '$1'
|
|
184
|
-
url: '
|
|
225
|
+
url: 'https://github.com/restsharp/RestSharp'
|
|
185
226
|
|
|
186
227
|
- regex: 'scalaj-http/(\d+[\.\d]+)'
|
|
187
228
|
name: 'ScalaJ HTTP'
|
|
@@ -193,7 +234,7 @@
|
|
|
193
234
|
version: '$1'
|
|
194
235
|
url: 'https://metacpan.org/pod/REST::Client'
|
|
195
236
|
|
|
196
|
-
- regex: 'node-fetch
|
|
237
|
+
- regex: 'node-fetch/?(\d+[\.\d]+)?'
|
|
197
238
|
name: 'Node Fetch'
|
|
198
239
|
version: '$1'
|
|
199
240
|
url: 'https://github.com/node-fetch/node-fetch'
|
|
@@ -249,7 +290,7 @@
|
|
|
249
290
|
name: 'Aria2'
|
|
250
291
|
version: '$1'
|
|
251
292
|
|
|
252
|
-
- regex: 'BTWebClient/'
|
|
293
|
+
- regex: '(?:BTWebClient/|^uTorrent/)'
|
|
253
294
|
name: 'uTorrent'
|
|
254
295
|
version: ''
|
|
255
296
|
|
|
@@ -281,7 +322,7 @@
|
|
|
281
322
|
name: 'jsdom'
|
|
282
323
|
version: '$1'
|
|
283
324
|
|
|
284
|
-
# hackney (https://github.com/benoitc/hackney)
|
|
325
|
+
# hackney (https://github.com/benoitc/hackney) (elixir)
|
|
285
326
|
- regex: 'hackney/([\.\d]+)'
|
|
286
327
|
name: 'hackney'
|
|
287
328
|
version: '$1'
|
|
@@ -372,3 +413,110 @@
|
|
|
372
413
|
- regex: 'axios(?:/?(\d+[\.\d]+))?'
|
|
373
414
|
name: Axios
|
|
374
415
|
version: '$1'
|
|
416
|
+
|
|
417
|
+
# Classier solution for file uploads for Rails, Sinatra and other Ruby web frameworks
|
|
418
|
+
- regex: '^CarrierWave/(\d+\.[.\d]+)'
|
|
419
|
+
name: 'CarrierWave'
|
|
420
|
+
version: '$1'
|
|
421
|
+
|
|
422
|
+
- regex: '^Deno/(\d+\.[.\d]+)'
|
|
423
|
+
name: 'Deno'
|
|
424
|
+
version: '$1'
|
|
425
|
+
|
|
426
|
+
# Streaming downloads using net/http, http.rb, HTTPX or wget (ruby)
|
|
427
|
+
- regex: '^Down/(\d+\.[.\d]+)'
|
|
428
|
+
name: 'Down'
|
|
429
|
+
version: '$1'
|
|
430
|
+
|
|
431
|
+
# various programs can use this, like vlc, but the underlying lib is ffmpeg
|
|
432
|
+
- regex: '^Lavf/'
|
|
433
|
+
name: 'ffmpeg'
|
|
434
|
+
version: '$1'
|
|
435
|
+
|
|
436
|
+
- regex: '^FileDownloader/(\d+\.[.\d]+)'
|
|
437
|
+
name: 'FileDownloader'
|
|
438
|
+
version: '$1'
|
|
439
|
+
|
|
440
|
+
# Allows managing large files with git, without storing the file contents in git
|
|
441
|
+
- regex: '^git-annex/(\d+\.[.\d]+)'
|
|
442
|
+
name: 'git-annex'
|
|
443
|
+
version: '$1'
|
|
444
|
+
|
|
445
|
+
- regex: '^GStreamer(?: souphttpsrc)[ /](\d+\.[.\d]+)?'
|
|
446
|
+
name: 'GStreamer'
|
|
447
|
+
version: '$1'
|
|
448
|
+
|
|
449
|
+
# A small, simple, correct HTTP/1.1 client (Perl)
|
|
450
|
+
- regex: '^HTTP-Tiny/(\d+\.[.\d]+)'
|
|
451
|
+
name: 'HTTP:Tiny'
|
|
452
|
+
version: '$1'
|
|
453
|
+
|
|
454
|
+
- regex: 'KaiOS Downloader'
|
|
455
|
+
name: 'KaiOS Downloader'
|
|
456
|
+
version: ''
|
|
457
|
+
|
|
458
|
+
# HTTP client/server library for GNOME
|
|
459
|
+
- regex: '^libsoup/(\d+\.[.\d]+)'
|
|
460
|
+
name: 'libsoup'
|
|
461
|
+
version: '$1'
|
|
462
|
+
|
|
463
|
+
- regex: '^Android\.LVLDM$'
|
|
464
|
+
name: 'Android License Verification Library'
|
|
465
|
+
version: '$1'
|
|
466
|
+
|
|
467
|
+
# A file downloader library for Android with pause and resume support
|
|
468
|
+
- regex: '^PRDownloader$'
|
|
469
|
+
name: 'PRDownloader'
|
|
470
|
+
version: ''
|
|
471
|
+
|
|
472
|
+
# a rust http library
|
|
473
|
+
- regex: '^reqwest/(\d+\.[.\d]+)'
|
|
474
|
+
name: 'reqwest'
|
|
475
|
+
version: '$1'
|
|
476
|
+
|
|
477
|
+
# lua http library
|
|
478
|
+
- regex: '^resty-requests'
|
|
479
|
+
name: 'resty-requests'
|
|
480
|
+
version: ''
|
|
481
|
+
|
|
482
|
+
# ruby core lib http download
|
|
483
|
+
- regex: '^Ruby'
|
|
484
|
+
name: 'ruby'
|
|
485
|
+
version: ''
|
|
486
|
+
|
|
487
|
+
# SFSafariViewController, some safari service
|
|
488
|
+
- regex: '^SafariViewService/(\d+\.[.\d]+)'
|
|
489
|
+
name: 'Safari View Service'
|
|
490
|
+
version: '$1'
|
|
491
|
+
|
|
492
|
+
# a nodejs lib
|
|
493
|
+
- regex: '^undici$'
|
|
494
|
+
name: 'undici'
|
|
495
|
+
version: ''
|
|
496
|
+
|
|
497
|
+
# URL, an emacs plugin
|
|
498
|
+
- regex: '^URL/Emacs Emacs/(\d+\.[.\d]+)'
|
|
499
|
+
name: 'Emacs'
|
|
500
|
+
version: '$1'
|
|
501
|
+
|
|
502
|
+
- regex: '^FDM[ /]([\d\.]+)'
|
|
503
|
+
name: 'Free Download Manager'
|
|
504
|
+
version: '$1'
|
|
505
|
+
|
|
506
|
+
# 'https://github.com/lingochamp/okdownload'
|
|
507
|
+
- regex: 'OkDownload/([\d\.]+)'
|
|
508
|
+
name: 'OKDownload Library'
|
|
509
|
+
version: '$1'
|
|
510
|
+
|
|
511
|
+
# podcast host https://libsyn.com (probably an importer)
|
|
512
|
+
- regex: '^Libsyn4-?(?:peek|download)$'
|
|
513
|
+
name: 'Libsyn'
|
|
514
|
+
version: ''
|
|
515
|
+
|
|
516
|
+
# any ios application that uses apple core media but doesn't set its user
|
|
517
|
+
# agent will default to this, always with 1.0.0 version.
|
|
518
|
+
# there was a time when (not even that long ago) apple didn't let you set
|
|
519
|
+
# a user agent so a ton of random applications still identify themselves this way.
|
|
520
|
+
- regex: 'AppleCoreMedia/1\.0\.0'
|
|
521
|
+
name: 'iOS Application'
|
|
522
|
+
version: ''
|
|
@@ -77,6 +77,10 @@
|
|
|
77
77
|
name: 'Winamp'
|
|
78
78
|
version: '$1'
|
|
79
79
|
|
|
80
|
+
- regex: 'J\. River Internet Reader/(\d+\.[.\d]+)'
|
|
81
|
+
name: 'JRiver Media Center'
|
|
82
|
+
version: '$1'
|
|
83
|
+
|
|
80
84
|
- regex: '(?:Windows-Media-Player|NSPlayer)(?:/(\d+[\.\d]+))?'
|
|
81
85
|
name: 'Windows Media Player'
|
|
82
86
|
version: '$1'
|
|
@@ -124,3 +128,46 @@
|
|
|
124
128
|
- regex: 'Downcast/(\d+\.[\d\.]+)?'
|
|
125
129
|
name: 'Downcast'
|
|
126
130
|
version: '$1'
|
|
131
|
+
|
|
132
|
+
- regex: '^Juice/([\d\.]+)'
|
|
133
|
+
name: 'Juice'
|
|
134
|
+
version: '$1'
|
|
135
|
+
|
|
136
|
+
- regex: 'just_audio/(\d+\.[.\d]+)'
|
|
137
|
+
name: 'Just Audio'
|
|
138
|
+
version: '$1'
|
|
139
|
+
|
|
140
|
+
# https://apps.kde.org/kasts/ ?
|
|
141
|
+
- regex: '^Kasts/(\d+\.[.\d]+)'
|
|
142
|
+
name: 'Kasts'
|
|
143
|
+
version: '$1'
|
|
144
|
+
|
|
145
|
+
- regex: 'MixerBox(?:%20Pro)?/([.\d]+)'
|
|
146
|
+
name: 'MixerBox'
|
|
147
|
+
version: '$1'
|
|
148
|
+
|
|
149
|
+
- regex: '^MusicBee(?:/(\d+\.[.\d]+))?'
|
|
150
|
+
name: 'MusicBee'
|
|
151
|
+
version: '$1'
|
|
152
|
+
|
|
153
|
+
- regex: '^amarok/(\d+\.[.\d]+)'
|
|
154
|
+
name: 'Amarok'
|
|
155
|
+
version: '$1'
|
|
156
|
+
|
|
157
|
+
- regex: 'Hubhopper/([\d\.]+)'
|
|
158
|
+
name: 'Hubhopper'
|
|
159
|
+
version: '$1'
|
|
160
|
+
|
|
161
|
+
- regex: 'StudioDisplay/(\d+\.[\d\.]+)'
|
|
162
|
+
name: 'StudioDisplay'
|
|
163
|
+
version: '$1'
|
|
164
|
+
|
|
165
|
+
# JHelioviewer (https://www.jhelioviewer.org/)
|
|
166
|
+
- regex: 'JHV/SWHV-([.\d+]+)'
|
|
167
|
+
name: 'JHelioviewer'
|
|
168
|
+
version: '$1'
|
|
169
|
+
|
|
170
|
+
# Xtream Player (https://play.google.com/store/apps/details?id=com.devcoder.iptvxtreamplayer)
|
|
171
|
+
- regex: 'com.devcoder.iptvxtreamplayer'
|
|
172
|
+
name: 'Xtream Player'
|
|
173
|
+
version: ''
|