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
- /* Helpers for UAParser.js v2.0.3
2
+ /* Helpers 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 */
@@ -8,11 +8,12 @@
8
8
  /*jshint esversion: 6 */
9
9
 
10
10
  const { UAParser } = require('../main/ua-parser');
11
- const { CPU, OS, Engine } = require('../enums/ua-parser-enums');
12
- const { Bots } = require('../extensions/ua-parser-extensions');
11
+ const { CPUArch, OSName, EngineName, Extension, BrowserType } = require('../enums/ua-parser-enums');
12
+ const { Bots, Crawlers } = require('../extensions/ua-parser-extensions');
13
13
  const { isFromEU } = require('detect-europe-js');
14
14
  const { isFrozenUA } = require('ua-is-frozen');
15
15
  const { isStandalonePWA } = require('is-standalone-pwa');
16
+ const { Crawler } = Extension.BrowserName;
16
17
 
17
18
  const toResult = (value, head, ext) => typeof value === 'string' ? UAParser(value, head, ext) : value;
18
19
 
@@ -20,8 +21,8 @@ const getDeviceVendor = (model) => UAParser(`Mozilla/5.0 (Linux; Android 10; ${m
20
21
 
21
22
  const isAppleSilicon = (resultOrUA) => {
22
23
  const res = toResult(resultOrUA);
23
- if (res.os.is(OS.MACOS)) {
24
- if (res.cpu.is(CPU.ARM)) {
24
+ if (res.os.is(OSName.MACOS)) {
25
+ if (res.cpu.is(CPUArch.ARM)) {
25
26
  return true;
26
27
  }
27
28
  if (typeof resultOrUA !== 'string' && typeof window !== 'undefined') {
@@ -44,85 +45,129 @@ const isAppleSilicon = (resultOrUA) => {
44
45
  const isAIBot = (resultOrUA) => [
45
46
 
46
47
  // AI2
47
- 'ai2bot',
48
+ Crawler.AI2_BOT,
48
49
 
49
50
  // Amazon
50
- 'amazonbot',
51
+ Crawler.AMAZON_BOT,
51
52
 
52
53
  // Anthropic
53
- 'anthropic-ai',
54
- 'claude-web',
55
- 'claudebot',
54
+ Crawler.ANTHROPIC_AI,
55
+ Crawler.ANTHROPIC_CLAUDE_BOT,
56
+ Crawler.ANTHROPIC_CLAUDE_SEARCHBOT,
57
+ Crawler.ANTHROPIC_CLAUDE_WEB,
56
58
 
57
59
  // Apple
58
- 'applebot',
59
- 'applebot-extended',
60
+ Crawler.APPLE_BOT,
61
+ Crawler.APPLE_BOT_EXTENDED,
62
+
63
+ // Brave
64
+ Crawler.BRAVE_BOT,
60
65
 
61
66
  // ByteDance
62
- 'bytespider',
67
+ Crawler.BYTEDANCE_BYTESPIDER,
68
+ Crawler.BYTEDANCE_TIKTOKSPIDER,
69
+
70
+ // Cohere
71
+ Crawler.COHERE_TRAINING_DATA_CRAWLER,
63
72
 
64
73
  // Common Crawl
65
- 'ccbot',
74
+ Crawler.COMMON_CRAWL_CCBOT,
75
+
76
+ // Coveo
77
+ Crawler.COVEO_BOT,
66
78
 
67
79
  // DataForSeo
68
- 'dataforseobot',
80
+ Crawler.DATAFORSEO_BOT,
81
+
82
+ // DeepSeek
83
+ Crawler.DEEPSEEK_BOT,
69
84
 
70
85
  // Diffbot
71
- 'diffbot',
86
+ Crawler.DIFFBOT,
72
87
 
73
88
  // Google
74
- 'googleother',
75
- 'googleother-image',
76
- 'googleother-video',
77
- 'google-extended',
89
+ Crawler.GOOGLE_EXTENDED,
90
+ Crawler.GOOGLE_OTHER,
91
+ Crawler.GOOGLE_OTHER_IMAGE,
92
+ Crawler.GOOGLE_OTHER_VIDEO,
93
+ Crawler.GOOGLE_CLOUDVERTEXBOT,
78
94
 
79
95
  // Hive AI
80
- 'imagesiftbot',
96
+ Crawler.HIVE_IMAGESIFTBOT,
81
97
 
82
98
  // Huawei
83
- 'petalbot',
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,
84
110
 
85
111
  // Meta
86
- 'facebookbot',
87
- 'meta-externalagent',
112
+ Crawler.META_FACEBOOKBOT,
113
+ Crawler.META_EXTERNALAGENT,
88
114
 
89
115
  // OpenAI
90
- 'gptbot',
91
- 'oai-searchbot',
116
+ Crawler.OPENAI_GPTBOT,
117
+ Crawler.OPENAI_SEARCH_BOT,
92
118
 
93
119
  // Perplexity
94
- 'perplexitybot',
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,
95
130
 
96
131
  // Semrush
97
- 'semrushbot-ocob',
132
+ Crawler.SEMRUSH_BOT_CONTENTSHAKE,
98
133
 
99
134
  // Timpi
100
- 'timpibot',
135
+ Crawler.TIMPI_BOT,
136
+
137
+ // Together AI
138
+ Crawler.TOGETHER_BOT,
101
139
 
102
140
  // Velen.io
103
- 'velenpublicwebcrawler',
141
+ Crawler.HUNTER_VELENPUBLICWEBCRAWLER,
142
+
143
+ // Vercel
144
+ Crawler.VERCEL_V0BOT,
104
145
 
105
146
  // Webz.io
106
- 'omgili',
107
- 'omgilibot',
108
- 'webzio-extended',
147
+ Crawler.WEBZIO_OMGILI,
148
+ Crawler.WEBZIO_OMGILI_BOT,
149
+ Crawler.WEBZIO_EXTENDED,
109
150
 
110
- // You.com
111
- 'youbot',
151
+ // X
152
+ Crawler.XAI_BOT,
112
153
 
113
- // Zyte
114
- 'scrapy'
154
+ // You.com
155
+ Crawler.YOU_BOT,
115
156
 
116
- ].includes(String(toResult(resultOrUA, Bots).browser.name).toLowerCase());
157
+ // Zhipu AI
158
+ Crawler.ZHIPU_CHATGLM_SPIDER
159
+ ]
160
+ .map((s) => s.toLowerCase())
161
+ .includes(String(toResult(resultOrUA, Crawlers).browser.name).toLowerCase());
117
162
 
118
163
  const isBot = (resultOrUA) => [
119
- 'cli',
120
- 'crawler',
121
- 'fetcher',
122
- 'library'
164
+ BrowserType.CLI,
165
+ BrowserType.CRAWLER,
166
+ BrowserType.FETCHER,
167
+ BrowserType.LIBRARY
123
168
  ].includes(toResult(resultOrUA, Bots).browser.type);
124
169
 
125
- const isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(Engine.BLINK);
170
+ const isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(EngineName.BLINK);
126
171
 
127
172
  const isElectron = () => !!(process?.versions?.hasOwnProperty('electron') || // node.js
128
173
  / electron\//i.test(navigator?.userAgent)); // browser
@@ -3,7 +3,7 @@
3
3
  // Source: /src/helpers/ua-parser-helpers.js
4
4
 
5
5
  ///////////////////////////////////////////////
6
- /* Helpers for UAParser.js v2.0.3
6
+ /* Helpers 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 */
@@ -12,11 +12,12 @@
12
12
  /*jshint esversion: 6 */
13
13
 
14
14
  import { UAParser } from '../main/ua-parser.mjs';
15
- import { CPU, OS, Engine } from '../enums/ua-parser-enums.mjs';
16
- import { Bots } from '../extensions/ua-parser-extensions.mjs';
15
+ import { CPUArch, OSName, EngineName, Extension, BrowserType } from '../enums/ua-parser-enums.mjs';
16
+ import { Bots, Crawlers } from '../extensions/ua-parser-extensions.mjs';
17
17
  import { isFromEU } from 'detect-europe-js';
18
18
  import { isFrozenUA } from 'ua-is-frozen';
19
19
  import { isStandalonePWA } from 'is-standalone-pwa';
20
+ const { Crawler } = Extension.BrowserName;
20
21
 
21
22
  const toResult = (value, head, ext) => typeof value === 'string' ? UAParser(value, head, ext) : value;
22
23
 
@@ -24,8 +25,8 @@ const getDeviceVendor = (model) => UAParser(`Mozilla/5.0 (Linux; Android 10; ${m
24
25
 
25
26
  const isAppleSilicon = (resultOrUA) => {
26
27
  const res = toResult(resultOrUA);
27
- if (res.os.is(OS.MACOS)) {
28
- if (res.cpu.is(CPU.ARM)) {
28
+ if (res.os.is(OSName.MACOS)) {
29
+ if (res.cpu.is(CPUArch.ARM)) {
29
30
  return true;
30
31
  }
31
32
  if (typeof resultOrUA !== 'string' && typeof window !== 'undefined') {
@@ -48,85 +49,129 @@ const isAppleSilicon = (resultOrUA) => {
48
49
  const isAIBot = (resultOrUA) => [
49
50
 
50
51
  // AI2
51
- 'ai2bot',
52
+ Crawler.AI2_BOT,
52
53
 
53
54
  // Amazon
54
- 'amazonbot',
55
+ Crawler.AMAZON_BOT,
55
56
 
56
57
  // Anthropic
57
- 'anthropic-ai',
58
- 'claude-web',
59
- 'claudebot',
58
+ Crawler.ANTHROPIC_AI,
59
+ Crawler.ANTHROPIC_CLAUDE_BOT,
60
+ Crawler.ANTHROPIC_CLAUDE_SEARCHBOT,
61
+ Crawler.ANTHROPIC_CLAUDE_WEB,
60
62
 
61
63
  // Apple
62
- 'applebot',
63
- 'applebot-extended',
64
+ Crawler.APPLE_BOT,
65
+ Crawler.APPLE_BOT_EXTENDED,
66
+
67
+ // Brave
68
+ Crawler.BRAVE_BOT,
64
69
 
65
70
  // ByteDance
66
- 'bytespider',
71
+ Crawler.BYTEDANCE_BYTESPIDER,
72
+ Crawler.BYTEDANCE_TIKTOKSPIDER,
73
+
74
+ // Cohere
75
+ Crawler.COHERE_TRAINING_DATA_CRAWLER,
67
76
 
68
77
  // Common Crawl
69
- 'ccbot',
78
+ Crawler.COMMON_CRAWL_CCBOT,
79
+
80
+ // Coveo
81
+ Crawler.COVEO_BOT,
70
82
 
71
83
  // DataForSeo
72
- 'dataforseobot',
84
+ Crawler.DATAFORSEO_BOT,
85
+
86
+ // DeepSeek
87
+ Crawler.DEEPSEEK_BOT,
73
88
 
74
89
  // Diffbot
75
- 'diffbot',
90
+ Crawler.DIFFBOT,
76
91
 
77
92
  // Google
78
- 'googleother',
79
- 'googleother-image',
80
- 'googleother-video',
81
- 'google-extended',
93
+ Crawler.GOOGLE_EXTENDED,
94
+ Crawler.GOOGLE_OTHER,
95
+ Crawler.GOOGLE_OTHER_IMAGE,
96
+ Crawler.GOOGLE_OTHER_VIDEO,
97
+ Crawler.GOOGLE_CLOUDVERTEXBOT,
82
98
 
83
99
  // Hive AI
84
- 'imagesiftbot',
100
+ Crawler.HIVE_IMAGESIFTBOT,
85
101
 
86
102
  // Huawei
87
- 'petalbot',
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,
88
114
 
89
115
  // Meta
90
- 'facebookbot',
91
- 'meta-externalagent',
116
+ Crawler.META_FACEBOOKBOT,
117
+ Crawler.META_EXTERNALAGENT,
92
118
 
93
119
  // OpenAI
94
- 'gptbot',
95
- 'oai-searchbot',
120
+ Crawler.OPENAI_GPTBOT,
121
+ Crawler.OPENAI_SEARCH_BOT,
96
122
 
97
123
  // Perplexity
98
- 'perplexitybot',
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,
99
134
 
100
135
  // Semrush
101
- 'semrushbot-ocob',
136
+ Crawler.SEMRUSH_BOT_CONTENTSHAKE,
102
137
 
103
138
  // Timpi
104
- 'timpibot',
139
+ Crawler.TIMPI_BOT,
140
+
141
+ // Together AI
142
+ Crawler.TOGETHER_BOT,
105
143
 
106
144
  // Velen.io
107
- 'velenpublicwebcrawler',
145
+ Crawler.HUNTER_VELENPUBLICWEBCRAWLER,
146
+
147
+ // Vercel
148
+ Crawler.VERCEL_V0BOT,
108
149
 
109
150
  // Webz.io
110
- 'omgili',
111
- 'omgilibot',
112
- 'webzio-extended',
151
+ Crawler.WEBZIO_OMGILI,
152
+ Crawler.WEBZIO_OMGILI_BOT,
153
+ Crawler.WEBZIO_EXTENDED,
113
154
 
114
- // You.com
115
- 'youbot',
155
+ // X
156
+ Crawler.XAI_BOT,
116
157
 
117
- // Zyte
118
- 'scrapy'
158
+ // You.com
159
+ Crawler.YOU_BOT,
119
160
 
120
- ].includes(String(toResult(resultOrUA, Bots).browser.name).toLowerCase());
161
+ // Zhipu AI
162
+ Crawler.ZHIPU_CHATGLM_SPIDER
163
+ ]
164
+ .map((s) => s.toLowerCase())
165
+ .includes(String(toResult(resultOrUA, Crawlers).browser.name).toLowerCase());
121
166
 
122
167
  const isBot = (resultOrUA) => [
123
- 'cli',
124
- 'crawler',
125
- 'fetcher',
126
- 'library'
168
+ BrowserType.CLI,
169
+ BrowserType.CRAWLER,
170
+ BrowserType.FETCHER,
171
+ BrowserType.LIBRARY
127
172
  ].includes(toResult(resultOrUA, Bots).browser.type);
128
173
 
129
- const isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(Engine.BLINK);
174
+ const isChromeFamily = (resultOrUA) => toResult(resultOrUA).engine.is(EngineName.BLINK);
130
175
 
131
176
  const isElectron = () => !!(process?.versions?.hasOwnProperty('electron') || // node.js
132
177
  / electron\//i.test(navigator?.userAgent)); // browser
@@ -1,9 +1,8 @@
1
- // Type definitions for UAParser.js v2.0.3
1
+ // Type definitions for UAParser.js v2.0.6
2
2
  // Project: https://github.com/faisalman/ua-parser-js
3
3
  // Definitions by: Faisal Salman <https://github.com/faisalman>
4
4
 
5
- import type { IncomingHttpHeaders } from 'http';
6
- import type { Headers as FetchAPIHeaders } from 'node-fetch';
5
+ import { BrowserType, CPUArch, DeviceType, EngineName } from "../enums/ua-parser-enums";
7
6
 
8
7
  declare namespace UAParser {
9
8
 
@@ -18,21 +17,21 @@ declare namespace UAParser {
18
17
  name?: string;
19
18
  version?: string;
20
19
  major?: string;
21
- type?: 'crawler' | 'cli' | 'email' | 'fetcher' | 'inapp' | 'mediaplayer' | 'library';
20
+ type?: typeof BrowserType[keyof typeof BrowserType];
22
21
  }
23
22
 
24
23
  interface ICPU extends IData<ICPU> {
25
- architecture?: 'ia32' | 'ia64' | 'amd64' | 'arm' | 'arm64' | 'armhf' | 'avr' | 'avr32' | 'irix' | 'irix64' | 'mips' | 'mips64' | '68k' | 'pa-risc' | 'ppc' | 'sparc' | 'sparc64';
24
+ architecture?: typeof CPUArch[keyof typeof CPUArch];
26
25
  }
27
26
 
28
27
  interface IDevice extends IData<IDevice> {
29
- type?: 'mobile' | 'tablet' | 'console' | 'smarttv' | 'wearable' | 'xr' | 'embedded';
28
+ type?: typeof DeviceType[keyof typeof DeviceType];
30
29
  vendor?: string;
31
30
  model?: string;
32
31
  }
33
32
 
34
33
  interface IEngine extends IData<IEngine> {
35
- name?: 'Amaya' | 'ArkWeb' | 'Blink' | 'EdgeHTML' | 'Flow' | 'Gecko' | 'Goanna' | 'iCab' | 'KHTML' | 'LibWeb' | 'Links' | 'Lynx' | 'NetFront' | 'NetSurf' | 'Presto' | 'Servo' | 'Tasman' | 'Trident' | 'w3m' | 'WebKit';
34
+ name?: typeof EngineName[keyof typeof EngineName];
36
35
  version?: string;
37
36
  }
38
37
 
@@ -53,7 +52,7 @@ declare namespace UAParser {
53
52
  type RegexMap = ((RegExp | string | (string | RegExp | Function)[])[])[];
54
53
  type UAParserProps = 'browser' | 'cpu' | 'device' | 'engine' | 'os';
55
54
  type UAParserExt = Partial<Record<UAParserProps, RegexMap>> | Partial<Record<UAParserProps, RegexMap>>[];
56
- type UAParserHeaders = Record<string, string> | IncomingHttpHeaders | FetchAPIHeaders;
55
+ export type UAParserHeaders = Record<string, string | string[] | undefined> | Headers;
57
56
 
58
57
  export function UAParser(uastring?: string, extensions?: UAParserExt, headers?: UAParserHeaders): IResult;
59
58
  export function UAParser(uastring?: string, headers?: UAParserHeaders): IResult;