@tinkoff/user-agent 0.4.381 → 0.4.384
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/lib/client-hints.d.ts +4 -1
- package/lib/client-hints.es.js +23 -5
- package/lib/client-hints.js +23 -5
- package/lib/satisfies.d.ts +6 -4
- package/lib/satisfies.es.js +1 -1
- package/lib/satisfies.js +1 -1
- package/lib/userAgent.es.js +1 -2
- package/lib/userAgent.js +1 -2
- package/lib/utils.es.js +1 -1
- package/lib/utils.js +1 -1
- package/package.json +2 -2
package/lib/client-hints.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import type { UserAgent } from './types';
|
|
|
9
9
|
* - CPU architecture
|
|
10
10
|
* - device model
|
|
11
11
|
*
|
|
12
|
-
* To able to use data you should first provide header `Accept-CH` with the list of headers that client should send.
|
|
12
|
+
* To be able to use data you should first provide header `Accept-CH` with the list of headers that client should send.
|
|
13
13
|
*
|
|
14
14
|
* @param headers
|
|
15
15
|
* @returns
|
|
@@ -25,5 +25,8 @@ export declare const parseClientHintsHeaders: (headers: Record<string, string |
|
|
|
25
25
|
* @see https://wicg.github.io/ua-client-hints/#user-agent-model
|
|
26
26
|
*
|
|
27
27
|
* @param payload
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* const clientHints = parseClientHintsUserAgentData(window.navigator.userAgentData)
|
|
28
31
|
*/
|
|
29
32
|
export declare const parseClientHintsUserAgentData: (payload: UADataValues) => UserAgent;
|
package/lib/client-hints.es.js
CHANGED
|
@@ -2,6 +2,12 @@ import { getMobileOs, getBrowserEngine } from './utils.es.js';
|
|
|
2
2
|
|
|
3
3
|
const KNOWN_VENDORS = new Set(['Opera', 'Google Chrome', 'Microsoft Edge', 'Firefox', 'Safari']);
|
|
4
4
|
const KNOWN_ENGINES = new Set(['Chromium']);
|
|
5
|
+
const BACKWARD_COMPATIBILITY_BROWSER_NAME = {
|
|
6
|
+
'Google Chrome': 'chrome',
|
|
7
|
+
};
|
|
8
|
+
const BACKWARD_COMPATIBILITY_OS_NAME = {
|
|
9
|
+
macOS: 'Mac OS',
|
|
10
|
+
};
|
|
5
11
|
const parseQuotedString = (str) => {
|
|
6
12
|
var _a;
|
|
7
13
|
if (!str) {
|
|
@@ -26,9 +32,10 @@ const parseBrowserFromString = (brandsList) => {
|
|
|
26
32
|
version: undefined,
|
|
27
33
|
};
|
|
28
34
|
brandsList.split(',').forEach((entry) => {
|
|
35
|
+
var _a;
|
|
29
36
|
const [name, version] = entry.split(/;\s*v=/).map(parseQuotedString);
|
|
30
37
|
if (name && KNOWN_VENDORS.has(name)) {
|
|
31
|
-
browser.name = name.toLowerCase();
|
|
38
|
+
browser.name = (_a = BACKWARD_COMPATIBILITY_BROWSER_NAME[name]) !== null && _a !== void 0 ? _a : name.toLowerCase();
|
|
32
39
|
browser.version = version;
|
|
33
40
|
browser.major = version;
|
|
34
41
|
}
|
|
@@ -56,8 +63,9 @@ const parseBrowserFromUserAgentData = (brands) => {
|
|
|
56
63
|
version: undefined,
|
|
57
64
|
};
|
|
58
65
|
brands.forEach(({ brand, version }) => {
|
|
66
|
+
var _a;
|
|
59
67
|
if (KNOWN_VENDORS.has(brand)) {
|
|
60
|
-
browser.name = brand.toLowerCase();
|
|
68
|
+
browser.name = (_a = BACKWARD_COMPATIBILITY_BROWSER_NAME[brand]) !== null && _a !== void 0 ? _a : brand.toLowerCase();
|
|
61
69
|
browser.version = version;
|
|
62
70
|
[browser.major] = version.split('.');
|
|
63
71
|
}
|
|
@@ -73,6 +81,13 @@ const parseBrowserFromUserAgentData = (brands) => {
|
|
|
73
81
|
browser.browserEngine = getBrowserEngine(browser.name, engine.name);
|
|
74
82
|
return { browser, engine };
|
|
75
83
|
};
|
|
84
|
+
const getBackwardCompatibleOsName = (payload) => {
|
|
85
|
+
var _a;
|
|
86
|
+
if (payload === undefined) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
return (_a = BACKWARD_COMPATIBILITY_OS_NAME[payload]) !== null && _a !== void 0 ? _a : payload;
|
|
90
|
+
};
|
|
76
91
|
/**
|
|
77
92
|
*
|
|
78
93
|
* @description
|
|
@@ -83,7 +98,7 @@ const parseBrowserFromUserAgentData = (brands) => {
|
|
|
83
98
|
* - CPU architecture
|
|
84
99
|
* - device model
|
|
85
100
|
*
|
|
86
|
-
* To able to use data you should first provide header `Accept-CH` with the list of headers that client should send.
|
|
101
|
+
* To be able to use data you should first provide header `Accept-CH` with the list of headers that client should send.
|
|
87
102
|
*
|
|
88
103
|
* @param headers
|
|
89
104
|
* @returns
|
|
@@ -96,7 +111,7 @@ const parseClientHintsHeaders = (headers) => {
|
|
|
96
111
|
browser,
|
|
97
112
|
engine,
|
|
98
113
|
os: {
|
|
99
|
-
name: osName,
|
|
114
|
+
name: getBackwardCompatibleOsName(osName),
|
|
100
115
|
version: parseQuotedString(headers['sec-ch-ua-platform-version']),
|
|
101
116
|
},
|
|
102
117
|
cpu: {
|
|
@@ -123,6 +138,9 @@ const parseClientHintsHeaders = (headers) => {
|
|
|
123
138
|
* @see https://wicg.github.io/ua-client-hints/#user-agent-model
|
|
124
139
|
*
|
|
125
140
|
* @param payload
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* const clientHints = parseClientHintsUserAgentData(window.navigator.userAgentData)
|
|
126
144
|
*/
|
|
127
145
|
const parseClientHintsUserAgentData = (payload) => {
|
|
128
146
|
const { browser, engine } = parseBrowserFromUserAgentData(payload.fullVersionList || payload.brands || []);
|
|
@@ -130,7 +148,7 @@ const parseClientHintsUserAgentData = (payload) => {
|
|
|
130
148
|
browser,
|
|
131
149
|
engine,
|
|
132
150
|
os: {
|
|
133
|
-
name: payload.platform,
|
|
151
|
+
name: getBackwardCompatibleOsName(payload.platform),
|
|
134
152
|
version: payload.platformVersion,
|
|
135
153
|
},
|
|
136
154
|
cpu: {
|
package/lib/client-hints.js
CHANGED
|
@@ -6,6 +6,12 @@ var utils = require('./utils.js');
|
|
|
6
6
|
|
|
7
7
|
const KNOWN_VENDORS = new Set(['Opera', 'Google Chrome', 'Microsoft Edge', 'Firefox', 'Safari']);
|
|
8
8
|
const KNOWN_ENGINES = new Set(['Chromium']);
|
|
9
|
+
const BACKWARD_COMPATIBILITY_BROWSER_NAME = {
|
|
10
|
+
'Google Chrome': 'chrome',
|
|
11
|
+
};
|
|
12
|
+
const BACKWARD_COMPATIBILITY_OS_NAME = {
|
|
13
|
+
macOS: 'Mac OS',
|
|
14
|
+
};
|
|
9
15
|
const parseQuotedString = (str) => {
|
|
10
16
|
var _a;
|
|
11
17
|
if (!str) {
|
|
@@ -30,9 +36,10 @@ const parseBrowserFromString = (brandsList) => {
|
|
|
30
36
|
version: undefined,
|
|
31
37
|
};
|
|
32
38
|
brandsList.split(',').forEach((entry) => {
|
|
39
|
+
var _a;
|
|
33
40
|
const [name, version] = entry.split(/;\s*v=/).map(parseQuotedString);
|
|
34
41
|
if (name && KNOWN_VENDORS.has(name)) {
|
|
35
|
-
browser.name = name.toLowerCase();
|
|
42
|
+
browser.name = (_a = BACKWARD_COMPATIBILITY_BROWSER_NAME[name]) !== null && _a !== void 0 ? _a : name.toLowerCase();
|
|
36
43
|
browser.version = version;
|
|
37
44
|
browser.major = version;
|
|
38
45
|
}
|
|
@@ -60,8 +67,9 @@ const parseBrowserFromUserAgentData = (brands) => {
|
|
|
60
67
|
version: undefined,
|
|
61
68
|
};
|
|
62
69
|
brands.forEach(({ brand, version }) => {
|
|
70
|
+
var _a;
|
|
63
71
|
if (KNOWN_VENDORS.has(brand)) {
|
|
64
|
-
browser.name = brand.toLowerCase();
|
|
72
|
+
browser.name = (_a = BACKWARD_COMPATIBILITY_BROWSER_NAME[brand]) !== null && _a !== void 0 ? _a : brand.toLowerCase();
|
|
65
73
|
browser.version = version;
|
|
66
74
|
[browser.major] = version.split('.');
|
|
67
75
|
}
|
|
@@ -77,6 +85,13 @@ const parseBrowserFromUserAgentData = (brands) => {
|
|
|
77
85
|
browser.browserEngine = utils.getBrowserEngine(browser.name, engine.name);
|
|
78
86
|
return { browser, engine };
|
|
79
87
|
};
|
|
88
|
+
const getBackwardCompatibleOsName = (payload) => {
|
|
89
|
+
var _a;
|
|
90
|
+
if (payload === undefined) {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
return (_a = BACKWARD_COMPATIBILITY_OS_NAME[payload]) !== null && _a !== void 0 ? _a : payload;
|
|
94
|
+
};
|
|
80
95
|
/**
|
|
81
96
|
*
|
|
82
97
|
* @description
|
|
@@ -87,7 +102,7 @@ const parseBrowserFromUserAgentData = (brands) => {
|
|
|
87
102
|
* - CPU architecture
|
|
88
103
|
* - device model
|
|
89
104
|
*
|
|
90
|
-
* To able to use data you should first provide header `Accept-CH` with the list of headers that client should send.
|
|
105
|
+
* To be able to use data you should first provide header `Accept-CH` with the list of headers that client should send.
|
|
91
106
|
*
|
|
92
107
|
* @param headers
|
|
93
108
|
* @returns
|
|
@@ -100,7 +115,7 @@ const parseClientHintsHeaders = (headers) => {
|
|
|
100
115
|
browser,
|
|
101
116
|
engine,
|
|
102
117
|
os: {
|
|
103
|
-
name: osName,
|
|
118
|
+
name: getBackwardCompatibleOsName(osName),
|
|
104
119
|
version: parseQuotedString(headers['sec-ch-ua-platform-version']),
|
|
105
120
|
},
|
|
106
121
|
cpu: {
|
|
@@ -127,6 +142,9 @@ const parseClientHintsHeaders = (headers) => {
|
|
|
127
142
|
* @see https://wicg.github.io/ua-client-hints/#user-agent-model
|
|
128
143
|
*
|
|
129
144
|
* @param payload
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* const clientHints = parseClientHintsUserAgentData(window.navigator.userAgentData)
|
|
130
148
|
*/
|
|
131
149
|
const parseClientHintsUserAgentData = (payload) => {
|
|
132
150
|
const { browser, engine } = parseBrowserFromUserAgentData(payload.fullVersionList || payload.brands || []);
|
|
@@ -134,7 +152,7 @@ const parseClientHintsUserAgentData = (payload) => {
|
|
|
134
152
|
browser,
|
|
135
153
|
engine,
|
|
136
154
|
os: {
|
|
137
|
-
name: payload.platform,
|
|
155
|
+
name: getBackwardCompatibleOsName(payload.platform),
|
|
138
156
|
version: payload.platformVersion,
|
|
139
157
|
},
|
|
140
158
|
cpu: {
|
package/lib/satisfies.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { UserAgent } from './types';
|
|
2
|
-
|
|
3
|
-
env?:
|
|
4
|
-
forceMinimumUnknownVersions?: boolean
|
|
5
|
-
}
|
|
2
|
+
interface SatisfiesOptions {
|
|
3
|
+
env?: 'modern' | 'defaults';
|
|
4
|
+
forceMinimumUnknownVersions?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare const satisfies: (userAgent: UserAgent | string, browserslistConfig?: string[], { env, forceMinimumUnknownVersions }?: SatisfiesOptions) => boolean | null;
|
|
7
|
+
export {};
|
package/lib/satisfies.es.js
CHANGED
|
@@ -49,7 +49,7 @@ const normalizedBrowserslist = (query) => {
|
|
|
49
49
|
}
|
|
50
50
|
return result;
|
|
51
51
|
};
|
|
52
|
-
const satisfies = (userAgent, browserslistConfig, { env = 'defaults', forceMinimumUnknownVersions = false
|
|
52
|
+
const satisfies = (userAgent, browserslistConfig, { env = 'defaults', forceMinimumUnknownVersions = false } = {}) => {
|
|
53
53
|
var _a, _b;
|
|
54
54
|
const ua = isString(userAgent) ? parseUserAgentHeader(userAgent) : userAgent;
|
|
55
55
|
const { engine: { name: engineName = '', version: engineVersion }, device: { type = '' } = {}, } = ua;
|
package/lib/satisfies.js
CHANGED
|
@@ -60,7 +60,7 @@ const normalizedBrowserslist = (query) => {
|
|
|
60
60
|
}
|
|
61
61
|
return result;
|
|
62
62
|
};
|
|
63
|
-
const satisfies = (userAgent$1, browserslistConfig, { env = 'defaults', forceMinimumUnknownVersions = false
|
|
63
|
+
const satisfies = (userAgent$1, browserslistConfig, { env = 'defaults', forceMinimumUnknownVersions = false } = {}) => {
|
|
64
64
|
var _a, _b;
|
|
65
65
|
const ua = isString__default["default"](userAgent$1) ? userAgent.parseUserAgentHeader(userAgent$1) : userAgent$1;
|
|
66
66
|
const { engine: { name: engineName = '', version: engineVersion }, device: { type = '' } = {}, } = ua;
|
package/lib/userAgent.es.js
CHANGED
|
@@ -27,14 +27,13 @@ const parseUserAgentHeader = (userAgent) => {
|
|
|
27
27
|
const { browser, os, engine } = result;
|
|
28
28
|
const browserName = toLowerName(browser);
|
|
29
29
|
const engineName = toLowerName(engine);
|
|
30
|
-
const sameSiteNoneCompatible = isSameSiteNoneCompatible(result);
|
|
31
30
|
if (browserName === 'opera mobi') {
|
|
32
31
|
result.device.type = 'mobile';
|
|
33
32
|
}
|
|
34
33
|
return {
|
|
35
34
|
...result,
|
|
36
35
|
mobileOS: getMobileOs(os.name),
|
|
37
|
-
sameSiteNoneCompatible,
|
|
36
|
+
sameSiteNoneCompatible: isSameSiteNoneCompatible(result),
|
|
38
37
|
browser: {
|
|
39
38
|
...browser,
|
|
40
39
|
browserEngine: getBrowserEngine(browserName, engineName),
|
package/lib/userAgent.js
CHANGED
|
@@ -37,14 +37,13 @@ const parseUserAgentHeader = (userAgent) => {
|
|
|
37
37
|
const { browser, os, engine } = result;
|
|
38
38
|
const browserName = toLowerName(browser);
|
|
39
39
|
const engineName = toLowerName(engine);
|
|
40
|
-
const sameSiteNoneCompatible = isSameSiteNoneCompatible.isSameSiteNoneCompatible(result);
|
|
41
40
|
if (browserName === 'opera mobi') {
|
|
42
41
|
result.device.type = 'mobile';
|
|
43
42
|
}
|
|
44
43
|
return {
|
|
45
44
|
...result,
|
|
46
45
|
mobileOS: utils.getMobileOs(os.name),
|
|
47
|
-
sameSiteNoneCompatible,
|
|
46
|
+
sameSiteNoneCompatible: isSameSiteNoneCompatible.isSameSiteNoneCompatible(result),
|
|
48
47
|
browser: {
|
|
49
48
|
...browser,
|
|
50
49
|
browserEngine: utils.getBrowserEngine(browserName, engineName),
|
package/lib/utils.es.js
CHANGED
|
@@ -19,7 +19,7 @@ const getBrowserEngine = (browserName, engineName) => {
|
|
|
19
19
|
// then define the `browserName` as `safari`, because all browsers
|
|
20
20
|
// on iOS use webkit. Also, we are not handling mobile Safari separately,
|
|
21
21
|
// as it webkit too. See https://en.wikipedia.org/wiki/WebKit
|
|
22
|
-
case browserName === 'safari' || engineName === 'webkit':
|
|
22
|
+
case browserName === 'safari' || browserName === 'mobile safari' || engineName === 'webkit':
|
|
23
23
|
return 'safari';
|
|
24
24
|
// We aren't using something like `browserName === 'chrome'` here,
|
|
25
25
|
// because there are a lot of browsers based on chromium.
|
package/lib/utils.js
CHANGED
|
@@ -23,7 +23,7 @@ const getBrowserEngine = (browserName, engineName) => {
|
|
|
23
23
|
// then define the `browserName` as `safari`, because all browsers
|
|
24
24
|
// on iOS use webkit. Also, we are not handling mobile Safari separately,
|
|
25
25
|
// as it webkit too. See https://en.wikipedia.org/wiki/WebKit
|
|
26
|
-
case browserName === 'safari' || engineName === 'webkit':
|
|
26
|
+
case browserName === 'safari' || browserName === 'mobile safari' || engineName === 'webkit':
|
|
27
27
|
return 'safari';
|
|
28
28
|
// We aren't using something like `browserName === 'chrome'` here,
|
|
29
29
|
// because there are a lot of browsers based on chromium.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tinkoff/user-agent",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.384",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib/index.es.js",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"user-agent-data-types": "^0.3.1"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"@tramvai/cli": "2.130.
|
|
32
|
+
"@tramvai/cli": "2.130.10",
|
|
33
33
|
"@types/ua-parser-js": "^0.7.33"
|
|
34
34
|
},
|
|
35
35
|
"license": "Apache-2.0"
|