@webex/web-client-media-engine 3.5.2 → 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,310 +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.requested = false;
10426
- this.requestedIdEncodingParamsMap = new Map();
10427
- this.csi = csi;
10428
- this.direction = 'sendrecv';
10429
- this.handleTrackChange = this.handleTrackChange.bind(this);
10430
- this.handleStreamConstraintsChange = this.handleStreamConstraintsChange.bind(this);
10431
- this.handleStreamMuteStateChange = this.handleStreamMuteStateChange.bind(this);
10432
- this.munger = munger;
10433
- this.mediaType = mediaType;
10434
- }
10435
- handleTrackChange() {
10436
- var _a;
10437
- return __awaiter(this, void 0, void 0, function* () {
10438
- if (this.requested) {
10439
- yield this.sender.replaceTrack(((_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.outputStream.getTracks()[0]) || null);
10440
- }
10441
- });
10442
- }
10443
- handleStreamConstraintsChange() {
10444
- return __awaiter(this, void 0, void 0, function* () {
10445
- yield this.updateSendParameters(this.requestedIdEncodingParamsMap);
10446
- });
10447
- }
10448
- handleStreamMuteStateChange() {
10449
- this.streamMuteStateChange.emit();
10450
- }
10451
- replaceTransceiver(newRtcRtpTransceiver) {
10452
- const _super = Object.create(null, {
10453
- replaceTransceiver: { get: () => super.replaceTransceiver }
10454
- });
10455
- var _a;
10456
- return __awaiter(this, void 0, void 0, function* () {
10457
- _super.replaceTransceiver.call(this, newRtcRtpTransceiver);
10458
- newRtcRtpTransceiver.direction = this.direction;
10459
- if (this.requested) {
10460
- yield this.sender.replaceTrack(((_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.outputStream.getTracks()[0]) || null);
10461
- }
10462
- });
10463
- }
10464
- replacePublishedStream(newStream) {
10465
- return __awaiter(this, void 0, void 0, function* () {
10466
- const oldStream = this.publishedStream;
10467
- oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(exports.LocalStreamEventNames.OutputTrackChange, this.handleTrackChange);
10468
- oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(exports.LocalStreamEventNames.ConstraintsChange, this.handleStreamConstraintsChange);
10469
- oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(exports.StreamEventNames.MuteStateChange, this.handleStreamMuteStateChange);
10470
- if (this.requested) {
10471
- yield this.sender.replaceTrack((newStream === null || newStream === void 0 ? void 0 : newStream.outputStream.getTracks()[0]) || null);
10472
- }
10473
- this.publishedStream = newStream;
10474
- newStream === null || newStream === void 0 ? void 0 : newStream.on(exports.LocalStreamEventNames.OutputTrackChange, this.handleTrackChange);
10475
- newStream === null || newStream === void 0 ? void 0 : newStream.on(exports.LocalStreamEventNames.ConstraintsChange, this.handleStreamConstraintsChange);
10476
- newStream === null || newStream === void 0 ? void 0 : newStream.on(exports.StreamEventNames.MuteStateChange, this.handleStreamMuteStateChange);
10477
- if ((!oldStream && newStream && !newStream.muted) ||
10478
- (oldStream && !newStream && !oldStream.muted)) {
10479
- this.streamPublishStateChange.emit();
10480
- }
10481
- else if ((oldStream === null || oldStream === void 0 ? void 0 : oldStream.muted) !== (newStream === null || newStream === void 0 ? void 0 : newStream.muted)) {
10482
- this.streamMuteStateChange.emit();
10483
- }
10484
- if (newStream) {
10485
- this.updateSendParameters(this.requestedIdEncodingParamsMap);
10486
- }
10487
- });
10488
- }
10489
- setStreamRequested(requested) {
10490
- var _a;
10491
- return __awaiter(this, void 0, void 0, function* () {
10492
- if (this.requested !== requested) {
10493
- this.requested = requested;
10494
- const newTrack = requested ? ((_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.outputStream.getTracks()[0]) || null : null;
10495
- yield this.sender.replaceTrack(newTrack);
10496
- }
10497
- });
10498
- }
10499
- publishStream(stream) {
10500
- return this.replacePublishedStream(stream);
10501
- }
10502
- unpublishStream() {
10503
- return this.replacePublishedStream();
10504
- }
10505
- get active() {
10506
- return this._rtcRtpTransceiver.direction === 'sendrecv';
10507
- }
10508
- set active(enabled) {
10509
- this.direction = enabled ? 'sendrecv' : 'inactive';
10510
- this._rtcRtpTransceiver.direction = this.direction;
10511
- if (this._rtcRtpTransceiver.direction !== this._rtcRtpTransceiver.currentDirection) {
10512
- this.negotiationNeeded.emit(OfferAnswerType.Remote);
10513
- }
10514
- }
10515
- getStats() {
10516
- return this.sender.getStats();
10517
- }
10518
- updateSendParameters(requestedIdEncodingParamsMap) {
10519
- return __awaiter(this, void 0, void 0, function* () {
10520
- if (this.publishedStream) {
10521
- this.setStreamRequested(requestedIdEncodingParamsMap.size > 0);
10522
- const sendParameters = this.sender.getParameters();
10523
- sendParameters.encodings.forEach((encoding, index) => {
10524
- var _a, _b;
10525
- const encodingParams = requestedIdEncodingParamsMap.get(index);
10526
- encoding.active = !!encodingParams;
10527
- if (encodingParams) {
10528
- const { maxPayloadBitsPerSecond, maxFs, maxWidth, maxHeight } = encodingParams;
10529
- 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);
10530
- if (maxPayloadBitsPerSecond !== undefined && maxPayloadBitsPerSecond >= 0) {
10531
- encoding.maxBitrate = maxPayloadBitsPerSecond;
10532
- }
10533
- if (scaleDownRatio !== undefined && scaleDownRatio >= 1.0) {
10534
- encoding.scaleResolutionDownBy = scaleDownRatio;
10535
- }
10536
- }
10537
- });
10538
- yield this.sender.setParameters(sendParameters);
10539
- }
10540
- this.requestedIdEncodingParamsMap = requestedIdEncodingParamsMap;
10541
- });
10542
- }
10543
- isSimulcastEnabled() {
10544
- const params = this.sender.getParameters();
10545
- return params.encodings.length > 1;
10546
- }
10547
- mungeLocalDescription(mediaDescription) {
10548
- this.munger.mungeLocalDescription(mediaDescription, this.isSimulcastEnabled(), this.rtxEnabled);
10549
- }
10550
- mungeLocalDescriptionForRemoteServer(mediaDescription) {
10551
- this.munger.mungeLocalDescriptionForRemoteServer(mediaDescription, getMediaContent(this.mediaType), this.csi);
10552
- }
10553
- mungeRemoteDescription(mediaDescription) {
10554
- this.munger.mungeRemoteDescription(mediaDescription);
10555
- }
10556
- get senderIds() {
10557
- return this.munger.getSenderIds();
10558
- }
10559
- get numActiveSimulcastLayers() {
10560
- var _a;
10561
- if (getMediaFamily(this.mediaType) === exports.MediaFamily.Video) {
10562
- return (_a = this.publishedStream) === null || _a === void 0 ? void 0 : _a.getNumActiveSimulcastLayers();
10563
- }
10564
- return this.publishedStream ? 0 : undefined;
10565
- }
10566
- getEncodingIndexForStreamId(id) {
10567
- return this.munger.getEncodingIndexForStreamId(id);
10568
- }
10569
- resetSdpMunger() {
10570
- this.munger.reset();
10571
- }
10572
- setCodecParameters(parameters) {
10573
- this.munger.setCodecParameters(parameters);
10574
- this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);
10575
- }
10576
- deleteCodecParameters(parameters) {
10577
- this.munger.deleteCodecParameters(parameters);
10578
- this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);
10579
- }
10580
- }
10581
-
10582
- class SendSlot {
10583
- constructor(sendTransceiver) {
10584
- this.sendTransceiver = sendTransceiver;
10585
- }
10586
- publishStream(stream) {
10587
- return __awaiter(this, void 0, void 0, function* () {
10588
- if (stream === this.sendTransceiver.publishedStream) {
10589
- return Promise.resolve();
10590
- }
10591
- return this.sendTransceiver.publishStream(stream);
10592
- });
10593
- }
10594
- unpublishStream() {
10595
- return __awaiter(this, void 0, void 0, function* () {
10596
- if (!this.sendTransceiver.publishedStream) {
10597
- return Promise.resolve();
10598
- }
10599
- return this.sendTransceiver.unpublishStream();
10600
- });
10601
- }
10602
- get active() {
10603
- return this.sendTransceiver.active;
10604
- }
10605
- set active(active) {
10606
- this.sendTransceiver.active = active;
10607
- }
10608
- setCodecParameters(parameters) {
10609
- return __awaiter(this, void 0, void 0, function* () {
10610
- this.sendTransceiver.setCodecParameters(parameters);
10611
- });
10612
- }
10613
- deleteCodecParameters(parameters) {
10614
- return __awaiter(this, void 0, void 0, function* () {
10615
- this.sendTransceiver.deleteCodecParameters(parameters);
10616
- });
10617
- }
10618
- }
10619
-
10620
- class StatsManager {
10621
- constructor(statsGetter, statsPreprocessor = () => __awaiter(this, void 0, void 0, function* () { })) {
10622
- this.statsGetter = statsGetter;
10623
- this.statsPreProcessor = statsPreprocessor;
10624
- }
10625
- getStats() {
10626
- return __awaiter(this, void 0, void 0, function* () {
10627
- const statsReport = yield this.statsGetter();
10628
- const statsMap = new Map();
10629
- statsReport.forEach((stats, key) => statsMap.set(key, stats));
10630
- yield this.statsPreProcessor(statsMap);
10631
- return statsMap;
10632
- });
10633
- }
10634
- }
10635
-
10636
- const organizeTransceiverStats = (sendTransceivers, recvTransceivers) => __awaiter(void 0, void 0, void 0, function* () {
10637
- const result = {
10638
- audio: {
10639
- senders: [],
10640
- receivers: [],
10641
- },
10642
- video: {
10643
- senders: [],
10644
- receivers: [],
10645
- },
10646
- screenShareAudio: {
10647
- senders: [],
10648
- receivers: [],
10649
- },
10650
- screenShareVideo: {
10651
- senders: [],
10652
- receivers: [],
10653
- },
10654
- };
10655
- yield Promise.all([...sendTransceivers.entries()].map(([mediaType, transceiver]) => __awaiter(void 0, void 0, void 0, function* () {
10656
- var _a;
10657
- const item = {
10658
- report: yield transceiver.getStats(),
10659
- mid: transceiver.mid,
10660
- csi: transceiver.csi,
10661
- currentDirection: 'sendonly',
10662
- localTrackLabel: (_a = transceiver.publishedStream) === null || _a === void 0 ? void 0 : _a.label,
10663
- };
10664
- if (mediaType === exports.MediaType.AudioMain) {
10665
- result.audio.senders.push(item);
10666
- }
10667
- if (mediaType === exports.MediaType.VideoMain) {
10668
- result.video.senders.push(item);
10669
- }
10670
- if (mediaType === exports.MediaType.AudioSlides) {
10671
- result.screenShareAudio.senders.push(item);
10672
- }
10673
- if (mediaType === exports.MediaType.VideoSlides) {
10674
- result.screenShareVideo.senders.push(item);
10675
- }
10676
- })));
10677
- yield Promise.all([...recvTransceivers.entries()].map(([mediaType, transceivers]) => __awaiter(void 0, void 0, void 0, function* () {
10678
- return Promise.all(transceivers.map((t) => __awaiter(void 0, void 0, void 0, function* () {
10679
- var _b, _c;
10680
- const item = {
10681
- report: yield t.getStats(),
10682
- mid: (_b = t.receiveSlot.id) === null || _b === void 0 ? void 0 : _b.mid,
10683
- csi: t.receiveSlot.currentRxCsi,
10684
- currentDirection: 'recvonly',
10685
- localTrackLabel: (_c = t.receiveSlot.stream.getTracks()[0]) === null || _c === void 0 ? void 0 : _c.label,
10686
- };
10687
- if (mediaType === exports.MediaType.AudioMain) {
10688
- result.audio.receivers.push(item);
10689
- }
10690
- if (mediaType === exports.MediaType.VideoMain) {
10691
- result.video.receivers.push(item);
10692
- }
10693
- if (mediaType === exports.MediaType.AudioSlides) {
10694
- result.screenShareAudio.receivers.push(item);
10695
- }
10696
- if (mediaType === exports.MediaType.VideoSlides) {
10697
- result.screenShareVideo.receivers.push(item);
10698
- }
10699
- })));
10700
- })));
10701
- return result;
10702
- });
10703
-
10704
- var es5 = {exports: {}};
10705
-
10706
- (function (module, exports) {
10707
- !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;}})}));
10708
- }(es5));
10709
-
10710
- var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);
10711
-
10712
- function getBrowserDetails() {
10713
- const browser = Bowser.getParser(window.navigator.userAgent);
10714
- return browser.getBrowser();
10715
- }
10716
-
10717
10413
  /**
10718
10414
  * Creates a continuation function with some arguments already applied.
10719
10415
  *
@@ -13810,112 +13506,422 @@ function whilst(test, iteratee, callback) {
13810
13506
  _fn(next);
13811
13507
  }
13812
13508
 
13813
- 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
+ }
13814
13828
  }
13815
- awaitify(whilst, 3);
13816
13829
 
13817
- /**
13818
- * Runs the `tasks` array of functions in series, each passing their results to
13819
- * the next in the array. However, if any of the `tasks` pass an error to their
13820
- * own callback, the next function is not executed, and the main `callback` is
13821
- * immediately called with the error.
13822
- *
13823
- * @name waterfall
13824
- * @static
13825
- * @memberOf module:ControlFlow
13826
- * @method
13827
- * @category Control Flow
13828
- * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}
13829
- * to run.
13830
- * Each function should complete with any number of `result` values.
13831
- * The `result` values will be passed as arguments, in order, to the next task.
13832
- * @param {Function} [callback] - An optional callback to run once all the
13833
- * functions have completed. This will be passed the results of the last task's
13834
- * callback. Invoked with (err, [results]).
13835
- * @returns {Promise} a promise, if a callback is omitted
13836
- * @example
13837
- *
13838
- * async.waterfall([
13839
- * function(callback) {
13840
- * callback(null, 'one', 'two');
13841
- * },
13842
- * function(arg1, arg2, callback) {
13843
- * // arg1 now equals 'one' and arg2 now equals 'two'
13844
- * callback(null, 'three');
13845
- * },
13846
- * function(arg1, callback) {
13847
- * // arg1 now equals 'three'
13848
- * callback(null, 'done');
13849
- * }
13850
- * ], function (err, result) {
13851
- * // result now equals 'done'
13852
- * });
13853
- *
13854
- * // Or, with named functions:
13855
- * async.waterfall([
13856
- * myFirstFunction,
13857
- * mySecondFunction,
13858
- * myLastFunction,
13859
- * ], function (err, result) {
13860
- * // result now equals 'done'
13861
- * });
13862
- * function myFirstFunction(callback) {
13863
- * callback(null, 'one', 'two');
13864
- * }
13865
- * function mySecondFunction(arg1, arg2, callback) {
13866
- * // arg1 now equals 'one' and arg2 now equals 'two'
13867
- * callback(null, 'three');
13868
- * }
13869
- * function myLastFunction(arg1, callback) {
13870
- * // arg1 now equals 'three'
13871
- * callback(null, 'done');
13872
- * }
13873
- */
13874
- function waterfall (tasks, callback) {
13875
- callback = once(callback);
13876
- if (!Array.isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));
13877
- if (!tasks.length) return callback();
13878
- 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
+ }
13879
13845
 
