@webex/web-client-media-engine 3.6.0 → 3.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -10410,321 +10410,6 @@ class TypedEvent {
10410
10410
  }
10411
10411
  }
10412
10412
 
10413
- var OfferAnswerType;
10414
- (function (OfferAnswerType) {
10415
- OfferAnswerType[OfferAnswerType["LocalOnly"] = 0] = "LocalOnly";
10416
- OfferAnswerType[OfferAnswerType["Remote"] = 1] = "Remote";
10417
- })(OfferAnswerType || (OfferAnswerType = {}));
10418
- class SendOnlyTransceiver extends Transceiver {
10419
- constructor(rtcRtpTransceiver, mid, csi, munger, mediaType) {
10420
- super(rtcRtpTransceiver, mid);
10421
- this.rtxEnabled = false;
10422
- this.streamMuteStateChange = new TypedEvent();
10423
- this.streamPublishStateChange = new TypedEvent();
10424
- this.negotiationNeeded = new TypedEvent();
10425
- this.namedMediaGroupsChange = new TypedEvent();
10426
- this.requested = false;
10427
- this.requestedIdEncodingParamsMap = new Map();
10428
- this.csi = csi;
10429
- this.direction = 'sendrecv';
10430
- this.handleTrackChange = this.handleTrackChange.bind(this);
10431
- this.handleStreamConstraintsChange = this.handleStreamConstraintsChange.bind(this);
10432
- this.handleStreamMuteStateChange = this.handleStreamMuteStateChange.bind(this);
10433
- this.munger = munger;
10434
- this.mediaType = mediaType;
10435
- }
10436
- handleTrackChange() {
10437
- var _a;
10438
- return __awaiter(this, void 0, void 0, function* () {
10439
- if (this.requested) {
10440
- yield this.sender.replaceTrack(((_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.outputStream.getTracks()[0]) || null);
10441
- }
10442
- });
10443
- }
10444
- handleStreamConstraintsChange() {
10445
- return __awaiter(this, void 0, void 0, function* () {
10446
- yield this.updateSendParameters(this.requestedIdEncodingParamsMap);
10447
- });
10448
- }
10449
- handleStreamMuteStateChange() {
10450
- this.streamMuteStateChange.emit();
10451
- }
10452
- replaceTransceiver(newRtcRtpTransceiver) {
10453
- const _super = Object.create(null, {
10454
- replaceTransceiver: { get: () => super.replaceTransceiver }
10455
- });
10456
- var _a;
10457
- return __awaiter(this, void 0, void 0, function* () {
10458
- _super.replaceTransceiver.call(this, newRtcRtpTransceiver);
10459
- newRtcRtpTransceiver.direction = this.direction;
10460
- if (this.requested) {
10461
- yield this.sender.replaceTrack(((_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.outputStream.getTracks()[0]) || null);
10462
- }
10463
- });
10464
- }
10465
- replacePublishedStream(newStream) {
10466
- return __awaiter(this, void 0, void 0, function* () {
10467
- const oldStream = this.publishedStream;
10468
- oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(exports.LocalStreamEventNames.OutputTrackChange, this.handleTrackChange);
10469
- oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(exports.LocalStreamEventNames.ConstraintsChange, this.handleStreamConstraintsChange);
10470
- oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(exports.StreamEventNames.MuteStateChange, this.handleStreamMuteStateChange);
10471
- if (this.requested) {
10472
- yield this.sender.replaceTrack((newStream === null || newStream === void 0 ? void 0 : newStream.outputStream.getTracks()[0]) || null);
10473
- }
10474
- this.publishedStream = newStream;
10475
- newStream === null || newStream === void 0 ? void 0 : newStream.on(exports.LocalStreamEventNames.OutputTrackChange, this.handleTrackChange);
10476
- newStream === null || newStream === void 0 ? void 0 : newStream.on(exports.LocalStreamEventNames.ConstraintsChange, this.handleStreamConstraintsChange);
10477
- newStream === null || newStream === void 0 ? void 0 : newStream.on(exports.StreamEventNames.MuteStateChange, this.handleStreamMuteStateChange);
10478
- if ((!oldStream && newStream && !newStream.muted) ||
10479
- (oldStream && !newStream && !oldStream.muted)) {
10480
- this.streamPublishStateChange.emit();
10481
- }
10482
- else if ((oldStream === null || oldStream === void 0 ? void 0 : oldStream.muted) !== (newStream === null || newStream === void 0 ? void 0 : newStream.muted)) {
10483
- this.streamMuteStateChange.emit();
10484
- }
10485
- if (newStream) {
10486
- this.updateSendParameters(this.requestedIdEncodingParamsMap);
10487
- }
10488
- });
10489
- }
10490
- setStreamRequested(requested) {
10491
- var _a;
10492
- return __awaiter(this, void 0, void 0, function* () {
10493
- if (this.requested !== requested) {
10494
- this.requested = requested;
10495
- const newTrack = requested ? ((_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.outputStream.getTracks()[0]) || null : null;
10496
- yield this.sender.replaceTrack(newTrack);
10497
- }
10498
- });
10499
- }
10500
- setNamedMediaGroups(namedMediaGroups) {
10501
- if (this.mediaType !== exports.MediaType.AudioMain) {
10502
- throw new Error(`This interface does not allow media types other than AudioMain: ${this.mediaType}`);
10503
- }
10504
- this.namedMediaGroups = namedMediaGroups;
10505
- this.namedMediaGroupsChange.emit();
10506
- }
10507
- publishStream(stream) {
10508
- return this.replacePublishedStream(stream);
10509
- }
10510
- unpublishStream() {
10511
- return this.replacePublishedStream();
10512
- }
10513
- get active() {
10514
- return this._rtcRtpTransceiver.direction === 'sendrecv';
10515
- }
10516
- set active(enabled) {
10517
- this.direction = enabled ? 'sendrecv' : 'inactive';
10518
- this._rtcRtpTransceiver.direction = this.direction;
10519
- if (this._rtcRtpTransceiver.direction !== this._rtcRtpTransceiver.currentDirection) {
10520
- this.negotiationNeeded.emit(OfferAnswerType.Remote);
10521
- }
10522
- }
10523
- getStats() {
10524
- return this.sender.getStats();
10525
- }
10526
- updateSendParameters(requestedIdEncodingParamsMap) {
10527
- return __awaiter(this, void 0, void 0, function* () {
10528
- if (this.publishedStream) {
10529
- this.setStreamRequested(requestedIdEncodingParamsMap.size > 0);
10530
- const sendParameters = this.sender.getParameters();
10531
- sendParameters.encodings.forEach((encoding, index) => {
10532
- var _a, _b;
10533
- const encodingParams = requestedIdEncodingParamsMap.get(index);
10534
- encoding.active = !!encodingParams;
10535
- if (encodingParams) {
10536
- const { maxPayloadBitsPerSecond, maxFs, maxWidth, maxHeight } = encodingParams;
10537
- const scaleDownRatio = getScaleDownRatio((_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.getSettings().width, (_b = this.publishedStream) === null || _b === void 0 ? void 0 : _b.getSettings().height, maxFs, maxWidth, maxHeight);
10538
- if (maxPayloadBitsPerSecond !== undefined && maxPayloadBitsPerSecond >= 0) {
10539
- encoding.maxBitrate = maxPayloadBitsPerSecond;
10540
- }
10541
- if (scaleDownRatio !== undefined && scaleDownRatio >= 1.0) {
10542
- encoding.scaleResolutionDownBy = scaleDownRatio;
10543
- }
10544
- }
10545
- });
10546
- yield this.sender.setParameters(sendParameters);
10547
- }
10548
- this.requestedIdEncodingParamsMap = requestedIdEncodingParamsMap;
10549
- });
10550
- }
10551
- isSimulcastEnabled() {
10552
- const params = this.sender.getParameters();
10553
- return params.encodings.length > 1;
10554
- }
10555
- mungeLocalDescription(mediaDescription) {
10556
- this.munger.mungeLocalDescription(mediaDescription, this.isSimulcastEnabled(), this.rtxEnabled);
10557
- }
10558
- mungeLocalDescriptionForRemoteServer(mediaDescription) {
10559
- this.munger.mungeLocalDescriptionForRemoteServer(mediaDescription, getMediaContent(this.mediaType), this.csi);
10560
- }
10561
- mungeRemoteDescription(mediaDescription) {
10562
- this.munger.mungeRemoteDescription(mediaDescription);
10563
- }
10564
- get senderIds() {
10565
- return this.munger.getSenderIds();
10566
- }
10567
- get numActiveSimulcastLayers() {
10568
- var _a;
10569
- if (getMediaFamily(this.mediaType) === exports.MediaFamily.Video) {
10570
- return (_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.getNumActiveSimulcastLayers();
10571
- }
10572
- return this.publishedStream ? 0 : undefined;
10573
- }
10574
- getEncodingIndexForStreamId(id) {
10575
- return this.munger.getEncodingIndexForStreamId(id);
10576
- }
10577
- resetSdpMunger() {
10578
- this.munger.reset();
10579
- }
10580
- setCodecParameters(parameters) {
10581
- this.munger.setCodecParameters(parameters);
10582
- this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);
10583
- }
10584
- deleteCodecParameters(parameters) {
10585
- this.munger.deleteCodecParameters(parameters);
10586
- this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);
10587
- }
10588
- }
10589
-
10590
- class SendSlot {
10591
- constructor(sendTransceiver) {
10592
- this.sendTransceiver = sendTransceiver;
10593
- }
10594
- publishStream(stream) {
10595
- return __awaiter(this, void 0, void 0, function* () {
10596
- if (stream === this.sendTransceiver.publishedStream) {
10597
- return Promise.resolve();
10598
- }
10599
- return this.sendTransceiver.publishStream(stream);
10600
- });
10601
- }
10602
- unpublishStream() {
10603
- return __awaiter(this, void 0, void 0, function* () {
10604
- if (!this.sendTransceiver.publishedStream) {
10605
- return Promise.resolve();
10606
- }
10607
- return this.sendTransceiver.unpublishStream();
10608
- });
10609
- }
10610
- setNamedMediaGroups(namedMediaGroups) {
10611
- this.sendTransceiver.setNamedMediaGroups(namedMediaGroups);
10612
- }
10613
- get active() {
10614
- return this.sendTransceiver.active;
10615
- }
10616
- set active(active) {
10617
- this.sendTransceiver.active = active;
10618
- }
10619
- setCodecParameters(parameters) {
10620
- return __awaiter(this, void 0, void 0, function* () {
10621
- this.sendTransceiver.setCodecParameters(parameters);
10622
- });
10623
- }
10624
- deleteCodecParameters(parameters) {
10625
- return __awaiter(this, void 0, void 0, function* () {
10626
- this.sendTransceiver.deleteCodecParameters(parameters);
10627
- });
10628
- }
10629
- }
10630
-
10631
- class StatsManager {
10632
- constructor(statsGetter, statsPreprocessor = () => __awaiter(this, void 0, void 0, function* () { })) {
10633
- this.statsGetter = statsGetter;
10634
- this.statsPreProcessor = statsPreprocessor;
10635
- }
10636
- getStats() {
10637
- return __awaiter(this, void 0, void 0, function* () {
10638
- const statsReport = yield this.statsGetter();
10639
- const statsMap = new Map();
10640
- statsReport.forEach((stats, key) => statsMap.set(key, stats));
10641
- yield this.statsPreProcessor(statsMap);
10642
- return statsMap;
10643
- });
10644
- }
10645
- }
10646
-
10647
- const organizeTransceiverStats = (sendTransceivers, recvTransceivers) => __awaiter(void 0, void 0, void 0, function* () {
10648
- const result = {
10649
- audio: {
10650
- senders: [],
10651
- receivers: [],
10652
- },
10653
- video: {
10654
- senders: [],
10655
- receivers: [],
10656
- },
10657
- screenShareAudio: {
10658
- senders: [],
10659
- receivers: [],
10660
- },
10661
- screenShareVideo: {
10662
- senders: [],
10663
- receivers: [],
10664
- },
10665
- };
10666
- yield Promise.all([...sendTransceivers.entries()].map(([mediaType, transceiver]) => __awaiter(void 0, void 0, void 0, function* () {
10667
- var _a;
10668
- const item = {
10669
- report: yield transceiver.getStats(),
10670
- mid: transceiver.mid,
10671
- csi: transceiver.csi,
10672
- currentDirection: 'sendonly',
10673
- localTrackLabel: (_a = transceiver.publishedStream) === null || _a === void 0 ? void 0 : _a.label,
10674
- };
10675
- if (mediaType === exports.MediaType.AudioMain) {
10676
- result.audio.senders.push(item);
10677
- }
10678
- if (mediaType === exports.MediaType.VideoMain) {
10679
- result.video.senders.push(item);
10680
- }
10681
- if (mediaType === exports.MediaType.AudioSlides) {
10682
- result.screenShareAudio.senders.push(item);
10683
- }
10684
- if (mediaType === exports.MediaType.VideoSlides) {
10685
- result.screenShareVideo.senders.push(item);
10686
- }
10687
- })));
10688
- yield Promise.all([...recvTransceivers.entries()].map(([mediaType, transceivers]) => __awaiter(void 0, void 0, void 0, function* () {
10689
- return Promise.all(transceivers.map((t) => __awaiter(void 0, void 0, void 0, function* () {
10690
- var _b, _c;
10691
- const item = {
10692
- report: yield t.getStats(),
10693
- mid: (_b = t.receiveSlot.id) === null || _b === void 0 ? void 0 : _b.mid,
10694
- csi: t.receiveSlot.currentRxCsi,
10695
- currentDirection: 'recvonly',
10696
- localTrackLabel: (_c = t.receiveSlot.stream.getTracks()[0]) === null || _c === void 0 ? void 0 : _c.label,
10697
- };
10698
- if (mediaType === exports.MediaType.AudioMain) {
10699
- result.audio.receivers.push(item);
10700
- }
10701
- if (mediaType === exports.MediaType.VideoMain) {
10702
- result.video.receivers.push(item);
10703
- }
10704
- if (mediaType === exports.MediaType.AudioSlides) {
10705
- result.screenShareAudio.receivers.push(item);
10706
- }
10707
- if (mediaType === exports.MediaType.VideoSlides) {
10708
- result.screenShareVideo.receivers.push(item);
10709
- }
10710
- })));
10711
- })));
10712
- return result;
10713
- });
10714
-
10715
- var es5 = {exports: {}};
10716
-
10717
- (function (module, exports) {
10718
- !function(e,t){module.exports=t();}(commonjsGlobal,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=90)}({17:function(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||""},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||""},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0},e.getVersionPrecision=function(e){return e.split(".").length},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],(function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),(function(e){return new Array(20-e.length).join("0")+e})).reverse()}));for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)n.push(t(e[r]));return n},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++)s[a-1]=arguments[a];if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach((function(t){n[t]=e[t];}));};for(t=0,r=s.length;t<r;t+=1)o();return e},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||""},e}();t.default=i,e.exports=t.default;},18:function(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t)},e.parse=function(e){return new i.default(e).getResult()},t=e,n=[{key:"BROWSER_MAP",get:function(){return s.BROWSER_MAP}},{key:"ENGINE_MAP",get:function(){return s.ENGINE_MAP}},{key:"OS_MAP",get:function(){return s.OS_MAP}},{key:"PLATFORMS_MAP",get:function(){return s.PLATFORMS_MAP}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e}();t.default=o,e.exports=t.default;},91:function(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||""},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||""},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||""},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||""},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return o.default.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach((function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);})),n>0){var a=Object.keys(r),u=o.default.find(a,(function(e){return t.isOS(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}var c=o.default.find(a,(function(e){return t.isPlatform(e)}));if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f}}if(s>0){var l=Object.keys(i),h=o.default.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(i[h])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default;},92:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\/|opios/i],describe:function(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\sedg\//i],describe:function(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}];t.default=a,e.exports=t.default;},93:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return {name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return {name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t}}}];t.default=a,e.exports=t.default;},94:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function(){return {type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return {type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return "blackberry"===e.getBrowserName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test:function(e){return "bada"===e.getBrowserName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return "windows phone"===e.getBrowserName()},describe:function(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3},describe:function(){return {type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return "android"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return "macos"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test:function(e){return "windows"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return "linux"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return "playstation 4"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.tv}}},{test:function(e){return "roku"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.tv}}}];t.default=a,e.exports=t.default;},95:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function(e){return "microsoft edge"===e.getBrowserName(!0)},describe:function(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return {name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=a,e.exports=t.default;}})}));
10719
- }(es5));
10720
-
10721
- var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);
10722
-
10723
- function getBrowserDetails() {
10724
- const browser = Bowser.getParser(window.navigator.userAgent);
10725
- return browser.getBrowser();
10726
- }
10727
-
10728
10413
  /**
10729
10414
  * Creates a continuation function with some arguments already applied.
10730
10415
  *
@@ -13821,112 +13506,422 @@ function whilst(test, iteratee, callback) {
13821
13506
  _fn(next);
13822
13507
  }
13823
13508
 
13824
- return _test(check);
13509
+ return _test(check);
13510
+ }
13511
+ awaitify(whilst, 3);
13512
+
13513
+ /**
13514
+ * Runs the `tasks` array of functions in series, each passing their results to
13515
+ * the next in the array. However, if any of the `tasks` pass an error to their
13516
+ * own callback, the next function is not executed, and the main `callback` is
13517
+ * immediately called with the error.
13518
+ *
13519
+ * @name waterfall
13520
+ * @static
13521
+ * @memberOf module:ControlFlow
13522
+ * @method
13523
+ * @category Control Flow
13524
+ * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}
13525
+ * to run.
13526
+ * Each function should complete with any number of `result` values.
13527
+ * The `result` values will be passed as arguments, in order, to the next task.
13528
+ * @param {Function} [callback] - An optional callback to run once all the
13529
+ * functions have completed. This will be passed the results of the last task's
13530
+ * callback. Invoked with (err, [results]).
13531
+ * @returns {Promise} a promise, if a callback is omitted
13532
+ * @example
13533
+ *
13534
+ * async.waterfall([
13535
+ * function(callback) {
13536
+ * callback(null, 'one', 'two');
13537
+ * },
13538
+ * function(arg1, arg2, callback) {
13539
+ * // arg1 now equals 'one' and arg2 now equals 'two'
13540
+ * callback(null, 'three');
13541
+ * },
13542
+ * function(arg1, callback) {
13543
+ * // arg1 now equals 'three'
13544
+ * callback(null, 'done');
13545
+ * }
13546
+ * ], function (err, result) {
13547
+ * // result now equals 'done'
13548
+ * });
13549
+ *
13550
+ * // Or, with named functions:
13551
+ * async.waterfall([
13552
+ * myFirstFunction,
13553
+ * mySecondFunction,
13554
+ * myLastFunction,
13555
+ * ], function (err, result) {
13556
+ * // result now equals 'done'
13557
+ * });
13558
+ * function myFirstFunction(callback) {
13559
+ * callback(null, 'one', 'two');
13560
+ * }
13561
+ * function mySecondFunction(arg1, arg2, callback) {
13562
+ * // arg1 now equals 'one' and arg2 now equals 'two'
13563
+ * callback(null, 'three');
13564
+ * }
13565
+ * function myLastFunction(arg1, callback) {
13566
+ * // arg1 now equals 'three'
13567
+ * callback(null, 'done');
13568
+ * }
13569
+ */
13570
+ function waterfall (tasks, callback) {
13571
+ callback = once(callback);
13572
+ if (!Array.isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));
13573
+ if (!tasks.length) return callback();
13574
+ var taskIndex = 0;
13575
+
13576
+ function nextTask(args) {
13577
+ var task = wrapAsync(tasks[taskIndex++]);
13578
+ task(...args, onlyOnce(next));
13579
+ }
13580
+
13581
+ function next(err, ...args) {
13582
+ if (err === false) return
13583
+ if (err || taskIndex === tasks.length) {
13584
+ return callback(err, ...args);
13585
+ }
13586
+ nextTask(args);
13587
+ }
13588
+
13589
+ nextTask([]);
13590
+ }
13591
+
13592
+ awaitify(waterfall);
13593
+
13594
+ function processTasks(task, finishedCallback) {
13595
+ return __awaiter(this, void 0, void 0, function* () {
13596
+ try {
13597
+ yield task();
13598
+ finishedCallback();
13599
+ }
13600
+ catch (e) {
13601
+ finishedCallback(e);
13602
+ }
13603
+ });
13604
+ }
13605
+ class AsyncQueue {
13606
+ constructor() {
13607
+ this.queue = queue$1(processTasks, 1);
13608
+ }
13609
+ push(task) {
13610
+ return this.queue.pushAsync(task);
13611
+ }
13612
+ empty() {
13613
+ return this.queue.empty();
13614
+ }
13615
+ }
13616
+
13617
+ var OfferAnswerType;
13618
+ (function (OfferAnswerType) {
13619
+ OfferAnswerType[OfferAnswerType["LocalOnly"] = 0] = "LocalOnly";
13620
+ OfferAnswerType[OfferAnswerType["Remote"] = 1] = "Remote";
13621
+ })(OfferAnswerType || (OfferAnswerType = {}));
13622
+ class SendOnlyTransceiver extends Transceiver {
13623
+ constructor(rtcRtpTransceiver, mid, csi, munger, mediaType) {
13624
+ super(rtcRtpTransceiver, mid);
13625
+ this.rtxEnabled = false;
13626
+ this.streamMuteStateChange = new TypedEvent();
13627
+ this.streamPublishStateChange = new TypedEvent();
13628
+ this.negotiationNeeded = new TypedEvent();
13629
+ this.namedMediaGroupsChange = new TypedEvent();
13630
+ this.requestedIdEncodingParamsMap = new Map();
13631
+ this.updateSendParametersQueue = new AsyncQueue();
13632
+ this.csi = csi;
13633
+ this.direction = 'sendrecv';
13634
+ this.handleTrackChange = this.handleTrackChange.bind(this);
13635
+ this.handleStreamConstraintsChange = this.handleStreamConstraintsChange.bind(this);
13636
+ this.handleStreamMuteStateChange = this.handleStreamMuteStateChange.bind(this);
13637
+ this.munger = munger;
13638
+ this.mediaType = mediaType;
13639
+ }
13640
+ handleTrackChange() {
13641
+ var _a;
13642
+ return __awaiter(this, void 0, void 0, function* () {
13643
+ if (this.requested) {
13644
+ yield this.sender.replaceTrack(((_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.outputStream.getTracks()[0]) || null);
13645
+ }
13646
+ });
13647
+ }
13648
+ handleStreamConstraintsChange() {
13649
+ return __awaiter(this, void 0, void 0, function* () {
13650
+ yield this.updateSendParameters(this.requestedIdEncodingParamsMap);
13651
+ });
13652
+ }
13653
+ handleStreamMuteStateChange() {
13654
+ this.streamMuteStateChange.emit();
13655
+ }
13656
+ get requested() {
13657
+ return this.requestedIdEncodingParamsMap.size > 0;
13658
+ }
13659
+ replaceTransceiver(newRtcRtpTransceiver) {
13660
+ const _super = Object.create(null, {
13661
+ replaceTransceiver: { get: () => super.replaceTransceiver }
13662
+ });
13663
+ var _a;
13664
+ return __awaiter(this, void 0, void 0, function* () {
13665
+ _super.replaceTransceiver.call(this, newRtcRtpTransceiver);
13666
+ newRtcRtpTransceiver.direction = this.direction;
13667
+ if (this.requested) {
13668
+ yield this.sender.replaceTrack(((_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.outputStream.getTracks()[0]) || null);
13669
+ }
13670
+ });
13671
+ }
13672
+ replacePublishedStream(newStream) {
13673
+ return __awaiter(this, void 0, void 0, function* () {
13674
+ const oldStream = this.publishedStream;
13675
+ oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(exports.LocalStreamEventNames.OutputTrackChange, this.handleTrackChange);
13676
+ oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(exports.LocalStreamEventNames.ConstraintsChange, this.handleStreamConstraintsChange);
13677
+ oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(exports.StreamEventNames.MuteStateChange, this.handleStreamMuteStateChange);
13678
+ if (this.requested) {
13679
+ yield this.sender.replaceTrack((newStream === null || newStream === void 0 ? void 0 : newStream.outputStream.getTracks()[0]) || null);
13680
+ }
13681
+ this.publishedStream = newStream;
13682
+ newStream === null || newStream === void 0 ? void 0 : newStream.on(exports.LocalStreamEventNames.OutputTrackChange, this.handleTrackChange);
13683
+ newStream === null || newStream === void 0 ? void 0 : newStream.on(exports.LocalStreamEventNames.ConstraintsChange, this.handleStreamConstraintsChange);
13684
+ newStream === null || newStream === void 0 ? void 0 : newStream.on(exports.StreamEventNames.MuteStateChange, this.handleStreamMuteStateChange);
13685
+ if ((!oldStream && newStream && !newStream.muted) ||
13686
+ (oldStream && !newStream && !oldStream.muted)) {
13687
+ this.streamPublishStateChange.emit();
13688
+ }
13689
+ else if ((oldStream === null || oldStream === void 0 ? void 0 : oldStream.muted) !== (newStream === null || newStream === void 0 ? void 0 : newStream.muted)) {
13690
+ this.streamMuteStateChange.emit();
13691
+ }
13692
+ });
13693
+ }
13694
+ setNamedMediaGroups(namedMediaGroups) {
13695
+ if (this.mediaType !== exports.MediaType.AudioMain) {
13696
+ throw new Error(`This interface does not allow media types other than AudioMain: ${this.mediaType}`);
13697
+ }
13698
+ this.namedMediaGroups = namedMediaGroups;
13699
+ this.namedMediaGroupsChange.emit();
13700
+ }
13701
+ publishStream(stream) {
13702
+ return this.replacePublishedStream(stream);
13703
+ }
13704
+ unpublishStream() {
13705
+ return this.replacePublishedStream();
13706
+ }
13707
+ get active() {
13708
+ return this._rtcRtpTransceiver.direction === 'sendrecv';
13709
+ }
13710
+ set active(enabled) {
13711
+ this.direction = enabled ? 'sendrecv' : 'inactive';
13712
+ this._rtcRtpTransceiver.direction = this.direction;
13713
+ if (this._rtcRtpTransceiver.direction !== this._rtcRtpTransceiver.currentDirection) {
13714
+ this.negotiationNeeded.emit(OfferAnswerType.Remote);
13715
+ }
13716
+ }
13717
+ getStats() {
13718
+ return this.sender.getStats();
13719
+ }
13720
+ updateSendParameters(requestedIdEncodingParamsMap) {
13721
+ return __awaiter(this, void 0, void 0, function* () {
13722
+ return this.updateSendParametersQueue.push(() => __awaiter(this, void 0, void 0, function* () {
13723
+ if (this.publishedStream) {
13724
+ const requested = requestedIdEncodingParamsMap.size > 0;
13725
+ if (this.requested !== requested) {
13726
+ this.sender.replaceTrack(requested ? this.publishedStream.outputStream.getTracks()[0] || null : null);
13727
+ }
13728
+ const sendParameters = this.sender.getParameters();
13729
+ sendParameters.encodings.forEach((encoding, index) => {
13730
+ var _a, _b;
13731
+ const encodingParams = requestedIdEncodingParamsMap.get(index);
13732
+ encoding.active = !!encodingParams;
13733
+ if (encodingParams) {
13734
+ const { maxPayloadBitsPerSecond, maxFs, maxWidth, maxHeight } = encodingParams;
13735
+ const scaleDownRatio = getScaleDownRatio((_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.getSettings().width, (_b = this.publishedStream) === null || _b === void 0 ? void 0 : _b.getSettings().height, maxFs, maxWidth, maxHeight);
13736
+ if (maxPayloadBitsPerSecond !== undefined && maxPayloadBitsPerSecond >= 0) {
13737
+ encoding.maxBitrate = maxPayloadBitsPerSecond;
13738
+ }
13739
+ if (scaleDownRatio !== undefined && scaleDownRatio >= 1.0) {
13740
+ encoding.scaleResolutionDownBy = scaleDownRatio;
13741
+ }
13742
+ }
13743
+ });
13744
+ yield this.sender.setParameters(sendParameters);
13745
+ }
13746
+ this.requestedIdEncodingParamsMap = requestedIdEncodingParamsMap;
13747
+ }));
13748
+ });
13749
+ }
13750
+ isSimulcastEnabled() {
13751
+ const params = this.sender.getParameters();
13752
+ return params.encodings.length > 1;
13753
+ }
13754
+ mungeLocalDescription(mediaDescription) {
13755
+ this.munger.mungeLocalDescription(mediaDescription, this.isSimulcastEnabled(), this.rtxEnabled);
13756
+ }
13757
+ mungeLocalDescriptionForRemoteServer(mediaDescription) {
13758
+ this.munger.mungeLocalDescriptionForRemoteServer(mediaDescription, getMediaContent(this.mediaType), this.csi);
13759
+ }
13760
+ mungeRemoteDescription(mediaDescription) {
13761
+ this.munger.mungeRemoteDescription(mediaDescription);
13762
+ }
13763
+ get senderIds() {
13764
+ return this.munger.getSenderIds();
13765
+ }
13766
+ get numActiveSimulcastLayers() {
13767
+ var _a;
13768
+ if (getMediaFamily(this.mediaType) === exports.MediaFamily.Video) {
13769
+ return (_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.getNumActiveSimulcastLayers();
13770
+ }
13771
+ return this.publishedStream ? 0 : undefined;
13772
+ }
13773
+ getEncodingIndexForStreamId(id) {
13774
+ return this.munger.getEncodingIndexForStreamId(id);
13775
+ }
13776
+ resetSdpMunger() {
13777
+ this.munger.reset();
13778
+ }
13779
+ setCodecParameters(parameters) {
13780
+ this.munger.setCodecParameters(parameters);
13781
+ this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);
13782
+ }
13783
+ deleteCodecParameters(parameters) {
13784
+ this.munger.deleteCodecParameters(parameters);
13785
+ this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);
13786
+ }
13787
+ }
13788
+
13789
+ class SendSlot {
13790
+ constructor(sendTransceiver) {
13791
+ this.sendTransceiver = sendTransceiver;
13792
+ }
13793
+ publishStream(stream) {
13794
+ return __awaiter(this, void 0, void 0, function* () {
13795
+ if (stream === this.sendTransceiver.publishedStream) {
13796
+ return Promise.resolve();
13797
+ }
13798
+ return this.sendTransceiver.publishStream(stream);
13799
+ });
13800
+ }
13801
+ unpublishStream() {
13802
+ return __awaiter(this, void 0, void 0, function* () {
13803
+ if (!this.sendTransceiver.publishedStream) {
13804
+ return Promise.resolve();
13805
+ }
13806
+ return this.sendTransceiver.unpublishStream();
13807
+ });
13808
+ }
13809
+ setNamedMediaGroups(namedMediaGroups) {
13810
+ this.sendTransceiver.setNamedMediaGroups(namedMediaGroups);
13811
+ }
13812
+ get active() {
13813
+ return this.sendTransceiver.active;
13814
+ }
13815
+ set active(active) {
13816
+ this.sendTransceiver.active = active;
13817
+ }
13818
+ setCodecParameters(parameters) {
13819
+ return __awaiter(this, void 0, void 0, function* () {
13820
+ this.sendTransceiver.setCodecParameters(parameters);
13821
+ });
13822
+ }
13823
+ deleteCodecParameters(parameters) {
13824
+ return __awaiter(this, void 0, void 0, function* () {
13825
+ this.sendTransceiver.deleteCodecParameters(parameters);
13826
+ });
13827
+ }
13825
13828
  }
13826
- awaitify(whilst, 3);
13827
13829
 
13828
- /**
13829
- * Runs the `tasks` array of functions in series, each passing their results to
13830
- * the next in the array. However, if any of the `tasks` pass an error to their
13831
- * own callback, the next function is not executed, and the main `callback` is
13832
- * immediately called with the error.
13833
- *
13834
- * @name waterfall
13835
- * @static
13836
- * @memberOf module:ControlFlow
13837
- * @method
13838
- * @category Control Flow
13839
- * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}
13840
- * to run.
13841
- * Each function should complete with any number of `result` values.
13842
- * The `result` values will be passed as arguments, in order, to the next task.
13843
- * @param {Function} [callback] - An optional callback to run once all the
13844
- * functions have completed. This will be passed the results of the last task's
13845
- * callback. Invoked with (err, [results]).
13846
- * @returns {Promise} a promise, if a callback is omitted
13847
- * @example
13848
- *
13849
- * async.waterfall([
13850
- * function(callback) {
13851
- * callback(null, 'one', 'two');
13852
- * },
13853
- * function(arg1, arg2, callback) {
13854
- * // arg1 now equals 'one' and arg2 now equals 'two'
13855
- * callback(null, 'three');
13856
- * },
13857
- * function(arg1, callback) {
13858
- * // arg1 now equals 'three'
13859
- * callback(null, 'done');
13860
- * }
13861
- * ], function (err, result) {
13862
- * // result now equals 'done'
13863
- * });
13864
- *
13865
- * // Or, with named functions:
13866
- * async.waterfall([
13867
- * myFirstFunction,
13868
- * mySecondFunction,
13869
- * myLastFunction,
13870
- * ], function (err, result) {
13871
- * // result now equals 'done'
13872
- * });
13873
- * function myFirstFunction(callback) {
13874
- * callback(null, 'one', 'two');
13875
- * }
13876
- * function mySecondFunction(arg1, arg2, callback) {
13877
- * // arg1 now equals 'one' and arg2 now equals 'two'
13878
- * callback(null, 'three');
13879
- * }
13880
- * function myLastFunction(arg1, callback) {
13881
- * // arg1 now equals 'three'
13882
- * callback(null, 'done');
13883
- * }
13884
- */
13885
- function waterfall (tasks, callback) {
13886
- callback = once(callback);
13887
- if (!Array.isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));
13888
- if (!tasks.length) return callback();
13889
- var taskIndex = 0;
13830
+ class StatsManager {
13831
+ constructor(statsGetter, statsPreprocessor = () => __awaiter(this, void 0, void 0, function* () { })) {
13832
+ this.statsGetter = statsGetter;
13833
+ this.statsPreProcessor = statsPreprocessor;
13834
+ }
13835
+ getStats() {
13836
+ return __awaiter(this, void 0, void 0, function* () {
13837
+ const statsReport = yield this.statsGetter();
13838
+ const statsMap = new Map();
13839
+ statsReport.forEach((stats, key) => statsMap.set(key, stats));
13840
+ yield this.statsPreProcessor(statsMap);
13841
+ return statsMap;
13842
+ });
13843
+ }
13844
+ }
13890
13845
 
13891
- function nextTask(args) {
13892
- var task = wrapAsync(tasks[taskIndex++]);
13893
- task(...args, onlyOnce(next));
13894
- }
13846
+ const organizeTransceiverStats = (sendTransceivers, recvTransceivers) => __awaiter(void 0, void 0, void 0, function* () {
13847
+ const result = {
13848
+ audio: {
13849
+ senders: [],
13850
+ receivers: [],
13851
+ },
13852
+ video: {
13853
+ senders: [],
13854
+ receivers: [],
13855
+ },
13856
+ screenShareAudio: {
13857
+ senders: [],
13858
+ receivers: [],
13859
+ },
13860
+ screenShareVideo: {
13861
+ senders: [],
13862
+ receivers: [],
13863
+ },
13864
+ };
13865
+ yield Promise.all([...sendTransceivers.entries()].map(([mediaType, transceiver]) => __awaiter(void 0, void 0, void 0, function* () {
13866
+ var _a;
13867
+ const item = {
13868
+ report: yield transceiver.getStats(),
13869
+ mid: transceiver.mid,
13870
+ csi: transceiver.csi,
13871
+ currentDirection: 'sendonly',
13872
+ localTrackLabel: (_a = transceiver.publishedStream) === null || _a === void 0 ? void 0 : _a.label,
13873
+ };
13874
+ if (mediaType === exports.MediaType.AudioMain) {
13875
+ result.audio.senders.push(item);
13876
+ }
13877
+ if (mediaType === exports.MediaType.VideoMain) {
13878
+ result.video.senders.push(item);
13879
+ }
13880
+ if (mediaType === exports.MediaType.AudioSlides) {
13881
+ result.screenShareAudio.senders.push(item);
13882
+ }
13883
+ if (mediaType === exports.MediaType.VideoSlides) {
13884
+ result.screenShareVideo.senders.push(item);
13885
+ }
13886
+ })));
13887
+ yield Promise.all([...recvTransceivers.entries()].map(([mediaType, transceivers]) => __awaiter(void 0, void 0, void 0, function* () {
13888
+ return Promise.all(transceivers.map((t) => __awaiter(void 0, void 0, void 0, function* () {
13889
+ var _b, _c;
13890
+ const item = {
13891
+ report: yield t.getStats(),
13892
+ mid: (_b = t.receiveSlot.id) === null || _b === void 0 ? void 0 : _b.mid,
13893
+ csi: t.receiveSlot.currentRxCsi,
13894
+ currentDirection: 'recvonly',
13895
+ localTrackLabel: (_c = t.receiveSlot.stream.getTracks()[0]) === null || _c === void 0 ? void 0 : _c.label,
13896
+ };
13897
+ if (mediaType === exports.MediaType.AudioMain) {
13898
+ result.audio.receivers.push(item);
13899
+ }
13900
+ if (mediaType === exports.MediaType.VideoMain) {
13901
+ result.video.receivers.push(item);
13902
+ }
13903
+ if (mediaType === exports.MediaType.AudioSlides) {
13904
+ result.screenShareAudio.receivers.push(item);
13905
+ }
13906
+ if (mediaType === exports.MediaType.VideoSlides) {
13907
+ result.screenShareVideo.receivers.push(item);
13908
+ }
13909
+ })));
13910
+ })));
13911
+ return result;
13912
+ });
13895
13913
 
13896
- function next(err, ...args) {
13897
- if (err === false) return
13898
- if (err || taskIndex === tasks.length) {
13899
- return callback(err, ...args);
13900
- }
13901
- nextTask(args);
13902
- }
13914
+ var es5 = {exports: {}};
13903
13915
 
13904
- nextTask([]);
13905
- }
13916
+ (function (module, exports) {
13917
+ !function(e,t){module.exports=t();}(commonjsGlobal,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=90)}({17:function(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||""},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||""},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0},e.getVersionPrecision=function(e){return e.split(".").length},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],(function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),(function(e){return new Array(20-e.length).join("0")+e})).reverse()}));for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)n.push(t(e[r]));return n},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++)s[a-1]=arguments[a];if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach((function(t){n[t]=e[t];}));};for(t=0,r=s.length;t<r;t+=1)o();return e},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||""},e}();t.default=i,e.exports=t.default;},18:function(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t)},e.parse=function(e){return new i.default(e).getResult()},t=e,n=[{key:"BROWSER_MAP",get:function(){return s.BROWSER_MAP}},{key:"ENGINE_MAP",get:function(){return s.ENGINE_MAP}},{key:"OS_MAP",get:function(){return s.OS_MAP}},{key:"PLATFORMS_MAP",get:function(){return s.PLATFORMS_MAP}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e}();t.default=o,e.exports=t.default;},91:function(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||""},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||""},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||""},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||""},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return o.default.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach((function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);})),n>0){var a=Object.keys(r),u=o.default.find(a,(function(e){return t.isOS(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}var c=o.default.find(a,(function(e){return t.isPlatform(e)}));if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f}}if(s>0){var l=Object.keys(i),h=o.default.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(i[h])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default;},92:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\/|opios/i],describe:function(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\sedg\//i],describe:function(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}];t.default=a,e.exports=t.default;},93:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return {name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return {name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t}}}];t.default=a,e.exports=t.default;},94:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function(){return {type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return {type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return {type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return "blackberry"===e.getBrowserName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test:function(e){return "bada"===e.getBrowserName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return "windows phone"===e.getBrowserName()},describe:function(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3},describe:function(){return {type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return "android"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return "macos"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test:function(e){return "windows"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return "linux"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return "playstation 4"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.tv}}},{test:function(e){return "roku"===e.getOSName(!0)},describe:function(){return {type:s.PLATFORMS_MAP.tv}}}];t.default=a,e.exports=t.default;},95:function(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function(e){return "microsoft edge"===e.getBrowserName(!0)},describe:function(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return {name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=a,e.exports=t.default;}})}));
13918
+ }(es5));
13906
13919
 
13907
- awaitify(waterfall);
13920
+ var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);
13908
13921
 
13909
- function processTasks(task, finishedCallback) {
13910
- return __awaiter(this, void 0, void 0, function* () {
13911
- try {
13912
- yield task();
13913
- finishedCallback();
13914
- }
13915
- catch (e) {
13916
- finishedCallback(e);
13917
- }
13918
- });
13919
- }
13920
- class AsyncQueue {
13921
- constructor() {
13922
- this.queue = queue$1(processTasks, 1);
13923
- }
13924
- push(task) {
13925
- return this.queue.pushAsync(task);
13926
- }
13927
- empty() {
13928
- return this.queue.empty();
13929
- }
13922
+ function getBrowserDetails() {
13923
+ const browser = Bowser.getParser(window.navigator.userAgent);
13924
+ return browser.getBrowser();
13930
13925
  }
13931
13926
 
13932
13927
  function toMediaStreamTrackKind(mediaType) {