ua-parser-js 2.0.0-beta.2 → 2.0.0-rc.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.
Files changed (198) hide show
  1. package/README.md +26 -22
  2. package/dist/icons/color/LICENSE.md +3 -0
  3. package/dist/icons/color/browser/android-browser.svg +1 -0
  4. package/dist/icons/color/browser/avant.png +0 -0
  5. package/dist/icons/color/browser/basilisk.png +0 -0
  6. package/dist/icons/color/browser/basilisk.svg +1 -0
  7. package/dist/icons/color/browser/brave.png +0 -0
  8. package/dist/icons/color/browser/brave.svg +1 -0
  9. package/dist/icons/color/browser/chrome.png +0 -0
  10. package/dist/icons/color/browser/chrome.svg +1 -0
  11. package/dist/icons/color/browser/chromium.png +0 -0
  12. package/dist/icons/color/browser/chromium.svg +1 -0
  13. package/dist/icons/color/browser/coc-coc.png +0 -0
  14. package/dist/icons/color/browser/default.png +0 -0
  15. package/dist/icons/color/browser/default.svg +1 -0
  16. package/dist/icons/color/browser/dolphin.png +0 -0
  17. package/dist/icons/color/browser/edge.png +0 -0
  18. package/dist/icons/color/browser/edge.svg +1 -0
  19. package/dist/icons/color/browser/electron.png +0 -0
  20. package/dist/icons/color/browser/electron.svg +1 -0
  21. package/dist/icons/color/browser/falkon.png +0 -0
  22. package/dist/icons/color/browser/falkon.svg +1 -0
  23. package/dist/icons/color/browser/firefox-reality.png +0 -0
  24. package/dist/icons/color/browser/firefox-reality.svg +1 -0
  25. package/dist/icons/color/browser/firefox.png +0 -0
  26. package/dist/icons/color/browser/firefox.svg +1 -0
  27. package/dist/icons/color/browser/gsa.svg +9 -0
  28. package/dist/icons/color/browser/icecat.png +0 -0
  29. package/dist/icons/color/browser/ie.svg +6 -0
  30. package/dist/icons/color/browser/konqueror.png +0 -0
  31. package/dist/icons/color/browser/konqueror.svg +1 -0
  32. package/dist/icons/color/browser/maxthon.png +0 -0
  33. package/dist/icons/color/browser/midori.png +0 -0
  34. package/dist/icons/color/browser/midori.svg +1 -0
  35. package/dist/icons/color/browser/netsurf.png +0 -0
  36. package/dist/icons/color/browser/netsurf.svg +1 -0
  37. package/dist/icons/color/browser/opera-gx.png +0 -0
  38. package/dist/icons/color/browser/opera-gx.svg +1 -0
  39. package/dist/icons/color/browser/opera-mini.png +0 -0
  40. package/dist/icons/color/browser/opera-touch.png +0 -0
  41. package/dist/icons/color/browser/opera.png +0 -0
  42. package/dist/icons/color/browser/opera.svg +1 -0
  43. package/dist/icons/color/browser/palemoon.png +0 -0
  44. package/dist/icons/color/browser/puffin.png +0 -0
  45. package/dist/icons/color/browser/safari.png +0 -0
  46. package/dist/icons/color/browser/safari.svg +1 -0
  47. package/dist/icons/color/browser/samsung-internet.png +0 -0
  48. package/dist/icons/color/browser/samsung-internet.svg +1 -0
  49. package/dist/icons/color/browser/seamonkey.png +0 -0
  50. package/dist/icons/color/browser/silk.png +0 -0
  51. package/dist/icons/color/browser/sogou-mobile.png +0 -0
  52. package/dist/icons/color/browser/ucbrowser.png +0 -0
  53. package/dist/icons/color/browser/ucbrowser.svg +1 -0
  54. package/dist/icons/color/browser/vivaldi.png +0 -0
  55. package/dist/icons/color/browser/vivaldi.svg +1 -0
  56. package/dist/icons/color/browser/webkit.png +0 -0
  57. package/dist/icons/color/browser/webkit.svg +1 -0
  58. package/dist/icons/color/browser/yandex.png +0 -0
  59. package/dist/icons/color/os/centos.svg +1 -0
  60. package/dist/icons/mono/LICENSE.md +3 -0
  61. package/dist/icons/mono/browser/alipay.svg +1 -0
  62. package/dist/icons/mono/browser/android-browser.svg +1 -0
  63. package/dist/icons/mono/browser/avast-secure-browser.svg +1 -0
  64. package/dist/icons/mono/browser/baidu-browser.svg +1 -0
  65. package/dist/icons/mono/browser/brave.svg +1 -0
  66. package/dist/icons/mono/browser/chrome-headless.svg +1 -0
  67. package/dist/icons/mono/browser/chrome-webview.svg +1 -0
  68. package/dist/icons/mono/browser/chrome.svg +1 -0
  69. package/dist/icons/mono/browser/chromium.svg +1 -0
  70. package/dist/icons/mono/browser/duckduckgo.svg +1 -0
  71. package/dist/icons/mono/browser/edge.svg +1 -0
  72. package/dist/icons/mono/browser/electron.svg +1 -0
  73. package/dist/icons/mono/browser/facebook.svg +1 -0
  74. package/dist/icons/mono/browser/firefox-focus.svg +1 -0
  75. package/dist/icons/mono/browser/firefox-reality.svg +1 -0
  76. package/dist/icons/mono/browser/firefox.svg +1 -0
  77. package/dist/icons/mono/browser/gsa.svg +1 -0
  78. package/dist/icons/mono/browser/huawei-browser.svg +1 -0
  79. package/dist/icons/mono/browser/icecat.svg +1 -0
  80. package/dist/icons/mono/browser/ie.svg +1 -0
  81. package/dist/icons/mono/browser/instagram.svg +1 -0
  82. package/dist/icons/mono/browser/jasmine.svg +1 -0
  83. package/dist/icons/mono/browser/kakaotalk.svg +1 -0
  84. package/dist/icons/mono/browser/klarna.svg +1 -0
  85. package/dist/icons/mono/browser/line.svg +1 -0
  86. package/dist/icons/mono/browser/linkedin.svg +1 -0
  87. package/dist/icons/mono/browser/miui-browser.svg +1 -0
  88. package/dist/icons/mono/browser/mobile-chrome.svg +1 -0
  89. package/dist/icons/mono/browser/mobile-firefox.svg +1 -0
  90. package/dist/icons/mono/browser/mobile-safari.svg +1 -0
  91. package/dist/icons/mono/browser/mozilla.svg +1 -0
  92. package/dist/icons/mono/browser/naver.svg +1 -0
  93. package/dist/icons/mono/browser/nokia-browser.svg +1 -0
  94. package/dist/icons/mono/browser/oculus-browser.svg +1 -0
  95. package/dist/icons/mono/browser/opera-coast.svg +1 -0
  96. package/dist/icons/mono/browser/opera-gx.svg +1 -0
  97. package/dist/icons/mono/browser/opera-mini.svg +1 -0
  98. package/dist/icons/mono/browser/opera-mobi.svg +1 -0
  99. package/dist/icons/mono/browser/opera-tablet.svg +1 -0
  100. package/dist/icons/mono/browser/opera-touch.svg +1 -0
  101. package/dist/icons/mono/browser/opera.svg +1 -0
  102. package/dist/icons/mono/browser/qqbrowser.svg +1 -0
  103. package/dist/icons/mono/browser/qqbrowserlite.svg +1 -0
  104. package/dist/icons/mono/browser/safari.svg +1 -0
  105. package/dist/icons/mono/browser/sailfish-browser.svg +1 -0
  106. package/dist/icons/mono/browser/samsung-internet.svg +1 -0
  107. package/dist/icons/mono/browser/smart-lenovo-browser.svg +1 -0
  108. package/dist/icons/mono/browser/snapchat.svg +1 -0
  109. package/dist/icons/mono/browser/sogou-explorer.svg +1 -0
  110. package/dist/icons/mono/browser/sogou-mobile.svg +1 -0
  111. package/dist/icons/mono/browser/tesla.svg +1 -0
  112. package/dist/icons/mono/browser/tiktok.svg +1 -0
  113. package/dist/icons/mono/browser/twitter.svg +1 -0
  114. package/dist/icons/mono/browser/vivaldi.svg +1 -0
  115. package/dist/icons/mono/browser/vivo-browser.svg +1 -0
  116. package/dist/icons/mono/browser/wechat.svg +1 -0
  117. package/dist/icons/mono/browser/weibo.svg +1 -0
  118. package/dist/icons/mono/browser/yandex.svg +1 -0
  119. package/dist/icons/mono/device/acer.svg +1 -0
  120. package/dist/icons/mono/device/amazon.svg +1 -0
  121. package/dist/icons/mono/device/apple.svg +1 -0
  122. package/dist/icons/mono/device/asus.svg +1 -0
  123. package/dist/icons/mono/device/att.svg +1 -0
  124. package/dist/icons/mono/device/blackberry.svg +1 -0
  125. package/dist/icons/mono/device/dell.svg +1 -0
  126. package/dist/icons/mono/device/facebook.svg +1 -0
  127. package/dist/icons/mono/device/fairphone.svg +1 -0
  128. package/dist/icons/mono/device/google.svg +1 -0
  129. package/dist/icons/mono/device/hp.svg +1 -0
  130. package/dist/icons/mono/device/huawei.svg +1 -0
  131. package/dist/icons/mono/device/lenovo.svg +1 -0
  132. package/dist/icons/mono/device/lg.svg +1 -0
  133. package/dist/icons/mono/device/meizu.svg +1 -0
  134. package/dist/icons/mono/device/microsoft.svg +1 -0
  135. package/dist/icons/mono/device/motorola.svg +1 -0
  136. package/dist/icons/mono/device/nintendo.svg +1 -0
  137. package/dist/icons/mono/device/nokia.svg +1 -0
  138. package/dist/icons/mono/device/nvidia.svg +1 -0
  139. package/dist/icons/mono/device/oneplus.svg +1 -0
  140. package/dist/icons/mono/device/oppo.svg +1 -0
  141. package/dist/icons/mono/device/panasonic.svg +1 -0
  142. package/dist/icons/mono/device/roku.svg +1 -0
  143. package/dist/icons/mono/device/samsung.svg +1 -0
  144. package/dist/icons/mono/device/siemens.svg +1 -0
  145. package/dist/icons/mono/device/sony.svg +1 -0
  146. package/dist/icons/mono/device/tesla.svg +1 -0
  147. package/dist/icons/mono/device/vivo.svg +1 -0
  148. package/dist/icons/mono/device/vodafone.svg +1 -0
  149. package/dist/icons/mono/device/xiaomi.svg +1 -0
  150. package/dist/icons/mono/device/zebra.svg +1 -0
  151. package/dist/icons/mono/os/android.svg +1 -0
  152. package/dist/icons/mono/os/arch.svg +1 -0
  153. package/dist/icons/mono/os/blackberry.svg +1 -0
  154. package/dist/icons/mono/os/centos.svg +1 -0
  155. package/dist/icons/mono/os/chrome-os.svg +1 -0
  156. package/dist/icons/mono/os/chromecast.svg +1 -0
  157. package/dist/icons/mono/os/debian.svg +1 -0
  158. package/dist/icons/mono/os/deepin.svg +1 -0
  159. package/dist/icons/mono/os/elementary-os.svg +1 -0
  160. package/dist/icons/mono/os/fedora.svg +1 -0
  161. package/dist/icons/mono/os/firefox.svg +1 -0
  162. package/dist/icons/mono/os/freebsd.svg +1 -0
  163. package/dist/icons/mono/os/gentoo.svg +1 -0
  164. package/dist/icons/mono/os/gnu.svg +1 -0
  165. package/dist/icons/mono/os/harmonyos.svg +1 -0
  166. package/dist/icons/mono/os/ios.svg +1 -0
  167. package/dist/icons/mono/os/kaios.svg +1 -0
  168. package/dist/icons/mono/os/linux.svg +1 -0
  169. package/dist/icons/mono/os/macos.svg +1 -0
  170. package/dist/icons/mono/os/manjaro.svg +1 -0
  171. package/dist/icons/mono/os/mint.svg +1 -0
  172. package/dist/icons/mono/os/netbsd.svg +1 -0
  173. package/dist/icons/mono/os/nintendo.svg +1 -0
  174. package/dist/icons/mono/os/openbsd.svg +1 -0
  175. package/dist/icons/mono/os/playstation.svg +1 -0
  176. package/dist/icons/mono/os/raspbian.svg +1 -0
  177. package/dist/icons/mono/os/redhat.svg +1 -0
  178. package/dist/icons/mono/os/sailfish.svg +1 -0
  179. package/dist/icons/mono/os/slackware.svg +1 -0
  180. package/dist/icons/mono/os/suse.svg +1 -0
  181. package/dist/icons/mono/os/ubuntu.svg +1 -0
  182. package/dist/icons/mono/os/windows.svg +1 -0
  183. package/dist/icons/mono/os/xbox.svg +1 -0
  184. package/dist/ua-parser.min.js +3 -3
  185. package/dist/ua-parser.pack.js +3 -3
  186. package/package.json +11 -6
  187. package/script/cli.js +4 -0
  188. package/src/enums/ua-parser-enums.js +30 -9
  189. package/src/enums/ua-parser-enums.mjs +30 -9
  190. package/src/extensions/ua-parser-extensions.d.ts +4 -2
  191. package/src/extensions/ua-parser-extensions.js +169 -48
  192. package/src/extensions/ua-parser-extensions.mjs +169 -48
  193. package/src/helpers/ua-parser-helpers.d.ts +12 -4
  194. package/src/helpers/ua-parser-helpers.js +44 -5
  195. package/src/helpers/ua-parser-helpers.mjs +45 -6
  196. package/src/main/ua-parser.d.ts +7 -4
  197. package/src/main/ua-parser.js +121 -54
  198. package/src/main/ua-parser.mjs +121 -54
