UNPKG

matrix-react-sdk

Version:
92 lines (88 loc) 12.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.parseUserAgent = exports.DeviceType = void 0; var _uaParserJs = _interopRequireDefault(require("ua-parser-js")); /* Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ let DeviceType = exports.DeviceType = /*#__PURE__*/function (DeviceType) { DeviceType["Desktop"] = "Desktop"; DeviceType["Mobile"] = "Mobile"; DeviceType["Web"] = "Web"; DeviceType["Unknown"] = "Unknown"; return DeviceType; }({}); // Element/1.8.21 (iPhone XS Max; iOS 15.2; Scale/3.00) const IOS_KEYWORD = "; iOS "; const BROWSER_KEYWORD = "Mozilla/"; const getDeviceType = (userAgent, device, browser, operatingSystem) => { if (device.type === "mobile" || operatingSystem.name?.includes("Android") || userAgent.indexOf(IOS_KEYWORD) > -1) { return DeviceType.Mobile; } if (browser.name === "Electron") { return DeviceType.Desktop; } if (!!browser.name) { return DeviceType.Web; } return DeviceType.Unknown; }; /** * Some mobile model and OS strings are not recognised * by the UA parsing library * check they exist by hand */ const checkForCustomValues = userAgent => { if (userAgent.includes(BROWSER_KEYWORD)) { return {}; } const mightHaveDevice = userAgent.includes("("); if (!mightHaveDevice) { return {}; } const deviceInfoSegments = userAgent.substring(userAgent.indexOf("(") + 1).split("; "); const customDeviceModel = deviceInfoSegments[0] || undefined; const customDeviceOS = deviceInfoSegments[1] || undefined; return { customDeviceModel, customDeviceOS }; }; const concatenateNameAndVersion = (name, version) => name && [name, version].filter(Boolean).join(" "); const parseUserAgent = userAgent => { if (!userAgent) { return { deviceType: DeviceType.Unknown }; } const parser = new _uaParserJs.default(userAgent); const browser = parser.getBrowser(); const device = parser.getDevice(); const operatingSystem = parser.getOS(); const deviceType = getDeviceType(userAgent, device, browser, operatingSystem); // OSX versions are frozen at 10.15.17 in UA strings https://chromestatus.com/feature/5452592194781184 // ignore OS version in browser based sessions const shouldIgnoreOSVersion = deviceType === DeviceType.Web || deviceType === DeviceType.Desktop; const deviceOperatingSystem = concatenateNameAndVersion(operatingSystem.name, shouldIgnoreOSVersion ? undefined : operatingSystem.version); const deviceModel = concatenateNameAndVersion(device.vendor, device.model); const client = concatenateNameAndVersion(browser.name, browser.version); // only try to parse custom model and OS when device type is known const { customDeviceModel, customDeviceOS } = deviceType !== DeviceType.Unknown ? checkForCustomValues(userAgent) : {}; return { deviceType, deviceModel: deviceModel || customDeviceModel, deviceOperatingSystem: deviceOperatingSystem || customDeviceOS, client }; }; exports.parseUserAgent = parseUserAgent; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdWFQYXJzZXJKcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiRGV2aWNlVHlwZSIsImV4cG9ydHMiLCJJT1NfS0VZV09SRCIsIkJST1dTRVJfS0VZV09SRCIsImdldERldmljZVR5cGUiLCJ1c2VyQWdlbnQiLCJkZXZpY2UiLCJicm93c2VyIiwib3BlcmF0aW5nU3lzdGVtIiwidHlwZSIsIm5hbWUiLCJpbmNsdWRlcyIsImluZGV4T2YiLCJNb2JpbGUiLCJEZXNrdG9wIiwiV2ViIiwiVW5rbm93biIsImNoZWNrRm9yQ3VzdG9tVmFsdWVzIiwibWlnaHRIYXZlRGV2aWNlIiwiZGV2aWNlSW5mb1NlZ21lbnRzIiwic3Vic3RyaW5nIiwic3BsaXQiLCJjdXN0b21EZXZpY2VNb2RlbCIsInVuZGVmaW5lZCIsImN1c3RvbURldmljZU9TIiwiY29uY2F0ZW5hdGVOYW1lQW5kVmVyc2lvbiIsInZlcnNpb24iLCJmaWx0ZXIiLCJCb29sZWFuIiwiam9pbiIsInBhcnNlVXNlckFnZW50IiwiZGV2aWNlVHlwZSIsInBhcnNlciIsIlVBUGFyc2VyIiwiZ2V0QnJvd3NlciIsImdldERldmljZSIsImdldE9TIiwic2hvdWxkSWdub3JlT1NWZXJzaW9uIiwiZGV2aWNlT3BlcmF0aW5nU3lzdGVtIiwiZGV2aWNlTW9kZWwiLCJ2ZW5kb3IiLCJtb2RlbCIsImNsaWVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9kZXZpY2UvcGFyc2VVc2VyQWdlbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFVBUGFyc2VyIGZyb20gXCJ1YS1wYXJzZXItanNcIjtcblxuZXhwb3J0IGVudW0gRGV2aWNlVHlwZSB7XG4gICAgRGVza3RvcCA9IFwiRGVza3RvcFwiLFxuICAgIE1vYmlsZSA9IFwiTW9iaWxlXCIsXG4gICAgV2ViID0gXCJXZWJcIixcbiAgICBVbmtub3duID0gXCJVbmtub3duXCIsXG59XG5leHBvcnQgdHlwZSBFeHRlbmRlZERldmljZUluZm9ybWF0aW9uID0ge1xuICAgIGRldmljZVR5cGU6IERldmljZVR5cGU7XG4gICAgLy8gZWcgR29vZ2xlIFBpeGVsIDZcbiAgICBkZXZpY2VNb2RlbD86IHN0cmluZztcbiAgICAvLyBlZyBBbmRyb2lkIDExXG4gICAgZGV2aWNlT3BlcmF0aW5nU3lzdGVtPzogc3RyaW5nO1xuICAgIC8vIGVnIEZpcmVmb3ggMS4xLjBcbiAgICBjbGllbnQ/OiBzdHJpbmc7XG59O1xuXG4vLyBFbGVtZW50LzEuOC4yMSAoaVBob25lIFhTIE1heDsgaU9TIDE1LjI7IFNjYWxlLzMuMDApXG5jb25zdCBJT1NfS0VZV09SRCA9IFwiOyBpT1MgXCI7XG5jb25zdCBCUk9XU0VSX0tFWVdPUkQgPSBcIk1vemlsbGEvXCI7XG5cbmNvbnN0IGdldERldmljZVR5cGUgPSAoXG4gICAgdXNlckFnZW50OiBzdHJpbmcsXG4gICAgZGV2aWNlOiBVQVBhcnNlci5JRGV2aWNlLFxuICAgIGJyb3dzZXI6IFVBUGFyc2VyLklCcm93c2VyLFxuICAgIG9wZXJhdGluZ1N5c3RlbTogVUFQYXJzZXIuSU9TLFxuKTogRGV2aWNlVHlwZSA9PiB7XG4gICAgaWYgKGRldmljZS50eXBlID09PSBcIm1vYmlsZVwiIHx8IG9wZXJhdGluZ1N5c3RlbS5uYW1lPy5pbmNsdWRlcyhcIkFuZHJvaWRcIikgfHwgdXNlckFnZW50LmluZGV4T2YoSU9TX0tFWVdPUkQpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIERldmljZVR5cGUuTW9iaWxlO1xuICAgIH1cbiAgICBpZiAoYnJvd3Nlci5uYW1lID09PSBcIkVsZWN0cm9uXCIpIHtcbiAgICAgICAgcmV0dXJuIERldmljZVR5cGUuRGVza3RvcDtcbiAgICB9XG4gICAgaWYgKCEhYnJvd3Nlci5uYW1lKSB7XG4gICAgICAgIHJldHVybiBEZXZpY2VUeXBlLldlYjtcbiAgICB9XG4gICAgcmV0dXJuIERldmljZVR5cGUuVW5rbm93bjtcbn07XG5cbmludGVyZmFjZSBDdXN0b21WYWx1ZXMge1xuICAgIGN1c3RvbURldmljZU1vZGVsPzogc3RyaW5nO1xuICAgIGN1c3RvbURldmljZU9TPzogc3RyaW5nO1xufVxuLyoqXG4gKiBTb21lIG1vYmlsZSBtb2RlbCBhbmQgT1Mgc3RyaW5ncyBhcmUgbm90IHJlY29nbmlzZWRcbiAqIGJ5IHRoZSBVQSBwYXJzaW5nIGxpYnJhcnlcbiAqIGNoZWNrIHRoZXkgZXhpc3QgYnkgaGFuZFxuICovXG5jb25zdCBjaGVja0ZvckN1c3RvbVZhbHVlcyA9ICh1c2VyQWdlbnQ6IHN0cmluZyk6IEN1c3RvbVZhbHVlcyA9PiB7XG4gICAgaWYgKHVzZXJBZ2VudC5pbmNsdWRlcyhCUk9XU0VSX0tFWVdPUkQpKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBtaWdodEhhdmVEZXZpY2UgPSB1c2VyQWdlbnQuaW5jbHVkZXMoXCIoXCIpO1xuICAgIGlmICghbWlnaHRIYXZlRGV2aWNlKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgZGV2aWNlSW5mb1NlZ21lbnRzID0gdXNlckFnZW50LnN1YnN0cmluZyh1c2VyQWdlbnQuaW5kZXhPZihcIihcIikgKyAxKS5zcGxpdChcIjsgXCIpO1xuICAgIGNvbnN0IGN1c3RvbURldmljZU1vZGVsID0gZGV2aWNlSW5mb1NlZ21lbnRzWzBdIHx8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjdXN0b21EZXZpY2VPUyA9IGRldmljZUluZm9TZWdtZW50c1sxXSB8fCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgY3VzdG9tRGV2aWNlTW9kZWwsIGN1c3RvbURldmljZU9TIH07XG59O1xuXG5jb25zdCBjb25jYXRlbmF0ZU5hbWVBbmRWZXJzaW9uID0gKG5hbWU/OiBzdHJpbmcsIHZlcnNpb24/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT5cbiAgICBuYW1lICYmIFtuYW1lLCB2ZXJzaW9uXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG5cbmV4cG9ydCBjb25zdCBwYXJzZVVzZXJBZ2VudCA9ICh1c2VyQWdlbnQ/OiBzdHJpbmcpOiBFeHRlbmRlZERldmljZUluZm9ybWF0aW9uID0+IHtcbiAgICBpZiAoIXVzZXJBZ2VudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGV2aWNlVHlwZTogRGV2aWNlVHlwZS5Vbmtub3duLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBVQVBhcnNlcih1c2VyQWdlbnQpO1xuXG4gICAgY29uc3QgYnJvd3NlciA9IHBhcnNlci5nZXRCcm93c2VyKCk7XG4gICAgY29uc3QgZGV2aWNlID0gcGFyc2VyLmdldERldmljZSgpO1xuICAgIGNvbnN0IG9wZXJhdGluZ1N5c3RlbSA9IHBhcnNlci5nZXRPUygpO1xuXG4gICAgY29uc3QgZGV2aWNlVHlwZSA9IGdldERldmljZVR5cGUodXNlckFnZW50LCBkZXZpY2UsIGJyb3dzZXIsIG9wZXJhdGluZ1N5c3RlbSk7XG5cbiAgICAvLyBPU1ggdmVyc2lvbnMgYXJlIGZyb3plbiBhdCAxMC4xNS4xNyBpbiBVQSBzdHJpbmdzIGh0dHBzOi8vY2hyb21lc3RhdHVzLmNvbS9mZWF0dXJlLzU0NTI1OTIxOTQ3ODExODRcbiAgICAvLyBpZ25vcmUgT1MgdmVyc2lvbiBpbiBicm93c2VyIGJhc2VkIHNlc3Npb25zXG4gICAgY29uc3Qgc2hvdWxkSWdub3JlT1NWZXJzaW9uID0gZGV2aWNlVHlwZSA9PT0gRGV2aWNlVHlwZS5XZWIgfHwgZGV2aWNlVHlwZSA9PT0gRGV2aWNlVHlwZS5EZXNrdG9wO1xuICAgIGNvbnN0IGRldmljZU9wZXJhdGluZ1N5c3RlbSA9IGNvbmNhdGVuYXRlTmFtZUFuZFZlcnNpb24oXG4gICAgICAgIG9wZXJhdGluZ1N5c3RlbS5uYW1lLFxuICAgICAgICBzaG91bGRJZ25vcmVPU1ZlcnNpb24gPyB1bmRlZmluZWQgOiBvcGVyYXRpbmdTeXN0ZW0udmVyc2lvbixcbiAgICApO1xuICAgIGNvbnN0IGRldmljZU1vZGVsID0gY29uY2F0ZW5hdGVOYW1lQW5kVmVyc2lvbihkZXZpY2UudmVuZG9yLCBkZXZpY2UubW9kZWwpO1xuICAgIGNvbnN0IGNsaWVudCA9IGNvbmNhdGVuYXRlTmFtZUFuZFZlcnNpb24oYnJvd3Nlci5uYW1lLCBicm93c2VyLnZlcnNpb24pO1xuXG4gICAgLy8gb25seSB0cnkgdG8gcGFyc2UgY3VzdG9tIG1vZGVsIGFuZCBPUyB3aGVuIGRldmljZSB0eXBlIGlzIGtub3duXG4gICAgY29uc3QgeyBjdXN0b21EZXZpY2VNb2RlbCwgY3VzdG9tRGV2aWNlT1MgfSA9XG4gICAgICAgIGRldmljZVR5cGUgIT09IERldmljZVR5cGUuVW5rbm93biA/IGNoZWNrRm9yQ3VzdG9tVmFsdWVzKHVzZXJBZ2VudCkgOiAoe30gYXMgQ3VzdG9tVmFsdWVzKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGRldmljZVR5cGUsXG4gICAgICAgIGRldmljZU1vZGVsOiBkZXZpY2VNb2RlbCB8fCBjdXN0b21EZXZpY2VNb2RlbCxcbiAgICAgICAgZGV2aWNlT3BlcmF0aW5nU3lzdGVtOiBkZXZpY2VPcGVyYXRpbmdTeXN0ZW0gfHwgY3VzdG9tRGV2aWNlT1MsXG4gICAgICAgIGNsaWVudCxcbiAgICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVFBLElBQUFBLFdBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQVJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEsSUFVWUMsVUFBVSxHQUFBQyxPQUFBLENBQUFELFVBQUEsMEJBQVZBLFVBQVU7RUFBVkEsVUFBVTtFQUFWQSxVQUFVO0VBQVZBLFVBQVU7RUFBVkEsVUFBVTtFQUFBLE9BQVZBLFVBQVU7QUFBQTtBQWdCdEI7QUFDQSxNQUFNRSxXQUFXLEdBQUcsUUFBUTtBQUM1QixNQUFNQyxlQUFlLEdBQUcsVUFBVTtBQUVsQyxNQUFNQyxhQUFhLEdBQUdBLENBQ2xCQyxTQUFpQixFQUNqQkMsTUFBd0IsRUFDeEJDLE9BQTBCLEVBQzFCQyxlQUE2QixLQUNoQjtFQUNiLElBQUlGLE1BQU0sQ0FBQ0csSUFBSSxLQUFLLFFBQVEsSUFBSUQsZUFBZSxDQUFDRSxJQUFJLEVBQUVDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSU4sU0FBUyxDQUFDTyxPQUFPLENBQUNWLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQzlHLE9BQU9GLFVBQVUsQ0FBQ2EsTUFBTTtFQUM1QjtFQUNBLElBQUlOLE9BQU8sQ0FBQ0csSUFBSSxLQUFLLFVBQVUsRUFBRTtJQUM3QixPQUFPVixVQUFVLENBQUNjLE9BQU87RUFDN0I7RUFDQSxJQUFJLENBQUMsQ0FBQ1AsT0FBTyxDQUFDRyxJQUFJLEVBQUU7SUFDaEIsT0FBT1YsVUFBVSxDQUFDZSxHQUFHO0VBQ3pCO0VBQ0EsT0FBT2YsVUFBVSxDQUFDZ0IsT0FBTztBQUM3QixDQUFDO0FBTUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1DLG9CQUFvQixHQUFJWixTQUFpQixJQUFtQjtFQUM5RCxJQUFJQSxTQUFTLENBQUNNLFFBQVEsQ0FBQ1IsZUFBZSxDQUFDLEVBQUU7SUFDckMsT0FBTyxDQUFDLENBQUM7RUFDYjtFQUVBLE1BQU1lLGVBQWUsR0FBR2IsU0FBUyxDQUFDTSxRQUFRLENBQUMsR0FBRyxDQUFDO0VBQy9DLElBQUksQ0FBQ08sZUFBZSxFQUFFO0lBQ2xCLE9BQU8sQ0FBQyxDQUFDO0VBQ2I7RUFDQSxNQUFNQyxrQkFBa0IsR0FBR2QsU0FBUyxDQUFDZSxTQUFTLENBQUNmLFNBQVMsQ0FBQ08sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDUyxLQUFLLENBQUMsSUFBSSxDQUFDO0VBQ3RGLE1BQU1DLGlCQUFpQixHQUFHSCxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSUksU0FBUztFQUM1RCxNQUFNQyxjQUFjLEdBQUdMLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJSSxTQUFTO0VBQ3pELE9BQU87SUFBRUQsaUJBQWlCO0lBQUVFO0VBQWUsQ0FBQztBQUNoRCxDQUFDO0FBRUQsTUFBTUMseUJBQXlCLEdBQUdBLENBQUNmLElBQWEsRUFBRWdCLE9BQWdCLEtBQzlEaEIsSUFBSSxJQUFJLENBQUNBLElBQUksRUFBRWdCLE9BQU8sQ0FBQyxDQUFDQyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxDQUFDQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBRTlDLE1BQU1DLGNBQWMsR0FBSXpCLFNBQWtCLElBQWdDO0VBQzdFLElBQUksQ0FBQ0EsU0FBUyxFQUFFO0lBQ1osT0FBTztNQUNIMEIsVUFBVSxFQUFFL0IsVUFBVSxDQUFDZ0I7SUFDM0IsQ0FBQztFQUNMO0VBRUEsTUFBTWdCLE1BQU0sR0FBRyxJQUFJQyxtQkFBUSxDQUFDNUIsU0FBUyxDQUFDO0VBRXRDLE1BQU1FLE9BQU8sR0FBR3lCLE1BQU0sQ0FBQ0UsVUFBVSxDQUFDLENBQUM7RUFDbkMsTUFBTTVCLE1BQU0sR0FBRzBCLE1BQU0sQ0FBQ0csU0FBUyxDQUFDLENBQUM7RUFDakMsTUFBTTNCLGVBQWUsR0FBR3dCLE1BQU0sQ0FBQ0ksS0FBSyxDQUFDLENBQUM7RUFFdEMsTUFBTUwsVUFBVSxHQUFHM0IsYUFBYSxDQUFDQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsT0FBTyxFQUFFQyxlQUFlLENBQUM7O0VBRTdFO0VBQ0E7RUFDQSxNQUFNNkIscUJBQXFCLEdBQUdOLFVBQVUsS0FBSy9CLFVBQVUsQ0FBQ2UsR0FBRyxJQUFJZ0IsVUFBVSxLQUFLL0IsVUFBVSxDQUFDYyxPQUFPO0VBQ2hHLE1BQU13QixxQkFBcUIsR0FBR2IseUJBQXlCLENBQ25EakIsZUFBZSxDQUFDRSxJQUFJLEVBQ3BCMkIscUJBQXFCLEdBQUdkLFNBQVMsR0FBR2YsZUFBZSxDQUFDa0IsT0FDeEQsQ0FBQztFQUNELE1BQU1hLFdBQVcsR0FBR2QseUJBQXlCLENBQUNuQixNQUFNLENBQUNrQyxNQUFNLEVBQUVsQyxNQUFNLENBQUNtQyxLQUFLLENBQUM7RUFDMUUsTUFBTUMsTUFBTSxHQUFHakIseUJBQXlCLENBQUNsQixPQUFPLENBQUNHLElBQUksRUFBRUgsT0FBTyxDQUFDbUIsT0FBTyxDQUFDOztFQUV2RTtFQUNBLE1BQU07SUFBRUosaUJBQWlCO0lBQUVFO0VBQWUsQ0FBQyxHQUN2Q08sVUFBVSxLQUFLL0IsVUFBVSxDQUFDZ0IsT0FBTyxHQUFHQyxvQkFBb0IsQ0FBQ1osU0FBUyxDQUFDLEdBQUksQ0FBQyxDQUFrQjtFQUU5RixPQUFPO0lBQ0gwQixVQUFVO0lBQ1ZRLFdBQVcsRUFBRUEsV0FBVyxJQUFJakIsaUJBQWlCO0lBQzdDZ0IscUJBQXFCLEVBQUVBLHFCQUFxQixJQUFJZCxjQUFjO0lBQzlEa0I7RUFDSixDQUFDO0FBQ0wsQ0FBQztBQUFDekMsT0FBQSxDQUFBNkIsY0FBQSxHQUFBQSxjQUFBIiwiaWdub3JlTGlzdCI6W119