voximplant-websdk
Version:
VoxImplant Web SDK for embedding voice and video communication into web applications.
11 lines • 429 kB
JavaScript
(function() {
var root = this;var VoxImplant;VoxImplant=(()=>{var e={6143:function(e,t){!function(e){"use strict";e.createStatelessFSM=(e,t,n,i)=>{const r={context:n,prevValue:null,get value(){return e.value},set value(t){e.value=t},states:t,transition(e){null==i||i.log("FSM: received event",e);const t=this.states[this.value][e];if(!t)return null==i||i.warn(`FSM: there is no state for transition on ${this.value} state`),!1;try{const e="unknown"===t?a(this.states.unknown,this.context):t;return e===this.value?(null==i||i.log("FSM: there are not state changes"),!1):(null==i||i.log(`FSM: transition from ${this.value} to ${e}`),this.prevValue=this.value,this.value=e,this.value)}catch(e){return null==i||i.error(`FSM: transition failed, rollback to ${this.value} state`),!1}}},a=(e,t)=>{if(null==i||i.log("FSM: handling unknown state"),!e)throw Error("Transitions from unknown state are not provided");let n=null;for(const r in e){const a=e[r];if(null==a?void 0:a(t)){null==i||i.log(`FSM: the state ${r} matches conditions`),n=r;break}}if(!n){const e="FSM: cannot make transition from unknown state";throw null==i||i.error(e),Error(e)}return n};return r},Object.defineProperty(e,"__esModule",{value:!0})}(t)},6185:function(e,t){!function(e){"use strict";class t{constructor(e){this.content=e,this.observers=new Set}notify(){for(const e of this.observers)e(this.content)}watch(e){this.observers.add(e)}unwatch(e){this.observers.delete(e)}clear(){this.observers.clear()}get value(){return this.content}set value(e){this.content=e,this.notify()}}e.obs=e=>new t(e),Object.defineProperty(e,"__esModule",{value:!0})}(t)},1206:function(e){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=90)}({17:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var i=n(18),r=function(){function e(){}return e.getFirstMatch=function(e,t){var n=t.match(e);return n&&n.length>0&&n[1]||""},e.getSecondMatch=function(e,t){var n=t.match(e);return n&&n.length>1&&n[2]||""},e.matchAndReturnConst=function(e,t,n){if(e.test(t))return n},e.getWindowsVersionName=function(e){switch(e){case"NT":return"NT";case"XP":case"NT 5.1":return"XP";case"NT 5.0":return"2000";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,n,i){void 0===i&&(i=!1);var r=e.getVersionPrecision(t),a=e.getVersionPrecision(n),s=Math.max(r,a),o=0,c=e.map([t,n],(function(t){var n=s-e.getVersionPrecision(t),i=t+new Array(n+1).join(".0");return e.map(i.split("."),(function(e){return new Array(20-e.length).join("0")+e})).reverse()}));for(i&&(o=s-Math.min(r,a)),s-=1;s>=o;){if(c[0][s]>c[1][s])return 1;if(c[0][s]===c[1][s]){if(s===o)return 0;s-=1}else if(c[0][s]<c[1][s])return-1}},e.map=function(e,t){var n,i=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(n=0;n<e.length;n+=1)i.push(t(e[n]));return i},e.find=function(e,t){var n,i;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(n=0,i=e.length;n<i;n+=1){var r=e[n];if(t(r,n))return r}},e.assign=function(e){for(var t,n,i=e,r=arguments.length,a=new Array(r>1?r-1:0),s=1;s<r;s++)a[s-1]=arguments[s];if(Object.assign)return Object.assign.apply(Object,[e].concat(a));var o=function(){var e=a[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach((function(t){i[t]=e[t]}))};for(t=0,n=a.length;t<n;t+=1)o();return e},e.getBrowserAlias=function(e){return i.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return i.BROWSER_MAP[e]||""},e}();t.default=r,e.exports=t.default},18:function(e,t,n){"use strict";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,n){"use strict";t.__esModule=!0,t.default=void 0;var i,r=(i=n(91))&&i.__esModule?i:{default:i},a=n(18);function s(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var o=function(){function e(){}var t,n,i;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 r.default(e,t)},e.parse=function(e){return new r.default(e).getResult()},t=e,i=[{key:"BROWSER_MAP",get:function(){return a.BROWSER_MAP}},{key:"ENGINE_MAP",get:function(){return a.ENGINE_MAP}},{key:"OS_MAP",get:function(){return a.OS_MAP}},{key:"PLATFORMS_MAP",get:function(){return a.PLATFORMS_MAP}}],(n=null)&&s(t.prototype,n),i&&s(t,i),e}();t.default=o,e.exports=t.default},91:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var i=c(n(92)),r=c(n(93)),a=c(n(94)),s=c(n(95)),o=c(n(17));function c(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(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.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(r.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(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.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(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.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,n={},i=0,r={},a=0;if(Object.keys(e).forEach((function(t){var s=e[t];"string"==typeof s?(r[t]=s,a+=1):"object"==typeof s&&(n[t]=s,i+=1)})),i>0){var s=Object.keys(n),c=o.default.find(s,(function(e){return t.isOS(e)}));if(c){var d=this.satisfies(n[c]);if(void 0!==d)return d}var l=o.default.find(s,(function(e){return t.isPlatform(e)}));if(l){var g=this.satisfies(n[l]);if(void 0!==g)return g}}if(a>0){var u=Object.keys(r),h=o.default.find(u,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(r[h])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var n=this.getBrowserName().toLowerCase(),i=e.toLowerCase(),r=o.default.getBrowserTypeByAlias(i);return t&&r&&(i=r.toLowerCase()),i===n},t.compareVersion=function(e){var t=[0],n=e,i=!1,r=this.getBrowserVersion();if("string"==typeof r)return">"===e[0]||"<"===e[0]?(n=e.substr(1),"="===e[1]?(i=!0,n=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?n=e.substr(1):"~"===e[0]&&(i=!0,n=e.substr(1)),t.indexOf(o.default.compareVersions(r,n,i))>-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,n){"use strict";t.__esModule=!0,t.default=void 0;var i,r=(i=n(17))&&i.__esModule?i:{default:i},a=/version\/(\d+(\.?_?\d+)+)/i,s=[{test:[/googlebot/i],describe:function(e){var t={name:"Googlebot"},n=r.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/opera/i],describe:function(e){var t={name:"Opera"},n=r.default.getFirstMatch(a,e)||r.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/opr\/|opios/i],describe:function(e){var t={name:"Opera"},n=r.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:"Samsung Internet for Android"},n=r.default.getFirstMatch(a,e)||r.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/Whale/i],describe:function(e){var t={name:"NAVER Whale Browser"},n=r.default.getFirstMatch(a,e)||r.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:"MZ Browser"},n=r.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/focus/i],describe:function(e){var t={name:"Focus"},n=r.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/swing/i],describe:function(e){var t={name:"Swing"},n=r.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/coast/i],describe:function(e){var t={name:"Opera Coast"},n=r.default.getFirstMatch(a,e)||r.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(e){var t={name:"Opera Touch"},n=r.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/yabrowser/i],describe:function(e){var t={name:"Yandex Browser"},n=r.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:"UC Browser"},n=r.default.getFirstMatch(a,e)||r.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:"Maxthon"},n=r.default.getFirstMatch(a,e)||r.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/epiphany/i],describe:function(e){var t={name:"Epiphany"},n=r.default.getFirstMatch(a,e)||r.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/puffin/i],describe:function(e){var t={name:"Puffin"},n=r.default.getFirstMatch(a,e)||r.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/sleipnir/i],describe:function(e){var t={name:"Sleipnir"},n=r.default.getFirstMatch(a,e)||r.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/k-meleon/i],describe:function(e){var t={name:"K-Meleon"},n=r.default.getFirstMatch(a,e)||r.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/micromessenger/i],describe:function(e){var t={name:"WeChat"},n=r.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},n=r.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/msie|trident/i],describe:function(e){var t={name:"Internet Explorer"},n=r.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/\sedg\//i],describe:function(e){var t={name:"Microsoft Edge"},n=r.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:"Microsoft Edge"},n=r.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/vivaldi/i],describe:function(e){var t={name:"Vivaldi"},n=r.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/seamonkey/i],describe:function(e){var t={name:"SeaMonkey"},n=r.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/sailfish/i],describe:function(e){var t={name:"Sailfish"},n=r.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return n&&(t.version=n),t}},{test:[/silk/i],describe:function(e){var t={name:"Amazon Silk"},n=r.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/phantom/i],describe:function(e){var t={name:"PhantomJS"},n=r.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/slimerjs/i],describe:function(e){var t={name:"SlimerJS"},n=r.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t={name:"BlackBerry"},n=r.default.getFirstMatch(a,e)||r.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:"WebOS Browser"},n=r.default.getFirstMatch(a,e)||r.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/bada/i],describe:function(e){var t={name:"Bada"},n=r.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/tizen/i],describe:function(e){var t={name:"Tizen"},n=r.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/qupzilla/i],describe:function(e){var t={name:"QupZilla"},n=r.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:"Firefox"},n=r.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/electron/i],describe:function(e){var t={name:"Electron"},n=r.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:"Miui"},n=r.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/chromium/i],describe:function(e){var t={name:"Chromium"},n=r.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:"Chrome"},n=r.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/GSA/i],describe:function(e){var t={name:"Google Search"},n=r.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:function(e){var t=!e.test(/like android/i),n=e.test(/android/i);return t&&n},describe:function(e){var t={name:"Android Browser"},n=r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/playstation 4/i],describe:function(e){var t={name:"PlayStation 4"},n=r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:"Safari"},n=r.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:r.default.getFirstMatch(t,e),version:r.default.getSecondMatch(t,e)}}}];t.default=s,e.exports=t.default},93:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var i,r=(i=n(17))&&i.__esModule?i:{default:i},a=n(18),s=[{test:[/Roku\/DVP/],describe:function(e){var t=r.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return{name:a.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=r.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=r.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),n=r.default.getWindowsVersionName(t);return{name:a.OS_MAP.Windows,version:t,versionName:n}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:a.OS_MAP.iOS},n=r.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return n&&(t.version=n),t}},{test:[/macintosh/i],describe:function(e){var t=r.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),n=r.default.getMacOSVersionName(t),i={name:a.OS_MAP.MacOS,version:t};return n&&(i.versionName=n),i}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=r.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return{name:a.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),n=e.test(/android/i);return t&&n},describe:function(e){var t=r.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),n=r.default.getAndroidVersionName(t),i={name:a.OS_MAP.Android,version:t};return n&&(i.versionName=n),i}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=r.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),n={name:a.OS_MAP.WebOS};return t&&t.length&&(n.version=t),n}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=r.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||r.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||r.default.getFirstMatch(/\bbb(\d+)/i,e);return{name:a.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=r.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=r.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:a.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:a.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=r.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.PlayStation4,version:t}}}];t.default=s,e.exports=t.default},94:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var i,r=(i=n(17))&&i.__esModule?i:{default:i},a=n(18),s=[{test:[/googlebot/i],describe:function(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(e){var t=r.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",n={type:a.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(n.model=t),n}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),n=e.test(/like (ipod|iphone)/i);return t&&!n},describe:function(e){var t=r.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:a.PLATFORMS_MAP.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:a.PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return{type:a.PLATFORMS_MAP.mobile}}},{test:function(e){return"blackberry"===e.getBrowserName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test:function(e){return"bada"===e.getBrowserName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.mobile}}},{test:function(e){return"windows phone"===e.getBrowserName()},describe:function(){return{type:a.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:a.PLATFORMS_MAP.tablet}}},{test:function(e){return"android"===e.getOSName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.mobile}}},{test:function(e){return"macos"===e.getOSName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test:function(e){return"windows"===e.getOSName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.desktop}}},{test:function(e){return"linux"===e.getOSName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.desktop}}},{test:function(e){return"playstation 4"===e.getOSName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.tv}}},{test:function(e){return"roku"===e.getOSName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.tv}}}];t.default=s,e.exports=t.default},95:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var i,r=(i=n(17))&&i.__esModule?i:{default:i},a=n(18),s=[{test:function(e){return"microsoft edge"===e.getBrowserName(!0)},describe:function(e){if(/\sedg\//i.test(e))return{name:a.ENGINE_MAP.Blink};var t=r.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return{name:a.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:a.ENGINE_MAP.Trident},n=r.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:a.ENGINE_MAP.Presto},n=r.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:function(e){var t=e.test(/gecko/i),n=e.test(/like gecko/i);return t&&!n},describe:function(e){var t={name:a.ENGINE_MAP.Gecko},n=r.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return{name:a.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:a.ENGINE_MAP.WebKit},n=r.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}}];t.default=s,e.exports=t.default}})},9091:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const i=n(209),r=n(7998),a=n(1150),s=n(4106),o=n(2957),c=n(141),d=n(125),l=n(245),g=n(6765);class u{static get newUUID(){return(new i.default).toString()+"_"+u._connectionId}static setConnectionId(e){this._connectionId=e}static removeConnectionId(){this._connectionId=void 0}static init(){this._isInitialised||(this.registerSignallingWatcher(),this._isInitialised=!0)}static registerSignallingWatcher(){l.default.addHandler({onSignalingClosed:()=>{this.removeConnectionId(),this._acdRequests.forEach((e=>{d.Client.getInstance().dispatchEvent({name:c.Events.ACDError,code:r.ACDErrorCode.ConnectionClosed,message:g.ACD_ERR_8,action:e.action,status:e.status}),e.reject(new Error(g.ACD_ERR_8))}))},onSignalingConnected(){},onSignalingConnectionFailed(){},onMediaConnectionFailed(){}})}static setStatus(e,t){return new Promise(((n,i)=>{u._checkBeforeRun(r.OperatorACDStatuses[e],i);const a=u.newUUID,o={...{...g.ACD_DEFAULT_OPTIONS,...t},status:e,uuid:a};l.default.callRemoteFunction(s.RemoteFunction.setOperatorACDStatus,o),this._acdRequests.push({resolve:n,action:"setStatus",reject:i,timer:window.setTimeout((()=>{const e=u._acdRequests.find((e=>e.uuid===a));e&&d.Client.getInstance().dispatchEvent({name:c.Events.ACDError,code:r.ACDErrorCode.FailedByTimeout,message:g.ACD_ERR_4,action:e.action,status:e.status}),u._acdRequests=u._acdRequests.filter((e=>e.uuid!==a)),i(g.ACD_ERR_4)}),g.ACD_TIMEOUT),uuid:a,status:String(e)})}))}static getStatus(){return new Promise(((e,t)=>{u._checkBeforeRun(void 0,t);const n=u.newUUID;l.default.callRemoteFunction(s.RemoteFunction.getOperatorACDStatus,n),this._acdRequests.push({resolve:e,action:"getStatus",reject:t,timer:window.setTimeout((()=>{const e=u._acdRequests.find((e=>e.uuid===n));e&&d.Client.getInstance().dispatchEvent({name:c.Events.ACDError,code:r.ACDErrorCode.FailedByTimeout,message:g.ACD_ERR_4,action:e.action,status:e.status}),u._acdRequests=u._acdRequests.filter((e=>e.uuid!==n)),t(g.ACD_ERR_4)}),g.ACD_TIMEOUT),uuid:n})}))}static onError(e,t,n){const{actor:i,actorIdx:a}=u._getActorByUUID(e);if(i){clearTimeout(i.timer);const e=o.Utils.strFormat(g.ACD_ERR_7,i.status||"get operation");d.Client.getInstance().dispatchEvent({name:c.Events.ACDError,code:r.ACDErrorCode.WrongStatus,message:e,action:i.action,status:i.status}),i.reject(new Error(e)),u._acdRequests.splice(0,a+1)}}static onStatusUpdated(e,t,n){u._checkConnectionId(t,e);const{actor:i,actorIdx:a}=u._getActorByUUID(t);if(i){if(clearTimeout(i.timer),0!==a)for(let t=0;t<a;t++){clearTimeout(u._acdRequests[t].timer);const n=o.Utils.strFormat(g.ACD_ERR_3,i.status?String(i.status):"get operation",e);d.Client.getInstance().dispatchEvent({name:c.Events.ACDError,code:r.ACDErrorCode.StatusWillBeIgnored,message:n,action:i.action,status:i.status}),u._acdRequests[t].reject(new Error(n))}if(void 0===i.status||String(i.status)===e)i.resolve(e);else{const t=o.Utils.strFormat(g.ACD_ERR_2,i.status,e);d.Client.getInstance().dispatchEvent({name:c.Events.ACDError,code:r.ACDErrorCode.IncorrectStatus,message:t,action:i.action,status:i.status}),i.reject(new Error(t))}u._acdRequests.splice(0,a+1)}d.Client.getInstance().dispatchEvent({name:c.Events.ACDStatusUpdated,id:u._getConnectonIdFromUUID(t),status:e,description:n})}static _checkBeforeRun(e,t){if(!u._connectionId)return d.Client.getInstance().dispatchEvent({name:c.Events.ACDError,code:r.ACDErrorCode.NotLoggedIn,message:g.ACD_ERR_1,status:e,action:e?"setStatus":"getStatus"}),void t(new Error(g.ACD_ERR_1));if(u._acdRequests.length>0&&(a.LogManager.get().writeMessage(a.LogCategory.CLIENT,"ACD",a.LogLevel.WARNING,g.ACD_ERR_5),d.Client.getInstance().dispatchEvent({name:c.Events.ACDError,code:r.ACDErrorCode.MultipleOperations,message:g.ACD_ERR_5,status:e,action:e?"setStatus":"getStatus"})),void 0!==e&&!Object.values(r.OperatorACDStatuses).includes(e)){const n=o.Utils.strFormat(g.ACD_ERR_7,e);d.Client.getInstance().dispatchEvent({name:c.Events.ACDError,code:r.ACDErrorCode.WrongStatus,message:n,status:e,action:"setStatus"}),t(new Error(n))}}static _getActorByUUID(e){let t=-1;return{actor:this._acdRequests.find(((n,i)=>{if(n.uuid===e)return t=i,!0})),actorIdx:t}}static _getConnectonIdFromUUID(e){const t=e.split("_");return 1===t.length||"gw"===t[1]?u._connectionId:t[1]}static _checkConnectionId(e,t){const n=e.split("_");1!==n.length&&n[1]===u._connectionId?.split("_")[0]||(d.Client.getInstance().dispatchEvent({name:c.Events.ACDError,code:r.ACDErrorCode.MultipleCredentials,message:g.ACD_ERR_6,action:"setStatus",status:t}),a.LogManager.get().writeMessage(a.LogCategory.CLIENT,"ACD",a.LogLevel.WARNING,g.ACD_ERR_6))}}t.default=u,u._acdRequests=[],u._isInitialised=!1,u.init()},2089:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const i=n(209),r=n(7998),a=n(1150),s=n(4106),o=n(2957),c=n(141),d=n(125),l=n(6765),g=n(245);class u{static get newUUID(){return(new i.default).toString()+"_"+u._connectionId}static setConnectionId(e){this._connectionId=e}static removeConnectionId(){this._connectionId=void 0}static init(){this._isInitialised||(this.registerSignallingWatcher(),this._isInitialised=!0)}static registerSignallingWatcher(){g.default.addHandler({onSignalingClosed:()=>{this.removeConnectionId(),this._acdRequests.forEach((e=>{d.Client.getInstance().dispatchEvent({name:c.Events.SQError,code:r.ACDErrorCode.ConnectionClosed,message:l.ACD_ERR_8,action:e.action,status:e.status}),e.reject(new Error(l.ACD_ERR_8))}))},onSignalingConnected(){},onSignalingConnectionFailed(){},onMediaConnectionFailed(){}})}static setStatus(e,t){return new Promise(((n,i)=>{u._checkBeforeRun(r.OperatorACDStatuses[e],i);const a=u.newUUID,o={...{...l.ACD_DEFAULT_OPTIONS,...t},status:e,uuid:a};g.default.callRemoteFunction(s.RemoteFunction.setOperatorMessagingStatus,o),this._acdRequests.push({resolve:n,action:"setStatus",reject:i,timer:window.setTimeout((()=>{u._acdRequests=u._acdRequests.filter((e=>e.uuid!==a)),i(l.ACD_ERR_4)}),l.ACD_TIMEOUT),uuid:a,status:String(e)})}))}static getStatus(){return new Promise(((e,t)=>{u._checkBeforeRun(void 0,t);const n=u.newUUID;g.default.callRemoteFunction(s.RemoteFunction.getOperatorMessagingStatus,n),this._acdRequests.push({resolve:e,action:"getStatus",reject:t,timer:window.setTimeout((()=>{u._acdRequests=u._acdRequests.filter((e=>e.uuid!==n)),t(l.ACD_ERR_4)}),l.ACD_TIMEOUT),uuid:n})}))}static onError(e,t,n){const{actor:i,actorIdx:a}=u._getActorByUUID(e);if(i){clearTimeout(i.timer);const e=o.Utils.strFormat(l.ACD_ERR_7,i.status||"get operation");d.Client.getInstance().dispatchEvent({name:c.Events.SQError,code:r.ACDErrorCode.WrongStatus,message:e,action:i.action,status:i.status}),i.reject(new Error(e)),u._acdRequests.splice(0,a+1)}}static onStatusUpdated(e,t,n){u._checkConnectionId(t,e);const{actor:i,actorIdx:a}=u._getActorByUUID(t);if(i){if(clearTimeout(i.timer),0!==a)for(let t=0;t<a;t++){clearTimeout(u._acdRequests[t].timer);const n=o.Utils.strFormat(l.ACD_ERR_3,i.status?String(i.status):"get operation",e);d.Client.getInstance().dispatchEvent({name:c.Events.SQError,code:r.ACDErrorCode.StatusWillBeIgnored,message:n,action:i.action,status:i.status}),u._acdRequests[t].reject(new Error(n))}if(void 0===i.status||String(i.status)===e)i.resolve(e);else{const t=o.Utils.strFormat(l.ACD_ERR_2,i.status,e);d.Client.getInstance().dispatchEvent({name:c.Events.SQError,code:r.ACDErrorCode.IncorrectStatus,message:t,action:i.action,status:i.status}),i.reject(new Error(t))}u._acdRequests.splice(0,a+1)}d.Client.getInstance().dispatchEvent({name:c.Events.SQMessagingStatusUpdated,id:u._getConnectonIdFromUUID(t),status:e,description:n})}static _checkBeforeRun(e,t){if(!u._connectionId)return d.Client.getInstance().dispatchEvent({name:c.Events.SQError,code:r.ACDErrorCode.NotLoggedIn,message:l.ACD_ERR_1,status:e,action:e?"setStatus":"getStatus"}),void t(new Error(l.ACD_ERR_1));if(u._acdRequests.length>0&&(a.LogManager.get().writeMessage(a.LogCategory.CLIENT,"ACD",a.LogLevel.WARNING,l.ACD_ERR_5),d.Client.getInstance().dispatchEvent({name:c.Events.SQError,code:r.ACDErrorCode.MultipleOperations,message:l.ACD_ERR_5,status:e,action:e?"setStatus":"getStatus"})),void 0!==e&&!Object.values(r.OperatorACDStatuses).includes(e)){const n=o.Utils.strFormat(l.ACD_ERR_7,e);d.Client.getInstance().dispatchEvent({name:c.Events.SQError,code:r.ACDErrorCode.WrongStatus,message:n,status:e,action:"setStatus"}),t(new Error(n))}}static _getActorByUUID(e){let t=-1;return{actor:this._acdRequests.find(((n,i)=>{if(n.uuid===e)return t=i,!0})),actorIdx:t}}static _getConnectonIdFromUUID(e){const t=e.split("_");return 1===t.length||"gw"===t[1]?u._connectionId:t[1]}static _checkConnectionId(e,t){const n=e.split("_");1!==n.length&&n[1]===u._connectionId?.split("_")[0]||(d.Client.getInstance().dispatchEvent({name:c.Events.SQError,code:r.ACDErrorCode.MultipleCredentials,message:l.ACD_ERR_6,action:"setStatus",status:t}),a.LogManager.get().writeMessage(a.LogCategory.CLIENT,"ACD",a.LogLevel.WARNING,l.ACD_ERR_6))}}t.default=u,u._acdRequests=[],u._isInitialised=!1,u.init()},6765:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ACD_DEFAULT_OPTIONS=t.ACD_TIMEOUT=t.ACD_ERR_8=t.ACD_ERR_7=t.ACD_ERR_6=t.ACD_ERR_5=t.ACD_ERR_4=t.ACD_ERR_3=t.ACD_ERR_2=t.ACD_ERR_1=void 0,t.ACD_ERR_1="You cannot get or set an agent status before login.",t.ACD_ERR_2="The {0} status is not acceptable for the current agent state. The agent is {1} now. Please, check the ACD module documentation for details.",t.ACD_ERR_3="The {0} status is set in the code after {1}. The {0} status is ignored.",t.ACD_ERR_4="The agent status update failed by timeout.",t.ACD_ERR_5="You try to perform multiple ACD operations at the same time. This can lead to an unexpected behavior of the application.",t.ACD_ERR_6="You probably use the same credentials in the different browsers or multiple browser’s windows. This error can also occur when you make a request, reload the page and receive response after the page reloads.",t.ACD_ERR_7="Wrong status name {0}",t.ACD_ERR_8="Failed to get or set status. Connection to the Voximplant Cloud is closed.",t.ACD_TIMEOUT=58e3,t.ACD_DEFAULT_OPTIONS={permanent:!1}},3947:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.Authenticator=t.AuthenticatorState=void 0;const r=n(1150),a=n(84),s=n(4106),o=n(575),c=n(125),d=n(9091),l=n(4758),g=n(2089),u=n(245),h=n(2957),p=n(1493);var f;!function(e){e[e.IDLE=0]="IDLE",e[e.IN_PROGRESS=1]="IN_PROGRESS"}(f=t.AuthenticatorState||(t.AuthenticatorState={}));class m{constructor(){this.FAIL_CODE_SECOND_STAGE=301,this.FAIL_CODE_ONE_TIME_KEY=302,this._displayName=null,this._username=null,this._authorized=!1,this.currentState=f.IDLE,this.logger=r.LogManager.get().createLogger(r.LogCategory.SIGNALING,this._traceName()),u.default.setRPCHandler(o.RemoteEvent.loginFailed,((e,t)=>{this.onLoginFailed(e,t)})),u.default.setRPCHandler(o.RemoteEvent.loginSuccessful,((e,t)=>{this.onLoginSuccesful(e,t)})),u.default.setRPCHandler(o.RemoteEvent.refreshOauthTokenFailed,(e=>{this.handler.onRefreshTokenFailed(e)})),u.default.setRPCHandler(o.RemoteEvent.refreshOauthTokenSuccessful,(e=>{this.handler.onRefreshTokenSuccess(e.OAuth)})),u.default.addHandler(this)}static get(){return void 0===this.inst&&(this.inst=new m),this.inst}setHandler(e){this.handler=e}onLoginFailed(e,t){switch(this.currentState=f.IDLE,e){case this.FAIL_CODE_ONE_TIME_KEY:this.handler.onOneTimeKeyGenerated(t);break;case this.FAIL_CODE_SECOND_STAGE:this.handler.onSecondStageInitiated();break;default:this.handler.onLoginFailed(e)}}onLoginSuccesful(e,t){this.currentState=f.IDLE,this._authorized=!0,a.PCFactory.get().iceConfig=t.iceConfig,d.default.setConnectionId(t.connectionId),g.default.setConnectionId(t.connectionId),c.Client.getInstance().setConnectionData(null,t.connectionId),this._displayName=e,this.handler.onLoginSuccessful(e,t.OAuth)}get displayName(){return this._displayName}basicLogin(e,t,n){if(this.currentState!=f.IDLE)return void this.logger.error("Login operation already in progress");this._username=e,this.currentState=f.IN_PROGRESS;const i=`${e.split("@")[0]}:voximplant.com:${t}`;if(h.Utils.hasFeature(p.featureMap.passwordDigestAlgorithmSha256))return void h.Utils.sha256(i).then((t=>{u.default.callRemoteFunction(s.RemoteFunction.login,e,t,{...n,credentialType:"sha256"})}));const r=l.Md5.hashStr(i).toString();u.default.callRemoteFunction(s.RemoteFunction.login,e,r,{...n,credentialType:"md5"})}tokenLogin(e,t){this.currentState==f.IDLE?(this._username=e,this.currentState=f.IN_PROGRESS,u.default.callRemoteFunction(s.RemoteFunction.login,e,"",t)):this.logger.error("Login operation already in progress")}tokenRefresh(e,t,n){n?u.default.callRemoteFunction(s.RemoteFunction.refreshOauthToken,e,{refreshToken:t,deviceToken:n}):u.default.callRemoteFunction(s.RemoteFunction.refreshOauthToken,e,t)}loginUsingOneTimeKey(e,t,n){this.logger.info("loginWithOneTimeKey running for "+e),this.currentState==f.IDLE?(this._username=e,this.currentState=f.IN_PROGRESS,u.default.callRemoteFunction(s.RemoteFunction.loginUsingOneTimeKey,e,t,n)):this.logger.error("Login operation already in progress. loginWithOneTimeKey is canceled")}loginStage2(e,t,n){this.logger.info("loginWithCode running for "+e),this.currentState==f.IDLE?(this._username=e,this.currentState=f.IN_PROGRESS,u.default.callRemoteFunction(s.RemoteFunction.loginStage2,e,t,n)):this.logger.error("Login operation already in progress. loginWithCode is canceled.")}generateOneTimeKey(e){this.logger.info("requestOneTimeLoginKey running for "+e),this.currentState==f.IDLE?(this.currentState=f.IN_PROGRESS,u.default.callRemoteFunction(s.RemoteFunction.loginGenerateOneTimeKey,e)):this.logger.error("Login operation already in progress. requestOneTimeLoginKey is canceled.")}username(){return this._username}authorized(){return this._authorized}onSignalingConnected(){}onSignalingConnectionFailed(e){}onSignalingClosed(){this.currentState=f.IDLE,this._authorized=!1,this._displayName=null,this._username=null}onMediaConnectionFailed(){this.currentState=f.IDLE}ziAuthorized(e){this._authorized=e}_traceName(){return"Authenticator"}}i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"setHandler",null),i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"onLoginFailed",null),i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"onLoginSuccesful",null),i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"basicLogin",null),i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"tokenLogin",null),i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"tokenRefresh",null),i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"loginUsingOneTimeKey",null),i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"loginStage2",null),i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"generateOneTimeKey",null),i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"username",null),i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"authorized",null),i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"onSignalingConnected",null),i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"onSignalingConnectionFailed",null),i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"onSignalingClosed",null),i([r.LogManager.d_trace(r.LogCategory.AUTHENTICATOR)],m.prototype,"onMediaConnectionFailed",null),t.Authenticator=m},3869:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const i=n(1150),r=n(9165),a=n(6518),s=n(9551),o=n(9023),c=n(125),d=n(1206);var l;!function(e){let t,n;function l(e,t,n){let i=e;return"object"!=typeof i&&(i={}),i[t]={ideal:n},i}!function(e){e[e.Firefox=1]="Firefox",e[e.Webkit=2]="Webkit",e[e.Edge=3]="Edge",e[e.Safari=4]="Safari"}(t||(t={}));d.getParser(window.navigator.userAgent);function g(){return!(!c.Client.getInstance().config().experiments||!c.Client.getInstance().config().experiments.emulate_ios)||(navigator.userAgent.match(/iPhone/i)||navigator.userAgent.match(/iPod/i))}function u(){return!(!c.Client.getInstance().config().experiments||!c.Client.getInstance().config().experiments.emulate_ios)||(navigator.userAgent.match(/iPad/i)||navigator.maxTouchPoints>0&&n===t.Safari)}function h(e,t){return new s.SignalingDTMFSender(t)}function p(){return new Promise((e=>{e(!1)}))}function f(e){let t=!1,n=!1;return e.audioEnabled&&(t=!0,e.audioInputId&&(t=l(t,"deviceId",e.audioInputId))),e.videoEnabled&&(n=!0,e.videoSettings&&(n=e.videoSettings),e.videoInputId&&(n=l(n,"deviceId",e.videoInputId))),{peerIdentity:null,audio:t,video:n}}function m(){n=navigator.mozGetUserMedia?t.Firefox:navigator.webkitGetUserMedia?t.Webkit:t.Safari}e.isIphone=g,e.isIpad=u,e.isSafariIos=function(){return!(!c.Client.getInstance().config().experiments||!c.Client.getInstance().config().experiments.emulate_ios)||"safari"===e.getWSVendor()&&(g()||u())},e.isFirefox=function(){return"firefox"===e.getWSVendor()},e.isScreenSharingSupported=function(){return n===t.Firefox||n===t.Webkit||n===t.Safari&&0===navigator.maxTouchPoints},e.getWSVendor=function(e=!0){switch(n||m(),n){case t.Firefox:return"firefox";case t.Webkit:return"chrome";case t.Safari:return"safari";default:return""}},e.init=function(){switch(n||m(),n&&i.LogManager.get().writeMessage(i.LogCategory.RTC,"Core",i.LogLevel.INFO,"Detected browser "+t[n]),e.getDTMFSender=h,e.screenSharingSupported=p,n){case t.Firefox:e.attachMedia=r.FF.attachStream,e.detachMedia=r.FF.detachStream,e.getScreenMedia=r.FF.getScreenMedia,e.getRTCStats=r.FF.getRTCStats,e.screenSharingSupported=r.FF.screenSharingSupported,e.getDTMFSender=r.FF.getDTMFSender;break;case t.Webkit:e.attachMedia=a.Webkit.attachStream,e.detachMedia=a.Webkit.detachStream,e.getScreenMedia=a.Webkit.getScreenMedia,e.getRTCStats=a.Webkit.getRTCStats,e.screenSharingSupported=a.Webkit.screenSharingSupported,e.getDTMFSender=a.Webkit.getDTMFSender;break;case t.Safari:e.attachMedia=o.Safari.attachStream,e.detachMedia=o.Safari.detachStream,e.getScreenMedia=o.Safari.getScreenMedia,e.getRTCStats=o.Safari.getRTCStats,e.screenSharingSupported=o.Safari.screenSharingSupported,e.getDTMFSender=o.Safari.getDTMFSender;break;default:i.LogManager.get().writeMessage(i.LogCategory.RTC,"Core",i.LogLevel.INFO,"Unsupported browser "+navigator.userAgent)}e.composeConstraints=f}}(l||(l={})),t.default=l},9165:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FF=void 0;const i=n(9551),r=n(1150);class a{static attachStream(e){let t=e.element;void 0===t.srcObject?t.mozSrcObject=e.stream:t.srcObject=e.stream}static detachStream(e){let t=e.element;void 0===t.srcObject?t.mozSrcObject=null:t.srcObject=null,t.src=""}static screenSharingSupported(){return new Promise(((e,t)=>{"https:"==window.location.protocol?e(!0):e(!1)}))}static getScreenMedia(){const e={audio:!1,video:{mediaSource:"window"}};return r.LogManager.get().writeMessage(r.LogCategory.USERMEDIA,"[constraints]",r.LogLevel.TRACE,JSON.stringify(e)),navigator.mediaDevices.getUserMedia(e)}static getRTCStats(e){return new Promise(((t,n)=>{e.getStats(null).then((e=>{let n=[];e.forEach((e=>{"inbound-rtp"!=e.type&&"outbound-rtp"!=e.type||n.push(e)})),t({raw:n,formatted:a.prepareRTCStats(e)})})).catch(n)}))}static prepareRTCStats(e){let t=[];return e.forEach((e=>{"outbound-rtp"===e.type||e.isRemote?t.push(Object.assign(e,{framesPerSecond:e.framesPerSecond?e.framesPerSecond:e.framerateMean,encoderBitrate:e.bitrateMean})):t.push(e)})),t}static getDTMFSender(e,t){const n=/Firefox\/([0-9\.]+)(?:\s|$)/,r=navigator.userAgent;if(n.test(r)){if(+n.exec(r)[1].split(".")[0]>=53){const t=e.getSenders().map((e=>{if(e.track&&"audio"===e.track.kind&&e.dtmf)return e.dtmf}));if(t.length>0)return t[0]}}return new i.SignalingDTMFSender(t)}_traceName(){return"FF"}}t.FF=a},9023:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Safari=void 0;const i=n(9551),r=n(1150);class a{static attachStream(e){try{e.element.srcObject=e.stream}catch(t){r.LogManager.get().writeMessage(r.LogCategory.USERMEDIA,"Safari: ",r.LogLevel.WARNING,`attachStream() has failed: ${JSON.stringify(t)}. MediaRenderer.element is ${e?.element} and MediaRenderer.stream is ${e?.stream}`)}}static detachStream(e){e.pauseElement(),e.element.src=""}static getDTMFSender(e,t){return new i.SignalingDTMFSender(t)}static getScreenMedia(){return navigator.mediaDevices.getDisplayMedia({audio:!1,video:!0})}static screenSharingSupported(){return navigator&&navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia?Promise.resolve(!0):Promise.resolve(!1)}static getRTCStats(e){return new Promise(((t,n)=>{let i=[];e.getStats(null).then((e=>{e.forEach((e=>{if("ssrc"==e.type){let t={};t.id=e.id,t.type=e.type,t.timestamp=e.timestamp,i.push(t)}})),t({raw:i,formatted:a.prepareRTCStats(e)})})).catch(n)}))}static prepareRTCStats(e){let t=[];return e.forEach((e=>{"track"!==e.type||e.kind?"outbound-rtp"===e.type||"inbound-rtp"===e.type?t.push(Object.assign(e,{trackId:e.mediaTrackId})):t.push(e):t.push(Object.assign(e,{kind:e.id.includes("audio")?"audio":e.id.includes("video")?"video":void 0}))})),t}_traceName(){return"Safari"}}t.Safari=a},9551:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SignalingDTMFSender=void 0;const i=n(4106),r=n(245);t.SignalingDTMFSender=class{constructor(e){this._id=e}insertDTMF(e,t,n){(""+e).split("").forEach((e=>this.sendKey(e)))}sendKey(e){let t;t="*"==e?10:"#"==e?11:parseInt(e),(t>=0||t<=11)&&r.default.callRemoteFunction(i.RemoteFunction.sendDTMF,this._id,t)}_traceName(){return"SignalingDTMFSender"}}},6518:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Webkit=void 0;const i=n(9551),r=n(125),a=n(1150);class s{static attachStream(e){let t=e.element;try{t.srcObject=e.stream;const n=r.Client.getInstance()._defaultSinkId;null!=n&&"function"==typeof t.setSinkId&&t.setSinkId(n)}catch(e){a.LogManager.get().writeMessage(a.LogCategory.USERMEDIA,"Webkit: ",a.LogLevel.WARNING,JSON.stringify(e))}}static detachStream(e){e.element.srcObject=null,e.pauseElement(),e.element.src=""}static getDTMFSender(e,t){if(!e.createDTMFSender)return new i.SignalingDTMFSender(t);{let t=[];if(e.getLocalStreams().forEach((e=>{e.getAudioTracks().forEach((e=>{t.push(e)}))})),t.length)return e.createDTMFSender(t[0])}}static screenSharingSupported(){return-1!==navigator.userAgent.indexOf("Android")?Promise.resolve(!1):new Promise(((e,t)=>{if(navigator.getDisplayMedia)e(!0);else if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia)e(!0);else{const t=i=>{i.origin===window.location.origin&&"VoximplantWebsdkExtensionLoaded"===i.data&&(window.removeEventListener("message",t),clearTimeout(n),e(!0))};window.addEventListener("message",t),window.postMessage("VoximplantWebsdkCheckExtension","*");const n=setTimeout((()=>{window.removeEventListener("message",t),e(!1)}),800)}}))}static getScreenMedia(e=!1){return navigator.getDisplayMedia?navigator.getDisplayMedia({video:!0,audio:e}):navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia?navigator.mediaDevices.getDisplayMedia({video:!0,audio:e}):new Promise(((t,n)=>{window.postMessage("voximplantWebsdkGetSourceId","*");const i=r=>{if(r.data&&r.origin===window.location.origin&&r.data.result){if("err"===r.data.result)return n(new Error(r.data.reason));if("ok"===r.data.result&&void 0!==r.data.sourceId){window.removeEventListener("message",i);const s={audio:e,video:{mandatory:{chromeMediaSource:"desktop",maxWidth:screen.width>1920?screen.width:1920,maxHeight:screen.height>1080?screen.height:1080,chromeMediaSourceId:r.data.sourceId},optional:[{googTemporalLayeredScreencast:!0}]}};a.LogManager.get().writeMessage(a.LogCategory.USERMEDIA,"[constraints]",a.LogLevel.INFO,JSON.stringify(s)),navigator.mediaDevices.getUserMedia(s).then((e=>{t(e)}),(e=>{n(e)}))}}};window.addEventListener("message",i)}))}static getRTCStats(e){return new Promise(((t,n)=>{let i=[];e.getStats(null).then((e=>{e.forEach((e=>{"outbound-rtp"!=e.type&&"inbound-rtp"!=e.type||i.push(e)})),t({raw:i,formatted:s.prepareRTCStats(e)})})).catch(n)}))}static prepareRTCStats(e){let t=[];return e.forEach((e=>{"inbound-rtp"===e.type&&e.isRemote?t.push(Object.assign(e,{type:"remote-inbound-rtp"})):"outbound-rtp"===e.type&&e.isRemote?t.push(Object.assign(e,{type:"remote-outbound-rtp"})):t.push(e)})),t}_traceName(){return"Webkit"}}t.Webkit=s},4610:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractCall=t.CallMode=t.CallState=void 0;const r=n(3576),a=n(2282),s=n(1150),o=n(4106),c=n(3385),d=n(9411),l=n(245),g=n(4855),u=n(5826);var h;!function(e){e[e.ALERTING="ALERTING"]="ALERTING",e[e.PROGRESSING="PROGRESSING"]="PROGRESSING",e[e.CONNECTED="CONNECTED"]="CONNECTED",e[e.UPDATING="UPDATING"]="UPDATING",e[e.STOPPING="STOPPING"]="STOPPING",e[e.ENDED="ENDED"]="ENDED"}(h=t.CallState||(t.CallState={})),function(e){e[e.P2P=0]="P2P",e[e.SERVER=1]="SERVER"}(t.CallMode||(t.CallMode={}));class p extends r.EventTarget{constructor(e){super(),this.remoteMuteState=!0,this.logger=s.LogManager.get().createLogger(s.LogCategory.CALL,`Call ${e}`);const{promise:t,resolve:n}=(0,u.promiseWithResolvers)();this.connectedPromise=t,this.connectedResolver=n}id(){return this.settings?this.settings.id:"new"}number(){return this.settings.number}displayName(){return this.settings.displayName}getCallDuration(){return Date.now()-this.startTime}headers(){return this.settings.extraHeaders}state(){return this.settings.state}checkCallMode(e){return this.settings.mode==e}hangup(e){this.logger.info("hangup()"),this.settings.state==h.CONNECTED||this.settings.state==h.UPDATING||this.settings.state==h.PROGRESSING?l.default.callRemoteFunction(o.RemoteFunction.disconnectCall,this.settings.id,d.AbstractCallManager.cleanHeaders(e)):this.settings.state==h.ALERTING&&l.default.callRemoteFunction(o.RemoteFunction.rejectCall,this.settings.id,!1,d.AbstractCallManager.cleanHeaders(e))}mutePlayback(){this.logger.info("mutePlayback()"),this.remoteMuteState=!1,this.getEndpoints().forEach((e=>{e.mediaRenderers.forEach((e=>{e.setVolume(0)}))}))}unmutePlayback(){this.logger.info("unmutePlayback()"),this.remoteMuteState=!0,this.getEndpoints().forEach((e=>{e.mediaRenderers.forEach((e=>{e.setVolume(1)}))}))}restoreRMute(){this.settings.active&&this.getEndpoints().forEach((e=>{e.mediaRenderers.forEach((e=>{e.setVolume(this.remoteMuteState?1:0)}))}))}sendInfo(e,t,n){this.logger.info(`sendInfo(${e}, ${JSON.stringify(t)})`);let i,r,a=e.indexOf("/");-1==a?(i="application",r=e):(i=e.substring(0,a),r=e.substring(a+1)),l.default.callRemoteFunction(o.RemoteFunction.sendSIPInfo,this.settings.id,i,r,t,d.AbstractCallManager.cleanHeaders(n))}sendMessage(e){this.logger.info("sendMessage()"),this.sendInfo(c.Constants.ZINGAYA_IM_MIME_TYPE,e,{})}addEventListener(e,t){super.addEventListener(e,t)}on(e,t,n){super.on(e,t)}removeEventListener(e,t){super.removeEventListener(e,t)}off(e,t){super.off(e,t)}dispatchEvent(e){this.settings.state!==h.UPDATING||e.name!==a.CallEvents.Updated&&e.name!==a.CallEvents.UpdateFailed||this._setState(h.CONNECTED),super.dispatchEvent(e)}onConnected(e,t){if(this.signalingConnected)return!!this.checkState([h.PROGRESSING,h.ALERTING],"onConnected")&&(this._setState(h.CONNECTED),this.startTime=Date.now(),this.dispatchEvent({name:"Connected",call:this,headers:e}),!0)}onFailed(e,t,n){return this.dispatchEvent({name:"Failed",call:this,headers:n,code:e,reason:t}),this._setState(h.ENDED),g.AudioDeviceManager.get().clearCallAudioSettings(this),!0}_setState(e){const t={call:this,old:this.settings.state,new:e,name:a.CallEvents.StateUpdated};return this.settings.state=e,e===h.CONNECTED&&this.connectedResolver(),this.dispatchEvent(t),e}checkState(e,t){if(e)if("string"!=typeof e){let n=!1,i=e;for(let e=0;e<i.length;e++)i[e]==this.settings.state&&(n=!0);if(!n)return this.logger.warning("Received "+t+" in invalid state "+this.settings.state),!1}else if(this.settings.state!=e)return this.logger.warning("Received "+t+" in invalid state "+this.settings.state),!1;return!0}}i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"number",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"displayName",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"headers",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"checkCallMode",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"hangup",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"mutePlayback",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"unmutePlayback",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"restoreRMute",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"sendInfo",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"sendMessage",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"addEventListener",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"on",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"removeEventListener",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"off",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"dispatchEvent",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"onConnected",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"onFailed",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"_setState",null),i([s.LogManager.d_trace(s.LogCategory.CALL)],p.prototype,"checkState",null),t.AbstractCall=p},9411:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractCallManager=void 0;const r=n(3385),a=n(1150),s=n(125),o=n(575),c=n(245),d=n(4610),l=n(2282),g=n(141);class u{constructor(){this.protocolVersion="3",this._h264first=!1,this.iceServers={},this.wsConfMap=new Map,this.confEpManagerMap=new Map,this.endpointManagers=new Map,this._calls={},this._calls={},c.default.addHandler(this),c.default.setRPCHandler(o.RemoteEvent.onICEConfig,((e,t)=>{this.onICEResult(e,!0,t)})),c.default.setRPCHandler(o.RemoteEvent.onICEConfigFailed,(e=>{this.onICEResult(e,!1)})),c.default.setRPCHandler(o.RemoteEvent.handleRejectReinvite,((e,t,n)=>{this.handleRejectReinvite(e,t,n)})),c.default.setRPCHandler(o.RemoteEvent.handleConnectionDisconnected,((e,t,n)=>{this.handleConnectionDisconnected(e,t,n)})),c.default.setRPCHandler(o.RemoteEvent.handleConnectionFailed,((e,t,n,i)=>{this.handleConnectionFailed(e,t,n,i)})),c.default.setRPCHandler(o.RemoteEvent.handleSIPInfo,((e,t,n,i,r)=>{this.handleSIPInfo(e,t,n,i,r)})),c.default.setRPCHandler(o.RemoteEvent.handleSipEvent,(e=>{this.handleSipEvent(e)}))}removeCall(e){delete this._calls[e],this.wsConfMap.delete(e),this.confEpManagerMap.delete(e),this.endpointManagers.delete(e)}get numCalls(){return this._numCalls}static cleanHeaders(e){let t={};for(let n in e)"X-"!=n.substring(0,2)&&n!=r.Constants.CALL_DATA_HEADER||(t[n]=e[n]);return t}static addCustomDataToHeaders(e){return void 0!==e.customData&&(void 0===e.extraHeaders&&(e.extraHeaders={}),e.extraHeaders["VI-CallData"]=e.customData),e}async handleConnectionFailed(e,t,n,i){let r=this.findCall(e,"handleConnectionFailed");r&&"object"==typeof r&&(await this.removeCall(e),s.Client.getInstance().stopProgressTone(),r.onFailed(t,n,i))}getEndpointManager(e){return this.endpointManagers.get(e.id())}onICEResult(e,t,n){if(t){let t=n;if(window.__VIIceServer__&&n){const e=/(stun:|turn:)(.*)*:(\d*)(\?transport=)?(tcp|udp)?/gm,i="$1"+window.__VIIceServer__+":$3$4$5";t=n.map((t=>(Array.isArray(t.urls)?t.urls=t.urls.map((t=>t.replace(e,i))):t.urls=t.urls.replace(e,i),t)))}this.iceServers[e]=t,this.logger.info(`ice servers ${this.iceServers[e]?JSON.stringify(this.iceServers[e]):"null"}`);const i=this.findCall(e,"onICEResult");i&&(i.peerConnection.setConfiguration?i.peerConnection.setConfiguration({...i.peerConnection.getConfiguration(),iceServers:t},{call:i}):this.logger.info("Failed to set ICE config due to RTCPeerConnection doesn't have the setConfiguration method"))}}checkMaximumCallCount(){if(Object.keys(this._calls).length>199)throw new Error("The max calls number limit has been reached.")}handleConnectionDisconnected(e,t,n){let i=this.findCall(e,"handleConnectionDisconnected");i&&(s.Client.getInstance().stopProgressTone(),i.onDisconnected(t,n).then((()=>this.removeCall(e))).catch((t=>{this.logger.error(`Cannot remove the call ${e}: ${t.message}`)})))}handleSIPInfo(e,t,n,i,r){let a=this.findCall(e,"handleSIPInfo");a&&a.onInfo(a,t,n,i,r)}handleSipEvent(e){}onSignalingConnected(){}onSignalingClosed(){for(let e in this._calls)this._calls.hasOwnProperty(e)&&(this._calls[e].hangup(),this._calls[e].onFailed(409,"Connection Closed",{}));this._calls={}}onSignalingConnectionFailed(e){}onMediaConnectionFailed(){}handleRejectReinvite(e,t,n){let i=this.findCall(e,"handleReinvite");i&&(i.peerConnection.revertEnablingVideo(),i.dispatchEvent({code:20,call:i}))}async hangupAllCalls(){const e=Object.values(this._calls).map((e=>new Promise((t=>{const n=setTimeout((()=>{this.logger.info(`The timeout of disconnected event for the call ${e.id()} has reached.`),this.removeCall(e.id()),e.settings.state=d.CallState.ENDED,t()}),1500);e.on(l.CallEvents.Disconnected,(()=>{clearTimeout(n),t()}),{once:!0}),e.hangup();const i=this.endpointManagers.get(e.id());i?.getEndpoints().forEach((e=>i.destructEndpoint(e.id)))}))));await Promise.all(e)}patchAudioMixConf(e,t){if(e.settings.isConference&&t){this.logger.info("patchAudioMixConf(): workaround for mixed audio conferences");const t=e.peerConnection.getTransceivers()?.[0].receiver.track;if(t){e.settings.mixedAudioTrackID=t.id;const n=(()=>{const e=document.createElement("audio");return e.autoplay=!0,e.id=t.id,e.style.display="none",e.srcObject=new MediaStream([t]),e})();document.body.appendChild(n),n.play().catch((e=>{this.logger.warning(`Cannot start audio track: ${t.id}. ${e.message}`),s.Client.getInstance().dispatchEvent({name:g.Events.PlaybackError,element:n,error:e})}))}}}}i([a.LogManager.d_trace(a.LogCategory.CALLMANAGER)],u.prototype,"handleConnectionFailed",null),i([a.LogManager.d_trace(a.LogCategory.CALLMANAGER)],u.prototype,"onICEResult",null),i([a.LogManager.d_trace(a.LogCategory.CALLMANAGER)],u.prototype,"handleConnectionDisconnected",null),i([a.LogManager.d_trace(a.LogCategory.CALLEXSERVER)],u.prototype,"handleSIPInfo",null),i([a.LogManager.d_trace(a.LogCategory.CALLMANAGER)],u.prototype,"handleSipEvent",null),i([a.LogManager.d_trace(a.LogCategory.CALLMANAGER)],u.prototype,"onSignalingConnected",null),i([a.LogManager.d_trace(a.LogCategory.CALLMANAGER)],u.prototype,"onSignalingClosed",null),i([a.LogManager.d_trace(a.LogCategory.CALLMANAGER)],u.prototype,"onSignalingConnectionFailed",null),i([a.LogManager.d_trace(a.LogCategory.CALLMANAGER)],u.prototype,"handleRejectReinvite",null),i([a.LogManager.d_trace(a.LogCategory.CALLMANAGER)],u,"addCustomDataToHeaders",null),t.AbstractCallManager=u},3308:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.Call=void 0;const r=n(125),a=n(3385),s=n(7272),o=n(1150),c=n(84),d=n(8343),l=n(4106),g=n(245),u=n(3317),h=n(7998),p=n(2957),f=n(3869),m=n(4610),C=n(2282),v=n(9699),_=n(308),E=n(8237),S=n(787);var y=s.default.AudioDeviceManager,M=s.default.StreamManager;class R extends m.AbstractCall{constructor(e,t,n,i){super(e),this.signalingConnected=!1,this.settings=i,this.settings.id=e,this.settings.displayName=t,this.settings.mode=m.CallMode.P2P,this.settings.active=!0,this.settings.usedSinkId=null,this.settings.incoming=n,this.settings.state=n?m.CallState.ALERTING:m.CallState.PROGRESSING;r.Client.getInstance().config();this.settings.audioDirections={sendAudio:!0},this.settings.videoDirections="boolean"==typeof i.video?{sendVideo:i.video,receiveVideo:!0}:i.video,this.settings.hasEarlyMedia=!1}get promise(){return this._promise}get peerConnection(){return this._peerConnection}set peerConnection(e){this._peerConnection=e}get stateValue(){return this.settings.state}active(){return this.settings.active}_setActive(e){const t={call:this,old:this.settings.active,new:e,name:C.CallEvents.ActiveUpdated};return this.settings.active=e,this.dispatchEvent(t),this.muteIncomingStreams(e),e}muteIncomingStreams(e){this.getEndpoints().forEach((t=>{t.mediaRenderers.forEach((t=>{t.stream.getTracks().forEach((t=>{t.enabled=e}))}))}))}answer(e,t,n,i){if(this.logger.info(`answer(\n ${JSON.stringify(e)},\n ${JSON.stringify(t)},\n ${JSON.stringify(n)},\n H264first: ${Boolean(i)},\n )`),void 0!==e&&(void 0!==t&&"object"==typeof t||(t={}),t[a.Constants.CALL_DATA_HEADER]=e),void 0!==n&&(n={sendVideo:r.Client.getInstance().config().videoSupport,receiveVideo:r.Client.getInstance().config().videoSupport}),this.settings.state!=m.CallState.ALERTING)throw new Error("WRONG_CALL_STATE");if(n&&"object"==typeof n){const e={sendVideo:!1,receiveVideo:!0};this._peerConnection.setVideoFlags({...e,...n})}this.dispatchEvent({name:"AnswerAccepted",call:this})}decline(e){if(this.logger.info("decline()"),this.settings.state!=m.CallState.ALERTING)throw new Error("WRONG_CALL_STATE");g.default.callRemoteFunction(l.RemoteFunction.rejectCall,this.settings.id,!1,_.CallManager.cleanHeaders(e))}reject(e){if(this.logger.info("reject()"),this.settings.state!=m.CallState.ALERTING)throw new Error("WRONG_CALL_STATE");g.default.callRemoteFunction(l.RemoteFunction.rejectCall,this.settings.id,!0,_.CallManager.cleanHeaders(e))}hangup(e){if(this.settings.state===m.CallState.STOPPING||this.settings.state===m.CallState.ENDED)return void this.logger.info(`Call ${this.settings.id} is stopping or has already stopped`);super.hangup(e),this.logger.info(`Call ${this.settings.id} is disconnected by the user`),this._setState(m.CallState.STOPPING);Object.keys(_.CallManager.get().calls).some((e=>e!==this.settings.id))||(this.logger.info(`There are no other calls ${JSON.stringify(Object.keys(_.CallManager.get().calls))}, clean local streams`),M.clearUmCache().then((()=>{this.logger.info("Streams from cache have been stopped.")})))}sendTone(e){this.logger.info(`sendTone(${e})`),this.settings.active&&this._peerConnection.sendDTMF(e)}isMicrophoneMuted(){const e=this.peerConnection.getMicrophoneState();return this.logger.info(`isMicrophoneMuted: ${e}`),e}muteMicrophone(){this.logger.info("muteMicrophone()"),this.peerConnection.muteMicrophone(!0)}unmuteMicrophone(){this.logger.info("unmuteMicrophone()"),this.peerConnection.muteMicrophone(!1)}showRemoteVideo(e=!0){throw new Error("Deprecated: please use CSS to display each Media Renderer")}setRemoteVideoPosition(e,t){throw new Error("Deprecated: please use CSS to position '#voximplantcontainer' element")}setRemoteVideoSize(e,t){throw new Error("Deprecated: please use CSS to set size of '#voximplantcontainer' element")}setVideoSettings(e,t,n){throw new Error("Deprecated: please use the Hardware interface instead")}getVideoElementId(){throw new Error("Deprecated: please use the Media Renderer interface instead")}onDisconnected(e,t){return new Promise(((n,i)=>{const r=s.default.StreamManager.get()._getScreenSharing(this);if(r&&r.forEach((e=>{s.default.StreamManager.get()._clearScreenSharing(this,e)})),!this.checkState([m.CallState.CONNECTED,m.CallState.ALERTING,m.CallState.PROGRESSING,m.CallState.UPDATING,m.CallState.STOPPING],"onDisconnected"))return i(new Error(`Call in the wrong state ${this.state()}`)),!1;this._setState(m.CallState.ENDED),y.get().clearCallAudioSettings(this),n(!0),this.dispatchEvent({name:"Disconnected",call:this,headers:e,params:t})}))}onStopRinging(){return!!this.checkState([m.CallState.PROGRESSING,m.CallState.CONNECTED],"onStopRinging")&&(this.dispatchEvent({name:"ProgressToneStop",call:this}),!0)}onRingOut(){return!!this.checkState(m.CallState.PROGRESSING,"onRingOut")&&(this.dispatchEvent({name:"ProgressToneStart",call:this}),!0)}onTransferComplete(){return!!this.checkState(m.CallState.CONNECTED,"onTransferComplete")&&(this.dispatchEvent({name:"TransferComplete",call:this}),!0)}onTransferFailed(){return!!this.checkState(m.CallState.CONNECTED,"onTransferFailed")&&(this.dispatchEvent({name:"TransferFailed",call:this}),!0)}onInfo(e,t,n,i,r){if(!this.checkState([m.CallState.CONNECTED,m.CallState.PROGRESSING,m.CallState.ALERTING,m.CallState.UPDATING],"onInfo"))return!1;let s=t+"/"+n;switch(s){case a.Constants.ZINGAYA_IM_MIME_TYPE:{const e=(0,u.deserializeConferenceSipInfoBody)(i);if(null===e){this.dispatchEvent({name:C.CallEvents.MessageReceived,call:this,text:i});break}if((0,u.isValidConferenceProtocolSipInfo)(e)){d.ConfSignaling.handleEvent(e,{call:this,logger:this.logger});break}if((0,u.isViUpgradeSipInfoEventBody)(e)){_.CallManager.get().getConfSignaling(this).connect(e.url,e.rand);break}break}case a.Constants.P2P_SPD_FRAG_MIME_TYPE:{e||this.logger.info("Candidate skipped. Call is not defined");let a=JSON.parse(i);if(!e?.peerConnection){this.logger.info("Candidate skipped. Connection not created yet. Retry set candidates in 1s."),setTimeout((()=>{this.onInfo(e,t,n,i,r)}),1e3);break}for(let t in a)e.peerConnection.addRemoteCandidate(a[t][1],a[t][0]);break}case a.Constants.P2P_SESSION_MIME_TYPE:case a.Constants.VI_CONF_PARTICIPANT_INFO_ADDED:case a.Constants.VI_CONF_PARTICIPANT_INFO_REMOVED:case a.Constants.VI_CONF_PARTICIPANT_INFO_UPDATED:break;default:this.dispatchEvent({name:"InfoReceived",call:this,body:i,headers:r,mimeType:s})}return!0}setActive(e){return this.logger.info(`setActive(${e})`),new Promise(((t,n)=>{e!==this.settings.active?this.settings.state==m.CallState.CONNECTED?(this._setActive(e),this.peerConnection.hold(!e),E.CallPromiseResolver.add(this,{resolve:t,reject:n,dispatchEvent:S.dispatchUpdatedEvent.bind(null,this)})):((0,S.dispatchUpdatedEvent)(this,!1,v.CallFailedUpdateReasons.holdCallInWrongState),n({name:C.CallEvents.UpdateFailed,code:11,call:this})):t((0,S.dispatchUpdatedEvent)(this,!1,v.CallFailedUpdateReasons.sameActiveState(e)))}))}canStartSendingCandidates(){void 0===this._peerConnection&&(this._peerConnection=c.PCFactory.get().peerConnections[this.settings.id]),this._peerConnection.canStartSendingCandidates()}sendVideo(e){if(this.logger.info(`sendVideo(${e})`),"boolean"!=typeof e)return Promise.reject((0,S.dispatchUpdatedEvent)(this,!1,v.CallFailedUpdateReasons.wrongTypeOfArgument(e)));if(!this.active())return Promise.reject((0,S.dispatchUpdatedEvent)(this,!1,v.CallFailedUpdateReasons.mediaOnHold));let t=this.peerConnection?this.peerConnection.getTransceivers().filter((e=>"video"===e.sender.track?.kind)):[];const n=s.default.StreamManager.get()._getScreenSharing(this)||[];return this.peerConnection?e&&n.length?new Promise(((t,i)=>{E.CallPromiseResolver.add(this,{resolve:t,reject:i,dispatchEvent:S.dispatchUpdatedEvent.bind(null,this)}),this.settings.videoDirections.sendVideo||(this.settings.videoDirections.sendVideo=!0);const r=n[0];s.default.StreamManager.get()._clearScreenSharing(this,r).then((()=>s.default.StreamManager.get().getCallStream(this,{force:!0,resetDefaultAudio:!1}))).then((t=>{let n=t.getVideoTracks();this.peerConnection.replaceSharingToVideo(n[0],"video"),this.settings.videoDirections.sendVideo=e})).catch((e=>{E.CallPromiseResolver.reject(this,e)}))})):!0===this.settings.videoDirections.sendVideo&&e||!1===this.settings.videoDirections.sendVideo&&!e&&!t.length?(this.logger.info("Resolve sendVideo() without enableVideo()"),Promise.resolve({call:this,name:C.CallEvents.Updated,result:!0})):new Promise(((t,n)=>{this.logger.info(`Going to call enableVideo(${e})`),this.settings.videoDirections.sendVideo=e,this.peerConnection.enableVideo(e),E.CallPromiseResolver.add(this,{dispatchEvent:S.dispatchUpdatedEvent.bind(null,this),resolve:t,reject:n})})):Promise.resolve({call:this,name:C.CallEvents.Updated,result:!0})}sendMedia(e,t){return this._setState(m.CallState.UPDATING),null==e&&(e=this.settings.audioDirections.sendAudio),null==t&&(t=this.settings.videoDirections.sendVideo),this.peerConnection.sendMedia(e,t).then((n=>(null!=t&&(this.settings.videoDirections.sendVideo=t),null!=e&&(this.settings.audioDirections.sendAudio=e),n)))}shareScreen(e,t){return void 0===e&&void 0===t||this.logger.warning("The `showLocalView` and `replaceVideo` arguments of the `shareScreen` method are deprecated since v4.6.0. The `shareScreen` method now replaces local and sent video with screen sharing by default, sending video and sharing screen now unavailable.\nTo send both video and screen sharing in a conference, use the `joinAsSharing` method to join as a separate screen sharing member."),this.logger.info("shareScreen()"),this.settings.state!==m.CallState.CONNECTED?Promise.reject((0,S.dispatchUpdatedEvent)(this,!1,"Call is not connected.")):this.active()?new Promise(((e,t)=>{s.default.StreamManager.get()._getScreenSharing(this).length&&(this.logger.warning("Screen sharing already active."),t(new Error("Screen sharing already active."))),f.default.isScreenSharingSupported()?s.default.StreamManager.get()._newScreenSharing(this).then((async n=>{if(this.settings.videoDirections.sendVideo)if(this.settings.isConference&&this.settings.simulcast)await this.peerConnection.replaceVideoOrSharingConferenceSimulcast(n.stream,"sharing"),e((0,S.dispatchUpdatedEvent)(this,!0));else{let t=[];n.stream.getTracks().forEach((e=>{"video"===e.kind&&t.push(this.peerConnection.replaceSharingToVideo(e,"sharing"))})),Promise.all(t).then((()=>{this.peerConnection.restoreMute(),e((0,S.dispatchUpdatedEvent)(this,!0))}))}else this.peerConnection.addCustomMedia(n.stream),E.CallPromiseResolver.add(this,{resolve:t=>{this.peerConnection.restoreMute(),s.default.StreamManager.get().isLocalVideoRequested&&s.default.StreamManager.get().updateLocalVideo(h.MediaRendererKind.Sharing),e(t)},reject:t,dispatchEvent:S.dispatchUpdatedEvent.bind(null,this)})})).catch((e=>{this.logger.warning(e.message),t(e)})):(this.logger.warning("Sorry, this browser does not support screen sharing."),t(new Error("Sorry, this browser does not support screen sharing.")))})):Promise.reject((0,S.dispatchUpdatedEvent)(this,!1,v.CallFailedUpdateReasons.mediaOnHold))}stopSharingScreen(){return this.logger.info("stopSharingScreen()"),this.active()?new Promise(((e,t)=>{const n=s.default.StreamManager.get()._getScreenSharing(this);if(n){let i=n.length;n.forEach((n=>{s.default.StreamManager.get()._clearScreenSharing(this,n).then((()=>{this.settings.videoDirections.sendVideo?(s.default.StreamManager.get().updateCallStream(this),E.CallPromiseResolver.add(this,{resolve:e,reject:t,dispatchEvent:S.dispatchUpdatedEvent.bind(null,this)})):(this.peerConnection.removeCustomMedia(n.stream),E.CallPromiseResolver.add(this,{resolve:t=>{this.settings.videoDirections.sendVideo&&this.settings.simulcast&&this.settings.isConference&&this.peerConnection.getTransceivers().forEach((e=>{if("inactive"!==e.currentDirection&&e.sender.track&&"video"===e.sender.track.kind){const t=p.Utils.buildSimulcastLayers({trackSettings:e.sender.track.getSettings(),trackType:"video",profileName:this.settings.simulcastProfileName});this.peerConnection.setEncodingsParams(e,t)}})),n.stream=void 0,i--,i<=0&&(s.default.StreamManager.get().updateLocalVideo(h.MediaRendererKind.Video),this.peerConnection.restoreMute(),e(t))},reject:t,dispatchEvent:S.dispatchUpdatedEvent.bind(null,this)}))})).catch((e=>{this.logger.warning(e.message),t(e)}))}))}else this.logger.warning("Sorry, screen sharing not started yet."),t(new Error("Sorry, screen sharing not started yet."))})):Promise.reject((0,S.dispatchUpdatedEvent)(this,!1,v.CallFailedUpdateReasons.mediaOnHold))}getRemoteAudioStreams(){throw new Error("Deprecated: please use the Media Renderer interface of each call instead")}getRemoteVideoStreams(){throw new Error("Deprecated: please use the Media Renderer interface of each call instead")}useAudioOutput(e){throw new Error("Deprecated: please use the Media Renderer interface of each call instead")}getAudioElementId(){throw new Error("Deprecated: please use the Media Renderer interface of each call instead")}runIncomingReInvite(e,t){if(this.settings.state===m.CallState.UPDATING)g.default.callRemoteFunction(l.RemoteFunction.rejectReInvite,this.settings.id,{});else{this._setState(m.CallState.UPDATING);const n=_.CallManager.get().isSDPHasVideo(t);this.peerConnection.handleRemoteOffer(e,t,n).then((()=>{this.peerConnection.restoreMute(),this.peerConnection.restoreVideoSending()}))}}setActiveForce(e){this._setActive(e)}getEndpoints(){return _.CallManager.get().getEndpointManager(this)?.getEndpoints()||[]}scaleVideoResolutionDownBy(e){const t=[];return this.peerConnection.getTransceivers().forEach((n=>{if(n.currentDirection&&-1!==n.currentDirection.indexOf("send")||n.direction&&-1!==n.direction.indexOf("send")){const i=n.sender.getParameters();-1!=e?i.encodings[0].scaleResolutionDownBy=e:delete i.encodings[0].scaleResolutionDownBy,t.push(n.sender.setParameters(i))}})),Promise.all(t)}_traceName(){return"Call"}}i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"active",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"_setActive",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"answer",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"decline",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"reject",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"hangup",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"sendTone",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"isMicrophoneMuted",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"muteMicrophone",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"unmuteMicrophone",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"showRemoteVideo",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"setRemoteVideoPosition",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"setRemoteVideoSize",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"setVideoSettings",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"getVideoElementId",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"onDisconnected",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"onStopRinging",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"onRingOut",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"onTransferComplete",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"onTransferFailed",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"onInfo",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"setActive",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"canStartSendingCandidates",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"sendVideo",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"shareScreen",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"stopSharingScreen",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"getRemoteAudioStreams",null),i([o.LogManager.d_trace(o.LogCategory.CALL)],R.prototype,"getRemoteVideoStreams",null),i([o.LogManager.d_trace(o.LogCategory.CLIENT)],R.prototype,"useAudioOutput",null),i([o.LogManager.d_trace(o.LogCategory.CLIENT)],R.prototype,"getAudioElementId",null),i([o.LogManager.d_trace(o.LogCategory.CLIENT)],R.prototype,"runIncomingReInvite",null),i([o.LogManager.d_trace(o.LogCategory.CLIENT)],R.prototype,"setActiveForce",null),t.Call=R},6081:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CallError=void 0,function(e){e[e.INSUFFICIENT_FUNDS=402]="INSUFFICIENT_FUNDS",e[e.ACCESS_DENIED=403]="ACCESS_DENIED",e[e.INVALID_NUMBER=404]="INVALID_NUMBER",e[e.NUMBER_IS_UNAVAILABLE=480]="NUMBER_IS_UNAVAILABLE",e[e.NUMBER_IS_BUSY=486]="NUMBER_IS_BUSY",e[e.TERMINATED=487]="TERMINATED",e[e.INTERNAL_ERROR=500]="INTERNAL_ERROR",e[e.REJECTED=603]="REJECTED",e[e.NOT_CONNECTED_TO_VOXIMPLANT=1003]="NOT_CONNECTED_TO_VOXIMPLANT",e[e.NOT_AUTHORIZED=1004]="NOT_AUTHORIZED",e[e.HTTP_NOT_SECURE=1008]="HTTP_NOT_SECURE",e[e.FAILED_TO_CREATE_PEER_CONNECTION=1009]="FAILED_TO_CREATE_PEER_CONNECTION"}(t.CallError||(t.CallError={}))},2282:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CallEvents=void 0,function(e){e[e.Connected="Connected"]="Connected",e[e.Disconnected="Disconnected"]="Disconnected",e[e.Failed="Failed"]="Failed",e[e.ProgressToneStart="ProgressToneStart"]="ProgressToneStart",e[e.ProgressToneStop="ProgressToneStop"]="ProgressToneStop",e[e.MessageReceived="onSendMessage"]="MessageReceived",e[e.InfoReceived="InfoReceived"]="InfoReceived",e[e.TransferComplete="TransferComplete"]="TransferComplete",e[e.TransferFailed="TransferFailed"]="TransferFailed",e[e.ICETimeout="ICETimeout"]="ICETimeout",e[e.RTCStatsReceived="RTCStatsReceived"]="RTCStatsReceived",e[e.CallStatsReceived="CallStatsReceived"]="CallStatsReceived",e[e.MediaElementCreated="MediaElementCreated"]="MediaElementCreated",e[e.MediaElementRemoved="MediaElementRemoved"]="MediaElementRemoved",e[e.ICECompleted="ICECompleted"]="ICECompleted",e[e.Updated="Updated"]="Updated",e[e.PendingUpdate="PendingUpdate"]="PendingUpdate",e[e.UpdateFailed="UpdateFailed"]="UpdateFailed",e[e.LocalVideoStreamAdded="LocalVideoStreamAdded"]="LocalVideoStreamAdded",e[e.EndpointAdded="EndpointAdded"]="EndpointAdded",e[e.EndpointRemoved="EndpointRemoved"]="EndpointRemoved",e[e.StateUpdated="StateUpdated"]="StateUpdated",e[e.ActiveUpdated="ActiveUpdated"]="ActiveUpdated",e[e.QualityIssueCodecMismatch="QualityIssueCodecMismatch"]="QualityIssueCodecMismatch",e[e.QualityIssueHighMediaLatency="QualityIssueHighMediaLatency"]="QualityIssueHighMediaLatency",e[e.QualityIssueICEDisconnected="QualityIssueICEDisconnected"]="QualityIssueICEDisconnected",e[e.QualityIssueLocalVideoDegradation="QualityIssueLocalVideoDegradation"]="QualityIssueLocalVideoDegradation",e[e.QualityIssueLowBandwidth="QualityIssueLowBandwidth"]="QualityIssueLowBandwidth",e[e.QualityIssueNoAudioSignal="QualityIssueNoAudioSignal"]="QualityIssueNoAudioSignal",e[e.QualityIssuePacketLoss="QualityIssuePacketLoss"]="QualityIssuePacketLoss",e[e.SharingStopped="SharingStopped"]="SharingStopped"}(t.CallEvents||(t.CallEvents={}))},304:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.CallExMedia=void 0;const r=n(3308),a=n(1150),s=n(4106),o=n(3385),c=n(125),d=n(7272),l=n(245),g=n(3421);class u extends r.Call{answer(e,t,n,i){super.answer(e,t,n,i),void 0!==e&&(void 0!==t&&"object"==typeof t||(t={}),t[o.Constants.CALL_DATA_HEADER]=e),this._answerHeaders=t;c.Client.getInstance().config();return new Promise(((e,t)=>{this._answerPromise=e,this.settings.videoDirections={sendVideo:"object"==typeof n&&n.sendVideo,receiveVideo:!0},i&&(this.rearangeCodecs=g.CodecSorterHelpers.H264Sorter);const r=()=>{d.default.StreamManager.get().getCallStream(this).then((e=>{this._peerConnection.fastAddCustomMedia(e),this._peerConnection.getLocalAnswer().then((e=>{const t={mids:this.peerConnection.getMidKinds()};l.default.callRemoteFunction(s.RemoteFunction.acceptCall,this.id(),this._answerHeaders,e.sdp,t),this._peerConnection._fixFFSoundBug(),this._answerPromise()})).catch((()=>{}))})).catch((e=>t(e)))};this._peerConnection?r():setTimeout(r,600)}))}_traceName(){return"CallExMedia"}}i([a.LogManager.d_trace(a.LogCategory.CALL)],u.prototype,"answer",null),t.CallExMedia=u},8748:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.CallExServer=void 0;const r=n(3308),a=n(308),s=n(1150),o=n(4106),c=n(4610),d=n(245);class l extends r.Call{constructor(e,t,n,i){super(e,t,n,i),this.settings.mode=c.CallMode.SERVER}answer(e,t){super.answer(e,t);const n={mids:this.peerConnection.getMidKinds()};d.default.callRemoteFunction(o.RemoteFunction.acceptCall,this.settings.id,a.CallManager.cleanHeaders(t),n)}_traceName(){return"CallExServer"}}i([s.LogManager.d_trace(s.LogCategory.CALLEXSERVER)],l.prototype,"answer",null),t.CallExServer=l},9699:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CallFailedUpdateReasons=void 0,t.CallFailedUpdateReasons={mediaOnHold:"Operation cannot be performed due to the call is not active",holdCallInWrongState:"Trying to make the call inactive in the wrong state",sameActiveState:e=>"Call already "+(e?"active":"inactive"),wrongTypeOfArgument:e=>`An argument for the sendVideo() method should be boolean type. Has received ${e}`}},308:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.CallManager=void 0;const r=n(2282),a=n(2957),s=n(3947),o=n(3385),c=n(1150),d=n(84),l=n(125),g=n(6746),u=n(4106),h=n(575),p=n(3421),f=n(8879),m=n(7272);var C=m.default.StreamManager;const v=n(8343),_=n(9411),E=n(304),S=n(8748),y=n(9574),M=n(4610),R=n(9553),L=n(245);class I extends _.AbstractCallManager{constructor(){super(),this._calls={},this.logger=c.LogManager.get().createLogger(c.LogCategory.SIGNALING,this._traceName()),L.default.setRPCHandler(h.RemoteEvent.handleIncomingConnection,((e,t,n,i,r,a)=>{this.handleIncomingConnection(e,t,n,i,r,a)})),L.default.setRPCHandler(h.RemoteEvent.handleConnectionConnected,((e,t,n,i,r)=>{this.handleConnectionConnected(e,t,n,r)})),L.default.setRPCHandler(h.RemoteEvent.handleRingOut,(e=>{this.handleRingOut(e)})),L.default.setRPCHandler(h.RemoteEvent.stopRinging,(e=>{this.stopRinging(e)})),L.default.setRPCHandler(h.RemoteEvent.handleTransferStarted,(e=>{this.handleTransferStarted(e)})),L.default.setRPCHandler(h.RemoteEvent.handleTransferComplete,(e=>{this.handleTransferComplete(e)})),L.default.setRPCHandler(h.RemoteEvent.handleTransferFailed,(e=>{this.handleTransferFailed(e)})),L.default.setRPCHandler(h.RemoteEvent.handleReInvite,((e,t,n,i)=>{this.handleInReinvite(e,t,n,i)})),L.default.setRPCHandler(h.RemoteEvent.handleAcceptReinvite,((e,t,n,i)=>{this.handleReinvite(e,t,n,i)})),L.default.setRPCHandler(h.RemoteEvent.startEarlyMedia,((e,t,n,i)=>{const r=this.findCall(e,"startEarlyMedia");r&&(r.settings.hasEarlyMedia=!0),this.startEarlyMedia(e,t,n,i)}))}static get(){return void 0===this.inst&&(this.inst=new I),this.inst}get calls(){return this._calls}getCallInstance(e,t,n,i){const r="3"==this.protocolVersion?new E.CallExMedia(e,t,n,i):new S.CallExServer(e,t,n,i);return this.endpointManagers.set(r.id(),new y.default(r)),this._calls[e]=r,r}call(e){this.checkMaximumCallCount();let t={number:null,video:{sendVideo:!1,receiveVideo:!0},isAudio:!1,customData:null,extraHeaders:{},wiredLocal:!0,wiredRemote:!0,H264first:this._h264first,VP8first:!1,forceActive:!1,extraParams:{}},n=a.Utils.mixObjectToLeft(t,e);n=I.addCustomDataToHeaders(n);let i=a.Utils.generateUUID();if(this._calls[i])throw this.logger.error("Call "+i+" already exists"),new Error("Internal error");const r=this.getCallInstance(i,s.Authenticator.get().displayName,!1,n);n.H264first&&(r.rearangeCodecs=p.CodecSorterHelpers.H264Sorter);let c=!1;return r.settings.active=!0,Object.keys(this._calls).length>1&&!n.forceActive&&(r.setActiveForce(!1),c=!0),void 0===n.extraHeaders[o.Constants.DIRECT_CALL_HEADER]&&"2"==this.protocolVersion?(L.default.callRemoteFunction(u.RemoteFunction.createCall,-1,n.number,n.video,i,null,null,n.extraHeaders,n.extraParams),r.canStartSendingCandidates()):d.PCFactory.get().setupDirectPC(i,g.PeerConnectionMode.P2P,e.video,c).then((e=>{if(r.peerConnection=d.PCFactory.get().peerConnections[i],this.checkCallStateAndClosePC(r))return;const t={mids:r.peerConnection.getMidKinds()};L.default.callRemoteFunction(u.RemoteFunction.createCall,-1,n.number,!0,i,null,null,n.extraHeaders,"",e.sdp,t),r.canStartSendingCandidates()})).catch((e=>{this.handleConnectionFailed(r.id(),403,"Media access denied",{})})),r.sendVideo(n.video.sendVideo||!1).catch((()=>{})),r}callConference(e){this.checkMaximumCallCount();let t={number:null,video:{sendVideo:!1,receiveVideo:!1},customData:null,extraHeaders:{},wiredLocal:!0,wiredRemote:!0,H264first:this._h264first,VP8first:!1,forceActive:!1,extraParams:{},simulcast:!1},n=a.Utils.mixObjectToLeft(t,e);n=I.addCustomDataToHeaders(n);let i=a.Utils.generateUUID();if(this._calls[i])throw this.logger.error("Call "+i+" already exists"),new Error("Internal error");const r=this.getCallInstance(i,s.Authenticator.get().displayName,!1,n);n.H264first&&(r.rearangeCodecs=p.CodecSorterHelpers.H264ConfSorter);let o=!1;r.settings.active=!0,r.settings.isConference=!0,Object.keys(this._calls).length>1&&!n.forceActive&&(r.setActiveForce(!1),o=!0);const c=d.PCFactory.get();if(c.iceConfig?.iceServers){const e=c.iceConfig.iceServers.filter((({credential:e})=>!e));c.iceConfig.iceServers=e}return c.setupDirectPC(i,g.PeerConnectionMode.CONFERENCE,e.video,o).then((e=>{if(r.peerConnection=d.PCFactory.get().peerConnections[i],this.checkCallStateAndClosePC(r))return;const t={mids:r.peerConnection.getMidKinds()};L.default.callRemoteFunction(u.RemoteFunction.callConference,-1,n.number,!0,i,null,null,n.extraHeaders,"",e.sdp,t),r.canStartSendingCandidates()})).catch((e=>{this.handleConnectionFailed(r.id(),403,"Media access denied",{})})),r.sendVideo(n.video.sendVideo||!1),this.confEpManagerMap.set(r.id(),new R.ConferenceEndpointManager(r)),this.wsConfMap.set(r.id(),new v.ConfSignaling(r)),r}getConferenceEndpointManager(e){return this.confEpManagerMap.get(e.id())}getConfSignaling(e){return this.wsConfMap.get(e.id())}isSDPHasVideo(e){const t=e.indexOf("m=video");if(-1===t)return!1;const n=e.indexOf("a=sendrecv",t),i=e.indexOf("a=sendonly",t),r=e.indexOf("m=",t);return-1!==n&&(n<r||-1===r)||-1!==i&&(i<r||-1===r)}transferCall(e,t){let n=[e,t];for(let e=0;e<n.length;e++){let t=this._calls[n[e].id()];if(!t)return void this.logger.error("trying to transfer unknown call "+t.id());if(t.stateValue!=M.CallState.CONNECTED)return void this.logger.error("trying to transfer call "+t.id()+" in state "+t.state())}L.default.callRemoteFunction(u.RemoteFunction.transferCall,e.id(),t.id())}async removeCall(e){const t=this._calls[e];if(super.removeCall(e),t?.settings.isConference&&t?.settings.mixedAudioTrackID){const e=document.getElementById(t.settings.mixedAudioTrackID);e&&(e.removeAttribute?.("src"),e.srcObject=null,e.parentElement?.removeChild(e))}await m.default.StreamManager.get().updateLocalVideo();Object.values(this._calls).some((e=>e.state()!==M.CallState.ENDED))||C.clearUmCache().then((()=>{this.logger.info("Streams from cache have been stopped.")}))}setProtocolVersion(e){this.protocolVersion=e}useVideoSource(e){let t=Object.keys(this._calls).length;return new Promise(((n,i)=>{for(let r in this._calls)if(this._calls.hasOwnProperty(r)){const a=this._calls[r];m.default.CameraManager.get().setCallVideoSettings(a,{...m.default.CameraManager.get().getCallVideoSettings(a),cameraId:e}),m.default.StreamManager.get().updateCallStream(a).then((e=>{t--,t<=0&&n()}),(e=>{i(e)}))}}))}setVideoSettings(e){let t=Object.keys(this._calls).length;return new Promise(((n,i)=>{0===t&&n();for(let r in this._calls)if(this._calls.hasOwnProperty(r)){const a=this._calls[r];m.default.CameraManager.get().setCallVideoSettings(a,m.default.CameraManager.legacyParamConverter(e)).then((e=>{t--,t<=0&&n()}),(e=>{i(e)}))}}))}useAudioSource(e){let t=Object.keys(this._calls).length;return new Promise(((n,i)=>{0===t&&n();for(let r in this._calls)if(this._calls.hasOwnProperty(r)){const a=this._calls[r];m.default.AudioDeviceManager.get().setCallAudioSettings(a,{...m.default.AudioDeviceManager.get().getCallAudioSettings(a),inputId:e}).then((e=>{t--,t<=0&&n()}),(e=>{i(e)}))}}))}handleIncomingConnection(e,t,n,i,r,a){if(this._calls[e])throw this.logger.error("Call "+e+" already exists"),new Error("Internal error");const s=f.SDPMuggle.detectDirections(r).some((e=>"video"===e.type&&("sendonly"===e.direction||"sendrecv"===e.direction)));let o={number:t,extraHeaders:i,video:s,isAudio:!s,wiredLocal:!0,wiredRemote:!0,forceActive:!1};const c=this.getCallInstance(e,n,!0,o);this._h264first&&(c.rearangeCodecs=p.CodecSorterHelpers.H264Sorter);let g=!1;c.settings.active=!0,Object.keys(this._calls).length>1&&(c.setActiveForce(!1),g=!0);let u=[];f.SDPMuggle.checkIsVimsSectionExistsIn(r)&&!window.__VIIceServer__||(u=this.iceServers[e],f.SDPMuggle.checkIsVimsSectionExistsIn(r)||(c.settings.isDirect=!0));let h=r;c.settings.incoming&&(h=f.SDPMuggle.fixSetupSection(h)),c.settings.isDirect&&(h=f.SDPMuggle.recoverVideoFmts(h,this.logger)),d.PCFactory.get().incomeDirectPC(e,{receiveVideo:!0,sendVideo:!0},h,g,u).then((a=>{c.peerConnection=a,l.Client.getInstance().onIncomingCall(e,t,n,i,this.isSDPHasVideo(r))})),c.sysOn("AnswerAccepted",(e=>{if(!c.settings.isConference&&a){this.endpointManagers.get(c.id()).setMIDInfo(a),c.canStartSendingCandidates()}})),this.handleConfirmingIncomingConnection(c)}handleConfirmingIncomingConnection(e){e.settings.state!==M.CallState.ENDED&&L.default.callRemoteFunction(u.RemoteFunction.confirmIncomingConnection,e.id())}handleRingOut(e){let t=this.findCall(e,"handleRingOut");t&&(l.Client.getInstance().playProgressTone(!0),t.onRingOut())}async handleConnectionConnected(e,t,n,i){let r=this.findCall(e,"handleConnectionConnected");if(r){if(this.logger.info(`handleConnectionConnected(), received SDP: \n${n}`),!r.settings.isConference&&i){this.endpointManagers.get(r.id()).setMIDInfo(i)}this.patchAudioMixConf(r,i),n&&!f.SDPMuggle.checkIsVimsSectionExistsIn(n)&&(r.settings.isDirect=!0),r.signalingConnected=!0,r.onConnected(t,n);try{await m.default.StreamManager.get().updateLocalVideo()}catch(e){this.logger.error(`handleConnectionConnected(): updating local video has failed ${JSON.stringify(e)}`)}if(void 0!==n&&n.length>0){const e=n.indexOf("m=video");if(-1!==e){const t=n.indexOf("a=sendrecv",e),i=n.indexOf("a=sendonly",e),r=n.indexOf("a=recvonly",e),a=n.indexOf("a=inactive",e);-1===t&&-1===i&&-1===r&&-1===a&&(n+="a=inactive\r\n")}r.settings.hasEarlyMedia||r.peerConnection.processRemoteAnswer(t,n)}}}startEarlyMedia(e,t,n,i){let r=this.findCall(e,"startEarlyMedia");if(r){if(this.logger.info(`startEarlyMedia(), received SDP: \n${n}`),r.settings.hasEarlyMedia=!0,void 0!==n&&(r.peerConnection.processRemoteAnswer(t,n),!r.settings.isConference&&i)){this.endpointManagers.get(r.id()).setMIDInfo(i)}l.Client.getInstance().stopProgressTone()}}stopRinging(e){let t=this.findCall(e,"stopRinging");t&&(l.Client.getInstance().stopProgressTone(),t.onStopRinging())}handleTransferStarted(e){}handleTransferComplete(e){let t=this.findCall(e,"handleTransferComplete");t&&t.onTransferComplete()}handleTransferFailed(e){let t=this.findCall(e,"handleTransferFailed");t&&t.onTransferFailed()}async handleReinvite(e,t,n,i){let r=this.findCall(e,"handleReinvite");if(!r)return;if(!r.settings.isConference&&i&&r.active()){const e=this.getEndpointManager(r);if(!e)return void this.logger.warning(`Endpoint manager not found for call ${r.id()}. Skipping process handle reinvite.`);await e.setMIDInfo(i)}const a=this.isSDPHasVideo(n);let s=n;r.settings.isDirect&&(s=f.SDPMuggle.recoverVideoFmts(s,this.logger)),r.peerConnection.handleReinvite(t,s,a)}handleInReinvite(e,t,n,i){let a=this.findCall(e,"handleReinvite");if(!a)return;this.logger.info(`handleInReinvite(), received SDP: \n${n}`);const s=this.getEndpointManager(a);s?s.setMIDInfo(i).then((()=>{let e=n;a.settings.incoming&&(e=f.SDPMuggle.fixSetupSection(e)),a.settings.isDirect&&(e=f.SDPMuggle.recoverVideoFmts(e,this.logger)),a.runIncomingReInvite(t,e),a.dispatchEvent({name:r.CallEvents.PendingUpdate,result:!0,call:a})})):this.logger.warning(`Endpoint manager not found for call ${a.id()}. Skipping process handle in reinvite.`)}checkCallStateAndClosePC(e){const t=e.state();return(t===M.CallState.STOPPING||t===M.CallState.ENDED)&&(this.logger.info(`Call ${e.id()} in ${t} state. PeerConnection will be closed.`),e.peerConnection.close(),!0)}findCall(e,t){let n=this._calls[e];return""===e&&(n=this._calls[Object.keys(this._calls)[0]]),void 0===n?null:n}recalculateNumCalls(){this._numCalls=0;for(let e in this._calls)this._calls.hasOwnProperty(e)&&this._numCalls++}icerestart(){Object.values(this._calls).filter((e=>![M.CallState.STOPPING,M.CallState.ENDED].includes(e.state()))).forEach((e=>{let t=e.peerConnection.impl.iceConnectionState;this.logger.info(`ICE connection state is ${t} for call ${e.id()}`),e.settings.isDirect&&e.settings.incoming||"stable"!==e.peerConnection.impl.signalingState||"failed"!==t&&"disconnected"!==t||e.connectedPromise.then((()=>{e.peerConnection._runReinvite(!0)}))}))}_traceName(){return"CallManager"}}i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"call",null),i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"removeCall",null),i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"useVideoSource",null),i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"setVideoSettings",null),i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"useAudioSource",null),i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"handleIncomingConnection",null),i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"handleRingOut",null),i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"handleConnectionConnected",null),i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"stopRinging",null),i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"handleTransferStarted",null),i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"handleTransferComplete",null),i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"handleTransferFailed",null),i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"handleReinvite",null),i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"handleInReinvite",null),i([c.LogManager.d_trace(c.LogCategory.CALLMANAGER)],I.prototype,"findCall",null),t.CallManager=I},8237:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CallPromiseResolver=void 0;class n{static add(e,t){const n=this.callPromisesMap.get(e)||[];this.callPromisesMap.set(e,n.concat(t)),this.setCallPromiseTimeout(e,t)}static remove(e){const t=this.callPromisesMap.get(e);if(t){this.callPromisesMap.delete(e);for(const e of t)this.clearCallPromiseTimeout(e)}}static resolve(e){const t=this.callPromisesMap.get(e);if(t){for(const e of t){const t=e.dispatchEvent?.(!0);e.resolve(t)}this.remove(e)}}static reject(e,t){const n=this.callPromisesMap.get(e);if(n){for(const e of n){const n=e.dispatchEvent?.(!1,t);e.reject(n)}this.remove(e)}}static setCallPromiseTimeout(e,t){const n=setTimeout((()=>{this.reject(e,"Handling a reinvite has timed out")}),3e3);this.timeoutIdMap.set(t,n)}static clearCallPromiseTimeout(e){const t=this.timeoutIdMap.get(e);t&&(clearTimeout(t),this.timeoutIdMap.delete(e))}}t.CallPromiseResolver=n,n.callPromisesMap=new WeakMap,n.timeoutIdMap=new WeakMap},9144:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Endpoint=void 0;const i=n(3576),r=n(8597),a=n(1150);class s extends i.EventTarget{constructor(e=!0){super(),this.isDefault=e,this.sipUri="",this.displayName="",this.userName="",this.wasAdded=!1,this.mediaRenderers=[],this.addDefaultEventListener(r.EndpointEvents.RemoteMediaAdded,(e=>{e.mediaRenderer.renderDefault()})),this.logger=a.LogManager.get().createLogger(a.LogCategory.ENDPOINT,`${this._traceName()} ${this.id}`)}enableAll(){this.mediaRenderers.map((e=>e.enable()))}disableAll(){this.mediaRenderers.map((e=>e.disable()))}useAudioOutput(e){this.logger.info(`useAudioOutput(${e})`),this.mediaRenderers&&this.mediaRenderers.forEach((t=>t.useAudioOutput(e)))}updateInfo(e){this.place=e.place,this.sipUri=e.sipURI,this.displayName=e.displayName,this.userName=e.username}_traceName(){return"Endpoint"}}t.Endpoint=s},8597:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EndpointEvents=void 0,function(e){e.InfoUpdated="InfoUpdated",e.Removed="Removed",e.RemoteMediaAdded="RemoteMediaAdded",e.RemoteMediaRemoved="RemoteMediaRemoved",e.RemoteMediaUpdated="RemoteMediaUpdated",e.RTCStatsReceived="RTCStatsReceived",e.VoiceStart="VoiceStart",e.VoiceEnd="VoiceEnd",e.MediaRenderDisabled="MediaRenderDisabled",e.MediaRenderEnabled="MediaRenderEnabled"}(t.EndpointEvents||(t.EndpointEvents={}))},9574:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0});const r=n(9144),a=n(3992),s=n(2282),o=n(8597),c=n(7222),d=n(8707),l=n(308),g=n(7998);class u{constructor(e){this.call=e,this.transceiverBucket=[],this.displayRules={new:{audio:["default"],video:["default"]}},this.transceiverEndpointHashMap=new WeakMap,this.activeEndpoints=new Map,this.activeMR=new Map,this.mutex=new a.TaskMutex,this.endpointInfo={endpoints:{},reinviteCauses:[]}}setDisplayRules(e){throw new Error("not implemented")}setMIDInfo(e){const t=JSON.parse(e);t.endpoints[""]&&(t.endpoints[this.call.id()]=t.endpoints[""],delete t.endpoints[""]);const n=this.diffEndpoints(t);this.endpointInfo=t;for(let e in n.added)n.added.hasOwnProperty(e)&&this.constructEndpoint(e,n.added[e]);for(let e in n.removed)n.removed.hasOwnProperty(e)&&this.destructEndpoint(e);for(let e in n.changed)if(n.changed.hasOwnProperty(e)){const i=this.activeEndpoints.get(e);for(let r in n.changed[e].midDiff.added)n.changed[e].midDiff.added.hasOwnProperty(r)&&this.transceiverBucket.forEach((n=>{n.mid===r&&this.createNewMR(n,i,t.endpoints[e].mids)}));for(let r in n.changed[e].midDiff.changed)if(n.changed[e].midDiff.changed.hasOwnProperty(r)){const a=this.activeMR.get(r);a?(a.kind=n.changed[e].midDiff.changed[r],i.dispatchEvent({name:o.EndpointEvents.RemoteMediaUpdated,call:this.call,endpoint:i,mediaRenderer:a})):this.transceiverBucket.forEach((n=>{n.mid===r&&this.createNewMR(n,i,t.endpoints[e].mids)}))}for(let r in n.changed[e].midDiff.removed)if(n.changed[e].midDiff.removed.hasOwnProperty(r)){let n=t.endpoints[e].mids;if("ViewerCall"===this.call._traceName()&&Object.keys(n).find((e=>"audio"===n[e]))){const e=this.activeMR.get(r);e&&(e.kind=g.MediaRendererKind.Audio,e.stream.getVideoTracks().forEach((t=>{t.stop(),e.stream.removeTrack(t)})),this.activeMR.delete(r)),i.dispatchEvent({name:o.EndpointEvents.RemoteMediaUpdated,call:this.call,endpoint:i,mediaRenderer:e})}else{const e=this.activeMR.get(r);this.removeMediaRenderer(i,e),this.activeMR.delete(r)}}}}updateTransceiver(e){if(!e.mid)return;this.transceiverBucket.find((t=>t===e))||this.transceiverBucket.push(e);const t=this.searchEndpointByMid(e.mid);t&&this.createNewMR(e,t.endpoint,t.mids)}getEndpointInfo(){return this.endpointInfo}destructEndpoint(e){const t=this.activeEndpoints.get(e);t&&(t.mediaRenderers.forEach((e=>{t.dispatchEvent({name:o.EndpointEvents.RemoteMediaRemoved,call:this.call,endpoint:t,mediaRenderer:e}),e.mids.forEach((e=>this.activeMR.delete(e))),e.clear()})),this.activeEndpoints.delete(e),t.dispatchEvent({name:o.EndpointEvents.Removed,call:this.call,endpoint:t}),this.call.dispatchEvent({name:s.CallEvents.EndpointRemoved,call:this.call,endpoint:t}))}makeMids(e){const t={};return d.default.parse(e).media.forEach(((e,n)=>{const i=e.attr.find((e=>"mid"===e.name));t[i?i.value:n]=e.descr.media})),{endpoints:{[this.call.id()]:{place:0,type:"call",mids:t}},reinviteCauses:[]}}constructEndpoint(e,t,n=!1){const i=new r.Endpoint(n);let a;i.id=e,a=this.call.settings.isConference?this.getDataForConference({id:e,place:t.place}):{id:e,place:t.place,displayName:this.call.settings.displayName,sipURI:"",username:""},i.updateInfo(a),this.activeEndpoints.set(e,i),this.call.dispatchEvent({name:s.CallEvents.EndpointAdded,endpoint:i,call:this.call}),this.transceiverBucket.forEach((e=>this.updateTransceiver(e)))}getDataForConference({id:e,place:t}){const n={id:e,place:t,displayName:"",sipURI:"",username:""},i=this.endpointInfo.reinviteCauses.find((t=>t.id===e));return i&&(i.displayName&&(n.displayName=i.displayName),i.sipURI&&(n.sipURI=i.sipURI),i.username&&(n.username=i.username)),n}diffMids(e,t){const n={added:{},changed:{},removed:{},unchanged:{}};let i=!1;for(let r in t)t.hasOwnProperty(r)&&(e.hasOwnProperty(r)?e[r]!==t[r]?(n.changed[r]=t[r],i=!0):n.unchanged[r]=t[r]:(n.added[r]=t[r],i=!0));for(let r in e)e.hasOwnProperty(r)&&!t.hasOwnProperty(r)&&(n.removed[r]=e[r],i=!0);return{result:i,diff:n}}searchEndpointByMid(e){for(let t in this.endpointInfo.endpoints)if(this.endpointInfo.endpoints.hasOwnProperty(t)&&this.endpointInfo.endpoints[t].mids[e])return{endpoint:this.activeEndpoints.get(t),mids:this.endpointInfo.endpoints[t].mids};return null}getEndpoints(){return Array.from(this.activeEndpoints.values())}diffEndpoints(e){const t={added:{},changed:{},removed:{},unchanged:{}};for(let n in e.endpoints)if(e.endpoints.hasOwnProperty(n))if(this.endpointInfo.endpoints.hasOwnProperty(n)){const i=this.diffMids(this.endpointInfo.endpoints[n].mids,e.endpoints[n].mids);i.result?t.changed[n]={...e.endpoints[n],midDiff:i.diff}:t.unchanged[n]=e.endpoints[n]}else t.added[n]=e.endpoints[n];for(let n in this.endpointInfo.endpoints)this.endpointInfo.endpoints.hasOwnProperty(n)&&!e.endpoints.hasOwnProperty(n)&&(t.removed[n]=this.endpointInfo.endpoints[n]);return t}createNewMR(e,t,n){if(!e.mid)return;this.transceiverEndpointHashMap.set(e,t);const i=this.mediaRendererFabric(e,n);i&&(i.conferenceEpManagerUpdateState=()=>{l.CallManager.get().getConferenceEndpointManager(this.call)?.updateState()},i.conferenceEpManagerUpdateRenderSize=()=>{l.CallManager.get().getConferenceEndpointManager(this.call)?.updateRenderSize()},this.activeMR.set(e.mid,i),t.mediaRenderers.push(i),t.dispatchEvent({name:o.EndpointEvents.RemoteMediaAdded,call:this.call,endpoint:t,mediaRenderer:i}))}mediaRendererFabric(e,t){if(e.mid){if(this.activeMR.has(e.mid))return null;if("ViewerCall"!==this.call._traceName())return new c.MediaRenderer({stream:new MediaStream([e.receiver.track]),kind:t[e.mid],transceivers:[e],mids:[e.mid]});{const n=Object.keys(t),i=this.transceiverBucket.filter((e=>n.includes(e.mid)));if("audio"===t[e.mid])return n.length>i.length?null:2===n.length&&n.length===i.length?new c.MediaRenderer({stream:new MediaStream([i[0].receiver.track,i[1].receiver.track]),kind:g.MediaRendererKind.Video,transceivers:[i[0],i[1]],mids:[i[0].mid,i[1].mid]}):new c.MediaRenderer({stream:new MediaStream([e.receiver.track]),kind:g.MediaRendererKind.Audio,transceivers:[e],mids:[e.mid]});if("video"===t[e.mid]||"sharing"===t[e.mid]){let r=n.find((e=>"audio"===t[e])),a=this.activeMR.get(r),s=i.find((e=>e.mid===r));if(a&&a.element instanceof HTMLVideoElement)return a.kind=g.MediaRendererKind.Video,a.stream.addTrack(e.receiver.track),a.element.srcObject=a.stream,a.transceivers=[e,s],a.mids=[e.mid,s.mid],a;if(a){let n=this.transceiverEndpointHashMap.get(e);this.removeMediaRenderer(n,a);const i=new c.MediaRenderer({stream:new MediaStream([s.receiver.track,e.receiver.track]),kind:t[e.mid],transceivers:[e],mids:[e.mid]});return this.activeMR.set(r,i),i}if(!a&&i.find((e=>e.mid===r))){const n=new c.MediaRenderer({stream:new MediaStream([s.receiver.track,e.receiver.track]),kind:t[e.mid],transceivers:[e],mids:[e.mid]});return this.activeMR.set(r,n),n}return new c.MediaRenderer({stream:new MediaStream([e.receiver.track]),kind:t[e.mid],transceivers:[e],mids:[e.mid]})}}}}removeMediaRenderer(e,t){e.mediaRenderers=e.mediaRenderers.filter((e=>e.id!==t.id)),e.dispatchEvent({name:o.EndpointEvents.RemoteMediaRemoved,call:this.call,endpoint:e,mediaRenderer:t}),t.clear()}}i([(0,a.queueDecorator)()],u.prototype,"setDisplayRules",null),i([(0,a.queueDecorator)()],u.prototype,"setMIDInfo",null),i([(0,a.queueDecorator)()],u.prototype,"updateTransceiver",null),t.default=u},6497:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.SharingCall=void 0;const r=n(3947),a=n(3869),s=n(125),o=n(3385),c=n(9002),d=n(7272),l=n(1150),g=n(3902),u=n(575),h=n(4106),p=n(245),f=n(3317),m=n(1113),C=n(4610),v=n(9411);var _=d.Hardware.AudioDeviceManager;const E=n(2282);class S extends C.AbstractCall{constructor(e,t){super(e),this.pendingCandidates=[],this.signalingConnected=!1,this.settings={id:e,displayName:r.Authenticator.get().displayName,mode:C.CallMode.P2P,number:t.number,video:{sendVideo:!0,receiveVideo:!1},customData:null,extraHeaders:t.extraHeaders,wiredLocal:!0,wiredRemote:!0,H264first:!0,VP8first:!1,forceActive:!1,usedSinkId:null,extraParams:{},active:!0,state:C.CallState.PROGRESSING,audioDirections:{sendAudio:t.audioDirections.sendAudio},videoDirections:{sendVideo:!0,receiveVideo:!1},hasEarlyMedia:!1,incoming:!1,simulcast:!1,isConference:!0,simulcastProfileName:"general"};const n=new RTCPeerConnection;let i;n?(n.addEventListener("icecandidate",(e=>{this.onICECandidate(e.candidate)})),this.getNewScreenSharing().then((t=>{if(null!==t.stream){const r=t.stream.getVideoTracks()[0],a=t.stream.getAudioTracks()[0]||"audio";n.addTransceiver(a,{direction:"sendonly",streams:[t.stream]}),n.addTransceiver(r,{direction:"sendonly",streams:[t.stream]}),n.createOffer({offerToReceiveAudio:!1,offerToReceiveVideo:!1}).then((e=>(i=e,n.setLocalDescription(e)))).then((()=>{this.peerConnection=n;p.default.callRemoteFunction(h.RemoteFunction.callConference,-1,this.settings.number,!0,e,null,null,this.settings.extraHeaders,"",i.sdp,{mids:{0:"audio",1:"sharing"}}),this.canStartSendingCandidates()})).catch((()=>{this.handleConnectionFailed(1001,"",{})}))}else this.handleConnectionFailed(1001,"",{})}))):this.handleConnectionFailed(1001,"",{}),this.setHandlers()}getEndpoints(){return[]}getNewScreenSharing(){return new Promise(((e,t)=>{a.default.getScreenMedia(this.settings.audioDirections.sendAudio).then((t=>{const n={stream:t,renderer:null};t.getTracks().forEach((e=>{e.onended=()=>{this.hangup()}})),e(n)})).catch((e=>{this.logger.error(`Media access denied: ${e?e.message||e.name||e:"unknown"}`),t(e)}))}))}setHandlers(){p.default.setRPCHandler(u.RemoteEvent.handleRejectReinvite,((e,t,n)=>{e===this.settings.id&&this.handleRejectReinvite()})),p.default.setRPCHandler(u.RemoteEvent.handleConnectionDisconnected,((e,t,n)=>{e===this.settings.id&&this.handleConnectionDisconnected(e,t,n)})),p.default.setRPCHandler(u.RemoteEvent.handleConnectionFailed,((e,t,n,i)=>{e===this.settings.id&&this.handleConnectionFailed(t,n,i)})),p.default.setRPCHandler(u.RemoteEvent.handleSIPInfo,((e,t,n,i,r)=>{e===this.settings.id&&this.handleSIPInfo(t,n,i,r)})),p.default.setRPCHandler(u.RemoteEvent.handleConnectionConnected,((e,t,n)=>{e===this.settings.id&&this.handleConnectionConnected(t,n)})),p.default.setRPCHandler(u.RemoteEvent.handleReInvite,((e,t,n)=>{e===this.settings.id&&this.handleInReinvite(t,n)})),p.default.setRPCHandler(u.RemoteEvent.handleAcceptReinvite,((e,t,n)=>{e===this.settings.id&&this.handleReinvite(n)}))}handleRejectReinvite(){this.dispatchEvent({code:20,call:this})}handleInReinvite(e,t){return new Promise((n=>{this.logger.info(`handleInReinvite(), received SDP: \n${t}`);const i=new RTCSessionDescription({sdp:t,type:"offer"});this.peerConnection.setRemoteDescription(i).then((()=>{this.peerConnection.getTransceivers().filter((e=>!["0","1"].includes(e.mid))).forEach((e=>{["inactive","stopped"].includes(e.currentDirection)||(e.direction="inactive")}))})).then((()=>this.peerConnection.createAnswer())).then((t=>{this.peerConnection.setLocalDescription(t).then((()=>{this.restoreRMute();p.default.callRemoteFunction(h.RemoteFunction.acceptReInvite,this.settings.id,e,t.sdp,{mids:{0:"audio",1:"sharing"}}),n()}))})).catch((e=>{this.dispatchEvent({name:"SDP",origin:"handleInReinvite",sdp:this.peerConnection.localDescription,description:`answer_reject: ${e.message}`}),this.logger.error(e.message),n()}))}))}handleConnectionConnected(e,t){return new Promise((n=>{this.logger.info(`handleConnectionConnected(), received SDP: \n${t}`),void 0!==t&&"have-local-offer"===this.peerConnection.signalingState?(this.signalingConnected=!0,this.onConnected(e,t),this.processRemoteAnswer(t).then((()=>n())).catch((e=>{this.logger.error(e),n()}))):(this.logger.error(`handleConnectionConnected: Wrong connection state ${this.peerConnection.signalingState} or empty SDP`),n())}))}handleConnectionDisconnected(e,t,n){s.Client.getInstance().stopProgressTone(),this.peerConnection.getTransceivers().forEach((e=>{const t=e.sender.track;e.sender.replaceTrack(null).then((()=>{t&&(t.onended=null,t.onmute=null,t.stop()),e.direction="inactive"}))})),this.onDisconnected(t,n).catch((t=>{this.logger.error(`Cannot remove the call ${e}: ${t.message}`)}))}handleSIPInfo(e,t,n,i){this.onInfo(this,e,t,n,i)}handleReinvite(e){return new Promise((t=>{this.logger.info(`handleReinvite(), received SDP: \n${e}`),this.processRemoteAnswer(e).then((()=>t())).catch((e=>{this.logger.error(e),t()}))}))}handleConnectionFailed(e,t,n){s.Client.getInstance().stopProgressTone(),this.onFailed(e,t,n)}onDisconnected(e,t){return new Promise(((n,i)=>{_.get().clearCallAudioSettings(this),this._setState(C.CallState.ENDED),this.dispatchEvent({name:"Disconnected",call:this,headers:e,params:t}),n(!0)}))}onInfo(e,t,n,i,r){if(t+"/"+n==o.Constants.ZINGAYA_IM_MIME_TYPE){if(null===(0,f.deserializeConferenceSipInfoBody)(i))return this.dispatchEvent({name:E.CallEvents.MessageReceived,call:this,text:i}),!0}else this.dispatchEvent({name:"InfoReceived",call:this,body:i,headers:r,mimeType:t+"/"+n});return!0}processRemoteAnswer(e){return new Promise(((t,n)=>{if(void 0!==e&&e.length>0){let i={sdp:e,type:g.RTCSdpType.answer};this.peerConnection.setRemoteDescription(i).then((()=>{this.restoreRMute(),t()})).catch((e=>{this.dispatchEvent({name:"SDP",origin:"_processRemoteAnswer",sdp:this.peerConnection.localDescription,description:`answer_reject: ${e.message}`}),n(e)}))}else n()}))}_traceName(){return"ViewerCall"}canStartSendingCandidates(){this.canSendCandidates=!0,this.startCandidateSendTimer()}onICECandidate(e){e&&""!==e.candidate?this.addCandidateToSend("a="+e.candidate,e.sdpMLineIndex):this.logger.info("End of candidates")}addCandidateToSend(e,t){this.pendingCandidates.push([t,e]),this.canSendCandidates&&this.startCandidateSendTimer()}startCandidateSendTimer(){0!==this.pendingCandidates.length&&(this.sendInfo(o.Constants.P2P_SPD_FRAG_MIME_TYPE,JSON.stringify(this.pendingCandidates),{}),this.pendingCandidates=[])}sendInfo(e,t,n){this.logger.info(`sendInfo(${e}, ${JSON.stringify(t)})`);let i,r,a=e.indexOf("/");-1==a?(i="application",r=e):(i=e.substring(0,a),r=e.substring(a+1)),p.default.callRemoteFunction(h.RemoteFunction.sendSIPInfo,this.settings.id,i,r,t,v.AbstractCallManager.cleanHeaders(n))}}i([l.LogManager.d_trace(l.LogCategory.CALL)],S.prototype,"handleConnectionFailed",null),i([l.LogManager.d_trace(l.LogCategory.CALL)],S.prototype,"onDisconnected",null),i([l.LogManager.d_trace(l.LogCategory.RTC)],S.prototype,"onICECandidate",null),i([l.LogManager.d_trace(l.LogCategory.RTC)],S.prototype,"addCandidateToSend",null),i([(0,c.debounceDecorator)(m.SEND_CANDIDATE_DELAY),l.LogManager.d_trace(l.LogCategory.RTC)],S.prototype,"startCandidateSendTimer",null),t.SharingCall=S},4211:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const i=n(6497),r=n(2957),a=n(4610),s=n(2282),o=n(1150);class c{constructor(){this.calls=new Map,this.logger=o.LogManager.get().createLogger(o.LogCategory.SIGNALING,"SharingCallManager")}static get(){return this.inst??(this.inst=new c),this.inst}findCall(e){return this.calls.get(e)}call(e){const t=r.Utils.generateUUID(),n=new i.SharingCall(t,e);return this.calls.set(t,n),n}removeCall(e){this.calls.delete(e)}async hangupAllCalls(){const e=Array.from(this.calls.values()).map((e=>new Promise((t=>{const n=setTimeout((()=>{this.logger.info(`The timeout of disconnected event for the call ${e.id()} has reached.`),this.removeCall(e.id()),e.settings.state=a.CallState.ENDED,t()}),1500);e.on(s.CallEvents.Disconnected,(()=>{clearTimeout(n),t()}),{once:!0}),e.hangup()}))));await Promise.all(e)}}t.default=c},8582:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.ViewerCall=void 0;const r=n(3947),a=n(3385),s=n(9002),o=n(4855),c=n(1150),d=n(3902),l=n(8343),g=n(4106),u=n(245),h=n(3317),p=n(1113),f=n(4610),m=n(9411),C=n(2282),v=n(9774);class _ extends f.AbstractCall{constructor(e,t){super(e),this.pendingCandidates=[],this.signalingConnected=!1,this.settings={id:e,displayName:r.Authenticator.get().displayName,mode:f.CallMode.P2P,number:t.number,video:{sendVideo:!1,receiveVideo:!0},customData:null,extraHeaders:t.extraHeaders,wiredLocal:!0,wiredRemote:!0,H264first:!0,VP8first:!1,forceActive:!1,usedSinkId:null,extraParams:{},active:!0,state:f.CallState.PROGRESSING,audioDirections:{sendAudio:!1},videoDirections:{sendVideo:!1,receiveVideo:!0},hasEarlyMedia:!1,incoming:!1,simulcast:!1,isConference:!0,simulcastProfileName:"general"}}getEndpoints(){return v.ViewerManager.get().getEndpointManager(this).getEndpoints()}onDisconnected(e,t){return new Promise(((n,i)=>{this._setState(f.CallState.ENDED),o.AudioDeviceManager.get().clearCallAudioSettings(this);const r=v.ViewerManager.get().getEndpointManager(this);r?.getEndpoints().forEach((e=>{r?.destructEndpoint(e.id)})),this.dispatchEvent({name:"Disconnected",call:this,headers:e,params:t}),n(!0)}))}onInfo(e,t,n,i,r){let s=t+"/"+n;switch(s){case a.Constants.ZINGAYA_IM_MIME_TYPE:{const e=(0,h.deserializeConferenceSipInfoBody)(i);if(null===e){this.dispatchEvent({name:C.CallEvents.MessageReceived,call:this,text:i});break}if((0,h.isValidConferenceProtocolSipInfo)(e)){l.ConfSignaling.handleEvent(e,{call:this,logger:this.logger});break}if((0,h.isViUpgradeSipInfoEventBody)(e)){v.ViewerManager.get().getConfSignaling(this).connect(e.url,e.rand);break}break}default:this.dispatchEvent({name:"InfoReceived",call:this,body:i,headers:r,mimeType:s})}return!0}processRemoteAnswer(e){return new Promise(((t,n)=>{if(void 0!==e&&e.length>0){let i={sdp:e,type:d.RTCSdpType.answer};this.peerConnection.setRemoteDescription(i).then((()=>{this.restoreRMute(),t()})).catch((e=>{this.dispatchEvent({name:"SDP",origin:"_processRemoteAnswer",sdp:this.peerConnection.localDescription,description:`answer_reject: ${e.message}`}),n(e)}))}else n()}))}_traceName(){return"ViewerCall"}canStartSendingCandidates(){this.canSendCandidates=!0,this.startCandidateSendTimer()}onICECandidate(e){e&&""!==e.candidate?this.addCandidateToSend("a="+e.candidate,e.sdpMLineIndex):this.logger.info("End of candidates")}addCandidateToSend(e,t){this.pendingCandidates.push([t,e]),this.canSendCandidates&&this.startCandidateSendTimer()}startCandidateSendTimer(){0!==this.pendingCandidates.length&&(this.sendInfo(a.Constants.P2P_SPD_FRAG_MIME_TYPE,JSON.stringify(this.pendingCandidates),{}),this.pendingCandidates=[])}sendInfo(e,t,n){this.logger.info(`sendInfo(${e}, ${JSON.stringify(t)})`);let i,r,a=e.indexOf("/");-1==a?(i="application",r=e):(i=e.substring(0,a),r=e.substring(a+1)),u.default.callRemoteFunction(g.RemoteFunction.sendSIPInfo,this.settings.id,i,r,t,m.AbstractCallManager.cleanHeaders(n))}}i([c.LogManager.d_trace(c.LogCategory.CALL)],_.prototype,"onDisconnected",null),i([c.LogManager.d_trace(c.LogCategory.RTC)],_.prototype,"onICECandidate",null),i([c.LogManager.d_trace(c.LogCategory.RTC)],_.prototype,"addCandidateToSend",null),i([(0,s.debounceDecorator)(p.SEND_CANDIDATE_DELAY),c.LogManager.d_trace(c.LogCategory.RTC)],_.prototype,"startCandidateSendTimer",null),t.ViewerCall=_},9774:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.ViewerManager=void 0;const r=n(1150),a=n(2957),s=n(4106),o=n(575),c=n(9411),d=n(8582),l=n(9574),g=n(3992),u=n(245),h=n(9553),p=n(8343);class f extends c.AbstractCallManager{constructor(){super(),this.peerConnectionManagers=new WeakMap,this.mutex=new g.TaskMutex,this._calls={},this.logger=r.LogManager.get().createLogger(r.LogCategory.SIGNALING,this._traceName()),u.default.setRPCHandler(o.RemoteEvent.handleConnectionConnected,((e,t,n,i,r)=>{this.handleConnectionConnected(e,t,n,r)})),u.default.setRPCHandler(o.RemoteEvent.handleReInvite,((e,t,n,i)=>{this.handleInReinvite(e,t,n,i)})),u.default.setRPCHandler(o.RemoteEvent.handleAcceptReinvite,((e,t,n)=>{this.handleReinvite(e,t,n)})),u.default.setRPCHandler(o.RemoteEvent.startEarlyMedia,((e,t,n)=>{this.startEarlyMedia(e,t,n)}))}static get(){return void 0===this.inst&&(this.inst=new f),this.inst}get calls(){return this._calls}joinAsViewer(e){let t=a.Utils.generateUUID();if(this._calls[t])throw this.logger.error("Call "+t+" already exists"),new Error("Internal error");const n=new d.ViewerCall(t,e);this._calls[t]=n;const i=f.get().calls[t],r=new RTCPeerConnection;let o;return r.addEventListener("track",(e=>this.onAddTrack(e,n))),r?(r.addEventListener("icecandidate",(e=>{n.onICECandidate(e.candidate)})),r.addTransceiver("audio",{direction:"recvonly"}),r.addTransceiver("video",{direction:"recvonly"}),r.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0}).then((e=>(o=e,r.setLocalDescription(e)))).then((()=>{n.peerConnection=r,this.endpointManagers.set(n.id(),new l.default(n)),u.default.callRemoteFunction(s.RemoteFunction.callConference,-1,n.settings.number,!0,t,null,null,n.settings.extraHeaders,"",o.sdp),n.canStartSendingCandidates()})).catch((()=>{f.get().handleConnectionFailed(i.settings.id,1001,"",{})}))):f.get().handleConnectionFailed(i.settings.id,1001,"",{}),this.confEpManagerMap.set(n.id(),new h.ConferenceEndpointManager(n)),this.wsConfMap.set(n.id(),new p.ConfSignaling(n)),n}getConferenceEndpointManager(e){return this.confEpManagerMap.get(e.id())}getConfSignaling(e){return this.wsConfMap.get(e.id())}_traceName(){return"ViewerManager"}findCall(e,t){let n=this._calls[e];return""===e&&(n=this._calls[Object.keys(this._calls)[0]]),void 0===n?null:n}handleConnectionConnected(e,t,n,i){return new Promise((r=>{let a=this.findCall(e,"handleConnectionConnected");a?(this.logger.info(`handleConnectionConnected(), received SDP: \n${n}`),this.patchAudioMixConf(a,i),void 0!==n&&"have-local-offer"===a.peerConnection.signalingState?(a.signalingConnected=!0,a.onConnected(t,n),a.processRemoteAnswer(n).then((()=>r())).catch((e=>{this.logger.error(e),r()}))):(this.logger.error(`handleConnectionConnected: Wrong connection state ${a.peerConnection.signalingState} or empty SDP`),r())):r()}))}startEarlyMedia(e,t,n){return new Promise((t=>{let i=this.findCall(e,"startEarlyMedia");i?(this.logger.info(`startEarlyMedia(), received SDP: \n${n}`),void 0!==n&&"have-local-offer"===i.peerConnection.signalingState?(i.settings.hasEarlyMedia=!0,i.processRemoteAnswer(n).then((()=>t())).catch((e=>{this.logger.error(e),t()}))):(this.logger.error(`handleConnectionConnected: Wrong connection state ${i.peerConnection.signalingState} or empty SDP`),t())):t()}))}handleReinvite(e,t,n){return new Promise((t=>{let i=this.findCall(e,"handleReinvite");i?(this.logger.info(`handleReinvite(), received SDP: \n${n}`),i.processRemoteAnswer(n).then((()=>t())).catch((e=>{this.logger.error(e),t()}))):t()}))}handleInReinvite(e,t,n,i){return new Promise((r=>{const a=this.findCall(e,"handleInReinvite");if(!a)return void r();this.logger.info(`handleInReinvite(), received SDP: \n${n}`);const o=this.getEndpointManager(a);if(!o)return this.logger.warning(`Endpoint manager not found for call ${a.id()}. Skipping process handle reinvite.`),void r();o.setMIDInfo(i).then((()=>{const e=new RTCSessionDescription({sdp:n,type:"offer"});return a.peerConnection.setRemoteDescription(e)})).then((()=>a.peerConnection.createAnswer())).then((e=>{a.peerConnection.setLocalDescription(e).then((()=>{a.restoreRMute(),u.default.callRemoteFunction(s.RemoteFunction.acceptReInvite,a.settings.id,t,e.sdp),r()}))})).catch((e=>{a.dispatchEvent({name:"SDP",origin:"handleInReinvite",sdp:a.peerConnection.localDescription,description:`answer_reject: ${e.message}`}),this.logger.error(e),r()}))}))}onAddTrack(e,t){if(t){const n=f.get().getEndpointManager(t);n&&n.updateTransceiver(e.transceiver)}}}i([r.LogManager.d_trace(r.LogCategory.CALLMANAGER)],f.prototype,"findCall",null),i([(0,g.queueDecorator)()],f.prototype,"handleConnectionConnected",null),i([(0,g.queueDecorator)()],f.prototype,"startEarlyMedia",null),i([(0,g.queueDecorator)()],f.prototype,"handleReinvite",null),i([(0,g.queueDecorator)()],f.prototype,"handleInReinvite",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],f.prototype,"onAddTrack",null),t.ViewerManager=f},787:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dispatchUpdatedEvent=void 0;const i=n(2282);t.dispatchUpdatedEvent=(e,t,n)=>{const r={name:i.CallEvents.Updated,result:t,call:e,...n&&{reason:n}};return e?.dispatchEvent?.(r),r}},7243:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.scoreG107Generic=t.scoreG107Opus=void 0;const n=(e,t)=>e/2+t+20,i=e=>e<0?1:e>100?4.5:1+.035*e+e*(e-60)*(100-e)*7e-6;t.scoreG107Opus=(e,t,r)=>{let a=0;const s=n(e,r),o=100*t,c=10.2+o/(o+4.3)*121.8;if(s<=100)a=0;else{const e=(Math.log(s)-Math.log(100))/Math.log(2);a=37*(Math.pow(1+Math.pow(e,6),1/6)-3*Math.pow(1+Math.pow(e/3,6),1/6)+2)}const d=(148-a-c+0)/1.48;return Math.max(1,i(d))};t.scoreG107Generic=(e,t,r)=>{const a=n(e,r),s=100*t,o=.024*a+.11*(a-177.3)*(a-177.3<0?0:1),c=Math.max(0,93.2-s),d=.18*c*c-27.9*c+1126.62-o-0;return Math.max(1,i(d))}},125:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.Client=void 0;const r=n(9091),a=n(2089),s=n(3947),o=n(3869),c=n(6081),d=n(304),l=n(308),g=n(4211),u=n(8582),h=n(9774),p=n(141),f=n(3576),m=n(209),C=n(7272),v=n(6230),_=n(1150),E=n(164),S=n(84),y=n(8879),M=n(575),R=n(4106),L=n(245),I=n(4893),T=n(7998),A=n(2957);var O=C.default.StreamManager;const N=n(5826);class b extends f.EventTarget{constructor(){if(super(),this._connected=!1,this.progressToneScript={US:"440@-19,480@-19;*(2/4/1+2)",RU:"425@-19;*(1/3/1)"},this.playingNow=!1,this.serversList=[],this.level=100,this.micRequired=!1,this.videoConstraints=null,this.allowTurnForConferenceCalls=!1,this.progressToneCountry="US",this.progressTone=!0,this.enableTrace=!1,this.showDebugInfo=!1,this.showWarnings=!1,this.RTCsupported=!1,this._deviceEnumAPI=!1,this._h264first=!1,this._VP8first=!1,this.limitVCodecs=void 0,this.limitACodecs=void 0,this.features=[],this._alreadyInitialized=!1,this.disconnectPromise=null,this.needToDispatchConnectionClosed=!1,b.instance)throw new Error("Error - use Voximplant.getInstance()");b.instance=this,this._promises={},o.default.init(),S.PCFactory.get().requireMedia=!1,this.voxCallManager=l.CallManager.get(),this.voxViewerManager=h.ViewerManager.get(),this.setLogLevelAll(_.LogLevel.NONE),L.default.setRPCHandler(M.RemoteEvent.onPCStats,((e,t)=>{S.PCFactory.get().getPeerConnect(e)&&this.dispatchEvent({name:"NetStatsReceived",stats:t})})),this.logger=_.LogManager.get().createLogger(_.LogCategory.CLIENT,this._traceName()),this._defaultSinkId=null,this.loginState=E.LoginState.LOGGED_OFF}get version(){return"4.14.0-3018"}static getInstance(){return void 0===b.instance&&(b.instance=new b),b.instance}playProgressTone(e=!1){(!e||e&&this.progressTone)&&null!==this.progressToneScript[this.progressToneCountry]&&(this.playingNow||this.playToneScript(this.progressToneScript[this.progressToneCountry]),this.playingNow=!0)}stopProgressTone(){this.playingNow&&(this.stopPlayback(),this.playingNow=!1)}onIncomingCall(e,t,n,i,r){const a=l.CallManager.get().calls[e];a&&this.dispatchEvent({name:p.Events.IncomingCall,call:a,headers:i,video:r})}get alreadyInitialized(){return this._alreadyInitialized}validateConfig(e={}){const t=[{key:"node",validate:e=>Object.values(T.ConnectionNode).includes(e)}],n=t.filter((t=>!e?.[t.key]));if(n.length)throw new Error(`Required option "${n.map((e=>e.key)).join(", ")}" is missing in init config. For more details see https://voximplant.com/docs/getting-started/platform/web#initialize-the-sdk`);const i=t.filter((t=>!!t.validate&&!t.validate(e?.[t.key])));if(i.length)throw new Error(`The value of "${i.map((e=>e.key)).join(", ")}" property is invalid in init config. For more details see https://voximplant.com/docs/getting-started/platform/web#initialize-the-sdk`)}init(e){return new Promise((async(t,n)=>{try{this.validateConfig(e)}catch(e){n(e)}this.alreadyInitialized&&n(new Error("WebSDK already initialized")),this._alreadyInitialized=!0,this._config=void 0!==e?e:{},this._config.features?.length&&(this.features=A.Utils.prepareFeatures(this._config.features)),this.allowTurnForConferenceCalls=!0===this._config.allowTurnForConferenceCalls,void 0!==this._config.progressToneCountry&&(this.progressToneCountry=this._config.progressToneCountry),!0!==this._config.progressTone&&(this.progressTone=!1),void 0!==this._config.serverIp&&(this.serverIp=this._config.serverIp),void 0!==this._config.node&&(this.node=this._config.node),void 0!==this._config.enableTrace&&(this.enableTrace=this._config.enableTrace),void 0!==this._config.showDebugInfo&&(this.showDebugInfo=this._config.showDebugInfo),!1!==this._config.showWarnings&&(this.showWarnings=!0),"string"==typeof this._config.videoContainerId&&(this.remoteVideoContainerId=this._config.videoContainerId),"string"==typeof this._config.remoteVideoContainerId&&(this.remoteVideoContainerId=this._config.remoteVideoContainerId),"string"==typeof this._config.localVideoContainerId&&(this.localVideoContainerId=this._config.localVideoContainerId),!1!==this._config.micRequired&&(this.micRequired=!0),void 0!==this._config.videoSupport?this.videoSupport=this._config.videoSupport:this.videoSupport=!1,void 0===this._config.queueType&&(this._config.queueType=T.QueueTypes.ACD),void 0!==this._config.H264first&&(this._h264first=this._config.H264first,l.CallManager.get()._h264first=this._h264first),void 0!==this._config.VP8first&&(this._VP8first=this._config.VP8first);const i=Number(this._config.rtcStatsCollectionInterval);if(isNaN(i)?l.CallManager.get().rtcStatsCollectionInterval=I.DEFAULT_COLLECT_INTERVAL:l.CallManager.get().rtcStatsCollectionInterval=i>0?Math.max(A.Utils.floorTo(i,500),I.MIN_COLLECT_INTERVAL):0,void 0!==b.getInstance().config().experiments&&void 0!==b.getInstance().config().experiments.rtcStatsInquiryInterval?l.CallManager.get().rtcStatsInquiryInterval=b.getInstance().config().experiments.rtcStatsInquiryInterval:l.CallManager.get().rtcStatsInquiryInterval=500,!this._config.protocolVersion||"2"!==this._config.protocolVersion&&"3"!==this._config.protocolVersion?this._callProtocolVersion="3":(this._callProtocolVersion=this._config.protocolVersion,l.CallManager.get().setProtocolVersion(this._callProtocolVersion)),this._config.prettyPrint&&_.LogManager.get().setPrettyPrint(this._config.prettyPrint),this.showWarnings&&this.setLogLevelAll(_.LogLevel.WARNING),this.showDebugInfo&&this.setLogLevelAll(_.LogLevel.INFO),this.enableTrace&&this.setLogLevelAll(_.LogLevel.TRACE),this.logger.info(`SDK version: ${this.version}`),this.logger.info(`init(${JSON.stringify(this._config)})`),!window.isSecureContext){const e="getUserMedia() and other APIs required for the access to the user media devices are not available on insecure origins. You need to switch the application to a secure origin, such as HTTPS.";throw this.logger.error(e),Error(e)}if(this._config.experiments&&this._config.experiments.ignorewebrtc)this.RTCsupported=!0;else if("undefined"!=typeof webkitRTCPeerConnection||void 0!==this.mozRTCPeerConnection||"undefined"!=typeof RTCPeerConnection||"undefined"!=typeof RTCIceGatherer)if("undefined"!=typeof mozRTCPeerConnection)try{new mozRTCPeerConnection({iceServers:[]}),this.RTCsupported=!0}catch(e){}else this.RTCsupported=!0;if(!this.RTCsupported)throw n(new Error("NO_WEBRTC_SUPPORT")),new Error("NO_WEBRTC_SUPPORT");var o;if(void 0!==this._config.videoConstraints){this.videoConstraints=this._config.videoConstraints;const e=C.default.CameraManager.legacyParamConverter(this._config.videoConstraints);try{await C.default.CameraManager.get().setDefaultVideoSettings(e)}catch{n(new Error(`WebSDK cannot set ${JSON.stringify(e)} as the default video settings`))}}null!=window.location.href.match(/^file\:\/{3}.*$/g)&&void 0!==console.error&&this.showWarnings&&console.error("WebRTC requires application to be loaded from a web server"),this.voxAuth=s.Authenticator.get(),this.voxAuth.setHandler({onLoginSuccessful:(e,t)=>{this.loginState=E.LoginState.LOGGED_IN;const n={name:p.Events.AuthResult,displayName:e,result:!0,tokens:t};this._resolvePromise("login",n),this.dispatchEvent(n)},onLoginFailed:e=>{this.loginState=E.LoginState.LOGGED_OFF;const t={name:p.Events.AuthResult,code:e,result:!1};this._rejectPromise("login",t),this._rejectPromise("loginkey",t),this.dispatchEvent(t)},onSecondStageInitiated:()=>{const e={name:p.Events.AuthResult,code:301,result:!1};this._rejectPromise("login",e),this.dispatchEvent(e)},onOneTimeKeyGenerated:e=>{const t={name:p.Events.AuthResult,key:e,code:T.AuthResultCode.OneTimeKeyReceived,result:!1};this._resolvePromise("loginkey",t),this.dispatchEvent(t)},onRefreshTokenFailed:e=>{const t={name:p.Events.RefreshTokenResult,code:e,result:!1};this.dispatchEvent(t)},onRefreshTokenSuccess:e=>{const t={name:p.Events.RefreshTokenResult,tokens:e,result:!0};this.dispatchEvent(t)}}),L.default.addHandler(this),L.default.setRPCHandler(M.RemoteEvent.sipRegisterSuccessful,((e,t)=>{this.dispatchEvent({name:"SIPRegistrationSuccessful",id:e,sipuri:t})})),L.default.setRPCHandler(M.RemoteEvent.onACDStatus,((e,t,n,i)=>{r.default.onStatusUpdated(t,n,i)})),L.default.setRPCHandler(M.RemoteEvent.SQMessagingStatusUpdated,((e,t,n,i)=>{a.default.onStatusUpdated(t,n,i)})),L.default.setRPCHandler(M.RemoteEvent.onSQStatusError,((e,t,n,i)=>{a.default.onError(t,n,i),r.default.onError(t,n,i)})),L.default.setRPCHandler(M.RemoteEvent.sipRegisterFailed,((e,t,n,i)=>{this.dispatchEvent({name:"SIPRegistrationFailed",id:e,sipuri:t,status:n,reason:i})})),L.default.setRPCHandler(M.RemoteEvent.unregisterPushTokenResult,(e=>{v.PushService.updatePromiseResult(e)})),L.default.setRPCHandler(M.RemoteEvent.registerPushTokenResult,(e=>{v.PushService.updatePromiseResult(e)})),o=setInterval((()=>{"undefined"!=typeof document&&(clearInterval(o),this.dispatchEvent({name:p.Events.SDKReady,version:this.version}),t({name:p.Events.SDKReady,version:this.version}))}),100)}))}getErrorCall(e,t,n,i){const r="viewer"===e?new u.ViewerCall(A.Utils.generateUUID(),t):new d.CallExMedia(A.Utils.generateUUID(),s.Authenticator.get().displayName,!1,t);return setTimeout((()=>{r.onFailed(n,i,{})}),500),r}isHttps(){return"chrome-extension:"===window.location.protocol||"https:"===window.location.protocol||"localhost"===window.location.hostname||window.location.href.includes("127.0.0.1")}getErrorCode(e){const t=c.CallError.INTERNAL_ERROR;if(!e)return t;const n=isNaN(Number(e.code))?null:Number(e.code),i=isNaN(Number(e.message))?null:Number(e.message);return n??i??t}call(e,t,n,i){void 0===t&&void 0===n&&void 0===i||this.logger.warning("useVideo, customData, extraHeaders are deprecated since 4.6.0. Please use the same parameter in the CallSettings instead."),this.logger.info(`call(${JSON.stringify(e)}, ${JSON.stringify(t)})`);let r={H264first:this._h264first,VP8first:this._VP8first};switch("string"==typeof e||"number"==typeof e?("object"==typeof t&&(t.receiveVideo=!0),r={number:e,video:t,customData:n,extraHeaders:i}):("object"==typeof e.video&&(e.video.receiveVideo=!0),r=e),typeof r.video){case"boolean":r.isAudio=!r.video,r.video={sendVideo:r.video,receiveVideo:!0};break;case"object":r.isAudio=!r.video.receiveVideo&&!r.video.sendVideo;break;case"undefined":r.isAudio=!0,r.video={sendVideo:!1,receiveVideo:!0}}if(!this.isHttps())return this.getErrorCall("call",r,c.CallError.HTTP_NOT_SECURE,"Sorry, the connection to this site is not secure, so the WebRTC call is prohibited. Please, use https:// instead");try{return this.checkCA(),this.voxCallManager.call(r)}catch(e){const t=this.getErrorCode(e);return this.getErrorCall("call",r,t,e.message)}}callConference(e,t,n,i){void 0===t&&void 0===n&&void 0===i||this.logger.warning("useVideo, customData, extraHeaders are deprecated since 4.6.0. Please use the same parameter in the CallSettings instead."),this.logger.info(`callConference(callSettings: ${JSON.stringify(e)}, useVideo: ${JSON.stringify(t)})`);let r={H264first:this._h264first,VP8first:this._VP8first};switch("string"==typeof e||"number"==typeof e?("object"==typeof t&&(t.receiveVideo=!0),r={number:e,video:t,customData:n,extraHeaders:i}):("object"==typeof e.video&&(e.video.receiveVideo=!0),r=e),typeof r.video){case"boolean":r.video={sendVideo:r.video,receiveVideo:!0};break;case"undefined":r.video={sendVideo:!1,receiveVideo:!0}}if(r.isConference=!0,!this.isHttps())return this.getErrorCall("conf",r,c.CallError.HTTP_NOT_SECURE,"Sorry, the connection to this site is not secure, so the WebRTC call is prohibited. Please, use https:// instead");try{return this.checkCA(),this.voxCallManager.callConference(r)}catch(e){const t=this.getErrorCode(e);return this.getErrorCall("conf",r,t,e.message)}}joinAsSharing(e,t=!1,n){this.logger.info(`joinAsSharing(${e})`);let i={number:e,audioDirections:{sendAudio:t},extraHeaders:n};if(!this.isHttps())return this.getErrorCall("sharing",i,c.CallError.HTTP_NOT_SECURE,"Sorry, the connection to this site is not secure, so the WebRTC call is prohibited. Please, use https:// instead");try{return this.checkCA(),g.default.get().call(i)}catch(e){const t=this.getErrorCode(e);return this.getErrorCall("call",i,t,e.message)}}joinAsViewer(e,t){this.logger.info(`joinAsViewer(${e})`);let n={number:e,extraHeaders:t};if(!this.isHttps())return this.getErrorCall("viewer",n,c.CallError.HTTP_NOT_SECURE,"Sorry, the connection to this site is not secure, so the WebRTC call is prohibited. Please, use https:// instead");try{return this.checkCA(),this.voxViewerManager.joinAsViewer(n)}catch(e){const t=this.getErrorCode(e);return this.getErrorCall("viewer",n,t,e.message)}}config(){return this._config}connect(){return void 0===this._config&&this.logger.warning("Please, run Voximplant init before connect."),L.default.connect(this._config.queueType,this._config.serverIp,this._config.node)}async disconnect(){if(this.logger.info("disconnect()"),this.getClientState()===_.ClientState.DISCONNECTED)return this.logger.info("Already disconnected"),void this.dispatchEvent({name:p.Events.ConnectionClosed});if(this.disconnectPromise)return this.logger.info("Disconnect already in progress"),this.disconnectPromise;const{resolve:e,promise:t,reject:n}=(0,N.promiseWithResolvers)();return this.disconnectPromise=t,this.disconnectRoutine().then((()=>{e()})).catch((e=>{n(e)})).finally((()=>{this.disconnectPromise=null})),t}async disconnectRoutine(){await Promise.all([g.default.get().hangupAllCalls(),h.ViewerManager.get().hangupAllCalls(),l.CallManager.get().hangupAllCalls()]),L.default.currentState()!==L.VoxSignalingState.IDLE?(this.needToDispatchConnectionClosed=!0,await L.default.disconnect(),this.loginState=E.LoginState.LOGGED_OFF,C.default.StreamManager.get().clear(),L.default.removeRPCHandler(M.RemoteEvent.onCallRemoteFunctionError),L.default.removeRPCHandler(M.RemoteEvent.handleError)):this.needToDispatchConnectionClosed&&(this.needToDispatchConnectionClosed=!1,this.dispatchEvent({name:p.Events.ConnectionClosed}))}setOperatorACDStatus(e,t){return this.logger.info(`setOperatorACDStatus(${e} with options: ${JSON.stringify(t)})`),r.default.setStatus(e,t)}setOperatorSQMessagingStatus(e,t){if(this._config.queueType==T.QueueTypes.SmartQueue)return this.logger.info(`setOperatorSQMessagingStatus (${e})`),a.default.setStatus(e,t);Promise.reject("This function only enabled in SmartQueue. You should set QueueType to QueueTypes.SmartQueue in the ClientConfig")}getOperatorACDStatus(){return r.default.getStatus()}getOperatorSQMessagingStatus(){return a.default.getStatus()}login(e,t,n){return this.logger.info(`login(${e}, ${t?"***":void 0}, {receiveCalls: ${n&&n.receiveCalls}})`),this.loginState=E.LoginState.LOGGING_IN,new Promise(((i,r)=>{this._promises.login={resolve:i,reject:r},n=void 0!==n?n:{},this.checkConnection(),this._config.experiments&&this._config.experiments.mediaServer&&(n.mediaServer=this._config.experiments.mediaServer),this.voxAuth.basicLogin(e,t,n)}))}loginWithCode(e,t,n){return this.loginState=E.LoginState.LOGGING_IN,new Promise(((i,r)=>{this._promises.login={resolve:i,reject:r},n=void 0!==n?n:{},n={...n,serverPresenceControl:!1},this.checkConnection(),this.voxAuth.loginStage2(e,t,n)}))}loginWithToken(e,t,n){return this.logger.info(`loginWithToken(${e}, '***', {receiveCalls: ${n&&n.receiveCalls}})`),this.loginState=E.LoginState.LOGGING_IN,new Promise(((i,r)=>{this._promises.login={resolve:i,reject:r},n=void 0!==n?n:{},(n={...n,serverPresenceControl:!1}).accessToken=t,this.checkConnection(),this.voxAuth.tokenLogin(e,n)}))}tokenRefresh(e,t,n){return this.logger.info(`tokenRefresh(${e})`),new Promise(((i,r)=>{const a=e=>{e.result?i(e):r(e),this.off(p.Events.RefreshTokenResult,a)};this.on(p.Events.RefreshTokenResult,a),this.voxAuth.tokenRefresh(e,t,n)}))}requestOneTimeLoginKey(e){return new Promise(((t,n)=>{this._promises.loginkey={resolve:t,reject:n},this.checkConnection(),this.voxAuth.generateOneTimeKey(e)}))}loginWithOneTimeKey(e,t,n){return this.logger.info(`loginWithOneTimeKey(${e}, '***' , {receiveCalls: ${n&&n.receiveCalls}})`),this.loginState=E.LoginState.LOGGING_IN,new Promise(((i,r)=>{this._promises.login={resolve:i,reject:r},n=void 0!==n?n:{},n={...n,serverPresenceControl:!1},this.checkConnection(),this.voxAuth.loginUsingOneTimeKey(e,t,n)}))}connected(){return this._connected}showLocalVideo(e=!0,t,n){return void 0===t&&void 0===n||this.logger.warning("showLocalVideo: mirror and detachCamera parameters are deprecated! And do not lead to desired behavior."),this.logger.info(`showLocalVideo(${e}, ${t}, ${n})`),e?C.default.StreamManager.get().showLocalVideo():C.default.StreamManager.get().hideLocalVideo()}setLocalVideoPosition(e,t){throw new Error("Deprecated: please use CSS to position '#voximplantlocalvideo' element")}setLocalVideoSize(e,t){throw new Error("Deprecated: please use CSS to set size of '#voximplantlocalvideo' element")}setVideoSettings(e,t,n){C.default.CameraManager.get().setDefaultVideoSettings(C.default.CameraManager.legacyParamConverter(e)),l.CallManager.get().setVideoSettings(e).then((()=>{t&&t(null)}),(e=>{n&&n(null)}))}setVideoBandwidth(e){this.logger.info(`setVideoBandwidth(${e})`),this.checkConnection(),S.PCFactory.get().setBandwidthParams(e),L.default.callRemoteFunction(R.RemoteFunction.setDesiredVideoBandwidth,e)}playToneScript(e,t=!1){this.logger.info(`playToneScript('***', ${t})`),A.Utils.playToneScript(e,t)}stopPlayback(){this.logger.info("stopPlayback()"),A.Utils.stopPlayback()&&this.dispatchEvent({name:p.Events.PlaybackFinished})}volume(e){throw new Error("Deprecated: please use the Media Renderer interface of each call instead")}audioSources(){throw Error("Deprecated: please use Hardware module to manipulate devices")}videoSources(){throw Error("Deprecated: please use Hardware module to manipulate devices")}audioOutputs(){throw Error("Deprecated: please use Hardware module to manipulate devices")}useAudioSource(e,t,n){const i=C.default.AudioDeviceManager.get().getDefaultAudioSettings();return C.default.AudioDeviceManager.get().setDefaultAudioSettings({...i,inputId:e}),new Promise(((i,r)=>l.CallManager.get().useAudioSource(e).then((()=>{t&&t(null),i(null)}),(e=>{n&&n(e),r(e)}))))}useVideoSource(e,t,n){const i=C.default.CameraManager.get().getDefaultVideoSettings();return C.default.CameraManager.get().setDefaultVideoSettings({...i,cameraId:e}),new Promise(((i,r)=>l.CallManager.get().useVideoSource(e).then((()=>{t&&t(null),i(null)}),(e=>{n&&n(e),r(e)}))))}useAudioOutput(e){return new Promise(((t,n)=>{"chrome"!==o.default.getWSVendor(!0)&&n(new Error("Unsupported browser. Only Google Chrome 49 and above.")),this._defaultSinkId=e,t()}))}attachRecordingDevice(e,t){_.LogManager.get().writeMessage(_.LogCategory.CLIENT,"DEPRECATED",_.LogLevel.ERROR,"Now all media connection on demand. There is no reason do it by hand."),e&&e(null)}detachRecordingDevice(){C.default.StreamManager.get().clear()}setCallActive(e,t=!0){return e.setActive(t)}sendVideo(e=!0){_.LogManager.get().writeMessage(_.LogCategory.CLIENT,"DEPRECATED",_.LogLevel.ERROR,"This function deprecated. Use Call.sendVideo() instead.")}isRTCsupported(){try{const e=new RTCPeerConnection;if(void 0===navigator.getUserMedia&&void 0===navigator.mediaDevices.getUserMedia)throw new Error("No getUserMedia");e.addTransceiver("audio");return e.getTransceivers().forEach((e=>{if(!e.stopped&&"stopped"!==e.direction&&"stopped"!==e.currentDirection&&(e.sender.replaceTrack(null),e.direction="sendrecv",void 0===e.currentDirection))throw new Error("No currentDirection")})),e.close(),!0}catch(e){return!1}}transferCall(e,t){this.logger.info(`transferCall(${e}, ${e})`);try{this.checkCA(),this.voxCallManager.transferCall(e,t)}catch(n){this.voxCallManager.handleConnectionFailed(e.id(),+n.message,"",{}),this.voxCallManager.handleConnectionFailed(t.id(),+n.message,"",{})}}setLogLevel(e,t){_.LogManager.get().setLogLevel(e,t)}onSignalingConnected(){this._connected=!0,this.needToDispatchConnectionClosed=!0;const e={name:p.Events.ConnectionEstablished};this._resolvePromise("connect",e),this.dispatchEvent(e)}async onSignalingClosed(){this._connected=!1;Object.keys(this._promises??{}).forEach((e=>{const t=(e=>{switch(e){case"login":case"loginkey":return String(p.Events.AuthResult);default:return e}})(e),n={name:t,code:T.AuthResultCode.ConnectionClosed,result:!1};this._rejectPromise(e,n),t===String(p.Events.AuthResult)&&this.dispatchEvent(n)})),this.loginState=E.LoginState.LOGGED_OFF,this.progressTone&&this.stopProgressTone(),this.needToDispatchConnectionClosed=!0,await this.disconnectRoutine()}onSignalingConnectionFailed(e){this._connected=!1,this._rejectPromise("connect",event)}onMediaConnectionFailed(){}getCall(e){return l.CallManager.get().calls[e]}removeCall(e){l.CallManager.get().removeCall(e)}screenSharingSupported(){return o.default.screenSharingSupported()}addEventListener(e,t){super.addEventListener(e,t)}removeEventListener(e,t){super.removeEventListener(e,t)}on(e,t,n){super.on(e,t)}off(e,t){super.off(e,t)}registerForPushNotificatuons(e){return this.logger.info("Deprecated registerForPushNotificatuons()"),v.PushService.register(e)}registerForPushNotifications(e){return this.logger.info("registerForPushNotifications()"),v.PushService.register(e)}unregisterForPushNotificatuons(e){return this.logger.info("Deprecated unregisterForPushNotificatuons()"),v.PushService.unregister(e)}unregisterForPushNotifications(e){return this.logger.info("unregisterForPushNotifications()"),v.PushService.unregister(e)}handlePushNotification(e){return this.logger.info("handlePushNotification()"),v.PushService.incomingPush(e)}getGUID(){return(new m.default).toString()}enableSilentLogging(e){_.LogManager.get().shadowLogging=e}clearSilentLog(){_.LogManager.get().clearSilentLog()}getSilentLog(){return _.LogManager.get().getSLog()}setLoggerCallback(e){_.LogManager.get().setLoggerCallback(e)}getClientState(){switch(L.default.currentState()){case L.VoxSignalingState.RECONNECTING:return _.ClientState.RECONNECTING;case L.VoxSignalingState.CONNECTING:case L.VoxSignalingState.WSCONNECTED:return _.ClientState.CONNECTING;case L.VoxSignalingState.CLOSING:case L.VoxSignalingState.IDLE:return _.ClientState.DISCONNECTED;case L.VoxSignalingState.CONNECTED:return this.loginState===E.LoginState.LOGGING_IN?_.ClientState.LOGGING_IN:this.loginState===E.LoginState.LOGGED_IN?_.ClientState.LOGGED_IN:_.ClientState.CONNECTED;default:return _.ClientState.DISCONNECTED}}setSwfColor(){_.LogManager.get().writeMessage(_.LogCategory.CLIENT,"NOT SUPPORTED",_.LogLevel.ERROR,"setSwfColor deprecated, and not supported!")}_traceName(){return"Client"}checkConnection(){if(!this._connected)throw this.loginState=E.LoginState.LOGGED_OFF,new Error("NOT_CONNECTED_TO_VOXIMPLANT")}_resolvePromise(e,t){const n=this._promises[e];n&&(n.resolve(t),delete this._promises[e])}_rejectPromise(e,t){const n=this._promises[e];n&&(n.reject(t),delete this._promises[e])}setLogLevelAll(e){const t=_.LogManager.get();Object.keys(_.LogCategory).forEach((n=>{t.setLogLevel(_.LogCategory[n],e)}))}setConnectionData(e,t){e&&(this._config.gateway=e),t&&(this._config.connectionId=t)}limitAudioCodecs(e){return this.limitACodecs=e,this.logger.info(`limitAudioCodecs(): Trying to limit audio codecs to \n${JSON.stringify(e)}`),new Promise((async(t,n)=>{let i,r;const a=()=>{i?.getTracks().forEach((e=>e.stop())),r?.close()};try{if(i=await O.getUserMedia({audio:!0,video:!1}),r=new RTCPeerConnection,r){await r.addTransceiver(i.getAudioTracks()[0]);const s=await r.createOffer().catch((()=>n("limitAudioCodecs(): cannot get local offer"))),o=y.SDPMuggle.reduceCodecs(s,{audio:e});return this.logger.info(`limitAudioCodecs(): codecs limitation is resolved with result ${o.isAudio} \n${o.sdp.sdp}`),a(),t(o.isAudio)}return this.logger.info("limitAudioCodecs(): Cannot create a test peer connection"),a(),n("limitAudioCodecs(): Cannot create a test peer connection, audio codecs will be fully reduced")}catch(e){return this.logger.info(`limitAudioCodecs(): ${e.message}`),a(),n("limitAudioCodecs(): Media access denied, audio codecs will be fully reduced")}}))}limitVideoCodecs(e){return this.limitVCodecs=e,this.logger.info(`limitVideoCodecs(): Trying to limit video codecs to \n${JSON.stringify(e)}`),new Promise((async(t,n)=>{let i,r;const a=()=>{i?.getTracks().forEach((e=>e.stop())),r?.close()};try{if(i=await O.getUserMedia({audio:!0,video:!0}),r=new RTCPeerConnection,r){await r.addTransceiver(i.getAudioTracks()[0]),await r.addTransceiver(i.getVideoTracks()[0]);const s=await r.createOffer().catch((()=>n("limitVideoCodecs(): cannot get local offer"))),o=y.SDPMuggle.reduceCodecs(s,{video:e});return this.logger.info(`limitVideoCodecs(): codecs limitation is resolved with result ${o.isVideo} \n${o.sdp.sdp}`),a(),t(o.isVideo)}return this.logger.info("limitVideoCodecs(): Cannot create a test peer connection"),a(),n("limitVideoCodecs(): Cannot create a test peer connection, video codecs will be fully reduced")}catch(e){return this.logger.info(`limitVideoCodecs(): ${e.message}`),a(),n("limitVideoCodecs(): Media access denied, video codecs will be fully reduced")}}))}checkCA(){if(!this._connected)throw new Error(c.CallError.NOT_CONNECTED_TO_VOXIMPLANT.toString());if(this.loginState!==E.LoginState.LOGGED_IN)throw new Error(c.CallError.NOT_AUTHORIZED.toString())}get audioMediaTrackTransform(){return this._audioMediaTrackTransform}set audioMediaTrackTransform(e){this._audioMediaTrackTransform=e;const t=l.CallManager.get();for(const e in t.calls)t.calls[e].peerConnection.updateSenderTrackTransformers()}get videoMediaTrackTransform(){return this._videoMediaTrackTransform}set videoMediaTrackTransform(e){this._videoMediaTrackTransform=e;const t=C.default.StreamManager.get();t.getLocalMediaRenderers()&&t.updateLocalVideo();const n=l.CallManager.get();for(const e in n.calls)n.calls[e].peerConnection.updateSenderTrackTransformers()}}i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"playProgressTone",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"stopProgressTone",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"onIncomingCall",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"init",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"call",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"callConference",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"joinAsSharing",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"joinAsViewer",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"connect",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"disconnect",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"disconnectRoutine",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"setOperatorACDStatus",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"setOperatorSQMessagingStatus",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"getOperatorACDStatus",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"getOperatorSQMessagingStatus",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"login",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"loginWithCode",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"loginWithToken",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"tokenRefresh",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"requestOneTimeLoginKey",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"loginWithOneTimeKey",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"connected",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"showLocalVideo",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"setLocalVideoPosition",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"setLocalVideoSize",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"setVideoSettings",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"setVideoBandwidth",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"playToneScript",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"stopPlayback",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"volume",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"audioSources",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"videoSources",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"audioOutputs",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"useAudioSource",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"useVideoSource",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"useAudioOutput",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"attachRecordingDevice",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"detachRecordingDevice",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"setCallActive",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"sendVideo",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"isRTCsupported",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"transferCall",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"setLogLevel",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"onSignalingConnected",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"onSignalingClosed",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"onSignalingConnectionFailed",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"onMediaConnectionFailed",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"getCall",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"removeCall",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"addEventListener",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"removeEventListener",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"on",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"off",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"checkConnection",null),i([_.LogManager.d_trace(_.LogCategory.CLIENT)],b.prototype,"setLogLevelAll",null),t.Client=b},9553:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.ConferenceEndpointManager=void 0;const r=n(308),a=n(9002),s=n(1316),o=n(8343),c=n(3992),d=n(9001),l=n(1901),g=n(6980);class u{constructor(e){this.call=e,this.currentState={},this.mutex=new c.TaskMutex,g.VideoStatusMachineMediator.subscribeOnEndpointEvents(e),(0,l.registerEndpointStreamsUpdatedHandler)(e)}updateState(){const e={};this.call.getEndpoints().forEach((t=>{e[t.id]={audio:{visibility:[]},video:{visibility:[]}},t.mediaRenderers.forEach((n=>{if("audio"===n.kind&&n.enabled&&void 0!==n.mids)return void(e[t.id].audio.visibility=[...e[t.id].audio.visibility,...n.mids]);const i=g.VideoStatusMachineMediator.retrieveVSMByMediaRenderer(n);s.MediaRenderResolver.isVideoMR(n)&&"disabledByUser"!==i?.value&&void 0!==n.mids&&(e[t.id].video.visibility=[...e[t.id].video.visibility,...n.mids])}))}));const t=this.diffStates(e);if(t.dirty){this.currentState=e,this.call.getEndpoints().forEach((e=>{e.mediaRenderers.forEach((n=>{n.mids?.forEach((i=>{s.MediaRenderResolver.isVideoMR(n)&&g.VideoStatusMachineMediator.retrieveVSMByEndpoint(e)||(t.mrEnabled.includes(i)&&e.dispatchEvent({name:d.EndpointEvents.MediaRenderEnabled,endpoint:e,call:this.call,mediaRenderer:n}),t.mrDisabled.includes(i)&&e.dispatchEvent({name:d.EndpointEvents.MediaRenderDisabled,endpoint:e,call:this.call,mediaRenderer:n}))}))}))}));const n=r.CallManager.get().getConfSignaling(this.call);if(!n)return;n.send({name:o.OutgoingConferenceProtocolEventName.ManageEndpoints,payload:e})}}updateRenderSize(){const e={};this.call.getEndpoints().forEach((t=>{const n={};t.mediaRenderers.filter((e=>e.kind!==d.MediaRendererKind.Audio&&e.videoSize?.width&&e.videoSize?.height&&e.mids)).forEach((e=>{e.mids?.forEach((t=>n[t]=[e.videoSize.width,e.videoSize.height]))})),Object.keys(n).length&&(e[t.id]=n)}));const t=r.CallManager.get().getConfSignaling(this.call);t&&t.send({name:o.OutgoingConferenceProtocolEventName.RequestVideoSize,payload:e})}setCurrentState(e){throw Error("Not implemented")}diffStates(e){const t=["added","default"];let n=!1,i=[],r=[],a=[],s=[],o=[],c={};for(let i in this.currentState)this.currentState.hasOwnProperty(i)&&!t.includes(i)&&(e[i]?["audio","video"].forEach((t=>{this.currentState[i][t].visibility?.includes("default")?(o.push(i),n=!0):e[i][t].visibility?.includes("default")?(s.push(i),n=!0):(this.currentState[i][t].visibility?.forEach((r=>{e[i][t].visibility?.includes(r)||(a.push(r),n=!0)})),e[i][t].visibility?.forEach((e=>{this.currentState[i][t].visibility?.includes(e)||(r.push(e),n=!0)})))})):(n=!0,c[i]=e[i]));for(let r in e)e.hasOwnProperty(r)&&!t.includes(r)&&(this.currentState[r]||(n=!0,i.push(r)));return{dirty:n,removed:i,mrEnabled:r,mrDisabled:a,allEnabled:s,allDisabled:o}}}i([(0,a.debounceDecorator)(400,!1)],u.prototype,"updateState",null),i([(0,a.debounceDecorator)(400,!1)],u.prototype,"updateRenderSize",null),i([(0,c.queueDecorator)()],u.prototype,"setCurrentState",null),t.ConferenceEndpointManager=u},4298:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ConferenceEndpointResolver=void 0;const i=n(308);t.ConferenceEndpointResolver=class{constructor(e){this.call=e}get endpointManager(){return i.CallManager.get().getEndpointManager(this.call)}resolveById(e){const t=this.endpointManager?.getEndpoints();return t?.find((t=>t.id===e))}resolveByMid(e){const t=this.endpointManager?.getEndpointInfo();if(!t)return;const[n]=Object.entries(t.endpoints).find((([t,n])=>{const{mids:i={}}=n;return e in i}))||[];return n?this.resolveById(n):void 0}}},1901:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.registerEndpointStreamsUpdatedHandler=t.EndpointStreamsUpdatedHandler=void 0;const i=n(1150),r=n(4298),a=n(6980),s=new WeakMap;class o{constructor(e){this.endpointResolver=e,this.logger=i.LogManager.get().createLogger(i.LogCategory.VSM,"EndpointStreamsUpdatedHandler")}static getInstanceBy(e){return s.get(e)}handle(e){const{hidden:t={},appeared:n={}}=e,i=[...Object.entries(t),...Object.entries(n)];for(const[e,t]of i){const n=this.endpointResolver.resolveByMid(e),i=t?"ENDPOINT_STREAM_HIDDEN":"ENDPOINT_STREAM_APPEARED";if(!n){this.logger.info(`Endpoint with mid ${e} has not found`);continue}const r=a.VideoStatusMachineMediator.retrieveVSMByEndpoint(n);r?r.transition(i):this.logger.warning(`Associated VSM with endpoint ${n.id} has not found`)}}}t.EndpointStreamsUpdatedHandler=o;t.registerEndpointStreamsUpdatedHandler=e=>{const t=new r.ConferenceEndpointResolver(e),n=new o(t);return s.set(e,n),n}},9124:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createVideoStatusMachine=void 0;const i=n(6185),r=n(6143),a=n(1150),s=a.LogManager.get().createLogger(a.LogCategory.VSM,"VideoStatusMachine");t.createVideoStatusMachine=e=>{const t=(0,i.obs)("enabled"),n={log:(...t)=>s.info(`[VSM of ${e.id}] ${t.join("")}`),warn:(...t)=>s.warning(`[VSM of ${e.id}] ${t.join("")}`),error:(...t)=>s.error(`[VSM of ${e.id}] ${t.join("")}`)};return[(0,r.createStatelessFSM)(t,{enabled:{DISABLE_VIDEO:"disabledByUser",ENDPOINT_STREAM_HIDDEN:"disabledByServer"},disabledByUser:{ENABLE_VIDEO:"enabled"},disabledByServer:{ENDPOINT_STREAM_APPEARED:"enabled"}},null,n),t]}},6980:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.VideoStatusMachineMediator=void 0;const i=n(2282),r=n(9001),a=n(9124),s=n(1316),o=n(308),c=n(1150),d=n(1450),l=new WeakMap,g=new WeakMap,u=new WeakMap,h=new WeakMap,p={disabledByUser:d.MediaRenderDisablingReason.Manual,disabledByServer:d.MediaRenderDisablingReason.Automatic};class f{constructor(){}static associateVSMWith(e){const[t,n]=(0,a.createVideoStatusMachine)(e);return l.set(e,t),u.set(t,e),n.watch((t=>{this.handleVideoStatusUpdate(e,t)})),this.logger.info(`New VSM has been associated with endpoint ${e.id}`),t}static retrieveVSMByEndpoint(e){return l.get(e)}static retrieveVSMByMediaRenderer(e){return g.get(e)}static removeVSMAssociationOf(e){l.delete(e)}static subscribeOnEndpointEvents(e){e.on(i.CallEvents.EndpointAdded,(({endpoint:t})=>{const n=this.associateVSMWith(t);h.set(t,e.id()),t.on(r.EndpointEvents.RemoteMediaAdded,(({mediaRenderer:e})=>{s.MediaRenderResolver.isVideoMR(e)&&g.set(e,n)})),t.on(r.EndpointEvents.RemoteMediaRemoved,(({mediaRenderer:e})=>{s.MediaRenderResolver.isVideoMR(e)&&g.delete(e)}))})),e.on(i.CallEvents.EndpointRemoved,(({endpoint:e})=>{this.removeVSMAssociationOf(e)}))}static makeTransition(e,t){const n=u.get(e)?.id;this.logger.info(`Start transition ${t} for a VSM of the endpoint ${n}`);const i=e.transition(t);return i||(this.logger.info("The transition has failed"),this.onTransitionFail(e)),i}static dispatchMediaRenderEvent(e,t,n){const i="enabled"===t?r.EndpointEvents.MediaRenderEnabled:r.EndpointEvents.MediaRenderDisabled,a=s.MediaRenderResolver.retrieveVideoMR(e.mediaRenderers);if(!a)return this.logger.info(`Has not associated a media renderer. Dispatching ${i} has aborted`),!1;const c=h.get(e);if(!c)return this.logger.info(`Has not associated a call id with endpoint ${e.id}. Dispatching ${i} has aborted`),!1;const d=o.CallManager.get().findCall(c,"");if(!d)return this.logger.info(`Cannot find a call with id ${c}. Dispatching ${i} has aborted`),!1;const l={name:i,call:d,endpoint:e,mediaRenderer:a};return"disabled"===t&&n&&(l.reason=p[n]),e.dispatchEvent(l),this.logger.info(`The ${i} event has been dispatched ${n?"with reason "+n:""}`),!0}static handleVideoStatusUpdate(e,t){this.logger.info(`Video status of endpoint ${e.id} to ${t}`),"enabled"===t&&this.dispatchMediaRenderEvent(e,"enabled"),"disabledByServer"!==t&&"disabledByUser"!==t||this.dispatchMediaRenderEvent(e,"disabled",t)}static onTransitionFail(e){if("enabled"!==e.value){const t=u.get(e);if(!t)return this.logger.warning("An endpoint has not found by VSM"),!1;this.dispatchMediaRenderEvent(t,"disabled",e.value)}}}t.VideoStatusMachineMediator=f,f.logger=c.LogManager.get().createLogger(c.LogCategory.VSM,"VideoStatusMachineMediator")},3385:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Constants=void 0;class n{}t.Constants=n,n.DIRECT_CALL_HEADER="X-DirectCall",n.VIAMEDIA_CALL_HEADER="X-ViaMedia",n.CALLSTATSIOID_HEADER="X-CallstatsIOID",n.CALL_DATA_HEADER="VI-CallData",n.ZINGAYA_IM_MIME_TYPE="application/zingaya-im",n.P2P_SPD_FRAG_MIME_TYPE="voximplant/sdpfrag",n.P2P_SESSION_MIME_TYPE="voximplant/session",n.VI_HOLD_EMUL="vi/holdemul",n.VI_SPD_OFFER_MIME_TYPE="vi/sdpoffer",n.VI_SPD_ANSWER_MIME_TYPE="vi/sdpanswer",n.VI_CONF_PARTICIPANT_INFO_ADDED="vi/conf-info-added",n.VI_CONF_PARTICIPANT_INFO_REMOVED="vi/conf-info-removed",n.VI_CONF_PARTICIPANT_INFO_UPDATED="vi/conf-info-updated",n.VI_CONF_PARTICIPANT_BATCH="vi/conf-batch"},9002:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.debounceDecorator=void 0;const i=n(1150);t.debounceDecorator=function(e=400,t=!1){let n;return(r,a,s)=>({value:function(...r){n&&t&&i.LogManager.get().writeMessage(i.LogCategory.UTILS,"Debounce",i.LogLevel.WARNING,"Function has been debounced."),clearTimeout(n),n=setTimeout((()=>{n=null,s.value.apply(this,r)}),e)}})}},3576:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.EventTarget=void 0;const r=n(1150),a=n(6577),s=n(9367),o=n(6081);class c{sysOn(e,t,n){this._ETonTo("system",e,t,n)}sysOff(e,t){this._EToffTo("system",e,t)}on(e,t,n){this._ETonTo("user",e,t,n)}off(e,t){this._EToffTo("user",e,t)}_ETonTo(e,t,n,i){void 0===this.eventListeners&&(this.eventListeners={});let r=this.eventListeners;void 0===r[t]&&(r[t]=[]);const a={listener:n,options:i,_triggered:!1,_namespace:e};i&&i.capture?r[t].unshift(a):r[t].push(a)}_EToffTo(e,t,n){const i=this.eventListeners;if(void 0!==i&&void 0!==i[t])if("function"==typeof n){for(let r=0;r<i[t].length;r++)if(i[t][r].listener==n&&i[t][r]._namespace===e){i[t].splice(r,1);break}}else i[t]=i[t].filter((t=>t._namespace!==e))}logStats(e,t){r.LogManager.get().writeMessage(r.LogCategory.UTILS,"[event]",r.LogLevel.INFO,`${e} ${JSON.stringify((0,a.getShortStreamStats)(t))}`)}dispatchEvent(e){const t=this?.eventListeners?.[e?.name]?.filter?.((e=>"user"===e?._namespace)),n=()=>{r.LogManager.get().writeMessage(r.LogCategory.UTILS,"[event]",r.LogLevel.INFO,`${e?.name}${e.name?.includes("QualityIssue")?" "+e.level:""}, listeners: ${t?.length??0}`)};switch(e.name){case"Failed":{const t=e.headers?.["X-VI-Hangup-Cause"]?.toLowerCase(),i=e.reason?.toLowerCase(),a=e?.call?.settings?.number?.trim()||"empty number",s=o.CallError[e.code],c=s?`(${s})`:"",d=[`${e?.name}, call to ${a} failed with code: ${e.code}${c}`];i&&d.push(`reason: ${i}`),t&&d.push(`description: ${t}`);const l=d.join(", ");r.LogManager.get().writeMessage(r.LogCategory.UTILS,"[event]",r.LogLevel.INFO,l),n();break}case"CallStatsReceived":this.logStats(e.name,e.stats);break;default:n()}if(void 0!==this.eventListeners&&void 0!==this.eventListeners[e.name])for(let n=0;n<this.eventListeners[e.name].length;n++)try{if(!(this.eventListeners[e.name][n].options&&this.eventListeners[e.name][n].options.once&&this.eventListeners[e.name][n]._triggered||"system"!==this.eventListeners[e.name][n]._namespace&&"user"!==this.eventListeners[e.name][n]._namespace&&("default"!==this.eventListeners[e.name][n]._namespace||t.length))){this.eventListeners[e.name][n]._triggered=!0;if(!1===this.eventListeners[e.name][n].listener(e))return}}catch(e){console.error(e)}}removeEventListener(e,t){this.off(e,t)}addEventListener(e,t,n){this.on(e,t,n)}addDefaultEventListener(e,t){this._ETonTo("default",e,t,{})}removeDefaultEventListener(e){this._EToffTo("default",e)}_traceName(){return"EventTarget"}}i([r.LogManager.d_trace(r.LogCategory.EVENTTARGET)],c.prototype,"sysOn",null),i([r.LogManager.d_trace(r.LogCategory.EVENTTARGET)],c.prototype,"sysOff",null),i([r.LogManager.d_trace(r.LogCategory.EVENTTARGET)],c.prototype,"on",null),i([r.LogManager.d_trace(r.LogCategory.EVENTTARGET)],c.prototype,"off",null),i([(0,s.throttleDecorator)(5e3)],c.prototype,"logStats",null),i([r.LogManager.d_trace(r.LogCategory.EVENTTARGET)],c.prototype,"removeEventListener",null),i([r.LogManager.d_trace(r.LogCategory.EVENTTARGET)],c.prototype,"addEventListener",null),i([r.LogManager.d_trace(r.LogCategory.EVENTTARGET)],c.prototype,"addDefaultEventListener",null),i([r.LogManager.d_trace(r.LogCategory.EVENTTARGET)],c.prototype,"removeDefaultEventListener",null),t.EventTarget=c},141:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Events=void 0,function(e){e[e.SDKReady="SDKReady"]="SDKReady",e[e.ConnectionEstablished="ConnectionEstablished"]="ConnectionEstablished",e[e.ConnectionFailed="ConnectionFailed"]="ConnectionFailed",e[e.ConnectionClosed="ConnectionClosed"]="ConnectionClosed",e[e.Reconnecting="Reconnecting"]="Reconnecting",e[e.Reconnected="Reconnected"]="Reconnected",e[e.AuthResult="AuthResult"]="AuthResult",e[e.RefreshTokenResult="RefreshTokenResult"]="RefreshTokenResult",e[e.PlaybackFinished="PlaybackFinished"]="PlaybackFinished",e[e.MicAccessResult="MicAccessResult"]="MicAccessResult",e[e.IncomingCall="IncomingCall"]="IncomingCall",e[e.SourcesInfoUpdated="SourcesInfoUpdated"]="SourcesInfoUpdated",e[e.NetStatsReceived="NetStatsReceived"]="NetStatsReceived",e[e.SIPRegistrationSuccessful="SIPRegistrationSuccessful"]="SIPRegistrationSuccessful",e[e.SIPRegistrationFailed="SIPRegistrationFailed"]="SIPRegistrationFailed",e[e.ACDStatusUpdated="ACDStatusUpdated"]="ACDStatusUpdated",e[e.SQMessagingStatusUpdated="SQMessagingStatusUpdated"]="SQMessagingStatusUpdated",e[e.ACDError="ACDError"]="ACDError",e[e.SQError="SQError"]="SQError",e[e.PlaybackError="PlaybackError"]="PlaybackError"}(t.Events||(t.Events={}))},209:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});class n{constructor(e){this.str=e||n.getNewGUIDString()}toString(){return this.str}static getNewGUIDString(){let e=(new Date).getTime();return window.performance&&"function"==typeof window.performance.now&&(e+=performance.now()),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(t=>{let n=(e+16*Math.random())%16|0;return e=Math.floor(e/16),("x"==t?n:3&n|8).toString(16)}))}_traceName(){return"GUID"}}t.default=n},7272:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Hardware=void 0;const i=n(4855);var r;!function(e){let t,n;!function(e){e[e.DevicesUpdated="DevicesUpdated"]="DevicesUpdated",e[e.MediaRendererAdded="MediaRendererAdded"]="MediaRendererAdded",e[e.MediaRendererUpdated="MediaRendererUpdated"]="MediaRendererUpdated",e[e.MediaRendererRemoved="MediaRendererRemoved"]="MediaRendererRemoved",e[e.BeforeMediaRendererRemoved="BeforeMediaRendererRemoved"]="BeforeMediaRendererRemoved"}(t=e.HardwareEvents||(e.HardwareEvents={})),function(e){e[e.VIDEO_QUALITY_HIGH="video_quality_high"]="VIDEO_QUALITY_HIGH",e[e.VIDEO_QUALITY_LOW="video_quality_low"]="VIDEO_QUALITY_LOW",e[e.VIDEO_QUALITY_MEDIUM="video_quality_medium"]="VIDEO_QUALITY_MEDIUM",e[e.VIDEO_SIZE_QQVGA="video_size_qqvga"]="VIDEO_SIZE_QQVGA",e[e.VIDEO_SIZE_QCIF="video_size_qcif"]="VIDEO_SIZE_QCIF",e[e.VIDEO_SIZE_QVGA="video_size_qvga"]="VIDEO_SIZE_QVGA",e[e.VIDEO_SIZE_CIF="video_size_cif"]="VIDEO_SIZE_CIF",e[e.VIDEO_SIZE_nHD="video_size_nhd"]="VIDEO_SIZE_nHD",e[e.VIDEO_SIZE_VGA="video_size_vga"]="VIDEO_SIZE_VGA",e[e.VIDEO_SIZE_SVGA="video_size_svga"]="VIDEO_SIZE_SVGA",e[e.VIDEO_SIZE_HD="video_size_hd"]="VIDEO_SIZE_HD",e[e.VIDEO_SIZE_UXGA="video_size_uxga"]="VIDEO_SIZE_UXGA",e[e.VIDEO_SIZE_FHD="video_size_fhd"]="VIDEO_SIZE_FHD",e[e.VIDEO_SIZE_UHD="video_size_uhd"]="VIDEO_SIZE_UHD"}(n=e.VideoQuality||(e.VideoQuality={}));class r extends i.AudioDeviceManager{}e.AudioDeviceManager=r;class a extends i.CameraManager{}e.CameraManager=a;class s extends i.StreamManager{}e.StreamManager=s}(r=t.Hardware||(t.Hardware={})),t.default=r},2709:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.AudioDeviceManager=void 0;const r=n(1150),a=n(4007),s=n(9699),o=n(787),c=n(2957),d=n(3869),l=n(9001),g=n(2094),u=["inputId","noiseSuppression","echoCancellation","disableAudio"];class h{constructor(){if(void 0!==h.instance)throw new Error("Error - use StreamManager.get()");navigator&&navigator.mediaDevices&&navigator.mediaDevices.getSupportedConstraints?this._supportedConstraints=navigator.mediaDevices.getSupportedConstraints():this._supportedConstraints={},this.__defaultParams={echoCancellation:!0,autoGainControl:!0,noiseSuppression:!0},this._lastAudioInputDevices=[],this._lastAudioOutputDevices=[],this._callParams={},this.logger=r.LogManager.get().createLogger(r.LogCategory.USERMEDIA,this._traceName())}getAudioContext(){if(this.audioContext)return this.audioContext;if(void 0!==window.AudioContext||void 0!==window.webkitAudioContext){window.AudioContext=window.AudioContext||window.webkitAudioContext;try{return this.audioContext=new AudioContext,this.audioContext}catch(e){return this.audioContext=null,null}}}prepareAudioContext(){this.getAudioContext()}static get(){return void 0===h.instance&&(h.instance=new h),h.instance}getInputDevices(){return navigator.mediaDevices.enumerateDevices().then((e=>(this._lastAudioInputDevices=e.map((e=>{if("audio"===e.kind||"audioinput"===e.kind)return{id:e.deviceId,name:e.label,group:e.groupId}})).filter((e=>void 0!==e)),this.logger.info(`Got input devices: ${JSON.stringify(this._lastAudioInputDevices)}`),this._lastAudioInputDevices)))}getOutputDevices(){return navigator.mediaDevices.enumerateDevices().then((e=>(this._lastAudioOutputDevices=e.map((e=>{if("audiooutput"===e.kind)return{id:e.deviceId,name:e.label,group:e.groupId}})).filter((e=>void 0!==e)),this.logger.info(`Got output devices: ${JSON.stringify(this._lastAudioOutputDevices)}`),this._lastAudioOutputDevices)))}getDefaultAudioSettings(){return this.__defaultParams}setDefaultAudioSettings(e){this.logger.info(`Set next params for default audio settings: ${JSON.stringify(e)}`),this.__defaultParams={...this.__defaultParams,...e},this.logger.info(`Current default audio settings: ${JSON.stringify(this.__defaultParams)}`)}async validateIOSCallDevicesParams(e){if(!d.default.isSafariIos())return;const t=this._callParams[e.id()]??this.__defaultParams;if(!t.inputId)return;const n=await this.getInputDevices();if(n.find((e=>e.id===t.inputId)))return;const i=(0,g.filterDeviceId)(n);return this.logger.warning(`Current microphone ${t.inputId} is not available. Set new: ${i}`),i?(this._callParams[e.id()]={...t,inputId:i},this.__defaultParams={...this.__defaultParams,inputId:i},n):void 0}async setCallAudioSettings(e,t){if(this.logger.info(`Setting call ${e.id()} audio settings: ${JSON.stringify(t)}`),!e.active())return Promise.reject((0,o.dispatchUpdatedEvent)(e,!1,s.CallFailedUpdateReasons.mediaOnHold));"echoCancellation"in t&&"safari"===d.default.getWSVendor()&&(this.logger.warning("Can't change `echoCancellation` in Safari during the call"),delete t.echoCancellation);const n=this._callParams[e.id()];if(n===t)return;if(void 0===n)return this._callParams[e.id()]={...this.__defaultParams,...t},void this.logger.info(`Call params updated without update source and renderers. ${JSON.stringify(this._callParams[e.id()])}`);let i=u.some((e=>e in t&&n[e]!==t[e]));i||"communications"!==t.inputId&&"default"!==t.inputId||(i=!0);const r=n.outputId!==t.outputId;if(this.logger.info(`Must update renderers: ${r}, must update source: ${i}`),this._callParams[e.id()]={...n,...t},i)try{await a.StreamManager.get().updateStreamSettings(e),this.logger.info("Audio settings have been set successfully.")}catch(t){throw this.logger.warning(`Failed to update call ${e.id()} stream: ${c.Utils.stringifyError(t)}`),Error(t)}r&&void 0!==t.outputId&&await Promise.all(e.getEndpoints().map((e=>e.mediaRenderers.filter((({kind:e})=>"audio"===e)).map((e=>e.useAudioOutput(t.outputId))))))}getCallAudioSettings(e){return this._callParams[e.id()]}clearCallAudioSettings(e){if(e.state()!==l.CallState.ENDED)return;if(!this._callParams[e.id()])return;const t={...this._callParams};delete t[e.id()],this._callParams=t}getCallConstraints(e){return this._callParams[e]?this._getAudioConstraints(this._callParams[e]):(this._callParams[e]=this.__defaultParams,this._getAudioConstraints(this.__defaultParams))}_getAudioConstraints(e){if(e.disableAudio)return!1;let t="ideal";e.strict;const n={};return e.inputId&&(n.deviceId={exact:e.inputId}),"boolean"==typeof e.echoCancellation&&this._supportedConstraints.echoCancellation&&(n.echoCancellation=e.echoCancellation),"boolean"==typeof e.noiseSuppression&&this._supportedConstraints.noiseSuppression&&(n.noiseSuppression=e.noiseSuppression),"boolean"==typeof e.autoGainControl&&this._supportedConstraints.autoGainControl&&(n.autoGainControl=e.autoGainControl),e.advanced&&(n.advanced=e.advanced),!Object.keys(n)||n}_traceName(){return"AudioDeviceManager"}}i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],h.prototype,"getInputDevices",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],h.prototype,"getOutputDevices",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],h.prototype,"getDefaultAudioSettings",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],h.prototype,"setDefaultAudioSettings",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],h.prototype,"validateIOSCallDevicesParams",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],h.prototype,"setCallAudioSettings",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],h.prototype,"getCallAudioSettings",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],h.prototype,"clearCallAudioSettings",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],h.prototype,"getCallConstraints",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],h.prototype,"_getAudioConstraints",null),t.AudioDeviceManager=h},2334:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.CameraManager=void 0;const r=n(1150),a=n(4007),s=n(7272),o=n(3869),c=n(9699),d=n(787);class l{constructor(){if(void 0!==l.instance)throw new Error("Error - use StreamManager.get()");navigator&&navigator.mediaDevices&&navigator.mediaDevices.getSupportedConstraints?this._supportedConstraints=navigator.mediaDevices.getSupportedConstraints():this._supportedConstraints={},this._callParams={},this._lastCameraDevices=[],this.__defaultParams={},this.logger=r.LogManager.get().createLogger(r.LogCategory.USERMEDIA,this._traceName())}static get(){return void 0===l.instance&&(l.instance=new l),l.instance}async setDefaultVideoSettings(e){const t=this._validateCameraParams(e);this.logger.info(`Setting default video settings, params: ${JSON.stringify(e)}, valid params: ${JSON.stringify(t)}`),this.__defaultParams=t,await s.Hardware.StreamManager.get().updateLocalVideo()}getDefaultVideoSettings(){return this.__defaultParams}setCallVideoSettings(e,t){const n=this._validateCameraParams(t);return this.logger.info(`Setting call ${e.id()} video settings, params: ${JSON.stringify(t)}, valid params: ${JSON.stringify(n)}`),e.active()?(this._callParams[e.id()]=n,new Promise(((t,n)=>{a.StreamManager.get().updateStreamSettings(e).then((()=>{this.logger.info("Video settings have been set successfully."),t()})).catch((t=>{this.logger.warning(`Failed to set call ${e.id()} video settings: ${t}`),n(t)}))}))):Promise.reject((0,d.dispatchUpdatedEvent)(e,!1,c.CallFailedUpdateReasons.mediaOnHold))}getCallVideoSettings(e){return this._callParams[e.id()]}getCallConstraints(e){return"__local__"===e?(this._callParams[e]=this.__defaultParams,this._getVideoConstraints(this.__defaultParams)):this._callParams[e]?this._getVideoConstraints(this._callParams[e]):(this._callParams[e]=this.__defaultParams,this._getVideoConstraints(this.__defaultParams))}getInputDevices(){return navigator.mediaDevices.enumerateDevices().then((e=>(this._lastCameraDevices=e.map((e=>{if("video"===e.kind||"videoinput"===e.kind)return{id:e.deviceId,name:e.label,group:e.groupId}})).filter((e=>void 0!==e)),this.logger.info(`Got input devices: ${JSON.stringify(this._lastCameraDevices)}`),this._lastCameraDevices)))}_getVideoConstraints(e){const t={};return e.cameraId?t.deviceId={exact:e.cameraId}:void 0!==e.facingMode&&(!1===e.facingMode?t.facingMode="environment":t.facingMode="user"),e.frameHeight&&(t.height={},e.strict?t.height.min=e.frameHeight:t.height.ideal=e.frameHeight),e.frameWidth&&(t.width={},e.strict?t.width.min=e.frameWidth:t.width.ideal=e.frameWidth),e.frameRate&&e.frameRate>0&&this._supportedConstraints.frameRate&&(t.frameRate=e.frameRate+""),e.aspectRatio&&e.aspectRatio>0&&this._supportedConstraints.aspectRatio&&(t.aspectRatio={exact:e.aspectRatio+""}),!Object.keys(t)||t}_validateCameraParams(e){if(e.videoQuality){(e.frameHeight||e.frameWidth)&&this.logger.warning('"videoQuality" parameter detected. The "frameHeight" and the "frameWidth" params will be ignored');const t=this._videoQualityToSize(e.videoQuality);e.frameWidth=t.w,e.frameHeight=t.h}return o.default.isIphone()&&(delete e.videoQuality,delete e.frameWidth,delete e.frameHeight,delete e.frameRate),e}_videoQualityToSize(e){switch(e){case s.Hardware.VideoQuality.VIDEO_QUALITY_HIGH:return{w:1280,h:720};case s.Hardware.VideoQuality.VIDEO_QUALITY_MEDIUM:return{w:640,h:480};case s.Hardware.VideoQuality.VIDEO_QUALITY_LOW:return{w:320,h:240};case s.Hardware.VideoQuality.VIDEO_SIZE_QQVGA:return{w:160,h:120};case s.Hardware.VideoQuality.VIDEO_SIZE_QCIF:return{w:176,h:144};case s.Hardware.VideoQuality.VIDEO_SIZE_QVGA:return{w:320,h:240};case s.Hardware.VideoQuality.VIDEO_SIZE_CIF:return{w:352,h:288};case s.Hardware.VideoQuality.VIDEO_SIZE_nHD:return{w:640,h:360};case s.Hardware.VideoQuality.VIDEO_SIZE_VGA:return{w:640,h:480};case s.Hardware.VideoQuality.VIDEO_SIZE_SVGA:return{w:800,h:600};case s.Hardware.VideoQuality.VIDEO_SIZE_HD:return{w:1280,h:720};case s.Hardware.VideoQuality.VIDEO_SIZE_UXGA:return{w:1600,h:1200};case s.Hardware.VideoQuality.VIDEO_SIZE_FHD:return{w:1920,h:1080};case s.Hardware.VideoQuality.VIDEO_SIZE_UHD:return{w:3840,h:2160};default:return{w:320,h:240}}}static legacyParamConverter(e){const t={videoQuality:s.Hardware.VideoQuality.VIDEO_QUALITY_MEDIUM};return e.width&&("string"==typeof e.width||"number"==typeof e.width?(delete t.videoQuality,t.frameWidth=e.width):"string"==typeof e.width.exact||"number"==typeof e.width.exact?(delete t.videoQuality,t.frameWidth=e.width.exact,t.strict=!0):"string"==typeof e.width.min||"number"==typeof e.width.min?(delete t.videoQuality,t.frameWidth=e.width.min):"string"==typeof e.width.max||"number"==typeof e.width.max?(delete t.videoQuality,t.frameWidth=e.width.max):"string"!=typeof e.width.ideal&&"number"!=typeof e.width.ideal||(delete t.videoQuality,t.frameWidth=e.width.ideal)),e.height&&("string"==typeof e.height||"number"==typeof e.height?(delete t.videoQuality,t.frameHeight=e.height):"string"==typeof e.height.exact||"number"==typeof e.height.exact?(delete t.videoQuality,t.frameHeight=e.height.exact,t.strict=!0):"string"==typeof e.height.min||"number"==typeof e.height.min?(delete t.videoQuality,t.frameHeight=e.height.min):"string"==typeof e.height.max||"number"==typeof e.height.max?(delete t.videoQuality,t.frameHeight=e.height.max):"string"!=typeof e.height.ideal&&"number"!=typeof e.height.ideal||(delete t.videoQuality,t.frameHeight=e.height.ideal)),t}testResolutions(e){const t=[s.Hardware.VideoQuality.VIDEO_SIZE_QQVGA,s.Hardware.VideoQuality.VIDEO_SIZE_QCIF,s.Hardware.VideoQuality.VIDEO_SIZE_QVGA,s.Hardware.VideoQuality.VIDEO_SIZE_CIF,s.Hardware.VideoQuality.VIDEO_SIZE_nHD,s.Hardware.VideoQuality.VIDEO_SIZE_VGA,s.Hardware.VideoQuality.VIDEO_SIZE_SVGA,s.Hardware.VideoQuality.VIDEO_SIZE_HD,s.Hardware.VideoQuality.VIDEO_SIZE_UXGA,s.Hardware.VideoQuality.VIDEO_SIZE_FHD,s.Hardware.VideoQuality.VIDEO_SIZE_UHD];return this._lastResolutionTestResult?new Promise(((e,t)=>{e(this._lastResolutionTestResult)})):this._testResolutions(t,{},e)}_testResolutions(e,t,n){if(e.length){let i=e.shift(),r={strict:!0};const o=this._videoQualityToSize(i);r.frameWidth=o.w,r.frameHeight=o.h,n&&(r.cameraId=n);let c={video:this._getVideoConstraints(r)};return a.StreamManager.getUserMedia(c).then((r=>(this.logger.info("_testResolutions(): Media access granted"),r.getTracks().forEach((e=>e.stop())),t[s.Hardware.VideoQuality[i]]=!0,this._testResolutions(e,t,n))),(r=>(this.logger.error(`_testResolutions(): Media access denied: ${r?r.message||r.name||r:"unknown"}`),t[s.Hardware.VideoQuality[i]]=!1,this._testResolutions(e,t,n))))}return this._lastResolutionTestResult=t,t}loadResolutionTestResult(e){return!![s.Hardware.VideoQuality.VIDEO_SIZE_QQVGA,s.Hardware.VideoQuality.VIDEO_SIZE_QCIF,s.Hardware.VideoQuality.VIDEO_SIZE_QVGA,s.Hardware.VideoQuality.VIDEO_SIZE_CIF,s.Hardware.VideoQuality.VIDEO_SIZE_nHD,s.Hardware.VideoQuality.VIDEO_SIZE_VGA,s.Hardware.VideoQuality.VIDEO_SIZE_SVGA,s.Hardware.VideoQuality.VIDEO_SIZE_HD,s.Hardware.VideoQuality.VIDEO_SIZE_UXGA,s.Hardware.VideoQuality.VIDEO_SIZE_FHD,s.Hardware.VideoQuality.VIDEO_SIZE_UHD].every((t=>void 0!==e[s.Hardware.VideoQuality[t]]))&&(this._lastResolutionTestResult=e,!0)}_traceName(){return"CameraManager"}}i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],l.prototype,"setDefaultVideoSettings",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],l.prototype,"getDefaultVideoSettings",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],l.prototype,"setCallVideoSettings",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],l.prototype,"getCallVideoSettings",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],l.prototype,"getCallConstraints",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],l.prototype,"getInputDevices",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],l.prototype,"_getVideoConstraints",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],l.prototype,"_validateCameraParams",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],l,"legacyParamConverter",null),t.CameraManager=l},4007:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.StreamManager=void 0;const r=n(1150),a=n(7272),s=n(3576),o=n(2334),c=n(3869),d=n(141),l=n(125),g=n(2709),u=n(7222),h=n(308),p=n(8237),f=n(787),m=n(4610),C=n(9001),v=n(7998),_=n(9002),E=n(1192),S=n(2094),y=n(2957),M=n(1493);class R extends s.EventTarget{constructor(){if(super(),this.isLocalVideoRequested=!1,this.lastDevicesSet=new Set,this.localVideoPromises=[],this._dedicatedMirrorStream=null,this.originalDedicatedTrack=null,void 0!==R.instance)throw new Error("Error - use StreamManager.get()");this._callStreams={},this._localMediaRenderers=[],this._sharingStreams={},this.logger=r.LogManager.get().createLogger(r.LogCategory.HARDWARE,this._traceName()),void 0!==navigator.mediaDevices&&navigator.mediaDevices.addEventListener("devicechange",this.handleDeviceChange.bind(this))}async handleDeviceChange(){try{this.logger.info("Received devicechange event");const[e,t,n]=await Promise.all([g.AudioDeviceManager.get().getInputDevices(),g.AudioDeviceManager.get().getOutputDevices(),o.CameraManager.get().getInputDevices()]),i=[...e,...t,...n].map((({id:e,name:t})=>`${e}:${t}`)),r=new Set(i),s=Array.from(r);if(this.logger.info(`Current audio input devices list: ${JSON.stringify(e)}`),this.logger.info(`Current audio output devices list: ${JSON.stringify(t)}`),r.size===this.lastDevicesSet.size&&s.every((e=>this.lastDevicesSet.has(e))))return void this.logger.info("Devices have not changed");const c=g.AudioDeviceManager.get(),d=c.getDefaultAudioSettings(),l=(0,S.filterDeviceId)(e,d.inputId),u=(0,S.filterDeviceId)(t,d.outputId),h=c.getDefaultAudioSettings(),{inputId:p,outputId:f}=h,m=[p,f].some((e=>Boolean(e)));y.Utils.hasFeature(M.featureMap.disableAutoSwitchAudioDevice)&&!m||(this.logger.info(`Input device id - ${l} will be active`),this.logger.info(`Output device id - ${u} will be active`),await this.setCallsAudioSettings({inputId:l,outputId:u}),c.setDefaultAudioSettings({inputId:l,outputId:u})),this.lastDevicesSet=r;const C={name:a.default.HardwareEvents.DevicesUpdated,audioOutputDevices:t,audioInputDevices:e,videoInputDevices:n};this.dispatchEvent(C)}catch(e){this.logger.error(`Device change error: ${e.message}`)}}static get(){return void 0===R.instance&&(R.instance=new R),R.instance}async setCallsAudioSettings(e){const t=Object.values(h.CallManager.get().calls);if(!t?.length)return;const n=t.reduce(((t,n)=>(n.state()!==m.CallState.ENDED&&t.push(g.AudioDeviceManager.get().setCallAudioSettings(n,e)),t)),[]);await Promise.all(n)}async validateCallDevicesParams(e){if(c.default.isSafariIos()){this.logger.info(`Validate call ${e.id()} devices params`);try{const t=await g.AudioDeviceManager.get().validateIOSCallDevicesParams(e);if(!t)return void this.logger.info(`Call ${e.id()} devices params are valid`);const[n,i]=await Promise.all([g.AudioDeviceManager.get().getOutputDevices(),o.CameraManager.get().getInputDevices()]);return this.logger.warning(`Call ${e.id()} devices params are invalid`),{audioInputDevices:t,audioOutputDevices:n,videoInputDevices:i}}catch(t){return void this.logger.error(`Could not validate params for call ${e.id()}: ${t.message}`)}}}async getCallStream(e,t){const n={force:!1,resetDefaultAudio:!0,...t??{}},i=void 0===e?"__default":e.id();if(this._callStreams[i]&&!n.force)return this._callStreams[i];{const t=await this.validateCallDevicesParams(e),r=this._composeConstraints(e);if(this.logger.info(`[constraints]: ${JSON.stringify(r)}`),!r.audio&&!r.video&&"__default"!==i)return null;try{n.resetDefaultAudio&&(0,E.isDefaultAudioDeviceConstraint)(r)&&this._callStreams[i]?.getAudioTracks().forEach((e=>{e.onended=null,e.onmute=null,e.stop(),this._callStreams[i]?.removeTrack(e)}));const s=await R.getUserMedia(r);this.logger.info("Media access granted"),this._callStreams[i]=s,s.getTracks().forEach((e=>{e.onended=this.onCallEnded,e.onmute=this.onCallEnded}));const o=e.state();return o===m.CallState.STOPPING||o===m.CallState.ENDED?(this.logger.info(`Media Stream will be stopped, because call in ${o} state`),s):(l.Client.getInstance().dispatchEvent({name:d.Events.MicAccessResult,result:!0,stream:s}),t&&R.get().dispatchEvent({name:a.default.HardwareEvents.DevicesUpdated,...t}),s)}catch(t){let n=null;this.logger.warning(`Could not get media stream the first time. Error name: ${t.name}, error reason: ${t.message}`),"OverconstrainedError"===t?.name&&this.logger.error(`OverconstrainedError: ${t.constraint}`);try{"NotFoundError"===t?.name&&(n=await this._handleNotFoundError(e,r)),"NotReadableError"===t?.name&&(n=await this._handleNotReadableError(e,r))}catch(e){throw this.logger.error(`Media access denied: ${e?.message||e?.name||e||"unknown"}`),l.Client.getInstance().dispatchEvent({name:d.Events.MicAccessResult,result:!1,stream:null}),e}if(!n)throw new Error("Cannot get stream");return this.logger.info("Media access granted"),this._callStreams[i]=n,n.getTracks().forEach((e=>{e.onended=this.onCallEnded,e.onmute=this.onCallEnded})),l.Client.getInstance().dispatchEvent({name:d.Events.MicAccessResult,result:Boolean(n),stream:n,fallback:!0}),n}}}async _handleNotFoundError(e,t){let n={audio:!0};return this.logger.info(`[NotFoundError backup constraints]: ${JSON.stringify(t)}`),void 0!==e&&(e.settings.videoDirections.sendVideo=!1,n=this._composeConstraints(e)),await R.getUserMedia(n)}async _handleNotReadableError(e,t){const n=void 0===e?"__default":e.id();this.logger.info(`[NotReadableError constraints]: ${JSON.stringify(t)}`);const i=this._callStreams[n];i&&i.getTracks().forEach((e=>e.stop()));try{return await R.getUserMedia(t)}catch(t){this.logger.warning(`Could not handle NotReadableError. Error name: ${t.name}, error reason: ${t.message}`);const n={video:Boolean(e?.settings?.videoDirections?.sendVideo),audio:!0};return this.logger.info(`[NotReadableError fallback constraints]: ${JSON.stringify(n)}`),await R.getUserMedia(n)}}_updateCallStream(e){return this.remCallStream(e),this.getCallStream(e)}updateCallStream(e){return this.logger.info(`Updating call ${e.id()} stream`),new Promise(((t,n)=>{const i=this._callStreams[e.id()],r=()=>{setTimeout((()=>this.updateLocalVideo()),500),e.peerConnection.restoreMute();const t=()=>{i.getTracks().forEach((t=>{e.peerConnection.getTransceivers().some((e=>e.sender.track&&e.sender.track.id===t.id))||c.default.isIphone()||t.stop()}))};setTimeout(t,500),setTimeout(t,2e3),setTimeout(t,5e3)},a=()=>{r(),t()};this.getCallStream(e,{force:!0}).then((t=>{const r=i.getTracks(),s=t.getTracks(),o=r.map((e=>e.kind)).sort(),c=s.map((e=>e.kind)).sort();return p.CallPromiseResolver.add(e,{resolve:a,reject:n,dispatchEvent:f.dispatchUpdatedEvent.bind(null,e)}),r.length===s.length&&o.every(((e,t)=>e===c[t]))?e.peerConnection.updateCustomMedia(t):(e.peerConnection.fastRemoveCustomMedia(i),this._remCallStream(i),e.peerConnection.addCustomMedia(t))})).catch(n)}))}async updateStreamSettings(e){this.logger.info(`Updating call ${e.id()} stream settings`);try{const t=await this.getCallStream(e,{force:!0});await e.peerConnection.updateMediaTracks(t),e.peerConnection.updateSenderTrackTransformers(),await this.updateLocalVideo()}catch(e){throw this.logger.error(`updateStreamSettings error: ${e.message}`),e}}remCallStream(e){const t=void 0===e?"__default":e.id();this._callStreams[t]&&(this._remCallStream(this._callStreams[t]),this._callStreams[t]=void 0,delete this._callStreams[t])}_remCallStream(e){e&&(c.default.isIphone()||e.getTracks().forEach((t=>{t.onended=void 0,t.onmute=void 0,t.stop(),e.removeTrack(t)})))}clear(){this._mirrorStream&&this._mirrorStream.getTracks().forEach((e=>{e.onended=void 0,e.onmute=void 0,e.stop()})),this._mirrorStream=void 0;for(let e in this._callStreams)if(this._callStreams.hasOwnProperty(e)){const t=this._callStreams[e];t&&t.getTracks().forEach((e=>{e.onended=void 0,e.onmute=void 0,e.stop()}))}this._callStreams={}}getLocalMediaRenderers(){return this._localMediaRenderers}showLocalVideo(e=!0){return this.logger.info("Call to show local video."),new Promise(((t,n)=>{const i="voximplantlocalvideo";if(this.isLocalVideoRequested)return this.logger.warning("The local video is already displaying."),t(this._localMediaRenderers[0]);const r=this._getVideoFromCalls();if(this.isLocalVideoRequested=!0,r){const n=new u.MediaRenderer({stream:new MediaStream([r]),kind:v.MediaRendererKind.Video,placeOnDom:e,isLocal:!0,deprecatedId:i,mids:["local"]});this._localMediaRenderers.push(n),this.logger.info("New localMediaRenderer for existing track has been added."),t(n),this.dispatchEvent({name:a.default.HardwareEvents.MediaRendererAdded,renderer:n})}else{const r=this.getDedicatedMirrorStream().then((async n=>{this._dedicatedMirrorStream&&this.stopDedicatedMirrorStream(),this.originalDedicatedTrack=n.getVideoTracks()[0];const r=l.Client.getInstance().videoMediaTrackTransform;if(r){const e=await r(this.originalDedicatedTrack),t=this.originalDedicatedTrack.label;Object.defineProperty(e,"label",{get:()=>t,configurable:!0,enumerable:!0}),n.removeTrack(this.originalDedicatedTrack),n.addTrack(e)}this._dedicatedMirrorStream=n;const s=new u.MediaRenderer({stream:n,kind:v.MediaRendererKind.Video,placeOnDom:e,isLocal:!0,deprecatedId:i,mids:["local"]});this._localMediaRenderers.push(s),this.logger.info("New localMediaRenderer has been added. New stream has been created."),t(s),this.dispatchEvent({name:a.default.HardwareEvents.MediaRendererAdded,renderer:s})})).catch((e=>{this.isLocalVideoRequested=!1,n(e)}));this.localVideoPromises.push(r)}}))}async getDedicatedMirrorStream(){try{return this.logger.info("Getting dedicated mirror stream."),await R.getUserMedia({video:o.CameraManager.get().getCallConstraints("__local__")})}catch(e){if("NotReadableError"===e?.name)return this.logger.info("Could not get mirror stream. Will do it again."),this.stopDedicatedMirrorStream(),await R.getUserMedia({video:o.CameraManager.get().getCallConstraints("__local__")});throw e}}stopDedicatedMirrorStream(){if(this.originalDedicatedTrack&&(this.originalDedicatedTrack.stop(),this.originalDedicatedTrack=null),this._dedicatedMirrorStream){this._dedicatedMirrorStream.getTracks().forEach((e=>{e.onended=null,e.onmute=null,e.stop()}));try{this._dedicatedMirrorStream.stop(),this.logger.info("Dedicated mirror stream has been stopped.")}catch(e){}this._dedicatedMirrorStream=null}}async updateLocalVideo(e){if(this._localMediaRenderers&&0===this._localMediaRenderers.length)return void this.logger.info("Local video was not updated because there is 0 local media renderers.");if(!this.isLocalVideoRequested)return void this.logger.info("Local video was not updated because it was not requested.");const t=this._getVideoFromCalls();if(this.logger.info(`Local video for rendererKind: ${e} will be updated. Track from call exist: ${Boolean(t)}`),t)this._localMediaRenderers[0].stream.getVideoTracks()[0].id!==t.id?(this._localMediaRenderers[0].replaceVideo(new MediaStream([t])),this.stopDedicatedMirrorStream(),this.dispatchEvent({name:a.default.HardwareEvents.MediaRendererUpdated,renderer:this._localMediaRenderers[0],type:e||this._localMediaRenderers[0].kind})):this.logger.info("Local media renderer contains different track from call.");else try{const t=await this.getDedicatedMirrorStream();this._dedicatedMirrorStream&&this.stopDedicatedMirrorStream(),this._dedicatedMirrorStream=t,this.originalDedicatedTrack&&this.originalDedicatedTrack.stop(),this.originalDedicatedTrack=t.getVideoTracks()[0];const n=l.Client.getInstance().videoMediaTrackTransform;if(n){const e=await n(this.originalDedicatedTrack),i=this.originalDedicatedTrack.label;Object.defineProperty(e,"label",{get:()=>i,configurable:!0,enumerable:!0}),t.removeTrack(this.originalDedicatedTrack),t.addTrack(e)}this._localMediaRenderers[0]&&(this._localMediaRenderers[0].kind=e||"Video",this._localMediaRenderers[0].replaceVideo(t),this.dispatchEvent({name:a.default.HardwareEvents.MediaRendererUpdated,renderer:this._localMediaRenderers[0],type:e||this._localMediaRenderers[0].kind}))}catch(e){this.logger.error(`Unable to update local video: ${e.message}`)}}async hideLocalVideo(){return this.isLocalVideoRequested?(await Promise.all(this.localVideoPromises),this.logger.info("Start hiding local video."),this.localVideoPromises=[],0===this._localMediaRenderers.length?(this.logger.info("There isn't local media renderer."),Promise.resolve()):(this.dispatchEvent({name:a.default.HardwareEvents.BeforeMediaRendererRemoved,renderer:this._localMediaRenderers[0]}),this.isLocalVideoRequested=!1,this._dedicatedMirrorStream&&this.stopDedicatedMirrorStream(),this._localMediaRenderers[0].clear(),this._localMediaRenderers[0].stream=null,this._localMediaRenderers.shift(),this.dispatchEvent({name:a.default.HardwareEvents.MediaRendererRemoved,renderer:this._localMediaRenderers[0]}),this.logger.info("Local video has been hidden."),Promise.resolve())):(this.logger.info("Nothing to hide. Local video was not requested."),Promise.resolve())}on(e,t,n){super.on(e,t)}off(e,t){super.off(e,t)}_newScreenSharing(e){return this.logger.info("Getting media for screen sharing."),new Promise(((t,n)=>{c.default.getScreenMedia().then((n=>{this.logger.info("Media access granted");const i={stream:n,renderer:null};n.getTracks().forEach((t=>{t.onended=()=>e.stopSharingScreen()}));let r=this._localMediaRenderers?.[0];r&&(r.kind=v.MediaRendererKind.Sharing),void 0===this._sharingStreams[e.id()]&&(this._sharingStreams[e.id()]=[]),this._sharingStreams[e.id()].push(i),t(i)})).catch((e=>{this.logger.error(`Media access denied: ${e?e.message||e.name||e:"unknown"}`),n(e)}))}))}_getScreenSharing(e){return void 0!==this._sharingStreams[e.id()]?this._sharingStreams[e.id()]:[]}_clearScreenSharing(e,t){return this.logger.info("Stopping sharing media stream."),new Promise((n=>{this._sharingStreams[e.id()]=this._sharingStreams[e.id()].filter((e=>e.stream.id!==t.stream.id)),t.renderer&&(this._localMediaRenderers=this._localMediaRenderers.filter((e=>e.id!==t.renderer.id)),t.renderer.clear(),t.renderer=void 0),t.stream.getTracks().forEach((e=>{e.enabled=!1,e.onended=null,e.stop()})),"sharing"===this._localMediaRenderers[0]?.kind&&(this._localMediaRenderers[0].kind=v.MediaRendererKind.Video),this.logger.info("Sharing media stream has been stopped."),e.dispatchEvent({name:C.CallEvents.SharingStopped,call:e,result:!0}),n()}))}_getTracksKind(e){let t={};const n=this._callStreams[e.id()];void 0!==n&&n.getTracks().forEach((e=>t[e.id]=e.kind));const i=this._sharingStreams[e.id()];return void 0!==i&&i.forEach((e=>{e.stream.getTracks().forEach((e=>t[e.id]="sharing"))})),t}_traceName(){return"StreamManager"}_getVideoFromCalls(){const e=h.CallManager.get(),t=[];for(const n in e.calls)if(e.calls.hasOwnProperty(n)){const i=e.calls[n];if(!i.active())break;const r={time:i.getCallDuration(),track:null};if(i.peerConnection){i.peerConnection.getTransceivers().forEach((e=>{null===r.track&&-1!==e.direction.indexOf("send")&&e.sender.track&&"video"===e.sender.track.kind&&"live"===e.sender.track.readyState&&(r.track=e.sender.track)}))}r.track&&t.push(r)}return t.length?(t.sort(((e,t)=>e.time>t.time?1:e.time<t.time?-1:0)),t[0].track):null}onCallEnded(){}_composeConstraints(e){const t=void 0===e?"__default":e.id(),n={};return"__default"!==t&&void 0!==e&&e.settings.videoDirections.sendVideo?n.video=o.CameraManager.get().getCallConstraints(t):n.video=!1,"__default"===t||e.settings.audioDirections.sendAudio?n.audio=g.AudioDeviceManager.get().getCallConstraints(t):n.audio=!1,n}static getUserMedia(e){return new Promise(((t,n)=>{const i=navigator.mediaDevices.getUserMedia(e).then((e=>{R.umCache.push(e),t(e)})).catch(n);R.umCachePromises.push(i)}))}static async clearUmCache(){await Promise.all(R.umCachePromises),R.umCachePromises=[],R.umCache=R.umCache.filter((e=>{const t=R.get()._dedicatedMirrorStream;return!(!t||e.id!==t.id)||(e.getTracks().forEach((e=>e.stop())),!1)}))}}R.umCache=[],R.umCachePromises=[],i([(0,_.debounceDecorator)(1e3)],R.prototype,"handleDeviceChange",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"setCallsAudioSettings",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"validateCallDevicesParams",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"getCallStream",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"_handleNotFoundError",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"_handleNotReadableError",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"_updateCallStream",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"updateCallStream",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"remCallStream",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"_remCallStream",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"clear",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"getLocalMediaRenderers",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"showLocalVideo",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"hideLocalVideo",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"on",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"off",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"_newScreenSharing",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"_getScreenSharing",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"_clearScreenSharing",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"_getTracksKind",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"onCallEnded",null),i([r.LogManager.d_trace(r.LogCategory.HARDWARE)],R.prototype,"_composeConstraints",null),t.StreamManager=R},4855:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StreamManager=t.CameraManager=t.AudioDeviceManager=void 0;var i=n(2709);Object.defineProperty(t,"AudioDeviceManager",{enumerable:!0,get:function(){return i.AudioDeviceManager}});var r=n(2334);Object.defineProperty(t,"CameraManager",{enumerable:!0,get:function(){return r.CameraManager}});var a=n(4007);Object.defineProperty(t,"StreamManager",{enumerable:!0,get:function(){return a.StreamManager}})},6230:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.PushService=void 0;const i=n(4106),r=n(209),a=n(245);class s{static updatePromiseResult(e){const t=this._pushPromises[e.params];t&&(clearTimeout(t.expire),e.msg?t.reject(e.msg):t.resolve(),delete this._pushPromises[e.params])}static register(e){return new Promise(((t,n)=>{const s=(new r.default).toString();a.default.callRemoteFunction(i.RemoteFunction.registerPushToken,e,s)?this._pushPromises[s]={resolve:t,reject:n,expire:setTimeout(n,3e4)}:n()}))}static unregister(e){return new Promise(((t,n)=>{const s=(new r.default).toString();a.default.callRemoteFunction(i.RemoteFunction.unregisterPushToken,e,s)?this._pushPromises[s]={resolve:t,reject:n,expire:setTimeout(n,3e4)}:n()}))}static incomingPush(e){return new Promise(((t,n)=>{a.default.callRemoteFunction(i.RemoteFunction.pushFeedback,e)?t():n()}))}_traceName(){return"PushService"}}t.PushService=s,s._pushPromises={}},1150:(e,t)=>{"use strict";var n,i;Object.defineProperty(t,"__esModule",{value:!0}),t.LogManager=t.Logger=t.ClientState=t.LogCategory=t.LogLevel=void 0,function(e){e[e.NONE=0]="NONE",e[e.ERROR=1]="ERROR",e[e.WARNING=2]="WARNING",e[e.INFO=3]="INFO",e[e.TRACE=4]="TRACE"}(n=t.LogLevel||(t.LogLevel={})),function(e){e[e.SIGNALING=0]="SIGNALING",e[e.RTC=1]="RTC",e[e.USERMEDIA=2]="USERMEDIA",e[e.CALL=3]="CALL",e[e.CALLEXP2P=4]="CALLEXP2P",e[e.CALLEXSERVER=5]="CALLEXSERVER",e[e.CALLMANAGER=6]="CALLMANAGER",e[e.CLIENT=7]="CLIENT",e[e.AUTHENTICATOR=8]="AUTHENTICATOR",e[e.PCFACTORY=9]="PCFACTORY",e[e.UTILS=10]="UTILS",e[e.ORTC=11]="ORTC",e[e.MESSAGING=12]="MESSAGING",e[e.REINVITEQ=13]="REINVITEQ",e[e.HARDWARE=14]="HARDWARE",e[e.ENDPOINT=15]="ENDPOINT",e[e.EVENTTARGET=16]="EVENTTARGET",e[e.VSM=17]="VSM"}(i=t.LogCategory||(t.LogCategory={})),function(e){e[e.DISCONNECTED="DISCONNECTED"]="DISCONNECTED",e[e.CONNECTING="CONNECTING"]="CONNECTING",e[e.CONNECTED="CONNECTED"]="CONNECTED",e[e.RECONNECTING="RECONNECTING"]="RECONNECTING",e[e.LOGGING_IN="LOGGING_IN"]="LOGGING_IN",e[e.LOGGED_IN="LOGGED_IN"]="LOGGED_IN"}(t.ClientState||(t.ClientState={}));class r{constructor(e,t,n){this.category=e,this.label=t,this.provider=n}log(e,t){this.provider.writeMessage(this.category,this.label,e,t)}error(e){this.log(n.ERROR,e)}warning(e){this.log(n.WARNING,e)}info(e){this.log(n.INFO,e)}trace(e){this.log(n.TRACE,e)}}t.Logger=r;class a{constructor(){this.timeOriginGap=0,this.isFirstPrint=!0,this.levels={},this.showTrace=!1,this._shadowLogging=!1}get shadowLogging(){return this._shadowLogging}set shadowLogging(e){this._shadowLogging||(this._shadowLog=[]),this._shadowLogging=e}static get(){return void 0===this.inst&&(this.inst=new a,this.inst.prettyPrint=!1),this.inst}static d_trace(e){return(t,i,r)=>({value:function(...s){const o="login"===i||"basicLogin"===i||"sendWSMessage"===i&&"login"===s[0],c="sendWSMessage"===i?2:1,d=t._traceName?`${t._traceName()}${this&&this.settings?` ${this.settings.id}`:this&&this.id&&"function"!=typeof this.id?` ${this.id}`:""}`:"";let l="";try{l=s.map(((e,t)=>o&&t===c?'"********"':JSON.stringify(e))).join()}catch(e){l="circular structure"}return a.get().writeMessage(e,d,n.TRACE,`${String(i)}(${l})`),r.value.apply(this,s)}})}getSLog(){return this._shadowLog}clearSilentLog(){this._shadowLog=[]}setLoggerCallback(e){this._outerCallback=e}setPrettyPrint(e){this.prettyPrint=e}setLogLevel(e,t){t===n.TRACE?this.showTrace=!0:this.levels[i[e]]=t}writeMessage(e,t,r,s){r===n.TRACE?a.traceTick++:a.logTick++,this.timeOriginGap||(this.timeOriginGap=performance.now());const o="string"==typeof s?s:JSON.stringify(s),c=this.isFirstPrint?this.prettyPrint?(new Date).toUTCString():(new Date).toString():parseInt(""+(performance.now()-this.timeOriginGap)/1e3),d=r===n.TRACE?`VIWSTR ${a.traceTick}`:`VIWSLR ${a.logTick}`,l=`${d} ${c} ${n[r]} ${t}: ${o}`;if(r<=(void 0!==this.levels[i[e]]?this.levels[i[e]]:n.NONE)||r===n.TRACE&&this.showTrace){if(void 0!==console.debug&&void 0!==console.info&&void 0!==console.error&&void 0!==console.warn)if(this.prettyPrint){const e=`%c${d} ${c} [${n[r]}] %c${t}: %c${o}`,i={[n.ERROR]:"color:#fab005",[n.WARNING]:"color:#af2a2a",[n.INFO]:"color:#0ca678",[n.TRACE]:"color:#8f66ff"};r===n.ERROR?console.error(l):r===n.WARNING?console.warn(e,i[r],"color:#2375a2","color:#000"):r===n.INFO?console.info(e,i[r],"color:#2375a2","color:#000"):r===n.TRACE?console.debug(e,i[r],"color:#2375a2","color:#000"):console.log(e,i[r],"color:#2375a2","color:#000")}else r===n.ERROR?console.error(l):r===n.WARNING?console.warn(l):r===n.INFO?console.info(l):r===n.TRACE?console.debug(l):console.log(l);else console.log(l);this.isFirstPrint&&(this.isFirstPrint=!1)}this.shadowLogging&&(r!==n.TRACE||this.showTrace)&&this._shadowLog.push(l),"function"!=typeof this._outerCallback||r===n.TRACE&&!this.showTrace||this._outerCallback({formattedText:l,category:e,label:t,level:r,message:o})}createLogger(e,t){return new r(e,t,this)}_traceName(){return"Logger"}}t.LogManager=a,a.logTick=0,a.traceTick=0},164:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LoginState=void 0,function(e){e[e.LOGGED_OFF=0]="LOGGED_OFF",e[e.LOGGING_IN=1]="LOGGING_IN",e[e.LOGGED_IN=2]="LOGGED_IN"}(t.LoginState||(t.LoginState={}))},1450:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MediaRenderDisablingReason=void 0,function(e){e.Automatic="automatic",e.Manual="manual"}(t.MediaRenderDisablingReason||(t.MediaRenderDisablingReason={}))},7222:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.MediaRenderer=void 0;const r=n(3869),a=n(125),s=n(1150),o=n(2957),c=n(2282),d=n(141),l=n(7272),g=n(8597),u=n(6980),h=n(7998);class p{constructor(e){this._playElemLock=0,this.listenersAbortController=null,this._enabled=!0,this.isRemoving=!1;const{stream:t,kind:n,placeOnDom:i,isLocal:a,deprecatedId:c,transceivers:d,mids:g}=e;if(this.transceivers=d,this.stream=t,this.kind=n,this.mids=g,this.placeOnDom=i||!1,this.isLocal=a||!1,void 0===this.kind&&(this.kind=t.getVideoTracks().length?h.MediaRendererKind.Video:h.MediaRendererKind.Audio),this._id=o.Utils.generateUUID(),this.logger=s.LogManager.get().createLogger(s.LogCategory.USERMEDIA,this._traceName()),this.stream.getTracks().forEach((e=>{e.onended=()=>{this.checkStreamActive(t)}})),this.stream.getTracks().length){if(this.element=document.getElementById(this.stream.getTracks()[0].id)||document.createElement("sharing"===this.kind?"video":this.kind),this.element.autoplay=!0,this.isLocal&&(this.element.muted=!0),this.element.setAttribute("playsinline",null),c?document.getElementById("voximplantlocalvideo")?this.element.id=this.stream.getTracks()[0].id:this.element.id="voximplantlocalvideo":this.element.id=this.stream.getTracks()[0].id,"audio"!==n)this.stream.getAudioTracks().length||(this.element.muted=!0);else{const e=l.default.AudioDeviceManager.get().getDefaultAudioSettings();e.outputId&&"function"==typeof this.element.setSinkId&&this.element.setSinkId("").then((()=>{this.element.setSinkId(e.outputId+"")})).catch((()=>{this.element.setSinkId(e.outputId+"")}))}r.default.attachMedia(this),this.placeOnDom&&this.renderDefault()}}checkStreamActive(e){e.getTracks().every((e=>"ended"===e.readyState))&&setTimeout((()=>{this.stream.getTracks().every((e=>"ended"===e.readyState))&&this.clear()}),100)}get id(){return this._id}renderDefault(){const e=a.Client.getInstance(),t=this.isLocal?e.config().localVideoContainerId:e.config().remoteVideoContainerId,n=document.getElementById(t);this.render(n)}get enabled(){const e=u.VideoStatusMachineMediator.retrieveVSMByMediaRenderer(this);return e?"enabled"===e.value:this._enabled}enable(){if(!this.transceivers.length)throw Error("Transceiver list is empty");this.makeVideoStatusTransition("enable"),this._enabled=!0,this.conferenceEpManagerUpdateState&&this.conferenceEpManagerUpdateState()}disable(){if(!this.transceivers.length)throw Error("Transceiver list is empty");this.makeVideoStatusTransition("disable"),this._enabled=!1,this.conferenceEpManagerUpdateState&&this.conferenceEpManagerUpdateState()}requestVideoSize(e,t){return this.transceivers.length?(this.videoSize={width:e,height:t},this.conferenceEpManagerUpdateRenderSize(),Promise.resolve()):Promise.reject()}render(e){if(this.logger.info(`render() id: ${this._id} to ${e?e.tagName.toLowerCase():"no_container"} #${e?e.id:"no_container"} class ${e?e.className:"no_container"}`),!(a.Client.getInstance().config()&&a.Client.getInstance().config().experiments&&a.Client.getInstance().config().experiments.preventRendering))if(e&&("video"===e.tagName.toLowerCase()&&"audio"!==this.kind||"audio"===e.tagName.toLowerCase()&&"audio"===this.kind))this.isElementCreated=!1,this.element=e,r.default.attachMedia(this),this.addListeners();else{this.isElementCreated=!0;const t=e||document.body;void 0!==this.element.parentElement&&null!==this.element.parentElement?this.element.parentElement&&this.element.parentElement.removeChild(this.element):this.element.parentNode&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),t.appendChild(this.element),this.addListeners()}}addListeners(){this.listenersAbortController?.abort(),this.listenersAbortController=new AbortController;const e=this.listenersAbortController.signal;this.element.addEventListener("canplaythrough",this.onCanplaythrough.bind(this),{signal:e}),this.element.addEventListener("error",this.onError.bind(this),{signal:e}),this.element.addEventListener("abort",this.onAbort.bind(this),{signal:e}),this.element.addEventListener("stalled",this.onStalled.bind(this),{signal:e}),this.element.addEventListener("suspend",this.onSuspend.bind(this),{signal:e})}removeListeners(){this.listenersAbortController?.abort()}onCanplaythrough(){this.element&&(this.playElement(),this.element.addEventListener("pause",this.playElement.bind(this),{signal:this.listenersAbortController?.signal}))}onError(e){this.element&&this.logger.info(`An error occurred during the loading of an ${this.kind} for ${JSON.stringify(this.mids)}: ${JSON.stringify(e)}`)}onAbort(){this.element&&this.logger.info(`The loading of an ${this.kind} for ${JSON.stringify(this.mids)} is aborted.`)}onStalled(){this.element&&this.logger.info(`Failed to fetch data, but trying for ${this.kind} ${JSON.stringify(this.mids)}`)}onSuspend(){this.element&&this.logger.info(`The media ${this.kind} for ${JSON.stringify(this.mids)} has been suspended.`)}replaceVideo(e){e?(this.stream=e,this.element?r.default.attachMedia(this):this.logger.info("replaceVideo(): replacing video has failed: DOM element is undefined")):this.logger.error("replaceVideo(): replacing video has failed: a mediastream is not provided")}makeVideoStatusTransition(e){const t=u.VideoStatusMachineMediator.retrieveVSMByMediaRenderer(this);if(t){const n=`${e.toUpperCase()}_VIDEO`;if(!u.VideoStatusMachineMediator.makeTransition(t,n)){const n=t.value.replace(/([a-z])([A-Z])/g,"$1 $2").toLowerCase();throw Error(`Cannot ${e} the media renderer due to the one is already ${n}`)}}}clear(){this.isRemoving?this.logger.info(`MediaRendered ID: already removing ${this._id}. Ignored.`):(this.isRemoving=!0,this.logger.info(`MediaRendered ID: ${this._id}. Start clear routine.`),this.onBeforeDestroy&&this.onBeforeDestroy(),this.element&&(this.removeListeners(),r.default.detachMedia(this),this.isElementCreated&&(this.element.id="",void 0!==this.element.parentElement&&null!==this.element.parentElement?this.element.parentElement&&this.element.parentElement.removeChild(this.element):this.element.parentNode&&this.element.parentNode&&this.element.parentNode.removeChild(this.element))),this.onDestroy&&this.onDestroy())}setVolume(e){this.logger.info(`setVolume(${e})`),this.element&&(this.element.volume=e)}async useAudioOutput(e){if(this.logger.info(`useAudioOutput(${e}) on MediaRenderer ${this.kind}`),"audio"===this.kind)try{"function"==typeof this.element.setSinkId?await this.element.setSinkId(e):this.logger.warning("Set audio output is impossible. Browser does not support this option.")}catch(e){this.logger.error(`useAudioOutput(): error has occurred on MR with kind ${this.kind} ${o.Utils.stringifyError(e)}`)}else this.logger.info(`useAudioOutput(): media renderer with kind ${this.kind} has been skipped. Only audio media renderers support this function`)}_traceName(){return"MediaRenderer"}playElement(){this.element&&this.element.paused&&this.element.readyState>3&&(this.logger.info(`MediaRenderer ID:${this._id} for ${JSON.stringify(this.mids)} is trying to play`),this.element.play().catch((e=>{this.logger.warning(`Cannot start playing MediaRenderer ID:${this._id}. ${e.message}`),a.Client.getInstance().dispatchEvent({name:d.Events.PlaybackError,element:this.element,error:e})})))}pauseElement(){if(0===this._playElemLock||this._playElemLock>10)if(this.element instanceof HTMLVideoElement){let e=this.element.pause();void 0!==e&&e.catch((e=>{}))}else this.element.pause();else this._playElemLock+=1,setTimeout(this.pauseElement,400)}notifyAboutCreation(e,t){t.wasAdded?(t.dispatchEvent({name:g.EndpointEvents.RemoteMediaAdded,call:e,endpoint:t,mediaRenderer:this}),e.dispatchEvent({name:c.CallEvents.MediaElementCreated,call:e,stream:this.stream,element:this.element,type:this.kind})):setTimeout((()=>this.notifyAboutCreation(e,t)),400)}}i([s.LogManager.d_trace(s.LogCategory.USERMEDIA)],p.prototype,"checkStreamActive",null),i([s.LogManager.d_trace(s.LogCategory.USERMEDIA)],p.prototype,"renderDefault",null),i([s.LogManager.d_trace(s.LogCategory.USERMEDIA)],p.prototype,"render",null),i([s.LogManager.d_trace(s.LogCategory.USERMEDIA)],p.prototype,"clear",null),i([s.LogManager.d_trace(s.LogCategory.USERMEDIA)],p.prototype,"setVolume",null),i([s.LogManager.d_trace(s.LogCategory.USERMEDIA)],p.prototype,"useAudioOutput",null),t.MediaRenderer=p},1316:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MediaRenderResolver=void 0;const n=["video","sharing"],i=["audio"];t.MediaRenderResolver=class{static isVideoMR(e){return n.includes(e.kind)}static isAudioMR(e){return i.includes(e.kind)}static retrieveVideoMR(e){return e.find(this.isVideoMR)}static retrieveAudioMR(e){return e.find(this.isAudioMR)}}},6054:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Messaging=void 0;const i=n(7250),r=n(311),a=n(8635);var s;!function(e){e.getInstance=function(){return t.getInstance()};class t extends i.Messenger{}e.Messenger=t;class n extends r.Conversation{}e.Conversation=n;class s extends a.Message{}let o,c,d;e.Message=s,function(e){e.UNKNOWN="UNKNOWN",e.createConversation="createConversation",e.editConversation="editConversation",e.removeConversation="removeConversation",e.joinConversation="joinConversation",e.leaveConversation="leaveConversation",e.getConversation="getConversation",e.getConversations="getConversations",e.getPublicConversations="getPublicConversations",e.searchConversations="searchConversations",e.removeEmptyConversation="removeEmptyConversation",e.addParticipants="addParticipants",e.editParticipants="editParticipants",e.removeParticipants="removeParticipants",e.getUser="getUser",e.getUsers="getUsers",e.editUser="editUser",e.setStatus="setStatus",e.sendMessage="sendMessage",e.editMessage="editMessage",e.removeMessage="removeMessage",e.typingMessage="typingMessage",e.isRead="isRead",e.subscribe="subscribe",e.unsubscribe="unsubscribe",e.manageNotification="manageNotification",e.getSubscriptionList="getSubscriptionList",e.createBot="createBot",e.removeBot="removeBot",e.retransmitEvents="retransmitEvents"}(o=e.MessengerAction||(e.MessengerAction={})),function(e){e.CreateConversation="CreateConversation",e.EditConversation="EditConversation",e.RemoveConversation="RemoveConversation",e.GetConversation="GetConversation",e.GetPublicConversations="GetPublicConversations",e.SendMessage="SendMessage",e.EditMessage="EditMessage",e.RemoveMessage="RemoveMessage",e.Typing="Typing",e.EditUser="EditUser",e.GetUser="GetUser",e.Error="Error",e.RetransmitEvents="RetransmitEvents",e.Read="Read",e.Subscribe="Subscribe",e.Unsubscribe="Unsubscribe",e.SetStatus="SetStatus",e.GetSubscriptionList="GetSubscriptionList",e.CreateBot="CreateBot",e.RemoveBot="RemoveBot"}(c=e.MessengerEvents||(e.MessengerEvents={})),function(e){e[e.Error_0=0]="Error_0",e[e.Error_1=1]="Error_1",e[e.Error_2=2]="Error_2",e[e.Error_3=3]="Error_3",e[e.Error_8=8]="Error_8",e[e.Error_10=10]="Error_10",e[e.Error_11=11]="Error_11",e[e.Error_12=12]="Error_12",e[e.Error_13=13]="Error_13",e[e.Error_15=15]="Error_15",e[e.Error_16=16]="Error_16",e[e.Error_18=18]="Error_18",e[e.Error_19=19]="Error_19",e[e.Error_21=21]="Error_21",e[e.Error_22=22]="Error_22",e[e.Error_23=23]="Error_23",e[e.Error_24=24]="Error_24",e[e.Error_25=25]="Error_25",e[e.Error_26=26]="Error_26",e[e.Error_28=28]="Error_28",e[e.Error_30=30]="Error_30",e[e.Error_32=32]="Error_32",e[e.Error_33=33]="Error_33",e[e.Error_34=34]="Error_34",e[e.Error_35=35]="Error_35",e[e.Error_36=36]="Error_36",e[e.Error_37=37]="Error_37",e[e.Error_38=38]="Error_38",e[e.Error_39=39]="Error_39",e[e.Error_40=40]="Error_40",e[e.Error_41=41]="Error_41",e[e.Error_42=42]="Error_42",e[e.Error_43=43]="Error_43",e[e.Error_44=44]="Error_44",e[e.Error_500=500]="Error_500",e[e.Error_10001=10001]="Error_10001",e[e.Error_10002=10002]="Error_10002"}(d=e.MessengerError||(e.MessengerError={}))}(s=t.Messaging||(t.Messaging={})),t.default=s},311:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.Conversation=void 0;const r=n(1150),a=n(7250),s=n(1855),o=n(8635),c=n(7050),d=n(8202),l=n(6968),g=n(6054),u=n(1660);class h{constructor(e){this._backup={},this._uuid=e.uuid,this._participants=e.participants,this._title=e.title,this._direct=e.direct,this._publicJoin=e.publicJoin,this._uberConversation=e.uberConversation,this._customData=e.customData,this._createdAt=e.createdAt,this._lastUpdate=e.lastUpdate,this._lastSeq=Number(e.lastSeq)}get uuid(){return this._uuid}get title(){return this._title}set title(e){this._backup.title=this._title,this._title=e}get createdAt(){return this._createdAt}get lastUpdate(){return this._lastUpdate}get direct(){return this._direct}get uberConversation(){return this._uberConversation}get publicJoin(){return this._publicJoin}set publicJoin(e){this._backup.publicJoin=this._publicJoin,this._publicJoin=e}get participants(){return this._participants}get customData(){return this._customData}set customData(e){this._backup.customData=this._customData,this._customData=e}get lastSeq(){return this._lastSeq}updateSeq(e){"number"==typeof e&&e>this._lastSeq&&(this._lastSeq=e),this._lastUpdate=Date.now()/1e3|0}static _createFromBus(e,t){return new h({participants:e.participants&&Array.isArray(e.participants)?e.participants.map((e=>{const t=Number(e.flags)===l.MsgPermissions.all,n=Number(e.flags)>l.MsgPermissions.is_owner&&e.flags<l.MsgPermissions.all,i=Number(e.flags).toString(2).slice(-6).split("").reverse();return{userId:Number(e.user_id),lastRead:e.last_read,isOwner:t||n,canWrite:t||"1"===i[0],canEdit:t||"1"===i[1],canRemove:t||"1"===i[2],canManageParticipants:t||"1"===i[3],canEditAll:t||"1"===i[4],canRemoveAll:t||"1"===i[5]}})):[],title:e.title,uuid:e.uuid,direct:e.direct,publicJoin:e.enable_public_join,uberConversation:e.uber_conversation,createdAt:e.created_at,lastUpdate:e.last_update,lastSeq:t,customData:e.custom_data&&"object"==typeof e.custom_data?e.custom_data:void 0})}static createFromCache(e){return new h({uuid:e.uuid,title:e.title,participants:e.participants||[],direct:e.direct,publicJoin:e.publicJoin,uberConversation:e.uberConversation,createdAt:e.createdAt,lastUpdate:e.lastUpdate,customData:e.customData})}toCache(){return{uuid:this._uuid,title:this._title,participants:this._participants,direct:this._direct,publicJoin:this._publicJoin,uberConversation:this._uberConversation,createdAt:this._createdAt,lastUpdate:this._lastUpdate,customData:this._customData,lastSeq:this._lastSeq}}_getCreatePayload(){return{participants:this._prepareParticipants(this._participants).map((e=>Object.assign(e,{flags:e.flags?e.flags:7}))),title:"string"==typeof this._title?this._title:"",direct:"boolean"==typeof this._direct&&this._direct,enable_public_join:"boolean"==typeof this._publicJoin&&this._publicJoin,uber_conversation:"boolean"==typeof this._uberConversation?this._uberConversation:void 0,custom_data:"object"==typeof this._customData?this._customData:{}}}_getEditPayload(){if(void 0===this._uuid)throw Error("You should get conversation UUID with MessengetAction.getConversation() action!");return{uuid:this._uuid,title:"string"==typeof this._title?this._title:"",enable_public_join:"boolean"==typeof this._publicJoin&&this._publicJoin,custom_data:"object"==typeof this._customData?this._customData:{}}}_getUserPermissions(e){const t=(e.isOwner?"1000000000":"")+[e.canRemoveAll,e.canEditAll,e.canManageParticipants,e.canRemove,e.canEdit,e.canWrite].map((e=>e?1:0)).join("");return parseInt(t,2)}_prepareParticipants(e){return e.map((e=>({user_id:e.userId,flags:this._getUserPermissions(e),last_read:e.lastRead})))}_revertChanges(){Object.keys(this._backup).forEach((e=>{this[e]=this._backup[e]})),this._backup={}}update(){return s.default.get().editConversation(this)}setTitle(e){return(0,u.validateString)(e)?(this._backup.title=this._title,this._title=e,s.default.get().editConversation(this)):a.Messenger.getInstance().reject(g.default.MessengerError.Error_10001,g.default.MessengerAction.editConversation)}setPublicJoin(e){return"boolean"!=typeof e?a.Messenger.getInstance().reject(g.default.MessengerError.Error_10001,g.default.MessengerAction.editConversation):(this._backup.publicJoin=this._publicJoin,this._publicJoin=e,s.default.get().editConversation(this))}setCustomData(e){return(0,u.validateConversationCustomData)(e)?(this._backup.customData=this._customData,this._customData=e,s.default.get().editConversation(this)):a.Messenger.getInstance().reject(g.default.MessengerError.Error_10001,g.default.MessengerAction.editConversation)}addParticipants(e){return new Promise(((t,n)=>{if(!(0,u.validateConversationParticipantArray)(e))return void a.Messenger.getInstance().reject(g.default.MessengerError.Error_10001,g.default.MessengerAction.addParticipants).catch(n);const i=c.MsgSignaling.get().sendWsMessage(d.MsgAction.addParticipants,{uuid:this._uuid,participants:this._prepareParticipants(e)});a.Messenger.getInstance()._registerPromise(i,t,n)}))}editParticipants(e){return new Promise(((t,n)=>{if(!(0,u.validateConversationParticipantArray)(e))return void a.Messenger.getInstance().reject(g.default.MessengerError.Error_10001,g.default.MessengerAction.editParticipants).catch(n);const i=c.MsgSignaling.get().sendWsMessage(d.MsgAction.editParticipants,{uuid:this._uuid,participants:this._prepareParticipants(e)});a.Messenger.getInstance()._registerPromise(i,t,n)}))}removeParticipants(e){return new Promise(((t,n)=>{if(!(0,u.validateConversationParticipantArray)(e))return void a.Messenger.getInstance().reject(g.default.MessengerError.Error_10001,g.default.MessengerAction.removeParticipants).catch(n);const i=c.MsgSignaling.get().sendWsMessage(d.MsgAction.removeParticipants,{uuid:this._uuid,participants:e.filter((e=>void 0!==e.userId)).map((e=>e.userId))});a.Messenger.getInstance()._registerPromise(i,t,n)}))}sendMessage(e,t){if(!(0,u.validateSendMessage)({text:e,payload:t}))return a.Messenger.getInstance().reject(g.default.MessengerError.Error_10001,g.default.MessengerAction.sendMessage);return new o.Message(e,t).sendTo(this)}typing(){return this._debounceLock?Promise.resolve(!1):(setTimeout((()=>{this._debounceLock=!1}),1e4),this._debounceLock=!0,new Promise(((e,t)=>{const n=c.MsgSignaling.get().sendWsMessage(d.MsgAction.typingMessage,{conversation:this._uuid});a.Messenger.getInstance()._registerPromise(n,e,t)})))}markAsRead(e){return new Promise(((t,n)=>{if(!(0,u.validateSeq)(e))return void a.Messenger.getInstance().reject(g.default.MessengerError.Error_10001,g.default.MessengerAction.isRead).catch(n);const i=c.MsgSignaling.get().sendWsMessage(d.MsgAction.isRead,{conversation:this._uuid,seq:e});a.Messenger.getInstance()._registerPromise(i,t,n)}))}retransmitEvents(e,t){return(0,u.validateRetransmitEventsFromTo)(e,t)?(0,u.validateRetransmitEventsFromGreaterThanTo)(e,t)?s.default.get().retransmitEvents({conversationUUID:this._uuid,eventsFrom:Number(e),eventsTo:Number(t)}):a.Messenger.getInstance().reject(g.default.MessengerError.Error_28,g.default.MessengerAction.retransmitEvents):a.Messenger.getInstance().reject(g.default.MessengerError.Error_10001,g.default.MessengerAction.retransmitEvents)}retransmitEventsFrom(e,t){return(0,u.validateRetransmitEventsFrom)(e,t)?s.default.get().retransmitEvents({conversationUUID:this._uuid,eventsFrom:Number(e),count:Number(t)}):a.Messenger.getInstance().reject(g.default.MessengerError.Error_10001,g.default.MessengerAction.retransmitEvents)}retransmitEventsTo(e,t){return(0,u.validateRetransmitEventsTo)(e,t)?s.default.get().retransmitEvents({conversationUUID:this._uuid,eventsTo:Number(e),count:Number(t)}):a.Messenger.getInstance().reject(g.default.MessengerError.Error_10001,g.default.MessengerAction.retransmitEvents)}_traceName(){return"Conversation"}}i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"updateSeq",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"toCache",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"_getCreatePayload",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"_getEditPayload",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"_prepareParticipants",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"_revertChanges",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"update",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"addParticipants",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"editParticipants",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"removeParticipants",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"typing",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"markAsRead",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"retransmitEvents",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"retransmitEventsFrom",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h.prototype,"retransmitEventsTo",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h,"_createFromBus",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],h,"createFromCache",null),t.Conversation=h},1855:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0});const r=n(7050),a=n(7250),s=n(311),o=n(8635),c=n(1150),d=n(6054),l=n(249),g=n(6623),u=n(8202),h=n(1660),p=n(3341);class f{constructor(){if(f.instance)throw new Error(g.MESSAGING_ERR_2);this.signalling=r.MsgSignaling.get(),this.signalling.addEventListener(l.MsgEvent.onCreateConversation,((e,t)=>{this.resolveEvent(e,d.default.MessengerEvents.CreateConversation,t)})),this.signalling.addEventListener(l.MsgEvent.onEditConversation,((e,t)=>{this.resolveEvent(e,d.default.MessengerEvents.EditConversation,t)})),this.signalling.addEventListener(l.MsgEvent.onRemoveConversation,((e,t)=>{a.Messenger.getInstance()._dispatchEvent(d.default.MessengerEvents.RemoveConversation,{uuid:e.object.uuid,seq:e.seq,messengerAction:d.default.MessengerAction[e.on_incoming_event],initiator:Number(e.initiator),timestamp:"number"==typeof e.timestamp?1e3*e.timestamp:void 0,requestUuid:t},t)})),this.signalling.addEventListener(l.MsgEvent.onGetConversation,((e,t)=>{this.resolveEvent(e,d.default.MessengerEvents.GetConversation,t)})),this.signalling.addEventListener(l.MsgEvent.onGetPublicConversations,((e,t)=>{a.Messenger.getInstance()._dispatchEvent(d.default.MessengerEvents.GetPublicConversations,{conversations:e.object.uuid,initiator:Number(e.initiator),messengerAction:d.default.MessengerAction[e.on_incoming_event],requestUuid:t},t)})),this.signalling.addEventListener(l.MsgEvent.onSendMessage,((e,t)=>{this.resolveMessageEvent(e,d.default.MessengerEvents.SendMessage,t)})),this.signalling.addEventListener(l.MsgEvent.onEditMessage,((e,t)=>{this.resolveMessageEvent(e,d.default.MessengerEvents.EditMessage,t)})),this.signalling.addEventListener(l.MsgEvent.onRemoveMessage,((e,t)=>{this.resolveMessageEvent(e,d.default.MessengerEvents.RemoveMessage,t)})),this.signalling.addEventListener(l.MsgEvent.isRead,((e,t)=>{a.Messenger.getInstance()._dispatchEvent(d.default.MessengerEvents.Read,{conversation:e.object.conversation,seq:e.object.seq,initiator:Number(e.initiator),messengerAction:d.default.MessengerAction[e.on_incoming_event],requestUuid:t},t)})),this.signalling.addEventListener(l.MsgEvent.onTyping,((e,t)=>{a.Messenger.getInstance()._dispatchEvent(d.default.MessengerEvents.Typing,{conversation:e.object.conversation,initiator:Number(e.initiator),messengerAction:d.default.MessengerAction[e.on_incoming_event],requestUuid:t},t)})),this.signalling.addEventListener(l.MsgEvent.onRetransmitEvents,((e,t)=>{a.Messenger.getInstance()._dispatchEvent(d.default.MessengerEvents.RetransmitEvents,(0,p.mapRetransmitEvents)(e,t),t)}))}static get(){return f.instance=f.instance||new f,f.instance}resolveEvent(e,t,n){const i=s.Conversation._createFromBus(e.object,e.seq);void 0!==i&&i.updateSeq(e.seq),a.Messenger.getInstance()._dispatchEvent(t,{conversation:i,initiator:Number(e.initiator),seq:e.seq,messengerAction:d.default.MessengerAction[e.on_incoming_event],timestamp:"number"==typeof e.timestamp?1e3*e.timestamp:void 0,requestUuid:n},n)}resolveMessageEvent(e,t,n){const i=o.Message._createFromBus(e.object,Number(e.initiator));a.Messenger.getInstance()._dispatchEvent(t,{message:i,initiator:Number(e.initiator),seq:e.seq,messengerAction:d.default.MessengerAction[e.on_incoming_event],timestamp:"number"==typeof e.timestamp?1e3*e.timestamp:void 0},n)}static deserialize(e){return s.Conversation.createFromCache(e)}static serialize(e){return e.toCache()}createConversation(e,t,n,i,r,o){return new Promise(((c,l)=>{if(!(0,h.validateConversationConfig)({participants:e,title:t,direct:n,publicJoin:i,uber:r,customData:o}))return void a.Messenger.getInstance().reject(d.default.MessengerError.Error_10001,d.default.MessengerAction.createConversation).catch(l);const g=this.signalling.sendWsMessage(u.MsgAction.createConversation,new s.Conversation({participants:e,title:t,direct:n,publicJoin:i,customData:o,uberConversation:r})._getCreatePayload());a.Messenger.getInstance()._registerPromise(g,c,l)}))}editConversation(e){return new Promise(((t,n)=>{let i;const r=e=>{e.requestUuid===i&&(clearTimeout(o),a.Messenger.getInstance().off(d.default.MessengerEvents.EditConversation,r),a.Messenger.getInstance().off(d.default.MessengerEvents.Error,s),t(e))},s=t=>{t.requestUuid===i&&(clearTimeout(o),a.Messenger.getInstance().off(d.default.MessengerEvents.EditConversation,r),a.Messenger.getInstance().off(d.default.MessengerEvents.Error,s),e._revertChanges(),n(t))},o=setTimeout((()=>{a.Messenger.getInstance().off(d.default.MessengerEvents.EditConversation,r),a.Messenger.getInstance().off(d.default.MessengerEvents.Error,s),a.Messenger.getInstance().reject(d.default.MessengerError.Error_10002,d.default.MessengerAction.editConversation).catch(n)}),a.Messenger.rejectTimeout);a.Messenger.getInstance().on(d.default.MessengerEvents.EditConversation,r),a.Messenger.getInstance().on(d.default.MessengerEvents.Error,s),i=this.signalling.sendWsMessage(u.MsgAction.editConversation,e._getEditPayload())}))}getConversation(e){return new Promise(((t,n)=>{if(!(0,h.validateString)(e))return void a.Messenger.getInstance().reject(d.default.MessengerError.Error_10001,d.default.MessengerAction.getConversation).catch(n);const i=this.signalling.sendWsMessage(u.MsgAction.getConversation,{uuid:e});a.Messenger.getInstance()._registerPromise(i,t,n)}))}getConversations(e){if(!(0,h.validateStringArray)(e))return a.Messenger.getInstance().reject(d.default.MessengerError.Error_10001,d.default.MessengerAction.getConversations);let t;const n=Promise.all(e.map((e=>new Promise(((n,i)=>{const r=i=>{i.requestUuid===t&&i.conversation.uuid===e&&(clearTimeout(o),a.Messenger.getInstance().off(d.default.MessengerEvents.GetConversation,r),a.Messenger.getInstance().off(d.default.MessengerEvents.Error,s),n(i))},s=e=>{e.requestUuid===t&&(clearTimeout(o),a.Messenger.getInstance().off(d.default.MessengerEvents.GetConversation,r),a.Messenger.getInstance().off(d.default.MessengerEvents.Error,s),i(e))},o=setTimeout((()=>{a.Messenger.getInstance().off(d.default.MessengerEvents.GetConversation,r),a.Messenger.getInstance().off(d.default.MessengerEvents.Error,s),a.Messenger.getInstance().reject(d.default.MessengerError.Error_10002,d.default.MessengerAction.getConversation).catch(i)}),a.Messenger.rejectTimeout);a.Messenger.getInstance().on(d.default.MessengerEvents.GetConversation,r),a.Messenger.getInstance().on(d.default.MessengerEvents.Error,s)})))));return t=this.signalling.sendWsMessage(u.MsgAction.getConversations,{uuid:e}),n}getPublicConversations(){return new Promise(((e,t)=>{const n=this.signalling.sendWsMessage(u.MsgAction.getPublicConversations,{});a.Messenger.getInstance()._registerPromise(n,e,t)}))}static extractUserName(e){if(-1===e.indexOf("@"))return e;{const t=e.split("@");return t[1]=t[1].split(".").splice(0,2).join("."),t.join("@")}}_traceName(){return"ConversationManager"}async retransmitEvents(e){return new Promise(((t,n)=>{let i,s,o,c=[],g=null;const h=()=>{clearTimeout(C),r.MsgSignaling.get().off(l.MsgEvent.onRetransmitEvents,f),a.Messenger.getInstance().off(d.default.MessengerEvents.Error,m)},f=(e,n)=>{const r=(0,p.mapRetransmitEvents)(e,n);if(r.requestUuid!==i)return;s||(s=r.initiator),o||(o=r.messengerAction);const a=Number(e.count);if(0===a)return h(),void t({events:[],initiator:s,messengerAction:o,requestUuid:i});null!==g||isNaN(a)||(g=a);const d=r.events?.[0];d&&(c.push(d),g&&c.length>=g&&(h(),t({events:c,initiator:s,messengerAction:o,requestUuid:i})))},m=e=>{e.requestUuid===i&&e.messengerAction===d.default.MessengerAction.retransmitEvents&&(h(),n(e))},C=setTimeout((()=>{h(),a.Messenger.getInstance().reject(d.default.MessengerError.Error_10002,d.default.MessengerAction.retransmitEvents).catch(n)}),a.Messenger.rejectTimeout);r.MsgSignaling.get().on(l.MsgEvent.onRetransmitEvents,f),a.Messenger.getInstance().on(d.default.MessengerEvents.Error,m),i=r.MsgSignaling.get().sendWsMessage(u.MsgAction.retransmitEvents,{conversation:e.conversationUUID,events_from:e.eventsFrom,events_to:e.eventsTo,count:e.count})}))}}i([c.LogManager.d_trace(c.LogCategory.MESSAGING)],f.prototype,"resolveEvent",null),i([c.LogManager.d_trace(c.LogCategory.MESSAGING)],f.prototype,"resolveMessageEvent",null),i([c.LogManager.d_trace(c.LogCategory.MESSAGING)],f.prototype,"createConversation",null),i([c.LogManager.d_trace(c.LogCategory.MESSAGING)],f.prototype,"editConversation",null),i([c.LogManager.d_trace(c.LogCategory.MESSAGING)],f.prototype,"getConversation",null),i([c.LogManager.d_trace(c.LogCategory.MESSAGING)],f.prototype,"getConversations",null),i([c.LogManager.d_trace(c.LogCategory.MESSAGING)],f.prototype,"getPublicConversations",null),i([c.LogManager.d_trace(c.LogCategory.MESSAGING)],f.prototype,"retransmitEvents",null),i([c.LogManager.d_trace(c.LogCategory.MESSAGING)],f,"get",null),i([c.LogManager.d_trace(c.LogCategory.MESSAGING)],f,"deserialize",null),i([c.LogManager.d_trace(c.LogCategory.MESSAGING)],f,"serialize",null),i([c.LogManager.d_trace(c.LogCategory.MESSAGING)],f,"extractUserName",null),t.default=f},8635:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.Message=void 0;const r=n(1150),a=n(7050),s=n(8202),o=n(7250);class c{constructor(e,t){this._text=e,void 0!==t&&Array.isArray(t)&&t.every((e=>e&&"object"==typeof e))?this._payload=t:this._payload=[]}get uuid(){return this._uuid}get conversation(){return this._conversation}get text(){return this._text}set text(e){this._text=e}get payload(){return this._payload}set payload(e){this._payload=e}get sender(){return this._sender}static _createFromBus(e,t){let n=new c(e.text,e.payload);return n._uuid=e.uuid,n._conversation=e.conversation,n._sender=t,n}static createFromCache(e){let t=new c(e.text,e.payload);return t._uuid=e.uuid,t._conversation=e.conversation,t._sender=Number(e.sender),t}toCache(){return{uuid:this._uuid,text:this._text,payload:this._payload,conversation:this._conversation,sender:this._sender}}getPayload(){let e={text:this._text,conversation:this._conversation};return void 0!==this._payload&&Array.isArray(this._payload)&&this._payload.every((e=>"object"==typeof e))?e.payload=this._payload:e.payload=[],e}sendTo(e){return new Promise(((t,n)=>{this._conversation=e.uuid;const i=a.MsgSignaling.get().sendWsMessage(s.MsgAction.sendMessage,this.getPayload());o.Messenger.getInstance()._registerPromise(i,t,n)}))}update(){return new Promise(((e,t)=>{const n=a.MsgSignaling.get().sendWsMessage(s.MsgAction.editMessage,Object.assign(this.getPayload(),{uuid:this._uuid}));o.Messenger.getInstance()._registerPromise(n,e,t)}))}remove(){return new Promise(((e,t)=>{const n=a.MsgSignaling.get().sendWsMessage(s.MsgAction.removeMessage,{uuid:this._uuid,conversation:this.conversation});o.Messenger.getInstance()._registerPromise(n,e,t)}))}_traceName(){return"Message"}}i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],c.prototype,"toCache",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],c.prototype,"getPayload",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],c.prototype,"sendTo",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],c.prototype,"update",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],c.prototype,"remove",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],c,"_createFromBus",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],c,"createFromCache",null),t.Message=c},7250:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.Messenger=void 0;const r=n(6054),a=n(3947),s=n(1150),o=n(8202),c=n(249),d=n(7050),l=n(1660),g=n(311),u=n(1855),h=n(8635),p=n(6623),f={0:"Something went wrong. Please check the input or required parameters.",28:"The 'from' field value is greater than the 'to' field value.",10001:"Invalid argument(s).",10002:"Response timeout."};class m{constructor(){if(m.instance)throw new Error(p.MESSAGING_ERR_1);this.eventListeners={},this.awaitPromiseList={},this.cm=u.default.get(),this.signalling=d.MsgSignaling.get(),this.signalling.addEventListener(c.MsgEvent.onError,((e,t)=>{this._dispatchEvent(r.default.MessengerEvents.Error,{initiator:this.currentUserId,code:e.code,description:e.description,messengerAction:r.default.MessengerAction[e.on_incoming_event],timestamp:"number"==typeof e.timestamp?1e3*e.timestamp:void 0,requestUuid:t},t)})),this.signalling.addEventListener(c.MsgEvent.onEditUser,((e,t)=>{this._dispatchEvent(r.default.MessengerEvents.EditUser,{user:{userId:Number(e.object.user_id),userName:e.object.user_name,displayName:e.object.display_name,conversationsList:e.object.conversations_list,notificationEvents:e.object.notification_events?e.object.notification_events.map(this.msgEventToMessengerEvent):void 0,customData:e.object.custom_data,privateCustomData:e.object.private_custom_data},initiator:Number(e.initiator),messengerAction:r.default.MessengerAction[e.on_incoming_event],timestamp:"number"==typeof e.timestamp?1e3*e.timestamp:void 0,requestUuid:t},t)})),this.signalling.addEventListener(c.MsgEvent.onGetUser,((e,t)=>{this._dispatchEvent(r.default.MessengerEvents.GetUser,{user:{userId:Number(e.object.user_id),userName:e.object.user_name,displayName:e.object.display_name,conversationsList:e.object.conversations_list,notificationEvents:e.object.notification_events?e.object.notification_events.map(this.msgEventToMessengerEvent):void 0,customData:e.object.custom_data,privateCustomData:e.object.private_custom_data},initiator:Number(e.initiator),messengerAction:r.default.MessengerAction[e.on_incoming_event],requestUuid:t},t)})),this.signalling.addEventListener(c.MsgEvent.onSetStatus,((e,t)=>{this._dispatchEvent(r.default.MessengerEvents.SetStatus,{online:e.object.online,initiator:Number(e.initiator),messengerAction:r.default.MessengerAction[e.on_incoming_event],timestamp:"number"==typeof e.timestamp?1e3*e.timestamp:void 0,requestUuid:t},t)})),this.signalling.addEventListener(c.MsgEvent.onSubscribe,((e,t)=>{this._dispatchEvent(r.default.MessengerEvents.Subscribe,{users:e.object.user_id,initiator:Number(e.initiator),messengerAction:r.default.MessengerAction[e.on_incoming_event],requestUuid:t},t)})),this.signalling.addEventListener(c.MsgEvent.onUnsubscribe,((e,t)=>{this._dispatchEvent(r.default.MessengerEvents.Unsubscribe,{users:e.object.user_id,initiator:Number(e.initiator),messengerAction:r.default.MessengerAction[e.on_incoming_event],requestUuid:t},t)})),this.signalling.addEventListener(c.MsgEvent.onGetSubscriptionList,((e,t)=>{this._dispatchEvent(r.default.MessengerEvents.GetSubscriptionList,{users:e.object.subscriptions,initiator:Number(e.initiator),messengerAction:r.default.MessengerAction[e.on_incoming_event],requestUuid:t},t)}))}static getInstance(){return m.instance=m.instance||new m,m.instance}addEventListener(e,t){void 0===this.eventListeners[e]&&(this.eventListeners[e]=[]),this.eventListeners[e].push(t)}removeEventListener(e,t){if(void 0!==this.eventListeners[e])if("function"==typeof t){for(let n=0;n<this.eventListeners[e].length;n++)if(this.eventListeners[e][n]===t){this.eventListeners[e].splice(n,1);break}}else this.eventListeners[e]=[]}on(e,t){this.addEventListener(e,t)}off(e,t){this.removeEventListener(e,t)}_dispatchEvent(e,t,n){void 0!==this.eventListeners[e]&&this.eventListeners[e].forEach((e=>{"function"==typeof e&&e(t)})),n&&void 0!==this.awaitPromiseList[n]&&(e===r.default.MessengerEvents.Error&&"function"==typeof this.awaitPromiseList[n].reject&&this.awaitPromiseList[n].reject(t),"function"==typeof this.awaitPromiseList[n].resolve&&this.awaitPromiseList[n].resolve(t),window.clearTimeout(this.awaitPromiseList[n].expire)),void 0!==this.eventListeners[e]&&0!=this.eventListeners[e].length||s.LogManager.get().writeMessage(s.LogCategory.MESSAGING,"",s.LogLevel.INFO,`The ${e} event dispatched, but no handler registered for this event type.`)}_registerPromise(e,t,n){this.awaitPromiseList[e]={resolve:t,reject:n,expire:window.setTimeout(n,m.rejectTimeout)}}getConversation(e){return this.cm.getConversation(e)}getConversations(e){if(!(Array.isArray(e)&&e.length>30))return this.cm.getConversations(e);s.LogManager.get().writeMessage(s.LogCategory.MESSAGING,"Rate limit",s.LogLevel.ERROR,"you can get maximum 30 conversation in a single getConversations call")}getPublicConversations(){return this.cm.getPublicConversations()}getRawConversations(e){return this.cm.getConversations(e)}createConversation(e,t,n,i,r,a){return this.cm.createConversation(e,t,n,i,r,a)}createConversationFromCache(e){return e&&"object"==typeof e?g.Conversation.createFromCache(e):null}joinConversation(e){return new Promise(((t,n)=>{if(!(0,l.validateString)(e))return void m.getInstance().reject(r.default.MessengerError.Error_10001,r.default.MessengerAction.joinConversation).catch(n);const i=this.signalling.sendWsMessage(o.MsgAction.joinConversation,{uuid:e});m.getInstance()._registerPromise(i,t,n)}))}leaveConversation(e){return new Promise(((t,n)=>{if(!(0,l.validateString)(e))return void m.getInstance().reject(r.default.MessengerError.Error_10001,r.default.MessengerAction.leaveConversation).catch(n);const i=this.signalling.sendWsMessage(o.MsgAction.leaveConversation,{uuid:e});m.getInstance()._registerPromise(i,t,n)}))}getMe(){return u.default.extractUserName(a.Authenticator.get().username())}getMyId(){return this.currentUserId?Promise.resolve(this.currentUserId):this.getUser(this.getMe()).then((e=>e.user.userId))}getUser(e){return new Promise(((t,n)=>{if(!(0,l.validateString)(e))return void m.getInstance().reject(r.default.MessengerError.Error_10001,r.default.MessengerAction.getUser).catch(n);let i;const a=e=>{e.requestUuid===i&&(clearTimeout(c),this.off(r.default.MessengerEvents.GetUser,a),this.off(r.default.MessengerEvents.Error,s),e.user.userName===this.getMe()&&(this.currentUserId=Number(e.user.userId)),t(e))},s=e=>{e.requestUuid===i&&(clearTimeout(c),this.off(r.default.MessengerEvents.GetUser,a),this.off(r.default.MessengerEvents.Error,s),n(e))},c=setTimeout((()=>{m.getInstance().off(r.default.MessengerEvents.GetUser,a),m.getInstance().off(r.default.MessengerEvents.Error,s),m.getInstance().reject(r.default.MessengerError.Error_10002,r.default.MessengerAction.getUser).catch(n)}),m.rejectTimeout);this.on(r.default.MessengerEvents.GetUser,a),this.on(r.default.MessengerEvents.Error,s),i=this.signalling.sendWsMessage(o.MsgAction.getUser,{user_name:e})}))}getUserById(e){return new Promise(((t,n)=>{if(!(0,l.validateNumber)(e))return void m.getInstance().reject(r.default.MessengerError.Error_10001,r.default.MessengerAction.getUser).catch(n);const i=this.signalling.sendWsMessage(o.MsgAction.getUser,{user_id:e});m.getInstance()._registerPromise(i,t,n)}))}getUsers(e){if(!(0,l.validateStringArray)(e))return m.getInstance().reject(r.default.MessengerError.Error_10001,r.default.MessengerAction.getUsers);let t;const n=Promise.all(e.map((e=>new Promise(((n,i)=>{const a=i=>{i.requestUuid===t&&i.user.userName===e&&(clearTimeout(o),m.getInstance().off(r.default.MessengerEvents.GetUser,a),m.getInstance().off(r.default.MessengerEvents.Error,s),n(i))},s=e=>{e.requestUuid===t&&(clearTimeout(o),m.getInstance().off(r.default.MessengerEvents.GetUser,a),m.getInstance().off(r.default.MessengerEvents.Error,s),i(e))},o=setTimeout((()=>{m.getInstance().off(r.default.MessengerEvents.GetUser,a),m.getInstance().off(r.default.MessengerEvents.Error,s),m.getInstance().reject(r.default.MessengerError.Error_10002,r.default.MessengerAction.getUsers).catch(i)}),m.rejectTimeout);m.getInstance().on(r.default.MessengerEvents.GetUser,a),m.getInstance().on(r.default.MessengerEvents.Error,s)})))));return t=this.signalling.sendWsMessage(o.MsgAction.getUsers,{users:e.map((e=>({user_name:e})))}),n}getUsersById(e){if(!(0,l.validateNumberArray)(e))return m.getInstance().reject(r.default.MessengerError.Error_10001,r.default.MessengerAction.getUsers);let t;const n=Promise.all(e.map((e=>new Promise(((n,i)=>{const a=i=>{i.requestUuid===t&&i.user.userId===e&&(clearTimeout(o),m.getInstance().off(r.default.MessengerEvents.GetUser,a),m.getInstance().off(r.default.MessengerEvents.Error,s),n(i))},s=e=>{e.requestUuid===t&&(clearTimeout(o),m.getInstance().off(r.default.MessengerEvents.GetUser,a),m.getInstance().off(r.default.MessengerEvents.Error,s),i(e))},o=setTimeout((()=>{m.getInstance().off(r.default.MessengerEvents.GetUser,a),m.getInstance().off(r.default.MessengerEvents.Error,s),m.getInstance().reject(r.default.MessengerError.Error_10002,r.default.MessengerAction.getUsers).catch(i)}),m.rejectTimeout);m.getInstance().on(r.default.MessengerEvents.GetUser,a),m.getInstance().on(r.default.MessengerEvents.Error,s)})))));return t=this.signalling.sendWsMessage(o.MsgAction.getUsers,{users:e.map((e=>({user_id:e})))}),n}editUser(e,t){return new Promise(((n,i)=>{if(!(0,l.validateEditUserOptions)({customData:e,privateCustomData:t}))return void m.getInstance().reject(r.default.MessengerError.Error_10001,r.default.MessengerAction.editUser).catch(i);let a={};e&&(a.custom_data=e),t&&(a.private_custom_data=t);const s=this.signalling.sendWsMessage(o.MsgAction.editUser,a);m.getInstance()._registerPromise(s,n,i)}))}setStatus(e){return new Promise(((t,n)=>{const i=this.signalling.sendWsMessage(o.MsgAction.setStatus,{online:e});m.getInstance()._registerPromise(i,t,n)}))}subscribe(e){return new Promise(((t,n)=>{if(!(0,l.validateNumberArray)(e))return void m.getInstance().reject(r.default.MessengerError.Error_10001,r.default.MessengerAction.subscribe).catch(n);const i=this.signalling.sendWsMessage(o.MsgAction.subscribe,{user_id:e});m.getInstance()._registerPromise(i,t,n)}))}unsubscribe(e,t){return new Promise(((n,i)=>{if(!(0,l.validateNumberArray)(e))return void m.getInstance().reject(r.default.MessengerError.Error_10001,r.default.MessengerAction.unsubscribe).catch(i);const a=t?{all:t}:{user_id:e},s=this.signalling.sendWsMessage(o.MsgAction.unsubscribe,a);m.getInstance()._registerPromise(s,n,i)}))}getSubscriptionList(){return new Promise(((e,t)=>{const n=this.signalling.sendWsMessage(o.MsgAction.getSubscriptionList,{});m.getInstance()._registerPromise(n,e,t)}))}manageNotification(e){return new Promise(((t,n)=>{const i=this.signalling.sendWsMessage(o.MsgAction.manageNotification,{notifications:e.map((e=>e===r.default.MessengerEvents.CreateConversation?c.MsgEvent.onCreateConversation:e===r.default.MessengerEvents.SendMessage?c.MsgEvent.onSendMessage:e===r.default.MessengerEvents.EditMessage?c.MsgEvent.onEditMessage:void 0))});m.getInstance()._registerPromise(i,t,n)}))}createMessageFromCache(e){return e&&"object"==typeof e?h.Message.createFromCache(e):null}reject(e,t){const n={code:e,description:f[e],initiator:this.currentUserId??0,messengerAction:t};return this._dispatchEvent(r.default.MessengerEvents.Error,n),Promise.reject(n)}msgEventToMessengerEvent(e){return e===c.MsgEvent.onCreateConversation?r.default.MessengerEvents.CreateConversation:e===c.MsgEvent.onSendMessage?r.default.MessengerEvents.SendMessage:e===c.MsgEvent.onEditMessage?r.default.MessengerEvents.EditMessage:e}_traceName(){return"Messenger"}}m.rejectTimeout=2e4,i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"addEventListener",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"removeEventListener",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"on",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"off",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"_dispatchEvent",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"_registerPromise",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"getConversation",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"getConversations",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"getPublicConversations",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"getRawConversations",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"createConversation",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"createConversationFromCache",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"joinConversation",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"leaveConversation",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"getMe",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"getMyId",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"getUser",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"getUserById",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"getUsers",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"getUsersById",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"editUser",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"setStatus",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"subscribe",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"unsubscribe",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"getSubscriptionList",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"manageNotification",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m.prototype,"createMessageFromCache",null),i([s.LogManager.d_trace(s.LogCategory.MESSAGING)],m,"getInstance",null),t.Messenger=m},6623:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MESSAGING_ERR_2=t.MESSAGING_ERR_1=void 0,t.MESSAGING_ERR_1="Error - use Client.getIM()",t.MESSAGING_ERR_2="Error - use ConversationManager.get()"},6968:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MsgPermissions=t.MsgService=void 0;n(249);!function(e){e[e.Chat="chat"]="Chat"}(t.MsgService||(t.MsgService={})),function(e){e[e.none=0]="none",e[e.can_write=1]="can_write",e[e.can_edit=2]="can_edit",e[e.can_remove=4]="can_remove",e[e.can_manage_participants=8]="can_manage_participants",e[e.can_edit_all=16]="can_edit_all",e[e.can_remove_all=32]="can_remove_all",e[e.is_owner=32768]="is_owner",e[e.all=65535]="all"}(t.MsgPermissions||(t.MsgPermissions={}))},3341:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.mapRetransmitEvents=void 0;const i=n(6054),r=n(311),a=n(8635);t.mapRetransmitEvents=(e,t)=>{const n=(()=>{if(!e.object?.event||!e.object.payload)return;const t=e.object.payload;return-1!==e.object.event.indexOf("Message")?(e=>({message:a.Message._createFromBus(e.object,Number(e.initiator)),initiator:Number(e.initiator),seq:e.seq,timestamp:"number"==typeof e.timestamp?1e3*e.timestamp:void 0,messengerAction:i.default.MessengerAction[e.on_incoming_event]}))(t):(e=>({conversation:r.Conversation._createFromBus(e.object,e.seq),initiator:Number(e.initiator),seq:e.seq,messengerAction:i.default.MessengerAction[e.on_incoming_event],timestamp:"number"==typeof e.timestamp?1e3*e.timestamp:void 0}))(t)})();return{events:n?[n]:[],initiator:Number(e.initiator),messengerAction:i.default.MessengerAction[e.on_incoming_event],requestUuid:t}}},1660:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateConversationCustomData=t.validateEditUserOptions=t.validateRetransmitEventsFromGreaterThanTo=t.validateRetransmitEventsTo=t.validateRetransmitEventsFrom=t.validateRetransmitEventsFromTo=t.validateSendMessage=t.validateMessagePayloadArray=t.validateMessagePayload=t.validateConversationConfig=t.validateConversationParticipantArray=t.validateConversationParticipant=t.validateNumberArray=t.validateStringArray=t.validateSeq=t.validateNumber=t.validateString=void 0;t.validateString=e=>!("string"!=typeof e||!e.length);t.validateNumber=e=>!("number"!=typeof e||e<=0);t.validateSeq=e=>!("number"!=typeof e||e<0);t.validateStringArray=e=>!!(e&&Array.isArray(e)&&e.length)&&e.every((e=>(0,t.validateString)(e)));t.validateNumberArray=e=>!!(e&&Array.isArray(e)&&e.length)&&e.every((e=>(0,t.validateNumber)(e)));t.validateConversationParticipant=e=>!(!e||"object"!=typeof e||e.userId<=0);t.validateConversationParticipantArray=e=>!!(e&&Array.isArray(e)&&e.length)&&e.every((e=>(0,t.validateConversationParticipant)(e)));t.validateConversationConfig=e=>!(!e||"object"!=typeof e)&&(!e.participants||(0,t.validateConversationParticipantArray)(e.participants));t.validateMessagePayload=(e,t)=>!(!e||"object"!=typeof e||Array.isArray(e))&&!(t?.validateLength&&!Object.keys(e).length);t.validateMessagePayloadArray=(e,n)=>!(!e||!Array.isArray(e))&&(!(n?.validateLength&&!e.length)&&e.every((e=>(0,t.validateMessagePayload)(e,n))));t.validateSendMessage=e=>{if(!e)return!1;if(void 0!==e.text&&null!==e.text&&"string"!=typeof e.text)return!1;const n="string"==typeof e.text&&e.text.length>0;return!(!n&&!e.payload)&&(!e.payload||(0,t.validateMessagePayloadArray)(e.payload,{validateLength:!n}))};t.validateRetransmitEventsFromTo=(e,t)=>!("number"!=typeof e||"number"!=typeof t||e<=0||t<=0);t.validateRetransmitEventsFrom=(e,t)=>!("number"!=typeof e||"number"!=typeof t||e<=0||t<=0);t.validateRetransmitEventsTo=(e,t)=>!("number"!=typeof e||"number"!=typeof t||e<=0||t<=0);t.validateRetransmitEventsFromGreaterThanTo=(e,t)=>e<=t;t.validateEditUserOptions=e=>{if(!e)return!1;const t=Object.values(e),n=t.every((e=>null===e));return t.length>0&&!n};t.validateConversationCustomData=e=>!(!e||Array.isArray(e)||"object"!=typeof e)},84:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.PCFactory=void 0;const r=n(6746),a=n(1150),s=n(308),o=n(4610),c=n(3869),d=n(4106),l=n(575),g=n(125),u=n(7272),h=n(8879),p=n(245),f=n(3902);class m{constructor(){this.iceConfig=null,this._peerConnections={},this.waitingPeerConnections={},this.logger=a.LogManager.get().createLogger(a.LogCategory.RTC,this._traceName()),this._requireMedia=!0,"firefox"===c.default.getWSVendor()&&(m.hasTransceivers=!0),p.default.setRPCHandler(l.RemoteEvent.createPC,((e,t)=>{this.rpcHandlerCreatePC(e,t)})),p.default.setRPCHandler(l.RemoteEvent.destroyPC,(e=>{this.rpcHandlerDestroyPC(e)})),p.default.addHandler(this)}get peerConnections(){return this._peerConnections}get requireMedia(){return this._requireMedia}set requireMedia(e){this._requireMedia=e}static get(){return null===this.inst&&(this.inst=new m),this.inst}static sdpOffersVideo(e){return{receiveVideo:-1!==e.indexOf("m=video"),sendVideo:!0}}setupDirectPC(e,t,n,i){let r=new f.TransreceiverPC(e,t,n);const a=s.CallManager.get().calls[e];if(r){r.setHoldKey(i);g.Client.getInstance().config();return u.default.StreamManager.get().getCallStream(a).then((t=>(null!==t&&r.fastAddCustomMedia(t),this._peerConnections[e]=r,r.getLocalOffer()))).catch((e=>{throw r.close(),this.logger.error(`Could not get stream during setupPC, reason: ${e.message}`),e}))}s.CallManager.get().handleConnectionFailed(a.id(),1001,"",{})}incomeDirectPC(e,t,n,i,a){let o=new f.TransreceiverPC(e,r.PeerConnectionMode.P2P,t,a);return o.setHoldKey(i),o._setRemoteDescription(n).then((()=>{if(s.CallManager.get().calls[e])return this._peerConnections[e]=o,o;o.close()}))}getPeerConnect(e){return this._peerConnections[e]}onSignalingConnected(){}onSignalingClosed(){this.logger.info("Closing all peer connections because signaling connection has closed"),this.waitingPeerConnections={};for(let e in this._peerConnections)this._peerConnections[e].close();this._peerConnections={}}onSignalingConnectionFailed(e){}onMediaConnectionFailed(){}closeAll(){for(let e in this._peerConnections)this._peerConnections[e].close();this._peerConnections={}}setBandwidthParams(e){this._bandwidthParams=e}addBandwidthParams(e){return this._bandwidthParams&&(e.sdp=e.sdp.replace(/(a=mid:video.*\r\n)/g,"$1b=AS:"+this._bandwidthParams+"\r\n")),e}rpcHandlerCreatePC(e,t){this.logger.info(`rpcHandlerCreatePC(), received SDP: \n${t.replace("<br>","\n\r")}`),t=h.SDPMuggle.addSetupAttribute(t);const n=m.sdpOffersVideo(t),i=r.PeerConnectionMode.CLIENT_SERVER_V1;p.default.callRemoteFunction(d.RemoteFunction.muteLocal,e,!1);const a=new f.TransreceiverPC(e,i,n);this._peerConnections[e]=a;let c=s.CallManager.get().calls[e];u.default.StreamManager.get().getCallStream(c).then((n=>{"__default"===e&&(t=t.replace("a=sendrecv","a=recvonly")),a.fastAddCustomMedia(n),a.processRemoteOffer(t).then((t=>{void 0===c||c.checkCallMode(o.CallMode.SERVER)?p.default.callRemoteFunction(d.RemoteFunction.confirmPC,e,t):p.default.callRemoteFunction(d.RemoteFunction.acceptCall,[e,s.CallManager.cleanHeaders(c.headers()),t]),"__default"!==e&&void 0!==s.CallManager.get().calls[e]&&(s.CallManager.get().calls[e].peerConnection=a)}))})).catch((e=>{void 0!==c?s.CallManager.get().handleConnectionFailed(c.id(),403,"Media access denied",{}):p.default.onConnectionFailedRPC()}))}rpcHandlerDestroyPC(e){this._peerConnections[e]&&("__default"===e?setTimeout((()=>{this._peerConnections[e].close(),delete this._peerConnections[e]}),200):(this._peerConnections[e].close(),delete this._peerConnections[e])),delete this.waitingPeerConnections[e]}_traceName(){return"PCFactory"}}m.inst=null,m.hasTransceivers=!1,i([a.LogManager.d_trace(a.LogCategory.PCFACTORY)],m.prototype,"setupDirectPC",null),i([a.LogManager.d_trace(a.LogCategory.PCFACTORY)],m.prototype,"incomeDirectPC",null),i([a.LogManager.d_trace(a.LogCategory.PCFACTORY)],m.prototype,"getPeerConnect",null),i([a.LogManager.d_trace(a.LogCategory.PCFACTORY)],m.prototype,"onSignalingConnected",null),i([a.LogManager.d_trace(a.LogCategory.PCFACTORY)],m.prototype,"onSignalingClosed",null),i([a.LogManager.d_trace(a.LogCategory.PCFACTORY)],m.prototype,"onSignalingConnectionFailed",null),i([a.LogManager.d_trace(a.LogCategory.PCFACTORY)],m.prototype,"onMediaConnectionFailed",null),i([a.LogManager.d_trace(a.LogCategory.PCFACTORY)],m.prototype,"closeAll",null),i([a.LogManager.d_trace(a.LogCategory.PCFACTORY)],m.prototype,"setBandwidthParams",null),i([a.LogManager.d_trace(a.LogCategory.PCFACTORY)],m.prototype,"addBandwidthParams",null),i([a.LogManager.d_trace(a.LogCategory.PCFACTORY)],m.prototype,"rpcHandlerCreatePC",null),i([a.LogManager.d_trace(a.LogCategory.PCFACTORY)],m.prototype,"rpcHandlerDestroyPC",null),i([a.LogManager.d_trace(a.LogCategory.PCFACTORY)],m,"sdpOffersVideo",null),t.PCFactory=m},6746:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.PeerConnection=t.PeerConnectionMode=t.PeerConnectionState=void 0;const r=n(1150),a=n(308),s=n(3385),o=n(4106),c=n(4265),d=n(125),l=n(7272),g=n(8707),u=n(4610),h=n(245),p=n(2282),f=n(9002),m=n(1113);var C,v;!function(e){e[e.IDLE=0]="IDLE",e[e.REMOTEOFFER=1]="REMOTEOFFER",e[e.LOCALOFFER=2]="LOCALOFFER",e[e.ESTABLISHING=3]="ESTABLISHING",e[e.ESTABLISHED=4]="ESTABLISHED",e[e.CLOSED=5]="CLOSED"}(C=t.PeerConnectionState||(t.PeerConnectionState={})),function(e){e[e.CLIENT_SERVER_V1=0]="CLIENT_SERVER_V1",e[e.P2P=1]="P2P",e[e.CONFERENCE=2]="CONFERENCE"}(v=t.PeerConnectionMode||(t.PeerConnectionMode={}));class _{constructor(e,t,n){this.id=e,this.mode=t,this.videoEnabled=n,this.onHold=!1,this.muteMicState=!1,this.logger=r.LogManager.get().createLogger(r.LogCategory.RTC,`${this._traceName()} ${e}`),this.logger.info("PC created"),this.state=C.IDLE,this.pendingCandidates=[],"_default"!==e&&a.CallManager.get().calls[e]&&(this.reInviteQ=new c.ReInviteQ(a.CallManager.get().calls[e],this._canReInvite))}get remoteStreams(){return this._remoteStreams}getId(){return this.id}getState(){return this.state}processRemoteAnswer(e,t){return this.state=C.ESTABLISHING,this._processRemoteAnswer(e,t)}getLocalOffer(){return this.state===C.IDLE||this.state===C.ESTABLISHED||C.LOCALOFFER?(this.logger.info("getLocalOffer()"),this.state=C.LOCALOFFER,this._getLocalOffer()):(this.logger.error("getLocalOffer() in state "+C[this.state]),new Promise(((e,t)=>{t("Invalid state")})))}getLocalAnswer(){return this._getLocalAnswer()}processRemoteOffer(e){return this.state===C.IDLE||this.state===C.ESTABLISHED?(this.state=C.ESTABLISHING,this._processRemoteOffer(e)):(this.logger.error("processRemoteOffer() in state "+C[this.state]),new Promise(((e,t)=>{t("Invalid state")})))}close(){this.logger.info("close()"),this._close()}addRemoteCandidate(e,t){return this.logger.info(`addRemoteCandidate(${e}, ${t})`),this._addRemoteCandidate(e,t)}handleReinvite(e,t,n){return this._handleReinvite(e,t,n)}handleRemoteOffer(e,t,n){return this._handleRemoteOffer(e,t,n)}addCandidateToSend(e,t){this.pendingCandidates.push([t,e]),this.canSendCandidates&&this.startCandidateSendTimer()}canStartSendingCandidates(){this.canSendCandidates=!0,this.startCandidateSendTimer()}sendDTMF(e){this._sendDTMF(e,500,50)}setVideoEnabled(e){const t=this.videoEnabled.receiveVideo;this.videoEnabled=e,t!=e.receiveVideo&&this._hold(this.onHold)}setVideoFlags(e){this.videoEnabled=e}getDirections(){return this._getDirections()}setHoldKey(e){this.onHold=e}getMidKinds(){if(this._call){const e={},t=this.getTransceivers(),n=l.default.StreamManager.get()._getScreenSharing(this._call)||[];let i=[];return n.forEach((e=>{i=[...i,...e.stream.getTracks().map((e=>e.id))]})),t.forEach((t=>{t.sender&&t.sender.track&&t.sender.track.kind&&("video"===t.sender.track.kind&&i.length&&~i.indexOf(t.sender.track.id)?e[t.mid]="sharing":e[t.mid]=t.sender.track.kind)})),e}return{}}getTrackKind(e){if(this._call){const t=l.default.StreamManager.get()._getTracksKind(this._call),n=this.getTransceivers(),i=g.default.parse(e);let r=[];for(const e in t)if(t.hasOwnProperty(e)){const t=n.find((t=>!(t.stopped||"stopped"===t.direction||"stopped"===t.currentDirection)&&t.sender&&t.sender.track&&t.sender.track.id===e));if(t){const n=i.media.find((e=>e.attr.some((e=>"mid"===e.name&&e.value===t.mid))));if(n){const t=n.attr.find((e=>"msid"===e.name));if(t){const n=t.value.split(" ");if(n.length>1){const t=n[1];t!=e&&r.push({from:e,to:t})}}}}}let a={...t};return r.forEach((e=>{const t=a[e.from];delete a[e.from],a[e.to]=t})),a}return{}}sendMedia(e,t){return new Promise(((e,t)=>{this.onHold?t({result:!1,call:this._call}):this.reInviteQ.add({fx:()=>{d.Client.getInstance().config();l.default.StreamManager.get().updateCallStream(this._call)},reject:t,resolve:t=>{this.restoreMute(),e(t)}})}))}hold(e){return new Promise(((t,n)=>{this.onHold===e&&t({call:this._call,name:p.CallEvents.Updated,result:!0}),this.reInviteQ.add({fx:()=>{this._hold(e)},reject:n,resolve:e=>{this.restoreMute(),t(e)}})}))}hdnFRS(){return new Promise(((e,t)=>{this.onHold?t({result:!1,call:this._call}):this.reInviteQ.add({fx:()=>{this._hdnFRS()},reject:t,resolve:t=>{this.restoreMute(),e(t)}})}))}getMicrophoneState(){return this.muteMicState}muteMicrophone(e){this.muteMicState!==e?(this.muteMicState=e,this.onHold?this.logger.warning(`Cannot change the microphone state to ${e}: the call is on hold.`):this.getTransceivers().forEach((e=>{const t=e.sender&&e.sender.track?e.sender.track.kind:null;"audio"===t&&"live"===e.sender.track.readyState?(this.logger.warning(`Change track ${e.mid} with kind ${t}.`),e.sender.track.enabled=!this.muteMicState):this.logger.warning(`Skip track ${e.mid} with kind ${t} in the ${e.sender?.track?.readyState} state.`)}))):this.logger.warning(`Cannot change the microphone state to ${e}: already in the state.`)}restoreMute(){this._call.settings.active&&this._call.settings.state!==u.CallState.ENDED&&(this.logger.info(`restore audio enabled state to: ${!this.muteMicState}`),this._call.restoreRMute(),this.getTransceivers().forEach((e=>{"audio"===(e.sender&&e.sender.track?e.sender.track.kind:null)&&"live"===e.sender.track?.readyState&&(e.sender.track.enabled=!this.muteMicState)})))}restoreVideoSending(){}addCustomMedia(e){return new Promise(((t,n)=>{this.reInviteQ.add({fx:()=>{this._addCustomMedia(e)},reject:n,resolve:e=>{this.restoreMute(),t()}})}))}fastAddCustomMedia(e){this._addCustomMedia(e)}fastRemoveCustomMedia(e){this._removeCustomMedia(e)}removeCustomMedia(e){return new Promise(((t,n)=>{this.reInviteQ.add({fx:()=>{this._removeCustomMedia(e)},reject:n,resolve:e=>{this.restoreMute(),t()}})}))}updateMediaTracks(e){this.updateMediaTracks(e)}updateCustomMedia(e){this._updateCustomMedia(e)}replaceSharingToVideo(e,t){return this._replaceSharingToVideo(e,t)}setEncodingsParams(e,t){this._setEncodingsParams(e,t)}_traceName(){return"PeerConnection"}setState(e){this.logger.info("Transmitting from "+C[this.state]+" to "+C[e]),this.state=e}startCandidateSendTimer(){const e=a.CallManager.get().calls[this.id];0!==this.pendingCandidates.length&&e&&(this.mode===v.CLIENT_SERVER_V1?this.pendingCandidates.forEach((([e,t])=>{h.default.callRemoteFunction(o.RemoteFunction.addCandidate,this.id,e,t)})):e.sendInfo(s.Constants.P2P_SPD_FRAG_MIME_TYPE,JSON.stringify(this.pendingCandidates),{}),this.pendingCandidates=[])}}i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"getState",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"processRemoteAnswer",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"getLocalOffer",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"getLocalAnswer",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"processRemoteOffer",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"close",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"addRemoteCandidate",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"handleReinvite",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"handleRemoteOffer",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"addCandidateToSend",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"canStartSendingCandidates",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"sendDTMF",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"setVideoEnabled",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"setVideoFlags",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"setHoldKey",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"getTrackKind",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"sendMedia",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"hold",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"hdnFRS",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"muteMicrophone",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"restoreMute",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"restoreVideoSending",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"addCustomMedia",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"fastAddCustomMedia",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"fastRemoveCustomMedia",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"removeCustomMedia",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"updateMediaTracks",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"updateCustomMedia",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"replaceSharingToVideo",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"setEncodingsParams",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"setState",null),i([(0,f.debounceDecorator)(m.SEND_CANDIDATE_DELAY),r.LogManager.d_trace(r.LogCategory.RTC)],_.prototype,"startCandidateSendTimer",null),t.PeerConnection=_},4265:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.ReInviteQ=void 0;const r=n(2282),a=n(1150);class s{constructor(e,t){this._pcStatus=t,this._q=[],e.on(r.CallEvents.Updated,(e=>{if(a.LogManager.get().writeMessage(a.LogCategory.REINVITEQ,"CallEvent",a.LogLevel.TRACE,`Updated with result ${e.result}`),s._currentReinvite){const t=s._currentReinvite;e.result?t.resolve(e):t.reject(e),s._currentReinvite=void 0}this.runNext()})),e.on(r.CallEvents.PendingUpdate,(e=>{a.LogManager.get().writeMessage(a.LogCategory.REINVITEQ,"CallEvent",a.LogLevel.TRACE,"IncomingUpdate. Local RI=="+typeof s._currentReinvite),s._currentReinvite&&(e.result?s._currentReinvite.resolve(e):s._currentReinvite.reject(e),s._currentReinvite=void 0)})),e.on(r.CallEvents.UpdateFailed,(e=>{a.LogManager.get().writeMessage(a.LogCategory.REINVITEQ,"CallEvent",a.LogLevel.TRACE,"UpdateFailed"),s._currentReinvite&&(s._currentReinvite.reject(),s._currentReinvite=void 0)}))}runNext(){void 0===s._currentReinvite&&this._q.length>0&&this._pcStatus()&&(s._currentReinvite=this._q.splice(0,1)[0],s._currentReinvite.fx())}add(e){this._q.push(e),this.runNext()}clear(){this._q.forEach((e=>{e.reject()}))}_traceName(){return"ReInviteQ"}}i([a.LogManager.d_trace(a.LogCategory.REINVITEQ)],s.prototype,"runNext",null),i([a.LogManager.d_trace(a.LogCategory.REINVITEQ)],s.prototype,"add",null),i([a.LogManager.d_trace(a.LogCategory.REINVITEQ)],s.prototype,"clear",null),t.ReInviteQ=s},6127:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CodecSorter=void 0;const i=n(8707);class r{constructor(e){this.originalSDP=e}getUserCodecList(){void 0===this.originalCodecList&&(this.originalCodecList=i.default.parse(this.originalSDP));let e={sections:[]};return e.sections=this.originalCodecList.media.filter((e=>"video"===e.descr.media||"audio"===e.descr.media)).map(((e,t,n)=>{let i=/(rtx|red|ulpfec)/,r=e.attr.filter((e=>"rtpmap"===e.name&&!e.value.find((e=>e.value.match(i)))));return{kind:e.descr.media,codec:r}})),e}setUserCodecList(e){void 0===this.originalCodecList&&(this.originalCodecList=i.default.parse(this.originalSDP));for(let t=0;t<e.sections.length;t++)if(e.sections[t].kind===this.originalCodecList.media[t].descr.media){let n=r.resortSection(e.sections[t].codec,this.originalCodecList.media[t].attr,this.originalCodecList.media[t].descr.media);this.originalCodecList.media[t].attr=n.codecs,this.originalCodecList.media[t].descr.fmt=n.order,this.originalCodecList.media[t].descr.fmtCount=n.order.length}}static resortSection(e,t,n){let i=[],r=[],a=[],s=[];t.forEach((e=>"rtpmap"===e.name?a.push(e):"ssrc"===e.name?r.push(e):void i.push(e)));let o=e.map((e=>{let t=e.value.find((e=>"rtpmap"===e.name)).value,n=a.find((e=>e.value.find((e=>!!~e.value.indexOf(t)))));if(n)return s.push(t.split(" ")[0]),n})).filter(Boolean);if("video"===n.toLowerCase()){let e=[],t=[],n=a.filter((e=>e.value.find((e=>!!~e.value.indexOf("rtx"))))),s=a.filter((e=>e.value.find((e=>e.value.match(/(red|ulpfec)/)))));return o=o.concat(s),o.forEach((i=>{e.push(i),t.push(i.value.find((e=>"rtpmap"===e.name)).value.split(" ")[0]);let r=this.matchRtx(i,n);r&&(e.push(r),t.push(r.value.find((e=>"rtpmap"===e.name)).value.split(" ")[0]))})),{codecs:[...i,...e,...r],order:t}}return{codecs:[...i,...o,...r],order:s}}static matchRtx(e,t){let n=e.value.find((e=>"rtpmap"===e.name)).value.split(" ")[0],i=t.find((e=>e.value.find((e=>!!~e.value.indexOf(`apt=${n}`)))));return i}getSDP(){return this.originalCodecList.toString()}_traceName(){return"CodecSorter"}}t.CodecSorter=r},3421:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.CodecSorterHelpers=void 0;const r=n(1150);class a{static H264Sorter(e){return new Promise((t=>{for(let t=0;t<e.sections.length;t++)"video"==e.sections[t].kind.toLowerCase()&&e.sections[t].codec.sort(((e,t)=>{let n=e.value.findIndex((e=>"rtpmap"===e.name)),i=t.value.findIndex((e=>"rtpmap"===e.name));return-1!=e.value[n].value.toLowerCase().indexOf("h264")&&-1==e.value[n].value.toLowerCase().indexOf("uc")?-1:-1!=t.value[i].value.toLowerCase().indexOf("h264")&&-1==t.value[i].value.toLowerCase().indexOf("uc")?1:0}));t(e)}))}static H264ConfSorter(e,t){return new Promise(t?t=>{for(let t=0;t<e.sections.length;t++)if("video"==e.sections[t].kind.toLowerCase()){let n=e.sections[t].codec.filter((e=>{let t=e.value.findIndex((e=>"rtpmap"===e.name));return-1!=e.value[t].value.toLowerCase().indexOf("h264")&&-1==e.value[t].value.toLowerCase().indexOf("uc")}));n.length&&(e.sections[t].codec=n)}t(e)}:t=>{for(let t=0;t<e.sections.length;t++)"video"==e.sections[t].kind.toLowerCase()&&(e.sections[t].codec.sort(((e,t)=>{let n=e.value.findIndex((e=>"rtpmap"===e.name)),i=t.value.findIndex((e=>"rtpmap"===e.name));return-1!=e.value[n].value.toLowerCase().indexOf("h264")&&-1==e.value[n].value.toLowerCase().indexOf("uc")?-1:-1!=t.value[i].value.toLowerCase().indexOf("h264")&&-1==t.value[i].value.toLowerCase().indexOf("uc")?1:0})),e.sections[t].codec.sort(((e,t)=>{e.value.findIndex((e=>"rtpmap"===e.name)),t.value.findIndex((e=>"rtpmap"===e.name));let n=e.value.findIndex((e=>"fmtp"===e.name)),i=t.value.findIndex((e=>"fmtp"===e.name));return e.value[n]&&t.value[i]?-1!==e.value[n].value.toLowerCase().indexOf("profile-level-id=42e01f")&&-1!==e.value[n].value.toLowerCase().indexOf("packetization-mode=1")?-1:-1!==t.value[i].value.toLowerCase().indexOf("profile-level-id=42e01f")&&-1!==e.value[n].value.toLowerCase().indexOf("packetization-mode=1")?1:0:0})));t(e)})}_traceName(){return"CodecSorterHelpers"}}i([r.LogManager.d_trace(r.LogCategory.RTC)],a,"H264Sorter",null),i([r.LogManager.d_trace(r.LogCategory.RTC)],a,"H264ConfSorter",null),t.CodecSorterHelpers=a},8707:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});class n{constructor(){this.attrCount=0,this.bandwCount=0,this.mediaCount=0,this.dummyLines=[]}static parse(e){const t=new n;return n.splitLines(e).forEach(((e,i)=>{switch(e.trim().charAt(0)){case"a":const r=n.parseAttr(e,i);if(r)if(t.mediaCount){const e=t.media[t.mediaCount-1].attrCount;if(!(e<1028))throw new Error(`Error adding media attribute, attribute is ignored. Total attrs ${e}`);t.addMediaAttribute(r,t.mediaCount-1)}else{if(!(t.attrCount<1028))throw new Error(`Error adding attribute without media, attribute is ignored. Total attrs ${t.attrCount}`);t.addSessionAttribute(r)}break;case"o":t.origin=n.parseOrigin(e,i);break;case"s":t.name=n.parseGenericLine(e,i);break;case"c":const a=n.parseConnectionInfo(e,i);t.mediaCount?t.media[t.mediaCount-1].conn=a:t.conn=a;break;case"t":t.time=n.parseTime(e,i);break;case"m":const s=n.parseMedia(e,i);if(void 0===t.media&&(t.media=[]),!(t.mediaCount<256))throw new Error("Error adding media, media is ignored");t.media[t.mediaCount]=s,t.mediaCount++;break;case"v":n.parseVersion(e,i);break;case"b":const o=n.parseBandwidthInfo(e,i);if(t.mediaCount){if(!(t.media[t.mediaCount-1].bandwCount<8))throw new Error("Error adding session bandwidth info, info is ignored");t.media[t.mediaCount-1].bandw.push(o),t.media[t.mediaCount-1].bandwCount++}else{if(!(t.bandwCount<8))throw new Error("Error adding session bandwidth info, info is ignored");void 0===t.bandw&&(t.bandw=[]),t.bandw[t.bandwCount]=o,t.bandwCount++}break;default:t.dummyLines.push(n.parseGenericLine(e,i))}})),t}static parseAttr(e,t){0!==e.indexOf("a=")&&n.scannerError(e,t);const i=n.chopLine(e).split(":");return{name:i[0],value:i.slice(1).join(":")}}static splitLines(e){return e.split(/(\r\n|\r|\n)/).filter((e=>e.length>0)).filter(RegExp.prototype.test.bind(/^([a-z])=(.*)/))}static parseGenericLine(e,t){return 1!==e.indexOf("=")&&n.scannerError(e,t),e.substr(2)}static parseOrigin(e,t){0!==e.indexOf("o=")&&n.scannerError(e,t);const i=n.chopLine(e).split(/[\s\t]+/);return{user:i[0],id:i[1],version:i[2],netType:i[3],addrType:i[4],addr:i[5]}}static parseVersion(e,t){0!==e.indexOf("v=0")&&n.scannerError(e,t)}static parseTime(e,t){0!==e.indexOf("t=")&&n.scannerError(e,t);const i=n.chopLine(e).split(/[\s\t]+/);return{start:parseInt(i[0]),stop:parseInt(i[1])}}static parseConnectionInfo(e,t){0!==e.indexOf("c=")&&n.scannerError(e,t);const i=n.chopLine(e).split(/[\s\t]+/);return{netType:i[0],addrType:i[1],addr:i[2]}}static parseBandwidthInfo(e,t){0!==e.indexOf("b=")&&n.scannerError(e,t);const i=n.chopLine(e).split(/[:]+/);return{modifier:i[0],value:parseInt(i[1])}}static scannerError(e,t){throw new Error(`Error parsing sdp in line ${t}: "${e}" is not valid sdp line`)}static chopLine(e){return e.substr(2)}static parseMedia(e,t){0!==e.indexOf("m=")&&n.scannerError(e,t);const i=n.chopLine(e).split(/[\s\t]+/),r=i[1].split("/");return{descr:{media:i[0],port:parseInt(r[0]),portCount:parseInt(r[1]||"0"),transport:i[2],fmtCount:i.length-3,fmt:i.slice(3)},attrCount:0,bandwCount:0,attr:[],bandw:[]}}addSessionAttribute(e){void 0===this.attr&&(this.attr=[]),this.attr.push(e),this.attrCount++}addMediaAttribute(e,t){void 0===this.media[t].attr&&(this.media[t].attr=[]);let n=e.value.split(" ")[0];~["rtcp","ice-ufrag","ice-pwd","ice-options","fingerprint","setup"].indexOf(e.name)?this.addAttr(t,e,"ice"):~["rtpmap","rtcp-fb","fmtp"].indexOf(e.name)?this.addAttr(t,e,"rtpmap",n):~["extmap"].indexOf(e.name)?this.addAttr(t,e,"extmap"):~["ssrc"].indexOf(e.name)?this.addAttr(t,e,"ssrc"):this.media[t].attr.push(e),this.media[t].attrCount++}addAttr(e,t,n,i){let r=this.media[e].attr.findIndex((e=>i?e.name===n&&e.value[0].value.split(" ")[0]===i:e.name===n));-1!==r?this.media[e].attr[r].value.push(t):this.media[e].attr.push({name:n,value:[t]})}toString(){const e=[];e.push("v=0"),e.push(`o=${this.origin.user} ${this.origin.id} ${this.origin.version} ${this.origin.netType} ${this.origin.addrType} ${this.origin.addr}`),e.push(`s=${this.name}`),this.conn&&e.push(n.printConnectionInfo(this.conn));for(let t=0;t<this.bandwCount;t++)e.push(n.printBandwidthInfo(this.bandw[t]));e.push(`t=${this.time.start} ${this.time.stop}`);for(let t=0;t<this.attrCount;t++)e.push(n.printAttrInfo(this.attr[t]));for(let t=0;t<this.mediaCount;t++){const i=this.media[t];let r=`m=${i.descr.media} ${i.descr.port}${i.descr.portCount?"/"+i.descr.portCount:""} ${i.descr.transport}`;for(let e=0;e<i.descr.fmtCount;e++)r+=" "+i.descr.fmt[e];e.push(r),i.conn&&e.push(n.printConnectionInfo(i.conn));for(let t=0;t<i.bandwCount;t++)e.push(n.printBandwidthInfo(i.bandw[t]));const a=["sendrecv","sendonly","recvonly","inactive"],s=i.attr.find((e=>!!~a.indexOf(e.name)));s&&e.push(n.printAttrInfo(s));const o=i.attr.find((e=>"ice"===e.name));o&&o.value.forEach((t=>{e.push(n.printAttrInfo(t))}));let c=i.attr.filter((e=>"ice"!==e.name&&!~a.indexOf(e.name)));for(let t=0;t<c.length;t++)Array.isArray(c[t].value)?c[t].value.forEach((t=>{e.push(n.printAttrInfo(t))})):e.push(n.printAttrInfo(c[t]))}return e.join("\r\n")+"\r\n"}static printConnectionInfo(e){return`c=${e.netType} ${e.addrType} ${e.addr}`}static printBandwidthInfo(e){return`b=${e.modifier}:${e.value}`}static printAttrInfo(e){return`a=${e.name}${e.value?":"+e.value:""}`}}t.default=n,n.SDP_EINSDP="Wrong sdp lines"},8879:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SDPMuggle=void 0;const i=n(125),r=n(1206),a=n(8707);class s{static getSDPLines(e){return e.split(/(\r\n|\r|\n)/).filter(s.validLine)}static createSDPFrom(e,t){return new RTCSessionDescription({sdp:e.join("\r\n")+"\r\n",type:t})}static detectDirections(e){let t=[],n=e.split(/(\r\n|\r|\n)/).filter(s.validLine),i="";return n.forEach((e=>{if(0===e.indexOf("m=")){let t=e.substr(2);i=t.split(" ")[0]}""===i||"a=sendrecv"!==e&&"a=sendonly"!==e&&"a=recvonly"!==e&&"a=inactive"!==e||(t.push({type:i,direction:e.substr(2)}),i="")})),t}static checkIsVimsSectionExistsIn(e){return e.includes("VIMS")}static removeTelephoneEvents(e){if(-1!==e.sdp.indexOf("a=rtpmap:127 telephone-event/8000")){let t=e.sdp.split(/(\r\n|\r|\n)/).filter(s.validLine),n=-1;for(let e=0;e<t.length;e++){if(-1!==t[e].indexOf("m=audio")){let n=t[e];"string"==typeof n&&(t[e]=n.replace(" 127",""))}-1!==t[e].indexOf("a=rtpmap:127 telephone-event/8000")&&(n=e)}return t.splice(n,1),new RTCSessionDescription({sdp:t.join("\r\n")+"\r\n",type:e.type})}return e}static removeDoubleOpus(e){if(-1!==e.sdp.indexOf("a=rtpmap:109 opus")&&-1!==e.sdp.indexOf("a=rtpmap:111 opus")){let t=e.sdp.split(/(\r\n|\r|\n)/).filter(s.validLine),n=-1;for(let e=0;e<t.length;e++){if(-1!==t[e].indexOf("m=audio")){let n=t[e];"string"==typeof n&&(t[e]=n.replace(" 109",""))}-1!==t[e].indexOf("a=rtpmap:109 opus")&&(n=e)}return t.splice(n,1),new RTCSessionDescription({sdp:t.join("\r\n")+"\r\n",type:e.type})}return e}static removeDoublePT(e){let t=e.sdp.split(/(\r\n|\r|\n)/).filter(s.validLine),n=[];for(let e=0;e<t.length;e++){let i=t[e];0===i.indexOf("m=video")&&(n=i.split(" "),t[e]=n.filter(((e,t)=>{if(0===t)return!0;for(let i=t-1;i>=2;i--)if(n[i]===e)return!1;return!0})).join(" "))}return new RTCSessionDescription({sdp:t.join("\r\n")+"\r\n",type:e.type})}static getSdpCodecs(e){return e.match(/a=rtpmap:\d+/g)}static removeDoubleCodecsInactiveSections(e){let t=e.sdp.split("m=");for(let e=0;e<t.length;e+=1){if(-1===t[e].indexOf("a=inactive"))continue;const n=s.getSdpCodecs(t[e]);n&&n.filter(((e,t)=>n.indexOf(e)!==t)).forEach((n=>{const i=new RegExp(`${n} .+\r\n`);t[e]=t[e].replace(i,"")}))}return new RTCSessionDescription({sdp:t.join("m="),type:e.type})}static removeTransportCC(e){if(-1!==e.sdp.indexOf("http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01")){let t=e.sdp.split(/(\r\n|\r|\n)/).filter(s.validLine),n=[];return t.forEach(((e,t)=>{-1!==e.indexOf("http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01")&&n.unshift(t)})),n.forEach((e=>t.splice(e,1))),new RTCSessionDescription({sdp:t.join("\r\n")+"\r\n",type:e.type})}return e}static removeTIAS(e){if(-1!==e.sdp.indexOf("b=TIAS:13888000")||-1!==e.sdp.indexOf("b=AS:13888")){let t=e.sdp.split(/(\r\n|\r|\n)/).filter(s.validLine),n=[];t.forEach(((e,t)=>{-1===e.indexOf("b=TIAS:13888000")&&-1===e.indexOf("b=AS:13888")||n.unshift(t)})),n.forEach((e=>t.splice(e,1))),e={type:e.type,sdp:t.join("\r\n")+"\r\n"}}return e}static fixVideoRecieve(e,t){if(-1!==e.sdp.indexOf("m=video")&&!t){let t=e.sdp.split(/(\r\n|\r|\n)/).filter(s.validLine),n=null;return t=t.map(((e,t)=>(null===n?-1!==e.indexOf("m=video")&&(n=t):"a=sendrecv"===e?e="a=sendonly":"a=recvonly"===e&&(e="a=inactive"),e))),new RTCSessionDescription({sdp:t.join("\r\n")+"\r\n",type:e.type})}return e}static addSetupAttribute(e){return-1==e.indexOf("a=setup:")&&(e+="a=setup:actpass\r\n"),e}static findTrackByMid(e,t){let n=e.split(/(\r\n|\r|\n)/).filter(s.validLine),i=-1;for(let e=0;e<n.length&&(-1===n[e].indexOf("a=mid:")||-1===i);e++)if(-1!==n[e].indexOf(`a=mid:${t}`)&&(i=e),-1!==n[e].indexOf("msid:")&&-1!==i)return n[e].split(" ").slice(-1).pop();return""}static addXAS(e){if(i.Client.getInstance().config().experiments.xas&&i.Client.getInstance().config().experiments.xas){let t=e.sdp;const n=i.Client.getInstance().config().experiments.xas;return void 0!==n.as&&-1!==n.as&&(t=t.replace(/(a=mid:video.*\r\n)/g,"$1b=AS:"+n.as+"\r\n")),void 0!==n.tias&&-1!==n.tias&&(t=t.replace(/(a=mid:video.*\r\n)/g,"$1b=TIAS:"+n.as+"\r\n")),new RTCSessionDescription({sdp:t,type:e.type})}return e}static fixFFMIDBug(e){if(-1==e.sdp.indexOf("a=mid")){const t=e.sdp.replace(/(m=audio.*\r\n)/g,"$1a=mid:0\r\n");return new RTCSessionDescription({sdp:t,type:e.type})}return e}static fixFMTP(e){let t=e.sdp.split(/(\r\n|\r|\n)/).filter(s.validLine),n=[];return t=t.filter((t=>{if(0==t.indexOf("a=fmtp")){let i=t.split(" ")[1],r=i.replace("apt=","");return-1!==e.sdp.indexOf(`a=rtpmap:${r}`)||(n.push(i[0].replace("a=fmtp:","")),!1)}return!0})).filter((e=>-1===e.indexOf("a=rtpmap:")||-1===n.indexOf(e.split(" ")[0].replace("a=rtpmap:","")))).map((e=>{if(-1!==e.indexOf("m=")){return e.split(" ").filter((e=>-1===n.indexOf(e))).join(" ")}return e})),{sdp:t.join("\r\n")+"\r\n",type:e.type}}static trimMediaAttr(e){let t=e.sdp.split(/(\r\n|\r|\n)/).filter(s.validLine);return t=t.map((e=>(e.includes("a=fmtp")&&(e=e.split(";").map((e=>e.trim())).join(";")),e))),new RTCSessionDescription({sdp:t.join("\r\n")+"\r\n",type:e.type})}static fixSetupSection(e){if(!r.getParser(window.navigator.userAgent).satisfies({chrome:">94.00.0"})||navigator.userAgent.match(/BitrixDesktop/i))return e;return this.getSDPLines(e).map((e=>e.includes("a=setup:")?e.replace(/:.+$/,":active"):e)).join("\r\n")+"\r\n"}static forcePassiveSetupSection(e){if(!r.getParser(window.navigator.userAgent).satisfies({chrome:">94.00.0"})||navigator.userAgent.match(/BitrixDesktop/i))return e;const t=this.getSDPLines(e.sdp).map((e=>e.includes("a=setup:")?e.replace(/:.+$/,":passive"):e));return{...e,sdp:t.join("\r\n")+"\r\n"}}static reduceCodecs(e,t){let n=a.default.parse(e.sdp),i=!1,r=!1;return n.media.forEach(((e,a)=>{if(!e.attr.find((e=>"inactive"===e.name))){let o=[],c=[],d=[],l=[];if(e.attr.forEach((e=>"rtpmap"===e.name?d.push(e):"ssrc"===e.name?c.push(e):void o.push(e))),"audio"===e.descr.media){if(!t.audio?.length)return;let e=s.reduceAudioCodecs(d,t.audio);l.push(...e.reducedCodecs),r=e.isAudio}else if("video"===e.descr.media){if(!t.video?.length)return;let e=s.reduceVideoCodecs(d,t.video);l.push(...e.reducedCodecs),i=e.isVideo}l.length?(n.media[a].attr=[...o,...l,...c],n.media[a].descr.fmtCount=l.length,n.media[a].descr.fmt=l.map((e=>e.value[0].value.split(" ")[0])),n.media[a].attrCount=n.media[a].attr.length):(delete n.media[a],n.mediaCount--)}})),{sdp:{type:e.type,sdp:n.toString()},isVideo:i,isAudio:r}}static recoverVideoFmts(e,t){t?.info(`SDPMuggle.recoverVideoFmts(): parsing SDP\n${e}`);const n=a.default.parse(e),i=n.media?.[1];if(!i)return t?.info("SDPMuggle.recoverVideoFmts(): video description is undefined"),e;const r=i.attr?.filter((({name:e})=>"rtpmap"===e))||[];if(i.descr.fmtCount===r?.length)return t?.info("SDPMuggle.recorverVideoFmts(): fmts count and rtpmaps count are equal"),e;const s=((e,t)=>{const n=new Set(e);for(const e of t)n.delete(e);return Array.from(n.values())})(r.map((({value:e})=>{const t=e[0],[n]=t?.value?.split(" ")||[];return n})),i.descr.fmt);t?.info(`SDPMuggle.recorverVideoFmts(): fmts are missed ${s}`),i.descr.fmt.push(...s),i.descr.fmtCount=i.descr.fmt.length;const o=n.toString();return t?.info(`SDPMuggle.recorverVideoFmts(): SDP is recovered\n${o}`),o}static reduceVideoCodecs(e,t){const n=[];let i=!1;const r=e.filter((e=>e.value.find((e=>!!~e.value.indexOf("rtx")))));return e.forEach((e=>{const a=e.value.find((e=>"rtpmap"===e.name)).value,s=t.filter((e=>!!~a.indexOf(e.name)));if(s.length){const t=e.value.find((e=>"fmtp"===e.name))?.value;s.forEach((a=>{let s=Object.keys(a.params||{}).length;for(const e in a.params)~t.indexOf(`${e}=${a.params[e]}`)&&s--;if(0===s&&(a.optional||i||(i=!0),n.push(e),r.length)){let t=((e,t)=>{const n=e.value.find((e=>"rtpmap"===e.name)).value.split(" ")[0];return t.find((e=>e.value.find((e=>!!~e.value.indexOf(`apt=${n}`)))))})(e,r);t&&n.push(t)}}))}})),{reducedCodecs:n,isVideo:i}}static reduceAudioCodecs(e,t){const n=[];let i=!1;return e.forEach((e=>{const r=e.value.find((e=>"rtpmap"===e.name)).value,a=t.filter((e=>!!~r.indexOf(e.name)));if(a.length){const t=e.value.find((e=>"fmtp"===e.name))?.value;a.forEach((r=>{let a=Object.keys(r.params||{}).length;for(const e in r.params)~t.indexOf(`${e}=${r.params[e]}`)&&a--;0===a&&(r.optional||i||(i=!0),n.push(e))}))}})),{reducedCodecs:n,isAudio:i}}_traceName(){return"SDPMuggle"}}t.SDPMuggle=s,s.validLine=RegExp.prototype.test.bind(/^([a-z])=(.*)/)},3902:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.TransreceiverPC=t.RTCSdpType=void 0;const r=n(6746),a=n(3869),s=n(84),o=n(1150),c=n(9551),d=n(308),l=n(4106),g=n(6127),u=n(2282),h=n(8879),p=n(125),f=n(7998),m=n(4265),C=n(7272),v=n(2957),_=n(245);var E=C.default.StreamManager;const S=n(6665),y=n(8552),M=n(8237),R=n(7243),L=n(5826),I=n(6081),T=new WeakMap;var A,O,N;!function(e){e[e.offer="offer"]="offer",e[e.answer="answer"]="answer",e[e.pranswer="pranswer"]="pranswer",e[e.rollback="rollback"]="rollback"}(A=t.RTCSdpType||(t.RTCSdpType={})),function(e){e[e.controlling="controlling"]="controlling",e[e.controlled="controlled"]="controlled"}(O||(O={})),function(e){e.alreadyInProgress="alreadyInProgress"}(N||(N={}));class b extends r.PeerConnection{constructor(e,t,n,i){super(e,t,n),this.candidatePool=[],this.candidateQueueMap=new Map([["local",[]],["remote",[]]]),this.iceTimer=null,this.needTransportRestart=!0,this.ICE_TIMEOUT=2e4,this._needIceRestart=!1,this.streamCache=[],this.isRemoteDescriptionChecked=!1,this.isSignallingStateChecked=!1,this.transcieverStateBeforeHold=new Map,this._canReInvite=()=>"connected"===this.impl.iceConnectionState||"completed"===this.impl.iceConnectionState,this.checkCandidatesToRunTimer=null,this.checkCandidatesToRunInterval=200,this.isAddingFromQueueInProgress=!1,this._TransceiverEncoderMap=new WeakMap;let r=s.PCFactory.get().iceConfig;null==r&&(r={gatherPolicy:"all",iceServers:[]}),i&&(r.iceServers=i),r.bundlePolicy="balanced",this._createImpl(r)}_getLocalOfferRegular(){return this.iceRole=O.controlling,new Promise(((e,t)=>{let n={};this._call&&(a.default.isIphone()||!this._call.settings.isConference&&!this._call.settings.isAudio)&&(n=this.getReceiveOptions()),this.resetEncodings().then((()=>(this.logger.info("_getLocalOfferRegular(), start create local SDP"),this.impl.createOffer(n)))).then((e=>{this.logger.info(`_getLocalOfferRegular(), created local SDP: \n${e.sdp}`);let t={type:e.type,sdp:e.sdp};return t=s.PCFactory.get().addBandwidthParams(t),t=h.SDPMuggle.removeDoublePT(t),t=this._reduceCodecs(t),t=h.SDPMuggle.trimMediaAttr(t),this.codecRearrange(t)})).then((e=>(this.srcLocalSDP=e.sdp,this.logger.info(`_getLocalOfferRegular(), set local SDP: \n${e.sdp}`),this._call&&this._call.dispatchEvent({name:"SDP",origin:"getLocalOffer",sdp:e}),this.impl.setLocalDescription(e)))).then((()=>{e(this.impl.localDescription)})).catch((e=>{this._call&&this._call.dispatchEvent({name:"SDP",origin:"_getLocalOfferRegular",sdp:this.impl.localDescription,description:`offer_reject: ${e.message}`}),t(e)}))}))}updateHoldState(){this.impl.getTransceivers().forEach((e=>{e.sender.track&&("audio"===e.sender.track.kind?e.sender.track.enabled=!this.onHold&&!this.muteMicState:e.sender.track.enabled=!this.onHold)}))}_processRemoteAnswer(e,t){if(0===t.length&&this._call)return this.logger.error("Empty SDP from server. Call will be terminated."),void this._call.hangup({"X-WebRTCError":"no sdp"});if("stable"===this.impl.signalingState)return;let n={sdp:t,type:A.answer};return this.srcRemoteSDP=t,n=h.SDPMuggle.removeTIAS(n),n=h.SDPMuggle.trimMediaAttr(n),this.logger.info(`_processRemoteAnswer(), set remote SDP: \n${n.sdp}`),this._call&&this._call.dispatchEvent({name:"SDP",origin:"processRemoteAnswer",sdp:n}),this.impl.setRemoteDescription(n).then((()=>this.impl.getTransceivers().forEach(this.stopInactiveTransceiver.bind(this)))).then((e=>{this._needIceRestart&&(this._call.settings.isDirect&&this._call.settings.incoming||this._runReinvite(!0))})).catch((e=>{this._call&&this._call.dispatchEvent({name:"SDP",origin:"_processRemoteAnswer",sdp:this.impl.localDescription,description:`answer_reject: ${e.message}`})}))}_getLocalOffer(){return"firefox"===a.default.getWSVendor()&&this.impl.remoteDescription&&this.impl.remoteDescription.sdp&&-1===this.impl.remoteDescription.sdp.indexOf("VIMS")?this._getLocalOfferFF():this._getLocalOfferRegular()}_getLocalOfferFF(){return this.iceRole=O.controlling,new Promise(((e,t)=>{let n={};!this._call||!a.default.isIphone()&&this._call.settings.isConference||(n=this.getReceiveOptions()),this.resetEncodings().then((()=>this.impl.createOffer(n))).then((e=>{this.logger.info(`_getLocalOfferFF(), created local SDP: \n${e.sdp}`);let t={type:e.type,sdp:e.sdp};return t=s.PCFactory.get().addBandwidthParams(t),t=h.SDPMuggle.removeDoublePT(t),t=this._reduceCodecs(t),t=h.SDPMuggle.trimMediaAttr(t),this.codecRearrange(t)})).then((t=>{this.srcLocalSDP=t.sdp,this._pendingOffer=t,e(t)})).catch((e=>{this._call&&this._call.dispatchEvent({name:"SDP",origin:"_getLocalOfferFF",sdp:this._pendingOffer,description:`offer_reject: ${e.message}`}),t(e)}))}))}_getLocalAnswer(){return this.iceRole=O.controlled,new Promise(((e,t)=>{let n={mandatory:{}};!this._call||!a.default.isIphone()&&this._call.settings.isConference||(n={mandatory:this.getReceiveOptions()}),this.resetEncodings().then((()=>this.impl.createAnswer(n))).then((e=>{this.logger.info(`_getLocalAnswer(), created local SDP: \n${e.sdp}`);let t={type:e.type,sdp:e.sdp};return t=s.PCFactory.get().addBandwidthParams(t),t=h.SDPMuggle.removeDoublePT(t),t=h.SDPMuggle.fixVideoRecieve(t,this._call.settings.videoDirections.receiveVideo),t=this._reduceCodecs(t),t=h.SDPMuggle.trimMediaAttr(t),this._call&&this._call.settings.incoming&&(t=h.SDPMuggle.forcePassiveSetupSection(t)),this.codecRearrange(t)})).then((e=>(this.srcLocalSDP=e.sdp,this.logger.info(`_getLocalAnswer(), set local SDP: \n${e.sdp}`),this._call&&this._call.dispatchEvent({name:"SDP",origin:"getLocalAnswer",sdp:e}),this.impl.setLocalDescription({...e,type:"answer"})))).then((()=>{e({type:A.answer,sdp:this.impl.localDescription.sdp})})).catch((e=>{this._call&&this._call.dispatchEvent({name:"SDP",origin:"_getLocalAnswer",sdp:this.impl.localDescription,description:`answer_reject: ${e.message}`}),t(e)}))}))}_processRemoteOffer(e){return 0===e.length&&this._call?(this.logger.error("Empty SDP from server. Call will be terminated."),void this._call.hangup({"X-WebRTCError":"no sdp"})):(this.iceRole=O.controlled,new Promise(((t,n)=>{let i=new RTCSessionDescription({sdp:e,type:A.offer});this.srcRemoteSDP=e,i=h.SDPMuggle.removeTIAS(i),i=h.SDPMuggle.fixFFMIDBug(i),i=h.SDPMuggle.trimMediaAttr(i),this.logger.info(`_processRemoteOffer(), set remote SDP: \n${i.sdp}`),this._call&&this._call.dispatchEvent({name:"SDP",origin:"processRemoteOffer",sdp:i}),this.resetEncodings().then((()=>this.impl.setRemoteDescription(i))).then((()=>{let e={mandatory:{}};return!this._call||!a.default.isIphone()&&this._call.settings.isConference||(e={mandatory:this.getReceiveOptions()}),this.impl.createAnswer(e)})).then((e=>(this.logger.info(`_processRemoteOffer(), created local SDP: \n${e.sdp}`),e=h.SDPMuggle.removeDoublePT(e),e=this._reduceCodecs(e),e=h.SDPMuggle.trimMediaAttr(e),this.codecRearrange(e)))).then((e=>(this.srcLocalSDP=e.sdp,this.logger.info(`_processRemoteOffer(), set local SDP: \n${e.sdp}`),this._call&&this._call.dispatchEvent({name:"SDP",origin:"processRemoteOffer",sdp:e}),this.impl.setLocalDescription(e)))).then((()=>{t(this.impl.localDescription.sdp)})).catch((e=>{this._call&&this._call.dispatchEvent({name:"SDP",origin:"_processRemoteOffer",sdp:this.impl.localDescription,description:`answer_reject: ${e.message}`}),n(e)}))})))}_setRemoteDescription(e){if(0===e.length&&this._call)return this.logger.error("Empty SDP from server. Call will be terminated."),void this._call.hangup({"X-WebRTCError":"no sdp"});let t=new RTCSessionDescription({sdp:e,type:A.offer});return t=h.SDPMuggle.removeTIAS(t),t=h.SDPMuggle.trimMediaAttr(t),this.srcRemoteSDP=e,this.logger.info(`_setRemoteDescription(), set remote SDP: \n${t.sdp}`),this._call&&this._call.dispatchEvent({name:"SDP",origin:"setRemoteDescription",sdp:t}),this.impl.setRemoteDescription(t)}_handleRemoteOffer(e,t,n=!1){return this.renegotiationInProgress=!0,0===t.length&&this._call?(this.logger.error("Empty SDP from server. Call will be terminated."),void this._call.hangup({"X-WebRTCError":"no sdp"})):new Promise(((i,r)=>{const s=new RTCSessionDescription({sdp:t,type:"offer"});"safari"!==a.default.getWSVendor()&&"stable"!==this.impl.signalingState?(this.logger.info(`signalingState: ${this.impl.signalingState}, local description is set with 'rollback' type`),this.resetEncodings().then((()=>Promise.all([this.impl.setLocalDescription({type:"rollback"}),this.impl.setRemoteDescription(s)]))).then((()=>this.impl.createAnswer())).then((t=>{let n={sdp:t.sdp,type:t.type};n=h.SDPMuggle.removeDoubleOpus(n),n=h.SDPMuggle.removeDoublePT(n),n=h.SDPMuggle.fixVideoRecieve(n,this.videoEnabled.receiveVideo),n=h.SDPMuggle.trimMediaAttr(n),n=this._reduceCodecs(n),this.impl.setLocalDescription(n).then((()=>{this.renegotiationInProgress=!1,this.updateHoldState();const t={mids:this.getMidKinds()};_.default.callRemoteFunction(l.RemoteFunction.acceptReInvite,this._call.id(),e,n.sdp,t),this._call&&this._call.dispatchEvent({name:u.CallEvents.Updated,result:!0,call:this._call}),i()}))})).catch((i=>{n?console.error(i):setTimeout((()=>{this._handleRemoteOffer(e,t,!0)}),300)}))):(this.logger.info(`signalingState: ${this.impl.signalingState}, local description is set without 'rollback' type`),this.resetEncodings().then((()=>this.impl.setRemoteDescription(s))).then((()=>this.impl.createAnswer())).then((t=>{let n={sdp:t.sdp,type:t.type};n=this._reduceCodecs(n),n=h.SDPMuggle.trimMediaAttr(n),this.impl.setLocalDescription(n).then((()=>{const t={mids:this.getMidKinds()};this.impl.getTransceivers().forEach(this.stopInactiveTransceiver.bind(this)),_.default.callRemoteFunction(l.RemoteFunction.acceptReInvite,this._call.id(),e,n.sdp,t),this.renegotiationInProgress=!1,this._call&&this._call.dispatchEvent({name:u.CallEvents.Updated,result:!0,call:this._call}),this.updateHoldState(),i()}))})).catch((e=>this.logger.error(e))))}))}_handleReinvite(e,t){if(0===t.length&&this._call){const e="Empty SDP from server. Call will be terminated.";return this.logger.error(e),M.CallPromiseResolver.reject(this._call,e),this._call.hangup({"X-WebRTCError":"no sdp"}),Promise.reject(e)}return new Promise(((e,n)=>{const i=e=>{const t=`answer_reject: ${e.message}`;this._call&&(this._call.dispatchEvent({name:"SDP",origin:"_handleReinvite",sdp:this.impl.localDescription,description:t}),M.CallPromiseResolver.reject(this._call,t)),n(e)};if(this.banReinviteAnswer){const e="Reinvite answer is banned";return M.CallPromiseResolver.reject(this._call,e),n(new Error(e))}if(!1===this.renegotiationInProgress)return M.CallPromiseResolver.resolve(this._call),e();if(!0===this.renegotiationInProgress){let n={sdp:t,type:A.answer};this.renegotiationInProgress=!1,this.srcRemoteSDP=t,n=h.SDPMuggle.removeTIAS(n),n=h.SDPMuggle.trimMediaAttr(n),this.impl.setRemoteDescription(n).then((()=>{this._call&&M.CallPromiseResolver.resolve(this._call),this.updateHoldState(),this.impl.getTransceivers().forEach(this.stopInactiveTransceiver.bind(this)),this.cleanStreamCache(),e()})).catch((e=>{this.renegotiationInProgress=!1,i(e),this.logger.error(JSON.stringify(e)),this.stopStreamsFromCache()})),clearTimeout(this.renegotiationTimer)}else{const e="Unreachable code for handling reinvite has reached";M.CallPromiseResolver.reject(this._call,e),n(new Error(e))}}))}_close(){clearInterval(this.rtcCollectingCycle),this.impl.onnegotiationneeded=null,this.impl.getSenders().forEach((e=>{"closed"!==this.impl.signalingState&&this.impl.removeTrack(e)})),(0,y.unregisterPeerConnection)(this.impl),this.impl.close(),this._localStream=null,this._remoteStreams=null,this.impl.ontrack=null,this.impl.onicecandidate=null,this.impl.onsignalingstatechange=null,this.impl.oniceconnectionstatechange=null,this.impl.onconnectionstatechange=null,this.impl.onicegatheringstatechange=null,"closed"===this.impl.connectionState&&this.onConnectionStateChange(),"closed"===this.impl.signalingState&&this.onSignalingStateChange(),"closed"===this.impl.iceConnectionState&&this.onIceConnectionChange(),this.logger.info("Peer Connection has been closed.")}_addRemoteCandidate(e,t){return new Promise(((n,i)=>{try{const i=new RTCIceCandidate({candidate:e.substring(2),sdpMLineIndex:t});this.candidatePool.push(i),this._addIceCandidateToQueue(i,"remote").then(n)}catch(e){n()}}))}async _addIceCandidatesFromQueue(){if("closed"===this.impl.signalingState)return this.logger.info("Peer connection is closed. No need to add ICE candidates"),void this.stopCheckCandidatesToRunTimer();if(!this.impl.remoteDescription)return void(this.isRemoteDescriptionChecked||(this.logger.info("Peer connection not ready to add ICE candidates. No remote description set"),this.isRemoteDescriptionChecked=!0));if("stable"!==this.impl.signalingState)return void(this.isSignallingStateChecked||(this.logger.info(`Peer connection not ready to add ICE candidates. Signaling state is ${this.impl.signalingState}`),this.isSignallingStateChecked=!0));this.isRemoteDescriptionChecked=!1,this.isSignallingStateChecked=!1;const e="remote",t=this.candidateQueueMap.get(e);if(!t?.length)return void this.stopCheckCandidatesToRunTimer();this.logger.info(`Adding ICE candidates from pool in state ${this.impl.signalingState}. Total candidates in queue ${t?.length}`),this.isAddingFromQueueInProgress=!0,this.logger.info(`Adding ICE candidates ${t.length?JSON.stringify(t):"[]"}`);const n=t?.map((e=>e));for(const e of n)try{await this.impl.addIceCandidate(e),t.splice(t.indexOf(e),1)}catch(e){this.logger.error(`Error on adding ICE candidates from queue: ${e}`)}this.isAddingFromQueueInProgress=!1,0===t.length?(this.logger.info("No more candidates to add from queue"),this.stopCheckCandidatesToRunTimer()):(this.candidateQueueMap.set(e,t),this.logger.info(`${t.length} candidates left to add from queue. Delay add candidates`))}async _addIceCandidateToQueue(e,t){if("stable"===this.impl.signalingState&&this.impl.remoteDescription)try{this.logger.info(`Adding ${t} candidate ${e.candidate} in state ${this.impl.signalingState}`),await this.impl.addIceCandidate(e)}catch(e){this.logger.error(`Error on adding ICE candidate: ${e}`)}else this.logger.info("Adding ICE candidate to queue"),this.candidateQueueMap.get(t)?.push(e),this.startCheckCandidatesToRunTimer()}async untilPCInState(e){const{resolve:t,promise:n}=(0,L.promiseWithResolvers)(),i=new AbortController;return e.includes(this.impl.connectionState)?t():this.impl.addEventListener("connectionstatechange",(n=>{e.includes(this.impl.connectionState)&&(t(),i.abort())}),{signal:i.signal}),n}setConfiguration(e,t){if(this.impl){const n=e.iceServers.some((e=>Array.isArray(e.urls)?e.urls.some((e=>e.startsWith("turn:"))):e.urls.startsWith("turn:"))),i=p.Client.getInstance().allowTurnForConferenceCalls&&n&&t?.call?.settings.isConference;setTimeout((async()=>{if(this.srcRemoteSDP&&-1===this.srcRemoteSDP.indexOf("VIMS")||window.__VIIceServer__||i){if(a.default.isFirefox()&&await this.untilPCInState(["connected","closed","disconnected","failed"]),["closed","disconnected","failed"].includes(this.impl.connectionState))return;if(this.impl&&this.impl.setConfiguration)this.impl.setConfiguration(e),this.renegotiationInProgress=!1,this._runReinvite(!0),setTimeout((()=>{this.candidatePool.forEach((e=>{this.impl.addIceCandidate(e).catch((()=>{}))}))}),2e3);else if(this._pendingOffer){let t=[];this.impl.getTransceivers().map((e=>{e.sender.track&&t.push(e.sender.track)})),this._createImpl(e),t.forEach((e=>{this.impl.addTrack(e,new MediaStream([e]))})),this.impl.createOffer().then((e=>(this.logger.info(`setConfiguration(), created local SDP: \n${e.sdp}`),this._needIceRestart=!0,this.logger.info(`setConfiguration(), set local SDP: \n${this._pendingOffer.sdp}`),this.impl.setLocalDescription(this._pendingOffer)))).then((()=>{this._pendingOffer=void 0})).catch((e=>{this._call&&this._call.dispatchEvent({name:"SDP",origin:"setConfiguration",sdp:this.impl.localDescription,description:`answer_reject: ${e.message}`}),console.error(e)}))}}}),800)}}_sendDTMF(e,t,n){try{this.dtmfSender.insertDTMF(e,t,n)}catch(i){this.dtmfSender=new c.SignalingDTMFSender(this._call.id()),this.dtmfSender.insertDTMF(e,t,n)}}_hdnFRSPrep(){this.banReinviteAnswer=!0}_hdnFRS(){this.renegotiationInProgress=!1,this.onRenegotiation()}_traceName(){return"TransreceiverPC"}hasLocalAudio(){return this.impl.getLocalStreams().some((e=>!!e.getAudioTracks().length))}enableVideo(e){let t=[];this._call&&(t=C.default.StreamManager.get()._getScreenSharing(this._call)||[]);const n=[];t.forEach((e=>e.stream.getTracks().forEach((e=>n.push(e.id))))),e?(this._call.settings.videoDirections.sendVideo=!0,C.default.StreamManager.get().getCallStream(this._call,{force:!0,resetDefaultAudio:!1}).then((e=>{if(!e)throw new Error("Could not get call stream");this.logger.info(`Got stream ${e.id} with video tracks: ${e.getVideoTracks().length}, audio tracks: ${e.getAudioTracks().length}`),this.addStreamToCache(e);let t=[];if(a.default.isIphone()||a.default.isIpad()){this.logger.info("Starting iPhone/iPad specific routine");let n=e.getAudioTracks(),i=this._call.peerConnection.getTransceivers().find((e=>e.sender.track&&"audio"===e.sender.track.kind));t.push(this.__replaceTrack(i,n[0]))}let n=e.getVideoTracks();return n.length&&(this._call.settings.isConference&&!this.isSimulcast()?t.push(this._addVideoTransceiver(n[0],e,"video")):t.push(this._addNewVideoTransceiver(n[0],e,"video"))),Promise.all(t)})).then((e=>{const t=e.reduce(((e,t)=>(t===N.alreadyInProgress&&(e=!0),e)),!1);if(this.logger.info(`Renegotiation is already in progress: ${t}`),!t)return this.updateSenderTrackTransformers(),C.default.StreamManager.get().updateLocalVideo();this.revertEnablingVideo()})).catch((e=>{this.revertEnablingVideo(),this.logger.error(`Error during enableVideo(true): ${e.message}`)}))):(t.length&&t.forEach((e=>{C.default.StreamManager.get()._clearScreenSharing(this._call,e)})),this.impl.getTransceivers().forEach((e=>{e.stopped||"sendrecv"!==e.currentDirection&&"sendonly"!==e.currentDirection&&"inactive"!==e.currentDirection||!e.sender.track||"video"!==e.sender.track.kind||this.__replaceTrack(e,null).then((()=>("sendonly"===e.currentDirection&&(!this._call.settings.isConference||this._call.settings.isConference&&this.isSimulcast())?e.stop():e.direction="recvonly",this._call.settings.videoDirections.sendVideo=!1,this.onRenegotiation()))).catch((e=>{this.logger.warning("Wrong transceiver on replace")}))})))}async replaceVideoOrSharingConferenceSimulcast(e,t){const n=this.impl.getTransceivers();for(const i of n)if(!i.stopped&&("sendrecv"===i.currentDirection||"sendonly"===i.currentDirection||"inactive"===i.currentDirection)&&i.sender.track&&"video"===i.sender.track.kind)try{await this.__replaceTrack(i,null),i.stop();const n=e.getVideoTracks(),r=[];n.forEach((n=>{r.push(this._addNewVideoTransceiver(n,e,t))})),await Promise.all(r),C.default.StreamManager.get().isLocalVideoRequested&&await C.default.StreamManager.get().updateLocalVideo()}catch(e){this.logger.warning("Wrong transceiver on replace")}}revertEnablingVideo(){0!==this.streamCache.length&&(this.logger.info("Revert enableVideo in progress"),this._call.settings.videoDirections.sendVideo=!1,this.impl.getTransceivers().forEach((e=>{null!==e.mid&&null!==e.currentDirection||!e.sender.track||"video"!==e.sender.track.kind||this.__replaceTrack(e,null).then((()=>{if(this.renegotiationInProgress)throw new Error("Renegotiation in progress, it is forbidden to revert transceivers. Please rejoin to call to avoid unexpected results.");return this.onRenegotiation()})).then((()=>{e.stop(),this.logger.info("New call transceiver has been stopped")})).catch((e=>{this.logger.error(e.message)})),this._call.settings.isConference&&null!==e.mid&&("sendrecv"===e.direction||"sendonly"===e.direction)&&e.sender.track&&"video"===e.sender.track.kind&&this.__replaceTrack(e,null).then((()=>{e.direction="recvonly",this.logger.info("Direction in conference transceiver has been changed to `recvonly`")})).catch((e=>{this.logger.warning(`Could not revet enabling video process after error. Reason: ${e.message}`)}))})),this.stopStreamsFromCache(),this.logger.info("New streams have been stopped. Revert enableVideo finished"))}_addNewVideoTransceiver(e,t,n){return new Promise(((i,r)=>{this.logger.info(`Call _addNewVideoTransceiver for ${t.id}, type ${n}`);const a=d.CallManager.get().getEndpointManager(this._call);if(!a)return void this.logger.warning(`Endpoint manager not found for call ${this._call.id()}. Skipping add new video transceiver.`);const s={direction:this._getDefaultDirection(),streams:[t]},o=e.getSettings();if(this.isSimulcast())this.logger.info("Manage simulcast layers for call"),s.sendEncodings=v.Utils.buildSimulcastLayers({trackSettings:o,trackType:n,profileName:this._call?.settings.simulcastProfileName}),this.logger.info(`Got simulcast layers: ${JSON.stringify(s.sendEncodings)}`);else{this.logger.info("Manage encoding for call");const t=e.getSettings();s.sendEncodings=v.Utils.buildNotSimulcastLayers({trackSettings:t,trackType:n}),this.logger.info(`New encodings params have been applied for ${n} track: ${JSON.stringify(s.sendEncodings)}`)}let c=this.impl.addTransceiver(e,s);this.updateTransceiver(a,c),this.onRenegotiation().then(i).catch(r)}))}_replaceSharingToVideo(e,t){return new Promise((n=>{const i=this.getTransceivers().filter((e=>e.sender.track&&"video"===e.sender.track.kind));if(i?.length){if(this.isSimulcast()){const n=v.Utils.buildSimulcastLayers({trackSettings:e.getSettings(),trackType:t,profileName:this._call?.settings.simulcastProfileName});this._setEncodingsParams(i[0],n)}else{const n=v.Utils.buildNotSimulcastLayers({trackSettings:e.getSettings(),trackType:t});this.logger.info(`New encodings params have been applied for ${t} track: ${JSON.stringify(n)}`),this._setEncodingsParams(i[0],n)}this.__replaceTrack(i[0],e).then((()=>{C.default.StreamManager.get().isLocalVideoRequested&&C.default.StreamManager.get().updateLocalVideo(),this._runReinvite(),n()}))}else n()}))}getTransceivers(){return this.impl.getTransceivers?this.impl.getTransceivers():[]}getRemoteDescription(){return this.impl.remoteDescription&&this.impl.remoteDescription.sdp?this.impl.remoteDescription.sdp:""}_addCustomMedia(e){if(!e||"closed"===this.impl.signalingState)return;let t="video";C.default.StreamManager.get()._getScreenSharing(this._call).forEach((n=>{n.stream.id===e.id&&(t="sharing")}));const n=d.CallManager.get().getEndpointManager(this._call);if(!n)return void this.logger.warning(`Endpoint manager not found for call ${this._call.id()}. Skipping add custom media stream.`);const i=e.getAudioTracks(),r=this._getDefaultDirection();if(i.length)i.forEach((t=>{let i=this.getEmptyTransceiverForKind("audio");i?("inactive"!==i.direction&&"recvonly"!==i.direction||(i.direction=this._getDefaultDirection()),this.impl.addTrack(t,e),this.onRenegotiation()):(i=this.impl.addTransceiver(t,{direction:r,streams:[e]}),this.onRenegotiation()),this.updateTransceiver(n,i)}));else if("sharing"!==t){const e=this.impl.addTransceiver("audio",{direction:"recvonly"});this.onRenegotiation(),this.updateTransceiver(n,e)}const s=e.getVideoTracks();if(s.length){const n=this.impl.getTransceivers().filter((e=>"video"===e.receiver.track.kind&&!("inactive"===e.direction||"stopped"===e.direction)&&"inactive"!==e.currentDirection&&!e.stopped));"sharing"!==t&&n.length?s.forEach((n=>{this._addVideoTransceiver(n,e,t)})):s.forEach((n=>{this._addNewVideoTransceiver(n,e,t)}))}else{if(!this._call.settings.isConference&&this.impl.getTransceivers().filter((e=>"video"===e.receiver.track.kind)).length)return;if(this._call.settings.isAudio)return;const i={direction:"recvonly",streams:[e]};this.isSimulcast()?i.sendEncodings=v.Utils.buildSimulcastLayers({trackSettings:null,trackType:t,profileName:this._call?.settings.simulcastProfileName}):(i.sendEncodings=v.Utils.buildNotSimulcastLayers({trackSettings:null,trackType:t}),this.logger.info(`New encodings params have been applied for ${t} track: ${JSON.stringify(i.sendEncodings)}`));const r=this.impl.addTransceiver("video",i);this.onRenegotiation(),this.updateTransceiver(n,r)}if(!this.dtmfSender&&this._call){const e=a.default.getDTMFSender(this.impl,this._call.id());e&&(this.dtmfSender=e)}this.updateSenderTrackTransformers()}getEmptyTransceiverForKind(e){return this._call&&this._call.settings.isConference?this.impl.getTransceivers().find((t=>"safari"===a.default.getWSVendor()?!isNaN(Number(t.mid))&&"recvonly"===t.direction&&t.receiver.track.kind===e&&!t.sender.track:!(isNaN(Number(t.mid))||"recvonly"!==t.direction&&"inactive"!==t.direction||t.receiver.track.kind!==e||t.sender.track||t.stopped))):this.impl.getTransceivers().find((t=>t.receiver.track.kind===e&&!t.sender.track&&!t.stopped))}updateTransceiver(e,t){e.updateTransceiver(t)}_removeCustomMedia(e){if(!e)return;this.renegotiationInProgress=!0;const t=this.impl.getTransceivers();e.getTracks().forEach((e=>{let n;n=this._call.settings.isConference?t.find((t=>!isNaN(Number(t.mid))&&t.sender.track&&t.sender.track===e)):t.find((t=>t.sender.track&&t.sender.track===e)),n&&this.__replaceTrack(n,null).then((()=>{"sendonly"===n.currentDirection&&(!this._call.settings.isConference||this._call.settings.isConference&&this.isSimulcast())&&n.stop(),this.renegotiationInProgress=!1,this._runReinvite()}))}))}async _updateCustomMedia(e){if(this._call.settings.isConference&&this.isSimulcast())await this.replaceVideoOrSharingConferenceSimulcast(e,"video");else{const t=await this.updateMediaTracks(e);t&&t.length&&(this.updateSenderTrackTransformers(),this._runReinvite())}}async updateMediaTracks(e){if(!e||"closed"===this.impl.signalingState)return;const t=[];return e.getTracks().forEach((e=>{const n=this.impl.getTransceivers().find((t=>t.sender.track&&t.sender.track.kind===e.kind));n&&t.push(this.__replaceTrack(n,e))})),await Promise.all(t).then((e=>(this.restoreMute(),e)))}_fixFFSoundBug(){"firefox"===a.default.getWSVendor()&&s.PCFactory.hasTransceivers&&setTimeout((()=>{if(this.impl.getSenders){this.impl.getSenders().forEach((e=>{if(e.replaceTrack){const t=e.track;e.replaceTrack(t)}}))}}),1e3)}getConfiguration(){return this.impl?this.impl.getConfiguration():null}_hold(e){this.onHold=e,this.impl.getTransceivers().forEach((t=>{if(!t.stopped&&"stopped"!==t.direction&&"stopped"!==t.currentDirection&&"inactive"!==t.direction&&"inactive"!==t.currentDirection)if(e)this.transcieverStateBeforeHold.set(t.mid,t.currentDirection),t.direction="sendonly";else{const e=this.transcieverStateBeforeHold.get(t.mid);if(!e)return void(t.direction="sendrecv");t.direction=e}})),this._runReinvite()}_getDirections(){let e={};return e.local=h.SDPMuggle.detectDirections(this.impl.localDescription.sdp),e.remote=h.SDPMuggle.detectDirections(this.impl.remoteDescription.sdp),e}_createImpl(e){p.Client.getInstance().config()&&p.Client.getInstance().config().experiments&&p.Client.getInstance().config().experiments.relayOnly&&(e={...e,iceTransportPolicy:"relay"});try{if(this.mode===r.PeerConnectionMode.CONFERENCE&&"chrome"===a.default.getWSVendor()){const t={mandatory:{},optional:[]},n=RTCPeerConnection;this.impl=new n(e,t)}else this.impl=new RTCPeerConnection(e)}catch(e){this.logger.error(e.message);const t=new Error(e.message);throw t.code=I.CallError.FAILED_TO_CREATE_PEER_CONNECTION,t}this._call=d.CallManager.get().calls[this.id],(0,S.registerSource)(this.impl,(e=>{if(this._call){const t={};this._call.getEndpoints().forEach((e=>{e.mediaRenderers.forEach((n=>{n.transceivers[0]&&n.transceivers[0].receiver&&n.transceivers[0].receiver.track&&(t[n.transceivers[0].receiver.track.id]={mr:n.id,ep:e.id})}))}));const n={};for(let i in e.inbound)t[i]?(n[t[i].mr]=e.inbound[i],n[t[i].mr].endpoint=t[i].ep):n[i]=e.inbound[i];e.inbound=n;const i=[...Object.values(e.inbound).filter((e=>"audio"===e.kind)),...Object.values(e.outbound).flat().filter((e=>"audio"===e?.kind))].map((t=>{const n=1e3*(t.rtt||e.connection?.currentRtt||0),i=t.loss||0,r=1e3*(t.jitter||0);return t.codec?.includes("opus")?(0,R.scoreG107Opus)(n,i,r):(0,R.scoreG107Generic)(n,i,r)})),r=i.reduce(((e,t)=>e+t),0)/i.length;e.mos={mosG107:r},this._call.dispatchEvent({name:u.CallEvents.CallStatsReceived,stats:e})}}),null,this._call),this.impl.getTransceivers&&"firefox"===a.default.getWSVendor()&&(s.PCFactory.hasTransceivers=!0),this.impl.addEventListener("track",(e=>this.onAddTrack(e))),this.impl.onicecandidate=e=>{this.onICECandidate(e.candidate)},this.renegotiationInProgress=!1,this.impl.onconnectionstatechange=e=>this.onConnectionStateChange(),this.impl.onsignalingstatechange=e=>this.onSignalingStateChange(),this.impl.oniceconnectionstatechange=e=>this.onIceConnectionChange(),this.impl.onicegatheringstatechange=e=>this.onIceGatheringStateChange(),this.iceRole=O.controlling,this._remoteStreams=[],this.banReinviteAnswer=!1,void 0!==this._call?this.onHold=!this._call.active():this.onHold=!1,this.needTransportRestart=!1,"_default"!==this.id&&d.CallManager.get().calls[this.id]&&(this.reInviteQ=new m.ReInviteQ(d.CallManager.get().calls[this.id],this._canReInvite))}onConnectionStateChange(){this.logger.info(`PC connection state changed to ${this.impl.connectionState}`),this._call?.dispatchEvent({name:"SDP",origin:"onconnectionstatechange",description:this.impl.connectionState})}onIceGatheringStateChange(){this.logger.info(`PC ice gathering state changed to ${this.impl.iceGatheringState}`),this._call?.dispatchEvent({name:"SDP",origin:"onicegatheringstatechange",description:this.impl.iceGatheringState})}onSignalingStateChange(){this.logger.info(`PC signaling state changed to ${this.impl.signalingState}`),this._call?.dispatchEvent({name:"SDP",origin:"onsignalingstatechange",description:this.impl.signalingState}),"stable"===this.impl.signalingState&&(this.reInviteQ&&this.reInviteQ.runNext(),this.startCheckCandidatesToRunTimer(),this._addIceCandidatesFromQueue())}startCheckCandidatesToRunTimer(){this.checkCandidatesToRunTimer||(this.checkCandidatesToRunTimer=setInterval((()=>{this.isAddingFromQueueInProgress||this._addIceCandidatesFromQueue()}),this.checkCandidatesToRunInterval))}stopCheckCandidatesToRunTimer(){this.checkCandidatesToRunTimer&&(clearInterval(this.checkCandidatesToRunTimer),this.checkCandidatesToRunTimer=null)}onIceConnectionChange(){this.logger.info(`PC ice connection state changed to ${this.impl.iceConnectionState}`),this._call?.dispatchEvent({name:"SDP",origin:"oniceconnectionstatechange",description:this.impl.iceConnectionState}),"failed"!==this.impl.iceConnectionState&&"disconnected"!==this.impl.iceConnectionState||d.CallManager.get().icerestart(),"closed"===this.impl.connectionState&&this._call&&E.get().remCallStream(this._call),"completed"===this.impl.iceConnectionState&&void 0!==this._call&&(this._call.dispatchEvent({name:"ICECompleted",call:this._call}),clearTimeout(this.iceTimer)),"completed"!==this.impl.iceConnectionState&&"connected"!==this.impl.iceConnectionState||(this.iceTimer&&clearTimeout(this.iceTimer),this.iceTimer=null,this.reInviteQ&&this.reInviteQ.runNext())}async onRenegotiation(){if(this.logger.info("Renegotiation will be started"),this._call&&this._call.dispatchEvent({name:"SDP",origin:"negotiationneeded",description:"negotiationneeded"}),void 0===this.impl)throw new Error("PeerConnection is not configured");if("disconnected"===this.impl.connectionState||"failed"===this.impl.connectionState)throw this.logger.info("Renegotiation requested on closed PeerConnection"),new Error("Renegotiation requested on closed PeerConnection");if(null!==this.impl.localDescription){if("connected"!==this.impl.iceConnectionState&&"completed"!==this.impl.iceConnectionState)return this.logger.info("Renegotiation requested while ice state is "+this.impl.iceConnectionState+". Postponing"),void setTimeout(this.onRenegotiation,100);if(this.renegotiationInProgress)return this.logger.info("Renegotiation in progress. Queueing"),N.alreadyInProgress;this.logger.info("Renegotiation started"),await this._runReinvite()}else this.logger.info("Renegotiation needed, but no local SDP. Skipping")}getReceiveOptions(){return{offerToReceiveAudio:!this.onHold,offerToReceiveVideo:!this.onHold,voiceActivityDetection:!0}}onICECandidate(e){e&&""!==e.candidate?this.addCandidateToSend("a="+e.candidate,e.sdpMLineIndex):this.logger.info("End of candidates")}onAddTrack(e){if(this._call){const t=d.CallManager.get().getEndpointManager(this._call);if(!t)return void this.logger.warning(`Endpoint manager not found for call ${this._call.id()}. Skipping track addition.`);this._call.settings.isConference||"inactive"!==e.transceiver.direction||(e.transceiver.direction="recvonly"),this.updateTransceiver(t,e.transceiver)}}_runReinvite(e=!1){return new Promise(((t,n)=>{if(!1===this.renegotiationInProgress){this.renegotiationInProgress=!0;let i={};!a.default.isIphone()&&(this._call.settings.isConference||this.impl.getTransceivers&&"firefox"===a.default.getWSVendor())||(i=this.getReceiveOptions()),e&&this.impl.restartIce(),this.logger.trace(JSON.stringify(i)),this.updateHoldState(),this.resetEncodings().then((()=>this.impl.createOffer(i))).then((e=>(this.logger.info(`_runReinvite(), created local SDP: \n${e.sdp}`),this.codecRearrange(e)))).then((e=>{let t={type:e.type,sdp:e.sdp};return t=s.PCFactory.get().addBandwidthParams(t),t=h.SDPMuggle.removeTelephoneEvents(t),t=h.SDPMuggle.removeDoubleOpus(t),t=h.SDPMuggle.removeDoublePT(t),t=h.SDPMuggle.trimMediaAttr(t),t=h.SDPMuggle.removeDoubleCodecsInactiveSections(t),t=this._reduceCodecs(t),t})).then((t=>(this.srcLocalSDP=t.sdp,this.impl.setLocalDescription(t).then((()=>{this.logger.info(`_handleReinvite(), set remote SDP: \n${t.sdp}`),this._call&&this._call.dispatchEvent({name:"SDP",origin:"handleReinviteInProgress",sdp:t.sdp});let n={mids:this.getMidKinds(),iceRestart:e};_.default.callRemoteFunction(l.RemoteFunction.reInvite,this._call.id(),{},t.sdp,n)}))))).then(t).catch((e=>{if(this._call){const t=`offer_reject: Error when renegotiation start ${e.message}`;this._call.dispatchEvent({name:"SDP",origin:"_runReinvite",sdp:this.impl.localDescription,description:t}),M.CallPromiseResolver.reject(this._call,t)}this.renegotiationInProgress=!1,this.logger.error("Error when renegotiation start "+e.message),n(e)}))}else{const e="Another renegotiation in progress";M.CallPromiseResolver.reject(this._call,e),this.logger.error(e),n(new Error(e))}}))}codecRearrange(e){return new Promise(((t,n)=>{let i=d.CallManager.get().calls[this.id];if(void 0!==i){let r=new g.CodecSorter(e.sdp),a=r.getUserCodecList();void 0!==i.rearangeCodecs?i.rearangeCodecs(a,i.settings.incoming).then((n=>{r.setUserCodecList(n),t({type:e.type,sdp:r.getSDP()})}),(e=>{this.logger.error(JSON.stringify(e)),this._call&&this._call.dispatchEvent({name:"SDP",origin:"codecRearrange",sdp:this.impl.localDescription,description:`reject: ${e.message}`}),n(e)})):(r.setUserCodecList(a),this.logger.info("No sdp codecs transformer registered"),t({type:e.type,sdp:r.getSDP()}))}else t(e)}))}__replaceTrack(e,t){return new Promise(((n,i)=>{const r=e.sender.track;a.default.isIpad()&&!t?(this.impl.removeTrack(e.sender),n()):e.sender.replaceTrack(t).then((()=>{!r||t&&r.id===t.id||a.default.isIphone()||a.default.isIpad()||(this.logger.info(`Not iOS specific - stop old track after replace track for ${e.mid}`),r.enabled=!1,r.onended=null,r.onmute=null,r.stop()),n()})).catch((t=>{this.logger.warning(`The attempt to replace track for ${e.mid} failed`),i()}))}))}_setEncodingsParams(e,t){if(this.isSimulcast()){let n=e.sender.getParameters();n&&n.encodings&&n.encodings.length>1?(this.logger.info(`Set new encoding params. Current sender params ${JSON.stringify(n)}`),n.encodings.forEach((e=>{let n=t.find((t=>t.rid===e.rid));n?.maxBitrate&&(e.maxBitrate=n.maxBitrate),n?.maxFramerate&&(e.maxFramerate=n.maxFramerate),n?.scaleResolutionDownBy&&(e.scaleResolutionDownBy=n.scaleResolutionDownBy)}))):this.logger.warning(`Cant set layer params for simulcast. Current sender params ${JSON.stringify(n)}`),e.sender.setParameters(n)}else{let n=e.sender.getParameters();n&&n.encodings&&n.encodings[0]&&t[0]&&(t[0].maxBitrate&&(n.encodings[0].maxBitrate=t[0].maxBitrate),t[0].maxFramerate&&(n.encodings[0].maxFramerate=t[0].maxFramerate),t[0].scaleResolutionDownBy&&(n.encodings[0].scaleResolutionDownBy=t[0].scaleResolutionDownBy)),e.sender.setParameters(n)}}_getDefaultDirection(){return this._call&&this._call.settings.isConference&&this._call.settings.simulcast?"sendonly":"sendrecv"}_addVideoTransceiver(e,t,n){return new Promise(((i,r)=>{this.logger.info(`Call _addVideoTransceiver for ${t.id}, type ${n}`);const a=d.CallManager.get().getEndpointManager(this._call);if(!a)return void this.logger.warning(`Endpoint manager not found for call ${this._call.id()}. Skipping add custom video transceiver.`);const s={direction:this._getDefaultDirection(),streams:[t]};let o=this.getEmptyTransceiverForKind("video");const c=e.getSettings();if(o){if(this.logger.info("Manage encodings for existing transceiver"),"inactive"!==o.direction&&"recvonly"!==o.direction||(o.direction=this._getDefaultDirection()),this.isSimulcast()){this.logger.info("Manage simulcast layers");const e=v.Utils.buildSimulcastLayers({trackSettings:c,trackType:n,profileName:this._call?.settings.simulcastProfileName});this.logger.info(`Got simulcast layers: ${JSON.stringify(e)}`),this._setEncodingsParams(o,e)}this.onHold&&(o.direction="sendonly"),this.__replaceTrack(o,e).then((()=>(this.logger.info(`Replaced video track for transceiver ${o.mid}`),this.updateTransceiver(a,o),this.onRenegotiation()))).then(i).catch((e=>{this.logger.info(`Failed to replace tracks ${JSON.stringify(e)}`),r(e)}))}else{if(this.isSimulcast())this.logger.info("Manage simulcast layers without existing transceiver"),s.sendEncodings=v.Utils.buildSimulcastLayers({trackSettings:c,trackType:n,profileName:this._call?.settings.simulcastProfileName});else{const t=e.getSettings();s.sendEncodings=v.Utils.buildNotSimulcastLayers({trackSettings:t,trackType:n}),this.logger.info(`New encodings params have been applied for ${n} track: ${JSON.stringify(s.sendEncodings)}`)}o=this.impl.addTransceiver(e,s),this.logger.info(`New transceiver added with settings ${JSON.stringify(s)}`),this.updateTransceiver(a,o),this.onRenegotiation().then(i).catch(r)}}))}_reduceCodecs(e){const t=[{name:"H264",params:{"profile-level-id":"42e0"}},{name:"VP8"},{name:"red",optional:!0},{name:"ulpfec",optional:!0}],n=[{name:"telephone-event/8000"},{name:"opus"}],i=p.Client.getInstance().limitVCodecs||t,r=p.Client.getInstance().limitACodecs||n;if(p.Client.getInstance().limitVCodecs||p.Client.getInstance().limitACodecs){const t=h.SDPMuggle.reduceCodecs(e,{video:i,audio:r}).sdp;return this.logger.info(`_reduceCodecs(), SDP after codec has been reduced: \n${t.sdp}`),t}if(!this._call.settings.isConference)return e;const a=h.SDPMuggle.reduceCodecs(e,{audio:n,video:t}).sdp;return this.logger.info(`_reduceCodecs(), SDP after codec has been reduced: \n${a.sdp}`),a}isSimulcast(){return this._call&&!a.default.isIphone()&&this._call.settings.isConference&&this._call.settings.simulcast}updateSenderTrackTransformers(){const e=p.Client.getInstance();if(!this._call)return;let t=[];t=C.default.StreamManager.get()._getScreenSharing(this._call)||[];const n=[];t.forEach((e=>e.stream.getTracks().forEach((e=>n.push(e.id))))),this.impl.getTransceivers().forEach((async t=>{let i=Boolean(!t.sender?.track);const r=Date.now();for(;i;)await new Promise((e=>setTimeout(e,10))),t.sender?.track&&(i=!1),Date.now()-r>=2e3&&(i=!1);if(t.sender?.track&&!n.includes(t.sender.track.id)){let n;const i=t.sender.track;if("audio"===i.kind&&"function"==typeof e.audioMediaTrackTransform?n=await e.audioMediaTrackTransform(i):"video"===i.kind&&"function"==typeof e.videoMediaTrackTransform&&(n=await e.videoMediaTrackTransform(i)),n&&(Object.defineProperty(n,"label",{get:()=>i.label,configurable:!0,enumerable:!0}),T.get(t)||T.set(t,i),await t.sender.replaceTrack(n),C.default.StreamManager.get().updateLocalVideo()),!n){const e=T.get(t),n=t.sender.track;e&&n!==e&&(await t.sender.replaceTrack(e),T.delete(t),n.stop(),C.default.StreamManager.get().isLocalVideoRequested&&"video"===e.kind&&C.default.StreamManager.get().updateLocalVideo(f.MediaRendererKind.Video))}}}))}manageLayers(e){const t=this.impl.getTransceivers().filter((e=>-1!==e.currentDirection.indexOf("send"))).filter((e=>"video"===e.sender.track.kind));t.length&&this.isSimulcast()&&t.forEach((t=>{const n=t.sender.getParameters();n&&n.encodings&&n.encodings.length>1&&(n.encodings=n.encodings.map((t=>(t.rid&&t.maxBitrate&&(t.active=e.includes(t.rid)),t))));try{t.sender.setParameters(n)}catch(e){this.logger.error("Cannot update simulcast parameters")}}))}async resetEncodings(){const e=this.impl.getTransceivers();for(let t of e)if(!isNaN(Number(t.mid))&&"audio"!==t.receiver.track?.kind&&"inactive"!==t.direction&&"stopped"!==t.direction&&!t.stopped&&(this.logger.info(`Reset simulcast layers for mid=${t.mid}`),"null"!==t.mid)){const e=t.sender.getParameters();e&&e.encodings&&(e.encodings=e.encodings.map((e=>(e.active=!0,e))),await t.sender.setParameters(e))}}stopInactiveTransceiver(e){"inactive"!==e.currentDirection||this._call.settings.isConference||(e.stop(),this.logger.info(`Transceiver ${e.mid} has been stopped.`))}addStreamToCache(e){this.streamCache.push(e)}cleanStreamCache(){this.streamCache=[]}stopStreamsFromCache(){this.streamCache.forEach((e=>{C.default.StreamManager.get()._remCallStream(e)})),this.cleanStreamCache()}}i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_getLocalOfferRegular",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"updateHoldState",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_processRemoteAnswer",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_getLocalOffer",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_getLocalOfferFF",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_getLocalAnswer",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_setRemoteDescription",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_handleReinvite",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_close",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_addRemoteCandidate",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"setConfiguration",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_sendDTMF",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_hdnFRSPrep",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_hdnFRS",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"hasLocalAudio",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"enableVideo",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"replaceVideoOrSharingConferenceSimulcast",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"revertEnablingVideo",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_replaceSharingToVideo",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_addCustomMedia",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_removeCustomMedia",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_updateCustomMedia",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_fixFFSoundBug",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"getConfiguration",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_hold",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_createImpl",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"onConnectionStateChange",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"onIceGatheringStateChange",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"onSignalingStateChange",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"onIceConnectionChange",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"onRenegotiation",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"getReceiveOptions",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"onICECandidate",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"onAddTrack",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"codecRearrange",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_setEncodingsParams",null),i([o.LogManager.d_trace(o.LogCategory.RTC)],b.prototype,"_reduceCodecs",null),t.TransreceiverPC=b},2275:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfSignaling=t.ConfSignalingState=void 0;const r=n(2282),a=n(8597),s=n(1901),o=n(1150),c=n(5764),d=n(621),l=n(3406);var g;!function(e){e[e.CONNECTING=0]="CONNECTING",e[e.CONNECTED=1]="CONNECTED",e[e.CLOSED=2]="CLOSED"}(g=t.ConfSignalingState||(t.ConfSignalingState={}));class u{constructor(e){this.reconnectionAttempts=10,this.messageQueue=[],this.call=e,this.logger=o.LogManager.get().createLogger(o.LogCategory.SIGNALING,this._traceName()),this.currentState=g.CONNECTING,this.setWatchers()}_traceName(){return"ConfSignaling"}connect(e,t){this.rand=t,this.connectTo(e)}disconnect(){this.logger.info("Disconnecting"),this.currentState!==g.CLOSED?this.ws?this.ws.close():this.logger.warning("WebSocket was not initialized"):this.logger.warning("Already closed")}connectTo(e){this.lastWSUrl=e,this.ws=new WebSocket(e),this.ws.onopen=e=>this.onWSConnected(),this.ws.onclose=e=>this.onWSClosed(e),this.ws.onerror=e=>this.onWSError(e),this.ws.onmessage=e=>this.onWSData(e.data)}onWSConnected(){this.connectingTimer=setTimeout((()=>{this.ws.close()}),4e3),this.ws.send(this.rand)}onWSClosed(e){this.ws&&(this.ws.close(),this.ws=void 0),this.currentState=g.CLOSED,e.wasClean||this.reconnect()}reconnect(){this.reconnectionAttempts>0&&(this.reconnectionAttempts--,this.connectTo(this.lastWSUrl))}onWSError(e){this.ws.close(),this.ws=void 0,this.currentState=g.CLOSED,this.logger.warning("Error in onConfSignalingConnectionFailed callback: "+e)}parseMessage(e){try{const t=JSON.parse(e);return(0,l.isIgnoredConferenceSignallingIncomingMessage)(t)||(0,d.isIgnoredIncomingConferenceProtocolEvent)(t)?null:t.name?(this.currentState===g.CONNECTED||(0,d.isHelloIncomingEventConferenceProtocolEvent)(t)||this.logger?.warning(`Received message before "hello": ${e}`),t):(this.logger?.error(`Invalid message. "name" field expected. ${e}`),null)}catch(t){return this.logger.warning(`Couldn't parse data: ${e}`),null}}onWSData(e){let t=this.parseMessage(e);t&&((0,d.isInternalConferenceProtocolEvent)(t)?this.handleInternalEvent(t):(0,d.isValidIncomingConferenceProtocolEvent)(t)&&u.handleEvent(t,{call:this.call,logger:this.logger}))}handleInternalEvent(e){if(e.name===c.InternalConferenceProtocolEventName.Hello)clearInterval(this.connectingTimer),this.reconnectionAttempts=10,this.currentState=g.CONNECTED,this.retransmitQueuedMessages()}setWatchers(){this.call.sysOn(r.CallEvents.Connected,(e=>{this.call.sendMessage("vi/upgrade")})),this.call.sysOn(r.CallEvents.Disconnected,(e=>{this.disconnect()})),this.call.sysOn(r.CallEvents.Failed,(e=>{this.disconnect()}))}send(e){if(this.currentState!==g.CONNECTED)return this.logger?.warning(`Not ready. Send message will be delayed until signalling is connected. ${JSON.stringify(e)}`),void this.messageQueue.push(e);this.ws.send(JSON.stringify(e))}async retransmitQueuedMessages(){for(;this.messageQueue.length;){const e=this.messageQueue.shift();if(!e)return;const t=JSON.stringify(e);this.logger?.info(`Send queued message: ${t}`),this.ws?.send(t)}}static handleEvent(e,t){const{call:n,logger:i}=t;switch(e.name){case c.IncomingConferenceProtocolEventName.Vad:n.getEndpoints().forEach((t=>{t.id===e.endpoint&&t.dispatchEvent({name:e.enabled?a.EndpointEvents.VoiceStart:a.EndpointEvents.VoiceEnd,call:this.call,endpoint:t})}));break;case c.IncomingConferenceProtocolEventName.EndpointStreamsUpdated:i.info(`Received endpointStreamsUpdated event with payload ${JSON.stringify(e.payload)}`),e.payload&&s.EndpointStreamsUpdatedHandler.getInstanceBy(n)?.handle(e.payload);break;case c.IncomingOutgoingConferenceProtocolEventName.Message:n.dispatchEvent({name:r.CallEvents.MessageReceived,call:this.call,text:e.payload});break;default:i.info(`Unknown command: ${e.name}`)}}}i([o.LogManager.d_trace(o.LogCategory.SIGNALING)],u.prototype,"connect",null),i([o.LogManager.d_trace(o.LogCategory.SIGNALING)],u.prototype,"disconnect",null),i([o.LogManager.d_trace(o.LogCategory.SIGNALING)],u.prototype,"connectTo",null),i([o.LogManager.d_trace(o.LogCategory.SIGNALING)],u.prototype,"onWSConnected",null),i([o.LogManager.d_trace(o.LogCategory.SIGNALING)],u.prototype,"onWSClosed",null),i([o.LogManager.d_trace(o.LogCategory.SIGNALING)],u.prototype,"reconnect",null),i([o.LogManager.d_trace(o.LogCategory.SIGNALING)],u.prototype,"onWSError",null),i([o.LogManager.d_trace(o.LogCategory.SIGNALING)],u.prototype,"parseMessage",null),i([o.LogManager.d_trace(o.LogCategory.SIGNALING)],u.prototype,"onWSData",null),i([o.LogManager.d_trace(o.LogCategory.SIGNALING)],u.prototype,"handleInternalEvent",null),i([o.LogManager.d_trace(o.LogCategory.SIGNALING)],u.prototype,"retransmitQueuedMessages",null),i([o.LogManager.d_trace(o.LogCategory.SIGNALING)],u,"handleEvent",null),t.ConfSignaling=u},3406:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isIgnoredConferenceSignallingIncomingMessage=void 0,t.isIgnoredConferenceSignallingIncomingMessage=function(e){return"event"in e&&"id"===e.event&&"string"==typeof e.id}},5764:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.IncomingOutgoingConferenceProtocolEventName=t.OutgoingConferenceProtocolEventName=t.IncomingConferenceProtocolEventName=t.IgnoredIncomingConferenceProtocolEventName=t.InternalConferenceProtocolEventName=void 0,function(e){e.Hello="hello"}(t.InternalConferenceProtocolEventName||(t.InternalConferenceProtocolEventName={})),function(e){e.RequestLayers="requestLayers",e.ManageEndpoints="manageEndpoints",e.RequestVideoSize="requestVideoSize"}(t.IgnoredIncomingConferenceProtocolEventName||(t.IgnoredIncomingConferenceProtocolEventName={})),function(e){e.Vad="vad",e.ResponseEndpointsState="responseEndpointsState",e.EndpointStreamsUpdated="endpointStreamsUpdated"}(t.IncomingConferenceProtocolEventName||(t.IncomingConferenceProtocolEventName={})),function(e){e.RequestEndpointsState="requestEndpointsState",e.ManageEndpoints="manageEndpoints",e.RequestVideoSize="requestVideoSize",e.RequestLayers="requestLayers"}(t.OutgoingConferenceProtocolEventName||(t.OutgoingConferenceProtocolEventName={})),function(e){e.Mute="mute",e.Message="message"}(t.IncomingOutgoingConferenceProtocolEventName||(t.IncomingOutgoingConferenceProtocolEventName={}))},621:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isHelloIncomingEventConferenceProtocolEvent=t.isIgnoredIncomingConferenceProtocolEvent=t.isInternalConferenceProtocolEvent=t.isValidIncomingConferenceProtocolEvent=t.isAnyIncomingConferenceProtocolEvent=void 0;const i=n(5764);t.isAnyIncomingConferenceProtocolEvent=e=>(0,t.isValidIncomingConferenceProtocolEvent)(e)||(0,t.isIgnoredIncomingConferenceProtocolEvent)(e)||(0,t.isInternalConferenceProtocolEvent)(e);t.isValidIncomingConferenceProtocolEvent=e=>{if(!("name"in e))return!1;const{name:t}=e,n=Object.values(i.IncomingConferenceProtocolEventName),r=Object.values(i.IncomingOutgoingConferenceProtocolEventName);return n.includes(t)||r.includes(t)};t.isInternalConferenceProtocolEvent=e=>Object.values(i.InternalConferenceProtocolEventName).includes(e.name);t.isIgnoredIncomingConferenceProtocolEvent=e=>Object.values(i.IgnoredIncomingConferenceProtocolEventName).includes(e.name);t.isHelloIncomingEventConferenceProtocolEvent=e=>(0,t.isInternalConferenceProtocolEvent)(e)&&e.name===i.InternalConferenceProtocolEventName.Hello},8343:function(e,t,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,i,r)}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||i(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),r(n(2275),t),r(n(3406),t),r(n(5764),t),r(n(621),t)},8202:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MsgAction=void 0,function(e){e.UNKNOWN="UNKNOWN",e.createConversation="createConversation",e.editConversation="editConversation",e.removeConversation="removeConversation",e.joinConversation="joinConversation",e.leaveConversation="leaveConversation",e.getConversation="getConversation",e.getConversations="getConversations",e.getPublicConversations="getPublicConversations",e.searchConversations="searchConversations",e.removeEmptyConversation="removeEmptyConversation",e.addParticipants="addParticipants",e.editParticipants="editParticipants",e.removeParticipants="removeParticipants",e.getUser="getUser",e.getUsers="getUsers",e.editUser="editUser",e.setStatus="setStatus",e.sendMessage="sendMessage",e.editMessage="editMessage",e.removeMessage="removeMessage",e.typingMessage="typingMessage",e.isRead="isRead",e.subscribe="subscribe",e.unsubscribe="unsubscribe",e.manageNotification="manageNotification",e.getSubscriptionList="getSubscriptionList",e.createBot="createBot",e.removeBot="removeBot",e.retransmitEvents="retransmitEvents"}(t.MsgAction||(t.MsgAction={}))},249:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MsgEvent=void 0,function(e){e.onError="onError",e.onCreateConversation="onCreateConversation",e.onEditConversation="onEditConversation",e.onRemoveConversation="onRemoveConversation",e.onGetConversation="onGetConversation",e.onGetPublicConversations="onGetPublicConversations",e.onGetUser="onGetUser",e.onEditUser="onEditUser",e.onSetStatus="onSetStatus",e.onSendMessage="onSendMessage",e.onEditMessage="onEditMessage",e.onRemoveMessage="onRemoveMessage",e.isRead="isRead",e.onTyping="onTyping",e.onSubscribe="onSubscribe",e.onUnsubscribe="onUnsubscribe",e.onGetSubscriptionList="onGetSubscriptionList",e.onCreateBot="onCreateBot",e.onRemoveBot="onRemoveBot",e.onRetransmitEvents="onRetransmitEvents"}(t.MsgEvent||(t.MsgEvent={}))},7050:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.MsgSignaling=void 0;const r=n(1150),a=n(249),s=n(3576),o=n(6968),c=n(209),d=n(245);class l extends s.EventTarget{constructor(){if(super(),l.instance)throw new Error("Error - use Client.getMessagingInstance()");this.query=[],setInterval((()=>{this.updateQuery()}),220)}static get(){return l.instance=l.instance||new l,l.instance}capitalize(e){return e.toString()[0].toUpperCase()+e.toString().slice(1)}updateQuery(){if(this.query.length){const e=this.query.splice(0,1);d.default.sendRaw(e[0])}}addEventListener(e,t,n){super.addEventListener(e,t,n)}dispatchMsgEvent(e,t){if(this.eventListeners?.[e]){const n=this.eventListeners[e];for(let e of n)e.listener?.(t?.payload,t?.request_uuid)}}handleWsData(e){if(-1==Object.values(a.MsgEvent).indexOf(e.event))throw new Error("Unknown messaging event "+e.event+" with payload "+JSON.stringify(e.payload));this.dispatchMsgEvent(e.event,e)}sendWsMessage(e,t){const n=["subscribe","unsubscribe","typingMessage","isRead","setStatus"].includes(e)?"CommonNamespace":"IncomingNamespace",i=(new c.default).toString(),r={service:o.MsgService.Chat,event:e,payload:Object.assign(t,{"@type":`type/vox.store.${n}.${{setStatus:"PresenceMessage",isRead:"StatusMessage",typingMessage:"TypingMessage",subscribe:"ManageSubscribes",unsubscribe:"ManageSubscribes",addParticipants:"ManageParticipants",editParticipants:"ManageParticipants",manageNotification:"ManageNotifications",getPublicConversations:"GetConversations",retransmitEvents:"RetransmitRequest"}[e]||this.capitalize(e)}`}),request_uuid:i};return this.query.push(r),i}_traceName(){return"MsgSignaling"}}i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],l.prototype,"handleWsData",null),i([r.LogManager.d_trace(r.LogCategory.MESSAGING)],l.prototype,"sendWsMessage",null),t.MsgSignaling=l},575:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RemoteEvent=void 0,function(e){e[e.loginFailed="loginFailed"]="loginFailed",e[e.loginSuccessful="loginSuccessful"]="loginSuccessful",e[e.handleError="handleError"]="handleError",e[e.onPCStats="__onPCStats"]="onPCStats",e[e.handleIncomingConnection="handleIncomingConnection"]="handleIncomingConnection",e[e.handleConnectionConnected="handleConnectionConnected"]="handleConnectionConnected",e[e.handleConnectionDisconnected="handleConnectionDisconnected"]="handleConnectionDisconnected",e[e.handleRingOut="handleRingOut"]="handleRingOut",e[e.startEarlyMedia="startEarlyMedia"]="startEarlyMedia",e[e.stopRinging="stopRinging"]="stopRinging",e[e.handleConnectionFailed="handleConnectionFailed"]="handleConnectionFailed",e[e.handleSIPInfo="handleSIPInfo"]="handleSIPInfo",e[e.handleSipEvent="handleSipEvent"]="handleSipEvent",e[e.handleTransferStarted="handleTransferStarted"]="handleTransferStarted",e[e.handleTransferComplete="handleTransferComplete"]="handleTransferComplete",e[e.handleTransferFailed="handleTransferFailed"]="handleTransferFailed",e[e.handleReInvite="handleReInvite"]="handleReInvite",e[e.handleAcceptReinvite="handleAcceptReinvite"]="handleAcceptReinvite",e[e.handleRejectReinvite="handleRejectReinvite"]="handleRejectReinvite",e[e.createPC="__createPC"]="createPC",e[e.destroyPC="__destroyPC"]="destroyPC",e[e.connectionSuccessful="__connectionSuccessful"]="connectionSuccessful",e[e.connectionFailed="__connectionFailed"]="connectionFailed",e[e.createConnection="__createConnection"]="createConnection",e[e.pong="__pong"]="pong",e[e.increaseGain="increaseGain"]="increaseGain",e[e.handlePreFlightCheckResult="handlePreFlightCheckResult"]="handlePreFlightCheckResult",e[e.handleVoicemail="handleVoicemail"]="handleVoicemail",e[e.onCallRemoteFunctionError="onCallRemoteFunctionError"]="onCallRemoteFunctionError",e[e.refreshOauthTokenFailed="refreshOauthTokenFailed"]="refreshOauthTokenFailed",e[e.refreshOauthTokenSuccessful="refreshOauthTokenSuccessful"]="refreshOauthTokenSuccessful",e[e.registerPushTokenResult="registerPushTokenResult"]="registerPushTokenResult",e[e.unregisterPushTokenResult="unregisterPushTokenResult"]="unregisterPushTokenResult",e[e.sipRegisterSuccessful="sipRegisterSuccessful"]="sipRegisterSuccessful",e[e.sipRegisterFailed="sipRegisterFailed"]="sipRegisterFailed",e[e.onACDStatus="onACDStatus"]="onACDStatus",e[e.SQMessagingStatusUpdated="SQMessagingStatusUpdated"]="SQMessagingStatusUpdated",e[e.onSQStatusError="onSQStatusError"]="onSQStatusError",e[e.onICEConfig="onICEConfig"]="onICEConfig",e[e.onICEConfigFailed="onICEConfigFailed"]="onICEConfigFailed"}(t.RemoteEvent||(t.RemoteEvent={}))},4106:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RemoteFunction=void 0,function(e){e[e.ping="__ping"]="ping",e[e.login="login"]="login",e[e.loginGenerateOneTimeKey="loginGenerateOneTimeKey"]="loginGenerateOneTimeKey",e[e.loginStage2="loginStage2"]="loginStage2",e[e.setOperatorACDStatus="setOperatorACDStatus"]="setOperatorACDStatus",e[e.getOperatorACDStatus="getOperatorACDStatus"]="getOperatorACDStatus",e[e.setOperatorMessagingStatus="setOperatorMessagingStatus"]="setOperatorMessagingStatus",e[e.getOperatorMessagingStatus="getOperatorMessagingStatus"]="getOperatorMessagingStatus",e[e.setDesiredVideoBandwidth="setDesiredVideoBandwidth"]="setDesiredVideoBandwidth",e[e.rejectCall="rejectCall"]="rejectCall",e[e.disconnectCall="disconnectCall"]="disconnectCall",e[e.sendDTMF="sendDTMF"]="sendDTMF",e[e.sendSIPInfo="sendSIPInfo"]="sendSIPInfo",e[e.hold="hold"]="hold",e[e.unhold="unhold"]="unhold",e[e.acceptCall="acceptCall"]="acceptCall",e[e.createCall="createCall"]="createCall",e[e.callConference="callConference"]="callConference",e[e.transferCall="transferCall"]="transferCall",e[e.muteLocal="__muteLocal"]="muteLocal",e[e.reInvite="ReInvite"]="reInvite",e[e.acceptReInvite="AcceptReInvite"]="acceptReInvite",e[e.rejectReInvite="RejectReInvite"]="rejectReInvite",e[e.confirmPC="__confirmPC"]="confirmPC",e[e.addCandidate="__addCandidate"]="addCandidate",e[e.loginUsingOneTimeKey="loginUsingOneTimeKey"]="loginUsingOneTimeKey",e[e.refreshOauthToken="refreshOauthToken"]="refreshOauthToken",e[e.confirmIncomingConnection="confirmIncomingConnection"]="confirmIncomingConnection",e[e.zPromptFinished="promptFinished"]="zPromptFinished",e[e.zStartPreFlightCheck="__startPreFlightCheck"]="zStartPreFlightCheck",e[e.registerPushToken="registerPushToken"]="registerPushToken",e[e.unregisterPushToken="unregisterPushToken"]="unregisterPushToken",e[e.pushFeedback="pushFeedback"]="pushFeedback",e[e.refreshIceConfig="refreshIceConfig"]="refreshIceConfig"}(t.RemoteFunction||(t.RemoteFunction={}))},245:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.currentConnection=t.VoxSignalingState=void 0;const i=n(2262),r=n(7050),a=n(3576),s=n(125),o=n(141),c=n(308),d=n(1783),l=n(5826),g=n(1150),u=g.LogManager.get().createLogger(g.LogCategory.SIGNALING,"SIG2"),h=[];let p=null;t.currentConnection=p;class f extends a.EventTarget{}const m=new f;let C;function v(e,t){1===e&&2===t&&h.forEach((e=>e.onSignalingConnected())),3===t&&(s.Client.getInstance().dispatchEvent({name:o.Events.ConnectionFailed}),h.forEach((e=>e.onSignalingConnectionFailed("")))),4===t&&s.Client.getInstance().dispatchEvent({name:o.Events.Reconnecting}),4===e&&2===t&&(s.Client.getInstance().dispatchEvent({name:o.Events.Reconnected}),c.CallManager.get().icerestart()),5===t&&h.forEach((e=>e.onSignalingClosed()))}function _(e){e.service?r.MsgSignaling.get().handleWsData(e):m.eventListeners[e.name]&&m.eventListeners[e.name].forEach((t=>t.listener.apply(null,e.params)))}const E={setRPCHandler:function(e,t){m.addEventListener(e,t)},removeRPCHandler:function(e,t){m.removeEventListener(e,t)},callRemoteFunction:function(e,...t){return p.send({name:e,params:t}),!0},addHandler:function(e){h.push(e)},onConnectionFailedRPC:function(){},currentState:function(){if(!p)return S.IDLE;switch(p.state){case 0:case 3:case 5:default:return S.IDLE;case 1:return S.CONNECTING;case 2:return S.CONNECTED;case 4:return S.RECONNECTING}},disconnect:async function(){p&&(await p.clear(),t.currentConnection=p=null)},connect:function(e,n,r){if(p&&p.state!==d.VIConnectionState.closed&&p.state!==d.VIConnectionState.failed)u.info("Already connected, skip new connection call");else{const{resolve:a,promise:s}=(0,l.promiseWithResolvers)();C=s,t.currentConnection=p=new i.Connection(e,2,Array.isArray(n)?n:[n],r),p.outerMessageHandler=_,p.outerStateHandler=v,p.connect().then((async()=>{p?.state===d.VIConnectionState.connected?a(!0):(await(p?.clear()),t.currentConnection=p=null,a(!1))})).catch((async e=>{await(p?.clear()),t.currentConnection=p=null,a(!1)}))}return C},sendRaw:function(e){return p.send(e)}};var S;!function(e){e[e.IDLE=0]="IDLE",e[e.CONNECTING=1]="CONNECTING",e[e.WSCONNECTED=2]="WSCONNECTED",e[e.CONNECTED=3]="CONNECTED",e[e.CLOSING=4]="CLOSING",e[e.RECONNECTING=5]="RECONNECTING"}(S=t.VoxSignalingState||(t.VoxSignalingState={})),t.default=E},2262:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.Connection=void 0;const r=n(125),a=n(1150),s=n(7998),o=n(2957),c=n(575),d=n(4106),l=n(5604),g=n(1783),u=n(3658),h=n(2071),p=n(6466),f=n(9367),m=n(4234),C=n(5383),v=n(1666),_=[d.RemoteFunction.ping,c.RemoteEvent.pong],E=["ack"];class S{constructor(e,t,n,i){this.logger=a.LogManager.get().createLogger(0,"SIG2"),this.unacknowledgedMessageCounter=0,this.messageCanBeSendResolver=null,this.state=g.VIConnectionState.disconnected,this.ackResolvers=new Map,this.selectBalancerUrlByNode=e=>{const t="https://balancer.voximplant.com/getNearestHost";if(!e)return t;return[s.ConnectionNode.NODE_3,s.ConnectionNode.NODE_4,s.ConnectionNode.NODE_5,s.ConnectionNode.NODE_11].includes(e)?"https://balancer.root.voximplant.ru/getNearestHost":t},this.messageHandler=async(e,t)=>{try{const n=o.Utils.JSONparse(e);if(!("msg"===n.type&&_.includes(n.payload.name)||E.includes(n.type))){const e=(0,p.sanitizeIncomingSignalingMessage)(n);this.logger.info((0,m.t)("INFO_CONN_MESSAGE",t.uuid,JSON.stringify(e)))}if(!n.type)return void this.logger.error((0,m.t)("ERR_CONN_MESSAGE_FORMAT_TYPE","type"));switch(n.type){case"close":this.validateSeq(n.seq,t)&&await this.processClose(n);break;case"ack":await this.processAck(n);break;case"error":this.awaitingTransportHandler&&(this.destroyTransportSilent(this.awaitingTransportHandler.transport),this.awaitingTransportHandler.resolve(l.CONNECTION_CODE.SERVER_ERROR),this.awaitingTransportHandler=null);break;case"id":await this.setConnectionId(n),await this.sendData({type:"lastrx",seq:this.remoteClock});break;case"lastrx":await this.processLastRtx(n);break;case"msg":this.validateSeq(n.seq,t)&&await this.processMsg(n);break;default:this.logger.error((0,m.t)("ERR_CONN_MESSAGE_FORMAT_TYPE","type"))}}catch(e){const t=e instanceof Error?e.message:String(e);this.logger.error(`[connectionId=${this.connectionId}] ${(0,m.t)("ERR_CONN_MESSAGE_PARSING_ERR")}: ${t}`),console.error(e)}},this.onTransportClose=async(e,t)=>{if([v.TransportCloseCodes.CLIENT_ERROR].includes(Number(t.code))||this.logger.info((0,m.t)("INFO_CONN_TRANSPORT_CLOSED",e.uuid,t.reason,t.code.toString())),e.onClose=null,e.messageHandler=null,!this.transportList.has(e))return;const n=Array.from(this.transportList).some((e=>e.state===g.VIConnectionState.connecting||e.state===g.VIConnectionState.disconnected));this.transportList.delete(e),n||(this.connectionId?(this.logger.info((0,m.t)("INFO_CONN_RECONNECT_POSSIBLE")),this.state===g.VIConnectionState.connected?(this.logger.info((0,m.t)("INFO_CONN_RECONNECT_NEEDED")),this.setState(g.VIConnectionState.reconnecting),await this.reconnect()?this.setState(g.VIConnectionState.connected):this.setState(g.VIConnectionState.closed)):this.logger.info((0,m.t)("INFO_CONN_RECONNECT_SKIP",String(this.state)))):this.setState(g.VIConnectionState.failed))},this.closeWasSent=!1,this.config={balancerUrl:this.selectBalancerUrlByNode(i),acdVersion:e,imVersion:t,servers:Array.from(n).flat(10).filter((e=>e)).map((e=>String(e).trim()))},this.connectedMessageReceived=new Promise((e=>{this.connectedMessageResolver=e}))}validateSeq(e,t){return e===this.remoteClock+1||(this.logger.warning((0,m.t)("INFO_CONN_BALANCER",e.toString(),this.remoteClock.toString(),t.uuid)),t.destroy(v.TransportCloseCodes.WRONG_SEQ,"Wrong seq"),!1)}async setConnectionId(e){this.logger.info((0,m.t)("INFO_CONN_CONNECTION_ID_SET",e.id)),this.connectionId=e.id,this.awaitingTransportHandler&&(this.awaitingTransportHandler.resolve(l.CONNECTION_CODE.CONNECTED),this.awaitingTransportHandler=null)}async waitForAck(e){return Promise.race([new Promise((t=>{this.ackResolvers.set(e,(()=>t(!0)))})),new Promise((t=>{setTimeout((()=>{this.ackResolvers.delete(e),t(!1)}),6e3)}))])}async processAck(e){const t=Array.from(this.messagePool.keys()).sort(((e,t)=>e-t))[0];this.logger.trace((0,m.t)("TRACE_CONN_ACK_RECEIVED",e.seq.toString(),this.localClock.toString(),t.toString()));let n=0;for(let i=t;i<=e.seq;i++)this.messagePool.has(i)&&(this.messagePool.delete(i),n++),this.ackResolvers.has(i)&&(this.logger.info((0,m.t)("INFO_CONN_ACK_RESOLVED",i.toString())),this.ackResolvers.get(i)?.(),this.ackResolvers.delete(i));this.ackTimeout&&(clearTimeout(this.ackTimeout),this.ackTimeout=null),this.logger.trace((0,m.t)("TRACE_CONN_ACK_CLEARED",n.toString()))}async processLastRtx(e){this.lastRxResolver();const t=this.localClock-e.seq;let n=0;for(let t=e.seq+1;t<=this.localClock;t++){const e=this.messagePool.get(t);e&&(await this.sendData(e),n++)}this.logger.info((0,m.t)("TRACE_CONN_RETRANSMIT",e.seq.toString(),this.localClock.toString(),t.toString(),n.toString())),this.unholdMessageSending()}async processClose(e){this.remoteClock=e.seq,this.unacknowledgedMessageCounter++,this.forceSendACK(),await this.clearRoutine(!1)}async processMsg(e){this.remoteClock=e.seq,this.unacknowledgedMessageCounter++,"__createConnection"===e.payload.name&&this.connectedMessageResolver(),this.outerMessageHandler&&this.outerMessageHandler(e.payload),this.unacknowledgedMessageCounter>=50?this.forceSendACK():this.sendACK()}transformMsgPayload(e){if(e.payload.service){const t=e.payload;return{name:`${t.service}.${t.event}`,...e.payload}}if(e.payload.name){const t=e.payload;return{name:`GW.${t.name}`,...(0,h.hydratePayload)(t.name,t.params)}}return{name:"UnknownGWMessage",payload:e.payload}}sendACK(){this.unacknowledgedMessageCounter=0;try{this.sendData({type:"ack",seq:this.remoteClock})}catch(e){}}forceSendACK(){this.unacknowledgedMessageCounter=0;try{this.sendData({type:"ack",seq:this.remoteClock})}catch(e){}}async sendClose(){const e={type:"close",seq:++this.localClock};this.messagePool.set(e.seq,e),this.closeWasSent=!0,this.sendData(e);await this.waitForAck(e.seq)||this.logger.warning((0,m.t)("WARN_CONN_CLOSE_ACK_TIMEOUT"))}async send(e){if(1!==this.state&&2!==this.state&&4!==this.state)return void this.logger.warning((0,m.t)("WARN_CONN_WRONG_STATE","send message",r.Client.getInstance().getClientState().toString(),""+this.state));const t=++this.localClock,n={type:"msg",seq:t,payload:e};await this.messageCanBeSend,this.messagePool.set(t,n),this.ackTimeout||this.state!==g.VIConnectionState.connected||(this.ackTimeout=setTimeout((()=>{this.transportList.forEach((e=>e.destroy(v.TransportCloseCodes.TIMEOUT))),clearTimeout(this.ackTimeout)}),6e3)),await this.sendData(n)}holdMessageSending(){this.messageCanBeSend=new Promise((e=>{this.messageCanBeSendResolver=e}))}unholdMessageSending(){this.messageCanBeSendResolver?.()}sendData(e){let t=null;if(this.transportList.forEach((n=>{if(!("msg"===e.type&&_.includes(e.payload.name)||E.includes(e.type))){const t=(0,p.sanitizeOutgoingSignalingMessage)(e);this.logger.info((0,m.t)("INFO_CONN_TO_MESSAGE",n.uuid,JSON.stringify(t)))}try{n.send(JSON.stringify(e))}catch(e){t||(t=e instanceof Error?e:new Error(String(e)))}})),t)throw t}async requestBalancer(){let e="https://balancer.voximplant.com/getNearestHost";this.config?.balancerUrl&&(0===this.config?.balancerUrl.indexOf("https://")?e=this.config?.balancerUrl:this.logger.warning((0,m.t)("WARN_CONN_WRONG_BALANCER_URL",this.config?.balancerUrl))),this.logger.info((0,m.t)("INFO_CONN_BALANCER",e));try{const t=await n.g.fetch(e),i=await t.text();if(200!==t.status)throw new Error(`Response code: ${t.status}`);if(0===i.length)throw new Error("Response body is empty");return i.split(";")}catch(t){console.error(t),this.logger.error((0,m.t)("ERR_CONN_WRONG_BALANCER_RESPONSE",t.message,e))}return[]}makeConnectionURL(e){let t="nodejs";const i=n.g.navigator;return i?.mozGetUserMedia?t="firefox":i?.webkitGetUserMedia?t="chrome":i&&(t="safari"),`wss://${e}/platform?version=5&client_version=4.14.0-3018&video=true&ccheck=false&client_platform=${t}&im_version=${this.config?.imVersion||2}&acd_version=${this.config?.acdVersion||1}${this.connectionId?"&id="+this.connectionId:""}&features=1`}async connect(){if(this.logger.info((0,m.t)("INFO_CONN_START_CONNECTION")),this.state>0)return void this.logger.warning((0,m.t)("WARN_CONN_WRONG_STATE","connect",g.VIConnectionStateStrings[this.state],""+this.state));let e;const t=new Promise(((t,n)=>{e=setTimeout((()=>{this.logger.warning((0,m.t)("ERR_CONN_FAILED","timeout")),n(new Error("Interrupt due timeout"))}),1e4)})).catch((e=>(this.setState(g.VIConnectionState.failed),Promise.reject(e))));this.setState(g.VIConnectionState.connecting),this.localClock=0,this.remoteClock=0,this.messagePool=new Map,this.transportList=new Set;let n=this.config?.servers;if(n&&n.length&&n[0]||(n=await Promise.race([this.requestBalancer(),t])),clearTimeout(e),0===n.length){const e=(0,m.t)("ERR_CONN_FAILED","No gateways to connect");throw this.logger.error(e),this.setState(g.VIConnectionState.failed),new Error(e)}this.logger.info((0,m.t)("INFO_CONN_CONNECTION_POOL",n.join(", ")));if(!await this.firstConnection(n)){const e=(0,m.t)("ERR_CONN_FAILED",(0,m.t)("ERR_CONN_CLOUD_IS_UNREACHABLE",n.join(", ")));throw this.setState(g.VIConnectionState.failed),new Error(e)}this.pingInterval&&clearInterval(this.pingInterval),this.pingInterval=setInterval((()=>this.doPing()),2e3),await Promise.race([await Promise.all([this.lastRxReceived,this.connectedMessageReceived]),t]),clearTimeout(e),this.setState(g.VIConnectionState.connected)}doPing(){2===this.state&&this.send({name:"__ping"})}async reconnect(){this.logger.info((0,m.t)("INFO_CONN_RECONNECT","1")),this.holdMessageSending();let e=await this.connectToServer(this.currentServer);if(e===l.CONNECTION_CODE.CONNECTED)return await this.lastRxReceived,!0;const t=async()=>await this.connectToServer(this.currentServer),n=(0,u.makePromiseTimeout)(t,200),i=(0,u.makePromiseTimeout)(t,1e3),r=(0,u.makePromiseTimeout)(t,5e3),a=[n,n,i,i,i,r,r,r,r];for(let t=0;t<a.length;t++)if(e!==l.CONNECTION_CODE.CONNECTED)switch(this.logger.info((0,m.t)("INFO_CONN_RECONNECT",(t+2).toString())),e=await a[t](this.currentServer),e){case l.CONNECTION_CODE.NOT_CONNECTED:this.logger.info((0,m.t)("INFO_CONN_RECONNECT_ATTEMPT_FAILED",(t+2).toString()));break;case l.CONNECTION_CODE.SERVER_ERROR:this.logger.info((0,m.t)("INFO_CONN_RECONNECT_ATTEMPT_FAILED",(t+2).toString())+" (server error)");break;case l.CONNECTION_CODE.CONNECTED:await this.lastRxReceived}return e===l.CONNECTION_CODE.CONNECTED}async firstConnection(e){for(const t of e){if(this.state!==g.VIConnectionState.connecting&&this.state!==g.VIConnectionState.reconnecting)break;this.logger.info((0,m.t)("INFO_CONN_CONNECT",t));switch(await this.connectToServer(t)){case l.CONNECTION_CODE.CONNECTED:return this.logger.info((0,m.t)("INFO_CONN_CONNECT_SUCCESSFUL",t)),this.currentServer=t,!0;case l.CONNECTION_CODE.NOT_CONNECTED:this.logger.info((0,m.t)("INFO_CONN_CONNECT_FAILED",t,"not connected"));break;case l.CONNECTION_CODE.SERVER_ERROR:this.logger.info((0,m.t)("INFO_CONN_CONNECT_FAILED",t,"server error"));break;case l.CONNECTION_CODE.TIMEOUT:this.logger.info((0,m.t)("INFO_CONN_CONNECT_FAILED",t,"timeout"))}}return!1}async connectToServer(e){this.lastRxReceived=new Promise((e=>{this.lastRxResolver=e}));const t=this.makeConnectionURL(e),n=new C.Transport;let i;const r=await Promise.race([n.connect(t),new Promise((e=>{i=setTimeout((()=>e(l.CONNECTION_CODE.TIMEOUT)),1e4)}))]);return clearTimeout(i),r===l.CONNECTION_CODE.CONNECTED?(this.transportList.add(n),this.logger.info((0,m.t)("INFO_CONN_TRANSPORT_CONNECTED",n.uuid)),n.messageHandler=this.messageHandler,n.onClose=this.onTransportClose,await new Promise((async e=>{this.awaitingTransportHandler&&(this.destroyTransportSilent(this.awaitingTransportHandler.transport),this.awaitingTransportHandler.resolve(l.CONNECTION_CODE.NOT_CONNECTED)),this.awaitingTransportHandler={resolve:e,transport:n}}))):(n.destroy(v.TransportCloseCodes.NOT_CONNECTED),r)}async clear(){await this.clearRoutine(!0)}async clearRoutine(e){this.state!==g.VIConnectionState.disconnected&&this.state!==g.VIConnectionState.failed&&this.state!==g.VIConnectionState.closed?(this.pingInterval&&clearInterval(this.pingInterval),e&&!this.closeWasSent&&await this.sendClose(),this.transportList.forEach((e=>{this.destroyTransportSilent(e)})),this.logger.info((0,m.t)("INFO_CONN_CLEAR",this.connectionId)),this.setState(g.VIConnectionState.closed)):this.logger.warning((0,m.t)("WARN_CONN_WRONG_STATE","disconnect",g.VIConnectionStateStrings[this.state],""+this.state))}destroyTransportSilent(e){this.transportList.delete(e),e.onClose=null,e.messageHandler=null,e.destroy(v.TransportCloseCodes.CLIENT_ERROR,"Closing by connection"),this.logger.info((0,m.t)("INFO_CONN_TRANSPORT_DESTROY",e.uuid))}setState(e){const t=this.state;this.state=e,this.logger.info((0,m.t)("INFO_CONN_CHANGE_STATE",`${g.VIConnectionStateStrings[t]}(${t})`,`${g.VIConnectionStateStrings[e]}(${e})`)),this.outerStateHandler&&this.outerStateHandler(t,e)}}i([(0,f.throttleDecorator)(5e3)],S.prototype,"sendACK",null),t.Connection=S},5604:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.CONNECTION_CODE=void 0,function(e){e[e.CONNECTED=0]="CONNECTED",e[e.NOT_CONNECTED=1]="NOT_CONNECTED",e[e.SERVER_ERROR=2]="SERVER_ERROR",e[e.TIMEOUT=3]="TIMEOUT"}(n||(n={})),t.CONNECTION_CODE=n},1783:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.VIConnectionStateStrings=t.VIConnectionState=void 0;const n={disconnected:0,connecting:1,connected:2,failed:3,reconnecting:4,closed:5};t.VIConnectionState=n;const i=Object.keys(n);t.VIConnectionStateStrings=i},2071:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dehydratePayload=t.hydratePayload=void 0;const n={loginFailed:["code","extra"],loginSuccessful:["displayName","params"],__onPCStats:["stats"],handleIncomingConnection:["id","headers","sdp","extra"],handleConnectionConnected:["id","headers","sdp","endpointData","scheme"],handleConnectionDisconnected:["id","headers","params"],handleRingOut:["id"],startEarlyMedia:["id","headers","sdp","scheme"],stopRinging:["id"],handleConnectionFailed:["id","code","reason","headers"],handleSIPInfo:["id","type","subType","body","headers"],handleSipEvent:["id"],handleTransferStarted:["id"],handleTransferComplete:["id"],handleTransferFailed:["id"],handleReInvite:["id","headers","sdp","scheme"],handleAcceptReinvite:["id","headers","sdp"],handleRejectReinvite:["id","headers","sdp"],__createPC:["id","sdp"],__destroyPC:["id"],__connectionSuccessful:["token"],__connectionFailed:[],__createConnection:["token"],__pong:[],increaseGain:[],handlePreFlightCheckResult:["a","b","c"],handleVoicemail:["event"],refreshOauthTokenFailed:["code"],refreshOauthTokenSuccessful:["oauth"],registerPushTokenResult:["result"],unregisterPushTokenResult:["result"],sipRegisterSuccessful:["id","sipUri"],sipRegisterFailed:["id","sipUri","status","reason"],onACDStatus:["id","status","uuid","description"],SQMessagingStatusUpdated:["id","status","uuid","description"],onSQStatusError:["id","uuid","code","description"],onICEConfig:["id","config"],onICEConfigFailed:["id"]},i={__ping:[],login:["username","password"],loginGenerateOneTimeKey:[],setOperatorACDStatus:[],getOperatorACDStatus:[],setOperatorMessagingStatus:[],getOperatorMessagingStatus:[],setDesiredVideoBandwidth:[],rejectCall:[],disconnectCall:[],sendDTMF:[],sendSIPInfo:[],hold:[],unhold:[],acceptCall:[],createCall:[],callConference:[],transferCall:[],__muteLocal:[],ReInvite:[],AcceptReInvite:[],RejectReInvite:[],__confirmPC:[],__addCandidate:[],loginUsingOneTimeKey:[],refreshOauthToken:[],promptFinished:[],registerPushToken:[],unregisterPushToken:[],pushFeedback:[]};t.hydratePayload=function(e,t){const i=n[e];if(!i)throw new Error(`Rule unknown for ${e}`);return t.reduce(((e,t,n)=>(e[i[n]]=t,e)),{})},t.dehydratePayload=function(e,t){const n=i[e];if(!n)throw new Error(`Rule unknown for ${e}`);return n.reduce(((e,n)=>{const i=t[n]||null;return e.push(i),e}),[])}},6466:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.sanitizeSignalingJSON=t.sanitizeOutgoingSignalingMessage=t.sanitizeIncomingSignalingMessage=t.SANITIZE_FIELD_MASK=void 0;const n="***";t.SANITIZE_FIELD_MASK={accessToken:n,refreshToken:n,deviceToken:n,password:n,accessExpire:0,refreshExpire:0},t.sanitizeIncomingSignalingMessage=function(e){const n=JSON.parse(JSON.stringify(e));if("payload"in n&&"loginSuccessful"===n?.payload?.name){const e=[...n.payload.params],i=e[1]?.OAuth?{...e[1]?.OAuth}:void 0;return i?.accessToken&&(i.accessToken=t.SANITIZE_FIELD_MASK.accessToken),i?.refreshToken&&(i.refreshToken=t.SANITIZE_FIELD_MASK.refreshToken),i?.accessExpire&&(i.accessExpire=t.SANITIZE_FIELD_MASK.accessExpire),i?.refreshExpire&&(i.refreshExpire=t.SANITIZE_FIELD_MASK.refreshExpire),i&&(e[1].OAuth=i),{...n,payload:{...n.payload,params:e}}}if("payload"in n&&"refreshOauthTokenSuccessful"===n?.payload?.name){const e=[...n.payload.params],i=e[0]?.OAuth?{...e[0]?.OAuth}:void 0;return i?.accessToken&&(i.accessToken=t.SANITIZE_FIELD_MASK.accessToken),i?.refreshToken&&(i.refreshToken=t.SANITIZE_FIELD_MASK.refreshToken),i?.accessExpire&&(i.accessExpire=t.SANITIZE_FIELD_MASK.accessExpire),i?.refreshExpire&&(i.refreshExpire=t.SANITIZE_FIELD_MASK.refreshExpire),i&&(e[0].OAuth=i),{...n,payload:{...n.payload,params:e}}}return n},t.sanitizeOutgoingSignalingMessage=function(e){const i=JSON.parse(JSON.stringify(e));if("payload"in i&&["login","loginUsingOneTimeKey"].includes(i?.payload?.name)){const e=[...i.payload.params];e[1]=n;const r=e[2]?{...e[2]}:void 0;r?.accessToken&&(r.accessToken=t.SANITIZE_FIELD_MASK.accessToken),r?.deviceToken&&(r.deviceToken=t.SANITIZE_FIELD_MASK.deviceToken);const a={...i,payload:{...i.payload,params:e}};return r&&(a.payload.params[2]=r),a}if("payload"in i&&"refreshOauthToken"===i?.payload?.name){const e=[...i.payload.params];let r=e[1];"string"==typeof r?r=n:"object"==typeof r&&null!==r&&(r?.refreshToken&&(r.refreshToken=t.SANITIZE_FIELD_MASK.refreshToken),r?.deviceToken&&(r.deviceToken=t.SANITIZE_FIELD_MASK.deviceToken));const a={...i,payload:{...i.payload,params:e}};return r&&(a.payload.params[1]=r),a}return i};function i(e){return new RegExp(`("${e}"\\s*:\\s*")(?:[^"\\\\]|\\\\.)*"`,"g")}function r(e){return new RegExp(`("${e}"\\s*:\\s*)-?\\d+`,"g")}t.sanitizeSignalingJSON=function(e){let n=e;for(const[e,a]of Object.entries(t.SANITIZE_FIELD_MASK))switch(typeof a){case"string":n=n.replace(i(e),`$1${a}"`);break;case"number":n=n.replace(r(e),`$1${a}`)}return n}},9367:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.throttleDecorator=void 0,t.throttleDecorator=function(e=200){let t,i;return(r,a,s)=>({value:function(...r){t||(t=Date.now()),n.g.clearTimeout(i),t&&Date.now()-t>=e?(s.value?.apply(this,r),t=Date.now()):i=n.g.setTimeout((()=>{Date.now()-t>=e&&(s.value?.apply(this,r),t=Date.now())}),e-(Date.now()-t))}})}},5383:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Transport=void 0;const i=n(1666),r=n(2957),a=n(1150),s=n(4234),o=n(5604);t.Transport=class{constructor(){this.state=0,this.uuid=r.Utils.generateUUID(),this.logger=a.LogManager.get().createLogger(a.LogCategory.SIGNALING,this._traceName())}_traceName(){return`WSTransport ${this.uuid}`}send(e){if(this.ws.readyState===WebSocket.CLOSED||this.ws.readyState===WebSocket.CLOSING)return this.state=4,this.parentOnClose("Client error",i.TransportCloseCodes.CLIENT_ERROR,!1),void this.ws.close(i.TransportCloseCodes.CLIENT_ERROR,"Client error");this.ws.send(e)}destroy(e,t){this.logger.info((0,s.t)("INFO_TRANSPORT_WILL_DESTROY",this.uuid,e?.toString()??"unknown",t??"unknown")),this.state=4,this.ws&&(e&&e!==i.TransportCloseCodes.NOT_CONNECTED?this.ws.close(e,t):this.ws.close())}createSocket(e){const t=encodeURI(e);try{return new WebSocket(t)}catch(e){return this.logger.warning((0,s.t)("WARN_TRANSPORT_FAILED_TO_CREATE",e?.message??"")),null}}async connect(e){return new Promise((t=>{this.state=1;const n=this.createSocket(e),r=e=>{4!==this.state&&(this.logger.error((0,s.t)("ERR_CONN_TRANSPORT_FAILED")),this.state=0,t(o.CONNECTION_CODE.SERVER_ERROR))};if(!n)return this.state=0,void t(o.CONNECTION_CODE.NOT_CONNECTED);this.ws=n,n.addEventListener("open",(()=>{this.state=2,this.ws.removeEventListener("error",r),this.ws.addEventListener("message",(e=>{this.messageHandler?this.messageHandler(e.data,this):this.logger.warning((0,s.t)("WARN_TRANSPORT_NO_HANDLER",this.uuid))})),this.ws.addEventListener("close",(({reason:e,code:t,wasClean:n})=>{4!==this.state&&(this.state=4,this.parentOnClose(e,t,n))})),this.ws.addEventListener("error",(e=>{this.state=4,this.parentOnClose("Client error",i.TransportCloseCodes.CLIENT_ERROR,!1),this.ws.close(i.TransportCloseCodes.CLIENT_ERROR,"Client error")})),t(o.CONNECTION_CODE.CONNECTED)})),this.ws.addEventListener("error",r)}))}parentOnClose(e,t,n){this.logger.info((0,s.t)("INFO_TRANSPORT_CLOSED",this.uuid,t.toString(),e)),this.onClose?this.onClose(this,{reason:e,code:t,wasClean:n}):this.logger.warning((0,s.t)("WARN_TRANSPORT_NO_CLOSE_HANDLER",this.uuid))}}},1666:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TransportCloseCodes=void 0;t.TransportCloseCodes={NOT_CONNECTED:-1,NORMAL:1e3,WRONG_SEQ:4001,SERVER_ERROR:4002,CLIENT_ERROR:4003,TIMEOUT:4004}},3658:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.makePromiseTimeout=void 0,t.makePromiseTimeout=function(e,t){return function(...n){return new Promise((i=>{setTimeout((async function(){const t=await e.apply(n);i(t)}),t)}))}}},4125:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ConferenceSipInfoEventName=void 0,function(e){e.VI_UPGRADE="vi/upgrade"}(t.ConferenceSipInfoEventName||(t.ConferenceSipInfoEventName={}))},8255:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isValidConferenceProtocolSipInfo=t.isViUpgradeSipInfoEventBody=t.isConferenceSipInfoEventBody=void 0;const i=n(8343),r=n(4125);function a(e){return"object"==typeof e&&null!==e&&"event"in e&&Object.values(r.ConferenceSipInfoEventName).includes(e.event)}t.isConferenceSipInfoEventBody=a,t.isViUpgradeSipInfoEventBody=function(e){return a(e)&&e.event===r.ConferenceSipInfoEventName.VI_UPGRADE},t.isValidConferenceProtocolSipInfo=function(e){return"name"in e&&(0,i.isValidIncomingConferenceProtocolEvent)(e)}},173:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.deserializeConferenceSipInfoBody=void 0;const i=n(8343),r=n(8255);t.deserializeConferenceSipInfoBody=e=>{try{if("string"!=typeof e)return null;const t=JSON.parse(e);return(0,i.isAnyIncomingConferenceProtocolEvent)(t)||(0,r.isConferenceSipInfoEventBody)(t)?t:null}catch(e){return null}}},3317:function(e,t,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,i,r)}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||i(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),r(n(4125),t),r(n(8255),t),r(n(173),t)},4234:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.t=void 0;const n={TEST_REPLACE:"This is a {1} {2} replace",TRACE_CONN_ACK_RECEIVED:"ASK message: received ask {1}, local clock {2}, minimal stored clock {3}",TRACE_CONN_ACK_CLEARED:"ASK message: cleared {1} msg from the pool.",TRACE_CONN_RETRANSMIT:"LastRTX message: requested from {1} current {2} total requested {3} can be sent {4}",INFO_CONN_START_CONNECTION:"Start connecting procedure",INFO_CONN_BALANCER:"Request balancer url {1}",INFO_CONN_TRANSPORT_CONNECTED:"Transport has been connected uuid:{1}",INFO_CONN_TRANSPORT_CLOSED:"Transport has been closed unexpectedly uuid:{1} reason:{2} code {3}",INFO_CONN_ACK_RESOLVED:"Got awaited ACK message: {1}",INFO_CONN_TRANSPORT_DESTROY:"Transport has been successful closed uuid:{1}",INFO_TRANSPORT_WILL_DESTROY:"Transport will be destroyed uuid:{1} code:{2} reason:{3}",INFO_CONN_CONNECTION_POOL:"Connecting to Voximplant gateways: {1}",INFO_CONN_CONNECT:"Trying to connect with {1}",INFO_CONN_CONNECT_SUCCESSFUL:"Connection with {1} has been successful",INFO_CONN_CONNECT_FAILED:"Connection with {1} has been failed. Reason: {2}",INFO_CONN_RECONNECT_NEEDED:"Trying to restore connection",INFO_CONN_RECONNECT_POSSIBLE:"It is possible to restore the connection with a stored connection id",INFO_CONN_RECONNECT_SKIP:"Restore connection skipped due to connection state. Current state {1}.",INFO_CONN_RECONNECT:"Attempt to reconnect #{1}",INFO_CONN_RECONNECT_ATTEMPT_FAILED:"Attempt #{1} failed. Timeout.",INFO_CONN_CLEAR:"Connection {1} has been closed.",INFO_CONN_MESSAGE:'New message from Transport uuid: {1}. "{2}"',INFO_CONN_TO_MESSAGE:'New message to Transport uuid: {1}. "{2}"',INFO_CONN_CONNECTION_ID_SET:"Set new connection id: {1}",INFO_TRANSPORT_CLOSED:"Transport {1} has been closed with code {2} reason: {3}",INFO_CONN_CHANGE_STATE:"Connection state changed from {1} to {2}",WARN_CORE_WRONG_EVENT:"{1} internal event is unhandled. Looks like you forgot to connect some module. If you cannot solve this yourself, please contact our technical support at support@voximplant.com.",WARN_CONN_WRONG_BALANCER_URL:'The Balancer URL should be secure. "{1}" not starts with "https://"',WARN_CONN_WRONG_STATE:"You try to {1} in the wrong state {2}({3})",WARN_CONN_WRONG_SEQ:"Received seq={1}, last seq={2}. Transport {3} is terminated.",WARN_CONN_CLOSE_ACK_TIMEOUT:"Close message ACK timeout",WARN_TRANSPORT_NO_HANDLER:"Transport {1} has no message handler. Message has been dropped.",WARN_TRANSPORT_NO_CLOSE_HANDLER:"Transport {1} has no close handler.",WARN_TRANSPORT_FAILED_TO_CREATE:"Failed to create websocket {1}",...{ERR_LOADING_MODULE:"Error loading module: ",ERR_MODULE_CONSTRUCTOR:"The modules field should be array",ERR_CORE_HANDLER_THROW:'Some module throw error while handle the "{1}" event. Error message is "{2}"',ERR_CORE_PRE_HANDLER_THROW:'Some module throw error while pre handle the "{1}" event. Error message is "{2}"',ERR_CORE_POST_HANDLER_THROW:'Some module throw error while post handle the "{1}" event. Error message is "{2}"',ERR_STATE_IS_READONLY:"SDK.state is read only.",ERR_CONFIG_IS_READONLY:"SDK.config is read only.",ERR_AlREADY_CONNECTED:'SDK already connected. Please use "async SDK.disconnect()" at first place.',ERR_NOT_CONNECTED_YET:'SDK not connected yet. Please use "async SDK.connect()" at first place.',ERR_CONN_WRONG_BALANCER_RESPONSE:'Wrong balancer response. "{1}" from "{2}"',ERR_CONN_FAILED:"Connection failed. Reason: {1}",ERR_CONN_CLOUD_IS_UNREACHABLE:"Voximplant cloud is unreachable. List of servers {1}",ERR_CONN_MESSAGE_PARSING_ERR:"Error while parsing message from Transport",ERR_CONN_MESSAGE_FORMAT_TYPE:'Error in message from Transport: "{1}" field not set.',ERR_CONN_CONNECTION_ID_ALREADY_SET:"Connection id already set and cannot be updated.",ERR_CONN_TRANSPORT_FAILED:"Got error event from transport"},THROW_WRONG_ENVIRONMENT:"Wrong environment",THROW_WRONG_MODULES_CONSTRUCTOR:"Modules config should be an array or a function that returns array"};t.t=(e,...t)=>{const r=n[e];return r?i(r,...t):e};const i=(e,...t)=>e.replace(/{(\d+)}/g,(function(e,n){return void 0!==t[n-1]?t[n-1]:e}))},9007:(e,t)=>{"use strict";function n({trackType:e,layerCount:t,minTrackSize:n}){return"video"===e?{bitrateParams:[n>=1080?24e5:18e5,5e5,1e5],scaleDownParams:[1,n/360,n/280],framerateParams:[30,30,15]}:{framerateParams:[30,2===t?30:10,1===t?30:1],scaleDownParams:[1,1,1]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getSimulcastProfile=void 0,t.getSimulcastProfile=function(e){return"b24"===e.profileName?function({trackType:e,layerCount:t,minTrackSize:n}){if("video"===e)return{framerateParams:[25,2===t?25:15,1===t?25:2===t?15:25],bitrateParams:[n>=1080?24e5:18e5,8e5,3e5],scaleDownParams:[1,1,1===t?1:n/320]};return{framerateParams:[30,2===t?30:10,1===t?30:1],scaleDownParams:[1,1,1]}}(e):n(e)}},4893:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getCollectInterval=t.LOW_BATTERY_COLLECT_INTERVAL=t.DEFAULT_COLLECT_INTERVAL=t.MIN_COLLECT_INTERVAL=void 0;const i=n(308);t.MIN_COLLECT_INTERVAL=500;t.DEFAULT_COLLECT_INTERVAL=1e3;t.LOW_BATTERY_COLLECT_INTERVAL=1e4,t.getCollectInterval=async function(){const e=i.CallManager.get().rtcStatsCollectionInterval;try{if(navigator.getBattery){return(await navigator.getBattery()).level<=.3?Math.max(1e4,e):e}}catch(e){}return e}},8552:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.unregisterPeerConnection=t.registerSource=void 0;const i=n(4893),r=n(7141),a=n(2746),s=n(9258),o=n(171),c=n(5229),d=n(2182),l=n(1954),g=n(1150),u=n(308);let h=!1;const p=new Set,f=new WeakMap,m=new WeakMap;let C=!1,v=i.DEFAULT_COLLECT_INTERVAL;let _=r.baseStatsStrategy;async function E(){(0,i.getCollectInterval)().then((e=>{v=e}));for(const t of p.values())if("connected"===t.connectionState){0;const n=await t.getStats(),i=(e=n,(0,c.checkBlink)(e,h)?o.blinkStatsStrategy:(0,d.checkGecko)(e,h)?a.geckoStatsStrategy:(0,l.checkWebkit)(e,h)?s.webkitStatsStrategy:r.baseStatsStrategy);i.name!==_.name&&(g.LogManager.get().writeMessage(g.LogCategory.RTC,"Stat2",g.LogLevel.INFO,`Stats strategy changed from ${_.name} to ${i.name}`),_=i);const u=m.get(t),p=_.process(n,u);m.set(t,JSON.parse(JSON.stringify(p)));const C=f.get(t);C&&C(p)}var e;0!==p.size&&(C=!0,setTimeout(E,v))}function S(e){p.delete(e),g.LogManager.get().writeMessage(g.LogCategory.RTC,"Stat2",g.LogLevel.INFO,"Statics source has been removed "),0===p.size&&(g.LogManager.get().writeMessage(g.LogCategory.RTC,"Stat2",g.LogLevel.INFO,"Statics interval has been stopped"),C=!1)}t.unregisterPeerConnection=S,t.registerSource=function(e,t,n,i){g.LogManager.get().writeMessage(g.LogCategory.RTC,"Stat2",g.LogLevel.INFO,"Add a new statistic source"),n&&n.addEventListener("abort",(function(){g.LogManager.get().writeMessage(g.LogCategory.RTC,"Stat2",g.LogLevel.INFO,"Abort statistic source"),S(e)})),f.set(e,t),function(e){p.add(e),g.LogManager.get().writeMessage(g.LogCategory.RTC,"Stat2",g.LogLevel.INFO,"Statics source has been added ");const t=u.CallManager.get().rtcStatsCollectionInterval;!C&&t>0&&(C=!0,setTimeout(E,v))}(e)}},6577:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getShortStreamStats=void 0;const n=(e,t,n)=>Object.entries(e).filter((([e,n])=>(Array.isArray(n)?n:[n]).find((e=>e.kind===t)))).reduce(((e,t)=>{const[i,r]=t;return i&&"undefined"!==i&&(e[i]=((e,t)=>(Array.isArray(e)?e:[e]).map((e=>Object.entries(e).reduce(((e,n)=>{const[i,r]=n;return t.includes(i)&&(e[i]=r),e}),{}))))(r,n)),e}),{});t.getShortStreamStats=e=>{const{outbound:t,inbound:i}=e,r=["packetsSent","packetsReceived","packetsLost","codec","bitrate","endpoint","rtt"],a=["packetsSent","packetsReceived","packetsLost","framesPerSecond","framesDropped","codec","bitrate","rid","width","height","rtt","endpoint"];return{timestamp:Date.now(),outbound:{audio:n(t,"audio",r),video:n(t,"video",a)},inbound:{audio:n(i,"audio",r),video:n(i,"video",a)},mos:e.mos}}},6665:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.registerSource=void 0;const i=n(8552);Object.defineProperty(t,"registerSource",{enumerable:!0,get:function(){return i.registerSource}})},7141:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.baseStatsStrategy=void 0;const n={process:function(e){return{connection:{timestamp:0,availableOutgoingBitrate:0,bytesReceived:0,bytesSent:0,rtt:0,localPort:0,localProtocol:"udp",localType:"relay",remotePort:0,remoteProtocol:"tcp",remoteType:"relay"},inbound:{},outbound:{},mos:{mosG107:4.5}}},name:"rfc"};t.baseStatsStrategy=n},171:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.blinkStatsStrategy=void 0;const i=n(3236);const r={process:function(e,t){const[n,r]=i.utils.formatStats(e),a={},s={};let o={};return n.forEach((e=>{switch(e.type){case"outbound-rtp":{if(!e.mediaSourceId)break;const n=r.get(e.remoteId),a=r.get(e.codecId),o=r.get(e.mediaSourceId);if(!o)break;const c=o.trackIdentifier,d=e.rid?t?.outbound[c]?.find((t=>t.rid===e.rid)):t?.outbound[c]?.[0];let l=0;d&&(l=i.utils.calculateBitrate(e.bytesSent,d.bytesSent,e.timestamp,d.timestamp));const g={bytesSent:e.bytesSent,packetsSent:e.packetsSent,rid:e.rid,jitter:0,rtt:0,totalRtt:0,packetsLost:0,loss:0,timestamp:e.timestamp,bitrate:l};switch(a&&(g.codec=a.mimeType,g.pt=a.payloadType),n&&(g.jitter=n.jitter,g.rtt=n.roundTripTime,g.totalRtt=n.totalRoundTripTime||n.roundTripTime,g.packetsLost=n.packetsLost,g.loss=n.packetsLost/(e.packetsSent+n.packetsLost)),e.kind){case"audio":{const e=o;g.kind="audio",g.audioLevel=e.audioLevel||0,g.totalAudioEnergy=e.totalAudioEnergy||0;break}case"video":{const t=o;g.kind="video",g.baseWidth=t.width,g.baseHeight=t.height,g.width=e.frameWidth||0,g.height=e.frameHeight||0,g.framesPerSecond=e.framesPerSecond||0,g.baseFramesPerSecond=t.framesPerSecond,g.qualityLimitationReason=e.qualityLimitationReason,g.qualityLimitationResolutionChanges=e.qualityLimitationResolutionChanges,g.firCount=e.firCount,g.pliCount=e.pliCount,g.nackCount=e.nackCount,g.qpSum=e.qpSum,g.framesEncoded=e.framesEncoded,g.keyFramesEncoded=e.keyFramesEncoded;break}}s[c]||(s[c]=[]),s[c].push(g);break}case"inbound-rtp":{const n=e.trackIdentifier,s=t?.inbound[n],o=r.get(e.codecId);let c=0;switch(s&&(c=i.utils.calculateBitrate(e.bytesReceived,s.bytesReceived,e.timestamp,s.timestamp)),a[n]={timestamp:e.timestamp,kind:e.kind,bytesReceived:e.bytesReceived||0,packetsReceived:e.packetsReceived||0,packetsLost:e.packetsLost||0,loss:e.packetsLost/(e.packetsReceived+e.packetsLost),jitter:e.jitter||0,bitrate:c},o?.mimeType&&(a[n].codec=o?.mimeType),e.kind){case"audio":a[n]={...a[n],audioLevel:e.audioLevel||0,totalAudioEnergy:e.totalAudioEnergy||0,totalSamplesReceived:e.totalSamplesReceived||0,totalSamplesDuration:e.totalSamplesDuration||0,insertedSamplesForDeceleration:e.insertedSamplesForDeceleration||0,silentConcealedSamples:e.silentConcealedSamples||0};break;case"video":{let t=0;if(s&&s.framesReceived){const n=s.framesReceived||e.framesReceived;t=(e.framesReceived-n)/(e.timestamp-s.timestamp)*1e3|0}a[n]={...a[n],height:e.frameHeight||0,width:e.frameWidth||0,framesReceived:e.framesReceived||0,framesDecoded:e.framesDecoded||0,framesDropped:e.framesDropped||0,framesPerSecond:t};break}}break}case"candidate-pair":{if("succeeded"!==e.state||!e.nominated)return;const t=r.get(e.remoteCandidateId),n=r.get(e.localCandidateId);if(!t||!n)return;const i=t.candidateType,a=t.ip||t.address,s=t.protocol,c=t.port,d=n.candidateType,l=n.ip||n.address,g=n.protocol,u=n.port,h=e.totalRoundTripTime,p=e.currentRoundTripTime,{bytesSent:f,bytesReceived:m,availableOutgoingBitrate:C,timestamp:v}=e;o={timestamp:v,remoteType:i,remoteIp:a,remoteProtocol:s,remotePort:c,localType:d,localIp:l,localProtocol:g,localPort:u,bytesSent:f,bytesReceived:m,availableOutgoingBitrate:C,rtt:h,currentRtt:p};break}}})),{connection:o,outbound:s,inbound:a,mos:{mosG107:4.5}}},name:"blink"};t.blinkStatsStrategy=r},5229:(e,t)=>{"use strict";function n(e){return void 0!==e.address&&void 0!==e.isRemote||void 0!==e.ip&&void 0!==e.isRemote}Object.defineProperty(t,"__esModule",{value:!0}),t.checkBlink=void 0,t.checkBlink=function(e,t=!1){let i=!0,r=!1;return e.forEach((e=>{if(i){switch(e.type){case"peer-connection":r=!0;break;case"media-source":i="audio"===(a=e).kind?void 0!==a.audioLevel&&void 0!==a.totalAudioEnergy&&void 0!==a.totalSamplesDuration:"video"===a.kind&&void 0!==a.width&&void 0!==a.height&&void 0!==a.framesPerSecond;break;case"local-candidate":case"remote-candidate":i=n(e);break;case"transport":i=function(e){return void 0!==e.packetsSent&&void 0!==e.packetsReceived}(e);break;case"inbound-rtp":i=function(e){return"audio"===e.kind||"video"===e.kind}(e);break;case"outbound-rtp":i=function(e){return"audio"===e.kind||"video"===e.kind&&void 0!==e.qualityLimitationReason}(e);break;case"track":i=function(e){return void 0!==e.kind}(e)}t&&console.error("After "+e.type,i)}var a})),r||(i=!1),t&&console.error("Blink detection result is:",i),i}},2182:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.checkGecko=void 0,t.checkGecko=function(e,t=!1){let n=!0;return e.forEach((e=>{if(n){switch(e.type){case"candidate-pair":n=void 0!==(i=e).lastPacketReceivedTimestamp&&void 0!==i.lastPacketSentTimestamp;break;case"inbound-rtp":n=function(e){return"video"!==e.kind||void 0!==e.discardedPackets&&void 0!==e.framesDecoded}(e)}t&&console.error("After "+e.type,n)}var i})),t&&console.error("Gecko detection result is:",n),n}},1954:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.checkWebkit=void 0,t.checkWebkit=function(e,t=!1){let n=!0,i=!1;return e.forEach((e=>{if(n){switch(e.type){case"peer-connection":i=!0;break;case"track":n=function(e){if(e.framesReceived){const t=e;return void 0!==t.freezeCount&&void 0!==t.pauseCount&&void 0!==t.sumOfSquaredFramesDuration&&void 0!==t.totalFramesDuration&&void 0!==t.totalFreezesDuration&&void 0!==t.totalPausesDuration}return!0}(e)}t&&console.error("After "+e.type,n)}})),i||(n=!1),n}},2746:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.geckoStatsStrategy=void 0;const i=n(3236);const r={process:function(e,t){const[n,r]=i.utils.formatStats(e),a={},s={};let o={};return n.forEach((e=>{switch(e.type){case"outbound-rtp":{const n=e.ssrc,a=t?.outbound[n]?.[0],o=r.get(e.codecId);let c=0;a&&(c=i.utils.calculateBitrate(e.bytesSent,a.bytesSent,e.timestamp,a.timestamp));const d={kind:e.kind,bytesSent:e.bytesSent,packetsSent:e.packetsSent,timestamp:e.timestamp,bitrate:c};o?.mimeType&&(d.codec=o?.mimeType),"video"===e.kind&&(d.framesPerSecond=e.framesPerSecond,d.firCount=e.firCount,d.pliCount=e.pliCount,d.nackCount=e.nackCount),s[n]=[d];const l=r.get(e.remoteId);l&&(d.jitter=l.jitter,d.rtt=l.roundTripTime,d.totalRtt=l.totalRoundTripTime,d.packetsLost=l.packetsLost,d.loss=l.packetsLost/(e.packetsSent+l.packetsLost));break}case"inbound-rtp":{const n=e.trackIdentifier,s=t?.inbound[n],o=r.get(e.codecId);let c=0;s&&(c=i.utils.calculateBitrate(e.bytesReceived,s.bytesReceived,e.timestamp,s.timestamp)),a[n]={timestamp:e.timestamp,kind:e.kind,bytesReceived:e.bytesReceived||0,packetsReceived:e.packetsReceived||0,packetsLost:e.packetsLost||0,loss:e.packetsLost/(e.packetsReceived+e.packetsLost),jitter:e.jitter||0,bitrate:c};const d=r.get(e.remoteId);if(d&&(a[n].rtt=d.roundTripTime,a[n].totalRtt=d.totalRoundTripTime),o?.mimeType&&(a[n].codec=o?.mimeType),"video"===e.kind)a[n]={...a[n],framesDecoded:e.framesDecoded||0,framesPerSecond:e.framesPerSecond??0};break}case"candidate-pair":{if("succeeded"!==e.state||!e.nominated)return;const t=r.get(e.remoteCandidateId),n=r.get(e.localCandidateId);if(!t||!n)return;const i=t.candidateType,a=t.ip||t.address,s=t.protocol,c=t.port,d=n.candidateType,l=n.ip||n.address,g=n.protocol,u=n.port,{bytesSent:h,bytesReceived:p,timestamp:f}=e;o={timestamp:f,remoteType:i,remoteIp:a,remoteProtocol:s,remotePort:c,localType:d,localIp:l,localProtocol:g,localPort:u,bytesSent:h,bytesReceived:p};break}}})),{connection:o,outbound:s,inbound:a,mos:{mosG107:4.5}}},name:"gecko"};t.geckoStatsStrategy=r},3236:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.utils=void 0;const n={calculateBitrate:function(e,t,n,i){return(e-t)/(n-i)*8e3},formatStats:function(e){const t=e,n=new Map;return t.forEach((e=>n.set(e.id,e))),[t,n]}};t.utils=n},9258:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.webkitStatsStrategy=void 0;const i=n(3236);const r={process:function(e,t){const[n,r]=i.utils.formatStats(e),a={},s={};let o={};return n.forEach((e=>{switch(e.type){case"outbound-rtp":{const n=r.get(e.remoteId),a=r.get(e.codecId),o=r.get(e.trackId)?.trackIdentifier??e.id;if(!o)return;const c=e.rid?t?.outbound[o]?.find((t=>t.rid===e.rid)):t?.outbound[o]?.[0];let d=0;c&&(d=i.utils.calculateBitrate(e.bytesSent,c.bytesSent,e.timestamp,c.timestamp));const l={bytesSent:e.bytesSent,packetsSent:e.packetsSent,rid:e.rid,jitter:0,rtt:0,totalRtt:0,packetsLost:0,loss:0,codec:a.mimeType,pt:a.payloadType,timestamp:e.timestamp,bitrate:d};if(n){l.jitter=n.jitter,l.rtt=n.roundTripTime,l.packetsLost=n.packetsLost;const t=n.packetsLost||0;l.loss=t/(e.packetsSent+t)}switch(e.kind){case"audio":l.kind="audio";break;case"video":l.kind="video",l.width=e.frameWidth||0,l.height=e.frameHeight||0,l.framesPerSecond=e.framesPerSecond||0,l.qualityLimitationReason=e.qualityLimitationReason,l.qualityLimitationResolutionChanges=e.qualityLimitationResolutionChanges,l.firCount=e.firCount,l.pliCount=e.pliCount,l.nackCount=e.nackCount,l.qpSum=e.qpSum,l.framesEncoded=e.framesEncoded,l.keyFramesEncoded=e.keyFramesEncoded}s[o]||(s[o]=[]),s[o].push(l);break}case"inbound-rtp":{const n=e.trackId,s=r.get(n)?.trackIdentifier??e.trackIdentifier??e.id;if(!s)return;const o=t?.inbound[s],c=r.get(e.codecId);let d=0;switch(o&&(d=i.utils.calculateBitrate(e.bytesReceived,o.bytesReceived,e.timestamp,o.timestamp)),a[s]={timestamp:e.timestamp,kind:e.kind,bytesReceived:e.bytesReceived||0,packetsReceived:e.packetsReceived||0,packetsLost:e.packetsLost||0,loss:e.packetsLost/(e.packetsReceived+e.packetsLost),jitter:0,bitrate:d},c?.mimeType&&(a[s].codec=c?.mimeType),e.kind){case"audio":a[s]={...a[s],jitter:e.jitter,totalAudioEnergy:e.totalAudioEnergy||0,totalSamplesReceived:e.totalSamplesReceived||0,totalSamplesDuration:e.totalSamplesDuration||0,insertedSamplesForDeceleration:e.insertedSamplesForDeceleration||0,silentConcealedSamples:e.silentConcealedSamples||0};break;case"video":{let t=0;if(o&&o.framesReceived){const n=o.framesReceived||e.framesReceived;t=(e.framesReceived-n)/(e.timestamp-o.timestamp)*1e3|0}a[s]={...a[s],height:e.frameHeight||0,width:e.frameWidth||0,framesReceived:e.framesReceived||0,framesDecoded:e.framesDecoded||0,framesPerSecond:t};break}}break}case"candidate-pair":{if("succeeded"!==e.state||!e.nominated)return;const t=r.get(e.remoteCandidateId),n=r.get(e.localCandidateId);if(!t||!n)return;const i=t.candidateType,a=t.protocol,s=t.port,c=n.candidateType,d=n.protocol,l=n.port,g=e.totalRoundTripTime,u=e.currentRoundTripTime,{bytesSent:h,bytesReceived:p,availableOutgoingBitrate:f,timestamp:m}=e;o={timestamp:m,remoteType:i,remoteProtocol:a,remotePort:s,localType:c,localProtocol:d,localPort:l,bytesSent:h,bytesReceived:p,availableOutgoingBitrate:f,rtt:g,currentRtt:u};break}}})),{connection:o,outbound:s,inbound:a,mos:{mosG107:4.5}}},name:"webkit"};t.webkitStatsStrategy=r},7998:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MediaRendererKind=t.AuthResultCode=t.OperatorACDStatuses=t.ACDErrorCode=t.QueueTypes=t.ConnectionNode=void 0,function(e){e.NODE_1="NODE_1",e.NODE_2="NODE_2",e.NODE_3="NODE_3",e.NODE_4="NODE_4",e.NODE_5="NODE_5",e.NODE_6="NODE_6",e.NODE_7="NODE_7",e.NODE_8="NODE_8",e.NODE_9="NODE_9",e.NODE_10="NODE_10",e.NODE_11="NODE_11",e.NODE_12="NODE_12",e.NODE_13="NODE_13"}(t.ConnectionNode||(t.ConnectionNode={})),function(e){e[e.ACD=1]="ACD",e[e.SmartQueue=2]="SmartQueue"}(t.QueueTypes||(t.QueueTypes={})),function(e){e[e.NotLoggedIn=1]="NotLoggedIn",e[e.IncorrectStatus=2]="IncorrectStatus",e[e.StatusWillBeIgnored=3]="StatusWillBeIgnored",e[e.FailedByTimeout=4]="FailedByTimeout",e[e.MultipleOperations=5]="MultipleOperations",e[e.MultipleCredentials=6]="MultipleCredentials",e[e.WrongStatus=7]="WrongStatus",e[e.ConnectionClosed=8]="ConnectionClosed"}(t.ACDErrorCode||(t.ACDErrorCode={})),function(e){e[e.Banned="BANNED"]="Banned",e[e.Dialing="DIALING"]="Dialing",e[e.Offline="OFFLINE"]="Offline",e[e.Online="ONLINE"]="Online",e[e.Ready="READY"]="Ready",e[e.InService="IN_SERVICE"]="InService",e[e.AfterService="AFTER_SERVICE"]="AfterService",e[e.Timeout="TIMEOUT"]="Timeout",e[e.DND="DND"]="DND",e[e.CustomStatus_1="CUSTOM_1"]="CustomStatus_1",e[e.CustomStatus_2="CUSTOM_2"]="CustomStatus_2",e[e.CustomStatus_3="CUSTOM_3"]="CustomStatus_3",e[e.CustomStatus_4="CUSTOM_4"]="CustomStatus_4",e[e.CustomStatus_5="CUSTOM_5"]="CustomStatus_5",e[e.CustomStatus_6="CUSTOM_6"]="CustomStatus_6",e[e.CustomStatus_7="CUSTOM_7"]="CustomStatus_7",e[e.CustomStatus_8="CUSTOM_8"]="CustomStatus_8",e[e.CustomStatus_9="CUSTOM_9"]="CustomStatus_9",e[e.CustomStatus_10="CUSTOM_10"]="CustomStatus_10"}(t.OperatorACDStatuses||(t.OperatorACDStatuses={})),function(e){e[e.OneTimeKeyReceived=302]="OneTimeKeyReceived",e[e.InvalidPassword=401]="InvalidPassword",e[e.MAUAccessDenied=402]="MAUAccessDenied",e[e.AccountFrozen=403]="AccountFrozen",e[e.InvalidUsername=404]="InvalidUsername",e[e.ConnectionClosed=409]="ConnectionClosed",e[e.InvalidState=491]="InvalidState",e[e.InternalError=500]="InternalError",e[e.TokenExpired=701]="TokenExpired"}(t.AuthResultCode||(t.AuthResultCode={})),function(e){e.Audio="audio",e.Video="video",e.Sharing="sharing"}(t.MediaRendererKind||(t.MediaRendererKind={}))},3992:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.queueDecorator=t.TaskMutex=void 0;t.TaskMutex=class{constructor(){this.queue=[],this.locked=!1}acquire(){return this.locked?new Promise((e=>this.queue.push(e))):(this.locked=!0,Promise.resolve())}release(){if(this.queue.length)return this.queue.shift()();this.locked=!1}use(e){return this.acquire().then((()=>Promise.resolve().then((()=>e.descriptor.value.apply(e.instance,e.args))).then((e=>(this.release(),e))).catch((e=>{throw this.release(),e}))))}},t.queueDecorator=function(){return(e,t,n)=>({value:function(...e){return this.mutex.use({args:e,descriptor:n,instance:this})}})}},2957:function(e,t,n){"use strict";var i=this&&this.__decorate||function(e,t,n,i){var r,a=arguments.length,s=a<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var o=e.length-1;o>=0;o--)(r=e[o])&&(s=(a<3?r(s):a>3?r(t,n,s):r(t,n))||s);return a>3&&s&&Object.defineProperty(t,n,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.Utils=void 0;const r=n(4758),a=n(3947),s=n(6081),o=n(125),c=n(7272),d=n(1150),l=n(6466),g=n(9007);class u{static cadScript(e){return e.split(";").map((function(e){if(0!==e.length){var t=e.match(/\([0-9\/\.,\*\+]*\)$/),n=e.substring(0,t.index),i=t.pop();if(t.length)throw new Error("cadence script should be of the form `%f(%f/%f[,%f/%f])`");if(n="*"===n?1/0:parseFloat(n),isNaN(n))throw new Error("cadence length should be of the form `%f`");return{duration:n,sections:i=i.slice(1,i.length-1).split(",").map((function(e){try{var t=e.split("/");if(t.length>3)throw new Error;return{on:(t=t.map((function(e,t){var n;if(2===t)return e.split("+").map((function(e){var t=parseInt(e,10);if(isNaN(t))throw new Error;return t-1}));if("*"==e&&(n=1/0),n=n||parseFloat(e),isNaN(n))throw new Error;return n})))[0],off:t[1],frequencies:t[2]}}catch(e){throw new Error("cadence segments should be of the form `%f/%f[%d[+%d]]`")}}))}}}))}static freqScript(e){return e.split(",").map((function(e){try{var t=e.split("@"),n=parseInt(t.shift()),i=parseFloat(t.shift());if(t.length)throw Error();return{frequency:n,decibels:i}}catch(e){throw new Error("freqScript pairs are expected to be of the form `%d@%f[,%d@%f]`")}}))}static toneScript(e){var t=e.split(";");return{frequencies:this.freqScript(t.shift()),cadences:this.cadScript(t.join(";"))}}static playToneScript(e,t=!1){if(void 0!==window.AudioContext||void 0!==window.webkitAudioContext){var n=c.default.AudioDeviceManager.get().getAudioContext();if(null===n)return;var i=this.toneScript(e),r=[],a=0,s=function(e){for(var t=0;t<n.sampleRate*e;t++)r.push(0)},o=function(e,t){for(var a=0;a<n.sampleRate*t;a++){for(var s=0,o=0;o<e.length;o++)s+=Math.pow(10,i.frequencies[e[o]].decibels/20)*Math.sin((r.length+a)*(3.14159265359/n.sampleRate)*i.frequencies[e[o]].frequency),a<10&&(s*=a/10),a>n.sampleRate*t-10&&(s*=(n.sampleRate*t-a)/10);r.push(s)}},d=function(e,t){if(t!=1/0)var n=t;else n=t=20;if(0!==e.off&&e.off!=1/0)for(;n>0;){o(e.frequencies,e.on),n-=e.on,s(e.off);n-=e.off;n=parseInt(String(10*n))/10}else o(e.frequencies,t)},l=function(e){e.duration!=1/0?a+=e.duration:a+=20;for(var t=0;t<e.sections.length;t++)d(e.sections[t],e.duration)};this.source=n.createBufferSource();for(var g=0;g<i.cadences.length;g++)i.cadences[g].duration==1/0&&(this.source.loop=!0),l(i.cadences[g]);this.source.connect(n.destination);for(var u=n.createBuffer(1,a*n.sampleRate,n.sampleRate),h=u.getChannelData(0),p=0;p<a*n.sampleRate;p++)h[p]=r[p];r=null,this.source.buffer=u,!0===t&&(this.source.loop=!0),this.source.start(0)}}static stopPlayback(){return void 0!==this.source&&null!==this.source&&(this.source.stop(0),this.source=null,!0)}static getServers(e=!1){return fetch("https://balancer.voximplant.com/getNearestHost").then((e=>e.text()))}static generateUUID(){let e=this._gri,t=this._ha;return t(e(32),8)+"-"+t(e(16),4)+"-"+t(16384|e(12),4)+"-"+t(32768|e(14),4)+"-"+t(e(48),12)}static _gri(e){return e<0?NaN:e<=30?0|Math.random()*(1<<e):e<=53?(0|Math.random()*(1<<30))+(0|Math.random()*(1<<e-30))*(1<<30):NaN}static _ha(e,t){let n=e.toString(16),i=t-n.length,r="0";for(;i>0;i>>>=1,r+=r)1&i&&(n=r+n);return n}static checkCA(){if(!o.Client.getInstance().connected())throw new Error(s.CallError.NOT_CONNECTED_TO_VOXIMPLANT.toString());if(!a.Authenticator.get().authorized())throw new Error(s.CallError.NOT_AUTHORIZED.toString())}static mixObjectToLeft(e,t){for(var n in e)void 0!==t[n]&&(e[n]=t[n]);return e}static strFormat(e,...t){return e.replace(/{(\d+)}/g,(function(e,n){return void 0!==t[n]?t[n]:e}))}_traceName(){return"Utils"}static buildSimulcastLayers({trackSettings:e,trackType:t,profileName:n}){e||(e={width:1920,height:1080});const i=e.width>e.height?e.height:e.width,r=u.getSimulcastLayerCount(i),a=(0,g.getSimulcastProfile)({profileName:n,trackType:t,layerCount:r,minTrackSize:i});return u.buildSimulcastBuilderByProfile(r,a)}static getSimulcastLayerCount(e){return e>=720?3:e>=480?2:1}static buildSimulcastBuilderByProfile(e,t){const n=["h","m","l"].slice(3-e),i=[];let r,a,s;t.bitrateParams&&(r=t.bitrateParams.slice(3-e),r[0]=t.bitrateParams[0]),t.scaleDownParams&&(a=t.scaleDownParams.slice(3-e),a[0]=t.scaleDownParams[0]),t.framerateParams&&(s=t.framerateParams.slice(3-e),s[0]=t.framerateParams[0]);for(let t=0;t<e;t++){const e={rid:n[t]};r&&(e.maxBitrate=r[t]),a&&(e.scaleResolutionDownBy=a[t]),s&&(e.maxFramerate=s[t]),i.push(e)}return i}static buildNotSimulcastLayers({trackSettings:e,trackType:t}){e||(e={width:1920,height:1080});const n=o.Client.getInstance().limitVCodecs?.filter((e=>"red"!==e.name&&"ulpfec"!==e.name)),i=!n?.filter((e=>!("H264"===e.name&&"42e01f"===e.params["profile-level-id"]))).length;let r=1;if("sharing"===t&&i){const t=e.height/720,n=e.width/1280;t>=n&&n>1&&(r=n),n<=t&&t>1&&(r=t)}const a=e.width>e.height?e.height:e.width;return[{maxBitrate:a>=1080?25e5:a>=720?15e5:5e5,maxFramerate:30,scaleResolutionDownBy:r}]}static stringifyError(e){const t=Object.getOwnPropertyNames(e);return t.length?JSON.stringify(e,t):JSON.stringify(e,["name","message"])}static async sha256(e){if("function"!=typeof window?.crypto?.subtle?.digest)throw new Error("SHA256 not supported on your platform");const t=(new TextEncoder).encode(e),n=await window.crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(n)).map((e=>e.toString(16).padStart(2,"0"))).join("")}static prepareFeatures(e){return e.map((e=>e.split("/").map((e=>r.Md5.hashStr(e).toString())).join("")))}static hasFeature(e){return o.Client.getInstance().features.includes(e)}static JSONparse(e){try{if("string"!=typeof e)throw new Error("JSON must be a string");return JSON.parse(e)}catch(t){const n=t instanceof Error?t.message:String(t),i="string"==typeof e?e:"object"==typeof e&&null!==e?JSON.stringify(e):String(e),r=(0,l.sanitizeSignalingJSON)(i),a=r.length>52?`${r.slice(0,52)}... (length: ${i.length})`:i;throw new Error(`Error parsing JSON: ${n}. Raw: ${a}`)}}}u.source=null,u.floorTo=(e,t=1)=>Math.floor(e/t)*t,i([d.LogManager.d_trace(d.LogCategory.UTILS)],u,"cadScript",null),i([d.LogManager.d_trace(d.LogCategory.UTILS)],u,"freqScript",null),i([d.LogManager.d_trace(d.LogCategory.UTILS)],u,"toneScript",null),i([d.LogManager.d_trace(d.LogCategory.UTILS)],u,"playToneScript",null),i([d.LogManager.d_trace(d.LogCategory.UTILS)],u,"stopPlayback",null),i([d.LogManager.d_trace(d.LogCategory.UTILS)],u,"getServers",null),t.Utils=u},9001:function(e,t,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,i,r)}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||i(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.getMessenger=t.version=t.getInstance=t.CallState=t.MediaRenderDisablingReason=t.ClientState=t.LogLevel=t.LogCategory=t.MediaRendererKind=t.AuthResultCode=t.ConnectionNode=t.QueueTypes=t.OperatorACDStatuses=t.EndpointEvents=t.Endpoint=t.CallEvents=t.Events=t.Messaging=void 0;const a=n(125),s=n(3947),o=n(6054);var c=n(6054);Object.defineProperty(t,"Messaging",{enumerable:!0,get:function(){return c.Messaging}});var d=n(141);Object.defineProperty(t,"Events",{enumerable:!0,get:function(){return d.Events}});var l=n(2282);Object.defineProperty(t,"CallEvents",{enumerable:!0,get:function(){return l.CallEvents}});var g=n(9144);Object.defineProperty(t,"Endpoint",{enumerable:!0,get:function(){return g.Endpoint}});var u=n(8597);Object.defineProperty(t,"EndpointEvents",{enumerable:!0,get:function(){return u.EndpointEvents}});var h=n(7998);Object.defineProperty(t,"OperatorACDStatuses",{enumerable:!0,get:function(){return h.OperatorACDStatuses}}),Object.defineProperty(t,"QueueTypes",{enumerable:!0,get:function(){return h.QueueTypes}}),Object.defineProperty(t,"ConnectionNode",{enumerable:!0,get:function(){return h.ConnectionNode}}),Object.defineProperty(t,"AuthResultCode",{enumerable:!0,get:function(){return h.AuthResultCode}}),Object.defineProperty(t,"MediaRendererKind",{enumerable:!0,get:function(){return h.MediaRendererKind}});var p=n(1150);Object.defineProperty(t,"LogCategory",{enumerable:!0,get:function(){return p.LogCategory}}),Object.defineProperty(t,"LogLevel",{enumerable:!0,get:function(){return p.LogLevel}}),Object.defineProperty(t,"ClientState",{enumerable:!0,get:function(){return p.ClientState}}),r(n(7272),t);var f=n(1450);Object.defineProperty(t,"MediaRenderDisablingReason",{enumerable:!0,get:function(){return f.MediaRenderDisablingReason}});var m=n(4610);Object.defineProperty(t,"CallState",{enumerable:!0,get:function(){return m.CallState}}),t.getInstance=function(){return a.Client.getInstance()},t.version=a.Client.getInstance().version,t.getMessenger=function(){if(!s.Authenticator.get().authorized())throw new Error("NOT_AUTHORIZED");return o.default.Messenger.getInstance()}},1493:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.featureMap=void 0,t.featureMap={passwordDigestAlgorithmSha256:"bc0aa83a4bd4bfbdb427d58519b5f627759d0f7c0c97fdaec04e2091f6308fe0d8d8a6d2e9e1fb99302b479a8fe540d4",disableAutoSwitchAudioDevice:"bc0aa83a4bd4bfbdb427d58519b5f62759531883f4af0695ac9e039eff6fbce30aaa87422396fdd678498793b6d5250e"}},1113:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SEND_CANDIDATE_DELAY=void 0,t.SEND_CANDIDATE_DELAY=200},2094:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.filterDeviceId=void 0;t.filterDeviceId=(e,t)=>{let n;return t&&(n=e.find((e=>e.id===t))?.id),n||(n=e.find((e=>"default"===e.id))?.id),n||(n=e[0]?.id),n?String(n):void 0}},1192:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isDefaultAudioDeviceConstraint=void 0;t.isDefaultAudioDeviceConstraint=e=>{if(!e.audio||"boolean"==typeof e.audio)return!1;const{deviceId:t}=e.audio;return"communications"===t||"default"===t||"object"==typeof t&&!Array.isArray(t)&&("communications"===t.exact||"default"===t.exact)}},5826:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.promiseWithResolvers=void 0;t.promiseWithResolvers=()=>{let e,t;const n=new Promise(((n,i)=>{e=n,t=i}));return{reject:t,resolve:e,promise:n}}},4758:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(){this._state=new Int32Array(4),this._buffer=new ArrayBuffer(68),this._buffer8=new Uint8Array(this._buffer,0,68),this._buffer32=new Uint32Array(this._buffer,0,17),this.start()}return e.hashStr=function(e,t){return void 0===t&&(t=!1),this.onePassHasher.start().appendStr(e).end(t)},e.hashAsciiStr=function(e,t){return void 0===t&&(t=!1),this.onePassHasher.start().appendAsciiStr(e).end(t)},e._hex=function(t){var n,i,r,a,s=e.hexChars,o=e.hexOut;for(a=0;a<4;a+=1)for(i=8*a,n=t[a],r=0;r<8;r+=2)o[i+1+r]=s.charAt(15&n),n>>>=4,o[i+0+r]=s.charAt(15&n),n>>>=4;return o.join("")},e._md5cycle=function(e,t){var n=e[0],i=e[1],r=e[2],a=e[3];i=((i+=((r=((r+=((a=((a+=((n=((n+=(i&r|~i&a)+t[0]-680876936|0)<<7|n>>>25)+i|0)&i|~n&r)+t[1]-389564586|0)<<12|a>>>20)+n|0)&n|~a&i)+t[2]+606105819|0)<<17|r>>>15)+a|0)&a|~r&n)+t[3]-1044525330|0)<<22|i>>>10)+r|0,i=((i+=((r=((r+=((a=((a+=((n=((n+=(i&r|~i&a)+t[4]-176418897|0)<<7|n>>>25)+i|0)&i|~n&r)+t[5]+1200080426|0)<<12|a>>>20)+n|0)&n|~a&i)+t[6]-1473231341|0)<<17|r>>>15)+a|0)&a|~r&n)+t[7]-45705983|0)<<22|i>>>10)+r|0,i=((i+=((r=((r+=((a=((a+=((n=((n+=(i&r|~i&a)+t[8]+1770035416|0)<<7|n>>>25)+i|0)&i|~n&r)+t[9]-1958414417|0)<<12|a>>>20)+n|0)&n|~a&i)+t[10]-42063|0)<<17|r>>>15)+a|0)&a|~r&n)+t[11]-1990404162|0)<<22|i>>>10)+r|0,i=((i+=((r=((r+=((a=((a+=((n=((n+=(i&r|~i&a)+t[12]+1804603682|0)<<7|n>>>25)+i|0)&i|~n&r)+t[13]-40341101|0)<<12|a>>>20)+n|0)&n|~a&i)+t[14]-1502002290|0)<<17|r>>>15)+a|0)&a|~r&n)+t[15]+1236535329|0)<<22|i>>>10)+r|0,i=((i+=((r=((r+=((a=((a+=((n=((n+=(i&a|r&~a)+t[1]-165796510|0)<<5|n>>>27)+i|0)&r|i&~r)+t[6]-1069501632|0)<<9|a>>>23)+n|0)&i|n&~i)+t[11]+643717713|0)<<14|r>>>18)+a|0)&n|a&~n)+t[0]-373897302|0)<<20|i>>>12)+r|0,i=((i+=((r=((r+=((a=((a+=((n=((n+=(i&a|r&~a)+t[5]-701558691|0)<<5|n>>>27)+i|0)&r|i&~r)+t[10]+38016083|0)<<9|a>>>23)+n|0)&i|n&~i)+t[15]-660478335|0)<<14|r>>>18)+a|0)&n|a&~n)+t[4]-405537848|0)<<20|i>>>12)+r|0,i=((i+=((r=((r+=((a=((a+=((n=((n+=(i&a|r&~a)+t[9]+568446438|0)<<5|n>>>27)+i|0)&r|i&~r)+t[14]-1019803690|0)<<9|a>>>23)+n|0)&i|n&~i)+t[3]-187363961|0)<<14|r>>>18)+a|0)&n|a&~n)+t[8]+1163531501|0)<<20|i>>>12)+r|0,i=((i+=((r=((r+=((a=((a+=((n=((n+=(i&a|r&~a)+t[13]-1444681467|0)<<5|n>>>27)+i|0)&r|i&~r)+t[2]-51403784|0)<<9|a>>>23)+n|0)&i|n&~i)+t[7]+1735328473|0)<<14|r>>>18)+a|0)&n|a&~n)+t[12]-1926607734|0)<<20|i>>>12)+r|0,i=((i+=((r=((r+=((a=((a+=((n=((n+=(i^r^a)+t[5]-378558|0)<<4|n>>>28)+i|0)^i^r)+t[8]-2022574463|0)<<11|a>>>21)+n|0)^n^i)+t[11]+1839030562|0)<<16|r>>>16)+a|0)^a^n)+t[14]-35309556|0)<<23|i>>>9)+r|0,i=((i+=((r=((r+=((a=((a+=((n=((n+=(i^r^a)+t[1]-1530992060|0)<<4|n>>>28)+i|0)^i^r)+t[4]+1272893353|0)<<11|a>>>21)+n|0)^n^i)+t[7]-155497632|0)<<16|r>>>16)+a|0)^a^n)+t[10]-1094730640|0)<<23|i>>>9)+r|0,i=((i+=((r=((r+=((a=((a+=((n=((n+=(i^r^a)+t[13]+681279174|0)<<4|n>>>28)+i|0)^i^r)+t[0]-358537222|0)<<11|a>>>21)+n|0)^n^i)+t[3]-722521979|0)<<16|r>>>16)+a|0)^a^n)+t[6]+76029189|0)<<23|i>>>9)+r|0,i=((i+=((r=((r+=((a=((a+=((n=((n+=(i^r^a)+t[9]-640364487|0)<<4|n>>>28)+i|0)^i^r)+t[12]-421815835|0)<<11|a>>>21)+n|0)^n^i)+t[15]+530742520|0)<<16|r>>>16)+a|0)^a^n)+t[2]-995338651|0)<<23|i>>>9)+r|0,i=((i+=((a=((a+=(i^((n=((n+=(r^(i|~a))+t[0]-198630844|0)<<6|n>>>26)+i|0)|~r))+t[7]+1126891415|0)<<10|a>>>22)+n|0)^((r=((r+=(n^(a|~i))+t[14]-1416354905|0)<<15|r>>>17)+a|0)|~n))+t[5]-57434055|0)<<21|i>>>11)+r|0,i=((i+=((a=((a+=(i^((n=((n+=(r^(i|~a))+t[12]+1700485571|0)<<6|n>>>26)+i|0)|~r))+t[3]-1894986606|0)<<10|a>>>22)+n|0)^((r=((r+=(n^(a|~i))+t[10]-1051523|0)<<15|r>>>17)+a|0)|~n))+t[1]-2054922799|0)<<21|i>>>11)+r|0,i=((i+=((a=((a+=(i^((n=((n+=(r^(i|~a))+t[8]+1873313359|0)<<6|n>>>26)+i|0)|~r))+t[15]-30611744|0)<<10|a>>>22)+n|0)^((r=((r+=(n^(a|~i))+t[6]-1560198380|0)<<15|r>>>17)+a|0)|~n))+t[13]+1309151649|0)<<21|i>>>11)+r|0,i=((i+=((a=((a+=(i^((n=((n+=(r^(i|~a))+t[4]-145523070|0)<<6|n>>>26)+i|0)|~r))+t[11]-1120210379|0)<<10|a>>>22)+n|0)^((r=((r+=(n^(a|~i))+t[2]+718787259|0)<<15|r>>>17)+a|0)|~n))+t[9]-343485551|0)<<21|i>>>11)+r|0,e[0]=n+e[0]|0,e[1]=i+e[1]|0,e[2]=r+e[2]|0,e[3]=a+e[3]|0},e.prototype.start=function(){return this._dataLength=0,this._bufferLength=0,this._state.set(e.stateIdentity),this},e.prototype.appendStr=function(t){var n,i,r=this._buffer8,a=this._buffer32,s=this._bufferLength;for(i=0;i<t.length;i+=1){if((n=t.charCodeAt(i))<128)r[s++]=n;else if(n<2048)r[s++]=192+(n>>>6),r[s++]=63&n|128;else if(n<55296||n>56319)r[s++]=224+(n>>>12),r[s++]=n>>>6&63|128,r[s++]=63&n|128;else{if((n=1024*(n-55296)+(t.charCodeAt(++i)-56320)+65536)>1114111)throw new Error("Unicode standard supports code points up to U+10FFFF");r[s++]=240+(n>>>18),r[s++]=n>>>12&63|128,r[s++]=n>>>6&63|128,r[s++]=63&n|128}s>=64&&(this._dataLength+=64,e._md5cycle(this._state,a),s-=64,a[0]=a[16])}return this._bufferLength=s,this},e.prototype.appendAsciiStr=function(t){for(var n,i=this._buffer8,r=this._buffer32,a=this._bufferLength,s=0;;){for(n=Math.min(t.length-s,64-a);n--;)i[a++]=t.charCodeAt(s++);if(a<64)break;this._dataLength+=64,e._md5cycle(this._state,r),a=0}return this._bufferLength=a,this},e.prototype.appendByteArray=function(t){for(var n,i=this._buffer8,r=this._buffer32,a=this._bufferLength,s=0;;){for(n=Math.min(t.length-s,64-a);n--;)i[a++]=t[s++];if(a<64)break;this._dataLength+=64,e._md5cycle(this._state,r),a=0}return this._bufferLength=a,this},e.prototype.getState=function(){var e=this,t=e._state;return{buffer:String.fromCharCode.apply(null,e._buffer8),buflen:e._bufferLength,length:e._dataLength,state:[t[0],t[1],t[2],t[3]]}},e.prototype.setState=function(e){var t,n=e.buffer,i=e.state,r=this._state;for(this._dataLength=e.length,this._bufferLength=e.buflen,r[0]=i[0],r[1]=i[1],r[2]=i[2],r[3]=i[3],t=0;t<n.length;t+=1)this._buffer8[t]=n.charCodeAt(t)},e.prototype.end=function(t){void 0===t&&(t=!1);var n,i=this._bufferLength,r=this._buffer8,a=this._buffer32,s=1+(i>>2);if(this._dataLength+=i,r[i]=128,r[i+1]=r[i+2]=r[i+3]=0,a.set(e.buffer32Identity.subarray(s),s),i>55&&(e._md5cycle(this._state,a),a.set(e.buffer32Identity)),(n=8*this._dataLength)<=4294967295)a[14]=n;else{var o=n.toString(16).match(/(.*?)(.{0,8})$/);if(null===o)return;var c=parseInt(o[2],16),d=parseInt(o[1],16)||0;a[14]=c,a[15]=d}return e._md5cycle(this._state,a),t?this._state:e._hex(this._state)},e.stateIdentity=new Int32Array([1732584193,-271733879,-1732584194,271733878]),e.buffer32Identity=new Int32Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),e.hexChars="0123456789abcdef",e.hexOut=[],e.onePassHasher=new e,e}();t.Md5=n,"5d41402abc4b2a76b9719d911017c592"!==n.hashStr("hello")&&console.error("Md5 self test failed.")}},t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={exports:{}};return e[i].call(r.exports,r,r.exports,n),r.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n(9001)})();
if (typeof exports !== 'undefined') {
exports['default'] = exports.VoxImplant = VoxImplant;
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = exports['default'];
}
} else {
root.VoxImplant = VoxImplant;
}
}).call(this);