@tinkoff/user-agent 0.3.303 → 0.3.309
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/index.es.js +46 -0
- package/lib/index.js +46 -0
- package/lib/isSameSiteNoneCompatible.d.ts +2 -0
- package/lib/types.d.ts +1 -0
- package/package.json +2 -2
package/lib/index.es.js
CHANGED
|
@@ -7,6 +7,50 @@ import browserslist from 'browserslist';
|
|
|
7
7
|
import browserslistTinkoffConfig from '@tinkoff/browserslist-config';
|
|
8
8
|
import browserslistFileConfig from '@tramvai/cli/lib/external/browserslist-normalized-file-config';
|
|
9
9
|
|
|
10
|
+
const processUserAgentAttributeName = (attributeName = '') => attributeName.toLowerCase();
|
|
11
|
+
const splitUserAgentAttributeVersion = (attributeVersion = '-1.-1.-1') => attributeVersion.split('.').map(Number);
|
|
12
|
+
// https://www.chromium.org/updates/same-site/incompatible-clients
|
|
13
|
+
const isSameSiteNoneCompatible = (userAgent) => {
|
|
14
|
+
// На случай неполных данных из ua-parser-js
|
|
15
|
+
try {
|
|
16
|
+
const browserName = processUserAgentAttributeName(userAgent.browser.name);
|
|
17
|
+
const [browserMajor, browserMinor, browserBuild] = splitUserAgentAttributeVersion(userAgent.browser.version);
|
|
18
|
+
const osName = processUserAgentAttributeName(userAgent.os.name);
|
|
19
|
+
const [osMajor, osMinor] = splitUserAgentAttributeVersion(userAgent.os.version);
|
|
20
|
+
const engineName = processUserAgentAttributeName(userAgent.engine.name);
|
|
21
|
+
const [engineMajor] = splitUserAgentAttributeVersion(userAgent.engine.version);
|
|
22
|
+
if (osName === 'ios') {
|
|
23
|
+
// На iOS 12 все браузеры не совместимы с samesite=none
|
|
24
|
+
// При этом полагается, что если на iOS!=12 - любые браузеры совместимы с samesite=none, включая UCBrowser<12.13.2 и 51<=Chrome<=66 (WebKit)
|
|
25
|
+
return osMajor !== 12;
|
|
26
|
+
}
|
|
27
|
+
// Встроенный браузер Mac OS парсится как Webkit
|
|
28
|
+
if (browserName === 'safari' || browserName === 'webkit') {
|
|
29
|
+
return !(osName === 'mac os' && osMajor === 10 && osMinor === 14);
|
|
30
|
+
}
|
|
31
|
+
if (browserName === 'ucbrowser') {
|
|
32
|
+
const [major, minor, build] = [12, 13, 2];
|
|
33
|
+
if (browserMajor !== major) {
|
|
34
|
+
return browserMajor > major;
|
|
35
|
+
}
|
|
36
|
+
if (browserMinor !== minor) {
|
|
37
|
+
return browserMinor > minor;
|
|
38
|
+
}
|
|
39
|
+
return browserBuild >= build;
|
|
40
|
+
}
|
|
41
|
+
if (browserName === 'chrome' || browserName === 'chromium') {
|
|
42
|
+
return browserMajor < 51 || browserMajor > 66;
|
|
43
|
+
}
|
|
44
|
+
if (engineName === 'blink') {
|
|
45
|
+
return engineMajor < 51 || engineMajor > 66;
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
10
54
|
const toLowerName = compose(toLower, propOr('name', ''));
|
|
11
55
|
const uaParserExtensions = [
|
|
12
56
|
// добавляем отдельные регекспы для ботов гугла и т.п.
|
|
@@ -30,6 +74,7 @@ const parse = (userAgent) => {
|
|
|
30
74
|
const { browser, os, engine } = result;
|
|
31
75
|
const browserName = toLowerName(browser);
|
|
32
76
|
const engineName = toLowerName(engine);
|
|
77
|
+
const sameSiteNoneCompatible = isSameSiteNoneCompatible(result);
|
|
33
78
|
let mobileOS;
|
|
34
79
|
if (browserName === 'opera mobi') {
|
|
35
80
|
result.device.type = 'mobile';
|
|
@@ -66,6 +111,7 @@ const parse = (userAgent) => {
|
|
|
66
111
|
return {
|
|
67
112
|
...result,
|
|
68
113
|
mobileOS,
|
|
114
|
+
sameSiteNoneCompatible,
|
|
69
115
|
browser: {
|
|
70
116
|
...browser,
|
|
71
117
|
browserEngine,
|
package/lib/index.js
CHANGED
|
@@ -21,6 +21,50 @@ var browserslist__default = /*#__PURE__*/_interopDefaultLegacy(browserslist);
|
|
|
21
21
|
var browserslistTinkoffConfig__default = /*#__PURE__*/_interopDefaultLegacy(browserslistTinkoffConfig);
|
|
22
22
|
var browserslistFileConfig__default = /*#__PURE__*/_interopDefaultLegacy(browserslistFileConfig);
|
|
23
23
|
|
|
24
|
+
const processUserAgentAttributeName = (attributeName = '') => attributeName.toLowerCase();
|
|
25
|
+
const splitUserAgentAttributeVersion = (attributeVersion = '-1.-1.-1') => attributeVersion.split('.').map(Number);
|
|
26
|
+
// https://www.chromium.org/updates/same-site/incompatible-clients
|
|
27
|
+
const isSameSiteNoneCompatible = (userAgent) => {
|
|
28
|
+
// На случай неполных данных из ua-parser-js
|
|
29
|
+
try {
|
|
30
|
+
const browserName = processUserAgentAttributeName(userAgent.browser.name);
|
|
31
|
+
const [browserMajor, browserMinor, browserBuild] = splitUserAgentAttributeVersion(userAgent.browser.version);
|
|
32
|
+
const osName = processUserAgentAttributeName(userAgent.os.name);
|
|
33
|
+
const [osMajor, osMinor] = splitUserAgentAttributeVersion(userAgent.os.version);
|
|
34
|
+
const engineName = processUserAgentAttributeName(userAgent.engine.name);
|
|
35
|
+
const [engineMajor] = splitUserAgentAttributeVersion(userAgent.engine.version);
|
|
36
|
+
if (osName === 'ios') {
|
|
37
|
+
// На iOS 12 все браузеры не совместимы с samesite=none
|
|
38
|
+
// При этом полагается, что если на iOS!=12 - любые браузеры совместимы с samesite=none, включая UCBrowser<12.13.2 и 51<=Chrome<=66 (WebKit)
|
|
39
|
+
return osMajor !== 12;
|
|
40
|
+
}
|
|
41
|
+
// Встроенный браузер Mac OS парсится как Webkit
|
|
42
|
+
if (browserName === 'safari' || browserName === 'webkit') {
|
|
43
|
+
return !(osName === 'mac os' && osMajor === 10 && osMinor === 14);
|
|
44
|
+
}
|
|
45
|
+
if (browserName === 'ucbrowser') {
|
|
46
|
+
const [major, minor, build] = [12, 13, 2];
|
|
47
|
+
if (browserMajor !== major) {
|
|
48
|
+
return browserMajor > major;
|
|
49
|
+
}
|
|
50
|
+
if (browserMinor !== minor) {
|
|
51
|
+
return browserMinor > minor;
|
|
52
|
+
}
|
|
53
|
+
return browserBuild >= build;
|
|
54
|
+
}
|
|
55
|
+
if (browserName === 'chrome' || browserName === 'chromium') {
|
|
56
|
+
return browserMajor < 51 || browserMajor > 66;
|
|
57
|
+
}
|
|
58
|
+
if (engineName === 'blink') {
|
|
59
|
+
return engineMajor < 51 || engineMajor > 66;
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
24
68
|
const toLowerName = compose__default["default"](toLower__default["default"], propOr__default["default"]('name', ''));
|
|
25
69
|
const uaParserExtensions = [
|
|
26
70
|
// добавляем отдельные регекспы для ботов гугла и т.п.
|
|
@@ -44,6 +88,7 @@ const parse = (userAgent) => {
|
|
|
44
88
|
const { browser, os, engine } = result;
|
|
45
89
|
const browserName = toLowerName(browser);
|
|
46
90
|
const engineName = toLowerName(engine);
|
|
91
|
+
const sameSiteNoneCompatible = isSameSiteNoneCompatible(result);
|
|
47
92
|
let mobileOS;
|
|
48
93
|
if (browserName === 'opera mobi') {
|
|
49
94
|
result.device.type = 'mobile';
|
|
@@ -80,6 +125,7 @@ const parse = (userAgent) => {
|
|
|
80
125
|
return {
|
|
81
126
|
...result,
|
|
82
127
|
mobileOS,
|
|
128
|
+
sameSiteNoneCompatible,
|
|
83
129
|
browser: {
|
|
84
130
|
...browser,
|
|
85
131
|
browserEngine,
|
package/lib/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tinkoff/user-agent",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.309",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib/index.es.js",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"@types/ua-parser-js": "^0.7.33"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"@tramvai/cli": "1.
|
|
32
|
+
"@tramvai/cli": "1.91.0",
|
|
33
33
|
"@types/ua-parser-js": "^0.7.33"
|
|
34
34
|
},
|
|
35
35
|
"license": "Apache-2.0"
|