ua-parser-js 2.0.3 → 2.0.6

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.3
2
+ /* Extensions for UAParser.js v2.0.6
3
3
  https://github.com/faisalman/ua-parser-js
4
4
  Author: Faisal Salman <f@faisalman.com>
5
5
  AGPLv3 License */
@@ -43,18 +43,33 @@ const Crawlers = Object.freeze({
43
43
  // AhrefsBot - https://ahrefs.com/robot
44
44
  // Amazonbot - https://developer.amazon.com/amazonbot
45
45
  // Bingbot / AdIdxBot - https://www.bing.com/webmasters/help/which-crawlers-does-bing-use-8c184ec0
46
+ // Bravebot - https://search.brave.com/help/brave-search-crawler
46
47
  // CCBot - https://commoncrawl.org/faq
48
+ // contxbot - https://affiliate-program.amazon.com/help/node/topic/GT98G5PPRERNVZ2C
49
+ // Coveobot - https://connect.coveo.com/s/article/19648
50
+ // CriteoBot - https://www.criteo.com/criteo-crawler/
47
51
  // Dotbot - https://moz.com/help/moz-procedures/crawlers/dotbot
48
52
  // DuckDuckBot - http://duckduckgo.com/duckduckbot.html
49
53
  // FacebookBot - https://developers.facebook.com/docs/sharing/bot/
50
54
  // GPTBot - https://platform.openai.com/docs/gptbot
55
+ // iAskBot - https://iask.ai
56
+ // Kagibot - https://kagi.com/bot
57
+ // Kangaroo Bot - https://kangaroollm.com.au/kangaroo-bot/
51
58
  // LinkedInBot - http://www.linkedin.com
52
59
  // MJ12bot - https://mj12bot.com/
53
60
  // MojeekBot - https://www.mojeek.com/bot.html
61
+ // Onespot - https://www.onespot.com/identifying-traffic.html
54
62
  // OpenAI's SearchGPT - https://platform.openai.com/docs/bots
55
63
  // PerplexityBot - https://perplexity.ai/perplexitybot
64
+ // SBIntuitionsBot - https://www.sbintuitions.co.jp/bot/
56
65
  // SeznamBot - http://napoveda.seznam.cz/seznambot-intro
57
- /((?:adidx|ahrefs|amazon|bing|cc|dot|duckduck|exa|facebook|gpt|linkedin|mj12|mojeek|oai-search|perplexity|semrush|seznam)bot)\/([\w\.-]+)/i,
66
+ // SurdotlyBot - http://sur.ly/bot.html
67
+ // Swiftbot - https://swiftype.com/swiftbot
68
+ // YepBot - https://yep.com/yepbot/
69
+ /((?:adidx|ahrefs|amazon|bing|brave|cc|contx|coveo|criteo|dot|duckduck(?:go-favicons-)?|exa|facebook|gpt|iask|kagi|kangaroo |linkedin|mj12|mojeek|oai-search|onespot-scraper|perplexity|sbintuitions|semrush|seznam|surdotly|swift|yep)bot)\/([\w\.-]+)/i,
70
+
71
+ // Algolia Crawler
72
+ /(algolia crawler(?: renderscript)?)\/?([\w\.]*)/i,
58
73
 
59
74
  // Applebot - http://apple.com/go/applebot
60
75
  /(applebot(?:-extended)?)\/?([\w\.]*)/i,
@@ -63,11 +78,14 @@ const Crawlers = Object.freeze({
63
78
  /(baiduspider[-imagevdonwsfcpr]{0,7})\/?([\w\.]*)/i,
64
79
 
65
80
  // ClaudeBot (Anthropic)
66
- /(claude(?:bot|-web)|anthropic-ai)\/?([\w\.]*)/i,
81
+ /(claude(?:bot|-searchbot|-web)|anthropic-ai)\/?([\w\.]*)/i,
67
82
 
68
83
  // Coc Coc Bot - https://help.coccoc.com/en/search-engine
69
84
  /(coccocbot-(?:image|web))\/([\w\.]+)/i,
70
85
 
86
+ // Daum
87
+ /(daum(?:oa)?(?:-image)?)[ \/]([\w\.]+)/i,
88
+
71
89
  // Facebook / Meta
72
90
  // https://developers.facebook.com/docs/sharing/webmasters/web-crawlers
73
91
  /(facebook(?:externalhit|catalog)|meta-externalagent)\/([\w\.]+)/i,
@@ -78,6 +96,12 @@ const Crawlers = Object.freeze({
78
96
  // Internet Archive (archive.org)
79
97
  /(ia_archiver|archive\.org_bot)\/?([\w\.]*)/i,
80
98
 
99
+ // OnCrawl
100
+ /(oncrawl) mobile\/([\w\.]+)/i,
101
+
102
+ // Qwantbot - https://help.qwant.com/bot
103
+ /(qwantbot(?:-news)?)[-\w]*\/?([\w\.]*)/i,
104
+
81
105
  // SemrushBot - http://www.semrush.com/bot.html
82
106
  /((?:semrush|splitsignal)bot[-abcfimostw]*)\/?([\w\.-]*)/i,
83
107
 
@@ -88,30 +112,38 @@ const Crawlers = Object.freeze({
88
112
  /(y!?j-(?:asr|br[uw]|dscv|mmp|vsidx|wsc))\/([\w\.]+)/i,
89
113
 
90
114
  // Yandex Bots - https://yandex.com/bots
91
- /(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,
115
+ /(yandex(?:(?:mobile)?(?:accessibility|additional|com|renderresources|screenshot|sprav)?bot(?!.+mirror)|image(?:s|resizer)|adnet|blogs|favicons|market|media|metrika|news|ontodb(?:api)?|partner|rca|tracker|turbo|verti(?:cal)?s|webmaster|video(?:parser)?))\/([\w\.]+)/i,
92
116
 
93
117
  // Yeti (Naver)
94
118
  /(yeti)\/([\w\.]+)/i,
95
119
 
96
- // aiHitBot / Diffbot / Linespider / Magpie-Crawler / Omgilibot / OpenAI Image Downloader / Webzio-Extended / Screaming Frog SEO Spider / Timpibot / VelenPublicWebCrawler / YisouSpider / YouBot
97
- /((?:aihit|diff|timpi|you)bot|omgili(?:bot)?|openai image downloader|(?:magpie-|velenpublicweb)crawler|webzio-extended|(?:screaming frog seo |line|yisou)spider)\/?([\w\.]*)/i
120
+ // aiHitBot / Algolia Crawler / BLEXBot / Diffbot / FirecrawlAgent / HuggingFace-Bot / Linespider / MSNBot / Magpie-Crawler / Omgilibot / OpenAI Image Downloader / PanguBot / Replicate-Bot / RunPod-Bot / Webzio-Extended / Screaming Frog SEO Spider / Startpage / Timpibot / Together-Bot / VelenPublicWebCrawler / xAI-Bot / YisouSpider / YouBot / ZumBot
121
+ // Cotoyogi - https://ds.rois.ac.jp/en_center8/en_crawler/
122
+ // Freespoke - https://docs.freespoke.com/search/bot/
123
+ /((?:aihit|blex|diff|huggingface-|msn|pangu|replicate-|runpod-|timpi|together-|xai-|you|zum)bot|(?:magpie-|velenpublicweb)crawler|(?:chatglm-|line|screaming frog seo |yisou)spider|cotoyogi|firecrawlagent|freespoke|omgili(?:bot)?|openai image downloader|startpageprivateimageproxy|twinagent|webzio-extended)\/?([\w\.]*)/i
98
124
  ],
99
-
100
125
  [NAME, VERSION, [TYPE, CRAWLER]],
101
126
 
127
+ [
128
+ // YandexBot MirrorDetector
129
+ /(yandexbot\/([\w\.]+); mirrordetector)/i
130
+ ],
131
+ [[NAME, /\/.+;/ig, ''], VERSION, [TYPE, CRAWLER]],
132
+
102
133
  [
103
134
  // Google Bots
104
135
  /((?:adsbot|apis|mediapartners)-google(?:-mobile)?|google-?(?:other|cloudvertexbot|extended|safety))/i,
105
136
 
106
137
  // AI2Bot - https://allenai.org/crawler
107
- // Bytespider
108
138
  // DataForSeoBot - https://dataforseo.com/dataforseo-bot
109
139
  // Huawei AspiegelBot / PetalBot https://aspiegel.com/petalbot
110
140
  // ImagesiftBot - https://imagesift.com/about
111
- // Qihoo 360Spider
141
+ // Siteimprove - https://help.siteimprove.com/support/solutions/articles/80000448553
112
142
  // TurnitinBot - https://www.turnitin.com/robot/crawlerinfo.html
143
+ // v0bot - https://vercel.com/docs/bot-management
113
144
  // Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
114
- /\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|yahoo! slurp)/i
145
+ // Botify / Bytespider / DeepSeekBot / Qihoo 360Spider / SeekportBot / TikTokSpider
146
+ /\b((ai2|aspiegel|dataforseo|deepseek|imagesift|petal|seekport|turnitin|v0)bot|360spider-?(image|video)?|baidu-ads|botify|(byte|tiktok)spider|cohere-training-data-crawler|elastic(?=\/s)|marginalia|siteimprove(?=bot|\.com)|teoma|webzio|yahoo! slurp)/i
115
147
  ],
116
148
  [NAME, [TYPE, CRAWLER]]
117
149
  ]
@@ -204,9 +236,18 @@ const ExtraDevices = Object.freeze({
204
236
  const Emails = Object.freeze({
205
237
  browser : [
206
238
  [
207
- // Evolution / Kontact/KMail / [Microsoft/Mac] Outlook / Thunderbird
208
- /(airmail|bluemail|emclient|evolution|foxmail|kmail2?|kontact|(?:microsoft |mac)?outlook(?:-express)?|navermailapp|(?!chrom.+)sparrow|thunderbird|yahoo)(?:m.+ail; |[\/ ])([\w\.]+)/i
209
- ], [NAME, VERSION, [TYPE, EMAIL]]
239
+ // Evolution / Kontact/KMail[2] / [Microsoft/Mac] Outlook / Thunderbird
240
+ // Airmail / BlueMail / DaumMail / eMClient / Foxmail / NaverMailApp / Polymail
241
+ // ProtonMail / SparkDesktop / Sparrow / Yahoo! Mail / Zimbra / ZohoMail-Desktop
242
+ /((?: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,
243
+
244
+ // Apple's Mail
245
+ /(mail)\/([\w\.]+) cf/i
246
+ ], [NAME, VERSION, [TYPE, EMAIL]], [
247
+
248
+ // Zimbra
249
+ /zdesktop\/([\w\.]+)/i
250
+ ], [VERSION, [NAME, 'Zimbra'], [TYPE, EMAIL]]
210
251
  ]
211
252
  });
212
253
 
@@ -217,13 +258,17 @@ const Emails = Object.freeze({
217
258
  const Fetchers = Object.freeze({
218
259
  browser : [
219
260
  [
261
+ // Asana / Bitlybot / Better Uptime / BingPreview / Blueno / Cohere-AI / HubSpot Page Fetcher / kakaotalk-scrap / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot
220
262
  // AhrefsSiteAudit - https://ahrefs.com/robot/site-audit
263
+ // Buffer Link Preview Bot - https://scraper.buffer.com/about/bots/link-preview-bot
221
264
  // ChatGPT-User - https://platform.openai.com/docs/plugins/bot
222
265
  // DuckAssistBot - https://duckduckgo.com/duckassistbot/
223
- // Better Uptime / BingPreview / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot
224
266
  // Google Site Verifier / Meta / Yahoo! Japan
267
+ // Iframely - https://iframely.com/docs/about
268
+ // Perplexity-User - https://docs.perplexity.ai/guides/bots
269
+ // MistralAI-User - https://docs.mistral.ai/robots/
225
270
  // Yandex Bots - https://yandex.com/bots
226
- /(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,
271
+ /(asana|ahrefssiteaudit|(?:bing|microsoft)preview|blueno|(?:chatgpt|claude|mistralai|perplexity)-user|cohere-ai|hubspot page fetcher|mastodon|(?:bitly|bufferlinkpreview|discord|duckassist|linkedin|pinterest|reddit|roger|siteaudit|twitter|uptimero|zoom)bot|google-site-verification|iframely|kakaotalk-scrap|meta-externalfetcher|y!?j-dlc|yandex(?:calendar|direct(?:dyn)?|fordomain|pagechecker|searchshop)|yadirectfetcher)\/([\w\.]+)/i,
227
272
 
228
273
  // Bluesky
229
274
  /(bluesky) cardyb\/([\w\.]+)/i,
@@ -240,8 +285,8 @@ const Fetchers = Object.freeze({
240
285
  [NAME, VERSION, [TYPE, FETCHER]],
241
286
 
242
287
  [
243
- // Google Bots / Cohere / Snapchat / Vercelbot / Yandex Bots
244
- /((?:better uptime |telegram|vercel)bot|cohere-ai|feedfetcher-google|google(?:imageproxy|-read-aloud|-pagerenderer|producer)|snap url preview|yandex(?:sitelinks|userproxy))/i
288
+ // Google Bots / Chrome-Lighthouse / Gemini-Deep-Research / KeybaseBot / Snapchat / Vercelbot / Yandex Bots
289
+ /((?:better uptime |keybase|telegram|vercel)bot|chrome-lighthouse|feedfetcher-google|gemini-deep-research|google(?:imageproxy|-read-aloud|-pagerenderer|producer)|snap url preview|vercel(flags|tracing|-(favicon|screenshot)-bot)|yandex(?:sitelinks|userproxy))/i
245
290
  ],
246
291
  [NAME, [TYPE, FETCHER]],
247
292
  ],
@@ -257,13 +302,31 @@ const Fetchers = Object.freeze({
257
302
  ///////////////////
258
303
 
259
304
  const InApps = Object.freeze({
260
- browser : [
305
+ browser : [[
306
+ // Discord/Figma/Flipboard/Mattermost/Notion/Postman/Rambox/Rocket.Chat/Slack/Teams
307
+ /\b(discord|figma|mattermost|notion|postman|rambox|rocket.chat|slack|teams)\/([\w\.]+).+(electron\/|; ios)/i,
308
+ /(flipboard)\/([\w\.]+)/i
309
+ ], [NAME, VERSION, [TYPE, INAPP]], [
310
+
311
+ // Evernote/Teams on mobile
312
+ /(evernote) win/i,
313
+ /(teams)mobile-(ios|and)/i
314
+ ], [NAME, [TYPE, INAPP]], [
315
+
261
316
  // Slack
262
- [/(?:slack(?=.+electron|.+ios)|chatlyio)\/([\d\.]+)/i],
263
- [VERSION, [NAME, 'Slack'], [TYPE, INAPP]],
317
+ /chatlyio\/([\d\.]+)/i],
318
+ [VERSION, [NAME, 'Slack'], [TYPE, INAPP]], [
319
+
320
+ // TikTok Lite
321
+ /ultralite app_version\/([\w\.]+)/i],
322
+ [VERSION, [NAME, 'TikTok Lite'], [TYPE, INAPP]], [
323
+
324
+ // VS Code
325
+ /\) code\/([\d\.]+).+electron\//i],
326
+ [VERSION, [NAME, 'VS Code'], [TYPE, INAPP]], [
264
327
 
265
328
  // Yahoo! Japan
266
- [/jp\.co\.yahoo\.(?:android\.yjtop|ipn\.appli)\/([\d\.]+)/i],
329
+ /jp\.co\.yahoo\.(?:android\.yjtop|ipn\.appli)\/([\d\.]+)/i],
267
330
  [VERSION, [NAME, 'Yahoo! Japan'], [TYPE, INAPP]]
268
331
  ]
269
332
  });
@@ -328,8 +391,10 @@ const Libraries = Object.freeze({
328
391
  browser : [
329
392
  // 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
330
393
  [
331
- /^(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,
332
- /(jsdom|(?<=\()java)\/([\w\.]+)/i
394
+ /^(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,
395
+ /(adobeair|aiohttp|jsdom)\/([\w\.]+)/i,
396
+ /(nutch)-([\w\.-]+)(\(|$)/i,
397
+ /\((java)\/([\w\.]+)/i
333
398
  ], [NAME, VERSION, [TYPE, LIBRARY]]
334
399
  ]
335
400
  });
@@ -364,8 +429,8 @@ const Vehicles = Object.freeze({
364
429
  const Bots = Object.freeze({
365
430
  browser : [
366
431
  ...CLIs.browser,
367
- ...Crawlers.browser,
368
432
  ...Fetchers.browser,
433
+ ...Crawlers.browser,
369
434
  ...Libraries.browser
370
435
  ],
371
436
  os : [
@@ -3,7 +3,7 @@
3
3
  // Source: /src/extensions/ua-parser-extensions.js
4
4
 
5
5
  ///////////////////////////////////////////////
6
- /* Extensions for UAParser.js v2.0.3
6
+ /* Extensions for UAParser.js v2.0.6
7
7
  https://github.com/faisalman/ua-parser-js
8
8
  Author: Faisal Salman <f@faisalman.com>
9
9
  AGPLv3 License */
@@ -47,18 +47,33 @@ const Crawlers = Object.freeze({
47
47
  // AhrefsBot - https://ahrefs.com/robot
48
48
  // Amazonbot - https://developer.amazon.com/amazonbot
49
49
  // Bingbot / AdIdxBot - https://www.bing.com/webmasters/help/which-crawlers-does-bing-use-8c184ec0
50
+ // Bravebot - https://search.brave.com/help/brave-search-crawler
50
51
  // CCBot - https://commoncrawl.org/faq
52
+ // contxbot - https://affiliate-program.amazon.com/help/node/topic/GT98G5PPRERNVZ2C
53
+ // Coveobot - https://connect.coveo.com/s/article/19648
54
+ // CriteoBot - https://www.criteo.com/criteo-crawler/
51
55
  // Dotbot - https://moz.com/help/moz-procedures/crawlers/dotbot
52
56
  // DuckDuckBot - http://duckduckgo.com/duckduckbot.html
53
57
  // FacebookBot - https://developers.facebook.com/docs/sharing/bot/
54
58
  // GPTBot - https://platform.openai.com/docs/gptbot
59
+ // iAskBot - https://iask.ai
60
+ // Kagibot - https://kagi.com/bot
61
+ // Kangaroo Bot - https://kangaroollm.com.au/kangaroo-bot/
55
62
  // LinkedInBot - http://www.linkedin.com
56
63
  // MJ12bot - https://mj12bot.com/
57
64
  // MojeekBot - https://www.mojeek.com/bot.html
65
+ // Onespot - https://www.onespot.com/identifying-traffic.html
58
66
  // OpenAI's SearchGPT - https://platform.openai.com/docs/bots
59
67
  // PerplexityBot - https://perplexity.ai/perplexitybot
68
+ // SBIntuitionsBot - https://www.sbintuitions.co.jp/bot/
60
69
  // SeznamBot - http://napoveda.seznam.cz/seznambot-intro
61
- /((?:adidx|ahrefs|amazon|bing|cc|dot|duckduck|exa|facebook|gpt|linkedin|mj12|mojeek|oai-search|perplexity|semrush|seznam)bot)\/([\w\.-]+)/i,
70
+ // SurdotlyBot - http://sur.ly/bot.html
71
+ // Swiftbot - https://swiftype.com/swiftbot
72
+ // YepBot - https://yep.com/yepbot/
73
+ /((?:adidx|ahrefs|amazon|bing|brave|cc|contx|coveo|criteo|dot|duckduck(?:go-favicons-)?|exa|facebook|gpt|iask|kagi|kangaroo |linkedin|mj12|mojeek|oai-search|onespot-scraper|perplexity|sbintuitions|semrush|seznam|surdotly|swift|yep)bot)\/([\w\.-]+)/i,
74
+
75
+ // Algolia Crawler
76
+ /(algolia crawler(?: renderscript)?)\/?([\w\.]*)/i,
62
77
 
63
78
  // Applebot - http://apple.com/go/applebot
64
79
  /(applebot(?:-extended)?)\/?([\w\.]*)/i,
@@ -67,11 +82,14 @@ const Crawlers = Object.freeze({
67
82
  /(baiduspider[-imagevdonwsfcpr]{0,7})\/?([\w\.]*)/i,
68
83
 
69
84
  // ClaudeBot (Anthropic)
70
- /(claude(?:bot|-web)|anthropic-ai)\/?([\w\.]*)/i,
85
+ /(claude(?:bot|-searchbot|-web)|anthropic-ai)\/?([\w\.]*)/i,
71
86
 
72
87
  // Coc Coc Bot - https://help.coccoc.com/en/search-engine
73
88
  /(coccocbot-(?:image|web))\/([\w\.]+)/i,
74
89
 
90
+ // Daum
91
+ /(daum(?:oa)?(?:-image)?)[ \/]([\w\.]+)/i,
92
+
75
93
  // Facebook / Meta
76
94
  // https://developers.facebook.com/docs/sharing/webmasters/web-crawlers
77
95
  /(facebook(?:externalhit|catalog)|meta-externalagent)\/([\w\.]+)/i,
@@ -82,6 +100,12 @@ const Crawlers = Object.freeze({
82
100
  // Internet Archive (archive.org)
83
101
  /(ia_archiver|archive\.org_bot)\/?([\w\.]*)/i,
84
102
 
103
+ // OnCrawl
104
+ /(oncrawl) mobile\/([\w\.]+)/i,
105
+
106
+ // Qwantbot - https://help.qwant.com/bot
107
+ /(qwantbot(?:-news)?)[-\w]*\/?([\w\.]*)/i,
108
+
85
109
  // SemrushBot - http://www.semrush.com/bot.html
86
110
  /((?:semrush|splitsignal)bot[-abcfimostw]*)\/?([\w\.-]*)/i,
87
111
 
@@ -92,30 +116,38 @@ const Crawlers = Object.freeze({
92
116
  /(y!?j-(?:asr|br[uw]|dscv|mmp|vsidx|wsc))\/([\w\.]+)/i,
93
117
 
94
118
  // Yandex Bots - https://yandex.com/bots
95
- /(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,
119
+ /(yandex(?:(?:mobile)?(?:accessibility|additional|com|renderresources|screenshot|sprav)?bot(?!.+mirror)|image(?:s|resizer)|adnet|blogs|favicons|market|media|metrika|news|ontodb(?:api)?|partner|rca|tracker|turbo|verti(?:cal)?s|webmaster|video(?:parser)?))\/([\w\.]+)/i,
96
120
 
97
121
  // Yeti (Naver)
98
122
  /(yeti)\/([\w\.]+)/i,
99
123
 
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
124
+ // aiHitBot / Algolia Crawler / BLEXBot / Diffbot / FirecrawlAgent / HuggingFace-Bot / Linespider / MSNBot / Magpie-Crawler / Omgilibot / OpenAI Image Downloader / PanguBot / Replicate-Bot / RunPod-Bot / Webzio-Extended / Screaming Frog SEO Spider / Startpage / Timpibot / Together-Bot / VelenPublicWebCrawler / xAI-Bot / YisouSpider / YouBot / ZumBot
125
+ // Cotoyogi - https://ds.rois.ac.jp/en_center8/en_crawler/
126
+ // Freespoke - https://docs.freespoke.com/search/bot/
127
+ /((?:aihit|blex|diff|huggingface-|msn|pangu|replicate-|runpod-|timpi|together-|xai-|you|zum)bot|(?:magpie-|velenpublicweb)crawler|(?:chatglm-|line|screaming frog seo |yisou)spider|cotoyogi|firecrawlagent|freespoke|omgili(?:bot)?|openai image downloader|startpageprivateimageproxy|twinagent|webzio-extended)\/?([\w\.]*)/i
102
128
  ],
103
-
104
129
  [NAME, VERSION, [TYPE, CRAWLER]],
105
130
 
131
+ [
132
+ // YandexBot MirrorDetector
133
+ /(yandexbot\/([\w\.]+); mirrordetector)/i
134
+ ],
135
+ [[NAME, /\/.+;/ig, ''], VERSION, [TYPE, CRAWLER]],
136
+
106
137
  [
107
138
  // Google Bots
108
139
  /((?:adsbot|apis|mediapartners)-google(?:-mobile)?|google-?(?:other|cloudvertexbot|extended|safety))/i,
109
140
 
110
141
  // AI2Bot - https://allenai.org/crawler
111
- // Bytespider
112
142
  // DataForSeoBot - https://dataforseo.com/dataforseo-bot
113
143
  // Huawei AspiegelBot / PetalBot https://aspiegel.com/petalbot
114
144
  // ImagesiftBot - https://imagesift.com/about
115
- // Qihoo 360Spider
145
+ // Siteimprove - https://help.siteimprove.com/support/solutions/articles/80000448553
116
146
  // TurnitinBot - https://www.turnitin.com/robot/crawlerinfo.html
147
+ // v0bot - https://vercel.com/docs/bot-management
117
148
  // Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
118
- /\b(360spider-?(?:image|video)?|bytespider|(?:ai2|aspiegel|dataforseo|imagesift|petal|turnitin)bot|teoma|yahoo! slurp)/i
149
+ // Botify / Bytespider / DeepSeekBot / Qihoo 360Spider / SeekportBot / TikTokSpider
150
+ /\b((ai2|aspiegel|dataforseo|deepseek|imagesift|petal|seekport|turnitin|v0)bot|360spider-?(image|video)?|baidu-ads|botify|(byte|tiktok)spider|cohere-training-data-crawler|elastic(?=\/s)|marginalia|siteimprove(?=bot|\.com)|teoma|webzio|yahoo! slurp)/i
119
151
  ],
120
152
  [NAME, [TYPE, CRAWLER]]
121
153
  ]
@@ -208,9 +240,18 @@ const ExtraDevices = Object.freeze({
208
240
  const Emails = Object.freeze({
209
241
  browser : [
210
242
  [
211
- // Evolution / Kontact/KMail / [Microsoft/Mac] Outlook / Thunderbird
212
- /(airmail|bluemail|emclient|evolution|foxmail|kmail2?|kontact|(?:microsoft |mac)?outlook(?:-express)?|navermailapp|(?!chrom.+)sparrow|thunderbird|yahoo)(?:m.+ail; |[\/ ])([\w\.]+)/i
213
- ], [NAME, VERSION, [TYPE, EMAIL]]
243
+ // Evolution / Kontact/KMail[2] / [Microsoft/Mac] Outlook / Thunderbird
244
+ // Airmail / BlueMail / DaumMail / eMClient / Foxmail / NaverMailApp / Polymail
245
+ // ProtonMail / SparkDesktop / Sparrow / Yahoo! Mail / Zimbra / ZohoMail-Desktop
246
+ /((?: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,
247
+
248
+ // Apple's Mail
249
+ /(mail)\/([\w\.]+) cf/i
250
+ ], [NAME, VERSION, [TYPE, EMAIL]], [
251
+
252
+ // Zimbra
253
+ /zdesktop\/([\w\.]+)/i
254
+ ], [VERSION, [NAME, 'Zimbra'], [TYPE, EMAIL]]
214
255
  ]
215
256
  });
216
257
 
@@ -221,13 +262,17 @@ const Emails = Object.freeze({
221
262
  const Fetchers = Object.freeze({
222
263
  browser : [
223
264
  [
265
+ // Asana / Bitlybot / Better Uptime / BingPreview / Blueno / Cohere-AI / HubSpot Page Fetcher / kakaotalk-scrap / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot
224
266
  // AhrefsSiteAudit - https://ahrefs.com/robot/site-audit
267
+ // Buffer Link Preview Bot - https://scraper.buffer.com/about/bots/link-preview-bot
225
268
  // ChatGPT-User - https://platform.openai.com/docs/plugins/bot
226
269
  // DuckAssistBot - https://duckduckgo.com/duckassistbot/
227
- // Better Uptime / BingPreview / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot
228
270
  // Google Site Verifier / Meta / Yahoo! Japan
271
+ // Iframely - https://iframely.com/docs/about
272
+ // Perplexity-User - https://docs.perplexity.ai/guides/bots
273
+ // MistralAI-User - https://docs.mistral.ai/robots/
229
274
  // Yandex Bots - https://yandex.com/bots
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,
275
+ /(asana|ahrefssiteaudit|(?:bing|microsoft)preview|blueno|(?:chatgpt|claude|mistralai|perplexity)-user|cohere-ai|hubspot page fetcher|mastodon|(?:bitly|bufferlinkpreview|discord|duckassist|linkedin|pinterest|reddit|roger|siteaudit|twitter|uptimero|zoom)bot|google-site-verification|iframely|kakaotalk-scrap|meta-externalfetcher|y!?j-dlc|yandex(?:calendar|direct(?:dyn)?|fordomain|pagechecker|searchshop)|yadirectfetcher)\/([\w\.]+)/i,
231
276
 
232
277
  // Bluesky
233
278
  /(bluesky) cardyb\/([\w\.]+)/i,
@@ -244,8 +289,8 @@ const Fetchers = Object.freeze({
244
289
  [NAME, VERSION, [TYPE, FETCHER]],
245
290
 
246
291
  [
247
- // Google Bots / Cohere / Snapchat / Vercelbot / Yandex Bots
248
- /((?:better uptime |telegram|vercel)bot|cohere-ai|feedfetcher-google|google(?:imageproxy|-read-aloud|-pagerenderer|producer)|snap url preview|yandex(?:sitelinks|userproxy))/i
292
+ // Google Bots / Chrome-Lighthouse / Gemini-Deep-Research / KeybaseBot / Snapchat / Vercelbot / Yandex Bots
293
+ /((?:better uptime |keybase|telegram|vercel)bot|chrome-lighthouse|feedfetcher-google|gemini-deep-research|google(?:imageproxy|-read-aloud|-pagerenderer|producer)|snap url preview|vercel(flags|tracing|-(favicon|screenshot)-bot)|yandex(?:sitelinks|userproxy))/i
249
294
  ],
250
295
  [NAME, [TYPE, FETCHER]],
251
296
  ],
@@ -261,13 +306,31 @@ const Fetchers = Object.freeze({
261
306
  ///////////////////
262
307
 
263
308
  const InApps = Object.freeze({
264
- browser : [
309
+ browser : [[
310
+ // Discord/Figma/Flipboard/Mattermost/Notion/Postman/Rambox/Rocket.Chat/Slack/Teams
311
+ /\b(discord|figma|mattermost|notion|postman|rambox|rocket.chat|slack|teams)\/([\w\.]+).+(electron\/|; ios)/i,
312
+ /(flipboard)\/([\w\.]+)/i
313
+ ], [NAME, VERSION, [TYPE, INAPP]], [
314
+
315
+ // Evernote/Teams on mobile
316
+ /(evernote) win/i,
317
+ /(teams)mobile-(ios|and)/i
318
+ ], [NAME, [TYPE, INAPP]], [
319
+
265
320
  // Slack
266
- [/(?:slack(?=.+electron|.+ios)|chatlyio)\/([\d\.]+)/i],
267
- [VERSION, [NAME, 'Slack'], [TYPE, INAPP]],
321
+ /chatlyio\/([\d\.]+)/i],
322
+ [VERSION, [NAME, 'Slack'], [TYPE, INAPP]], [
323
+
324
+ // TikTok Lite
325
+ /ultralite app_version\/([\w\.]+)/i],
326
+ [VERSION, [NAME, 'TikTok Lite'], [TYPE, INAPP]], [
327
+
328
+ // VS Code
329
+ /\) code\/([\d\.]+).+electron\//i],
330
+ [VERSION, [NAME, 'VS Code'], [TYPE, INAPP]], [
268
331
 
269
332
  // Yahoo! Japan
270
- [/jp\.co\.yahoo\.(?:android\.yjtop|ipn\.appli)\/([\d\.]+)/i],
333
+ /jp\.co\.yahoo\.(?:android\.yjtop|ipn\.appli)\/([\d\.]+)/i],
271
334
  [VERSION, [NAME, 'Yahoo! Japan'], [TYPE, INAPP]]
272
335
  ]
273
336
  });
@@ -332,8 +395,10 @@ const Libraries = Object.freeze({
332
395
  browser : [
333
396
  // 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
334
397
  [
335
- /^(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,
336
- /(jsdom|(?<=\()java)\/([\w\.]+)/i
398
+ /^(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,
399
+ /(adobeair|aiohttp|jsdom)\/([\w\.]+)/i,
400
+ /(nutch)-([\w\.-]+)(\(|$)/i,
401
+ /\((java)\/([\w\.]+)/i
337
402
  ], [NAME, VERSION, [TYPE, LIBRARY]]
338
403
  ]
339
404
  });
@@ -368,8 +433,8 @@ const Vehicles = Object.freeze({
368
433
  const Bots = Object.freeze({
369
434
  browser : [
370
435
  ...CLIs.browser,
371
- ...Crawlers.browser,
372
436
  ...Fetchers.browser,
437
+ ...Crawlers.browser,
373
438
  ...Libraries.browser
374
439
  ],
375
440
  os : [
@@ -1,27 +1,15 @@
1
- // Type definitions for Helpers submodule of UAParser.js v2.0.3
1
+ // Type definitions for Helpers submodule of UAParser.js v2.0.5
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 { IResult } from "../main/ua-parser";
6
6
 
7
- declare function getDeviceVendor(model: string): string | undefined;
8
- declare function isAppleSilicon(resultOrUA: IResult | string): boolean;
9
- declare function isAIBot(resultOrUA: IResult | string): boolean;
10
- declare function isBot(resultOrUA: IResult | string): boolean;
11
- declare function isChromeFamily(resultOrUA: IResult | string): boolean;
12
- declare function isElectron(): boolean;
13
- declare function isFromEU(): boolean;
14
- declare function isFrozenUA(ua: string): boolean;
15
- declare function isStandalonePWA(): boolean;
16
-
17
- export {
18
- getDeviceVendor,
19
- isAppleSilicon,
20
- isAIBot,
21
- isBot,
22
- isChromeFamily,
23
- isElectron,
24
- isFromEU,
25
- isFrozenUA,
26
- isStandalonePWA
27
- }
7
+ export function getDeviceVendor(model: string): string | undefined;
8
+ export function isAppleSilicon(resultOrUA: IResult | string): boolean;
9
+ export function isAIBot(resultOrUA: IResult | string): boolean;
10
+ export function isBot(resultOrUA: IResult | string): boolean;
11
+ export function isChromeFamily(resultOrUA: IResult | string): boolean;
12
+ export function isElectron(): boolean;
13
+ export function isFromEU(): boolean;
14
+ export function isFrozenUA(ua: string): boolean;
15
+ export function isStandalonePWA(): boolean;