@tinkoff/user-agent 0.7.198 → 0.7.202

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,4 +1,5 @@
1
- import { getMobileOs, getBrowserEngine } from './utils.es.js';
1
+ import { getBrowserEngine } from './utils/get-browser-engine.es.js';
2
+ import { getMobileOs } from './utils/get-mobile-os.es.js';
2
3
 
3
4
  const KNOWN_VENDORS = new Set(['Opera', 'Google Chrome', 'Microsoft Edge', 'Firefox', 'Safari']);
4
5
  const KNOWN_ENGINES = new Set(['Chromium']);
@@ -2,7 +2,8 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var utils = require('./utils.js');
5
+ var getBrowserEngine = require('./utils/get-browser-engine.js');
6
+ var getMobileOs = require('./utils/get-mobile-os.js');
6
7
 
7
8
  const KNOWN_VENDORS = new Set(['Opera', 'Google Chrome', 'Microsoft Edge', 'Firefox', 'Safari']);
8
9
  const KNOWN_ENGINES = new Set(['Chromium']);
@@ -57,7 +58,7 @@ const parseBrowserFromString = (brandsList) => {
57
58
  browser.name = engine.name;
58
59
  browser.version = engine.version;
59
60
  }
60
- browser.browserEngine = utils.getBrowserEngine(browser.name?.toLowerCase(), engine.name?.toLowerCase());
61
+ browser.browserEngine = getBrowserEngine.getBrowserEngine(browser.name?.toLowerCase(), engine.name?.toLowerCase());
61
62
  return { browser, engine };
62
63
  };
63
64
  const parseBrowserFromUserAgentData = (brands) => {
@@ -86,7 +87,7 @@ const parseBrowserFromUserAgentData = (brands) => {
86
87
  browser.name = engine.name;
87
88
  browser.version = engine.version;
88
89
  }
89
- browser.browserEngine = utils.getBrowserEngine(browser.name?.toLowerCase(), engine.name?.toLowerCase());
90
+ browser.browserEngine = getBrowserEngine.getBrowserEngine(browser.name?.toLowerCase(), engine.name?.toLowerCase());
90
91
  return { browser, engine };
91
92
  };