13880
- function nextTask(args) {
13881
- var task = wrapAsync(tasks[taskIndex++]);
13882
- task(...args, onlyOnce(next));
13883
- }
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
+ });
13884
13913
 
13885
- function next(err, ...args) {
13886
- if (err === false) return
13887
- if (err || taskIndex === tasks.length) {
13888
- return callback(err, ...args);
13889
- }
13890
- nextTask(args);
13891
- }
13914
+ var es5 = {exports: {}};
13892
13915
 
13893
- nextTask([]);
13894
- }
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));
13895
13919
 
13896
- awaitify(waterfall);
13920
+ var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);
13897
13921
 
13898
- function processTasks(task, finishedCallback) {
13899
- return __awaiter(this, void 0, void 0, function* () {
13900
- try {
13901
- yield task();
13902
- finishedCallback();
13903
- }
13904
- catch (e) {
13905
- finishedCallback(e);
13906
- }
13907
- });
13908
- }
13909
- class AsyncQueue {
13910
- constructor() {
13911
- this.queue = queue$1(processTasks, 1);
13912
- }
13913
- push(task) {
13914
- return this.queue.pushAsync(task);
13915
- }
13916
- empty() {
13917
- return this.queue.empty();
13918
- }
13922
+ function getBrowserDetails() {
13923
+ const browser = Bowser.getParser(window.navigator.userAgent);
13924
+ return browser.getBrowser();
13919
13925
  }
13920
13926
 
13921
13927
  function toMediaStreamTrackKind(mediaType) {
@@ -14038,6 +14044,9 @@ class MultistreamConnection extends EventEmitter$2 {
14038
14044
  this.queueLocalOfferAnswer();
14039
14045
  }
14040
14046
  });
14047
+ transceiver.namedMediaGroupsChange.on(() => {
14048
+ this.sendSourceAdvertisement(mediaType);
14049
+ });
14041
14050
  this.sendTransceivers.set(mediaType, transceiver);
14042
14051
  this.createJmpSession(mediaType);
14043
14052
  }
@@ -14227,7 +14236,11 @@ class MultistreamConnection extends EventEmitter$2 {
14227
14236
  };
14228
14237
  }
14229
14238
  else {
14230
- task = () => { var _a; return (_a = this.jmpSessions.get(mediaType)) === null || _a === void 0 ? void 0 : _a.sendSourceAdvertisement(1, numLiveSources); };
14239
+ task = () => {
14240
+ var _a;
14241
+ return (_a = this.jmpSessions
14242
+ .get(mediaType)) === null || _a === void 0 ? void 0 : _a.sendSourceAdvertisement(1, numLiveSources, mediaType === exports.MediaType.AudioMain ? transceiver.namedMediaGroups : []);
14243
+ };
14231
14244
  }
14232
14245
  if (((_b = this.dataChannel) === null || _b === void 0 ? void 0 : _b.readyState) === 'open') {
14233
14246
  task();