@@ -3,7 +3,7 @@
3
3
  // Source: /src/enums/ua-parser-enums.js
4
4
 
5
5
  ///////////////////////////////////////////////
6
- /* Enums for UAParser.js v2.0.0-beta.2
6
+ /* Enums for UAParser.js v2.0.0-rc.1
7
7
  https://github.com/faisalman/ua-parser-js
8
8
  Author: Faisal Salman <f@faisalman.com>
9
9
  AGPLv3 License */
@@ -12,8 +12,8 @@
12
12
  /*jshint esversion: 6 */
13
13
 
14
14
  const Browser = Object.freeze({
15
- _2345_EXPLORER: '2345Explorer',
16
- _360: '360 Browser',
15
+ '2345_EXPLORER': '2345Explorer',
16
+ '360': '360 Browser',
17
17
  ALIPAY: 'Alipay',
18
18
  AMAYA: 'Amaya',
19
19
  ANDROID: 'Android Browser',
@@ -54,8 +54,9 @@ const Browser = Object.freeze({
54
54
  FENNEC: 'Fennec',
55
55
  FLOCK: 'Flock',
56
56
  FLOW: 'Flow',
57
- GO: 'Go Browser',
57
+ GO: 'GoBrowser',
58
58
  GOOGLE_SEARCH: 'GSA',
59
+ HELIO: 'Helio',
59
60
  HEYTAP: 'HeyTap',
60
61
  HUAWEI: 'Huawei Browser',
61
62
  ICAB: 'iCab',
@@ -108,6 +109,7 @@ const Browser = Object.freeze({
108
109
  PALEMOON: 'PaleMoon',
109
110
  PHANTOMJS: 'PhantomJS',
110
111
  PHOENIX: 'Phoenix',
112
+ PICOBROWSER: 'Pico Browser',
111
113
  POLARIS: 'Polaris',
112
114
  PUFFIN: 'Puffin',
113
115
  QQ: 'QQBrowser',
@@ -132,9 +134,9 @@ const Browser = Object.freeze({
132
134
  TESLA: 'Tesla',
133
135
  TIKTOK: 'TikTok',
134
136
  TIZEN: 'Tizen Browser',
137
+ TWITTER: 'Twitter',
135
138
  UC: 'UCBrowser',
136
139
  UP: 'UP.Browser',
137
- VIERA: 'Viera',
138
140
  VIVALDI: 'Vivaldi',
139
141
  VIVO: 'Vivo Browser',
140
142
  W3M: 'w3m',
@@ -143,12 +145,24 @@ const Browser = Object.freeze({
143
145
  WECHAT: 'WeChat',
144
146
  WEIBO: 'Weibo',
145
147
  WHALE: 'Whale',
148
+ WOLVIC: 'Wolvic',
146
149
  YANDEX: 'Yandex'
147
150
 
148
151
  // TODO : test!
149
152
  });
150
153
 
154
+ const BrowserType = Object.freeze({
155
+ CRAWLER: 'crawler',
156
+ CLI: 'cli',
157
+ EMAIL: 'email',
158
+ FETCHER: 'fetcher',
159
+ INAPP: 'inapp',
160
+ MEDIAPLAYER: 'mediaplayer',
161
+ MODULE: 'module'
162
+ });
163
+
151
164
  const CPU = Object.freeze({
165
+ '68K': '68k',
152
166
  ARM : 'arm',
153
167
  ARM_64: 'arm64',
154
168
  ARM_HF: 'armhf',
@@ -159,7 +173,6 @@ const CPU = Object.freeze({
159
173
  IRIX_64: 'irix64',
160
174
  MIPS: 'mips',
161
175
  MIPS_64: 'mips64',
162
- M68K: '68k',
163
176
  PA_RISC: 'pa-risc',
164
177
  PPC: 'ppc',
165
178
  SPARC: 'sparc',
@@ -175,7 +188,8 @@ const Device = Object.freeze({
175
188
  MOBILE: 'mobile',
176
189
  SMARTTV: 'smarttv',
177
190
  TABLET: 'tablet',
178
- WEARABLE: 'wearable'
191
+ WEARABLE: 'wearable',
192
+ XR: 'xr'
179
193
  });
180
194
 
181
195
  const Vendor = Object.freeze({
@@ -199,6 +213,7 @@ const Vendor = Object.freeze({
199
213
  HTC: 'HTC',
200
214
  HUAWEI: 'Huawei',
201
215
  INFINIX: 'Infinix',
216
+ ITEL: 'itel',
202
217
  JOLLA: 'Jolla',
203
218
  KOBO: 'Kobo',
204
219
  LENOVO: 'Lenovo',
@@ -209,6 +224,7 @@ const Vendor = Object.freeze({
209
224
  NEXIAN: 'Nexian',
210
225
  NINTENDO: 'Nintendo',
211
226
  NOKIA: 'Nokia',
227
+ NOTHING: 'Nothing',
212
228
  NVIDIA: 'Nvidia',
213
229
  ONEPLUS: 'OnePlus',
214
230
  OPPO: 'OPPO',
@@ -216,6 +232,7 @@ const Vendor = Object.freeze({
216
232
  PALM: 'Palm',
217
233
  PANASONIC: 'Panasonic',
218
234
  PEBBLE: 'Pebble',
235
+ PICO: 'Pico',
219
236
  POLYTRON: 'Polytron',
220
237
  REALME: 'Realme',
221
238
  RIM: 'RIM',
@@ -225,6 +242,7 @@ const Vendor = Object.freeze({
225
242
  SIEMENS: 'Siemens',
226
243
  SONY: 'Sony',
227
244
  SPRINT: 'Sprint',
245
+ TCL: 'TCL',
228
246
  TECHNISAT: 'TechniSAT',
229
247
  TECNO: 'Tecno',
230
248
  TESLA: 'Tesla',
@@ -241,6 +259,7 @@ const Vendor = Object.freeze({
241
259
 
242
260
  const Engine = Object.freeze({
243
261
  AMAYA: 'Amaya',
262
+ ARKWEB: 'ArkWeb',
244
263
  BLINK: 'Blink',
245
264
  EDGEHTML: 'EdgeHTML',
246
265
  FLOW: 'Flow',
@@ -307,12 +326,14 @@ const OS = Object.freeze({
307
326
  NETRANGE: 'NetRange',
308
327
  NETTV: 'NetTV',
309
328
  NINTENDO: 'Nintendo',
329
+ OPENHARMONY: 'OpenHarmony',
310
330
  OPENBSD: 'OpenBSD',
311
331
  OPENVMS: 'OpenVMS',
312
332
  OS2: 'OS/2',
313
333
  PALM: 'Palm',
314
334
  PC_BSD: 'PC-BSD',
315
335
  PCLINUXOS: 'PCLinuxOS',
336
+ PICO: 'Pico',
316
337
  PLAN9: 'Plan9',
317
338
  PLAYSTATION: 'PlayStation',
318
339
  QNX: 'QNX',
@@ -332,7 +353,6 @@ const OS = Object.freeze({
332
353
  UBUNTU: 'Ubuntu',
333
354
  UNIX: 'Unix',
334
355
  VECTORLINUX: 'VectorLinux',
335
- VIERA: 'Viera',
336
356
  WATCHOS: 'watchOS',
337
357
  WEBOS: 'WebOS',
338
358
  WINDOWS: 'Windows',
@@ -345,7 +365,8 @@ const OS = Object.freeze({
345
365
  });
346
366
 
347
367
  export {
348
- Browser,
368
+ Browser,
369
+ BrowserType,
349
370
  CPU,
350
371
  Device,
351
372
  Vendor,
@@ -1,13 +1,15 @@
1
- // Type definitions for Helpers submodule of UAParser.js v2.0.0-beta.2
1
+ // Type definitions for Helpers submodule of UAParser.js v2.0.0-beta.3
2
2
  // Project: https://github.com/faisalman/ua-parser-js
3
3
  // Definitions by: Faisal Salman <https://github.com/faisalman>
4
4
 
5
5
  import type { UAParserExt } from "../main/ua-parser";
6
6
 
7
- export const Apps: UAParserExt;
8
7
  export const Bots: UAParserExt;
9
8
  export const CLIs: UAParserExt;
9
+ export const Crawlers: UAParserExt;
10
10
  export const ExtraDevices: UAParserExt;
11
11
  export const Emails: UAParserExt;
12
+ export const Fetchers: UAParserExt;
13
+ export const InApps: UAParserExt;
12
14
  export const MediaPlayers: UAParserExt;
13
15
  export const Modules: UAParserExt;
@@ -1,5 +1,5 @@
1
1
  ///////////////////////////////////////////////
2
- /* Extensions for UAParser.js v2.0.0-beta.2
2
+ /* Extensions for UAParser.js v2.0.0-rc.1
3
3
  https://github.com/faisalman/ua-parser-js
4
4
  Author: Faisal Salman <f@faisalman.com>
5
5
  AGPLv3 License */
@@ -14,33 +14,80 @@ const VENDOR = 'vendor';
14
14
  const VERSION = 'version';
15
15
  const MOBILE = 'mobile';
16
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 MODULE = 'module';
24
+
25
+ //////////////////////
26
+ // COMMAND LINE APPS
27
+ /////////////////////
17
28
 
18
- const Apps = Object.freeze({
29
+ const CLIs = Object.freeze({
19
30
  browser : [
20
- [/chatlyio\/([\d\.]+)/i], [VERSION, 'Slack', [TYPE, 'app']]
31
+ // wget / curl / lynx
32
+ [/(wget|curl|lynx)[\/ ]([\w\.]+)/i], [NAME, VERSION, [TYPE, CLI]]
21
33
  ]
22
34
  });
23
35
 
24
- const Bots = Object.freeze({
25
- browser : [
26
- // Googlebot / BingBot / MSNBot / FacebookBot
27
- [/((?:google|bing|msn|facebook)bot(?:[\-imagevdo]{0,6})|bingpreview)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'bot']],
28
-
29
- // GPTBot - https://platform.openai.com/docs/gptbot
30
- [/(gptbot)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'bot']],
36
+ ////////////////////////
37
+ // CRAWLERS / SPIDERS
38
+ ///////////////////////
31
39
 
32
- // Slackbot - https://api.slack.com/robots
33
- [/(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i], [NAME, VERSION, [TYPE, 'bot']]
34
- ]
35
- });
36
-
37
- const CLIs = Object.freeze({
40
+ const Crawlers = Object.freeze({
38
41
  browser : [
39
- // wget / curl / lynx
40
- [/(wget|curl|lynx)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'cli']]
42
+ [
43
+ // AhrefsBot - https://ahrefs.com/robot
44
+ // Amazonbot - https://developer.amazon.com/amazonbot
45
+ // Applebot - http://apple.com/go/applebot
46
+ // Bingbot - http://www.bing.com/bingbot.htm
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
+ // OpenAI Search - https://platform.openai.com/docs/bots
53
+ // SemrushBot - http://www.semrush.com/bot.html
54
+ /((?:ahrefs|amazon|apple|bing|dot|duckduck|facebook|gpt|mj12|oai-search|semrush)bot)\/([\w\.]+)/i,
55
+
56
+ // Baiduspider https://help.baidu.com/question?prod_id=99&class=0&id=3001
57
+ /(baiduspider)[-imagevdonsfcpr]{0,6}\/([\w\.]+)/i,
58
+
59
+ // ClaudeBot
60
+ /(claude(?:bot|-web))\/([\w\.]+)/i,
61
+
62
+ // Coc Coc Bot - https://help.coccoc.com/en/search-engine
63
+ /(coccocbot-(?:image|web))\/([\w\.]+)/i,
64
+
65
+ // Googlebot - http://www.google.com/bot.html
66
+ /(google(?:bot|other)(?:-image|-video|-news|-extended)?|(?:storebot-)?google(?:-inspectiontool)?)\/?([\w\.]*)/i,
67
+
68
+ // Sogou Spider
69
+ /(sogou (?:pic|head|web|orion|news) spider)\/([\w\.]+)/i,
70
+
71
+ // Yahoo! Japan - https://support.yahoo-net.jp/PccSearch/s/article/H000007955
72
+ /(y!?j-(?:asr|br[uw]|dscv|mmp|vsidx|wsc))\/([\w\.]+)/i,
73
+
74
+ // Yandex Bots - https://yandex.com/bots
75
+ /(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
76
+ ],
77
+
78
+ [NAME, VERSION, [TYPE, CRAWLER]],
79
+
80
+ // Bytespider
81
+ // Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
82
+ [/((?:bytespider|(?=yahoo! )slurp))/i],
83
+ [NAME, [TYPE, CRAWLER]]
41
84
  ]
42
85
  });
43
86
 
87
+ //////////////////
88
+ // EXTRA DEVICES
89
+ /////////////////
90
+
44
91
  const ExtraDevices = Object.freeze({
45
92
  device : [[
46
93
  /(nook)[\w ]+build\/(\w+)/i, // Nook
@@ -117,25 +164,80 @@ const ExtraDevices = Object.freeze({
117
164
  ]
118
165
  });
119
166
 
167
+ ///////////////
168
+ // EMAIL APPS
169
+ //////////////
170
+
120
171
  const Emails = Object.freeze({
121
172
  browser : [
122
- // Microsoft Outlook / Thunderbird
123
- [/(microsoft outlook|thunderbird)[\s\/]([\w\.]+)/i], [NAME, VERSION, [TYPE, 'email']]
173
+ // Microsoft Outlook / Thunderbird
174
+ [/(microsoft outlook|thunderbird)[\s\/]([\w\.]+)/i], [NAME, VERSION, [TYPE, EMAIL]]
175
+ ]
176
+ });
177
+
178
+ ///////////////////////
179
+ // ON-DEMAND SCRAPERS
180
+ //////////////////////
181
+
182
+ const Fetchers = Object.freeze({
183
+ browser : [
184
+ [
185
+ // AhrefsSiteAudit - https://ahrefs.com/robot/site-audit
186
+ // ChatGPT-User - https://platform.openai.com/docs/plugins/bot
187
+ // BingPreview / Mastodon / Pinterestbot / Redditbot / Rogerbot / Telegrambot / Twitterbot / UptimeRobot
188
+ /(ahrefssiteaudit|bingpreview|chatgpt-user|mastodon|(?:discord|linkedin|pinterest|reddit|roger|telegram|twitter|uptimero)bot)\/([\w\.]+)/i,
189
+
190
+ // Slackbot - https://api.slack.com/robots
191
+ /(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i,
192
+
193
+ // WhatsApp
194
+ /(whatsapp)\/([\w\.]+)[\/ ][ianw]/i,
195
+
196
+ // Yahoo! Japan
197
+ /(y!?j-dlc)\/([\w\.]+)/i,
198
+
199
+ // Yandex Bots - https://yandex.com/bots
200
+ /(yandex(?:calendar|direct(?:dyn)?|searchshop)|yadirectfetcher)\/([\w\.]+)/i,
201
+ /(yandex(?:sitelinks|userproxy))/i
202
+ ],
203
+ [NAME, VERSION, [TYPE, FETCHER]],
204
+
205
+ // Google Bots / Snapchat
206
+ [/(feedfetcher-google|google-read-aloud|(?=bot; )snapchat)/i],
207
+ [NAME, [TYPE, FETCHER]],
124
208
  ]
125
209
  });
126
210
 
211
+ ////////////////////
212
+ // IN-APP BROWSERS
213
+ ///////////////////
214
+
215
+ const InApps = Object.freeze({
216
+ browser : [
217
+ // Slack
218
+ [/chatlyio\/([\d\.]+)/i], [VERSION, 'Slack', [TYPE, INAPP]],
219
+
220
+ // Yahoo! Japan
221
+ [/jp\.co\.yahoo\.android\.yjtop\/([\d\.]+)/i], [VERSION, 'Yahoo! Japan', [TYPE, INAPP]]
222
+ ]
223
+ });
224
+
225
+ //////////////////////
226
+ // MEDIA PLAYER APPS
227
+ /////////////////////
228
+
127
229
  const MediaPlayers = Object.freeze({
128
230
  browser : [[
129
231
 
130
232
  /(apple(?:coremedia|))\/([\w\._]+)/i, // Generic Apple CoreMedia
131
233
  /(coremedia) v([\w\._]+)/i
132
- ], [NAME, VERSION], [
234
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
133
235
 
134
236
  /(aqualung|lyssna|bsplayer)\/([\w\.-]+)/i // Aqualung/Lyssna/BSPlayer
135
- ], [NAME, VERSION], [
237
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
136
238
 
137
239
  /(ares|ossproxy)\s([\w\.-]+)/i // Ares/OSSProxy
138
- ], [NAME, VERSION], [
240
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
139
241
 
140
242
  /(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\/([\w\.-]+)/i,
141
243
  // Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC
@@ -143,106 +245,125 @@ const MediaPlayers = Object.freeze({
143
245
  /(clementine|music player daemon)\s([\w\.-]+)/i, // Clementine/MPD
144
246
  /(lg player|nexplayer)\s([\d\.]+)/i,
145
247
  /player\/(nexplayer|lg player)\s([\w\.-]+)/i // NexPlayer/LG Player
146
- ], [NAME, VERSION], [
248
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
147
249
  /(nexplayer)\s([\w\.-]+)/i // Nexplayer
148
- ], [NAME, VERSION], [
250
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
149
251
 
150
252
  /(flrp)\/([\w\.-]+)/i // Flip Player
151
- ], [[NAME, 'Flip Player'], VERSION], [
253
+ ], [[NAME, 'Flip Player'], VERSION, [TYPE, MEDIAPLAYER]], [
152
254
 
153
255
  /(fstream|nativehost|queryseekspider|ia-archiver|facebookexternalhit)/i
154
256
  // FStream/NativeHost/QuerySeekSpider/IA Archiver/facebookexternalhit
155
- ], [NAME], [
257
+ ], [NAME, [TYPE, MEDIAPLAYER]], [
156
258
 
157
259
  /(gstreamer) souphttpsrc.+libsoup\/([\w\.-]+)/i
158
260
  // Gstreamer
159
- ], [NAME, VERSION], [
261
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
160
262
 
161
263
  /(htc streaming player)\s[\w_]+\s\/\s([\d\.]+)/i, // HTC Streaming Player
162
264
  /(java|python-urllib|python-requests|wget|libcurl)\/([\w\.-_]+)/i,
163
265
  // Java/urllib/requests/wget/cURL
164
266
  /(lavf)([\d\.]+)/i // Lavf (FFMPEG)
165
- ], [NAME, VERSION], [
267
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
166
268
 
167
269
  /(htc_one_s)\/([\d\.]+)/i, // HTC One S
168
- ], [[NAME, /_/g, ' '], VERSION], [
270
+ ], [[NAME, /_/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
169
271
 
170
272
  /(mplayer)(?:\s|\/)(?:(?:sherpya-){0,1}svn)(?:-|\s)(r\d+(?:-\d+[\w\.-]+))/i,
171
273
  // MPlayer SVN
172
- ], [NAME, VERSION], [
274
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
173
275
 
174
276
  /(mplayer)(?:\s|\/)([\w\.-]+)/i, // MPlayer
175
277
  /(mplayer) unknown-([\w\.\-]+)/i // MPlayer UNKNOWN
176
- ], [NAME, VERSION], [
278
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
177
279
 
178
280
  /(mplayer)/i, // MPlayer (no other info)
179
281
  /(yourmuze)/i, // YourMuze
180
282
  /(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime
181
- ], [NAME], [
283
+ ], [NAME, [TYPE, MEDIAPLAYER]], [
182
284
 
183
285
  /(nero (?:home|scout))\/([\w\.-]+)/i // Nero Home/Nero Scout
184
- ], [NAME, VERSION], [
286
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
185
287
 
186
288
  /(nokia\d+)\/([\w\.-]+)/i // Nokia
187
- ], [NAME, VERSION], [
289
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
188
290
 
189
291
  /\s(songbird)\/([\w\.-]+)/i // Songbird/Philips-Songbird
190
- ], [NAME, VERSION], [
292
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
191
293
 
192
294
  /(winamp)3 version ([\w\.-]+)/i, // Winamp
193
295
  /(winamp)\s([\w\.-]+)/i,
194
296
  /(winamp)mpeg\/([\w\.-]+)/i
195
- ], [NAME, VERSION], [
297
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
196
298
 
197
299
  /(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
198
300
  // inlight radio
199
- ], [NAME], [
301
+ ], [NAME, [TYPE, MEDIAPLAYER]], [
200
302
 
201
303
  /(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\/([\w\.-]+)/i
202
304
  // QuickTime/RealMedia/RadioApp/RadioClientApplication/
203
305
  // SoundTap/Totem/Stagefright/Streamium
204
- ], [NAME, VERSION], [
306
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
205
307
 
206
308
  /(smp)([\d\.]+)/i // SMP
207
- ], [NAME, VERSION], [
309
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
208
310
 
209
311
  /(vlc) media player - version ([\w\.]+)/i, // VLC Videolan
210
312
  /(vlc)\/([\w\.-]+)/i,
211
313
  /(xbmc|gvfs|xine|xmms|irapp)\/([\w\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp
212
314
  /(foobar2000)\/([\d\.]+)/i, // Foobar2000
213
315
  /(itunes)\/([\d\.]+)/i // iTunes
214
- ], [NAME, VERSION], [
316
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
215
317
 
216
318
  /(wmplayer)\/([\w\.-]+)/i, // Windows Media Player
217
319
  /(windows-media-player)\/([\w\.-]+)/i
218
- ], [[NAME, /-/g, ' '], VERSION], [
320
+ ], [[NAME, /-/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
219
321
 
220
322
  /windows\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ (home media server)/i,
221
323
  // Windows Media Server
222
- ], [VERSION, [NAME, 'Windows']], [
324
+ ], [VERSION, [NAME, 'Windows'], [TYPE, MEDIAPLAYER]], [
223
325
 
224
326
  /(com\.riseupradioalarm)\/([\d\.]*)/i // RiseUP Radio Alarm
225
- ], [NAME, VERSION], [
327
+ ], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
226
328
 
227
329
  /(rad.io)\s([\d\.]+)/i, // Rad.io
228
330
  /(radio.(?:de|at|fr))\s([\d\.]+)/i
229
- ], [[NAME, 'rad.io'], VERSION]
331
+ ], [[NAME, 'rad.io'], VERSION, [TYPE, MEDIAPLAYER]]
230
332
  ]
231
333
  });
232
334
 
335
+ ////////////////////////
336
+ // MODULES / LIBRARIES
337
+ ///////////////////////
338
+
233
339
  const Modules = Object.freeze({
234
340
  browser : [
235
- // Axios/jsdom/Scrapy
236
- [/\b(axios|jsdom|scrapy)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, 'module']]
341
+ // Axios/jsdom/Scrapy
342
+ [/\b(axios|jsdom|scrapy)\/([\w\.]+)/i], [NAME, VERSION, [TYPE, MODULE]]
343
+ ]
344
+ });
345
+
346
+ //////////
347
+ // BOTS
348
+ /////////
349
+
350
+ const Bots = Object.freeze({
351
+ browser : [
352
+ ...CLIs.browser,
353
+ ...Crawlers.browser,
354
+ ...Fetchers.browser,
355
+ ...Modules.browser
237
356
  ]
238
357
  });
239
358
 
240
359
  module.exports = {
241
- Apps,
242
360
  Bots,
243
361
  CLIs,
362
+ Crawlers,
244
363
  ExtraDevices,
245
364
  Emails,
365
+ Fetchers,
366
+ InApps,
246
367
  MediaPlayers,
247
368
  Modules
248
369
  };