@tinkoff/user-agent 0.4.383 → 0.4.385

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.
@@ -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;
@@ -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: {
@@ -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: {
@@ -1,5 +1,7 @@
1
1
  import type { UserAgent } from './types';
2
- export declare const satisfies: (userAgent: UserAgent | string, browserslistConfig?: string[], { env, forceMinimumUnknownVersions, }?: {
3
- env?: "modern" | "defaults" | undefined;
4
- forceMinimumUnknownVersions?: boolean | undefined;
5
- }) => boolean | null;
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 {};
@@ -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;
@@ -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.383",
3
+ "version": "0.4.385",
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.9",
32
+ "@tramvai/cli": "2.130.11",
33
33
  "@types/ua-parser-js": "^0.7.33"
34
34
  },
35
35
  "license": "Apache-2.0"