ua-parser-js 2.0.6 → 2.0.9
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 +2 -2
- package/dist/ua-parser.min.js +3 -3
- package/dist/ua-parser.min.mjs +3 -3
- package/dist/ua-parser.pack.js +3 -3
- package/dist/ua-parser.pack.mjs +3 -3
- package/package.json +23 -5
- package/script/cli.js +1 -1
- package/src/bot-detection/bot-detection.d.ts +7 -0
- package/src/bot-detection/bot-detection.js +196 -0
- package/src/bot-detection/bot-detection.mjs +200 -0
- package/src/browser-detection/browser-detection.d.ts +10 -0
- package/src/browser-detection/browser-detection.js +30 -0
- package/src/browser-detection/browser-detection.mjs +34 -0
- package/src/device-detection/device-detection.d.ts +8 -0
- package/src/device-detection/device-detection.js +43 -0
- package/src/device-detection/device-detection.mjs +47 -0
- package/src/enums/ua-parser-enums.d.ts +80 -7
- package/src/enums/ua-parser-enums.js +80 -7
- package/src/enums/ua-parser-enums.mjs +80 -7
- package/src/extensions/ua-parser-extensions.d.ts +1 -1
- package/src/extensions/ua-parser-extensions.js +76 -30
- package/src/extensions/ua-parser-extensions.mjs +76 -30
- package/src/helpers/ua-parser-helpers.d.ts +29 -3
- package/src/helpers/ua-parser-helpers.js +85 -159
- package/src/helpers/ua-parser-helpers.mjs +85 -159
- package/src/main/ua-parser.d.ts +1 -1
- package/src/main/ua-parser.js +223 -215
- package/src/main/ua-parser.mjs +223 -215
- package/dist/ua-parser.html +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
///////////////////////////////////////////////
|
|
2
|
-
/* Extensions for UAParser.js v2.0.
|
|
2
|
+
/* Extensions for UAParser.js v2.0.9
|
|
3
3
|
https://github.com/faisalman/ua-parser-js
|
|
4
4
|
Author: Faisal Salman <f@faisalman.com>
|
|
5
5
|
AGPLv3 License */
|
|
@@ -22,14 +22,27 @@ const INAPP = 'inapp';
|
|
|
22
22
|
const MEDIAPLAYER = 'mediaplayer';
|
|
23
23
|
const LIBRARY = 'library';
|
|
24
24
|
|
|
25
|
+
// Helper to normalize specific email client names
|
|
26
|
+
const normalizeEmailName = function (str) {
|
|
27
|
+
const map = {
|
|
28
|
+
'YahooMobile': 'Yahoo Mail',
|
|
29
|
+
'YahooMail': 'Yahoo Mail',
|
|
30
|
+
'K-9': 'K-9 Mail',
|
|
31
|
+
'K-9 Mail': 'K-9 Mail',
|
|
32
|
+
'Zdesktop': 'Zimbra',
|
|
33
|
+
'zdesktop': 'Zimbra'
|
|
34
|
+
};
|
|
35
|
+
return map[str] || str;
|
|
36
|
+
};
|
|
37
|
+
|
|
25
38
|
//////////////////////
|
|
26
39
|
// COMMAND LINE APPS
|
|
27
40
|
/////////////////////
|
|
28
41
|
|
|
29
42
|
const CLIs = Object.freeze({
|
|
30
43
|
browser : [
|
|
31
|
-
// wget / curl / Lynx / ELinks / HTTPie
|
|
32
|
-
[/(wget|curl|lynx|elinks|httpie)[\/ ]\(?([\w\.-]+)/i], [NAME, VERSION, [TYPE, CLI]]
|
|
44
|
+
// wget / curl / Lynx / ELinks / HTTPie / PowerShell
|
|
45
|
+
[/(wget|curl|lynx|elinks|httpie|powershell)[\/ ]\(?([\w\.-]+)/i], [NAME, VERSION, [TYPE, CLI]]
|
|
33
46
|
]
|
|
34
47
|
});
|
|
35
48
|
|
|
@@ -117,10 +130,10 @@ const Crawlers = Object.freeze({
|
|
|
117
130
|
// Yeti (Naver)
|
|
118
131
|
/(yeti)\/([\w\.]+)/i,
|
|
119
132
|
|
|
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
|
|
133
|
+
// aiHitBot / Algolia Crawler / BLEXBot / Cloudflare AutoRAG / 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
134
|
// Cotoyogi - https://ds.rois.ac.jp/en_center8/en_crawler/
|
|
122
135
|
// 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|
|
|
136
|
+
/((?:aihit|blex|diff|huggingface-|msn|pangu|replicate-|runpod-|timpi|together-|xai-|you|zum)bot|(?:magpie-|velenpublicweb)crawler|(?:chatglm-|line|screaming frog seo |yisou)spider|cloudflare-autorag|cotoyogi|(?:firecrawl|twin)agent|freespoke|omgili(?:bot)?|openai image downloader|startpageprivateimageproxy|webzio-extended)\/?([\w\.]*)/i
|
|
124
137
|
],
|
|
125
138
|
[NAME, VERSION, [TYPE, CRAWLER]],
|
|
126
139
|
|
|
@@ -132,7 +145,7 @@ const Crawlers = Object.freeze({
|
|
|
132
145
|
|
|
133
146
|
[
|
|
134
147
|
// Google Bots
|
|
135
|
-
/((?:adsbot|apis|mediapartners)-google(?:-mobile)?|google-?(?:other|cloudvertexbot|extended|safety))/i,
|
|
148
|
+
/((?:adsbot|apis|mediapartners)-google(?:-mobile)?|google-?(?:other|cloudvertexbot|extended|notebooklm|safety))/i,
|
|
136
149
|
|
|
137
150
|
// AI2Bot - https://allenai.org/crawler
|
|
138
151
|
// DataForSeoBot - https://dataforseo.com/dataforseo-bot
|
|
@@ -143,7 +156,7 @@ const Crawlers = Object.freeze({
|
|
|
143
156
|
// v0bot - https://vercel.com/docs/bot-management
|
|
144
157
|
// Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
|
|
145
158
|
// 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
|
|
159
|
+
/\b((ai2|aspiegel|atlassian-|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
|
|
147
160
|
],
|
|
148
161
|
[NAME, [TYPE, CRAWLER]]
|
|
149
162
|
]
|
|
@@ -229,25 +242,55 @@ const ExtraDevices = Object.freeze({
|
|
|
229
242
|
]
|
|
230
243
|
});
|
|
231
244
|
|
|
232
|
-
|
|
245
|
+
//////////////
|
|
233
246
|
// EMAIL APPS
|
|
234
247
|
//////////////
|
|
235
248
|
|
|
236
249
|
const Emails = Object.freeze({
|
|
237
250
|
browser : [
|
|
251
|
+
// 1. Specific Android Mail Rule
|
|
252
|
+
[/(android)\/([\w\.-]+email)/i],
|
|
253
|
+
[NAME, VERSION, [TYPE, EMAIL]],
|
|
254
|
+
|
|
255
|
+
// 2. Standard Email Clients
|
|
256
|
+
[
|
|
257
|
+
new RegExp(
|
|
258
|
+
'(' +
|
|
259
|
+
// Clients ending in 'mail' (Case 1: Prefix + optional space + [e]mail)
|
|
260
|
+
// Covers: AirMail, Claws Mail, FairEmail, SamsungEmail, Yahoo Mail, etc.
|
|
261
|
+
'(?:air|aqua|blue|claws|daum|fair|fox|k-9|mac|nylas|pegasus|poco|poly|proton|samsung|squirrel|yahoo) ?e?mail(?:-desktop| app| bridge)?|' +
|
|
262
|
+
// Standalone / Specific Names
|
|
263
|
+
'microsoft outlook|r2mail2|spicebird|turnpike|yahoomobile|' +
|
|
264
|
+
// Microsoft & Outlook Variants
|
|
265
|
+
'(?:microsoft )?outlook(?:-express)?|macoutlook|windows-live-mail|' +
|
|
266
|
+
// Specific Clients
|
|
267
|
+
'alpine|balsa|barca|canary|emclient|eudora|evolution|geary|gnus|' +
|
|
268
|
+
'horde::imp|incredimail|kmail2?|kontact|lotus-notes|' +
|
|
269
|
+
'mail(?:bird|mate|spring)|mutt|navermailapp|newton|nine|postbox|' +
|
|
270
|
+
'rainloop|roundcube webmail|spar(?:row|kdesktop)|sylpheed|' +
|
|
271
|
+
'the bat!|thunderbird|trojita|tutanota-desktop|wanderlust|' +
|
|
272
|
+
'zdesktop|zohomail-desktop' +
|
|
273
|
+
')' +
|
|
274
|
+
// Separator
|
|
275
|
+
'(?:m.+ail; |[\\/ ])' +
|
|
276
|
+
// Version (Updated to allow hyphens for Turnpike)
|
|
277
|
+
'([\\w\\.-]+)',
|
|
278
|
+
'i'
|
|
279
|
+
)
|
|
280
|
+
],
|
|
238
281
|
[
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
// Apple
|
|
245
|
-
/(mail)\/([\w\.]+) cf/i
|
|
246
|
-
|
|
282
|
+
[NAME, normalizeEmailName],
|
|
283
|
+
VERSION,
|
|
284
|
+
[TYPE, EMAIL]
|
|
285
|
+
],
|
|
286
|
+
|
|
287
|
+
// 3. Apple Mail Context
|
|
288
|
+
[/(mail)\/([\w\.]+) cf/i],
|
|
289
|
+
[NAME, VERSION, [TYPE, EMAIL]],
|
|
247
290
|
|
|
248
|
-
// Zimbra
|
|
249
|
-
/
|
|
250
|
-
|
|
291
|
+
// 4. Zimbra Server
|
|
292
|
+
[/(zimbra)\/([\w\.-]+)/i],
|
|
293
|
+
[NAME, VERSION, [TYPE, EMAIL]]
|
|
251
294
|
]
|
|
252
295
|
});
|
|
253
296
|
|
|
@@ -258,35 +301,36 @@ const Emails = Object.freeze({
|
|
|
258
301
|
const Fetchers = Object.freeze({
|
|
259
302
|
browser : [
|
|
260
303
|
[
|
|
261
|
-
// Asana / Bitlybot / Better Uptime / BingPreview / Blueno / Cohere-AI / HubSpot Page Fetcher / kakaotalk-scrap / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot
|
|
304
|
+
// Asana / Bitlybot / Better Uptime / BingPreview / Blueno / Cohere-AI / HubSpot Page Fetcher / kakaotalk-scrap / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot / WhatsApp
|
|
262
305
|
// AhrefsSiteAudit - https://ahrefs.com/robot/site-audit
|
|
263
306
|
// Buffer Link Preview Bot - https://scraper.buffer.com/about/bots/link-preview-bot
|
|
264
307
|
// ChatGPT-User - https://platform.openai.com/docs/plugins/bot
|
|
265
308
|
// DuckAssistBot - https://duckduckgo.com/duckassistbot/
|
|
309
|
+
// FlipboardProxy - https://about.flipboard.com/proxy-service/
|
|
266
310
|
// Google Site Verifier / Meta / Yahoo! Japan
|
|
267
311
|
// Iframely - https://iframely.com/docs/about
|
|
268
312
|
// Perplexity-User - https://docs.perplexity.ai/guides/bots
|
|
269
313
|
// MistralAI-User - https://docs.mistral.ai/robots/
|
|
270
314
|
// Yandex Bots - https://yandex.com/bots
|
|
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,
|
|
315
|
+
/(asana|ahrefssiteaudit|(?:bing|microsoft)preview|blueno|(?:chatgpt|claude|mistralai|perplexity)-user|cohere-ai|flipboardproxy|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|whatsapp)\/([\w\.]+)/i,
|
|
272
316
|
|
|
273
317
|
// Bluesky
|
|
274
318
|
/(bluesky) cardyb\/([\w\.]+)/i,
|
|
275
319
|
|
|
320
|
+
// Nova Act - https://github.com/aws/nova-act
|
|
321
|
+
/agent-(novaact)\/([\w\.]+)/i,
|
|
322
|
+
|
|
276
323
|
// Skype
|
|
277
324
|
/(skypeuripreview) preview\/([\w\.]+)/i,
|
|
278
325
|
|
|
279
326
|
// Slackbot - https://api.slack.com/robots
|
|
280
|
-
/(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i
|
|
281
|
-
|
|
282
|
-
// WhatsApp
|
|
283
|
-
/(whatsapp)\/([\w\.]+)/i
|
|
327
|
+
/(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i
|
|
284
328
|
],
|
|
285
329
|
[NAME, VERSION, [TYPE, FETCHER]],
|
|
286
330
|
|
|
287
331
|
[
|
|
288
332
|
// Google Bots / Chrome-Lighthouse / Gemini-Deep-Research / KeybaseBot / Snapchat / Vercelbot / Yandex Bots
|
|
289
|
-
/((?:better uptime |keybase|telegram|vercel)bot|
|
|
333
|
+
/((?:better uptime |keybase|telegram|vercel)bot|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
|
|
290
334
|
],
|
|
291
335
|
[NAME, [TYPE, FETCHER]],
|
|
292
336
|
],
|
|
@@ -389,13 +433,15 @@ const MediaPlayers = Object.freeze({
|
|
|
389
433
|
|
|
390
434
|
const Libraries = Object.freeze({
|
|
391
435
|
browser : [
|
|
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
|
|
393
436
|
[
|
|
394
|
-
|
|
437
|
+
// Apache-HttpClient/Axios/Bun/Dart/go-http-client/got/GuzzleHttp/hackney/http.rb/Java[-HttpClient]/Jetty/jsdom/libwww-perl/lua-resty-http/Needle/Node.js/node-fetch/ocaml-cohttp/OkHttp/PHP-SOAP/PostmanRuntime/python-urllib/python-requests/rest-client/Scrapy/superagent
|
|
438
|
+
/^((?:apache|go|java)-http-?client|axios|bun|dart|deno|got|(?:guzzle|lua-resty-|ocaml-co|ok)http|hackney|http\.rb|java|jetty|libwww-perl|needle|node(?:\.js|-fetch|-superagent)|php-soap|postmanruntime|python-(?:httpx|urllib[23]?|requests)|rest-client|scrapy)\/([\w\.]+)/i,
|
|
395
439
|
/(adobeair|aiohttp|jsdom)\/([\w\.]+)/i,
|
|
396
440
|
/(nutch)-([\w\.-]+)(\(|$)/i,
|
|
397
441
|
/\((java)\/([\w\.]+)/i
|
|
398
|
-
], [NAME, VERSION, [TYPE, LIBRARY]]
|
|
442
|
+
], [NAME, VERSION, [TYPE, LIBRARY]], [
|
|
443
|
+
/(node-fetch|undici)/i
|
|
444
|
+
], [NAME, [TYPE, LIBRARY]]
|
|
399
445
|
]
|
|
400
446
|
});
|
|
401
447
|
|
|
@@ -449,4 +495,4 @@ module.exports = {
|
|
|
449
495
|
Libraries,
|
|
450
496
|
MediaPlayers,
|
|
451
497
|
Vehicles
|
|
452
|
-
};
|
|
498
|
+
};
|
|
@@ -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.9
|
|
7
7
|
https://github.com/faisalman/ua-parser-js
|
|
8
8
|
Author: Faisal Salman <f@faisalman.com>
|
|
9
9
|
AGPLv3 License */
|
|
@@ -26,14 +26,27 @@ const INAPP = 'inapp';
|
|
|
26
26
|
const MEDIAPLAYER = 'mediaplayer';
|
|
27
27
|
const LIBRARY = 'library';
|
|
28
28
|
|
|
29
|
+
// Helper to normalize specific email client names
|
|
30
|
+
const normalizeEmailName = function (str) {
|
|
31
|
+
const map = {
|
|
32
|
+
'YahooMobile': 'Yahoo Mail',
|
|
33
|
+
'YahooMail': 'Yahoo Mail',
|
|
34
|
+
'K-9': 'K-9 Mail',
|
|
35
|
+
'K-9 Mail': 'K-9 Mail',
|
|
36
|
+
'Zdesktop': 'Zimbra',
|
|
37
|
+
'zdesktop': 'Zimbra'
|
|
38
|
+
};
|
|
39
|
+
return map[str] || str;
|
|
40
|
+
};
|
|
41
|
+
|
|
29
42
|
//////////////////////
|
|
30
43
|
// COMMAND LINE APPS
|
|
31
44
|
/////////////////////
|
|
32
45
|
|
|
33
46
|
const CLIs = Object.freeze({
|
|
34
47
|
browser : [
|
|
35
|
-
// wget / curl / Lynx / ELinks / HTTPie
|
|
36
|
-
[/(wget|curl|lynx|elinks|httpie)[\/ ]\(?([\w\.-]+)/i], [NAME, VERSION, [TYPE, CLI]]
|
|
48
|
+
// wget / curl / Lynx / ELinks / HTTPie / PowerShell
|
|
49
|
+
[/(wget|curl|lynx|elinks|httpie|powershell)[\/ ]\(?([\w\.-]+)/i], [NAME, VERSION, [TYPE, CLI]]
|
|
37
50
|
]
|
|
38
51
|
});
|
|
39
52
|
|
|
@@ -121,10 +134,10 @@ const Crawlers = Object.freeze({
|
|
|
121
134
|
// Yeti (Naver)
|
|
122
135
|
/(yeti)\/([\w\.]+)/i,
|
|
123
136
|
|
|
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
|
|
137
|
+
// aiHitBot / Algolia Crawler / BLEXBot / Cloudflare AutoRAG / 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
138
|
// Cotoyogi - https://ds.rois.ac.jp/en_center8/en_crawler/
|
|
126
139
|
// 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|
|
|
140
|
+
/((?:aihit|blex|diff|huggingface-|msn|pangu|replicate-|runpod-|timpi|together-|xai-|you|zum)bot|(?:magpie-|velenpublicweb)crawler|(?:chatglm-|line|screaming frog seo |yisou)spider|cloudflare-autorag|cotoyogi|(?:firecrawl|twin)agent|freespoke|omgili(?:bot)?|openai image downloader|startpageprivateimageproxy|webzio-extended)\/?([\w\.]*)/i
|
|
128
141
|
],
|
|
129
142
|
[NAME, VERSION, [TYPE, CRAWLER]],
|
|
130
143
|
|
|
@@ -136,7 +149,7 @@ const Crawlers = Object.freeze({
|
|
|
136
149
|
|
|
137
150
|
[
|
|
138
151
|
// Google Bots
|
|
139
|
-
/((?:adsbot|apis|mediapartners)-google(?:-mobile)?|google-?(?:other|cloudvertexbot|extended|safety))/i,
|
|
152
|
+
/((?:adsbot|apis|mediapartners)-google(?:-mobile)?|google-?(?:other|cloudvertexbot|extended|notebooklm|safety))/i,
|
|
140
153
|
|
|
141
154
|
// AI2Bot - https://allenai.org/crawler
|
|
142
155
|
// DataForSeoBot - https://dataforseo.com/dataforseo-bot
|
|
@@ -147,7 +160,7 @@ const Crawlers = Object.freeze({
|
|
|
147
160
|
// v0bot - https://vercel.com/docs/bot-management
|
|
148
161
|
// Yahoo! Slurp - http://help.yahoo.com/help/us/ysearch/slurp
|
|
149
162
|
// 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
|
|
163
|
+
/\b((ai2|aspiegel|atlassian-|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
|
|
151
164
|
],
|
|
152
165
|
[NAME, [TYPE, CRAWLER]]
|
|
153
166
|
]
|
|
@@ -233,25 +246,55 @@ const ExtraDevices = Object.freeze({
|
|
|
233
246
|
]
|
|
234
247
|
});
|
|
235
248
|
|
|
236
|
-
|
|
249
|
+
//////////////
|
|
237
250
|
// EMAIL APPS
|
|
238
251
|
//////////////
|
|
239
252
|
|
|
240
253
|
const Emails = Object.freeze({
|
|
241
254
|
browser : [
|
|
255
|
+
// 1. Specific Android Mail Rule
|
|
256
|
+
[/(android)\/([\w\.-]+email)/i],
|
|
257
|
+
[NAME, VERSION, [TYPE, EMAIL]],
|
|
258
|
+
|
|
259
|
+
// 2. Standard Email Clients
|
|
260
|
+
[
|
|
261
|
+
new RegExp(
|
|
262
|
+
'(' +
|
|
263
|
+
// Clients ending in 'mail' (Case 1: Prefix + optional space + [e]mail)
|
|
264
|
+
// Covers: AirMail, Claws Mail, FairEmail, SamsungEmail, Yahoo Mail, etc.
|
|
265
|
+
'(?:air|aqua|blue|claws|daum|fair|fox|k-9|mac|nylas|pegasus|poco|poly|proton|samsung|squirrel|yahoo) ?e?mail(?:-desktop| app| bridge)?|' +
|
|
266
|
+
// Standalone / Specific Names
|
|
267
|
+
'microsoft outlook|r2mail2|spicebird|turnpike|yahoomobile|' +
|
|
268
|
+
// Microsoft & Outlook Variants
|
|
269
|
+
'(?:microsoft )?outlook(?:-express)?|macoutlook|windows-live-mail|' +
|
|
270
|
+
// Specific Clients
|
|
271
|
+
'alpine|balsa|barca|canary|emclient|eudora|evolution|geary|gnus|' +
|
|
272
|
+
'horde::imp|incredimail|kmail2?|kontact|lotus-notes|' +
|
|
273
|
+
'mail(?:bird|mate|spring)|mutt|navermailapp|newton|nine|postbox|' +
|
|
274
|
+
'rainloop|roundcube webmail|spar(?:row|kdesktop)|sylpheed|' +
|
|
275
|
+
'the bat!|thunderbird|trojita|tutanota-desktop|wanderlust|' +
|
|
276
|
+
'zdesktop|zohomail-desktop' +
|
|
277
|
+
')' +
|
|
278
|
+
// Separator
|
|
279
|
+
'(?:m.+ail; |[\\/ ])' +
|
|
280
|
+
// Version (Updated to allow hyphens for Turnpike)
|
|
281
|
+
'([\\w\\.-]+)',
|
|
282
|
+
'i'
|
|
283
|
+
)
|
|
284
|
+
],
|
|
242
285
|
[
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
// Apple
|
|
249
|
-
/(mail)\/([\w\.]+) cf/i
|
|
250
|
-
|
|
286
|
+
[NAME, normalizeEmailName],
|
|
287
|
+
VERSION,
|
|
288
|
+
[TYPE, EMAIL]
|
|
289
|
+
],
|
|
290
|
+
|
|
291
|
+
// 3. Apple Mail Context
|
|
292
|
+
[/(mail)\/([\w\.]+) cf/i],
|
|
293
|
+
[NAME, VERSION, [TYPE, EMAIL]],
|
|
251
294
|
|
|
252
|
-
// Zimbra
|
|
253
|
-
/
|
|
254
|
-
|
|
295
|
+
// 4. Zimbra Server
|
|
296
|
+
[/(zimbra)\/([\w\.-]+)/i],
|
|
297
|
+
[NAME, VERSION, [TYPE, EMAIL]]
|
|
255
298
|
]
|
|
256
299
|
});
|
|
257
300
|
|
|
@@ -262,35 +305,36 @@ const Emails = Object.freeze({
|
|
|
262
305
|
const Fetchers = Object.freeze({
|
|
263
306
|
browser : [
|
|
264
307
|
[
|
|
265
|
-
// Asana / Bitlybot / Better Uptime / BingPreview / Blueno / Cohere-AI / HubSpot Page Fetcher / kakaotalk-scrap / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot
|
|
308
|
+
// Asana / Bitlybot / Better Uptime / BingPreview / Blueno / Cohere-AI / HubSpot Page Fetcher / kakaotalk-scrap / Mastodon / MicrosoftPreview / Pinterestbot / Redditbot / Rogerbot / SiteAuditBot / Telegrambot / Twitterbot / UptimeRobot / WhatsApp
|
|
266
309
|
// AhrefsSiteAudit - https://ahrefs.com/robot/site-audit
|
|
267
310
|
// Buffer Link Preview Bot - https://scraper.buffer.com/about/bots/link-preview-bot
|
|
268
311
|
// ChatGPT-User - https://platform.openai.com/docs/plugins/bot
|
|
269
312
|
// DuckAssistBot - https://duckduckgo.com/duckassistbot/
|
|
313
|
+
// FlipboardProxy - https://about.flipboard.com/proxy-service/
|
|
270
314
|
// Google Site Verifier / Meta / Yahoo! Japan
|
|
271
315
|
// Iframely - https://iframely.com/docs/about
|
|
272
316
|
// Perplexity-User - https://docs.perplexity.ai/guides/bots
|
|
273
317
|
// MistralAI-User - https://docs.mistral.ai/robots/
|
|
274
318
|
// Yandex Bots - https://yandex.com/bots
|
|
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,
|
|
319
|
+
/(asana|ahrefssiteaudit|(?:bing|microsoft)preview|blueno|(?:chatgpt|claude|mistralai|perplexity)-user|cohere-ai|flipboardproxy|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|whatsapp)\/([\w\.]+)/i,
|
|
276
320
|
|
|
277
321
|
// Bluesky
|
|
278
322
|
/(bluesky) cardyb\/([\w\.]+)/i,
|
|
279
323
|
|
|
324
|
+
// Nova Act - https://github.com/aws/nova-act
|
|
325
|
+
/agent-(novaact)\/([\w\.]+)/i,
|
|
326
|
+
|
|
280
327
|
// Skype
|
|
281
328
|
/(skypeuripreview) preview\/([\w\.]+)/i,
|
|
282
329
|
|
|
283
330
|
// Slackbot - https://api.slack.com/robots
|
|
284
|
-
/(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i
|
|
285
|
-
|
|
286
|
-
// WhatsApp
|
|
287
|
-
/(whatsapp)\/([\w\.]+)/i
|
|
331
|
+
/(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i
|
|
288
332
|
],
|
|
289
333
|
[NAME, VERSION, [TYPE, FETCHER]],
|
|
290
334
|
|
|
291
335
|
[
|
|
292
336
|
// Google Bots / Chrome-Lighthouse / Gemini-Deep-Research / KeybaseBot / Snapchat / Vercelbot / Yandex Bots
|
|
293
|
-
/((?:better uptime |keybase|telegram|vercel)bot|
|
|
337
|
+
/((?:better uptime |keybase|telegram|vercel)bot|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
|
|
294
338
|
],
|
|
295
339
|
[NAME, [TYPE, FETCHER]],
|
|
296
340
|
],
|
|
@@ -393,13 +437,15 @@ const MediaPlayers = Object.freeze({
|
|
|
393
437
|
|
|
394
438
|
const Libraries = Object.freeze({
|
|
395
439
|
browser : [
|
|
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
|
|
397
440
|
[
|
|
398
|
-
|
|
441
|
+
// Apache-HttpClient/Axios/Bun/Dart/go-http-client/got/GuzzleHttp/hackney/http.rb/Java[-HttpClient]/Jetty/jsdom/libwww-perl/lua-resty-http/Needle/Node.js/node-fetch/ocaml-cohttp/OkHttp/PHP-SOAP/PostmanRuntime/python-urllib/python-requests/rest-client/Scrapy/superagent
|
|
442
|
+
/^((?:apache|go|java)-http-?client|axios|bun|dart|deno|got|(?:guzzle|lua-resty-|ocaml-co|ok)http|hackney|http\.rb|java|jetty|libwww-perl|needle|node(?:\.js|-fetch|-superagent)|php-soap|postmanruntime|python-(?:httpx|urllib[23]?|requests)|rest-client|scrapy)\/([\w\.]+)/i,
|
|
399
443
|
/(adobeair|aiohttp|jsdom)\/([\w\.]+)/i,
|
|
400
444
|
/(nutch)-([\w\.-]+)(\(|$)/i,
|
|
401
445
|
/\((java)\/([\w\.]+)/i
|
|
402
|
-
], [NAME, VERSION, [TYPE, LIBRARY]]
|
|
446
|
+
], [NAME, VERSION, [TYPE, LIBRARY]], [
|
|
447
|
+
/(node-fetch|undici)/i
|
|
448
|
+
], [NAME, [TYPE, LIBRARY]]
|
|
403
449
|
]
|
|
404
450
|
});
|
|
405
451
|
|
|
@@ -453,4 +499,4 @@ export {
|
|
|
453
499
|
Libraries,
|
|
454
500
|
MediaPlayers,
|
|
455
501
|
Vehicles
|
|
456
|
-
};
|
|
502
|
+
};
|
|
@@ -1,15 +1,41 @@
|
|
|
1
|
-
// Type definitions for Helpers submodule of UAParser.js v2.0.
|
|
1
|
+
// Type definitions for Helpers submodule of UAParser.js v2.0.9
|
|
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
|
+
export function getOutlookEdition(name: string, version: string): string;
|
|
8
|
+
export function isFrozenUA(ua: string): boolean;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @deprecated Moved to `device-detection` submodule
|
|
12
|
+
*/
|
|
7
13
|
export function getDeviceVendor(model: string): string | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated Moved to `device-detection` submodule
|
|
16
|
+
*/
|
|
8
17
|
export function isAppleSilicon(resultOrUA: IResult | string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* @deprecated Moved to `bot-detection` submodule
|
|
20
|
+
*/
|
|
9
21
|
export function isAIBot(resultOrUA: IResult | string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* @deprecated Moved to `bot-detection` submodule
|
|
24
|
+
*/
|
|
10
25
|
export function isBot(resultOrUA: IResult | string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated Moved to `browser-detection` submodule
|
|
28
|
+
*/
|
|
11
29
|
export function isChromeFamily(resultOrUA: IResult | string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* @deprecated Moved to `browser-detection` submodule
|
|
32
|
+
*/
|
|
12
33
|
export function isElectron(): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* @deprecated Moved to `browser-detection` submodule
|
|
36
|
+
*/
|
|
13
37
|
export function isFromEU(): boolean;
|
|
14
|
-
|
|
15
|
-
|
|
38
|
+
/**
|
|
39
|
+
* @deprecated Moved to `browser-detection` submodule
|
|
40
|
+
*/
|
|
41
|
+
export function isStandalonePWA(): boolean;
|