@tinkoff/user-agent 0.4.176 → 0.4.178
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.es.js +88 -0
- package/lib/client-hints.js +92 -0
- package/lib/constants.es.js +57 -0
- package/lib/constants.js +62 -0
- package/lib/index.es.js +3 -333
- package/lib/index.js +7 -343
- package/lib/isSameSiteNoneCompatible.es.js +45 -0
- package/lib/isSameSiteNoneCompatible.js +49 -0
- package/lib/satisfies.es.js +80 -0
- package/lib/satisfies.js +91 -0
- package/lib/userAgent.es.js +49 -0
- package/lib/userAgent.js +59 -0
- package/lib/utils.es.js +26 -0
- package/lib/utils.js +31 -0
- package/package.json +4 -5
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import propOr from '@tinkoff/utils/object/propOr';
|
|
2
|
+
import compose from '@tinkoff/utils/function/compose';
|
|
3
|
+
import toLower from '@tinkoff/utils/string/toLower';
|
|
4
|
+
import { UAParser } from 'ua-parser-js';
|
|
5
|
+
import { isSameSiteNoneCompatible } from './isSameSiteNoneCompatible.es.js';
|
|
6
|
+
import { getMobileOs, getBrowserEngine } from './utils.es.js';
|
|
7
|
+
|
|
8
|
+
const toLowerName = compose(toLower, propOr('name', ''));
|
|
9
|
+
const uaParserExtensions = [
|
|
10
|
+
// добавляем отдельные регекспы для ботов гугла и т.п.
|
|
11
|
+
// это позволит для них получить отдельное имя браузера и обработать специальным образом
|
|
12
|
+
// https://github.com/faisalman/ua-parser-js/issues/227
|
|
13
|
+
// google, bing, msn
|
|
14
|
+
[/((?:\S+)bot(?:-[imagevdo]{5})?)\/([\w.]+)/i],
|
|
15
|
+
[UAParser.BROWSER.NAME, UAParser.BROWSER.VERSION, ['type', 'bot']],
|
|
16
|
+
// google adsbot под видом обычного браузера
|
|
17
|
+
[/[\s;(](adsbot[-\w]*?[\s;)])/i],
|
|
18
|
+
[UAParser.BROWSER.NAME, [UAParser.BROWSER.VERSION, 'unknown'], ['type', 'bot']],
|
|
19
|
+
// добавляем регекспы для браузеров которые пытаются казаться другими браузерами
|
|
20
|
+
// например ua-parser-js Firefox Focus для ios считает как просто Firefox, что ломает проверки на версии
|
|
21
|
+
// Firefox for iOS
|
|
22
|
+
[/fxios\/([\w\\.-]+)/i],
|
|
23
|
+
[[UAParser.BROWSER.NAME, 'Firefox Focus'], UAParser.BROWSER.VERSION],
|
|
24
|
+
];
|
|
25
|
+
const parseUserAgentHeader = (userAgent) => {
|
|
26
|
+
const uaParser = new UAParser('', { browser: uaParserExtensions });
|
|
27
|
+
const { ua, ...result } = uaParser.setUA(userAgent).getResult();
|
|
28
|
+
const { browser, os, engine } = result;
|
|
29
|
+
const browserName = toLowerName(browser);
|
|
30
|
+
const engineName = toLowerName(engine);
|
|
31
|
+
const sameSiteNoneCompatible = isSameSiteNoneCompatible(result);
|
|
32
|
+
const mobileOS = getMobileOs(os.name);
|
|
33
|
+
if (browserName === 'opera mobi') {
|
|
34
|
+
result.device.type = 'mobile';
|
|
35
|
+
}
|
|
36
|
+
const browserEngine = getBrowserEngine(browserName, engineName);
|
|
37
|
+
return {
|
|
38
|
+
...result,
|
|
39
|
+
mobileOS,
|
|
40
|
+
sameSiteNoneCompatible,
|
|
41
|
+
browser: {
|
|
42
|
+
...browser,
|
|
43
|
+
browserEngine,
|
|
44
|
+
name: browserName,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export { parseUserAgentHeader };
|
package/lib/userAgent.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var propOr = require('@tinkoff/utils/object/propOr');
|
|
6
|
+
var compose = require('@tinkoff/utils/function/compose');
|
|
7
|
+
var toLower = require('@tinkoff/utils/string/toLower');
|
|
8
|
+
var uaParserJs = require('ua-parser-js');
|
|
9
|
+
var isSameSiteNoneCompatible = require('./isSameSiteNoneCompatible.js');
|
|
10
|
+
var utils = require('./utils.js');
|
|
11
|
+
|
|
12
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
|
+
|
|
14
|
+
var propOr__default = /*#__PURE__*/_interopDefaultLegacy(propOr);
|
|
15
|
+
var compose__default = /*#__PURE__*/_interopDefaultLegacy(compose);
|
|
16
|
+
var toLower__default = /*#__PURE__*/_interopDefaultLegacy(toLower);
|
|
17
|
+
|
|
18
|
+
const toLowerName = compose__default["default"](toLower__default["default"], propOr__default["default"]('name', ''));
|
|
19
|
+
const uaParserExtensions = [
|
|
20
|
+
// добавляем отдельные регекспы для ботов гугла и т.п.
|
|
21
|
+
// это позволит для них получить отдельное имя браузера и обработать специальным образом
|
|
22
|
+
// https://github.com/faisalman/ua-parser-js/issues/227
|
|
23
|
+
// google, bing, msn
|
|
24
|
+
[/((?:\S+)bot(?:-[imagevdo]{5})?)\/([\w.]+)/i],
|
|
25
|
+
[uaParserJs.UAParser.BROWSER.NAME, uaParserJs.UAParser.BROWSER.VERSION, ['type', 'bot']],
|
|
26
|
+
// google adsbot под видом обычного браузера
|
|
27
|
+
[/[\s;(](adsbot[-\w]*?[\s;)])/i],
|
|
28
|
+
[uaParserJs.UAParser.BROWSER.NAME, [uaParserJs.UAParser.BROWSER.VERSION, 'unknown'], ['type', 'bot']],
|
|
29
|
+
// добавляем регекспы для браузеров которые пытаются казаться другими браузерами
|
|
30
|
+
// например ua-parser-js Firefox Focus для ios считает как просто Firefox, что ломает проверки на версии
|
|
31
|
+
// Firefox for iOS
|
|
32
|
+
[/fxios\/([\w\\.-]+)/i],
|
|
33
|
+
[[uaParserJs.UAParser.BROWSER.NAME, 'Firefox Focus'], uaParserJs.UAParser.BROWSER.VERSION],
|
|
34
|
+
];
|
|
35
|
+
const parseUserAgentHeader = (userAgent) => {
|
|
36
|
+
const uaParser = new uaParserJs.UAParser('', { browser: uaParserExtensions });
|
|
37
|
+
const { ua, ...result } = uaParser.setUA(userAgent).getResult();
|
|
38
|
+
const { browser, os, engine } = result;
|
|
39
|
+
const browserName = toLowerName(browser);
|
|
40
|
+
const engineName = toLowerName(engine);
|
|
41
|
+
const sameSiteNoneCompatible = isSameSiteNoneCompatible.isSameSiteNoneCompatible(result);
|
|
42
|
+
const mobileOS = utils.getMobileOs(os.name);
|
|
43
|
+
if (browserName === 'opera mobi') {
|
|
44
|
+
result.device.type = 'mobile';
|
|
45
|
+
}
|
|
46
|
+
const browserEngine = utils.getBrowserEngine(browserName, engineName);
|
|
47
|
+
return {
|
|
48
|
+
...result,
|
|
49
|
+
mobileOS,
|
|
50
|
+
sameSiteNoneCompatible,
|
|
51
|
+
browser: {
|
|
52
|
+
...browser,
|
|
53
|
+
browserEngine,
|
|
54
|
+
name: browserName,
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
exports.parseUserAgentHeader = parseUserAgentHeader;
|
package/lib/utils.es.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const getMobileOs = (osName) => {
|
|
2
|
+
switch (osName) {
|
|
3
|
+
case 'Windows Phone':
|
|
4
|
+
return 'winphone';
|
|
5
|
+
case 'Android':
|
|
6
|
+
return 'android';
|
|
7
|
+
case 'iOS':
|
|
8
|
+
return 'ios';
|
|
9
|
+
case 'BlackBerry':
|
|
10
|
+
case 'RIM Tablet OS':
|
|
11
|
+
return 'blackberry';
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const getBrowserEngine = (browserName, engineName) => {
|
|
15
|
+
switch (true) {
|
|
16
|
+
case browserName === 'firefox':
|
|
17
|
+
return 'firefox';
|
|
18
|
+
case browserName === 'safari':
|
|
19
|
+
return 'safari';
|
|
20
|
+
case engineName === 'webkit' || engineName === 'blink' || engineName === 'chromium':
|
|
21
|
+
return 'chrome';
|
|
22
|
+
}
|
|
23
|
+
return 'other';
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { getBrowserEngine, getMobileOs };
|
package/lib/utils.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const getMobileOs = (osName) => {
|
|
6
|
+
switch (osName) {
|
|
7
|
+
case 'Windows Phone':
|
|
8
|
+
return 'winphone';
|
|
9
|
+
case 'Android':
|
|
10
|
+
return 'android';
|
|
11
|
+
case 'iOS':
|
|
12
|
+
return 'ios';
|
|
13
|
+
case 'BlackBerry':
|
|
14
|
+
case 'RIM Tablet OS':
|
|
15
|
+
return 'blackberry';
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const getBrowserEngine = (browserName, engineName) => {
|
|
19
|
+
switch (true) {
|
|
20
|
+
case browserName === 'firefox':
|
|
21
|
+
return 'firefox';
|
|
22
|
+
case browserName === 'safari':
|
|
23
|
+
return 'safari';
|
|
24
|
+
case engineName === 'webkit' || engineName === 'blink' || engineName === 'chromium':
|
|
25
|
+
return 'chrome';
|
|
26
|
+
}
|
|
27
|
+
return 'other';
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
exports.getBrowserEngine = getBrowserEngine;
|
|
31
|
+
exports.getMobileOs = getMobileOs;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tinkoff/user-agent",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.178",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib/index.es.js",
|
|
@@ -14,9 +14,8 @@
|
|
|
14
14
|
"url": "git@github.com:Tinkoff/tramvai.git"
|
|
15
15
|
},
|
|
16
16
|
"scripts": {
|
|
17
|
-
"build": "tramvai-build --
|
|
18
|
-
"watch": "tsc -w"
|
|
19
|
-
"build-for-publish": "true"
|
|
17
|
+
"build": "tramvai-build --forPublish --preserveModules",
|
|
18
|
+
"watch": "tsc -w"
|
|
20
19
|
},
|
|
21
20
|
"dependencies": {
|
|
22
21
|
"@tinkoff/browserslist-config": "0.2.4",
|
|
@@ -29,7 +28,7 @@
|
|
|
29
28
|
"@types/ua-parser-js": "^0.7.33"
|
|
30
29
|
},
|
|
31
30
|
"peerDependencies": {
|
|
32
|
-
"@tramvai/cli": "2.
|
|
31
|
+
"@tramvai/cli": "2.72.0",
|
|
33
32
|
"@types/ua-parser-js": "^0.7.33"
|
|
34
33
|
},
|
|
35
34
|
"license": "Apache-2.0"
|