ua-parser-js 2.0.2 → 2.0.4

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.
@@ -1,5 +1,5 @@
1
1
  ///////////////////////////////////////////////
2
- /* Extensions for UAParser.js v2.0.2
2
+ /* Extensions for UAParser.js v2.0.4
3
3
  https://github.com/faisalman/ua-parser-js
4
4
  Author: Faisal Salman <f@faisalman.com>
5
5
  AGPLv3 License */
@@ -42,25 +42,27 @@ const Crawlers = Object.freeze({
42
42
  [
43
43
  // AhrefsBot - https://ahrefs.com/robot
44
44
  // Amazonbot - https://developer.amazon.com/amazonbot
45
- // Bingbot - http://www.bing.com/bingbot.htm
45
+ // Bingbot / AdIdxBot - https://www.bing.com/webmasters/help/which-crawlers-does-bing-use-8c184ec0
46
46
  // CCBot - https://commoncrawl.org/faq
47
47
  // Dotbot - https://moz.com/help/moz-procedures/crawlers/dotbot
48
48
  // DuckDuckBot - http://duckduckgo.com/duckduckbot.html
49
49
  // FacebookBot - https://developers.facebook.com/docs/sharing/bot/
50
50
  // GPTBot - https://platform.openai.com/docs/gptbot
51
+ // iAskBot - https://iask.ai
52
+ // LinkedInBot - http://www.linkedin.com
51
53
  // MJ12bot - https://mj12bot.com/
52
54
  // MojeekBot - https://www.mojeek.com/bot.html
55
+ // Onespot - https://www.onespot.com/identifying-traffic.html
53
56
  // OpenAI's SearchGPT - https://platform.openai.com/docs/bots
54
57
  // PerplexityBot - https://perplexity.ai/perplexitybot
55
- // SemrushBot - http://www.semrush.com/bot.html
56
58
  // 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,
59
+ /((?:adidx|ahrefs|amazon|bing|cc|dot|duckduck|exa|facebook|gpt|iask|linkedin|mj12|mojeek|oai-search|onespot-scraper|perplexity|semrush|seznam)bot)\/([\w\.-]+)/i,
58
60
 
59
61
  // Applebot - http://apple.com/go/applebot
60
- /(applebot(?:-extended)?)\/([\w\.]+)/i,
62
+ /(applebot(?:-extended)?)\/?([\w\.]*)/i,
61
63
 
62
64
  // Baiduspider https://help.baidu.com/question?prod_id=99&class=0&id=3001
63
- /(baiduspider)[-imagevdonsfcpr]{0,6}\/([\w\.]+)/i,
65
+ /(baiduspider[-imagevdonwsfcpr]{0,7})\/?([\w\.]*)/i,
64
66
 
65
67
  // ClaudeBot (Anthropic)
66
68
  /(claude(?:bot|-web)|anthropic-ai)\/?([\w\.]*)/i,
@@ -68,6 +70,9 @@ const Crawlers = Object.freeze({
68
70
  // Coc Coc Bot - https://help.coccoc.com/en/search-engine
69
71
  /(coccocbot-(?:image|web))\/([\w\.]+)/i,
70
72
 
73
+ // Daum
74
+ /(daum(?:oa)?(?:-image)?)[ \/]([\w\.]+)/i,
75
+
71
76
  // Facebook / Meta
72
77
  // https://developers.facebook.com/docs/sharing/webmasters/web-crawlers
73
78
  /(facebook(?:externalhit|catalog)|meta-externalagent)\/([\w\.]+)/i,
@@ -78,6 +83,12 @@ const Crawlers = Object.freeze({
78
83
  // Internet Archive (archive.org)
79
84
  /(ia_archiver|archive\.org_bot)\/?([\w\.]*)/i,
80
85
 
86
+ // Qwantbot - https://help.qwant.com/bot
87
+ /(qwantbot)[-\w]*\/?([\w\.]*)/i,
88
+
89
+ // SemrushBot - http://www.semrush.com/bot.html
90
+ /((?:semrush|splitsignal)bot[-abcfimostw]*)\/?([\w\.-]*)/i,
91
+
81
92
  // Sogou Spider
82
93
  /(sogou (?:pic|head|web|orion|news) spider)\/([\w\.]+)/i,
83
94
 
@@ -90,8 +101,8 @@ const Crawlers = Object.freeze({
90
101
  // Yeti (Naver)
91
102
  /(yeti)\/([\w\.]+)/i,
92
103
 
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
104
+ // aiHitBot / Diffbot / Linespider / Magpie-Crawler / Omgilibot / OpenAI Image Downloader / Webzio-Extended / Screaming Frog SEO Spider / Startpage / Timpibot / VelenPublicWebCrawler / YisouSpider / YouBot
105
+ /((?:aihit|diff|timpi|you)bot|omgili(?:bot)?|openai image downloader|(?:magpie-|velenpublicweb)crawler|startpageprivateimageproxy|webzio-extended|(?:chatglm-|line|screaming frog seo |yisou)spider)\/?([\w\.]*)/i
95
106
  ],
96
107
 
97
108
  [NAME, VERSION, [TYPE, CRAWLER]],
@@ -108,7 +119,7 @@ const Crawlers = Object.freeze({
108
119
  // Qihoo 360Spider
109
120
  // TurnitinBot - https://www.turnitin.com/robot/crawlerinfo.html
110
121
  // Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
111
- /\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|(?=yahoo! )slurp)/i
122
+ /\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|yahoo! slurp)/i
112
123
  ],
113
124
  [NAME, [TYPE, CRAWLER]]
114
125
  ]
@@ -201,9 +212,18 @@ const ExtraDevices = Object.freeze({
201
212
  const Emails = Object.freeze({
202
213
  browser : [
203
214
  [
204
- // Evolution / Kontact/KMail / [Microsoft/Mac] Outlook / Thunderbird
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]]
215
+ // Evolution / Kontact/KMail[2] / [Microsoft/Mac] Outlook / Thunderbird
216
+ // Airmail / BlueMail / DaumMail / eMClient / Foxmail / NaverMailApp / Polymail
217
+ // ProtonMail / SparkDesktop / Sparrow / Yahoo! Mail / Zimbra / ZohoMail-Desktop
218
+ /((?:air|blue|daum|fox|poly|proton)mail|emclient|evolution|kmail2?|kontact|(?:microsoft |mac)?outlook(?:-express)?|navermailapp|(?!chrom.+)sparrow|sparkdesktop|thunderbird|yahoo|zohomail-desktop)(?:m.+ail; |[\/ ])([\w\.]+)/i,
219
+
220
+ // Apple's Mail
221
+ /(mail)\/([\w\.]+) cf/i
222
+ ], [NAME, VERSION, [TYPE, EMAIL]], [
223
+
224
+ // Zimbra
225
+ /zdesktop\/([\w\.]+)/i
226
+ ], [VERSION, [NAME, 'Zimbra'], [TYPE, EMAIL]]
207
227
  ]
208
228
  });
209
229
 
@@ -217,27 +237,38 @@ const Fetchers = Object.freeze({
217
237
  // AhrefsSiteAudit - https://ahrefs.com/robot/site-audit
218
238
  // ChatGPT-User - https://platform.openai.com/docs/plugins/bot
219
239
  // DuckAssistBot - https://duckduckgo.com/duckassistbot/
220
- // BingPreview / Mastodon / Pinterestbot / Redditbot / Rogerbot / Telegrambot / Twitterbot / UptimeRobot
240
+ // Better Uptime / BingPreview / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot
221
241
  // Google Site Verifier / Meta / Yahoo! Japan
242
+ // Iframely - https://iframely.com/docs/about
243
+ // Perplexity-User - https://docs.perplexity.ai/guides/bots
244
+ // MistralAI-User - https://docs.mistral.ai/robots/
222
245
  // 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,
246
+ /(ahrefssiteaudit|(?:bing|microsoft)preview|(?:chatgpt|mistralai|perplexity)-user|mastodon|(?:discord|duckassist|linkedin|pinterest|reddit|roger|siteaudit|twitter|uptimero)bot|google-site-verification|iframely|meta-externalfetcher|y!?j-dlc|yandex(?:calendar|direct(?:dyn)?|searchshop)|yadirectfetcher)\/([\w\.]+)/i,
224
247
 
225
248
  // Bluesky
226
249
  /(bluesky) cardyb\/([\w\.]+)/i,
227
250
 
251
+ // Skype
252
+ /(skypeuripreview) preview\/([\w\.]+)/i,
253
+
228
254
  // Slackbot - https://api.slack.com/robots
229
255
  /(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i,
230
256
 
231
257
  // WhatsApp
232
- /(whatsapp)\/([\w\.]+)[\/ ][ianw]/i
258
+ /(whatsapp)\/([\w\.]+)/i
233
259
  ],
234
260
  [NAME, VERSION, [TYPE, FETCHER]],
235
261
 
236
262
  [
237
263
  // Google Bots / Cohere / Snapchat / Vercelbot / Yandex Bots
238
- /(cohere-ai|vercelbot|feedfetcher-google|google(?:-read-aloud|producer)|(?=bot; )snapchat|yandex(?:sitelinks|userproxy))/i
264
+ /((?:better uptime |telegram|vercel)bot|cohere-ai|feedfetcher-google|google(?:imageproxy|-read-aloud|-pagerenderer|producer)|snap url preview|yandex(?:sitelinks|userproxy))/i
239
265
  ],
240
266
  [NAME, [TYPE, FETCHER]],
267
+ ],
268
+
269
+ os : [
270
+ [/whatsapp\/[\d\.]+ (a|i)/i],
271
+ [[NAME, os => os == 'A' ? 'Android' : 'iOS' ]]
241
272
  ]
242
273
  });
243
274
 
@@ -246,12 +277,32 @@ const Fetchers = Object.freeze({
246
277
  ///////////////////
247
278
 
248
279
  const InApps = Object.freeze({
249
- browser : [
280
+ browser : [[
281
+ // Discord/Figma/Flipboard/Mattermost/Notion/Postman/Rambox/Rocket.Chat/Slack/Teams
282
+ /\b(discord|figma|mattermost|notion|postman|rambox|rocket.chat|slack|teams)\/([\w\.]+).+(electron\/|; ios)/i,
283
+ /(flipboard)\/([\w\.]+)/i
284
+ ], [NAME, VERSION, [TYPE, INAPP]], [
285
+
286
+ // Evernote/Teams on mobile
287
+ /(evernote) win/i,
288
+ /(teams)mobile-(ios|and)/i
289
+ ], [NAME, [TYPE, INAPP]], [
290
+
250
291
  // Slack
251
- [/chatlyio\/([\d\.]+)/i], [VERSION, 'Slack', [TYPE, INAPP]],
292
+ /chatlyio\/([\d\.]+)/i],
293
+ [VERSION, [NAME, 'Slack'], [TYPE, INAPP]], [
294
+
295
+ // TikTok Lite
296
+ /ultralite app_version\/([\w\.]+)/i],
297
+ [VERSION, [NAME, 'TikTok Lite'], [TYPE, INAPP]], [
298
+
299
+ // VS Code
300
+ /\) code\/([\d\.]+).+electron\//i],
301
+ [VERSION, [NAME, 'VS Code'], [TYPE, INAPP]], [
252
302
 
253
303
  // Yahoo! Japan
254
- [/jp\.co\.yahoo\.android\.yjtop\/([\d\.]+)/i], [VERSION, 'Yahoo! Japan', [TYPE, INAPP]]
304
+ /jp\.co\.yahoo\.(?:android\.yjtop|ipn\.appli)\/([\d\.]+)/i],
305
+ [VERSION, [NAME, 'Yahoo! Japan'], [TYPE, INAPP]]
255
306
  ]
256
307
  });
257
308
 
@@ -315,8 +366,10 @@ const Libraries = Object.freeze({
315
366
  browser : [
316
367
  // 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
368
  [
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
369
+ /^(apache-httpclient|axios|(?:go|java)-http-client|got|guzzlehttp|java|libwww-perl|lua-resty-http|needle|node-(?:fetch|superagent)|okhttp|php-soap|postmanruntime|python-(?:httpx|urllib[23]?|requests)|scrapy)\/([\w\.]+)/i,
370
+ /(adobeair|aiohttp|jsdom)\/([\w\.]+)/i,
371
+ /(nutch)-([\w\.-]+)(\(|$)/i,
372
+ /\((java)\/([\w\.]+)/i
320
373
  ], [NAME, VERSION, [TYPE, LIBRARY]]
321
374
  ]
322
375
  });
@@ -327,15 +380,20 @@ const Libraries = Object.freeze({
327
380
 
328
381
  const Vehicles = Object.freeze({
329
382
  device : [
330
- [
331
- /dilink.+(byd) auto/i, // BYD
332
- ], [VENDOR], [
383
+ [/aftlbt962e2/i], // BMW
384
+ [[VENDOR, 'BMW']],
385
+
386
+ [/dilink.+(byd) auto/i], // BYD
387
+ [VENDOR],
333
388
 
334
- /(rivian) (r1t)/i, // Rivian
335
- ], [VENDOR, MODEL], [
389
+ [/aftlft962x3/i], // Jeep
390
+ [[VENDOR, 'Jeep'], [MODEL, 'Wagooner']],
391
+
392
+ [/(rivian) (r1t)/i], // Rivian
393
+ [VENDOR, MODEL],
336
394
 
337
- /vcc.+netfront/i, // Volvo
338
- ], [[VENDOR, 'Volvo']]
395
+ [/vcc.+netfront/i], // Volvo
396
+ [[VENDOR, 'Volvo']]
339
397
  ]
340
398
  });
341
399
 
@@ -349,6 +407,9 @@ const Bots = Object.freeze({
349
407
  ...Crawlers.browser,
350
408
  ...Fetchers.browser,
351
409
  ...Libraries.browser
410
+ ],
411
+ os : [
412
+ ...Fetchers.os
352
413
  ]
353
414
  });
354
415
 
@@ -3,7 +3,7 @@
3
3
  // Source: /src/extensions/ua-parser-extensions.js
4
4
 
5
5
  ///////////////////////////////////////////////
6
- /* Extensions for UAParser.js v2.0.2
6
+ /* Extensions for UAParser.js v2.0.4
7
7
  https://github.com/faisalman/ua-parser-js
8
8
  Author: Faisal Salman <f@faisalman.com>
9
9
  AGPLv3 License */
@@ -46,25 +46,27 @@ 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
+ // iAskBot - https://iask.ai
56
+ // LinkedInBot - http://www.linkedin.com
55
57
  // MJ12bot - https://mj12bot.com/
56
58
  // MojeekBot - https://www.mojeek.com/bot.html
59
+ // Onespot - https://www.onespot.com/identifying-traffic.html
57
60
  // OpenAI's SearchGPT - https://platform.openai.com/docs/bots
58
61
  // PerplexityBot - https://perplexity.ai/perplexitybot
59
- // SemrushBot - http://www.semrush.com/bot.html
60
62
  // 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,
63
+ /((?:adidx|ahrefs|amazon|bing|cc|dot|duckduck|exa|facebook|gpt|iask|linkedin|mj12|mojeek|oai-search|onespot-scraper|perplexity|semrush|seznam)bot)\/([\w\.-]+)/i,
62
64
 
63
65
  // Applebot - http://apple.com/go/applebot
64
- /(applebot(?:-extended)?)\/([\w\.]+)/i,
66
+ /(applebot(?:-extended)?)\/?([\w\.]*)/i,
65
67
 
66
68
  // Baiduspider https://help.baidu.com/question?prod_id=99&class=0&id=3001
67
- /(baiduspider)[-imagevdonsfcpr]{0,6}\/([\w\.]+)/i,
69
+ /(baiduspider[-imagevdonwsfcpr]{0,7})\/?([\w\.]*)/i,
68
70
 
69
71
  // ClaudeBot (Anthropic)
70
72
  /(claude(?:bot|-web)|anthropic-ai)\/?([\w\.]*)/i,
@@ -72,6 +74,9 @@ const Crawlers = Object.freeze({
72
74
  // Coc Coc Bot - https://help.coccoc.com/en/search-engine
73
75
  /(coccocbot-(?:image|web))\/([\w\.]+)/i,
74
76
 
77
+ // Daum
78
+ /(daum(?:oa)?(?:-image)?)[ \/]([\w\.]+)/i,
79
+
75
80
  // Facebook / Meta
76
81
  // https://developers.facebook.com/docs/sharing/webmasters/web-crawlers
77
82
  /(facebook(?:externalhit|catalog)|meta-externalagent)\/([\w\.]+)/i,
@@ -82,6 +87,12 @@ const Crawlers = Object.freeze({
82
87
  // Internet Archive (archive.org)
83
88
  /(ia_archiver|archive\.org_bot)\/?([\w\.]*)/i,
84
89
 
90
+ // Qwantbot - https://help.qwant.com/bot
91
+ /(qwantbot)[-\w]*\/?([\w\.]*)/i,
92
+
93
+ // SemrushBot - http://www.semrush.com/bot.html
94
+ /((?:semrush|splitsignal)bot[-abcfimostw]*)\/?([\w\.-]*)/i,
95
+
85
96
  // Sogou Spider
86
97
  /(sogou (?:pic|head|web|orion|news) spider)\/([\w\.]+)/i,
87
98
 
@@ -94,8 +105,8 @@ const Crawlers = Object.freeze({
94
105
  // Yeti (Naver)
95
106
  /(yeti)\/([\w\.]+)/i,
96
107
 
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
108
+ // aiHitBot / Diffbot / Linespider / Magpie-Crawler / Omgilibot / OpenAI Image Downloader / Webzio-Extended / Screaming Frog SEO Spider / Startpage / Timpibot / VelenPublicWebCrawler / YisouSpider / YouBot
109
+ /((?:aihit|diff|timpi|you)bot|omgili(?:bot)?|openai image downloader|(?:magpie-|velenpublicweb)crawler|startpageprivateimageproxy|webzio-extended|(?:chatglm-|line|screaming frog seo |yisou)spider)\/?([\w\.]*)/i
99
110
  ],
100
111
 
101
112
  [NAME, VERSION, [TYPE, CRAWLER]],
@@ -112,7 +123,7 @@ const Crawlers = Object.freeze({
112
123
  // Qihoo 360Spider
113
124
  // TurnitinBot - https://www.turnitin.com/robot/crawlerinfo.html
114
125
  // 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
126
+ /\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|yahoo! slurp)/i
116
127
  ],
117
128
  [NAME, [TYPE, CRAWLER]]
118
129
  ]
@@ -205,9 +216,18 @@ const ExtraDevices = Object.freeze({
205
216
  const Emails = Object.freeze({
206
217
  browser : [
207
218
  [
208
- // Evolution / Kontact/KMail / [Microsoft/Mac] Outlook / Thunderbird
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]]
219
+ // Evolution / Kontact/KMail[2] / [Microsoft/Mac] Outlook / Thunderbird
220
+ // Airmail / BlueMail / DaumMail / eMClient / Foxmail / NaverMailApp / Polymail
221
+ // ProtonMail / SparkDesktop / Sparrow / Yahoo! Mail / Zimbra / ZohoMail-Desktop
222
+ /((?:air|blue|daum|fox|poly|proton)mail|emclient|evolution|kmail2?|kontact|(?:microsoft |mac)?outlook(?:-express)?|navermailapp|(?!chrom.+)sparrow|sparkdesktop|thunderbird|yahoo|zohomail-desktop)(?:m.+ail; |[\/ ])([\w\.]+)/i,
223
+
224
+ // Apple's Mail
225
+ /(mail)\/([\w\.]+) cf/i
226
+ ], [NAME, VERSION, [TYPE, EMAIL]], [
227
+
228
+ // Zimbra
229
+ /zdesktop\/([\w\.]+)/i
230
+ ], [VERSION, [NAME, 'Zimbra'], [TYPE, EMAIL]]
211
231
  ]
212
232
  });
213
233
 
@@ -221,27 +241,38 @@ const Fetchers = Object.freeze({
221
241
  // AhrefsSiteAudit - https://ahrefs.com/robot/site-audit
222
242
  // ChatGPT-User - https://platform.openai.com/docs/plugins/bot
223
243
  // DuckAssistBot - https://duckduckgo.com/duckassistbot/
224
- // BingPreview / Mastodon / Pinterestbot / Redditbot / Rogerbot / Telegrambot / Twitterbot / UptimeRobot
244
+ // Better Uptime / BingPreview / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot
225
245
  // Google Site Verifier / Meta / Yahoo! Japan
246
+ // Iframely - https://iframely.com/docs/about
247
+ // Perplexity-User - https://docs.perplexity.ai/guides/bots
248
+ // MistralAI-User - https://docs.mistral.ai/robots/
226
249
  // 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,
250
+ /(ahrefssiteaudit|(?:bing|microsoft)preview|(?:chatgpt|mistralai|perplexity)-user|mastodon|(?:discord|duckassist|linkedin|pinterest|reddit|roger|siteaudit|twitter|uptimero)bot|google-site-verification|iframely|meta-externalfetcher|y!?j-dlc|yandex(?:calendar|direct(?:dyn)?|searchshop)|yadirectfetcher)\/([\w\.]+)/i,
228
251
 
229
252
  // Bluesky
230
253
  /(bluesky) cardyb\/([\w\.]+)/i,
231
254
 
255
+ // Skype
256
+ /(skypeuripreview) preview\/([\w\.]+)/i,
257
+
232
258
  // Slackbot - https://api.slack.com/robots
233
259
  /(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i,
234
260
 
235
261
  // WhatsApp
236
- /(whatsapp)\/([\w\.]+)[\/ ][ianw]/i
262
+ /(whatsapp)\/([\w\.]+)/i
237
263
  ],
238
264
  [NAME, VERSION, [TYPE, FETCHER]],
239
265
 
240
266
  [
241
267
  // Google Bots / Cohere / Snapchat / Vercelbot / Yandex Bots
242
- /(cohere-ai|vercelbot|feedfetcher-google|google(?:-read-aloud|producer)|(?=bot; )snapchat|yandex(?:sitelinks|userproxy))/i
268
+ /((?:better uptime |telegram|vercel)bot|cohere-ai|feedfetcher-google|google(?:imageproxy|-read-aloud|-pagerenderer|producer)|snap url preview|yandex(?:sitelinks|userproxy))/i
243
269
  ],
244
270
  [NAME, [TYPE, FETCHER]],
271
+ ],
272
+
273
+ os : [
274
+ [/whatsapp\/[\d\.]+ (a|i)/i],
275
+ [[NAME, os => os == 'A' ? 'Android' : 'iOS' ]]
245
276
  ]
246
277
  });
247
278
 
@@ -250,12 +281,32 @@ const Fetchers = Object.freeze({
250
281
  ///////////////////
251
282
 
252
283
  const InApps = Object.freeze({
253
- browser : [
284
+ browser : [[
285
+ // Discord/Figma/Flipboard/Mattermost/Notion/Postman/Rambox/Rocket.Chat/Slack/Teams
286
+ /\b(discord|figma|mattermost|notion|postman|rambox|rocket.chat|slack|teams)\/([\w\.]+).+(electron\/|; ios)/i,
287
+ /(flipboard)\/([\w\.]+)/i
288
+ ], [NAME, VERSION, [TYPE, INAPP]], [
289
+
290
+ // Evernote/Teams on mobile
291
+ /(evernote) win/i,
292
+ /(teams)mobile-(ios|and)/i
293
+ ], [NAME, [TYPE, INAPP]], [
294
+
254
295
  // Slack
255
- [/chatlyio\/([\d\.]+)/i], [VERSION, 'Slack', [TYPE, INAPP]],
296
+ /chatlyio\/([\d\.]+)/i],
297
+ [VERSION, [NAME, 'Slack'], [TYPE, INAPP]], [
298
+
299
+ // TikTok Lite
300
+ /ultralite app_version\/([\w\.]+)/i],
301
+ [VERSION, [NAME, 'TikTok Lite'], [TYPE, INAPP]], [
302
+
303
+ // VS Code
304
+ /\) code\/([\d\.]+).+electron\//i],
305
+ [VERSION, [NAME, 'VS Code'], [TYPE, INAPP]], [
256
306
 
257
307
  // Yahoo! Japan
258
- [/jp\.co\.yahoo\.android\.yjtop\/([\d\.]+)/i], [VERSION, 'Yahoo! Japan', [TYPE, INAPP]]
308
+ /jp\.co\.yahoo\.(?:android\.yjtop|ipn\.appli)\/([\d\.]+)/i],
309
+ [VERSION, [NAME, 'Yahoo! Japan'], [TYPE, INAPP]]
259
310
  ]
260
311
  });
261
312
 
@@ -319,8 +370,10 @@ const Libraries = Object.freeze({
319
370
  browser : [
320
371
  // 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
372
  [
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
373
+ /^(apache-httpclient|axios|(?:go|java)-http-client|got|guzzlehttp|java|libwww-perl|lua-resty-http|needle|node-(?:fetch|superagent)|okhttp|php-soap|postmanruntime|python-(?:httpx|urllib[23]?|requests)|scrapy)\/([\w\.]+)/i,
374
+ /(adobeair|aiohttp|jsdom)\/([\w\.]+)/i,
375
+ /(nutch)-([\w\.-]+)(\(|$)/i,
376
+ /\((java)\/([\w\.]+)/i
324
377
  ], [NAME, VERSION, [TYPE, LIBRARY]]
325
378
  ]
326
379
  });
@@ -331,15 +384,20 @@ const Libraries = Object.freeze({
331
384
 
332
385
  const Vehicles = Object.freeze({
333
386
  device : [
334
- [
335
- /dilink.+(byd) auto/i, // BYD
336
- ], [VENDOR], [
387
+ [/aftlbt962e2/i], // BMW
388
+ [[VENDOR, 'BMW']],
389
+
390
+ [/dilink.+(byd) auto/i], // BYD
391
+ [VENDOR],
337
392
 
338
- /(rivian) (r1t)/i, // Rivian
339
- ], [VENDOR, MODEL], [
393
+ [/aftlft962x3/i], // Jeep
394
+ [[VENDOR, 'Jeep'], [MODEL, 'Wagooner']],
395
+
396
+ [/(rivian) (r1t)/i], // Rivian
397
+ [VENDOR, MODEL],
340
398
 
341
- /vcc.+netfront/i, // Volvo
342
- ], [[VENDOR, 'Volvo']]
399
+ [/vcc.+netfront/i], // Volvo
400
+ [[VENDOR, 'Volvo']]
343
401
  ]
344
402
  });
345
403
 
@@ -353,6 +411,9 @@ const Bots = Object.freeze({
353
411
  ...Crawlers.browser,
354
412
  ...Fetchers.browser,
355
413
  ...Libraries.browser
414
+ ],
415
+ os : [
416
+ ...Fetchers.os
356
417
  ]
357
418
  });
358
419
 
@@ -1,4 +1,4 @@
1
- // Type definitions for Helpers submodule of UAParser.js v2.0.2
1
+ // Type definitions for Helpers submodule of UAParser.js v2.0.4
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.2
2
+ /* Helpers for UAParser.js v2.0.4
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
 
@@ -107,6 +110,9 @@ const isAIBot = (resultOrUA) => [
107
110
  // You.com
108
111
  'youbot',
109
112
 
113
+ // Zhipu AI
114
+ 'chatglm-spider',
115
+
110
116
  // Zyte
111
117
  'scrapy'
112
118
 
@@ -3,7 +3,7 @@
3
3
  // Source: /src/helpers/ua-parser-helpers.js
4
4
 
5
5
  ///////////////////////////////////////////////
6
- /* Helpers for UAParser.js v2.0.2
6
+ /* Helpers for UAParser.js v2.0.4
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
 
@@ -111,6 +114,9 @@ const isAIBot = (resultOrUA) => [
111
114
  // You.com
112
115
  'youbot',
113
116
 
117
+ // Zhipu AI
118
+ 'chatglm-spider',
119
+
114
120
  // Zyte
115
121
  'scrapy'
116
122
 
@@ -1,4 +1,4 @@
1
- // Type definitions for UAParser.js v2.0.2
1
+ // Type definitions for UAParser.js v2.0.4
2
2
  // Project: https://github.com/faisalman/ua-parser-js
3
3
  // Definitions by: Faisal Salman <https://github.com/faisalman>
4
4