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.
- package/README.md +62 -33
- package/dist/ua-parser.min.js +2 -2
- package/dist/ua-parser.min.mjs +2 -2
- package/dist/ua-parser.pack.js +2 -2
- package/dist/ua-parser.pack.mjs +2 -2
- package/package.json +7 -9
- package/script/cli.js +92 -2
- package/src/enums/ua-parser-enums.d.ts +734 -364
- package/src/enums/ua-parser-enums.js +371 -16
- package/src/enums/ua-parser-enums.mjs +371 -16
- package/src/extensions/ua-parser-extensions.d.ts +1 -1
- package/src/extensions/ua-parser-extensions.js +89 -24
- package/src/extensions/ua-parser-extensions.mjs +89 -24
- package/src/helpers/ua-parser-helpers.d.ts +10 -22
- package/src/helpers/ua-parser-helpers.js +88 -43
- package/src/helpers/ua-parser-helpers.mjs +88 -43
- package/src/main/ua-parser.d.ts +7 -8
- package/src/main/ua-parser.js +316 -244
- package/src/main/ua-parser.mjs +313 -241
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
///////////////////////////////////////////////
|
|
2
|
-
/* Extensions for UAParser.js v2.0.
|
|
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
|
-
/
|
|
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)|
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
-
/
|
|
209
|
-
|
|
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 /
|
|
244
|
-
/((?:better uptime |telegram|vercel)bot|
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
332
|
-
/(jsdom
|
|
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.
|
|
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
|
-
/
|
|
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)|
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
-
/
|
|
213
|
-
|
|
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 /
|
|
248
|
-
/((?:better uptime |telegram|vercel)bot|
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
336
|
-
/(jsdom
|
|
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.
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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;
|