matrix-react-sdk
Version:
SDK for matrix.org using React
92 lines (88 loc) • 12.5 kB
JavaScript
;
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/IGNoZWNrRm9yQ3VzdG9tVmFsdWVzKHVzZXJBZ2VudCkgOiAoe30gYXMgQ3VzdG9tVmFsdWVzKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGRldmljZVR5cGUsXG4gICAgICAgIGRldmljZU1vZGVsOiBkZXZpY2VNb2RlbCB8fCBjdXN0b21EZXZpY2VNb2RlbCxcbiAgICAgICAgZGV2aWNlT3BlcmF0aW5nU3lzdGVtOiBkZXZpY2VPcGVyYXRpbmdTeXN0ZW0gfHwgY3VzdG9tRGV2aWNlT1MsXG4gICAgICAgIGNsaWVudCxcbiAgICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVFBLElBQUFBLFdBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQVJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEsSUFVWUMsVUFBVSxHQUFBQyxPQUFBLENBQUFELFVBQUEs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