{"version":3,"file":"BrowserUtils-DWdthu3_.js","sources":["../../../node_modules/scheduler-polyfill/dist/scheduler-polyfill.js","../../../node_modules/bowser/src/constants.js","../../../node_modules/bowser/src/utils.js","../../../node_modules/bowser/src/parser-browsers.js","../../../node_modules/bowser/src/parser-os.js","../../../node_modules/bowser/src/parser-platforms.js","../../../node_modules/bowser/src/parser-engines.js","../../../node_modules/bowser/src/parser.js","../../../node_modules/bowser/src/bowser.js","../../../app/javascript/src/components/Recorder/recordings.ts","../../../app/javascript/src/utils/BrowserUtils.ts"],"sourcesContent":["!function(){var t=[\"user-blocking\",\"user-visible\",\"background\"];class i{constructor(){this.t=new MessageChannel,this.i=this.t.port2,this.l={},this.o=1,this.t.port1.onmessage=t=>this.h(t)}u(t){var i=this.o++;return this.l[i]=t,this.i.postMessage(i),i}p(t){delete this.l[t]}h(t){var i=t.data;if(i in this.l){var r=this.l[i];delete this.l[i],r()}}}function r(){return r.v||(r.v=new i),r.v}class s{constructor(t,i,r){void 0===r&&(r=0),this.k=t,this.T=null,this.C=null,this.m=!1,this._(i,r)}isIdleCallback(){return 0===this.T}I(){return 2===this.T}cancel(){if(!this.m)switch(this.m=!0,this.T){case 0:cancelIdleCallback(this.C);break;case 1:clearTimeout(this.C);break;case 2:r().p(this.C);break;default:throw new TypeError(\"Unknown CallbackType\")}}_(i,s){if(s&&s>0)return this.T=1,void(this.C=setTimeout(()=>{this.P()},s));if(!t.includes(i))throw new TypeError(\"Invalid task priority : \"+i);return\"background\"===i&&\"function\"==typeof requestIdleCallback?(this.T=0,void(this.C=requestIdleCallback(()=>{this.P()}))):\"function\"==typeof MessageChannel?(this.T=2,void(this.C=r().u(()=>{this.P()}))):(this.T=1,void(this.C=setTimeout(()=>{this.P()})))}P(){this.m||this.k()}}var e=0;class n{constructor(){this.j=null,this.M=null}isEmpty(){return null==this.j}push(t){if(\"object\"!=typeof t)throw new TypeError(\"Task must be an Object\");t.A=e++,this.isEmpty()?(t.N=null,this.j=t):(t.N=this.M,this.M.O=t),t.O=null,this.M=t}takeNextTask(){if(this.isEmpty())return null;var t=this.j;return this.q(t),t}merge(t,i){if(\"function\"!=typeof i)throw new TypeError(\"Must provide a selector function.\");if(null==t)throw new Error(\"sourceQueue cannot be null\");for(var r=this.j,s=null,e=t.j;e;){var n=e;if(e=e.O,i(n)){for(t.q(n);r&&r.A{s.onprioritychange&&s.onprioritychange(t)})}setPriority(i){if(!t.includes(i))throw new TypeError(\"Invalid task priority: \"+i);if(this.R)throw new DOMException(\"\",\"NotAllowedError\");if(this.signal.priority!==i){this.R=!0;var r=this.H;this.H=i;var s=new l(\"prioritychange\",{previousPriority:r});this.signal.dispatchEvent(s),this.R=!1}}}void 0===self.scheduler?(self.scheduler=new class{constructor(){this.S={},t.forEach(t=>{this.S[t]=[new n,new n]}),this.U=null,this.W=new WeakMap}yield(){return this.B(()=>{},{priority:\"user-visible\"},!0)}postTask(t,i){return this.B(t,i,!1)}B(i,r,s){if(void 0!==(r=Object.assign({},r)).signal){if(null===r.signal||!(\"aborted\"in r.signal)||\"function\"!=typeof r.signal.addEventListener)return Promise.reject(new TypeError(\"'signal' is not a valid 'AbortSignal'\"));if(r.signal&&r.signal.priority&&!t.includes(r.signal.priority))return Promise.reject(new TypeError(\"Invalid task priority: '\"+r.signal.priority+\"'\"))}if(void 0!==r.priority&&(null===r.priority||!t.includes(r.priority)))return Promise.reject(new TypeError(\"Invalid task priority: '\"+r.priority+\"'\"));if(void 0===r.delay&&(r.delay=0),r.delay=Number(r.delay),r.delay<0)return Promise.reject(new TypeError(\"'delay' must be a positive number.\"));var e={callback:i,options:r,resolve:null,reject:null,hostCallback:null,abortCallback:null,onTaskCompleted:function(){this.options.signal&&this.abortCallback&&(this.options.signal.removeEventListener(\"abort\",this.abortCallback),this.abortCallback=null)},onTaskAborted:function(){this.hostCallback&&(this.hostCallback.cancel(),this.hostCallback=null),this.options.signal.removeEventListener(\"abort\",this.abortCallback),this.abortCallback=null,this.reject(this.options.signal.reason)},isAborted:function(){return this.options.signal&&this.options.signal.aborted},isContinuation:s},n=new Promise((t,i)=>{e.resolve=t,e.reject=i});return this._(e),n}_(t){var i=t.options.signal;if(i){if(i.aborted)return void t.reject(i.reason);t.abortCallback=()=>{t.onTaskAborted()},i.addEventListener(\"abort\",t.abortCallback)}t.options.delay>0?t.hostCallback=new s(()=>{t.hostCallback=null,this.F(t)},null,t.options.delay):(this.G(t),this.J())}F(t){this.G(t),this.U&&(this.U.cancel(),this.U=null),this.K()}L(t){var i=this.W.get(t);if(void 0===i)throw new Error(\"Attempting to change priority on an unregistered signal\");if(i!==t.priority){for(var r=0;r<2;r++)this.S[t.priority][r].merge(this.S[i][r],i=>i.options.signal===t);this.W.set(t,t.priority)}}K(){this.U=null,this.V(),this.J()}J(){var{priority:t}=this.X();null!=t&&(\"background\"!==t&&this.U&&this.U.isIdleCallback()&&(this.U.cancel(),this.U=null),this.U||(this.U=new s(()=>{this.K()},t,0)))}G(i){var r;if(!t.includes(r=i.options.priority?i.options.priority:i.options.signal&&i.options.signal.priority?i.options.signal.priority:\"user-visible\"))throw new TypeError(\"Invalid task priority: \"+r);if(i.options.signal&&i.options.signal.priority){var s=i.options.signal;this.W.has(s)||(s.addEventListener(\"prioritychange\",()=>{this.L(s)}),this.W.set(s,s.priority))}this.S[r][i.isContinuation?0:1].push(i)}V(){var t=null;do{var{priority:i,type:r}=this.X();if(null==i)return;t=this.S[i][r].takeNextTask()}while(t.isAborted());try{var s=t.callback();t.resolve(s)}catch(i){t.reject(i)}finally{t.onTaskCompleted()}}X(){for(var i=0;i{},{priority:\"user-blocking\"})})}();\n//# sourceMappingURL=scheduler-polyfill.js.map\n","// NOTE: this list must be up-to-date with browsers listed in\n// test/acceptance/useragentstrings.yml\nexport const BROWSER_ALIASES_MAP = {\n 'Amazon Silk': 'amazon_silk',\n 'Android Browser': 'android',\n Bada: 'bada',\n BlackBerry: 'blackberry',\n Chrome: 'chrome',\n Chromium: 'chromium',\n Electron: 'electron',\n Epiphany: 'epiphany',\n Firefox: 'firefox',\n Focus: 'focus',\n Generic: 'generic',\n 'Google Search': 'google_search',\n Googlebot: 'googlebot',\n 'Internet Explorer': 'ie',\n 'K-Meleon': 'k_meleon',\n Maxthon: 'maxthon',\n 'Microsoft Edge': 'edge',\n 'MZ Browser': 'mz',\n 'NAVER Whale Browser': 'naver',\n Opera: 'opera',\n 'Opera Coast': 'opera_coast',\n PhantomJS: 'phantomjs',\n Puffin: 'puffin',\n QupZilla: 'qupzilla',\n QQ: 'qq',\n QQLite: 'qqlite',\n Safari: 'safari',\n Sailfish: 'sailfish',\n 'Samsung Internet for Android': 'samsung_internet',\n SeaMonkey: 'seamonkey',\n Sleipnir: 'sleipnir',\n Swing: 'swing',\n Tizen: 'tizen',\n 'UC Browser': 'uc',\n Vivaldi: 'vivaldi',\n 'WebOS Browser': 'webos',\n WeChat: 'wechat',\n 'Yandex Browser': 'yandex',\n Roku: 'roku',\n};\n\nexport const BROWSER_MAP = {\n amazon_silk: 'Amazon Silk',\n android: 'Android Browser',\n bada: 'Bada',\n blackberry: 'BlackBerry',\n chrome: 'Chrome',\n chromium: 'Chromium',\n electron: 'Electron',\n epiphany: 'Epiphany',\n firefox: 'Firefox',\n focus: 'Focus',\n generic: 'Generic',\n googlebot: 'Googlebot',\n google_search: 'Google Search',\n ie: 'Internet Explorer',\n k_meleon: 'K-Meleon',\n maxthon: 'Maxthon',\n edge: 'Microsoft Edge',\n mz: 'MZ Browser',\n naver: 'NAVER Whale Browser',\n opera: 'Opera',\n opera_coast: 'Opera Coast',\n phantomjs: 'PhantomJS',\n puffin: 'Puffin',\n qupzilla: 'QupZilla',\n qq: 'QQ Browser',\n qqlite: 'QQ Browser Lite',\n safari: 'Safari',\n sailfish: 'Sailfish',\n samsung_internet: 'Samsung Internet for Android',\n seamonkey: 'SeaMonkey',\n sleipnir: 'Sleipnir',\n swing: 'Swing',\n tizen: 'Tizen',\n uc: 'UC Browser',\n vivaldi: 'Vivaldi',\n webos: 'WebOS Browser',\n wechat: 'WeChat',\n yandex: 'Yandex Browser',\n};\n\nexport const PLATFORMS_MAP = {\n tablet: 'tablet',\n mobile: 'mobile',\n desktop: 'desktop',\n tv: 'tv',\n};\n\nexport const OS_MAP = {\n WindowsPhone: 'Windows Phone',\n Windows: 'Windows',\n MacOS: 'macOS',\n iOS: 'iOS',\n Android: 'Android',\n WebOS: 'WebOS',\n BlackBerry: 'BlackBerry',\n Bada: 'Bada',\n Tizen: 'Tizen',\n Linux: 'Linux',\n ChromeOS: 'Chrome OS',\n PlayStation4: 'PlayStation 4',\n Roku: 'Roku',\n};\n\nexport const ENGINE_MAP = {\n EdgeHTML: 'EdgeHTML',\n Blink: 'Blink',\n Trident: 'Trident',\n Presto: 'Presto',\n Gecko: 'Gecko',\n WebKit: 'WebKit',\n};\n","import { BROWSER_MAP, BROWSER_ALIASES_MAP } from './constants.js';\n\nexport default class Utils {\n /**\n * Get first matched item for a string\n * @param {RegExp} regexp\n * @param {String} ua\n * @return {Array|{index: number, input: string}|*|boolean|string}\n */\n static getFirstMatch(regexp, ua) {\n const match = ua.match(regexp);\n return (match && match.length > 0 && match[1]) || '';\n }\n\n /**\n * Get second matched item for a string\n * @param regexp\n * @param {String} ua\n * @return {Array|{index: number, input: string}|*|boolean|string}\n */\n static getSecondMatch(regexp, ua) {\n const match = ua.match(regexp);\n return (match && match.length > 1 && match[2]) || '';\n }\n\n /**\n * Match a regexp and return a constant or undefined\n * @param {RegExp} regexp\n * @param {String} ua\n * @param {*} _const Any const that will be returned if regexp matches the string\n * @return {*}\n */\n static matchAndReturnConst(regexp, ua, _const) {\n if (regexp.test(ua)) {\n return _const;\n }\n return void (0);\n }\n\n static getWindowsVersionName(version) {\n switch (version) {\n case 'NT': return 'NT';\n case 'XP': return 'XP';\n case 'NT 5.0': return '2000';\n case 'NT 5.1': return 'XP';\n case 'NT 5.2': return '2003';\n case 'NT 6.0': return 'Vista';\n case 'NT 6.1': return '7';\n case 'NT 6.2': return '8';\n case 'NT 6.3': return '8.1';\n case 'NT 10.0': return '10';\n default: return undefined;\n }\n }\n\n /**\n * Get macOS version name\n * 10.5 - Leopard\n * 10.6 - Snow Leopard\n * 10.7 - Lion\n * 10.8 - Mountain Lion\n * 10.9 - Mavericks\n * 10.10 - Yosemite\n * 10.11 - El Capitan\n * 10.12 - Sierra\n * 10.13 - High Sierra\n * 10.14 - Mojave\n * 10.15 - Catalina\n *\n * @example\n * getMacOSVersionName(\"10.14\") // 'Mojave'\n *\n * @param {string} version\n * @return {string} versionName\n */\n static getMacOSVersionName(version) {\n const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0);\n v.push(0);\n if (v[0] !== 10) return undefined;\n switch (v[1]) {\n case 5: return 'Leopard';\n case 6: return 'Snow Leopard';\n case 7: return 'Lion';\n case 8: return 'Mountain Lion';\n case 9: return 'Mavericks';\n case 10: return 'Yosemite';\n case 11: return 'El Capitan';\n case 12: return 'Sierra';\n case 13: return 'High Sierra';\n case 14: return 'Mojave';\n case 15: return 'Catalina';\n default: return undefined;\n }\n }\n\n /**\n * Get Android version name\n * 1.5 - Cupcake\n * 1.6 - Donut\n * 2.0 - Eclair\n * 2.1 - Eclair\n * 2.2 - Froyo\n * 2.x - Gingerbread\n * 3.x - Honeycomb\n * 4.0 - Ice Cream Sandwich\n * 4.1 - Jelly Bean\n * 4.4 - KitKat\n * 5.x - Lollipop\n * 6.x - Marshmallow\n * 7.x - Nougat\n * 8.x - Oreo\n * 9.x - Pie\n *\n * @example\n * getAndroidVersionName(\"7.0\") // 'Nougat'\n *\n * @param {string} version\n * @return {string} versionName\n */\n static getAndroidVersionName(version) {\n const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0);\n v.push(0);\n if (v[0] === 1 && v[1] < 5) return undefined;\n if (v[0] === 1 && v[1] < 6) return 'Cupcake';\n if (v[0] === 1 && v[1] >= 6) return 'Donut';\n if (v[0] === 2 && v[1] < 2) return 'Eclair';\n if (v[0] === 2 && v[1] === 2) return 'Froyo';\n if (v[0] === 2 && v[1] > 2) return 'Gingerbread';\n if (v[0] === 3) return 'Honeycomb';\n if (v[0] === 4 && v[1] < 1) return 'Ice Cream Sandwich';\n if (v[0] === 4 && v[1] < 4) return 'Jelly Bean';\n if (v[0] === 4 && v[1] >= 4) return 'KitKat';\n if (v[0] === 5) return 'Lollipop';\n if (v[0] === 6) return 'Marshmallow';\n if (v[0] === 7) return 'Nougat';\n if (v[0] === 8) return 'Oreo';\n if (v[0] === 9) return 'Pie';\n return undefined;\n }\n\n /**\n * Get version precisions count\n *\n * @example\n * getVersionPrecision(\"1.10.3\") // 3\n *\n * @param {string} version\n * @return {number}\n */\n static getVersionPrecision(version) {\n return version.split('.').length;\n }\n\n /**\n * Calculate browser version weight\n *\n * @example\n * compareVersions('1.10.2.1', '1.8.2.1.90') // 1\n * compareVersions('1.010.2.1', '1.09.2.1.90'); // 1\n * compareVersions('1.10.2.1', '1.10.2.1'); // 0\n * compareVersions('1.10.2.1', '1.0800.2'); // -1\n * compareVersions('1.10.2.1', '1.10', true); // 0\n *\n * @param {String} versionA versions versions to compare\n * @param {String} versionB versions versions to compare\n * @param {boolean} [isLoose] enable loose comparison\n * @return {Number} comparison result: -1 when versionA is lower,\n * 1 when versionA is bigger, 0 when both equal\n */\n /* eslint consistent-return: 1 */\n static compareVersions(versionA, versionB, isLoose = false) {\n // 1) get common precision for both versions, for example for \"10.0\" and \"9\" it should be 2\n const versionAPrecision = Utils.getVersionPrecision(versionA);\n const versionBPrecision = Utils.getVersionPrecision(versionB);\n\n let precision = Math.max(versionAPrecision, versionBPrecision);\n let lastPrecision = 0;\n\n const chunks = Utils.map([versionA, versionB], (version) => {\n const delta = precision - Utils.getVersionPrecision(version);\n\n // 2) \"9\" -> \"9.0\" (for precision = 2)\n const _version = version + new Array(delta + 1).join('.0');\n\n // 3) \"9.0\" -> [\"000000000\"\", \"000000009\"]\n return Utils.map(_version.split('.'), chunk => new Array(20 - chunk.length).join('0') + chunk).reverse();\n });\n\n // adjust precision for loose comparison\n if (isLoose) {\n lastPrecision = precision - Math.min(versionAPrecision, versionBPrecision);\n }\n\n // iterate in reverse order by reversed chunks array\n precision -= 1;\n while (precision >= lastPrecision) {\n // 4) compare: \"000000009\" > \"000000010\" = false (but \"9\" > \"10\" = true)\n if (chunks[0][precision] > chunks[1][precision]) {\n return 1;\n }\n\n if (chunks[0][precision] === chunks[1][precision]) {\n if (precision === lastPrecision) {\n // all version chunks are same\n return 0;\n }\n\n precision -= 1;\n } else if (chunks[0][precision] < chunks[1][precision]) {\n return -1;\n }\n }\n\n return undefined;\n }\n\n /**\n * Array::map polyfill\n *\n * @param {Array} arr\n * @param {Function} iterator\n * @return {Array}\n */\n static map(arr, iterator) {\n const result = [];\n let i;\n if (Array.prototype.map) {\n return Array.prototype.map.call(arr, iterator);\n }\n for (i = 0; i < arr.length; i += 1) {\n result.push(iterator(arr[i]));\n }\n return result;\n }\n\n /**\n * Array::find polyfill\n *\n * @param {Array} arr\n * @param {Function} predicate\n * @return {Array}\n */\n static find(arr, predicate) {\n let i;\n let l;\n if (Array.prototype.find) {\n return Array.prototype.find.call(arr, predicate);\n }\n for (i = 0, l = arr.length; i < l; i += 1) {\n const value = arr[i];\n if (predicate(value, i)) {\n return value;\n }\n }\n return undefined;\n }\n\n /**\n * Object::assign polyfill\n *\n * @param {Object} obj\n * @param {Object} ...objs\n * @return {Object}\n */\n static assign(obj, ...assigners) {\n const result = obj;\n let i;\n let l;\n if (Object.assign) {\n return Object.assign(obj, ...assigners);\n }\n for (i = 0, l = assigners.length; i < l; i += 1) {\n const assigner = assigners[i];\n if (typeof assigner === 'object' && assigner !== null) {\n const keys = Object.keys(assigner);\n keys.forEach((key) => {\n result[key] = assigner[key];\n });\n }\n }\n return obj;\n }\n\n /**\n * Get short version/alias for a browser name\n *\n * @example\n * getBrowserAlias('Microsoft Edge') // edge\n *\n * @param {string} browserName\n * @return {string}\n */\n static getBrowserAlias(browserName) {\n return BROWSER_ALIASES_MAP[browserName];\n }\n\n /**\n * Get short version/alias for a browser name\n *\n * @example\n * getBrowserAlias('edge') // Microsoft Edge\n *\n * @param {string} browserAlias\n * @return {string}\n */\n static getBrowserTypeByAlias(browserAlias) {\n return BROWSER_MAP[browserAlias] || '';\n }\n}\n","/**\n * Browsers' descriptors\n *\n * The idea of descriptors is simple. You should know about them two simple things:\n * 1. Every descriptor has a method or property called `test` and a `describe` method.\n * 2. Order of descriptors is important.\n *\n * More details:\n * 1. Method or property `test` serves as a way to detect whether the UA string\n * matches some certain browser or not. The `describe` method helps to make a result\n * object with params that show some browser-specific things: name, version, etc.\n * 2. Order of descriptors is important because a Parser goes through them one by one\n * in course. For example, if you insert Chrome's descriptor as the first one,\n * more then a half of browsers will be described as Chrome, because they will pass\n * the Chrome descriptor's test.\n *\n * Descriptor's `test` could be a property with an array of RegExps, where every RegExp\n * will be applied to a UA string to test it whether it matches or not.\n * If a descriptor has two or more regexps in the `test` array it tests them one by one\n * with a logical sum operation. Parser stops if it has found any RegExp that matches the UA.\n *\n * Or `test` could be a method. In that case it gets a Parser instance and should\n * return true/false to get the Parser know if this browser descriptor matches the UA or not.\n */\n\nimport Utils from './utils.js';\n\nconst commonVersionIdentifier = /version\\/(\\d+(\\.?_?\\d+)+)/i;\n\nconst browsersList = [\n /* Googlebot */\n {\n test: [/googlebot/i],\n describe(ua) {\n const browser = {\n name: 'Googlebot',\n };\n const version = Utils.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Opera < 13.0 */\n {\n test: [/opera/i],\n describe(ua) {\n const browser = {\n name: 'Opera',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Opera > 13.0 */\n {\n test: [/opr\\/|opios/i],\n describe(ua) {\n const browser = {\n name: 'Opera',\n };\n const version = Utils.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/SamsungBrowser/i],\n describe(ua) {\n const browser = {\n name: 'Samsung Internet for Android',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/Whale/i],\n describe(ua) {\n const browser = {\n name: 'NAVER Whale Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/MZBrowser/i],\n describe(ua) {\n const browser = {\n name: 'MZ Browser',\n };\n const version = Utils.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/focus/i],\n describe(ua) {\n const browser = {\n name: 'Focus',\n };\n const version = Utils.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/swing/i],\n describe(ua) {\n const browser = {\n name: 'Swing',\n };\n const version = Utils.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/coast/i],\n describe(ua) {\n const browser = {\n name: 'Opera Coast',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/opt\\/\\d+(?:.?_?\\d+)+/i],\n describe(ua) {\n const browser = {\n name: 'Opera Touch',\n };\n const version = Utils.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/yabrowser/i],\n describe(ua) {\n const browser = {\n name: 'Yandex Browser',\n };\n const version = Utils.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/ucbrowser/i],\n describe(ua) {\n const browser = {\n name: 'UC Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/Maxthon|mxios/i],\n describe(ua) {\n const browser = {\n name: 'Maxthon',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/epiphany/i],\n describe(ua) {\n const browser = {\n name: 'Epiphany',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/puffin/i],\n describe(ua) {\n const browser = {\n name: 'Puffin',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/sleipnir/i],\n describe(ua) {\n const browser = {\n name: 'Sleipnir',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/k-meleon/i],\n describe(ua) {\n const browser = {\n name: 'K-Meleon',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/micromessenger/i],\n describe(ua) {\n const browser = {\n name: 'WeChat',\n };\n const version = Utils.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/qqbrowser/i],\n describe(ua) {\n const browser = {\n name: (/qqbrowserlite/i).test(ua) ? 'QQ Browser Lite' : 'QQ Browser',\n };\n const version = Utils.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/msie|trident/i],\n describe(ua) {\n const browser = {\n name: 'Internet Explorer',\n };\n const version = Utils.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/\\sedg\\//i],\n describe(ua) {\n const browser = {\n name: 'Microsoft Edge',\n };\n\n const version = Utils.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/edg([ea]|ios)/i],\n describe(ua) {\n const browser = {\n name: 'Microsoft Edge',\n };\n\n const version = Utils.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/vivaldi/i],\n describe(ua) {\n const browser = {\n name: 'Vivaldi',\n };\n const version = Utils.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/seamonkey/i],\n describe(ua) {\n const browser = {\n name: 'SeaMonkey',\n };\n const version = Utils.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/sailfish/i],\n describe(ua) {\n const browser = {\n name: 'Sailfish',\n };\n\n const version = Utils.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/silk/i],\n describe(ua) {\n const browser = {\n name: 'Amazon Silk',\n };\n const version = Utils.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/phantom/i],\n describe(ua) {\n const browser = {\n name: 'PhantomJS',\n };\n const version = Utils.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/slimerjs/i],\n describe(ua) {\n const browser = {\n name: 'SlimerJS',\n };\n const version = Utils.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n describe(ua) {\n const browser = {\n name: 'BlackBerry',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/(web|hpw)[o0]s/i],\n describe(ua) {\n const browser = {\n name: 'WebOS Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/bada/i],\n describe(ua) {\n const browser = {\n name: 'Bada',\n };\n const version = Utils.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/tizen/i],\n describe(ua) {\n const browser = {\n name: 'Tizen',\n };\n const version = Utils.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/qupzilla/i],\n describe(ua) {\n const browser = {\n name: 'QupZilla',\n };\n const version = Utils.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/firefox|iceweasel|fxios/i],\n describe(ua) {\n const browser = {\n name: 'Firefox',\n };\n const version = Utils.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/electron/i],\n describe(ua) {\n const browser = {\n name: 'Electron',\n };\n const version = Utils.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/MiuiBrowser/i],\n describe(ua) {\n const browser = {\n name: 'Miui',\n };\n const version = Utils.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/chromium/i],\n describe(ua) {\n const browser = {\n name: 'Chromium',\n };\n const version = Utils.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/chrome|crios|crmo/i],\n describe(ua) {\n const browser = {\n name: 'Chrome',\n };\n const version = Utils.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/GSA/i],\n describe(ua) {\n const browser = {\n name: 'Google Search',\n };\n const version = Utils.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Android Browser */\n {\n test(parser) {\n const notLikeAndroid = !parser.test(/like android/i);\n const butAndroid = parser.test(/android/i);\n return notLikeAndroid && butAndroid;\n },\n describe(ua) {\n const browser = {\n name: 'Android Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* PlayStation 4 */\n {\n test: [/playstation 4/i],\n describe(ua) {\n const browser = {\n name: 'PlayStation 4',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Safari */\n {\n test: [/safari|applewebkit/i],\n describe(ua) {\n const browser = {\n name: 'Safari',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Something else */\n {\n test: [/.*/i],\n describe(ua) {\n /* Here we try to make sure that there are explicit details about the device\n * in order to decide what regexp exactly we want to apply\n * (as there is a specific decision based on that conclusion)\n */\n const regexpWithoutDeviceSpec = /^(.*)\\/(.*) /;\n const regexpWithDeviceSpec = /^(.*)\\/(.*)[ \\t]\\((.*)/;\n const hasDeviceSpec = ua.search('\\\\(') !== -1;\n const regexp = hasDeviceSpec ? regexpWithDeviceSpec : regexpWithoutDeviceSpec;\n return {\n name: Utils.getFirstMatch(regexp, ua),\n version: Utils.getSecondMatch(regexp, ua),\n };\n },\n },\n];\n\nexport default browsersList;\n","import Utils from './utils.js';\nimport { OS_MAP } from './constants.js';\n\nexport default [\n /* Roku */\n {\n test: [/Roku\\/DVP/],\n describe(ua) {\n const version = Utils.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i, ua);\n return {\n name: OS_MAP.Roku,\n version,\n };\n },\n },\n\n /* Windows Phone */\n {\n test: [/windows phone/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i, ua);\n return {\n name: OS_MAP.WindowsPhone,\n version,\n };\n },\n },\n\n /* Windows */\n {\n test: [/windows /i],\n describe(ua) {\n const version = Utils.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i, ua);\n const versionName = Utils.getWindowsVersionName(version);\n\n return {\n name: OS_MAP.Windows,\n version,\n versionName,\n };\n },\n },\n\n /* Firefox on iPad */\n {\n test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n describe(ua) {\n const result = {\n name: OS_MAP.iOS,\n };\n const version = Utils.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/, ua);\n if (version) {\n result.version = version;\n }\n return result;\n },\n },\n\n /* macOS */\n {\n test: [/macintosh/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i, ua).replace(/[_\\s]/g, '.');\n const versionName = Utils.getMacOSVersionName(version);\n\n const os = {\n name: OS_MAP.MacOS,\n version,\n };\n if (versionName) {\n os.versionName = versionName;\n }\n return os;\n },\n },\n\n /* iOS */\n {\n test: [/(ipod|iphone|ipad)/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i, ua).replace(/[_\\s]/g, '.');\n\n return {\n name: OS_MAP.iOS,\n version,\n };\n },\n },\n\n /* Android */\n {\n test(parser) {\n const notLikeAndroid = !parser.test(/like android/i);\n const butAndroid = parser.test(/android/i);\n return notLikeAndroid && butAndroid;\n },\n describe(ua) {\n const version = Utils.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i, ua);\n const versionName = Utils.getAndroidVersionName(version);\n const os = {\n name: OS_MAP.Android,\n version,\n };\n if (versionName) {\n os.versionName = versionName;\n }\n return os;\n },\n },\n\n /* WebOS */\n {\n test: [/(web|hpw)[o0]s/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i, ua);\n const os = {\n name: OS_MAP.WebOS,\n };\n\n if (version && version.length) {\n os.version = version;\n }\n return os;\n },\n },\n\n /* BlackBerry */\n {\n test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i, ua)\n || Utils.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i, ua)\n || Utils.getFirstMatch(/\\bbb(\\d+)/i, ua);\n\n return {\n name: OS_MAP.BlackBerry,\n version,\n };\n },\n },\n\n /* Bada */\n {\n test: [/bada/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i, ua);\n\n return {\n name: OS_MAP.Bada,\n version,\n };\n },\n },\n\n /* Tizen */\n {\n test: [/tizen/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i, ua);\n\n return {\n name: OS_MAP.Tizen,\n version,\n };\n },\n },\n\n /* Linux */\n {\n test: [/linux/i],\n describe() {\n return {\n name: OS_MAP.Linux,\n };\n },\n },\n\n /* Chrome OS */\n {\n test: [/CrOS/],\n describe() {\n return {\n name: OS_MAP.ChromeOS,\n };\n },\n },\n\n /* Playstation 4 */\n {\n test: [/PlayStation 4/],\n describe(ua) {\n const version = Utils.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i, ua);\n return {\n name: OS_MAP.PlayStation4,\n version,\n };\n },\n },\n];\n","import Utils from './utils.js';\nimport { PLATFORMS_MAP } from './constants.js';\n\n/*\n * Tablets go first since usually they have more specific\n * signs to detect.\n */\n\nexport default [\n /* Googlebot */\n {\n test: [/googlebot/i],\n describe() {\n return {\n type: 'bot',\n vendor: 'Google',\n };\n },\n },\n\n /* Huawei */\n {\n test: [/huawei/i],\n describe(ua) {\n const model = Utils.getFirstMatch(/(can-l01)/i, ua) && 'Nova';\n const platform = {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Huawei',\n };\n if (model) {\n platform.model = model;\n }\n return platform;\n },\n },\n\n /* Nexus Tablet */\n {\n test: [/nexus\\s*(?:7|8|9|10).*/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Nexus',\n };\n },\n },\n\n /* iPad */\n {\n test: [/ipad/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Apple',\n model: 'iPad',\n };\n },\n },\n\n /* Firefox on iPad */\n {\n test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Apple',\n model: 'iPad',\n };\n },\n },\n\n /* Amazon Kindle Fire */\n {\n test: [/kftt build/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Amazon',\n model: 'Kindle Fire HD 7',\n };\n },\n },\n\n /* Another Amazon Tablet with Silk */\n {\n test: [/silk/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Amazon',\n };\n },\n },\n\n /* Tablet */\n {\n test: [/tablet(?! pc)/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n };\n },\n },\n\n /* iPod/iPhone */\n {\n test(parser) {\n const iDevice = parser.test(/ipod|iphone/i);\n const likeIDevice = parser.test(/like (ipod|iphone)/i);\n return iDevice && !likeIDevice;\n },\n describe(ua) {\n const model = Utils.getFirstMatch(/(ipod|iphone)/i, ua);\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Apple',\n model,\n };\n },\n },\n\n /* Nexus Mobile */\n {\n test: [/nexus\\s*[0-6].*/i, /galaxy nexus/i],\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Nexus',\n };\n },\n },\n\n /* Mobile */\n {\n test: [/[^-]mobi/i],\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* BlackBerry */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'blackberry';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'BlackBerry',\n };\n },\n },\n\n /* Bada */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'bada';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* Windows Phone */\n {\n test(parser) {\n return parser.getBrowserName() === 'windows phone';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Microsoft',\n };\n },\n },\n\n /* Android Tablet */\n {\n test(parser) {\n const osMajorVersion = Number(String(parser.getOSVersion()).split('.')[0]);\n return parser.getOSName(true) === 'android' && (osMajorVersion >= 3);\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n };\n },\n },\n\n /* Android Mobile */\n {\n test(parser) {\n return parser.getOSName(true) === 'android';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* desktop */\n {\n test(parser) {\n return parser.getOSName(true) === 'macos';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n vendor: 'Apple',\n };\n },\n },\n\n /* Windows */\n {\n test(parser) {\n return parser.getOSName(true) === 'windows';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n };\n },\n },\n\n /* Linux */\n {\n test(parser) {\n return parser.getOSName(true) === 'linux';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n };\n },\n },\n\n /* PlayStation 4 */\n {\n test(parser) {\n return parser.getOSName(true) === 'playstation 4';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tv,\n };\n },\n },\n\n /* Roku */\n {\n test(parser) {\n return parser.getOSName(true) === 'roku';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tv,\n };\n },\n },\n];\n","import Utils from './utils.js';\nimport { ENGINE_MAP } from './constants.js';\n\n/*\n * More specific goes first\n */\nexport default [\n /* EdgeHTML */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'microsoft edge';\n },\n describe(ua) {\n const isBlinkBased = /\\sedg\\//i.test(ua);\n\n // return blink if it's blink-based one\n if (isBlinkBased) {\n return {\n name: ENGINE_MAP.Blink,\n };\n }\n\n // otherwise match the version and return EdgeHTML\n const version = Utils.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n return {\n name: ENGINE_MAP.EdgeHTML,\n version,\n };\n },\n },\n\n /* Trident */\n {\n test: [/trident/i],\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Trident,\n };\n\n const version = Utils.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Presto */\n {\n test(parser) {\n return parser.test(/presto/i);\n },\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Presto,\n };\n\n const version = Utils.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Gecko */\n {\n test(parser) {\n const isGecko = parser.test(/gecko/i);\n const likeGecko = parser.test(/like gecko/i);\n return isGecko && !likeGecko;\n },\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Gecko,\n };\n\n const version = Utils.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Blink */\n {\n test: [/(apple)?webkit\\/537\\.36/i],\n describe() {\n return {\n name: ENGINE_MAP.Blink,\n };\n },\n },\n\n /* WebKit */\n {\n test: [/(apple)?webkit/i],\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.WebKit,\n };\n\n const version = Utils.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n];\n","import browserParsersList from './parser-browsers.js';\nimport osParsersList from './parser-os.js';\nimport platformParsersList from './parser-platforms.js';\nimport enginesParsersList from './parser-engines.js';\nimport Utils from './utils.js';\n\n/**\n * The main class that arranges the whole parsing process.\n */\nclass Parser {\n /**\n * Create instance of Parser\n *\n * @param {String} UA User-Agent string\n * @param {Boolean} [skipParsing=false] parser can skip parsing in purpose of performance\n * improvements if you need to make a more particular parsing\n * like {@link Parser#parseBrowser} or {@link Parser#parsePlatform}\n *\n * @throw {Error} in case of empty UA String\n *\n * @constructor\n */\n constructor(UA, skipParsing = false) {\n if (UA === void (0) || UA === null || UA === '') {\n throw new Error(\"UserAgent parameter can't be empty\");\n }\n\n this._ua = UA;\n\n /**\n * @typedef ParsedResult\n * @property {Object} browser\n * @property {String|undefined} [browser.name]\n * Browser name, like `\"Chrome\"` or `\"Internet Explorer\"`\n * @property {String|undefined} [browser.version] Browser version as a String `\"12.01.45334.10\"`\n * @property {Object} os\n * @property {String|undefined} [os.name] OS name, like `\"Windows\"` or `\"macOS\"`\n * @property {String|undefined} [os.version] OS version, like `\"NT 5.1\"` or `\"10.11.1\"`\n * @property {String|undefined} [os.versionName] OS name, like `\"XP\"` or `\"High Sierra\"`\n * @property {Object} platform\n * @property {String|undefined} [platform.type]\n * platform type, can be either `\"desktop\"`, `\"tablet\"` or `\"mobile\"`\n * @property {String|undefined} [platform.vendor] Vendor of the device,\n * like `\"Apple\"` or `\"Samsung\"`\n * @property {String|undefined} [platform.model] Device model,\n * like `\"iPhone\"` or `\"Kindle Fire HD 7\"`\n * @property {Object} engine\n * @property {String|undefined} [engine.name]\n * Can be any of this: `WebKit`, `Blink`, `Gecko`, `Trident`, `Presto`, `EdgeHTML`\n * @property {String|undefined} [engine.version] String version of the engine\n */\n this.parsedResult = {};\n\n if (skipParsing !== true) {\n this.parse();\n }\n }\n\n /**\n * Get UserAgent string of current Parser instance\n * @return {String} User-Agent String of the current object\n *\n * @public\n */\n getUA() {\n return this._ua;\n }\n\n /**\n * Test a UA string for a regexp\n * @param {RegExp} regex\n * @return {Boolean}\n */\n test(regex) {\n return regex.test(this._ua);\n }\n\n /**\n * Get parsed browser object\n * @return {Object}\n */\n parseBrowser() {\n this.parsedResult.browser = {};\n\n const browserDescriptor = Utils.find(browserParsersList, (_browser) => {\n if (typeof _browser.test === 'function') {\n return _browser.test(this);\n }\n\n if (_browser.test instanceof Array) {\n return _browser.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (browserDescriptor) {\n this.parsedResult.browser = browserDescriptor.describe(this.getUA());\n }\n\n return this.parsedResult.browser;\n }\n\n /**\n * Get parsed browser object\n * @return {Object}\n *\n * @public\n */\n getBrowser() {\n if (this.parsedResult.browser) {\n return this.parsedResult.browser;\n }\n\n return this.parseBrowser();\n }\n\n /**\n * Get browser's name\n * @return {String} Browser's name or an empty string\n *\n * @public\n */\n getBrowserName(toLowerCase) {\n if (toLowerCase) {\n return String(this.getBrowser().name).toLowerCase() || '';\n }\n return this.getBrowser().name || '';\n }\n\n\n /**\n * Get browser's version\n * @return {String} version of browser\n *\n * @public\n */\n getBrowserVersion() {\n return this.getBrowser().version;\n }\n\n /**\n * Get OS\n * @return {Object}\n *\n * @example\n * this.getOS();\n * {\n * name: 'macOS',\n * version: '10.11.12'\n * }\n */\n getOS() {\n if (this.parsedResult.os) {\n return this.parsedResult.os;\n }\n\n return this.parseOS();\n }\n\n /**\n * Parse OS and save it to this.parsedResult.os\n * @return {*|{}}\n */\n parseOS() {\n this.parsedResult.os = {};\n\n const os = Utils.find(osParsersList, (_os) => {\n if (typeof _os.test === 'function') {\n return _os.test(this);\n }\n\n if (_os.test instanceof Array) {\n return _os.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (os) {\n this.parsedResult.os = os.describe(this.getUA());\n }\n\n return this.parsedResult.os;\n }\n\n /**\n * Get OS name\n * @param {Boolean} [toLowerCase] return lower-cased value\n * @return {String} name of the OS — macOS, Windows, Linux, etc.\n */\n getOSName(toLowerCase) {\n const { name } = this.getOS();\n\n if (toLowerCase) {\n return String(name).toLowerCase() || '';\n }\n\n return name || '';\n }\n\n /**\n * Get OS version\n * @return {String} full version with dots ('10.11.12', '5.6', etc)\n */\n getOSVersion() {\n return this.getOS().version;\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n getPlatform() {\n if (this.parsedResult.platform) {\n return this.parsedResult.platform;\n }\n\n return this.parsePlatform();\n }\n\n /**\n * Get platform name\n * @param {Boolean} [toLowerCase=false]\n * @return {*}\n */\n getPlatformType(toLowerCase = false) {\n const { type } = this.getPlatform();\n\n if (toLowerCase) {\n return String(type).toLowerCase() || '';\n }\n\n return type || '';\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n parsePlatform() {\n this.parsedResult.platform = {};\n\n const platform = Utils.find(platformParsersList, (_platform) => {\n if (typeof _platform.test === 'function') {\n return _platform.test(this);\n }\n\n if (_platform.test instanceof Array) {\n return _platform.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (platform) {\n this.parsedResult.platform = platform.describe(this.getUA());\n }\n\n return this.parsedResult.platform;\n }\n\n /**\n * Get parsed engine\n * @return {{}}\n */\n getEngine() {\n if (this.parsedResult.engine) {\n return this.parsedResult.engine;\n }\n\n return this.parseEngine();\n }\n\n /**\n * Get engines's name\n * @return {String} Engines's name or an empty string\n *\n * @public\n */\n getEngineName(toLowerCase) {\n if (toLowerCase) {\n return String(this.getEngine().name).toLowerCase() || '';\n }\n return this.getEngine().name || '';\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n parseEngine() {\n this.parsedResult.engine = {};\n\n const engine = Utils.find(enginesParsersList, (_engine) => {\n if (typeof _engine.test === 'function') {\n return _engine.test(this);\n }\n\n if (_engine.test instanceof Array) {\n return _engine.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (engine) {\n this.parsedResult.engine = engine.describe(this.getUA());\n }\n\n return this.parsedResult.engine;\n }\n\n /**\n * Parse full information about the browser\n * @returns {Parser}\n */\n parse() {\n this.parseBrowser();\n this.parseOS();\n this.parsePlatform();\n this.parseEngine();\n\n return this;\n }\n\n /**\n * Get parsed result\n * @return {ParsedResult}\n */\n getResult() {\n return Utils.assign({}, this.parsedResult);\n }\n\n /**\n * Check if parsed browser matches certain conditions\n *\n * @param {Object} checkTree It's one or two layered object,\n * which can include a platform or an OS on the first layer\n * and should have browsers specs on the bottom-laying layer\n *\n * @returns {Boolean|undefined} Whether the browser satisfies the set conditions or not.\n * Returns `undefined` when the browser is no described in the checkTree object.\n *\n * @example\n * const browser = Bowser.getParser(window.navigator.userAgent);\n * if (browser.satisfies({chrome: '>118.01.1322' }))\n * // or with os\n * if (browser.satisfies({windows: { chrome: '>118.01.1322' } }))\n * // or with platforms\n * if (browser.satisfies({desktop: { chrome: '>118.01.1322' } }))\n */\n satisfies(checkTree) {\n const platformsAndOSes = {};\n let platformsAndOSCounter = 0;\n const browsers = {};\n let browsersCounter = 0;\n\n const allDefinitions = Object.keys(checkTree);\n\n allDefinitions.forEach((key) => {\n const currentDefinition = checkTree[key];\n if (typeof currentDefinition === 'string') {\n browsers[key] = currentDefinition;\n browsersCounter += 1;\n } else if (typeof currentDefinition === 'object') {\n platformsAndOSes[key] = currentDefinition;\n platformsAndOSCounter += 1;\n }\n });\n\n if (platformsAndOSCounter > 0) {\n const platformsAndOSNames = Object.keys(platformsAndOSes);\n const OSMatchingDefinition = Utils.find(platformsAndOSNames, name => (this.isOS(name)));\n\n if (OSMatchingDefinition) {\n const osResult = this.satisfies(platformsAndOSes[OSMatchingDefinition]);\n\n if (osResult !== void 0) {\n return osResult;\n }\n }\n\n const platformMatchingDefinition = Utils.find(\n platformsAndOSNames,\n name => (this.isPlatform(name)),\n );\n if (platformMatchingDefinition) {\n const platformResult = this.satisfies(platformsAndOSes[platformMatchingDefinition]);\n\n if (platformResult !== void 0) {\n return platformResult;\n }\n }\n }\n\n if (browsersCounter > 0) {\n const browserNames = Object.keys(browsers);\n const matchingDefinition = Utils.find(browserNames, name => (this.isBrowser(name, true)));\n\n if (matchingDefinition !== void 0) {\n return this.compareVersion(browsers[matchingDefinition]);\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if the browser name equals the passed string\n * @param browserName The string to compare with the browser name\n * @param [includingAlias=false] The flag showing whether alias will be included into comparison\n * @returns {boolean}\n */\n isBrowser(browserName, includingAlias = false) {\n const defaultBrowserName = this.getBrowserName().toLowerCase();\n let browserNameLower = browserName.toLowerCase();\n const alias = Utils.getBrowserTypeByAlias(browserNameLower);\n\n if (includingAlias && alias) {\n browserNameLower = alias.toLowerCase();\n }\n return browserNameLower === defaultBrowserName;\n }\n\n compareVersion(version) {\n let expectedResults = [0];\n let comparableVersion = version;\n let isLoose = false;\n\n const currentBrowserVersion = this.getBrowserVersion();\n\n if (typeof currentBrowserVersion !== 'string') {\n return void 0;\n }\n\n if (version[0] === '>' || version[0] === '<') {\n comparableVersion = version.substr(1);\n if (version[1] === '=') {\n isLoose = true;\n comparableVersion = version.substr(2);\n } else {\n expectedResults = [];\n }\n if (version[0] === '>') {\n expectedResults.push(1);\n } else {\n expectedResults.push(-1);\n }\n } else if (version[0] === '=') {\n comparableVersion = version.substr(1);\n } else if (version[0] === '~') {\n isLoose = true;\n comparableVersion = version.substr(1);\n }\n\n return expectedResults.indexOf(\n Utils.compareVersions(currentBrowserVersion, comparableVersion, isLoose),\n ) > -1;\n }\n\n isOS(osName) {\n return this.getOSName(true) === String(osName).toLowerCase();\n }\n\n isPlatform(platformType) {\n return this.getPlatformType(true) === String(platformType).toLowerCase();\n }\n\n isEngine(engineName) {\n return this.getEngineName(true) === String(engineName).toLowerCase();\n }\n\n /**\n * Is anything? Check if the browser is called \"anything\",\n * the OS called \"anything\" or the platform called \"anything\"\n * @param {String} anything\n * @param [includingAlias=false] The flag showing whether alias will be included into comparison\n * @returns {Boolean}\n */\n is(anything, includingAlias = false) {\n return this.isBrowser(anything, includingAlias) || this.isOS(anything)\n || this.isPlatform(anything);\n }\n\n /**\n * Check if any of the given values satisfies this.is(anything)\n * @param {String[]} anythings\n * @returns {Boolean}\n */\n some(anythings = []) {\n return anythings.some(anything => this.is(anything));\n }\n}\n\nexport default Parser;\n","/*!\n * Bowser - a browser detector\n * https://github.com/lancedikson/bowser\n * MIT License | (c) Dustin Diaz 2012-2015\n * MIT License | (c) Denis Demchenko 2015-2019\n */\nimport Parser from './parser.js';\nimport {\n BROWSER_MAP,\n ENGINE_MAP,\n OS_MAP,\n PLATFORMS_MAP,\n} from './constants.js';\n\n/**\n * Bowser class.\n * Keep it simple as much as it can be.\n * It's supposed to work with collections of {@link Parser} instances\n * rather then solve one-instance problems.\n * All the one-instance stuff is located in Parser class.\n *\n * @class\n * @classdesc Bowser is a static object, that provides an API to the Parsers\n * @hideconstructor\n */\nclass Bowser {\n /**\n * Creates a {@link Parser} instance\n *\n * @param {String} UA UserAgent string\n * @param {Boolean} [skipParsing=false] Will make the Parser postpone parsing until you ask it\n * explicitly. Same as `skipParsing` for {@link Parser}.\n * @returns {Parser}\n * @throws {Error} when UA is not a String\n *\n * @example\n * const parser = Bowser.getParser(window.navigator.userAgent);\n * const result = parser.getResult();\n */\n static getParser(UA, skipParsing = false) {\n if (typeof UA !== 'string') {\n throw new Error('UserAgent should be a string');\n }\n return new Parser(UA, skipParsing);\n }\n\n /**\n * Creates a {@link Parser} instance and runs {@link Parser.getResult} immediately\n *\n * @param UA\n * @return {ParsedResult}\n *\n * @example\n * const result = Bowser.parse(window.navigator.userAgent);\n */\n static parse(UA) {\n return (new Parser(UA)).getResult();\n }\n\n static get BROWSER_MAP() {\n return BROWSER_MAP;\n }\n\n static get ENGINE_MAP() {\n return ENGINE_MAP;\n }\n\n static get OS_MAP() {\n return OS_MAP;\n }\n\n static get PLATFORMS_MAP() {\n return PLATFORMS_MAP;\n }\n}\n\nexport default Bowser;\n","export const SUCCESS = {\n 24: [\n \"Great work! You made it to the first milestone. We've started to model your voice. You will get an email when it's ready to use.\",\n \"24 Recordings! We've started to construct your voice, you should get an email in your inbox when it's ready.\",\n \"Our AI is now understanding how you speak. You will get an email when it's ready to use.\",\n ],\n 100: [\"1-0-0! Are you sure you're not a professional voice actor? You're racing through these sentences!\"],\n 200: [\"2-0-0! Are you sure you're not a professional voice actor? You're racing through these sentences!\"],\n 300: [\"Great work! We've started to model your voice. You will get an email when it's ready to use.\"],\n}\n\nexport const TRIAL_USER_SUCCESS = {\n 24: [\n \"Great work! We've started to model your voice. You will get an email when it's ready to use.\",\n \"24 Recordings! We've started to construct your voice, you should get an email in your inbox when it's ready.\",\n \"Our AI is now understanding how you speak. You will get an email when it's ready to use.\",\n ],\n}\n\nexport const UPGRADE_PROMPT = '

The free plan only supports training on 24 samples. To record more samples and train a more accurate voice upgrade your plan.'\nexport const BUILD_OR_RECORD_MORE_PROMPT = '

Would you like to build your voice now or do you want to record more samples?'\n\nexport const MAX_RECORDINGS_FOR_RAPID_VOICE = 3\nexport const MAX_RECORDINGS_FOR_TRIAL_USERS = 24\nexport const MAX_RECORDINGS_FOR_PAID_USERS = 300\n\n// if this threshold is reached, then the volume is considered bad by default\nexport const VOLUME_CLIPPING_THRESHOLD = -3\n\n// under this DBFS, the audio input channel is considered dead/flat\nexport const DEAD_AUDIO_INPUT_THRESHOLD = -500\n\n// volume is considered good if it is between these two levels\nexport const MAX_GOOD_VOLUME_THRESHOLD = -12\nexport const MIN_GOOD_VOLUME_THRESHOLD = -35\n\n// if the silence threshold is held for more than NUM_SILENT_SAMPLES_THRESHOLD,\n// the subsequent samples are cut before making calculations (until the silence threshold is surpassed again)\nexport const VOLUME_SILENCE_THRESHOLD = -35\n/* Sample rates are usually either 44100 or 48000. so for 250ms, we have ~12000 samples */\nexport const NUM_SILENT_SAMPLES_THRESHOLD = 12000\n\n// Live feedback is given on this many previous samples\nexport const NUM_LIVE_SAMPLES_TO_TEST = 8192\n\n//Return strings from the permissions API.\nexport const MIC_PERMISSIONS_PROMPT = 'prompt'\nexport const MIC_PERMISSIONS_GRANTED = 'granted'\nexport const MIC_PERMISSIONS_DENIED = 'denied'\n","import 'scheduler-polyfill'\n\nimport Bowser from 'bowser'\n\nimport { MIC_PERMISSIONS_DENIED, MIC_PERMISSIONS_GRANTED, MIC_PERMISSIONS_PROMPT } from '../components/Recorder/recordings'\n\nexport enum BrowserType {\n OPERA,\n FIREFOX,\n SAFARI,\n INTERNET_EXPLORER,\n EDGE,\n CHROME,\n // depreacted, do not use\n EDGE_CHROMIUM,\n BLINK,\n NOT_SUPPORTED,\n}\n\nexport type PermissionResponse = PermissionState | 'could-not-check'\n\nexport class BrowserUtils {\n public static isMobile(): boolean {\n const userAgent = navigator.userAgent || navigator.vendor || (window as any).opera\n const regex1 =\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i\n const regex2 =\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i\n\n return regex1.test(userAgent) || regex2.test(userAgent.substr(0, 4))\n }\n\n public static getBrowserName(): string {\n const userAgent = Bowser.getParser(window.navigator.userAgent)\n return userAgent.getBrowserName()\n }\n\n public static getBrowserVersion(): string {\n const userAgent = Bowser.getParser(window.navigator.userAgent)\n return userAgent.getBrowserVersion()\n }\n\n /**\n * Gets the name of the browser the user is on.\n * The order of the checks are from most popular browser to least popular for MICRO SECOND time savings. OH YEAH\n * @Return BrowserType The BrowserType enum corresponding the to the user's browser.\n */\n public static getBrowser(): BrowserType {\n const userAgent = Bowser.getParser(window.navigator.userAgent)\n\n const browserName = userAgent.getBrowserName()\n\n switch (browserName) {\n case 'Safari':\n return BrowserType.SAFARI\n case 'Firefox':\n return BrowserType.FIREFOX\n case 'Internet Explorer':\n return BrowserType.INTERNET_EXPLORER\n case 'Microsoft Edge':\n return BrowserType.EDGE\n case 'Chrome':\n case 'Chromium':\n return BrowserType.CHROME\n case 'Opera':\n return BrowserType.OPERA\n default:\n // Edge (chromium fork) detection\n // @ts-ignore\n if (!!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime) && navigator.userAgent.indexOf('Edg') != -1) {\n return BrowserType.EDGE_CHROMIUM\n }\n\n // Blink engine detection\n // prettier-ignore\n // @ts-ignore\n if ((((!!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime))) || (((!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0))) && !!window.CSS) {\n return BrowserType.BLINK\n }\n\n return BrowserType.NOT_SUPPORTED\n }\n }\n\n /**\n * Helper method to check microphone permissions using the experimental Permission API or the polyfill.\n * @param permissionsOnChange Callback function taking 1 parameter of type PermissionResponse. Will be called if\n * the microphone permissions change at any time with the status of the microphone permissions\n * @return Promise resolving to either PROMPTED, DENIED or GRANTED. Rejects if could not check the microphone\n * permissions using the permissions API.\n */\n public static checkMicrophonePermissions(permissionsOnChange?: (permissionResponse: PermissionResponse) => void, usePolyfillFallback = true) {\n return new Promise((resolve, reject) => {\n this.checkMicrophonePermissionsUsingPermissionsAPI(permissionsOnChange)\n .then((permissionResponse) => {\n resolve(permissionResponse)\n })\n .catch(() => {\n if (usePolyfillFallback) {\n this.checkMicrophonePermissionPolyFill()\n .then((permissionResponse) => {\n resolve(permissionResponse)\n })\n .catch((permissionResponse) => {\n reject(permissionResponse)\n })\n } else {\n reject('could-not-checkk')\n }\n })\n })\n }\n\n /**\n * Internal method to check microphone permissions using the experimental permissions API.\n * @param permissionsOnChange Callback function taking 1 parameter of type PermissionResponse. Will be called if\n * the microphone permissions change at any time with the status of the microphone permissions.\n * @return Promise resolving to either PROMPTED, DENIED or GRANTED. Rejects if could not check the microphone\n * permissions using the permissions API.\n */\n private static checkMicrophonePermissionsUsingPermissionsAPI(permissionsOnChange?: (permissionResponse: PermissionResponse) => void) {\n return new Promise((resolve, reject) => {\n if (navigator.permissions == undefined || this.getBrowser() == BrowserType.FIREFOX) {\n reject('could-not-check')\n }\n navigator.permissions\n .query({\n name: 'microphone' as PermissionName,\n })\n .then((permissionStatus) => {\n resolve(permissionStatus.state)\n\n // //Hook the permission status on change method\n permissionStatus.onchange = () => {\n if (permissionsOnChange) {\n if (permissionStatus.state === MIC_PERMISSIONS_DENIED) permissionsOnChange('denied')\n else if (permissionStatus.state === MIC_PERMISSIONS_GRANTED) permissionsOnChange('granted')\n else if (permissionStatus.state === MIC_PERMISSIONS_PROMPT) permissionsOnChange('prompt')\n }\n }\n })\n .catch(() => {\n reject('could-not-check')\n })\n })\n }\n\n /**\n * Polyfill to check microphone permissions for browsers not implementing the permissions API.\n * @return Promise resolving to either GRANTED or DENIED, rejects if permissions could not be checked.\n */\n private static checkMicrophonePermissionPolyFill() {\n return new Promise((resolve, reject) => {\n if (navigator.mediaDevices == undefined) {\n reject('could-not-check')\n return\n }\n navigator.mediaDevices\n .getUserMedia({ audio: true })\n .then(function () {\n resolve('granted')\n })\n .catch(function () {\n resolve('denied')\n })\n })\n }\n}\n\n// returns a promise that resolves after the JavaScript event loop\n// has processed any other events waiting in the queue, allowing other tasks to complete\nexport async function yieldToMain() {\n await scheduler?.yield?.()\n}\n\n/**\n * This function tests whether a given string is made up entirely of special characters,\n * and returns `true` if it is and `false` if it is not.\n *\n * Special characters are defined as any character that is not a letter, number, whitespace,\n * or emoji from any language or script.\n *\n * @param {string} string - The string to be tested.\n *\n * @returns {boolean} - `true` if the string is made up entirely of special characters,\n * `false` otherwise.\n *\n * The regular expression used in this function, /[\\p{L}\\p{N}\\p{Z}\\p{Emoji}]/gu, is broken\n * down as follows:\n *\n * - \\p{L} matches any kind of letter from any language.\n * - \\p{N} matches any kind of numeric character in any script.\n * - \\p{Z} matches any kind of whitespace or invisible separator.\n * - \\p{Emoji} matches any emoji character.\n *\n * The enclosing brackets [] create a character set, matching any character that is in the set.\n *\n * The 'g' flag enables global matching, so the test doesn't stop at the first match.\n * The 'u' flag enables full Unicode matching, which allows the \\p{} Unicode property escapes\n * to match characters from any language or script.\n *\n * The test() method tests the string against the regular expression and returns `true` if\n * the string contains at least one matching character and `false` if it doesn't.\n *\n * The `!` operator negates the result of the test() method, so the function returns `true` if\n * test() returns `false` and vice versa.\n *\n */\nexport function containsOnlySpecialChar(text: string): boolean {\n const regex = /[\\p{L}\\p{N}\\p{Z}\\p{Emoji}]/gu\n return !regex.test(text)\n}\n"],"names":["t","i","r","s","e","n","l","o","BROWSER_ALIASES_MAP","BROWSER_MAP","PLATFORMS_MAP","OS_MAP","ENGINE_MAP","Utils","regexp","ua","match","_const","version","v","versionA","versionB","isLoose","versionAPrecision","versionBPrecision","precision","lastPrecision","chunks","delta","_version","chunk","arr","iterator","result","predicate","value","obj","assigners","assigner","key","browserName","browserAlias","commonVersionIdentifier","browsersList","browser","parser","notLikeAndroid","butAndroid","regexpWithoutDeviceSpec","regexpWithDeviceSpec","osParsersList","versionName","os","platformParsersList","model","platform","iDevice","likeIDevice","osMajorVersion","enginesParsersList","engine","isGecko","likeGecko","Parser","UA","skipParsing","regex","browserDescriptor","browserParsersList","_browser","condition","toLowerCase","_os","name","type","_platform","_engine","checkTree","platformsAndOSes","platformsAndOSCounter","browsers","browsersCounter","currentDefinition","platformsAndOSNames","OSMatchingDefinition","osResult","platformMatchingDefinition","platformResult","browserNames","matchingDefinition","includingAlias","defaultBrowserName","browserNameLower","alias","expectedResults","comparableVersion","currentBrowserVersion","osName","platformType","engineName","anything","anythings","Bowser","SUCCESS","TRIAL_USER_SUCCESS","UPGRADE_PROMPT","BUILD_OR_RECORD_MORE_PROMPT","MAX_RECORDINGS_FOR_RAPID_VOICE","MAX_RECORDINGS_FOR_TRIAL_USERS","MAX_RECORDINGS_FOR_PAID_USERS","VOLUME_CLIPPING_THRESHOLD","DEAD_AUDIO_INPUT_THRESHOLD","MAX_GOOD_VOLUME_THRESHOLD","MIN_GOOD_VOLUME_THRESHOLD","VOLUME_SILENCE_THRESHOLD","NUM_SILENT_SAMPLES_THRESHOLD","NUM_LIVE_SAMPLES_TO_TEST","MIC_PERMISSIONS_PROMPT","MIC_PERMISSIONS_GRANTED","MIC_PERMISSIONS_DENIED","BrowserType","BrowserType2","BrowserUtils","userAgent","regex1","regex2","permissionsOnChange","usePolyfillFallback","resolve","reject","permissionResponse","permissionStatus","yieldToMain","_a","containsOnlySpecialChar","text"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8]}