"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseUserAgent = exports.extractMetaInfo = exports.calculatePrettyUserAgent = void 0; const bowser_1 = __importDefault(require("bowser")); const DEFAULT_NAME = 'Other'; const DEFAULT_VERSION = '0.0'; const DEFAULT_PLATFORM_TYPE = DEFAULT_NAME.toLowerCase(); const EMPTY_PARSED_USER_AGENT = bowser_1.default.parse(' '); const META_INFO_REGEX = /\([^(|^)]*\)/; function calculateBrowser(browserDetails) { return { name: browserDetails.name || DEFAULT_NAME, version: browserDetails.version || DEFAULT_VERSION, }; } function calculateOs(parsedOsDetails) { const name = parsedOsDetails.name || DEFAULT_NAME; let version = DEFAULT_VERSION; // NOTE: a 'versionName' property value is more readable in the case of Windows (GH-481): // Windows 8.1: os.version: "NT 6.3", os.versionName: "8.1". if (name.toLowerCase() === 'windows') { if (parsedOsDetails.versionName) version = parsedOsDetails.versionName; } else if (parsedOsDetails.version) version = parsedOsDetails.version; return { name, version }; } function calculateEngine(engineDetails) { return { name: engineDetails.name || DEFAULT_NAME, version: engineDetails.version || DEFAULT_VERSION, }; } function calculatePrettyUserAgent(browser, os) { return `${browser.name} ${browser.version} / ${os.name} ${os.version}`; } exports.calculatePrettyUserAgent = calculatePrettyUserAgent; function extractMetaInfo(prettyUserAgent) { const parenthesisExpressions = prettyUserAgent.match(META_INFO_REGEX); if (!parenthesisExpressions || !parenthesisExpressions.length) return ''; return parenthesisExpressions[parenthesisExpressions.length - 1].replace(/[()]/g, ''); } exports.extractMetaInfo = extractMetaInfo; function parseUserAgent(userAgent = '') { const parsedUserAgent = userAgent ? bowser_1.default.parse(userAgent) : EMPTY_PARSED_USER_AGENT; const browser = calculateBrowser(parsedUserAgent.browser); const os = calculateOs(parsedUserAgent.os); const engine = calculateEngine(parsedUserAgent.engine); const prettyUserAgent = calculatePrettyUserAgent(browser, os); return { name: browser.name, version: browser.version, platform: parsedUserAgent.platform.type || DEFAULT_PLATFORM_TYPE, os, engine, prettyUserAgent: prettyUserAgent, userAgent, }; } exports.parseUserAgent = parseUserAgent; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtdXNlci1hZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9wYXJzZS11c2VyLWFnZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUU1QixNQUFNLFlBQVksR0FBYyxPQUFPLENBQUM7QUFDeEMsTUFBTSxlQUFlLEdBQVcsS0FBSyxDQUFDO0FBQ3RDLE1BQU0scUJBQXFCLEdBQUssWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzNELE1BQU0sdUJBQXVCLEdBQUcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEQsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDO0FBaUJ2QyxTQUFTLGdCQUFnQixDQUFFLGNBQTRDO0lBQ25FLE9BQU87UUFDSCxJQUFJLEVBQUssY0FBYyxDQUFDLElBQUksSUFBSSxZQUFZO1FBQzVDLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTyxJQUFJLGVBQWU7S0FDckQsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBRSxlQUF3QztJQUMxRCxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQztJQUVsRCxJQUFJLE9BQU8sR0FBRyxlQUFlLENBQUM7SUFFOUIseUZBQXlGO0lBQ3pGLDREQUE0RDtJQUM1RCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxTQUFTLEVBQUU7UUFDbEMsSUFBSSxlQUFlLENBQUMsV0FBVztZQUMzQixPQUFPLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQztLQUM3QztTQUNJLElBQUksZUFBZSxDQUFDLE9BQU87UUFDNUIsT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7SUFFdEMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUM3QixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUUsYUFBMEM7SUFDaEUsT0FBTztRQUNILElBQUksRUFBSyxhQUFhLENBQUMsSUFBSSxJQUFJLFlBQVk7UUFDM0MsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPLElBQUksZUFBZTtLQUNwRCxDQUFDO0FBQ04sQ0FBQztBQUVELFNBQWdCLHdCQUF3QixDQUFFLE9BQXdCLEVBQUUsRUFBbUI7SUFDbkYsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLE9BQU8sTUFBTSxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzRSxDQUFDO0FBRkQsNERBRUM7QUFFRCxTQUFnQixlQUFlLENBQUUsZUFBdUI7SUFDcEQsTUFBTSxzQkFBc0IsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXRFLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU07UUFDekQsT0FBTyxFQUFFLENBQUM7SUFFZCxPQUFPLHNCQUFzQixDQUFDLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFGLENBQUM7QUFQRCwwQ0FPQztBQUVELFNBQWdCLGNBQWMsQ0FBRSxTQUFTLEdBQUcsRUFBRTtJQUMxQyxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQztJQUN0RixNQUFNLE9BQU8sR0FBVyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEUsTUFBTSxFQUFFLEdBQWdCLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEQsTUFBTSxNQUFNLEdBQVksZUFBZSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRSxNQUFNLGVBQWUsR0FBRyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFOUQsT0FBTztRQUNILElBQUksRUFBYSxPQUFPLENBQUMsSUFBSTtRQUM3QixPQUFPLEVBQVUsT0FBTyxDQUFDLE9BQU87UUFDaEMsUUFBUSxFQUFTLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLHFCQUFxQjtRQUN2RSxFQUFFO1FBQ0YsTUFBTTtRQUNOLGVBQWUsRUFBRSxlQUFlO1FBQ2hDLFNBQVM7S0FDWixDQUFDO0FBQ04sQ0FBQztBQWhCRCx3Q0FnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQm93c2VyIGZyb20gJ2Jvd3Nlcic7XG5cbmNvbnN0IERFRkFVTFRfTkFNRSAgICAgICAgICAgID0gJ090aGVyJztcbmNvbnN0IERFRkFVTFRfVkVSU0lPTiAgICAgICAgID0gJzAuMCc7XG5jb25zdCBERUZBVUxUX1BMQVRGT1JNX1RZUEUgICA9IERFRkFVTFRfTkFNRS50b0xvd2VyQ2FzZSgpO1xuY29uc3QgRU1QVFlfUEFSU0VEX1VTRVJfQUdFTlQgPSBCb3dzZXIucGFyc2UoJyAnKTtcbmNvbnN0IE1FVEFfSU5GT19SRUdFWCA9IC9cXChbXih8XildKlxcKS87XG5cbmludGVyZmFjZSBQYXJzZWRDb21wb25lbnQge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkVXNlckFnZW50IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIHBsYXRmb3JtOiBzdHJpbmc7XG4gICAgb3M6IFBhcnNlZENvbXBvbmVudDtcbiAgICBlbmdpbmU6IFBhcnNlZENvbXBvbmVudDtcbiAgICBwcmV0dHlVc2VyQWdlbnQ6IHN0cmluZztcbiAgICB1c2VyQWdlbnQ6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlQnJvd3NlciAoYnJvd3NlckRldGFpbHM6IEJvd3Nlci5QYXJzZXIuQnJvd3NlckRldGFpbHMpOiBQYXJzZWRDb21wb25lbnQge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICAgIGJyb3dzZXJEZXRhaWxzLm5hbWUgfHwgREVGQVVMVF9OQU1FLFxuICAgICAgICB2ZXJzaW9uOiBicm93c2VyRGV0YWlscy52ZXJzaW9uIHx8IERFRkFVTFRfVkVSU0lPTixcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVPcyAocGFyc2VkT3NEZXRhaWxzOiBCb3dzZXIuUGFyc2VyLk9TRGV0YWlscyk6IFBhcnNlZENvbXBvbmVudCB7XG4gICAgY29uc3QgbmFtZSA9IHBhcnNlZE9zRGV0YWlscy5uYW1lIHx8IERFRkFVTFRfTkFNRTtcblxuICAgIGxldCB2ZXJzaW9uID0gREVGQVVMVF9WRVJTSU9OO1xuXG4gICAgLy8gTk9URTogYSAndmVyc2lvbk5hbWUnIHByb3BlcnR5IHZhbHVlIGlzIG1vcmUgcmVhZGFibGUgaW4gdGhlIGNhc2Ugb2YgV2luZG93cyAoR0gtNDgxKTpcbiAgICAvLyBXaW5kb3dzIDguMTogb3MudmVyc2lvbjogXCJOVCA2LjNcIiwgb3MudmVyc2lvbk5hbWU6IFwiOC4xXCIuXG4gICAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3dpbmRvd3MnKSB7XG4gICAgICAgIGlmIChwYXJzZWRPc0RldGFpbHMudmVyc2lvbk5hbWUpXG4gICAgICAgICAgICB2ZXJzaW9uID0gcGFyc2VkT3NEZXRhaWxzLnZlcnNpb25OYW1lO1xuICAgIH1cbiAgICBlbHNlIGlmIChwYXJzZWRPc0RldGFpbHMudmVyc2lvbilcbiAgICAgICAgdmVyc2lvbiA9IHBhcnNlZE9zRGV0YWlscy52ZXJzaW9uO1xuXG4gICAgcmV0dXJuIHsgbmFtZSwgdmVyc2lvbiB9O1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVFbmdpbmUgKGVuZ2luZURldGFpbHM6IEJvd3Nlci5QYXJzZXIuRW5naW5lRGV0YWlscyk6IFBhcnNlZENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogICAgZW5naW5lRGV0YWlscy5uYW1lIHx8IERFRkFVTFRfTkFNRSxcbiAgICAgICAgdmVyc2lvbjogZW5naW5lRGV0YWlscy52ZXJzaW9uIHx8IERFRkFVTFRfVkVSU0lPTixcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlUHJldHR5VXNlckFnZW50IChicm93c2VyOiBQYXJzZWRDb21wb25lbnQsIG9zOiBQYXJzZWRDb21wb25lbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHticm93c2VyLm5hbWV9ICR7YnJvd3Nlci52ZXJzaW9ufSAvICR7b3MubmFtZX0gJHtvcy52ZXJzaW9ufWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TWV0YUluZm8gKHByZXR0eVVzZXJBZ2VudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJlbnRoZXNpc0V4cHJlc3Npb25zID0gcHJldHR5VXNlckFnZW50Lm1hdGNoKE1FVEFfSU5GT19SRUdFWCk7XG5cbiAgICBpZiAoIXBhcmVudGhlc2lzRXhwcmVzc2lvbnMgfHwgIXBhcmVudGhlc2lzRXhwcmVzc2lvbnMubGVuZ3RoKVxuICAgICAgICByZXR1cm4gJyc7XG5cbiAgICByZXR1cm4gcGFyZW50aGVzaXNFeHByZXNzaW9uc1twYXJlbnRoZXNpc0V4cHJlc3Npb25zLmxlbmd0aCAtIDFdLnJlcGxhY2UoL1soKV0vZywgJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VVc2VyQWdlbnQgKHVzZXJBZ2VudCA9ICcnKTogUGFyc2VkVXNlckFnZW50IHtcbiAgICBjb25zdCBwYXJzZWRVc2VyQWdlbnQgPSB1c2VyQWdlbnQgPyBCb3dzZXIucGFyc2UodXNlckFnZW50KSA6IEVNUFRZX1BBUlNFRF9VU0VSX0FHRU5UO1xuICAgIGNvbnN0IGJyb3dzZXIgICAgICAgICA9IGNhbGN1bGF0ZUJyb3dzZXIocGFyc2VkVXNlckFnZW50LmJyb3dzZXIpO1xuICAgIGNvbnN0IG9zICAgICAgICAgICAgICA9IGNhbGN1bGF0ZU9zKHBhcnNlZFVzZXJBZ2VudC5vcyk7XG4gICAgY29uc3QgZW5naW5lICAgICAgICAgID0gY2FsY3VsYXRlRW5naW5lKHBhcnNlZFVzZXJBZ2VudC5lbmdpbmUpO1xuICAgIGNvbnN0IHByZXR0eVVzZXJBZ2VudCA9IGNhbGN1bGF0ZVByZXR0eVVzZXJBZ2VudChicm93c2VyLCBvcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAgICAgICAgICAgIGJyb3dzZXIubmFtZSxcbiAgICAgICAgdmVyc2lvbjogICAgICAgICBicm93c2VyLnZlcnNpb24sXG4gICAgICAgIHBsYXRmb3JtOiAgICAgICAgcGFyc2VkVXNlckFnZW50LnBsYXRmb3JtLnR5cGUgfHwgREVGQVVMVF9QTEFURk9STV9UWVBFLFxuICAgICAgICBvcyxcbiAgICAgICAgZW5naW5lLFxuICAgICAgICBwcmV0dHlVc2VyQWdlbnQ6IHByZXR0eVVzZXJBZ2VudCxcbiAgICAgICAgdXNlckFnZW50LFxuICAgIH07XG59XG4iXX0=