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
|
-
/* Helpers for UAParser.js v2.0.
|
|
2
|
+
/* Helpers 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 */
|
|
@@ -7,170 +7,95 @@
|
|
|
7
7
|
|
|
8
8
|
/*jshint esversion: 6 */
|
|
9
9
|
|
|
10
|
-
const {
|
|
11
|
-
const {
|
|
12
|
-
const {
|
|
13
|
-
const { isFromEU } = require('
|
|
10
|
+
const { getDeviceVendor: _getDeviceVendor, isAppleSilicon: _isAppleSilicon } = require('../device-detection/device-detection');
|
|
11
|
+
const { isBot: _isBot, isAICrawler } = require('../bot-detection/bot-detection');
|
|
12
|
+
const { isChromeFamily: _isChromeFamily, isElectron: _isElectron, isStandalonePWA: _isStandalonePWA } = require('../browser-detection/browser-detection');
|
|
13
|
+
const { isFromEU: _isFromEU } = require('../browser-detection/browser-detection');
|
|
14
14
|
const { isFrozenUA } = require('ua-is-frozen');
|
|
15
|
-
const { isStandalonePWA } = require('is-standalone-pwa');
|
|
16
|
-
const { Crawler } = Extension.BrowserName;
|
|
17
15
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated Moved to `device-detection` submodule
|
|
18
|
+
*/
|
|
19
|
+
const getDeviceVendor = _getDeviceVendor;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @deprecated Moved to `device-detection` submodule
|
|
23
|
+
*/
|
|
24
|
+
const isAppleSilicon = _isAppleSilicon;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated Moved to `bot-detection` submodule
|
|
28
|
+
*/
|
|
29
|
+
const isAIBot = isAICrawler;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @deprecated Moved to `bot-detection` submodule
|
|
33
|
+
*/
|
|
34
|
+
const isBot = _isBot;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @deprecated Moved to `browser-detection` submodule
|
|
38
|
+
*/
|
|
39
|
+
const isChromeFamily = _isChromeFamily;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @deprecated Moved to `browser-detection` submodule
|
|
43
|
+
*/
|
|
44
|
+
const isElectron = () => _isElectron;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @deprecated Moved to `browser-detection` submodule
|
|
48
|
+
*/
|
|
49
|
+
const isFromEU = _isFromEU;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @deprecated Moved to `browser-detection` submodule
|
|
53
|
+
*/
|
|
54
|
+
const isStandalonePWA = _isStandalonePWA;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Translates a raw Outlook User-Agent name/version into a
|
|
58
|
+
* Developer-friendly Edition (e.g., "Outlook 2019 (Modern Word)").
|
|
59
|
+
*/
|
|
60
|
+
const getOutlookEdition = (name, version) => {
|
|
61
|
+
if (!name || !version) return name;
|
|
62
|
+
const cleanName = name.toLowerCase().replace(/microsoft\s+/, '');
|
|
63
|
+
|
|
64
|
+
// 1. Handle Mac Separately (Different Rendering Engine)
|
|
65
|
+
if (cleanName === 'macoutlook') {
|
|
66
|
+
const major = parseInt(version.split('.')[0], 10);
|
|
67
|
+
if (major >= 16) return "Outlook for Mac (Modern)";
|
|
68
|
+
return "Outlook for Mac (Legacy)";
|
|
69
|
+
}
|
|
21
70
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
71
|
+
// 2. Handle Windows Outlook
|
|
72
|
+
if (cleanName === 'outlook') {
|
|
73
|
+
const parts = version.split('.').map(Number);
|
|
74
|
+
const major = parts[0];
|
|
75
|
+
const build = parts[2] || 0; // Build number is usually the 3rd part
|
|
76
|
+
|
|
77
|
+
// Pre-2016 Versions (Clear Major Version mapping)
|
|
78
|
+
if (major === 15) return "Outlook 2013";
|
|
79
|
+
if (major === 14) return "Outlook 2010";
|
|
80
|
+
if (major === 12) return "Outlook 2007";
|
|
81
|
+
if (major < 12) return "Outlook (Legacy)";
|
|
82
|
+
|
|
83
|
+
// The Version 16.0 Confusion
|
|
84
|
+
if (major === 16) {
|
|
85
|
+
// Build < 10000 = MSI (Volume License 2016/2019)
|
|
86
|
+
// These render poorly (No SVG, older bugs)
|
|
87
|
+
if (build < 10000) {
|
|
88
|
+
return "Outlook 2016 (MSI / Volume License)";
|
|
39
89
|
}
|
|
90
|
+
// Build >= 10000 = Click-to-Run (Retail 2016 / 2019 / 365)
|
|
91
|
+
// These render well (SVG support, modern CSS)
|
|
92
|
+
return "Outlook 365 / 2019+ (Modern)";
|
|
40
93
|
}
|
|
41
94
|
}
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const isAIBot = (resultOrUA) => [
|
|
46
|
-
|
|
47
|
-
// AI2
|
|
48
|
-
Crawler.AI2_BOT,
|
|
49
|
-
|
|
50
|
-
// Amazon
|
|
51
|
-
Crawler.AMAZON_BOT,
|
|
52
|
-
|
|
53
|
-
// Anthropic
|
|
54
|
-
Crawler.ANTHROPIC_AI,
|
|
55
|
-
Crawler.ANTHROPIC_CLAUDE_BOT,
|
|
56
|
-
Crawler.ANTHROPIC_CLAUDE_SEARCHBOT,
|
|
57
|
-
Crawler.ANTHROPIC_CLAUDE_WEB,
|
|
58
|
-
|
|
59
|
-
// Apple
|
|
60
|
-
Crawler.APPLE_BOT,
|
|
61
|
-
Crawler.APPLE_BOT_EXTENDED,
|
|
62
|
-
|
|
63
|
-
// Brave
|
|
64
|
-
Crawler.BRAVE_BOT,
|
|
65
|
-
|
|
66
|
-
// ByteDance
|
|
67
|
-
Crawler.BYTEDANCE_BYTESPIDER,
|
|
68
|
-
Crawler.BYTEDANCE_TIKTOKSPIDER,
|
|
69
|
-
|
|
70
|
-
// Cohere
|
|
71
|
-
Crawler.COHERE_TRAINING_DATA_CRAWLER,
|
|
72
|
-
|
|
73
|
-
// Common Crawl
|
|
74
|
-
Crawler.COMMON_CRAWL_CCBOT,
|
|
75
|
-
|
|
76
|
-
// Coveo
|
|
77
|
-
Crawler.COVEO_BOT,
|
|
78
|
-
|
|
79
|
-
// DataForSeo
|
|
80
|
-
Crawler.DATAFORSEO_BOT,
|
|
81
|
-
|
|
82
|
-
// DeepSeek
|
|
83
|
-
Crawler.DEEPSEEK_BOT,
|
|
84
|
-
|
|
85
|
-
// Diffbot
|
|
86
|
-
Crawler.DIFFBOT,
|
|
87
|
-
|
|
88
|
-
// Google
|
|
89
|
-
Crawler.GOOGLE_EXTENDED,
|
|
90
|
-
Crawler.GOOGLE_OTHER,
|
|
91
|
-
Crawler.GOOGLE_OTHER_IMAGE,
|
|
92
|
-
Crawler.GOOGLE_OTHER_VIDEO,
|
|
93
|
-
Crawler.GOOGLE_CLOUDVERTEXBOT,
|
|
94
|
-
|
|
95
|
-
// Hive AI
|
|
96
|
-
Crawler.HIVE_IMAGESIFTBOT,
|
|
97
|
-
|
|
98
|
-
// Huawei
|
|
99
|
-
Crawler.HUAWEI_PETALBOT,
|
|
100
|
-
Crawler.HUAWEI_PANGUBOT,
|
|
101
|
-
|
|
102
|
-
// Hugging Face
|
|
103
|
-
Crawler.HUGGINGFACE_BOT,
|
|
104
|
-
|
|
105
|
-
// Kangaroo
|
|
106
|
-
Crawler.KANGAROO_BOT,
|
|
107
|
-
|
|
108
|
-
// Mendable.ai
|
|
109
|
-
Crawler.FIRECRAWL_AGENT,
|
|
110
|
-
|
|
111
|
-
// Meta
|
|
112
|
-
Crawler.META_FACEBOOKBOT,
|
|
113
|
-
Crawler.META_EXTERNALAGENT,
|
|
114
|
-
|
|
115
|
-
// OpenAI
|
|
116
|
-
Crawler.OPENAI_GPTBOT,
|
|
117
|
-
Crawler.OPENAI_SEARCH_BOT,
|
|
118
|
-
|
|
119
|
-
// Perplexity
|
|
120
|
-
Crawler.PERPLEXITY_BOT,
|
|
121
|
-
|
|
122
|
-
// Replicate
|
|
123
|
-
Crawler.REPLICATE_BOT,
|
|
124
|
-
|
|
125
|
-
// Runpod
|
|
126
|
-
Crawler.RUNPOD_BOT,
|
|
127
|
-
|
|
128
|
-
// SB Intuitions
|
|
129
|
-
Crawler.SB_INTUITIONS_BOT,
|
|
130
|
-
|
|
131
|
-
// Semrush
|
|
132
|
-
Crawler.SEMRUSH_BOT_CONTENTSHAKE,
|
|
133
|
-
|
|
134
|
-
// Timpi
|
|
135
|
-
Crawler.TIMPI_BOT,
|
|
136
|
-
|
|
137
|
-
// Together AI
|
|
138
|
-
Crawler.TOGETHER_BOT,
|
|
139
|
-
|
|
140
|
-
// Velen.io
|
|
141
|
-
Crawler.HUNTER_VELENPUBLICWEBCRAWLER,
|
|
142
|
-
|
|
143
|
-
// Vercel
|
|
144
|
-
Crawler.VERCEL_V0BOT,
|
|
145
|
-
|
|
146
|
-
// Webz.io
|
|
147
|
-
Crawler.WEBZIO_OMGILI,
|
|
148
|
-
Crawler.WEBZIO_OMGILI_BOT,
|
|
149
|
-
Crawler.WEBZIO_EXTENDED,
|
|
150
|
-
|
|
151
|
-
// X
|
|
152
|
-
Crawler.XAI_BOT,
|
|
153
|
-
|
|
154
|
-
// You.com
|
|
155
|
-
Crawler.YOU_BOT,
|
|
156
|
-
|
|
157
|
-
// Zhipu AI
|
|
158
|
-
Crawler.ZHIPU_CHATGLM_SPIDER
|
|
159
|
-
]
|
|
160
|
-
.map((s) => s.toLowerCase())
|
|
161
|
-
.includes(String(toResult(resultOrUA, Crawlers).browser.name).toLowerCase());
|
|
162
|
-
|
|
163
|
-
const isBot = (resultOrUA) => [
|
|
164
|
-
BrowserType.CLI,
|
|
165
|
-
BrowserType.CRAWLER,
|
|
166
|
-
BrowserType.FETCHER,
|
|
167
|
-
BrowserType.LIBRARY
|
|
168
|
-
].includes(toResult(resultOrUA, Bots).browser.type);
|
|
169
|
-
|
|
170
|
-
const isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(EngineName.BLINK);
|
|
171
95
|
|
|
172
|
-
|
|
173
|
-
|
|
96
|
+
// 3. Fallback for 'Outlook Express' or 'New Outlook' (Browser)
|
|
97
|
+
return name;
|
|
98
|
+
};
|
|
174
99
|
|
|
175
100
|
module.exports = {
|
|
176
101
|
getDeviceVendor,
|
|
@@ -181,5 +106,6 @@ module.exports = {
|
|
|
181
106
|
isElectron,
|
|
182
107
|
isFromEU,
|
|
183
108
|
isFrozenUA,
|
|
184
|
-
isStandalonePWA
|
|
109
|
+
isStandalonePWA,
|
|
110
|
+
getOutlookEdition
|
|
185
111
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Source: /src/helpers/ua-parser-helpers.js
|
|
4
4
|
|
|
5
5
|
///////////////////////////////////////////////
|
|
6
|
-
/* Helpers for UAParser.js v2.0.
|
|
6
|
+
/* Helpers 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 */
|
|
@@ -11,170 +11,95 @@
|
|
|
11
11
|
|
|
12
12
|
/*jshint esversion: 6 */
|
|
13
13
|
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import { isFromEU } from '
|
|
14
|
+
import { getDeviceVendor as _getDeviceVendor, isAppleSilicon as _isAppleSilicon } from '../device-detection/device-detection.mjs';
|
|
15
|
+
import { isBot as _isBot, isAICrawler } from '../bot-detection/bot-detection.mjs';
|
|
16
|
+
import { isChromeFamily as _isChromeFamily, isElectron as _isElectron, isStandalonePWA as _isStandalonePWA } from '../browser-detection/browser-detection.mjs';
|
|
17
|
+
import { isFromEU as _isFromEU } from '../browser-detection/browser-detection.mjs';
|
|
18
18
|
import { isFrozenUA } from 'ua-is-frozen';
|
|
19
|
-
import { isStandalonePWA } from 'is-standalone-pwa';
|
|
20
|
-
const { Crawler } = Extension.BrowserName;
|
|
21
19
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated Moved to `device-detection` submodule
|
|
22
|
+
*/
|
|
23
|
+
const getDeviceVendor = _getDeviceVendor;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @deprecated Moved to `device-detection` submodule
|
|
27
|
+
*/
|
|
28
|
+
const isAppleSilicon = _isAppleSilicon;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @deprecated Moved to `bot-detection` submodule
|
|
32
|
+
*/
|
|
33
|
+
const isAIBot = isAICrawler;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @deprecated Moved to `bot-detection` submodule
|
|
37
|
+
*/
|
|
38
|
+
const isBot = _isBot;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @deprecated Moved to `browser-detection` submodule
|
|
42
|
+
*/
|
|
43
|
+
const isChromeFamily = _isChromeFamily;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @deprecated Moved to `browser-detection` submodule
|
|
47
|
+
*/
|
|
48
|
+
const isElectron = () => _isElectron;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @deprecated Moved to `browser-detection` submodule
|
|
52
|
+
*/
|
|
53
|
+
const isFromEU = _isFromEU;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @deprecated Moved to `browser-detection` submodule
|
|
57
|
+
*/
|
|
58
|
+
const isStandalonePWA = _isStandalonePWA;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Translates a raw Outlook User-Agent name/version into a
|
|
62
|
+
* Developer-friendly Edition (e.g., "Outlook 2019 (Modern Word)").
|
|
63
|
+
*/
|
|
64
|
+
const getOutlookEdition = (name, version) => {
|
|
65
|
+
if (!name || !version) return name;
|
|
66
|
+
const cleanName = name.toLowerCase().replace(/microsoft\s+/, '');
|
|
67
|
+
|
|
68
|
+
// 1. Handle Mac Separately (Different Rendering Engine)
|
|
69
|
+
if (cleanName === 'macoutlook') {
|
|
70
|
+
const major = parseInt(version.split('.')[0], 10);
|
|
71
|
+
if (major >= 16) return "Outlook for Mac (Modern)";
|
|
72
|
+
return "Outlook for Mac (Legacy)";
|
|
73
|
+
}
|
|
25
74
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
75
|
+
// 2. Handle Windows Outlook
|
|
76
|
+
if (cleanName === 'outlook') {
|
|
77
|
+
const parts = version.split('.').map(Number);
|
|
78
|
+
const major = parts[0];
|
|
79
|
+
const build = parts[2] || 0; // Build number is usually the 3rd part
|
|
80
|
+
|
|
81
|
+
// Pre-2016 Versions (Clear Major Version mapping)
|
|
82
|
+
if (major === 15) return "Outlook 2013";
|
|
83
|
+
if (major === 14) return "Outlook 2010";
|
|
84
|
+
if (major === 12) return "Outlook 2007";
|
|
85
|
+
if (major < 12) return "Outlook (Legacy)";
|
|
86
|
+
|
|
87
|
+
// The Version 16.0 Confusion
|
|
88
|
+
if (major === 16) {
|
|
89
|
+
// Build < 10000 = MSI (Volume License 2016/2019)
|
|
90
|
+
// These render poorly (No SVG, older bugs)
|
|
91
|
+
if (build < 10000) {
|
|
92
|
+
return "Outlook 2016 (MSI / Volume License)";
|
|
43
93
|
}
|
|
94
|
+
// Build >= 10000 = Click-to-Run (Retail 2016 / 2019 / 365)
|
|
95
|
+
// These render well (SVG support, modern CSS)
|
|
96
|
+
return "Outlook 365 / 2019+ (Modern)";
|
|
44
97
|
}
|
|
45
98
|
}
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const isAIBot = (resultOrUA) => [
|
|
50
|
-
|
|
51
|
-
// AI2
|
|
52
|
-
Crawler.AI2_BOT,
|
|
53
|
-
|
|
54
|
-
// Amazon
|
|
55
|
-
Crawler.AMAZON_BOT,
|
|
56
|
-
|
|
57
|
-
// Anthropic
|
|
58
|
-
Crawler.ANTHROPIC_AI,
|
|
59
|
-
Crawler.ANTHROPIC_CLAUDE_BOT,
|
|
60
|
-
Crawler.ANTHROPIC_CLAUDE_SEARCHBOT,
|
|
61
|
-
Crawler.ANTHROPIC_CLAUDE_WEB,
|
|
62
|
-
|
|
63
|
-
// Apple
|
|
64
|
-
Crawler.APPLE_BOT,
|
|
65
|
-
Crawler.APPLE_BOT_EXTENDED,
|
|
66
|
-
|
|
67
|
-
// Brave
|
|
68
|
-
Crawler.BRAVE_BOT,
|
|
69
|
-
|
|
70
|
-
// ByteDance
|
|
71
|
-
Crawler.BYTEDANCE_BYTESPIDER,
|
|
72
|
-
Crawler.BYTEDANCE_TIKTOKSPIDER,
|
|
73
|
-
|
|
74
|
-
// Cohere
|
|
75
|
-
Crawler.COHERE_TRAINING_DATA_CRAWLER,
|
|
76
|
-
|
|
77
|
-
// Common Crawl
|
|
78
|
-
Crawler.COMMON_CRAWL_CCBOT,
|
|
79
|
-
|
|
80
|
-
// Coveo
|
|
81
|
-
Crawler.COVEO_BOT,
|
|
82
|
-
|
|
83
|
-
// DataForSeo
|
|
84
|
-
Crawler.DATAFORSEO_BOT,
|
|
85
|
-
|
|
86
|
-
// DeepSeek
|
|
87
|
-
Crawler.DEEPSEEK_BOT,
|
|
88
|
-
|
|
89
|
-
// Diffbot
|
|
90
|
-
Crawler.DIFFBOT,
|
|
91
|
-
|
|
92
|
-
// Google
|
|
93
|
-
Crawler.GOOGLE_EXTENDED,
|
|
94
|
-
Crawler.GOOGLE_OTHER,
|
|
95
|
-
Crawler.GOOGLE_OTHER_IMAGE,
|
|
96
|
-
Crawler.GOOGLE_OTHER_VIDEO,
|
|
97
|
-
Crawler.GOOGLE_CLOUDVERTEXBOT,
|
|
98
|
-
|
|
99
|
-
// Hive AI
|
|
100
|
-
Crawler.HIVE_IMAGESIFTBOT,
|
|
101
|
-
|
|
102
|
-
// Huawei
|
|
103
|
-
Crawler.HUAWEI_PETALBOT,
|
|
104
|
-
Crawler.HUAWEI_PANGUBOT,
|
|
105
|
-
|
|
106
|
-
// Hugging Face
|
|
107
|
-
Crawler.HUGGINGFACE_BOT,
|
|
108
|
-
|
|
109
|
-
// Kangaroo
|
|
110
|
-
Crawler.KANGAROO_BOT,
|
|
111
|
-
|
|
112
|
-
// Mendable.ai
|
|
113
|
-
Crawler.FIRECRAWL_AGENT,
|
|
114
|
-
|
|
115
|
-
// Meta
|
|
116
|
-
Crawler.META_FACEBOOKBOT,
|
|
117
|
-
Crawler.META_EXTERNALAGENT,
|
|
118
|
-
|
|
119
|
-
// OpenAI
|
|
120
|
-
Crawler.OPENAI_GPTBOT,
|
|
121
|
-
Crawler.OPENAI_SEARCH_BOT,
|
|
122
|
-
|
|
123
|
-
// Perplexity
|
|
124
|
-
Crawler.PERPLEXITY_BOT,
|
|
125
|
-
|
|
126
|
-
// Replicate
|
|
127
|
-
Crawler.REPLICATE_BOT,
|
|
128
|
-
|
|
129
|
-
// Runpod
|
|
130
|
-
Crawler.RUNPOD_BOT,
|
|
131
|
-
|
|
132
|
-
// SB Intuitions
|
|
133
|
-
Crawler.SB_INTUITIONS_BOT,
|
|
134
|
-
|
|
135
|
-
// Semrush
|
|
136
|
-
Crawler.SEMRUSH_BOT_CONTENTSHAKE,
|
|
137
|
-
|
|
138
|
-
// Timpi
|
|
139
|
-
Crawler.TIMPI_BOT,
|
|
140
|
-
|
|
141
|
-
// Together AI
|
|
142
|
-
Crawler.TOGETHER_BOT,
|
|
143
|
-
|
|
144
|
-
// Velen.io
|
|
145
|
-
Crawler.HUNTER_VELENPUBLICWEBCRAWLER,
|
|
146
|
-
|
|
147
|
-
// Vercel
|
|
148
|
-
Crawler.VERCEL_V0BOT,
|
|
149
|
-
|
|
150
|
-
// Webz.io
|
|
151
|
-
Crawler.WEBZIO_OMGILI,
|
|
152
|
-
Crawler.WEBZIO_OMGILI_BOT,
|
|
153
|
-
Crawler.WEBZIO_EXTENDED,
|
|
154
|
-
|
|
155
|
-
// X
|
|
156
|
-
Crawler.XAI_BOT,
|
|
157
|
-
|
|
158
|
-
// You.com
|
|
159
|
-
Crawler.YOU_BOT,
|
|
160
|
-
|
|
161
|
-
// Zhipu AI
|
|
162
|
-
Crawler.ZHIPU_CHATGLM_SPIDER
|
|
163
|
-
]
|
|
164
|
-
.map((s) => s.toLowerCase())
|
|
165
|
-
.includes(String(toResult(resultOrUA, Crawlers).browser.name).toLowerCase());
|
|
166
|
-
|
|
167
|
-
const isBot = (resultOrUA) => [
|
|
168
|
-
BrowserType.CLI,
|
|
169
|
-
BrowserType.CRAWLER,
|
|
170
|
-
BrowserType.FETCHER,
|
|
171
|
-
BrowserType.LIBRARY
|
|
172
|
-
].includes(toResult(resultOrUA, Bots).browser.type);
|
|
173
|
-
|
|
174
|
-
const isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(EngineName.BLINK);
|
|
175
99
|
|
|
176
|
-
|
|
177
|
-
|
|
100
|
+
// 3. Fallback for 'Outlook Express' or 'New Outlook' (Browser)
|
|
101
|
+
return name;
|
|
102
|
+
};
|
|
178
103
|
|
|
179
104
|
export {
|
|
180
105
|
getDeviceVendor,
|
|
@@ -185,5 +110,6 @@ export {
|
|
|
185
110
|
isElectron,
|
|
186
111
|
isFromEU,
|
|
187
112
|
isFrozenUA,
|
|
188
|
-
isStandalonePWA
|
|
113
|
+
isStandalonePWA,
|
|
114
|
+
getOutlookEdition
|
|
189
115
|
}
|
package/src/main/ua-parser.d.ts
CHANGED