92
93
  const getBackwardCompatibleOsName = (payload) => {
@@ -113,7 +114,7 @@ const getBackwardCompatibleOsName = (payload) => {
113
114
  const parseClientHintsHeaders = (headers) => {
114
115
  const { browser, engine } = parseBrowserFromString(headers['sec-ch-ua-full-version-list'] || headers['sec-ch-ua']);
115
116
  const osName = parseQuotedString(headers['sec-ch-ua-platform']);
116
- const mobileOS = utils.getMobileOs(osName);
117
+ const mobileOS = getMobileOs.getMobileOs(osName);
117
118
  const architecture = parseQuotedString(headers['sec-ch-ua-arch']);
118
119
  return {
119
120
  browser,
@@ -166,7 +167,7 @@ const parseClientHintsUserAgentData = (payload) => {
166
167
  ? (BACKWARD_COMPATIBILITY_ARCH[payload.architecture] ?? payload.architecture)
167
168
  : payload.architecture,
168
169
  },
169
- mobileOS: utils.getMobileOs(payload.platform),
170
+ mobileOS: getMobileOs.getMobileOs(payload.platform),
170
171
  device: {
171
172
  model: payload.model,
172
173
  type: payload.mobile ? 'mobile' : 'desktop',
@@ -5,4 +5,5 @@ export declare const BROWSERS_LIST_MAP: {
5
5
  };
6
6
  };
7
7
  export declare const CHROMIUM_BASED_BROWSERS: string[];
8
+ export declare const uaParserExtensions: (RegExp[] | (string[] | "version" | "name")[])[];
8
9
  //# sourceMappingURL=constants.d.ts.map
@@ -1,3 +1,5 @@
1
+ import UAParser from 'ua-parser-js';
2
+
1
3
  const BROWSERS_LIST_MAP = {
2
4
  chrome: {
3
5
  type: 'desktop',
@@ -58,5 +60,24 @@ const CHROMIUM_BASED_BROWSERS = [
58
60
  'blink',
59
61
  'vivaldi' /* , 'chrome webview', 'opera', 'samsung' */,
60
62
  ];
63
+ const uaParserExtensions = [
64
+ // добавляем отдельные регекспы для ботов гугла и т.п.
65
+ // это позволит для них получить отдельное имя браузера и обработать специальным образом
66
+ // https://github.com/faisalman/ua-parser-js/issues/227
67
+ // google page preloading agent
68
+ [/developers\.google\.com\/\+\/web\/snippet/i],
69
+ [UAParser.BROWSER.NAME, UAParser.BROWSER.VERSION, ['type', 'bot']],
70
+ // google, bing, msn
71
+ [/((?:\S+)bot(?:-[imagevdo]{5})?)\/([\w.]+)/i],
72
+ [UAParser.BROWSER.NAME, UAParser.BROWSER.VERSION, ['type', 'bot']],
73
+ // google adsbot под видом обычного браузера
74
+ [/[\s;(](adsbot[-\w]*?[\s;)])/i],
75
+ [UAParser.BROWSER.NAME, [UAParser.BROWSER.VERSION, 'unknown'], ['type', 'bot']],
76
+ // добавляем регекспы для браузеров которые пытаются казаться другими браузерами
77
+ // например ua-parser-js Firefox Focus для ios считает как просто Firefox, что ломает проверки на версии
78
+ // Firefox for iOS
79
+ [/fxios\/([\w\\.-]+)/i],
80
+ [[UAParser.BROWSER.NAME, 'Firefox Focus'], UAParser.BROWSER.VERSION],
81
+ ];
61
82
 
62
- export { BROWSERS_LIST_MAP, CHROMIUM_BASED_BROWSERS };
83
+ export { BROWSERS_LIST_MAP, CHROMIUM_BASED_BROWSERS, uaParserExtensions };
package/lib/constants.js CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ var UAParser = require('ua-parser-js');
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ var UAParser__default = /*#__PURE__*/_interopDefaultLegacy(UAParser);
10
+
5
11
  const BROWSERS_LIST_MAP = {
6
12
  chrome: {
7
13
  type: 'desktop',
@@ -62,6 +68,26 @@ const CHROMIUM_BASED_BROWSERS = [
62
68
  'blink',
63
69
  'vivaldi' /* , 'chrome webview', 'opera', 'samsung' */,
64
70
  ];
71
+ const uaParserExtensions = [
72
+ // добавляем отдельные регекспы для ботов гугла и т.п.
73
+ // это позволит для них получить отдельное имя браузера и обработать специальным образом
74
+ // https://github.com/faisalman/ua-parser-js/issues/227
75
+ // google page preloading agent
76
+ [/developers\.google\.com\/\+\/web\/snippet/i],
77
+ [UAParser__default["default"].BROWSER.NAME, UAParser__default["default"].BROWSER.VERSION, ['type', 'bot']],
78
+ // google, bing, msn
79
+ [/((?:\S+)bot(?:-[imagevdo]{5})?)\/([\w.]+)/i],
80
+ [UAParser__default["default"].BROWSER.NAME, UAParser__default["default"].BROWSER.VERSION, ['type', 'bot']],
81
+ // google adsbot под видом обычного браузера
82
+ [/[\s;(](adsbot[-\w]*?[\s;)])/i],
83
+ [UAParser__default["default"].BROWSER.NAME, [UAParser__default["default"].BROWSER.VERSION, 'unknown'], ['type', 'bot']],
84
+ // добавляем регекспы для браузеров которые пытаются казаться другими браузерами
85
+ // например ua-parser-js Firefox Focus для ios считает как просто Firefox, что ломает проверки на версии
86
+ // Firefox for iOS
87
+ [/fxios\/([\w\\.-]+)/i],
88
+ [[UAParser__default["default"].BROWSER.NAME, 'Firefox Focus'], UAParser__default["default"].BROWSER.VERSION],
89
+ ];
65
90
 
66
91
  exports.BROWSERS_LIST_MAP = BROWSERS_LIST_MAP;
67
92
  exports.CHROMIUM_BASED_BROWSERS = CHROMIUM_BASED_BROWSERS;
93
+ exports.uaParserExtensions = uaParserExtensions;
package/lib/types.d.ts CHANGED
@@ -46,4 +46,11 @@ export interface UserAgent {
46
46
  mobileOS?: string;
47
47
  sameSiteNoneCompatible: boolean;
48
48
  }
49
+ export type UAParserExtensionSource = (RegExp[] | (string[] | string)[])[];
50
+ export type UAParserExtensionsTypes = {
51
+ browser?: UAParserExtensionSource;
52
+ device?: UAParserExtensionSource;
53
+ os?: UAParserExtensionSource;
54
+ engine?: UAParserExtensionSource;
55
+ };
49
56
  //# sourceMappingURL=types.d.ts.map
@@ -1,3 +1,3 @@
1
- import type { UserAgent } from './types';
2
- export declare const parseUserAgentHeader: (userAgent: string) => UserAgent;
1
+ import type { UAParserExtensionsTypes, UserAgent } from './types';
2
+ export declare const parseUserAgentHeader: (userAgent: string, extensions?: UAParserExtensionsTypes[] | null) => UserAgent;
3
3
  //# sourceMappingURL=userAgent.d.ts.map
@@ -3,30 +3,15 @@ import compose from '@tinkoff/utils/function/compose';
3
3
  import toLower from '@tinkoff/utils/string/toLower';
4
4
  import { UAParser } from 'ua-parser-js';
5
5
  import { isSameSiteNoneCompatible } from './isSameSiteNoneCompatible.es.js';
6
- import { getMobileOs, getBrowserEngine } from './utils.es.js';
6
+ import { mergeExtensions } from './utils/merge-extensions.es.js';
7
+ import { getBrowserEngine } from './utils/get-browser-engine.es.js';
8
+ import { getMobileOs } from './utils/get-mobile-os.es.js';
7
9
 
8
10
  const toLowerName = compose(toLower, propOr('name', ''));
9
- const uaParserExtensions = [
10
- // добавляем отдельные регекспы для ботов гугла и т.п.
11
- // это позволит для них получить отдельное имя браузера и обработать специальным образом
12
- // https://github.com/faisalman/ua-parser-js/issues/227
13
- // google page preloading agent
14
- [/developers\.google\.com\/\+\/web\/snippet/i],
15
- [UAParser.BROWSER.NAME, UAParser.BROWSER.VERSION, ['type', 'bot']],
16
- // google, bing, msn
17
- [/((?:\S+)bot(?:-[imagevdo]{5})?)\/([\w.]+)/i],
18
- [UAParser.BROWSER.NAME, UAParser.BROWSER.VERSION, ['type', 'bot']],
19
- // google adsbot под видом обычного браузера
20
- [/[\s;(](adsbot[-\w]*?[\s;)])/i],
21
- [UAParser.BROWSER.NAME, [UAParser.BROWSER.VERSION, 'unknown'], ['type', 'bot']],
22
- // добавляем регекспы для браузеров которые пытаются казаться другими браузерами
23
- // например ua-parser-js Firefox Focus для ios считает как просто Firefox, что ломает проверки на версии
24
- // Firefox for iOS
25
- [/fxios\/([\w\\.-]+)/i],
26
- [[UAParser.BROWSER.NAME, 'Firefox Focus'], UAParser.BROWSER.VERSION],
27
- ];
28
- const parseUserAgentHeader = (userAgent) => {
29
- const { ua, ...result } = new UAParser(userAgent, { browser: uaParserExtensions }).getResult();
11
+ const parseUserAgentHeader = (userAgent, extensions) => {
12
+ const { ua, ...result } = new UAParser(userAgent, {
13
+ ...mergeExtensions(extensions || []),
14
+ }).getResult();
30
15
  const { browser, os, engine } = result;
31
16
  const browserName = toLowerName(browser);
32
17
  const engineName = toLowerName(engine);
package/lib/userAgent.js CHANGED
@@ -5,9 +5,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var propOr = require('@tinkoff/utils/object/propOr');
6
6
  var compose = require('@tinkoff/utils/function/compose');
7
7
  var toLower = require('@tinkoff/utils/string/toLower');
8
- var uaParserJs = require('ua-parser-js');
8
+ var UAParser = require('ua-parser-js');
9
9
  var isSameSiteNoneCompatible = require('./isSameSiteNoneCompatible.js');
10
- var utils = require('./utils.js');
10
+ var mergeExtensions = require('./utils/merge-extensions.js');
11
+ var getBrowserEngine = require('./utils/get-browser-engine.js');
12
+ var getMobileOs = require('./utils/get-mobile-os.js');
11
13
 
12
14
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
15
 
@@ -16,27 +18,10 @@ var compose__default = /*#__PURE__*/_interopDefaultLegacy(compose);
16
18
  var toLower__default = /*#__PURE__*/_interopDefaultLegacy(toLower);
17
19
 
18
20
  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 page preloading agent
24
- [/developers\.google\.com\/\+\/web\/snippet/i],
25
- [uaParserJs.UAParser.BROWSER.NAME, uaParserJs.UAParser.BROWSER.VERSION, ['type', 'bot']],
26
- // google, bing, msn
27
- [/((?:\S+)bot(?:-[imagevdo]{5})?)\/([\w.]+)/i],
28
- [uaParserJs.UAParser.BROWSER.NAME, uaParserJs.UAParser.BROWSER.VERSION, ['type', 'bot']],
29
- // google adsbot под видом обычного браузера
30
- [/[\s;(](adsbot[-\w]*?[\s;)])/i],
31
- [uaParserJs.UAParser.BROWSER.NAME, [uaParserJs.UAParser.BROWSER.VERSION, 'unknown'], ['type', 'bot']],
32
- // добавляем регекспы для браузеров которые пытаются казаться другими браузерами
33
- // например ua-parser-js Firefox Focus для ios считает как просто Firefox, что ломает проверки на версии
34
- // Firefox for iOS
35
- [/fxios\/([\w\\.-]+)/i],
36
- [[uaParserJs.UAParser.BROWSER.NAME, 'Firefox Focus'], uaParserJs.UAParser.BROWSER.VERSION],
37
- ];
38
- const parseUserAgentHeader = (userAgent) => {
39
- const { ua, ...result } = new uaParserJs.UAParser(userAgent, { browser: uaParserExtensions }).getResult();
21
+ const parseUserAgentHeader = (userAgent, extensions) => {
22
+ const { ua, ...result } = new UAParser.UAParser(userAgent, {
23
+ ...mergeExtensions.mergeExtensions(extensions || []),
24
+ }).getResult();
40
25
  const { browser, os, engine } = result;
41
26
  const browserName = toLowerName(browser);
42
27
  const engineName = toLowerName(engine);
@@ -45,11 +30,11 @@ const parseUserAgentHeader = (userAgent) => {
45
30
  }
46
31
  return {
47
32
  ...result,
48
- mobileOS: utils.getMobileOs(os.name),
33
+ mobileOS: getMobileOs.getMobileOs(os.name),
49
34
  sameSiteNoneCompatible: isSameSiteNoneCompatible.isSameSiteNoneCompatible(result),
50
35
  browser: {
51
36
  ...browser,
52
- browserEngine: utils.getBrowserEngine(browserName, engineName),
37
+ browserEngine: getBrowserEngine.getBrowserEngine(browserName, engineName),
53
38
  name: browserName,
54
39
  },
55
40
  };
@@ -0,0 +1,2 @@
1
+ export declare const getBrowserEngine: (browserName?: string, engineName?: string) => string;
2
+ //# sourceMappingURL=get-browser-engine.d.ts.map
@@ -1,16 +1,3 @@
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
1
  const getBrowserEngine = (browserName, engineName) => {
15
2
  switch (true) {
16
3
  case browserName === 'firefox':
@@ -29,4 +16,4 @@ const getBrowserEngine = (browserName, engineName) => {
29
16
  return 'other';
30
17
  };
31
18
 
32
- export { getBrowserEngine, getMobileOs };
19
+ export { getBrowserEngine };
@@ -2,19 +2,6 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
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
5
  const getBrowserEngine = (browserName, engineName) => {
19
6
  switch (true) {
20
7
  case browserName === 'firefox':
@@ -34,4 +21,3 @@ const getBrowserEngine = (browserName, engineName) => {
34
21
  };
35
22
 
36
23
  exports.getBrowserEngine = getBrowserEngine;
37
- exports.getMobileOs = getMobileOs;
@@ -0,0 +1,2 @@
1
+ export declare const getMobileOs: (osName?: string) => string | undefined;
2
+ //# sourceMappingURL=get-mobile-os.d.ts.map
@@ -0,0 +1,15 @@
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
+
15
+ export { getMobileOs };
@@ -0,0 +1,19 @@
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
+
19
+ exports.getMobileOs = getMobileOs;
@@ -0,0 +1,3 @@
1
+ import { UAParserExtensionsTypes } from '../types';
2
+ export declare const mergeExtensions: (extensions?: UAParserExtensionsTypes[]) => UAParserExtensionsTypes | undefined;
3
+ //# sourceMappingURL=merge-extensions.d.ts.map
@@ -0,0 +1,21 @@
1
+ import { uaParserExtensions } from '../constants.es.js';
2
+
3
+ const mergeExtensions = (extensions) => {
4
+ if (!extensions?.length) {
5
+ return {
6
+ browser: [...uaParserExtensions],
7
+ };
8
+ }
9
+ const merged = extensions.reduce((acc, curr) => ({
10
+ browser: [...(acc.browser || []), ...(curr.browser || [])],
11
+ os: [...(acc.os || []), ...(curr.os || [])],
12
+ device: [...(acc.device || []), ...(curr.device || [])],
13
+ engine: [...(acc.engine || []), ...(curr.engine || [])],
14
+ }), {});
15
+ return {
16
+ ...merged,
17
+ browser: [...(merged.browser || []), ...uaParserExtensions],
18
+ };
19
+ };
20
+
21
+ export { mergeExtensions };
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var constants = require('../constants.js');
6
+
7
+ const mergeExtensions = (extensions) => {
8
+ if (!extensions?.length) {
9
+ return {
10
+ browser: [...constants.uaParserExtensions],
11
+ };
12
+ }
13
+ const merged = extensions.reduce((acc, curr) => ({
14
+ browser: [...(acc.browser || []), ...(curr.browser || [])],
15
+ os: [...(acc.os || []), ...(curr.os || [])],
16
+ device: [...(acc.device || []), ...(curr.device || [])],
17
+ engine: [...(acc.engine || []), ...(curr.engine || [])],
18
+ }), {});
19
+ return {
20
+ ...merged,
21
+ browser: [...(merged.browser || []), ...constants.uaParserExtensions],
22
+ };
23
+ };
24
+
25
+ exports.mergeExtensions = mergeExtensions;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tinkoff/user-agent",
3
- "version": "0.7.198",
3
+ "version": "0.7.202",
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": "5.53.74",
32
+ "@tramvai/cli": "5.53.78",
33
33
  "@types/ua-parser-js": "^0.7.33"
34
34
  },
35
35
  "license": "Apache-2.0"
package/lib/utils.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export declare const getMobileOs: (osName?: string) => string | undefined;
2
- export declare const getBrowserEngine: (browserName?: string, engineName?: string) => string;
3
- //# sourceMappingURL=utils.d.ts.map