samvyo-js-sdk 2.0.9 → 2.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/samvyo-js-sdk.js +3 -4
- package/package.json +2 -2
package/dest/samvyo-js-sdk.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).samvyo={})}(this,(function(e){"use strict";function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var r,s,i,a,n,o={},c={exports:{}};function d(){if(s)return r;s=1;var e=1e3,t=60*e,i=60*t,a=24*i,n=7*a,o=365.25*a;function c(e,t,r,s){var i=t>=1.5*r;return Math.round(e/r)+" "+s+(i?"s":"")}return r=function(r,s){s=s||{};var d=typeof r;if("string"===d&&r.length>0)return function(r){if((r=String(r)).length>100)return;var s=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(!s)return;var c=parseFloat(s[1]);switch((s[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return c*o;case"weeks":case"week":case"w":return c*n;case"days":case"day":case"d":return c*a;case"hours":case"hour":case"hrs":case"hr":case"h":return c*i;case"minutes":case"minute":case"mins":case"min":case"m":return c*t;case"seconds":case"second":case"secs":case"sec":case"s":return c*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}(r);if("number"===d&&isFinite(r))return s.long?function(r){var s=Math.abs(r);if(s>=a)return c(r,s,a,"day");if(s>=i)return c(r,s,i,"hour");if(s>=t)return c(r,s,t,"minute");if(s>=e)return c(r,s,e,"second");return r+" ms"}(r):function(r){var s=Math.abs(r);if(s>=a)return Math.round(r/a)+"d";if(s>=i)return Math.round(r/i)+"h";if(s>=t)return Math.round(r/t)+"m";if(s>=e)return Math.round(r/e)+"s";return r+"ms"}(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))}}function p(){return n||(n=1,function(e,t){t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const r="color: "+this.color;t.splice(1,0,r,"color: inherit");let s=0,i=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(s++,"%c"===e&&(i=s))})),t.splice(i,0,r)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(r){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(r){}!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG);return e},t.useColors=function(){if("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0)}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=(a?i:(a=1,i=function(e){function t(e){let s,i,a,n=null;function o(...e){if(!o.enabled)return;const r=o,i=Number(new Date),a=i-(s||i);r.diff=a,r.prev=s,r.curr=i,s=i,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let n=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((s,i)=>{if("%%"===s)return"%";n++;const a=t.formatters[i];if("function"==typeof a){const t=e[n];s=a.call(r,t),e.splice(n,1),n--}return s})),t.formatArgs.call(r,e),(r.log||t.log).apply(r,e)}return o.namespace=e,o.useColors=t.useColors(),o.color=t.selectColor(e),o.extend=r,o.destroy=t.destroy,Object.defineProperty(o,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==n?n:(i!==t.namespaces&&(i=t.namespaces,a=t.enabled(e)),a),set:e=>{n=e}}),"function"==typeof t.init&&t.init(o),o}function r(e,r){const s=t(this.namespace+(void 0===r?":":r)+e);return s.log=this.log,s}function s(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){const e=[...t.names.map(s),...t.skips.map(s).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){let r;t.save(e),t.namespaces=e,t.names=[],t.skips=[];const s=("string"==typeof e?e:"").split(/[\s,]+/),i=s.length;for(r=0;r<i;r++)s[r]&&("-"===(e=s[r].replace(/\*/g,".*?"))[0]?t.skips.push(new RegExp("^"+e.slice(1)+"$")):t.names.push(new RegExp("^"+e+"$")))},t.enabled=function(e){if("*"===e[e.length-1])return!0;let r,s;for(r=0,s=t.skips.length;r<s;r++)if(t.skips[r].test(e))return!1;for(r=0,s=t.names.length;r<s;r++)if(t.names[r].test(e))return!0;return!1},t.humanize=d(),t.destroy=function(){},Object.keys(e).forEach((r=>{t[r]=e[r]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let r=0;for(let t=0;t<e.length;t++)r=(r<<5)-r+e.charCodeAt(t),r|=0;return t.colors[Math.abs(r)%t.colors.length]},t.enable(t.load()),t}))(t);const{formatters:r}=e.exports;r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}(c,c.exports)),c.exports}var l,h={},u={exports:{}},m=u.exports;function f(){return l||(l=1,e=u,t=u.exports,function(r,s){var i="function",a="undefined",n="object",o="string",c="major",d="model",p="name",l="type",h="vendor",u="version",m="architecture",f="console",g="mobile",b="tablet",_="smarttv",y="wearable",w="embedded",v="Amazon",S="Apple",R="ASUS",P="BlackBerry",C="Browser",k="Chrome",T="Firefox",D="Google",E="Huawei",I="LG",x="Microsoft",M="Motorola",O="Opera",L="Samsung",A="Sharp",j="Sony",N="Xiaomi",B="Zebra",F="Facebook",$="Chromium OS",U="Mac OS",q=function(e){for(var t={},r=0;r<e.length;r++)t[e[r].toUpperCase()]=e[r];return t},V=function(e,t){return typeof e===o&&-1!==W(t).indexOf(W(e))},W=function(e){return e.toLowerCase()},K=function(e,t){if(typeof e===o)return e=e.replace(/^\s\s*/,""),typeof t===a?e:e.substring(0,500)},H=function(e,t){for(var r,a,o,c,d,p,l=0;l<t.length&&!d;){var h=t[l],u=t[l+1];for(r=a=0;r<h.length&&!d&&h[r];)if(d=h[r++].exec(e))for(o=0;o<u.length;o++)p=d[++a],typeof(c=u[o])===n&&c.length>0?2===c.length?typeof c[1]==i?this[c[0]]=c[1].call(this,p):this[c[0]]=c[1]:3===c.length?typeof c[1]!==i||c[1].exec&&c[1].test?this[c[0]]=p?p.replace(c[1],c[2]):s:this[c[0]]=p?c[1].call(this,p,c[2]):s:4===c.length&&(this[c[0]]=p?c[3].call(this,p.replace(c[1],c[2])):s):this[c]=p||s;l+=2}},G=function(e,t){for(var r in t)if(typeof t[r]===n&&t[r].length>0){for(var i=0;i<t[r].length;i++)if(V(t[r][i],e))return"?"===r?s:r}else if(V(t[r],e))return"?"===r?s:r;return e},z={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},J={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[u,[p,"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[u,[p,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[p,u],[/opios[\/ ]+([\w\.]+)/i],[u,[p,O+" Mini"]],[/\bop(?:rg)?x\/([\w\.]+)/i],[u,[p,O+" GX"]],[/\bopr\/([\w\.]+)/i],[u,[p,O]],[/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i],[u,[p,"Baidu"]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,/(avant|iemobile|slim)\s?(?:browser)?[\/ ]?([\w\.]*)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,/(heytap|ovi)browser\/([\d\.]+)/i,/(weibo)__([\d\.]+)/i],[p,u],[/\bddg\/([\w\.]+)/i],[u,[p,"DuckDuckGo"]],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[u,[p,"UC"+C]],[/microm.+\bqbcore\/([\w\.]+)/i,/\bqbcore\/([\w\.]+).+microm/i,/micromessenger\/([\w\.]+)/i],[u,[p,"WeChat"]],[/konqueror\/([\w\.]+)/i],[u,[p,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[u,[p,"IE"]],[/ya(?:search)?browser\/([\w\.]+)/i],[u,[p,"Yandex"]],[/slbrowser\/([\w\.]+)/i],[u,[p,"Smart Lenovo "+C]],[/(avast|avg)\/([\w\.]+)/i],[[p,/(.+)/,"$1 Secure "+C],u],[/\bfocus\/([\w\.]+)/i],[u,[p,T+" Focus"]],[/\bopt\/([\w\.]+)/i],[u,[p,O+" Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[u,[p,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[u,[p,"Dolphin"]],[/coast\/([\w\.]+)/i],[u,[p,O+" Coast"]],[/miuibrowser\/([\w\.]+)/i],[u,[p,"MIUI "+C]],[/fxios\/([-\w\.]+)/i],[u,[p,T]],[/\bqihu|(qi?ho?o?|360)browser/i],[[p,"360 "+C]],[/(oculus|sailfish|huawei|vivo)browser\/([\w\.]+)/i],[[p,/(.+)/,"$1 "+C],u],[/samsungbrowser\/([\w\.]+)/i],[u,[p,L+" Internet"]],[/(comodo_dragon)\/([\w\.]+)/i],[[p,/_/g," "],u],[/metasr[\/ ]?([\d\.]+)/i],[u,[p,"Sogou Explorer"]],[/(sogou)mo\w+\/([\d\.]+)/i],[[p,"Sogou Mobile"],u],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|2345Explorer)[\/ ]?([\w\.]+)/i],[p,u],[/(lbbrowser)/i,/\[(linkedin)app\]/i],[p],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[p,F],u],[/(Klarna)\/([\w\.]+)/i,/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(alipay)client\/([\w\.]+)/i,/(twitter)(?:and| f.+e\/([\w\.]+))/i,/(chromium|instagram|snapchat)[\/ ]([-\w\.]+)/i],[p,u],[/\bgsa\/([\w\.]+) .*safari\//i],[u,[p,"GSA"]],[/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i],[u,[p,"TikTok"]],[/headlesschrome(?:\/([\w\.]+)| )/i],[u,[p,k+" Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[p,k+" WebView"],u],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[u,[p,"Android "+C]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[p,u],[/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i],[u,[p,"Mobile Safari"]],[/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i],[u,p],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[p,[u,G,{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}]],[/(webkit|khtml)\/([\w\.]+)/i],[p,u],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[p,"Netscape"],u],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[u,[p,T+" Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/(links) \(([\w\.]+)/i,/panasonic;(viera)/i],[p,u],[/(cobalt)\/([\w\.]+)/i],[p,[u,/master.|lts./,""]]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i],[[m,"amd64"]],[/(ia32(?=;))/i],[[m,W]],[/((?:i[346]|x)86)[;\)]/i],[[m,"ia32"]],[/\b(aarch64|arm(v?8e?l?|_?64))\b/i],[[m,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[m,"armhf"]],[/windows (ce|mobile); ppc;/i],[[m,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],[[m,/ower/,"",W]],[/(sun4\w)[;\)]/i],[[m,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[m,W]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[d,[h,L],[l,b]],[/\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,/samsung[- ]([-\w]+)/i,/sec-(sgh\w+)/i],[d,[h,L],[l,g]],[/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i],[d,[h,S],[l,g]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[d,[h,S],[l,b]],[/(macintosh);/i],[d,[h,S]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[d,[h,A],[l,g]],[/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],[d,[h,E],[l,b]],[/(?:huawei|honor)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i],[d,[h,E],[l,g]],[/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i],[[d,/_/g," "],[h,N],[l,g]],[/oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i,/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i],[[d,/_/g," "],[h,N],[l,b]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[d,[h,"OPPO"],[l,g]],[/\b(opd2\d{3}a?) bui/i],[d,[h,"OPPO"],[l,b]],[/vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[d,[h,"Vivo"],[l,g]],[/\b(rmx[1-3]\d{3})(?: bui|;|\))/i],[d,[h,"Realme"],[l,g]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[d,[h,M],[l,g]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[d,[h,M],[l,b]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[d,[h,I],[l,b]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,/\blg-?([\d\w]+) bui/i],[d,[h,I],[l,g]],[/(ideatab[-\w ]+)/i,/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i],[d,[h,"Lenovo"],[l,b]],[/(?:maemo|nokia).*(n900|lumia \d+)/i,/nokia[-_ ]?([-\w\.]*)/i],[[d,/_/g," "],[h,"Nokia"],[l,g]],[/(pixel c)\b/i],[d,[h,D],[l,b]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[d,[h,D],[l,g]],[/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[d,[h,j],[l,g]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[d,"Xperia Tablet"],[h,j],[l,b]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[d,[h,"OnePlus"],[l,g]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[d,[h,v],[l,b]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[d,/(.+)/g,"Fire Phone $1"],[h,v],[l,g]],[/(playbook);[-\w\),; ]+(rim)/i],[d,h,[l,b]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[d,[h,P],[l,g]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[d,[h,R],[l,b]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[d,[h,R],[l,g]],[/(nexus 9)/i],[d,[h,"HTC"],[l,b]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i],[h,[d,/_/g," "],[l,g]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[d,[h,"Acer"],[l,b]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[d,[h,"Meizu"],[l,g]],[/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i],[d,[h,"Ulefone"],[l,g]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\w]*)/i,/(hp) ([\w ]+\w)/i,/(asus)-?(\w+)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w]+)/i,/(jolla)/i,/(oppo) ?([\w ]+) bui/i],[h,d,[l,g]],[/(kobo)\s(ereader|touch)/i,/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/(nook)[\w ]+build\/(\w+)/i,/(dell) (strea[kpr\d ]*[\dko])/i,/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,/(trinity)[- ]*(t\d{3}) bui/i,/(gigaset)[- ]+(q\w{1,9}) bui/i,/(vodafone) ([\w ]+)(?:\)| bui)/i],[h,d,[l,b]],[/(surface duo)/i],[d,[h,x],[l,b]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[d,[h,"Fairphone"],[l,g]],[/(u304aa)/i],[d,[h,"AT&T"],[l,g]],[/\bsie-(\w*)/i],[d,[h,"Siemens"],[l,g]],[/\b(rct\w+) b/i],[d,[h,"RCA"],[l,b]],[/\b(venue[\d ]{2,7}) b/i],[d,[h,"Dell"],[l,b]],[/\b(q(?:mv|ta)\w+) b/i],[d,[h,"Verizon"],[l,b]],[/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i],[d,[h,"Barnes & Noble"],[l,b]],[/\b(tm\d{3}\w+) b/i],[d,[h,"NuVision"],[l,b]],[/\b(k88) b/i],[d,[h,"ZTE"],[l,b]],[/\b(nx\d{3}j) b/i],[d,[h,"ZTE"],[l,g]],[/\b(gen\d{3}) b.+49h/i],[d,[h,"Swiss"],[l,g]],[/\b(zur\d{3}) b/i],[d,[h,"Swiss"],[l,b]],[/\b((zeki)?tb.*\b) b/i],[d,[h,"Zeki"],[l,b]],[/\b([yr]\d{2}) b/i,/\b(dragon[- ]+touch |dt)(\w{5}) b/i],[[h,"Dragon Touch"],d,[l,b]],[/\b(ns-?\w{0,9}) b/i],[d,[h,"Insignia"],[l,b]],[/\b((nxa|next)-?\w{0,9}) b/i],[d,[h,"NextBook"],[l,b]],[/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[h,"Voice"],d,[l,g]],[/\b(lvtel\-)?(v1[12]) b/i],[[h,"LvTel"],d,[l,g]],[/\b(ph-1) /i],[d,[h,"Essential"],[l,g]],[/\b(v(100md|700na|7011|917g).*\b) b/i],[d,[h,"Envizen"],[l,b]],[/\b(trio[-\w\. ]+) b/i],[d,[h,"MachSpeed"],[l,b]],[/\btu_(1491) b/i],[d,[h,"Rotor"],[l,b]],[/(shield[\w ]+) b/i],[d,[h,"Nvidia"],[l,b]],[/(sprint) (\w+)/i],[h,d,[l,g]],[/(kin\.[onetw]{3})/i],[[d,/\./g," "],[h,x],[l,g]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[d,[h,B],[l,b]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[d,[h,B],[l,g]],[/smart-tv.+(samsung)/i],[h,[l,_]],[/hbbtv.+maple;(\d+)/i],[[d,/^/,"SmartTV"],[h,L],[l,_]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[h,I],[l,_]],[/(apple) ?tv/i],[h,[d,S+" TV"],[l,_]],[/crkey/i],[[d,k+"cast"],[h,D],[l,_]],[/droid.+aft(\w+)( bui|\))/i],[d,[h,v],[l,_]],[/\(dtv[\);].+(aquos)/i,/(aquos-tv[\w ]+)\)/i],[d,[h,A],[l,_]],[/(bravia[\w ]+)( bui|\))/i],[d,[h,j],[l,_]],[/(mitv-\w{5}) bui/i],[d,[h,N],[l,_]],[/Hbbtv.*(technisat) (.*);/i],[h,d,[l,_]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i],[[h,K],[d,K],[l,_]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[l,_]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[h,d,[l,f]],[/droid.+; (shield) bui/i],[d,[h,"Nvidia"],[l,f]],[/(playstation [345portablevi]+)/i],[d,[h,j],[l,f]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[d,[h,x],[l,f]],[/((pebble))app/i],[h,d,[l,y]],[/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i],[d,[h,S],[l,y]],[/droid.+; (glass) \d/i],[d,[h,D],[l,y]],[/droid.+; (wt63?0{2,3})\)/i],[d,[h,B],[l,y]],[/(quest( \d| pro)?)/i],[d,[h,F],[l,y]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[h,[l,w]],[/(aeobc)\b/i],[d,[h,v],[l,w]],[/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i],[d,[l,g]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],[d,[l,b]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[l,b]],[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],[[l,g]],[/(android[-\w\. ]{0,9});.+buil/i],[d,[h,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[u,[p,"EdgeHTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[u,[p,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i,/\b(libweb)/i],[p,u],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[u,p]],os:[[/microsoft (windows) (vista|xp)/i],[p,u],[/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i],[p,[u,G,z]],[/windows nt 6\.2; (arm)/i,/windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i,/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[u,G,z],[p,"Windows"]],[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,/cfnetwork\/.+darwin/i],[[u,/_/g,"."],[p,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[p,U],[u,/_/g,"."]],[/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i],[u,p],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/ ]([\w\.]+)/i,/\((series40);/i],[p,u],[/\(bb(10);/i],[u,[p,P]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i],[u,[p,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[u,[p,T+" OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[u,[p,"webOS"]],[/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i],[u,[p,"watchOS"]],[/crkey\/([\d\.]+)/i],[u,[p,k+"cast"]],[/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i],[[p,$],u],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\/(\d+\.[\w\.]+)/i,/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\);]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/(hurd|linux) ?([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[p,u],[/(sunos) ?([\w\.\d]*)/i],[[p,"Solaris"],u],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,/(unix) ?([\w\.]*)/i],[p,u]]},Q=function(e,t){if(typeof e===n&&(t=e,e=s),!(this instanceof Q))return new Q(e,t).getResult();var f=typeof r!==a&&r.navigator?r.navigator:s,_=e||(f&&f.userAgent?f.userAgent:""),y=f&&f.userAgentData?f.userAgentData:s,w=t?function(e,t){var r={};for(var s in e)t[s]&&t[s].length%2==0?r[s]=t[s].concat(e[s]):r[s]=e[s];return r}(J,t):J,v=f&&f.userAgent==_;return this.getBrowser=function(){var e,t={};return t[p]=s,t[u]=s,H.call(t,_,w.browser),t[c]=typeof(e=t[u])===o?e.replace(/[^\d\.]/g,"").split(".")[0]:s,v&&f&&f.brave&&typeof f.brave.isBrave==i&&(t[p]="Brave"),t},this.getCPU=function(){var e={};return e[m]=s,H.call(e,_,w.cpu),e},this.getDevice=function(){var e={};return e[h]=s,e[d]=s,e[l]=s,H.call(e,_,w.device),v&&!e[l]&&y&&y.mobile&&(e[l]=g),v&&"Macintosh"==e[d]&&f&&typeof f.standalone!==a&&f.maxTouchPoints&&f.maxTouchPoints>2&&(e[d]="iPad",e[l]=b),e},this.getEngine=function(){var e={};return e[p]=s,e[u]=s,H.call(e,_,w.engine),e},this.getOS=function(){var e={};return e[p]=s,e[u]=s,H.call(e,_,w.os),v&&!e[p]&&y&&y.platform&&"Unknown"!=y.platform&&(e[p]=y.platform.replace(/chrome os/i,$).replace(/macos/i,U)),e},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return _},this.setUA=function(e){return _=typeof e===o&&e.length>500?K(e,500):e,this},this.setUA(_),this};Q.VERSION="1.0.38",Q.BROWSER=q([p,u,c]),Q.CPU=q([m]),Q.DEVICE=q([d,h,l,f,g,_,b,y,w]),Q.ENGINE=Q.OS=q([p,u]),e.exports&&(t=e.exports=Q),t.UAParser=Q;var X=typeof r!==a&&(r.jQuery||r.Zepto);if(X&&!X.ua){var Y=new Q;X.ua=Y.getResult(),X.ua.get=function(){return Y.getUA()},X.ua.set=function(e){Y.setUA(e);var t=Y.getResult();for(var r in t)X.ua[r]=t[r]}}}("object"==typeof window?window:m)),u.exports;var e,t}var g,b={};function _(){if(g)return b;g=1;var e=b&&b.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(b,"__esModule",{value:!0}),b.Logger=void 0;const t=e(p()),r="mediasoup-client";return b.Logger=class{constructor(e){e?(this._debug=(0,t.default)(`${r}:${e}`),this._warn=(0,t.default)(`${r}:WARN:${e}`),this._error=(0,t.default)(`${r}:ERROR:${e}`)):(this._debug=(0,t.default)(r),this._warn=(0,t.default)(`${r}:WARN`),this._error=(0,t.default)(`${r}:ERROR`)),this._debug.log=void 0,this._warn.log=void 0,this._error.log=void 0}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}},b}var y,w,v={},S={exports:{}};function R(){if(y)return S.exports;y=1;var e,t="object"==typeof Reflect?Reflect:null,r=t&&"function"==typeof t.apply?t.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};e=t&&"function"==typeof t.ownKeys?t.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var s=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}S.exports=i,S.exports.once=function(e,t){return new Promise((function(r,s){function i(r){e.removeListener(t,a),s(r)}function a(){"function"==typeof e.removeListener&&e.removeListener("error",i),r([].slice.call(arguments))}m(e,t,a,{once:!0}),"error"!==t&&function(e,t,r){"function"==typeof e.on&&m(e,"error",t,r)}(e,i,{once:!0})}))},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var a=10;function n(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function o(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function c(e,t,r,s){var i,a,c;if(n(r),void 0===(a=e._events)?(a=e._events=Object.create(null),e._eventsCount=0):(void 0!==a.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),a=e._events),c=a[t]),void 0===c)c=a[t]=r,++e._eventsCount;else if("function"==typeof c?c=a[t]=s?[r,c]:[c,r]:s?c.unshift(r):c.push(r),(i=o(e))>0&&c.length>i&&!c.warned){c.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+c.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=e,d.type=t,d.count=c.length,console&&console.warn}return e}function d(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,r){var s={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=d.bind(s);return i.listener=r,s.wrapFn=i,i}function l(e,t,r){var s=e._events;if(void 0===s)return[];var i=s[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(i):u(i,i.length)}function h(e){var t=this._events;if(void 0!==t){var r=t[e];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function u(e,t){for(var r=new Array(t),s=0;s<t;++s)r[s]=e[s];return r}function m(e,t,r,s){if("function"==typeof e.on)s.once?e.once(t,r):e.on(t,r);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function i(a){s.once&&e.removeEventListener(t,i),r(a)}))}}return Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(e){if("number"!=typeof e||e<0||s(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");a=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||s(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return o(this)},i.prototype.emit=function(e){for(var t=[],s=1;s<arguments.length;s++)t.push(arguments[s]);var i="error"===e,a=this._events;if(void 0!==a)i=i&&void 0===a.error;else if(!i)return!1;if(i){var n;if(t.length>0&&(n=t[0]),n instanceof Error)throw n;var o=new Error("Unhandled error."+(n?" ("+n.message+")":""));throw o.context=n,o}var c=a[e];if(void 0===c)return!1;if("function"==typeof c)r(c,this,t);else{var d=c.length,p=u(c,d);for(s=0;s<d;++s)r(p[s],this,t)}return!0},i.prototype.addListener=function(e,t){return c(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return c(this,e,t,!0)},i.prototype.once=function(e,t){return n(t),this.on(e,p(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return n(t),this.prependListener(e,p(this,e,t)),this},i.prototype.removeListener=function(e,t){var r,s,i,a,o;if(n(t),void 0===(s=this._events))return this;if(void 0===(r=s[e]))return this;if(r===t||r.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete s[e],s.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(i=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){o=r[a].listener,i=a;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,i),1===r.length&&(s[e]=r[0]),void 0!==s.removeListener&&this.emit("removeListener",e,o||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,r,s;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0===arguments.length){var i,a=Object.keys(r);for(s=0;s<a.length;++s)"removeListener"!==(i=a[s])&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(s=t.length-1;s>=0;s--)this.removeListener(e,t[s]);return this},i.prototype.listeners=function(e){return l(this,e,!0)},i.prototype.rawListeners=function(e){return l(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):h.call(e,t)},i.prototype.listenerCount=h,i.prototype.eventNames=function(){return this._eventsCount>0?e(this._events):[]},S.exports}function P(){if(w)return v;w=1,Object.defineProperty(v,"__esModule",{value:!0}),v.EnhancedEventEmitter=void 0;const e=R(),t=new(_().Logger)("EnhancedEventEmitter");class r extends e.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...r){const s=super.listenerCount(e);try{return super.emit(e,...r)}catch(i){return t.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,i),Boolean(s)}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}}return v.EnhancedEventEmitter=r,v}var C,k={};function T(){if(C)return k;C=1,Object.defineProperty(k,"__esModule",{value:!0}),k.InvalidStateError=k.UnsupportedError=void 0;class e extends Error{constructor(t){super(t),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,e):this.stack=new Error(t).stack}}k.UnsupportedError=e;class t extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,t):this.stack=new Error(e).stack}}return k.InvalidStateError=t,k}var D,E={};function I(){if(D)return E;return D=1,Object.defineProperty(E,"__esModule",{value:!0}),E.clone=function(e){return void 0===e?void 0:Number.isNaN(e)?NaN:"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e))},E.generateRandomNumber=function(){return Math.round(1e7*Math.random())},E.deepFreeze=function e(t){const r=Reflect.ownKeys(t);for(const s of r){const r=t[s];(r&&"object"==typeof r||"function"==typeof r)&&e(r)}return Object.freeze(t)},E}var x,M,O,L={},A={},j={};function N(){if(M)return A;M=1,Object.defineProperty(A,"__esModule",{value:!0}),A.generateProfileLevelIdStringForAnswer=A.isSameProfile=A.parseSdpProfileLevelId=A.levelToString=A.profileToString=A.profileLevelIdToString=A.parseProfileLevelId=A.ProfileLevelId=A.Level=A.Profile=void 0;const e=new(function(){if(x)return j;x=1;var e=j&&j.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(j,"__esModule",{value:!0}),j.Logger=void 0;const t=e(p()),r="h264-profile-level-id";return j.Logger=class{constructor(e){e?(this._debug=(0,t.default)(`${r}:${e}`),this._warn=(0,t.default)(`${r}:WARN:${e}`),this._error=(0,t.default)(`${r}:ERROR:${e}`)):(this._debug=(0,t.default)(r),this._warn=(0,t.default)(`${r}:WARN`),this._error=(0,t.default)(`${r}:ERROR`)),this._debug.log=void 0,this._warn.log=void 0,this._error.log=void 0}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}},j}().Logger);var t,r,s,i;(r=t||(A.Profile=t={}))[r.ConstrainedBaseline=1]="ConstrainedBaseline",r[r.Baseline=2]="Baseline",r[r.Main=3]="Main",r[r.ConstrainedHigh=4]="ConstrainedHigh",r[r.High=5]="High",r[r.PredictiveHigh444=6]="PredictiveHigh444",(i=s||(A.Level=s={}))[i.L1_b=0]="L1_b",i[i.L1=10]="L1",i[i.L1_1=11]="L1_1",i[i.L1_2=12]="L1_2",i[i.L1_3=13]="L1_3",i[i.L2=20]="L2",i[i.L2_1=21]="L2_1",i[i.L2_2=22]="L2_2",i[i.L3=30]="L3",i[i.L3_1=31]="L3_1",i[i.L3_2=32]="L3_2",i[i.L4=40]="L4",i[i.L4_1=41]="L4_1",i[i.L4_2=42]="L4_2",i[i.L5=50]="L5",i[i.L5_1=51]="L5_1",i[i.L5_2=52]="L5_2";class a{constructor(e,t){this.profile=e,this.level=t}}A.ProfileLevelId=a;const n=new a(t.ConstrainedBaseline,s.L3_1);class o{constructor(e){this.mask=~m("x",e),this.masked_value=m("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}}class c{constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}}const d=[new c(66,new o("x1xx0000"),t.ConstrainedBaseline),new c(77,new o("1xxx0000"),t.ConstrainedBaseline),new c(88,new o("11xx0000"),t.ConstrainedBaseline),new c(66,new o("x0xx0000"),t.Baseline),new c(88,new o("10xx0000"),t.Baseline),new c(77,new o("0x0x0000"),t.Main),new c(100,new o("00000000"),t.High),new c(100,new o("00001100"),t.ConstrainedHigh),new c(244,new o("00000000"),t.PredictiveHigh444)];function l(t){if("string"!=typeof t||6!==t.length)return;const r=parseInt(t,16);if(0===r)return;const i=255&r,n=r>>8&255,o=r>>16&255;let c;switch(i){case s.L1_1:c=16&n?s.L1_b:s.L1_1;break;case s.L1:case s.L1_2:case s.L1_3:case s.L2:case s.L2_1:case s.L2_2:case s.L3:case s.L3_1:case s.L3_2:case s.L4:case s.L4_1:case s.L4_2:case s.L5:case s.L5_1:case s.L5_2:c=i;break;default:return void e.warn(`parseProfileLevelId() | unrecognized level_idc [str:${t}, level_idc:${i}]`)}for(const e of d)if(o===e.profile_idc&&e.profile_iop.isMatch(n))return new a(e.profile,c);e.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${t}, profile_idc:${o}, profile_iop:${n}]`)}function h(r){if(r.level==s.L1_b)switch(r.profile){case t.ConstrainedBaseline:return"42f00b";case t.Baseline:return"42100b";case t.Main:return"4d100b";default:return void e.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${r.profile}`)}let i;switch(r.profile){case t.ConstrainedBaseline:i="42e0";break;case t.Baseline:i="4200";break;case t.Main:i="4d00";break;case t.ConstrainedHigh:i="640c";break;case t.High:i="6400";break;case t.PredictiveHigh444:i="f400";break;default:return void e.warn(`profileLevelIdToString() | unrecognized profile ${r.profile}`)}let a=r.level.toString(16);return 1===a.length&&(a=`0${a}`),`${i}${a}`}function u(e={}){const t=e["profile-level-id"];return t?l(t):n}function m(e,t){return Number(t[0]===e)<<7|Number(t[1]===e)<<6|Number(t[2]===e)<<5|Number(t[3]===e)<<4|Number(t[4]===e)<<3|Number(t[5]===e)<<2|Number(t[6]===e)<<1|Number(t[7]===e)}function f(e={}){const t=e["level-asymmetry-allowed"];return!0===t||1===t||"1"===t}return A.parseProfileLevelId=l,A.profileLevelIdToString=h,A.profileToString=function(r){switch(r){case t.ConstrainedBaseline:return"ConstrainedBaseline";case t.Baseline:return"Baseline";case t.Main:return"Main";case t.ConstrainedHigh:return"ConstrainedHigh";case t.High:return"High";case t.PredictiveHigh444:return"PredictiveHigh444";default:return void e.warn(`profileToString() | unrecognized profile ${r}`)}},A.levelToString=function(t){switch(t){case s.L1_b:return"1b";case s.L1:return"1";case s.L1_1:return"1.1";case s.L1_2:return"1.2";case s.L1_3:return"1.3";case s.L2:return"2";case s.L2_1:return"2.1";case s.L2_2:return"2.2";case s.L3:return"3";case s.L3_1:return"3.1";case s.L3_2:return"3.2";case s.L4:return"4";case s.L4_1:return"4.1";case s.L4_2:return"4.2";case s.L5:return"5";case s.L5_1:return"5.1";case s.L5_2:return"5.2";default:return void e.warn(`levelToString() | unrecognized level ${t}`)}},A.parseSdpProfileLevelId=u,A.isSameProfile=function(e={},t={}){const r=u(e),s=u(t);return Boolean(r&&s&&r.profile===s.profile)},A.generateProfileLevelIdStringForAnswer=function(t={},r={}){if(!t["profile-level-id"]&&!r["profile-level-id"])return void e.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");const i=u(t),n=u(r);if(!i)throw new TypeError("invalid local_profile_level_id");if(!n)throw new TypeError("invalid remote_profile_level_id");if(i.profile!==n.profile)throw new TypeError("H264 Profile mismatch");const o=f(t)&&f(r),c=i.level,d=n.level,p=function(e,t){return e===s.L1_b?t!==s.L1&&t!==s.L1_b:t===s.L1_b?e!==s.L1:e<t}(l=c,m=d)?l:m;var l,m;const g=o?c:p;return e.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${i.profile}, level:${g}]`),h(new a(i.profile,g))},A}function B(){if(O)return L;O=1;var e=L&&L.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=L&&L.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=L&&L.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(L,"__esModule",{value:!0}),L.validateRtpCapabilities=function(e){if("object"!=typeof e)throw new TypeError("caps is not an object");if(e.codecs&&!Array.isArray(e.codecs))throw new TypeError("caps.codecs is not an array");e.codecs||(e.codecs=[]);for(const t of e.codecs)d(t);if(e.headerExtensions&&!Array.isArray(e.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");e.headerExtensions||(e.headerExtensions=[]);for(const t of e.headerExtensions)l(t)},L.validateRtpParameters=c,L.validateSctpStreamParameters=function(e){if("object"!=typeof e)throw new TypeError("params is not an object");if("number"!=typeof e.streamId)throw new TypeError("missing params.streamId");let t=!1;"boolean"==typeof e.ordered?t=!0:e.ordered=!0;if(e.maxPacketLifeTime&&"number"!=typeof e.maxPacketLifeTime)throw new TypeError("invalid params.maxPacketLifeTime");if(e.maxRetransmits&&"number"!=typeof e.maxRetransmits)throw new TypeError("invalid params.maxRetransmits");if(e.maxPacketLifeTime&&e.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(t&&e.ordered&&(e.maxPacketLifeTime||e.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");t||!e.maxPacketLifeTime&&!e.maxRetransmits||(e.ordered=!1);if(e.label&&"string"!=typeof e.label)throw new TypeError("invalid params.label");if(e.protocol&&"string"!=typeof e.protocol)throw new TypeError("invalid params.protocol")},L.validateSctpCapabilities=function(e){if("object"!=typeof e)throw new TypeError("caps is not an object");if(!e.numStreams||"object"!=typeof e.numStreams)throw new TypeError("missing caps.numStreams");!function(e){if("object"!=typeof e)throw new TypeError("numStreams is not an object");if("number"!=typeof e.OS)throw new TypeError("missing numStreams.OS");if("number"!=typeof e.MIS)throw new TypeError("missing numStreams.MIS")}(e.numStreams)},L.getExtendedRtpCapabilities=function(e,t){const r={codecs:[],headerExtensions:[]};for(const s of t.codecs||[]){if(f(s))continue;const t=(e.codecs||[]).find((e=>g(e,s,{strict:!0,modify:!0})));if(!t)continue;const i={mimeType:t.mimeType,kind:t.kind,clockRate:t.clockRate,channels:t.channels,localPayloadType:t.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:s.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:t.parameters,remoteParameters:s.parameters,rtcpFeedback:_(t,s)};r.codecs.push(i)}for(const s of r.codecs){const r=e.codecs.find((e=>f(e)&&e.parameters.apt===s.localPayloadType)),i=t.codecs.find((e=>f(e)&&e.parameters.apt===s.remotePayloadType));r&&i&&(s.localRtxPayloadType=r.preferredPayloadType,s.remoteRtxPayloadType=i.preferredPayloadType)}for(const s of t.headerExtensions){const t=e.headerExtensions.find((e=>b(e,s)));if(!t)continue;const i={kind:s.kind,uri:s.uri,sendId:t.preferredId,recvId:s.preferredId,encrypt:t.preferredEncrypt,direction:"sendrecv"};switch(s.direction){case"sendrecv":i.direction="sendrecv";break;case"recvonly":i.direction="sendonly";break;case"sendonly":i.direction="recvonly";break;case"inactive":i.direction="inactive"}r.headerExtensions.push(i)}return r},L.getRecvRtpCapabilities=function(e){const t={codecs:[],headerExtensions:[]};for(const r of e.codecs){const e={mimeType:r.mimeType,kind:r.kind,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(e),!r.remoteRtxPayloadType)continue;const s={mimeType:`${r.kind}/rtx`,kind:r.kind,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(s)}for(const r of e.headerExtensions){if("sendrecv"!==r.direction&&"recvonly"!==r.direction)continue;const e={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt,direction:r.direction};t.headerExtensions.push(e)}return t},L.getSendingRtpParameters=function(e,t){const r={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(const s of t.codecs){if(s.kind!==e)continue;const t={mimeType:s.mimeType,payloadType:s.localPayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.localParameters,rtcpFeedback:s.rtcpFeedback};if(r.codecs.push(t),s.localRtxPayloadType){const e={mimeType:`${s.kind}/rtx`,payloadType:s.localRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.localPayloadType},rtcpFeedback:[]};r.codecs.push(e)}}for(const s of t.headerExtensions){if(s.kind&&s.kind!==e||"sendrecv"!==s.direction&&"sendonly"!==s.direction)continue;const t={uri:s.uri,id:s.sendId,encrypt:s.encrypt,parameters:{}};r.headerExtensions.push(t)}return r},L.getSendingRemoteRtpParameters=function(e,t){const r={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(const s of t.codecs){if(s.kind!==e)continue;const t={mimeType:s.mimeType,payloadType:s.localPayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.remoteParameters,rtcpFeedback:s.rtcpFeedback};if(r.codecs.push(t),s.localRtxPayloadType){const e={mimeType:`${s.kind}/rtx`,payloadType:s.localRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.localPayloadType},rtcpFeedback:[]};r.codecs.push(e)}}for(const s of t.headerExtensions){if(s.kind&&s.kind!==e||"sendrecv"!==s.direction&&"sendonly"!==s.direction)continue;const t={uri:s.uri,id:s.sendId,encrypt:s.encrypt,parameters:{}};r.headerExtensions.push(t)}if(r.headerExtensions.some((e=>"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"===e.uri)))for(const s of r.codecs)s.rtcpFeedback=(s.rtcpFeedback||[]).filter((e=>"goog-remb"!==e.type));else if(r.headerExtensions.some((e=>"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"===e.uri)))for(const s of r.codecs)s.rtcpFeedback=(s.rtcpFeedback||[]).filter((e=>"transport-cc"!==e.type));else for(const s of r.codecs)s.rtcpFeedback=(s.rtcpFeedback||[]).filter((e=>"transport-cc"!==e.type&&"goog-remb"!==e.type));return r},L.reduceCodecs=function(e,t){const r=[];if(t){for(let s=0;s<e.length;++s)if(g(e[s],t,{strict:!0})){r.push(e[s]),f(e[s+1])&&r.push(e[s+1]);break}if(0===r.length)throw new TypeError("no matching codec found")}else r.push(e[0]),f(e[1])&&r.push(e[1]);return r},L.generateProbatorRtpParameters=function(e){c(e=i.clone(e));const t={mid:a,codecs:[],headerExtensions:[],encodings:[{ssrc:n}],rtcp:{cname:"probator"}};return t.codecs.push(e.codecs[0]),t.codecs[0].payloadType=o,t.headerExtensions=e.headerExtensions,t},L.canSend=function(e,t){return t.codecs.some((t=>t.kind===e))},L.canReceive=function(e,t){if(c(e),0===e.codecs.length)return!1;const r=e.codecs[0];return t.codecs.some((e=>e.remotePayloadType===r.payloadType))};const s=r(N()),i=r(I()),a="probator",n=1234,o=127;function c(e){if("object"!=typeof e)throw new TypeError("params is not an object");if(e.mid&&"string"!=typeof e.mid)throw new TypeError("params.mid is not a string");if(!Array.isArray(e.codecs))throw new TypeError("missing params.codecs");for(const t of e.codecs)h(t);if(e.headerExtensions&&!Array.isArray(e.headerExtensions))throw new TypeError("params.headerExtensions is not an array");e.headerExtensions||(e.headerExtensions=[]);for(const t of e.headerExtensions)u(t);if(e.encodings&&!Array.isArray(e.encodings))throw new TypeError("params.encodings is not an array");e.encodings||(e.encodings=[]);for(const t of e.encodings)m(t);if(e.rtcp&&"object"!=typeof e.rtcp)throw new TypeError("params.rtcp is not an object");e.rtcp||(e.rtcp={}),function(e){if("object"!=typeof e)throw new TypeError("rtcp is not an object");if(e.cname&&"string"!=typeof e.cname)throw new TypeError("invalid rtcp.cname");e.reducedSize&&"boolean"==typeof e.reducedSize||(e.reducedSize=!0)}(e.rtcp)}function d(e){const t=new RegExp("^(audio|video)/(.+)","i");if("object"!=typeof e)throw new TypeError("codec is not an object");if(!e.mimeType||"string"!=typeof e.mimeType)throw new TypeError("missing codec.mimeType");const r=t.exec(e.mimeType);if(!r)throw new TypeError("invalid codec.mimeType");if(e.kind=r[1].toLowerCase(),e.preferredPayloadType&&"number"!=typeof e.preferredPayloadType)throw new TypeError("invalid codec.preferredPayloadType");if("number"!=typeof e.clockRate)throw new TypeError("missing codec.clockRate");"audio"===e.kind?"number"!=typeof e.channels&&(e.channels=1):delete e.channels,e.parameters&&"object"==typeof e.parameters||(e.parameters={});for(const s of Object.keys(e.parameters)){let t=e.parameters[s];if(void 0===t&&(e.parameters[s]="",t=""),"string"!=typeof t&&"number"!=typeof t)throw new TypeError(`invalid codec parameter [key:${s}s, value:${t}]`);if("apt"===s&&"number"!=typeof t)throw new TypeError("invalid codec apt parameter")}e.rtcpFeedback&&Array.isArray(e.rtcpFeedback)||(e.rtcpFeedback=[]);for(const s of e.rtcpFeedback)p(s)}function p(e){if("object"!=typeof e)throw new TypeError("fb is not an object");if(!e.type||"string"!=typeof e.type)throw new TypeError("missing fb.type");e.parameter&&"string"==typeof e.parameter||(e.parameter="")}function l(e){if("object"!=typeof e)throw new TypeError("ext is not an object");if("audio"!==e.kind&&"video"!==e.kind)throw new TypeError("invalid ext.kind");if(!e.uri||"string"!=typeof e.uri)throw new TypeError("missing ext.uri");if("number"!=typeof e.preferredId)throw new TypeError("missing ext.preferredId");if(e.preferredEncrypt&&"boolean"!=typeof e.preferredEncrypt)throw new TypeError("invalid ext.preferredEncrypt");if(e.preferredEncrypt||(e.preferredEncrypt=!1),e.direction&&"string"!=typeof e.direction)throw new TypeError("invalid ext.direction");e.direction||(e.direction="sendrecv")}function h(e){const t=new RegExp("^(audio|video)/(.+)","i");if("object"!=typeof e)throw new TypeError("codec is not an object");if(!e.mimeType||"string"!=typeof e.mimeType)throw new TypeError("missing codec.mimeType");const r=t.exec(e.mimeType);if(!r)throw new TypeError("invalid codec.mimeType");if("number"!=typeof e.payloadType)throw new TypeError("missing codec.payloadType");if("number"!=typeof e.clockRate)throw new TypeError("missing codec.clockRate");"audio"===r[1].toLowerCase()?"number"!=typeof e.channels&&(e.channels=1):delete e.channels,e.parameters&&"object"==typeof e.parameters||(e.parameters={});for(const s of Object.keys(e.parameters)){let t=e.parameters[s];if(void 0===t&&(e.parameters[s]="",t=""),"string"!=typeof t&&"number"!=typeof t)throw new TypeError(`invalid codec parameter [key:${s}s, value:${t}]`);if("apt"===s&&"number"!=typeof t)throw new TypeError("invalid codec apt parameter")}e.rtcpFeedback&&Array.isArray(e.rtcpFeedback)||(e.rtcpFeedback=[]);for(const s of e.rtcpFeedback)p(s)}function u(e){if("object"!=typeof e)throw new TypeError("ext is not an object");if(!e.uri||"string"!=typeof e.uri)throw new TypeError("missing ext.uri");if("number"!=typeof e.id)throw new TypeError("missing ext.id");if(e.encrypt&&"boolean"!=typeof e.encrypt)throw new TypeError("invalid ext.encrypt");e.encrypt||(e.encrypt=!1),e.parameters&&"object"==typeof e.parameters||(e.parameters={});for(const t of Object.keys(e.parameters)){let r=e.parameters[t];if(void 0===r&&(e.parameters[t]="",r=""),"string"!=typeof r&&"number"!=typeof r)throw new TypeError("invalid header extension parameter")}}function m(e){if("object"!=typeof e)throw new TypeError("encoding is not an object");if(e.ssrc&&"number"!=typeof e.ssrc)throw new TypeError("invalid encoding.ssrc");if(e.rid&&"string"!=typeof e.rid)throw new TypeError("invalid encoding.rid");if(e.rtx&&"object"!=typeof e.rtx)throw new TypeError("invalid encoding.rtx");if(e.rtx&&"number"!=typeof e.rtx.ssrc)throw new TypeError("missing encoding.rtx.ssrc");if(e.dtx&&"boolean"==typeof e.dtx||(e.dtx=!1),e.scalabilityMode&&"string"!=typeof e.scalabilityMode)throw new TypeError("invalid encoding.scalabilityMode")}function f(e){return!!e&&/.+\/rtx$/i.test(e.mimeType)}function g(e,t,{strict:r=!1,modify:i=!1}={}){const a=e.mimeType.toLowerCase();if(a!==t.mimeType.toLowerCase())return!1;if(e.clockRate!==t.clockRate)return!1;if(e.channels!==t.channels)return!1;switch(a){case"video/h264":if(r){if((e.parameters["packetization-mode"]||0)!==(t.parameters["packetization-mode"]||0))return!1;if(!s.isSameProfile(e.parameters,t.parameters))return!1;let r;try{r=s.generateProfileLevelIdStringForAnswer(e.parameters,t.parameters)}catch(n){return!1}i&&(r?(e.parameters["profile-level-id"]=r,t.parameters["profile-level-id"]=r):(delete e.parameters["profile-level-id"],delete t.parameters["profile-level-id"]))}break;case"video/vp9":if(r){if((e.parameters["profile-id"]||0)!==(t.parameters["profile-id"]||0))return!1}}return!0}function b(e,t){return(!e.kind||!t.kind||e.kind===t.kind)&&e.uri===t.uri}function _(e,t){const r=[];for(const s of e.rtcpFeedback||[]){const e=(t.rtcpFeedback||[]).find((e=>e.type===s.type&&(e.parameter===s.parameter||!e.parameter&&!s.parameter)));e&&r.push(e)}return r}return L}var F,$,U,q,V={},W={},K={};function H(){if($)return W;$=1,Object.defineProperty(W,"__esModule",{value:!0}),W.AwaitQueue=W.AwaitQueueRemovedTaskError=W.AwaitQueueStoppedError=void 0;const e=new(function(){if(F)return K;F=1,Object.defineProperty(K,"__esModule",{value:!0}),K.Logger=void 0;const e=p(),t="awaitqueue";return K.Logger=class{constructor(r){r?(this._debug=(0,e.default)(`${t}:${r}`),this._warn=(0,e.default)(`${t}:WARN:${r}`),this._error=(0,e.default)(`${t}:ERROR:${r}`)):(this._debug=(0,e.default)(t),this._warn=(0,e.default)(`${t}:WARN`),this._error=(0,e.default)(`${t}:ERROR`)),this._debug.log=void 0,this._warn.log=void 0,this._error.log=void 0}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}},K}().Logger);class t extends Error{constructor(e){super(e??"AwaitQueue stopped"),this.name="AwaitQueueStoppedError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,t)}}W.AwaitQueueStoppedError=t;class r extends Error{constructor(e){super(e??"AwaitQueue task removed"),this.name="AwaitQueueRemovedTaskError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,r)}}W.AwaitQueueRemovedTaskError=r;return W.AwaitQueue=class{constructor(){this.pendingTasks=new Map,this.nextTaskId=0,this.stopping=!1}get size(){return this.pendingTasks.size}async push(t,r){if(r=r??t.name,e.debug(`push() [name:${r}]`),"function"!=typeof t)throw new TypeError("given task is not a function");if(r)try{Object.defineProperty(t,"name",{value:r})}catch(s){}return new Promise(((s,i)=>{const a={id:this.nextTaskId++,task:t,name:r,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:t=>{if(a.completed)return;a.completed=!0,this.pendingTasks.delete(a.id),e.debug(`resolving task [name:${a.name}]`),s(t);const[r]=this.pendingTasks.values();r&&!r.executedAt&&this.execute(r)},reject:t=>{if(!a.completed&&(a.completed=!0,this.pendingTasks.delete(a.id),e.debug(`rejecting task [name:${a.name}]: %s`,String(t)),i(t),!this.stopping)){const[e]=this.pendingTasks.values();e&&!e.executedAt&&this.execute(e)}}};this.pendingTasks.set(a.id,a),1===this.pendingTasks.size&&this.execute(a)}))}stop(){e.debug("stop()"),this.stopping=!0;for(const r of this.pendingTasks.values())e.debug(`stop() | stopping task [name:${r.name}]`),r.reject(new t);this.stopping=!1}remove(t){e.debug(`remove() [taskIdx:${t}]`);const s=Array.from(this.pendingTasks.values())[t];s?s.reject(new r):e.debug(`stop() | no task with given idx [taskIdx:${t}]`)}dump(){const e=Date.now();let t=0;return Array.from(this.pendingTasks.values()).map((r=>({idx:t++,task:r.task,name:r.name,enqueuedTime:r.executedAt?r.executedAt-r.enqueuedAt:e-r.enqueuedAt,executionTime:r.executedAt?e-r.executedAt:0})))}async execute(t){if(e.debug(`execute() [name:${t.name}]`),t.executedAt)throw new Error("task already being executed");t.executedAt=Date.now();try{const e=await t.task();t.resolve(e)}catch(r){t.reject(r)}}},W}
|
|
2
|
-
/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */var G,z={};function J(){if(G)return z;G=1,Object.defineProperty(z,"__esModule",{value:!0}),z.Producer=void 0;const e=_(),t=P(),r=T(),s=new e.Logger("Producer");let i=class extends t.EnhancedEventEmitter{constructor({id:e,localId:r,rtpSender:i,track:a,rtpParameters:n,stopTracks:o,disableTrackOnPause:c,zeroRtpOnPause:d,appData:p}){super(),this._closed=!1,this._observer=new t.EnhancedEventEmitter,s.debug("constructor()"),this._id=e,this._localId=r,this._rtpSender=i,this._track=a,this._kind=a.kind,this._rtpParameters=n,this._paused=!!c&&!a.enabled,this._maxSpatialLayer=void 0,this._stopTracks=o,this._disableTrackOnPause=c,this._zeroRtpOnPause=d,this._appData=p||{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get closed(){return this._closed}get kind(){return this._kind}get rtpSender(){return this._rtpSender}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get maxSpatialLayer(){return this._maxSpatialLayer}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(s.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||(s.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new r.InvalidStateError("closed");return new Promise(((e,t)=>{this.safeEmit("@getstats",e,t)}))}pause(){s.debug("pause()"),this._closed?s.error("pause() | Producer closed"):(this._paused=!0,this._track&&this._disableTrackOnPause&&(this._track.enabled=!1),this._zeroRtpOnPause&&new Promise(((e,t)=>{this.safeEmit("@pause",e,t)})).catch((()=>{})),this._observer.safeEmit("pause"))}resume(){s.debug("resume()"),this._closed?s.error("resume() | Producer closed"):(this._paused=!1,this._track&&this._disableTrackOnPause&&(this._track.enabled=!0),this._zeroRtpOnPause&&new Promise(((e,t)=>{this.safeEmit("@resume",e,t)})).catch((()=>{})),this._observer.safeEmit("resume"))}async replaceTrack({track:e}){if(s.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch(t){}throw new r.InvalidStateError("closed")}if(e&&"ended"===e.readyState)throw new r.InvalidStateError("track ended");e!==this._track?(await new Promise(((t,r)=>{this.safeEmit("@replacetrack",e,t,r)})),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()):s.debug("replaceTrack() | same track, ignored")}async setMaxSpatialLayer(e){if(this._closed)throw new r.InvalidStateError("closed");if("video"!==this._kind)throw new r.UnsupportedError("not a video Producer");if("number"!=typeof e)throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise(((t,r)=>{this.safeEmit("@setmaxspatiallayer",e,t,r)})).catch((()=>{})),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new r.InvalidStateError("closed");if("object"!=typeof e)throw new TypeError("invalid params");await new Promise(((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)}))}onTrackEnded(){s.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track&&this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){if(this._track)try{this._track.removeEventListener("ended",this.onTrackEnded),this._stopTracks&&this._track.stop()}catch(e){}}};return z.Producer=i,z}var Q,X={};function Y(){if(Q)return X;Q=1,Object.defineProperty(X,"__esModule",{value:!0}),X.Consumer=void 0;const e=_(),t=P(),r=T(),s=new e.Logger("Consumer");let i=class extends t.EnhancedEventEmitter{constructor({id:e,localId:r,producerId:i,rtpReceiver:a,track:n,rtpParameters:o,appData:c}){super(),this._closed=!1,this._observer=new t.EnhancedEventEmitter,s.debug("constructor()"),this._id=e,this._localId=r,this._producerId=i,this._rtpReceiver=a,this._track=n,this._rtpParameters=o,this._paused=!n.enabled,this._appData=c||{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(s.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||(s.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new r.InvalidStateError("closed");return new Promise(((e,t)=>{this.safeEmit("@getstats",e,t)}))}pause(){s.debug("pause()"),this._closed?s.error("pause() | Consumer closed"):this._paused?s.debug("pause() | Consumer is already paused"):(this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause"))}resume(){s.debug("resume()"),this._closed?s.error("resume() | Consumer closed"):this._paused?(this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")):s.debug("resume() | Consumer is already resumed")}onTrackEnded(){s.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){try{this._track.removeEventListener("ended",this.onTrackEnded),this._track.stop()}catch(e){}}};return X.Consumer=i,X}var Z,ee={};function te(){if(Z)return ee;Z=1,Object.defineProperty(ee,"__esModule",{value:!0}),ee.DataProducer=void 0;const e=_(),t=P(),r=T(),s=new e.Logger("DataProducer");let i=class extends t.EnhancedEventEmitter{constructor({id:e,dataChannel:r,sctpStreamParameters:i,appData:a}){super(),this._closed=!1,this._observer=new t.EnhancedEventEmitter,s.debug("constructor()"),this._id=e,this._dataChannel=r,this._sctpStreamParameters=i,this._appData=a||{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(s.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||(s.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(s.debug("send()"),this._closed)throw new r.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",(()=>{this._closed||(s.debug('DataChannel "open" event'),this.safeEmit("open"))})),this._dataChannel.addEventListener("error",(e=>{if(this._closed)return;let{error:t}=e;t||(t=new Error("unknown DataChannel error")),"sctp-failure"===t.errorDetail?s.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",t.sctpCauseCode,t.message):s.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)})),this._dataChannel.addEventListener("close",(()=>{this._closed||(s.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))})),this._dataChannel.addEventListener("message",(()=>{this._closed||s.warn('DataChannel "message" event in a DataProducer, message discarded')})),this._dataChannel.addEventListener("bufferedamountlow",(()=>{this._closed||this.safeEmit("bufferedamountlow")}))}};return ee.DataProducer=i,ee}var re,se,ie={};function ae(){if(re)return ie;re=1,Object.defineProperty(ie,"__esModule",{value:!0}),ie.DataConsumer=void 0;const e=_(),t=P(),r=new e.Logger("DataConsumer");let s=class extends t.EnhancedEventEmitter{constructor({id:e,dataProducerId:s,dataChannel:i,sctpStreamParameters:a,appData:n}){super(),this._closed=!1,this._observer=new t.EnhancedEventEmitter,r.debug("constructor()"),this._id=e,this._dataProducerId=s,this._dataChannel=i,this._sctpStreamParameters=a,this._appData=n||{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(r.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||(r.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",(()=>{this._closed||(r.debug('DataChannel "open" event'),this.safeEmit("open"))})),this._dataChannel.addEventListener("error",(e=>{if(this._closed)return;let{error:t}=e;t||(t=new Error("unknown DataChannel error")),"sctp-failure"===t.errorDetail?r.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",t.sctpCauseCode,t.message):r.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)})),this._dataChannel.addEventListener("close",(()=>{this._closed||(r.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))})),this._dataChannel.addEventListener("message",(e=>{this._closed||this.safeEmit("message",e.data)}))}};return ie.DataConsumer=s,ie}function ne(){if(se)return V;se=1;var e=V&&V.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=V&&V.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=V&&V.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s},s=V&&V.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(V,"__esModule",{value:!0}),V.Transport=void 0;const i=H(),a=s(function(){if(q)return U;let e;return q=1,U="function"==typeof queueMicrotask?queueMicrotask.bind("undefined"!=typeof window?window:globalThis):t=>(e||(e=Promise.resolve())).then(t).catch((e=>setTimeout((()=>{throw e}),0)))}()),n=_(),o=P(),c=T(),d=r(I()),p=r(B()),l=J(),h=Y(),u=te(),m=ae(),f=new n.Logger("Transport");class g{constructor(e){this.consumerOptions=e,this.promise=new Promise(((e,t)=>{this.resolve=e,this.reject=t}))}}class b extends o.EnhancedEventEmitter{constructor({direction:e,id:t,iceParameters:r,iceCandidates:s,dtlsParameters:a,sctpParameters:n,iceServers:c,iceTransportPolicy:p,additionalSettings:l,proprietaryConstraints:h,appData:u,handlerFactory:m,extendedRtpCapabilities:g,canProduceByKind:b}){super(),this._closed=!1,this._iceGatheringState="new",this._connectionState="new",this._producers=new Map,this._consumers=new Map,this._dataProducers=new Map,this._dataConsumers=new Map,this._probatorConsumerCreated=!1,this._awaitQueue=new i.AwaitQueue,this._pendingConsumerTasks=[],this._consumerCreationInProgress=!1,this._pendingPauseConsumers=new Map,this._consumerPauseInProgress=!1,this._pendingResumeConsumers=new Map,this._consumerResumeInProgress=!1,this._pendingCloseConsumers=new Map,this._consumerCloseInProgress=!1,this._observer=new o.EnhancedEventEmitter,f.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._extendedRtpCapabilities=g,this._canProduceByKind=b,this._maxSctpMessageSize=n?n.maxMessageSize:null;const _=d.clone(l)||{};delete _.iceServers,delete _.iceTransportPolicy,delete _.bundlePolicy,delete _.rtcpMuxPolicy,delete _.sdpSemantics,this._handler=m(),this._handler.run({direction:e,iceParameters:r,iceCandidates:s,dtlsParameters:a,sctpParameters:n,iceServers:c,iceTransportPolicy:p,additionalSettings:_,proprietaryConstraints:h,extendedRtpCapabilities:g}),this._appData=u||{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){f.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed";for(const e of this._producers.values())e.transportClosed();this._producers.clear();for(const e of this._consumers.values())e.transportClosed();this._consumers.clear();for(const e of this._dataProducers.values())e.transportClosed();this._dataProducers.clear();for(const e of this._dataConsumers.values())e.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close")}}async getStats(){if(this._closed)throw new c.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(f.debug("restartIce()"),this._closed)throw new c.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push((async()=>await this._handler.restartIce(e)),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(f.debug("updateIceServers()"),this._closed)throw new c.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push((async()=>this._handler.updateIceServers(e)),"transport.updateIceServers()")}async produce({track:e,encodings:t,codecOptions:r,codec:s,stopTracks:i=!0,disableTrackOnPause:a=!0,zeroRtpOnPause:n=!1,onRtpSender:o,appData:d={}}={}){if(f.debug("produce() [track:%o]",e),this._closed)throw new c.InvalidStateError("closed");if(!e)throw new TypeError("missing track");if("send"!==this._direction)throw new c.UnsupportedError("not a sending Transport");if(!this._canProduceByKind[e.kind])throw new c.UnsupportedError(`cannot produce ${e.kind}`);if("ended"===e.readyState)throw new c.InvalidStateError("track ended");if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(0===this.listenerCount("produce"))throw new TypeError('no "produce" listener set into this transport');if(d&&"object"!=typeof d)throw new TypeError("if given, appData must be an object");return this._awaitQueue.push((async()=>{let c;if(t&&!Array.isArray(t))throw TypeError("encodings must be an array");t&&0===t.length?c=void 0:t&&(c=t.map((e=>{const t={active:!0};return!1===e.active&&(t.active=!1),"boolean"==typeof e.dtx&&(t.dtx=e.dtx),"string"==typeof e.scalabilityMode&&(t.scalabilityMode=e.scalabilityMode),"number"==typeof e.scaleResolutionDownBy&&(t.scaleResolutionDownBy=e.scaleResolutionDownBy),"number"==typeof e.maxBitrate&&(t.maxBitrate=e.maxBitrate),"number"==typeof e.maxFramerate&&(t.maxFramerate=e.maxFramerate),"boolean"==typeof e.adaptivePtime&&(t.adaptivePtime=e.adaptivePtime),"string"==typeof e.priority&&(t.priority=e.priority),"string"==typeof e.networkPriority&&(t.networkPriority=e.networkPriority),t})));const{localId:h,rtpParameters:u,rtpSender:m}=await this._handler.send({track:e,encodings:c,codecOptions:r,codec:s,onRtpSender:o});try{p.validateRtpParameters(u);const{id:t}=await new Promise(((t,r)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:u,appData:d},t,r)})),r=new l.Producer({id:t,localId:h,rtpSender:m,track:e,rtpParameters:u,stopTracks:i,disableTrackOnPause:a,zeroRtpOnPause:n,appData:d});return this._producers.set(r.id,r),this.handleProducer(r),this._observer.safeEmit("newproducer",r),r}catch(f){throw this._handler.stopSending(h).catch((()=>{})),f}}),"transport.produce()").catch((t=>{if(i)try{e.stop()}catch(r){}throw t}))}async consume({id:e,producerId:t,kind:r,rtpParameters:s,streamId:i,onRtpReceiver:n,appData:o={}}){if(f.debug("consume()"),this._closed)throw new c.InvalidStateError("closed");if("recv"!==this._direction)throw new c.UnsupportedError("not a receiving Transport");if("string"!=typeof e)throw new TypeError("missing id");if("string"!=typeof t)throw new TypeError("missing producerId");if("audio"!==r&&"video"!==r)throw new TypeError(`invalid kind '${r}'`);if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(o&&"object"!=typeof o)throw new TypeError("if given, appData must be an object");const l=d.clone(s);if(!p.canReceive(l,this._extendedRtpCapabilities))throw new c.UnsupportedError("cannot consume this Producer");const h=new g({id:e,producerId:t,kind:r,rtpParameters:l,streamId:i,onRtpReceiver:n,appData:o});return this._pendingConsumerTasks.push(h),(0,a.default)((()=>{this._closed||!1===this._consumerCreationInProgress&&this.createPendingConsumers()})),h.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:s="",protocol:i="",appData:a={}}={}){if(f.debug("produceData()"),this._closed)throw new c.InvalidStateError("closed");if("send"!==this._direction)throw new c.UnsupportedError("not a sending Transport");if(!this._maxSctpMessageSize)throw new c.UnsupportedError("SCTP not enabled by remote Transport");if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(0===this.listenerCount("producedata"))throw new TypeError('no "producedata" listener set into this transport');if(a&&"object"!=typeof a)throw new TypeError("if given, appData must be an object");return(t||r)&&(e=!1),this._awaitQueue.push((async()=>{const{dataChannel:n,sctpStreamParameters:o}=await this._handler.sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:s,protocol:i});p.validateSctpStreamParameters(o);const{id:c}=await new Promise(((e,t)=>{this.safeEmit("producedata",{sctpStreamParameters:o,label:s,protocol:i,appData:a},e,t)})),d=new u.DataProducer({id:c,dataChannel:n,sctpStreamParameters:o,appData:a});return this._dataProducers.set(d.id,d),this.handleDataProducer(d),this._observer.safeEmit("newdataproducer",d),d}),"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:r,label:s="",protocol:i="",appData:a={}}){if(f.debug("consumeData()"),this._closed)throw new c.InvalidStateError("closed");if("recv"!==this._direction)throw new c.UnsupportedError("not a receiving Transport");if(!this._maxSctpMessageSize)throw new c.UnsupportedError("SCTP not enabled by remote Transport");if("string"!=typeof e)throw new TypeError("missing id");if("string"!=typeof t)throw new TypeError("missing dataProducerId");if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(a&&"object"!=typeof a)throw new TypeError("if given, appData must be an object");const n=d.clone(r);return p.validateSctpStreamParameters(n),this._awaitQueue.push((async()=>{const{dataChannel:r}=await this._handler.receiveDataChannel({sctpStreamParameters:n,label:s,protocol:i}),o=new m.DataConsumer({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:n,appData:a});return this._dataConsumers.set(o.id,o),this.handleDataConsumer(o),this._observer.safeEmit("newdataconsumer",o),o}),"transport.consumeData()")}async createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push((async()=>{if(0===this._pendingConsumerTasks.length)return void f.debug("createPendingConsumers() | there is no Consumer to be created");const e=[...this._pendingConsumerTasks];let t;this._pendingConsumerTasks=[];const r=[];for(const i of e){const{id:e,kind:t,rtpParameters:s,streamId:a,onRtpReceiver:n}=i.consumerOptions;r.push({trackId:e,kind:t,rtpParameters:s,streamId:a,onRtpReceiver:n})}try{const s=await this._handler.receive(r);for(let r=0;r<s.length;++r){const i=e[r],a=s[r],{id:n,producerId:o,kind:c,rtpParameters:d,appData:p}=i.consumerOptions,{localId:l,rtpReceiver:u,track:m}=a,f=new h.Consumer({id:n,localId:l,producerId:o,rtpReceiver:u,track:m,rtpParameters:d,appData:p});this._consumers.set(f.id,f),this.handleConsumer(f),this._probatorConsumerCreated||t||"video"!==c||(t=f),this._observer.safeEmit("newconsumer",f),i.resolve(f)}}catch(s){for(const t of e)t.reject(s)}if(t)try{const e=p.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:e}]),f.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(s){f.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",s)}}),"transport.createPendingConsumers()").then((()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()})).catch((()=>{}))}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push((async()=>{if(0===this._pendingPauseConsumers.size)return void f.debug("pausePendingConsumers() | there is no Consumer to be paused");const e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{const t=e.map((e=>e.localId));await this._handler.pauseReceiving(t)}catch(t){f.error("pausePendingConsumers() | failed to pause Consumers:",t)}}),"transport.pausePendingConsumers").then((()=>{this._consumerPauseInProgress=!1,this._pendingPauseConsumers.size>0&&this.pausePendingConsumers()})).catch((()=>{}))}resumePendingConsumers(){this._consumerResumeInProgress=!0,this._awaitQueue.push((async()=>{if(0===this._pendingResumeConsumers.size)return void f.debug("resumePendingConsumers() | there is no Consumer to be resumed");const e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{const t=e.map((e=>e.localId));await this._handler.resumeReceiving(t)}catch(t){f.error("resumePendingConsumers() | failed to resume Consumers:",t)}}),"transport.resumePendingConsumers").then((()=>{this._consumerResumeInProgress=!1,this._pendingResumeConsumers.size>0&&this.resumePendingConsumers()})).catch((()=>{}))}closePendingConsumers(){this._consumerCloseInProgress=!0,this._awaitQueue.push((async()=>{if(0===this._pendingCloseConsumers.size)return void f.debug("closePendingConsumers() | there is no Consumer to be closed");const e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map((e=>e.localId)))}catch(t){f.error("closePendingConsumers() | failed to close Consumers:",t)}}),"transport.closePendingConsumers").then((()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()})).catch((()=>{}))}handleHandler(){const e=this._handler;e.on("@connect",(({dtlsParameters:e},t,r)=>{this._closed?r(new c.InvalidStateError("closed")):this.safeEmit("connect",{dtlsParameters:e},t,r)})),e.on("@icegatheringstatechange",(e=>{e!==this._iceGatheringState&&(f.debug("ICE gathering state changed to %s",e),this._iceGatheringState=e,this._closed||this.safeEmit("icegatheringstatechange",e))})),e.on("@connectionstatechange",(e=>{e!==this._connectionState&&(f.debug("connection state changed to %s",e),this._connectionState=e,this._closed||this.safeEmit("connectionstatechange",e))}))}handleProducer(e){e.on("@close",(()=>{this._producers.delete(e.id),this._closed||this._awaitQueue.push((async()=>await this._handler.stopSending(e.localId)),"producer @close event").catch((e=>f.warn("producer.close() failed:%o",e)))})),e.on("@pause",((t,r)=>{this._awaitQueue.push((async()=>await this._handler.pauseSending(e.localId)),"producer @pause event").then(t).catch(r)})),e.on("@resume",((t,r)=>{this._awaitQueue.push((async()=>await this._handler.resumeSending(e.localId)),"producer @resume event").then(t).catch(r)})),e.on("@replacetrack",((t,r,s)=>{this._awaitQueue.push((async()=>await this._handler.replaceTrack(e.localId,t)),"producer @replacetrack event").then(r).catch(s)})),e.on("@setmaxspatiallayer",((t,r,s)=>{this._awaitQueue.push((async()=>await this._handler.setMaxSpatialLayer(e.localId,t)),"producer @setmaxspatiallayer event").then(r).catch(s)})),e.on("@setrtpencodingparameters",((t,r,s)=>{this._awaitQueue.push((async()=>await this._handler.setRtpEncodingParameters(e.localId,t)),"producer @setrtpencodingparameters event").then(r).catch(s)})),e.on("@getstats",((t,r)=>{if(this._closed)return r(new c.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)}))}handleConsumer(e){e.on("@close",(()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),this._closed||(this._pendingCloseConsumers.set(e.id,e),!1===this._consumerCloseInProgress&&this.closePendingConsumers())})),e.on("@pause",(()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),(0,a.default)((()=>{this._closed||!1===this._consumerPauseInProgress&&this.pausePendingConsumers()}))})),e.on("@resume",(()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),(0,a.default)((()=>{this._closed||!1===this._consumerResumeInProgress&&this.resumePendingConsumers()}))})),e.on("@getstats",((t,r)=>{if(this._closed)return r(new c.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)}))}handleDataProducer(e){e.on("@close",(()=>{this._dataProducers.delete(e.id)}))}handleDataConsumer(e){e.on("@close",(()=>{this._dataConsumers.delete(e.id)}))}}return V.Transport=b,V}var oe,ce,de,pe,le,he={},ue={},me={},fe={exports:{}};function ge(){if(oe)return fe.exports;oe=1;var e=fe.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(e){return null!=e.address?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(e){return null!=e.subtype?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(e){return"extmap:%d"+(e.direction?"/%s":"%v")+(e["encrypt-uri"]?" %s":"%v")+" %s"+(e.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return null!=e.sessionConfig?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(e){var t="candidate:%s %d %s %d %s %d typ %s";return t+=null!=e.raddr?" raddr %s rport %d":"%v%v",t+=null!=e.tcptype?" tcptype %s":"%v",null!=e.generation&&(t+=" generation %d"),t+=null!=e["network-id"]?" network-id %d":"%v",t+=null!=e["network-cost"]?" network-cost %d":"%v"}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(e){var t="ssrc:%d";return null!=e.attribute&&(t+=" %s",null!=e.value&&(t+=":%s")),t}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(e){return null!=e.maxMessageSize?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(e){return e.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(e){return"imageattr:%s %s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(e){return"ts-refclk:%s"+(null!=e.clksrcExt?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(e){var t="mediaclk:";return t+=null!=e.id?"id=%s %s":"%v%s",t+=null!=e.mediaClockValue?"=%s":"",t+=null!=e.rateNumerator?" rate=%s":"",t+=null!=e.rateDenominator?"/%s":""}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};return Object.keys(e).forEach((function(t){e[t].forEach((function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")}))})),fe.exports}function be(){return ce||(ce=1,function(e){var t=function(e){return String(Number(e))===e?Number(e):e},r=function(e,r,s){var i=e.name&&e.names;e.push&&!r[e.push]?r[e.push]=[]:i&&!r[e.name]&&(r[e.name]={});var a=e.push?{}:i?r[e.name]:r;!function(e,r,s,i){if(i&&!s)r[i]=t(e[1]);else for(var a=0;a<s.length;a+=1)null!=e[a+1]&&(r[s[a]]=t(e[a+1]))}(s.match(e.reg),a,e.names,e.name),e.push&&r[e.push].push(a)},s=ge(),i=RegExp.prototype.test.bind(/^([a-z])=(.*)/);e.parse=function(e){var t={},a=[],n=t;return e.split(/(\r\n|\r|\n)/).filter(i).forEach((function(e){var t=e[0],i=e.slice(2);"m"===t&&(a.push({rtp:[],fmtp:[]}),n=a[a.length-1]);for(var o=0;o<(s[t]||[]).length;o+=1){var c=s[t][o];if(c.reg.test(i))return r(c,n,i)}})),t.media=a,t};var a=function(e,r){var s=r.split(/=(.+)/,2);return 2===s.length?e[s[0]]=t(s[1]):1===s.length&&r.length>1&&(e[s[0]]=void 0),e};e.parseParams=function(e){return e.split(/;\s?/).reduce(a,{})},e.parseFmtpConfig=e.parseParams,e.parsePayloads=function(e){return e.toString().split(" ").map(Number)},e.parseRemoteCandidates=function(e){for(var r=[],s=e.split(" ").map(t),i=0;i<s.length;i+=3)r.push({component:s[i],ip:s[i+1],port:s[i+2]});return r},e.parseImageAttributes=function(e){return e.split(" ").map((function(e){return e.substring(1,e.length-1).split(",").reduce(a,{})}))},e.parseSimulcastStreamList=function(e){return e.split(";").map((function(e){return e.split(",").map((function(e){var r,s=!1;return"~"!==e[0]?r=t(e):(r=t(e.substring(1,e.length)),s=!0),{scid:r,paused:s}}))}))}}(me)),me}function _e(){if(pe)return de;pe=1;var e=ge(),t=/%[sdv%]/g,r=function(e){var r=1,s=arguments,i=s.length;return e.replace(t,(function(e){if(r>=i)return e;var t=s[r];switch(r+=1,e){case"%%":return"%";case"%s":return String(t);case"%d":return Number(t);case"%v":return""}}))},s=function(e,t,s){var i=[e+"="+(t.format instanceof Function?t.format(t.push?s:s[t.name]):t.format)];if(t.names)for(var a=0;a<t.names.length;a+=1){var n=t.names[a];t.name?i.push(s[t.name][n]):i.push(s[t.names[a]])}else i.push(s[t.name]);return r.apply(null,i)},i=["v","o","s","i","u","e","p","c","b","t","r","z","a"],a=["i","c","b","a"];return de=function(t,r){r=r||{},null==t.version&&(t.version=0),null==t.name&&(t.name=" "),t.media.forEach((function(e){null==e.payloads&&(e.payloads="")}));var n=r.outerOrder||i,o=r.innerOrder||a,c=[];return n.forEach((function(r){e[r].forEach((function(e){e.name in t&&null!=t[e.name]?c.push(s(r,e,t)):e.push in t&&null!=t[e.push]&&t[e.push].forEach((function(t){c.push(s(r,e,t))}))}))})),t.media.forEach((function(t){c.push(s("m",e.m[0],t)),o.forEach((function(r){e[r].forEach((function(e){e.name in t&&null!=t[e.name]?c.push(s(r,e,t)):e.push in t&&null!=t[e.push]&&t[e.push].forEach((function(t){c.push(s(r,e,t))}))}))}))})),c.join("\r\n")+"\r\n"}}function ye(){if(le)return ue;le=1;var e=be(),t=_e();return ue.write=t,ue.parse=e.parse,ue.parseParams=e.parseParams,ue.parseFmtpConfig=e.parseFmtpConfig,ue.parsePayloads=e.parsePayloads,ue.parseRemoteCandidates=e.parseRemoteCandidates,ue.parseImageAttributes=e.parseImageAttributes,ue.parseSimulcastStreamList=e.parseSimulcastStreamList,ue}var we,ve={};function Se(){if(we)return ve;we=1;var e=ve&&ve.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=ve&&ve.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=ve&&ve.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(ve,"__esModule",{value:!0}),ve.extractRtpCapabilities=function({sdpObject:e}){const t=new Map,r=[];let i=!1,a=!1;for(const n of e.media){const e=n.type;switch(e){case"audio":if(i)continue;i=!0;break;case"video":if(a)continue;a=!0;break;default:continue}for(const r of n.rtp){const s={kind:e,mimeType:`${e}/${r.codec}`,preferredPayloadType:r.payload,clockRate:r.rate,channels:r.encoding,parameters:{},rtcpFeedback:[]};t.set(s.preferredPayloadType,s)}for(const r of n.fmtp||[]){const e=s.parseParams(r.config),i=t.get(r.payload);i&&(e&&e.hasOwnProperty("profile-level-id")&&(e["profile-level-id"]=String(e["profile-level-id"])),i.parameters=e)}for(const r of n.rtcpFb||[]){const s={type:r.type,parameter:r.subtype};if(s.parameter||delete s.parameter,"*"!==r.payload){const e=t.get(r.payload);if(!e)continue;e.rtcpFeedback.push(s)}else for(const r of t.values())r.kind!==e||/.+\/rtx$/i.test(r.mimeType)||r.rtcpFeedback.push(s)}for(const t of n.ext||[]){if(t["encrypt-uri"])continue;const s={kind:e,uri:t.uri,preferredId:t.value};r.push(s)}}return{codecs:Array.from(t.values()),headerExtensions:r}},ve.extractDtlsParameters=function({sdpObject:e}){let t,r=e.setup,s=e.fingerprint;if(!r||!s){const t=(e.media||[]).find((e=>0!==e.port));t&&(r??(r=t.setup),s??(s=t.fingerprint))}if(!r)throw new Error("no a=setup found at SDP session or media level");if(!s)throw new Error("no a=fingerprint found at SDP session or media level");switch(r){case"active":t="client";break;case"passive":t="server";break;case"actpass":t="auto"}return{role:t,fingerprints:[{algorithm:s.type,value:s.hash}]}},ve.getCname=function({offerMediaObject:e}){const t=(e.ssrcs||[]).find((e=>"cname"===e.attribute));if(!t)return"";return t.value},ve.applyCodecParameters=function({offerRtpParameters:e,answerMediaObject:t}){for(const r of e.codecs){const e=r.mimeType.toLowerCase();if("audio/opus"!==e)continue;if(!(t.rtp||[]).find((e=>e.payload===r.payloadType)))continue;t.fmtp=t.fmtp||[];let i=t.fmtp.find((e=>e.payload===r.payloadType));i||(i={payload:r.payloadType,config:""},t.fmtp.push(i));const a=s.parseParams(i.config);switch(e){case"audio/opus":{const e=r.parameters["sprop-stereo"];void 0!==e&&(a.stereo=e?1:0);break}}i.config="";for(const t of Object.keys(a))i.config&&(i.config+=";"),i.config+=`${t}=${a[t]}`}};const s=r(ye());return ve}var Re,Pe={};function Ce(){if(Re)return Pe;return Re=1,Object.defineProperty(Pe,"__esModule",{value:!0}),Pe.getRtpEncodings=function({offerMediaObject:e}){const t=new Set;for(const i of e.ssrcs||[]){const e=i.id;t.add(e)}if(0===t.size)throw new Error("no a=ssrc lines found");const r=new Map;for(const i of e.ssrcGroups||[]){if("FID"!==i.semantics)continue;let[e,s]=i.ssrcs.split(/\s+/);e=Number(e),s=Number(s),t.has(e)&&(t.delete(e),t.delete(s),r.set(e,s))}for(const i of t)r.set(i,null);const s=[];for(const[i,a]of r){const e={ssrc:i};a&&(e.rtx={ssrc:a}),s.push(e)}return s},Pe.addLegacySimulcast=function({offerMediaObject:e,numStreams:t}){if(t<=1)throw new TypeError("numStreams must be greater than 1");const r=(e.ssrcs||[]).find((e=>"msid"===e.attribute));if(!r)throw new Error("a=ssrc line with msid information not found");const[s,i]=r.value.split(" "),a=r.id;let n;(e.ssrcGroups||[]).some((e=>{if("FID"!==e.semantics)return!1;const t=e.ssrcs.split(/\s+/);return Number(t[0])===a&&(n=Number(t[1]),!0)}));const o=e.ssrcs.find((e=>"cname"===e.attribute));if(!o)throw new Error("a=ssrc line with cname information not found");const c=o.value,d=[],p=[];for(let l=0;l<t;++l)d.push(a+l),n&&p.push(n+l);e.ssrcGroups=[],e.ssrcs=[],e.ssrcGroups.push({semantics:"SIM",ssrcs:d.join(" ")});for(let l=0;l<d.length;++l){const t=d[l];e.ssrcs.push({id:t,attribute:"cname",value:c}),e.ssrcs.push({id:t,attribute:"msid",value:`${s} ${i}`})}for(let l=0;l<p.length;++l){const t=d[l],r=p[l];e.ssrcs.push({id:r,attribute:"cname",value:c}),e.ssrcs.push({id:r,attribute:"msid",value:`${s} ${i}`}),e.ssrcGroups.push({semantics:"FID",ssrcs:`${t} ${r}`})}},Pe}var ke,Te={};function De(){if(ke)return Te;return ke=1,Object.defineProperty(Te,"__esModule",{value:!0}),Te.addNackSuppportForOpus=function(e){for(const t of e.codecs||[])"audio/opus"!==t.mimeType.toLowerCase()&&"audio/multiopus"!==t.mimeType.toLowerCase()||t.rtcpFeedback?.some((e=>"nack"===e.type&&!e.parameter))||(t.rtcpFeedback||(t.rtcpFeedback=[]),t.rtcpFeedback.push({type:"nack"}))},Te}var Ee,Ie={};function xe(){if(Ee)return Ie;Ee=1,Object.defineProperty(Ie,"__esModule",{value:!0}),Ie.HandlerInterface=void 0;const e=P();let t=class extends e.EnhancedEventEmitter{constructor(){super()}};return Ie.HandlerInterface=t,Ie}var Me,Oe,Le={},Ae={};function je(){if(Oe)return Le;Oe=1;var e=Le&&Le.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=Le&&Le.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=Le&&Le.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(Le,"__esModule",{value:!0}),Le.RemoteSdp=void 0;const s=r(ye()),i=_(),a=function(){if(Me)return Ae;Me=1;var e=Ae&&Ae.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=Ae&&Ae.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=Ae&&Ae.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(Ae,"__esModule",{value:!0}),Ae.OfferMediaSection=Ae.AnswerMediaSection=Ae.MediaSection=void 0;const s=r(ye()),i=r(I());let a=class{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,planB:s=!1}){if(this._mediaObject={},this._planB=s,e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(const e of t){const t={component:1};t.foundation=e.foundation,t.ip=e.address??e.ip,t.port=e.port,t.priority=e.priority,t.transport=e.protocol,t.type=e.type,e.tcpType&&(t.tcptype=e.tcpType),this._mediaObject.candidates.push(t)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return 0===this._mediaObject.port}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause(),delete this._mediaObject.ext,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}close(){this.disable(),this._mediaObject.port=0}};function n(e){const t=new RegExp("^(audio|video)/(.+)","i").exec(e.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}return Ae.MediaSection=a,Ae.AnswerMediaSection=class extends a{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:s,plainRtpParameters:a,planB:o=!1,offerMediaObject:c,offerRtpParameters:d,answerRtpParameters:p,codecOptions:l,extmapAllowMixed:h=!1}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r,planB:o}),this._mediaObject.mid=String(c.mid),this._mediaObject.type=c.type,this._mediaObject.protocol=c.protocol,a?(this._mediaObject.connection={ip:a.ip,version:a.ipVersion},this._mediaObject.port=a.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),c.type){case"audio":case"video":this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(const e of p.codecs){const t={payload:e.payloadType,codec:n(e),rate:e.clockRate};e.channels>1&&(t.encoding=e.channels),this._mediaObject.rtp.push(t);const r=i.clone(e.parameters)??{};let s=i.clone(e.rtcpFeedback)??[];if(l){const{opusStereo:t,opusFec:i,opusDtx:a,opusMaxPlaybackRate:n,opusMaxAverageBitrate:o,opusPtime:c,opusNack:p,videoGoogleStartBitrate:h,videoGoogleMaxBitrate:u,videoGoogleMinBitrate:m}=l,f=d.codecs.find((t=>t.payloadType===e.payloadType));switch(e.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":void 0!==t&&(f.parameters["sprop-stereo"]=t?1:0,r.stereo=t?1:0),void 0!==i&&(f.parameters.useinbandfec=i?1:0,r.useinbandfec=i?1:0),void 0!==a&&(f.parameters.usedtx=a?1:0,r.usedtx=a?1:0),void 0!==n&&(r.maxplaybackrate=n),void 0!==o&&(r.maxaveragebitrate=o),void 0!==c&&(f.parameters.ptime=c,r.ptime=c),p||(f.rtcpFeedback=f.rtcpFeedback.filter((e=>"nack"!==e.type||e.parameter)),s=s.filter((e=>"nack"!==e.type||e.parameter)));break;case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":void 0!==h&&(r["x-google-start-bitrate"]=h),void 0!==u&&(r["x-google-max-bitrate"]=u),void 0!==m&&(r["x-google-min-bitrate"]=m)}}const a={payload:e.payloadType,config:""};for(const e of Object.keys(r))a.config&&(a.config+=";"),a.config+=`${e}=${r[e]}`;a.config&&this._mediaObject.fmtp.push(a);for(const i of s)this._mediaObject.rtcpFb.push({payload:e.payloadType,type:i.type,subtype:i.parameter})}this._mediaObject.payloads=p.codecs.map((e=>e.payloadType)).join(" "),this._mediaObject.ext=[];for(const e of p.headerExtensions)(c.ext||[]).some((t=>t.uri===e.uri))&&this._mediaObject.ext.push({uri:e.uri,value:e.id});if(h&&"extmap-allow-mixed"===c.extmapAllowMixed&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),c.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:c.simulcast.list1},this._mediaObject.rids=[];for(const e of c.rids||[])"send"===e.direction&&this._mediaObject.rids.push({id:e.id,direction:"recv"})}else if(c.simulcast_03){this._mediaObject.simulcast_03={value:c.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(const e of c.rids||[])"send"===e.direction&&this._mediaObject.rids.push({id:e.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize",this._planB&&"video"===this._mediaObject.type&&(this._mediaObject.xGoogleFlag="conference");break;case"application":"number"==typeof c.sctpPort?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=s.port,this._mediaObject.maxMessageSize=s.maxMessageSize):c.sctpmap&&(this._mediaObject.payloads=s.port,this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:s.port,maxMessageSize:s.maxMessageSize})}}setDtlsRole(e){switch(e){case"client":this._mediaObject.setup="active";break;case"server":this._mediaObject.setup="passive";break;case"auto":this._mediaObject.setup="actpass"}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast||!this._mediaObject.simulcast.list1)return;const t={};for(const s of e)s.rid&&(t[s.rid]=s);const r=this._mediaObject.simulcast.list1,i=s.parseSimulcastStreamList(r);for(const s of i)for(const e of s)e.paused=!t[e.scid]?.active;this._mediaObject.simulcast.list1=i.map((e=>e.map((e=>`${e.paused?"~":""}${e.scid}`)).join(","))).join(";")}},Ae.OfferMediaSection=class extends a{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:s,plainRtpParameters:i,planB:a=!1,mid:o,kind:c,offerRtpParameters:d,streamId:p,trackId:l,oldDataChannelSpec:h=!1}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r,planB:a}),this._mediaObject.mid=String(o),this._mediaObject.type=c,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.protocol=s?"UDP/DTLS/SCTP":"UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),c){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._planB||(this._mediaObject.msid=`${p||"-"} ${l}`);for(const s of d.codecs){const e={payload:s.payloadType,codec:n(s),rate:s.clockRate};s.channels>1&&(e.encoding=s.channels),this._mediaObject.rtp.push(e);const t={payload:s.payloadType,config:""};for(const r of Object.keys(s.parameters))t.config&&(t.config+=";"),t.config+=`${r}=${s.parameters[r]}`;t.config&&this._mediaObject.fmtp.push(t);for(const r of s.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:s.payloadType,type:r.type,subtype:r.parameter})}this._mediaObject.payloads=d.codecs.map((e=>e.payloadType)).join(" "),this._mediaObject.ext=[];for(const s of d.headerExtensions)this._mediaObject.ext.push({uri:s.uri,value:s.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";const e=d.encodings[0],t=e.ssrc,r=e.rtx&&e.rtx.ssrc?e.rtx.ssrc:void 0;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],d.rtcp.cname&&this._mediaObject.ssrcs.push({id:t,attribute:"cname",value:d.rtcp.cname}),this._planB&&this._mediaObject.ssrcs.push({id:t,attribute:"msid",value:`${p||"-"} ${l}`}),r&&(d.rtcp.cname&&this._mediaObject.ssrcs.push({id:r,attribute:"cname",value:d.rtcp.cname}),this._planB&&this._mediaObject.ssrcs.push({id:r,attribute:"msid",value:`${p||"-"} ${l}`}),this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${t} ${r}`}));break}case"application":h?(this._mediaObject.payloads=s.port,this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:s.port,maxMessageSize:s.maxMessageSize}):(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=s.port,this._mediaObject.maxMessageSize=s.maxMessageSize)}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}planBReceive({offerRtpParameters:e,streamId:t,trackId:r}){const s=e.encodings[0],i=s.ssrc,a=s.rtx&&s.rtx.ssrc?s.rtx.ssrc:void 0,o=this._mediaObject.payloads.split(" ");for(const c of e.codecs){if(o.includes(String(c.payloadType)))continue;const e={payload:c.payloadType,codec:n(c),rate:c.clockRate};c.channels>1&&(e.encoding=c.channels),this._mediaObject.rtp.push(e);const t={payload:c.payloadType,config:""};for(const r of Object.keys(c.parameters))t.config&&(t.config+=";"),t.config+=`${r}=${c.parameters[r]}`;t.config&&this._mediaObject.fmtp.push(t);for(const r of c.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:c.payloadType,type:r.type,subtype:r.parameter})}this._mediaObject.payloads+=` ${e.codecs.filter((e=>!this._mediaObject.payloads.includes(e.payloadType))).map((e=>e.payloadType)).join(" ")}`,this._mediaObject.payloads=this._mediaObject.payloads.trim(),e.rtcp.cname&&this._mediaObject.ssrcs.push({id:i,attribute:"cname",value:e.rtcp.cname}),this._mediaObject.ssrcs.push({id:i,attribute:"msid",value:`${t||"-"} ${r}`}),a&&(e.rtcp.cname&&this._mediaObject.ssrcs.push({id:a,attribute:"cname",value:e.rtcp.cname}),this._mediaObject.ssrcs.push({id:a,attribute:"msid",value:`${t||"-"} ${r}`}),this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${i} ${a}`}))}planBStopReceiving({offerRtpParameters:e}){const t=e.encodings[0],r=t.ssrc,s=t.rtx&&t.rtx.ssrc?t.rtx.ssrc:void 0;this._mediaObject.ssrcs=this._mediaObject.ssrcs.filter((e=>e.id!==r&&e.id!==s)),s&&(this._mediaObject.ssrcGroups=this._mediaObject.ssrcGroups.filter((e=>e.ssrcs!==`${r} ${s}`)))}},Ae}(),n=new i.Logger("RemoteSdp");return Le.RemoteSdp=class{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:s,plainRtpParameters:i,planB:a=!1}){if(this._mediaSections=[],this._midToIndex=new Map,this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=s,this._plainRtpParameters=i,this._planB=a,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:1e4,sessionVersion:0,username:"mediasoup-client"},name:"-",timing:{start:0,stop:0},media:[]},e&&e.iceLite&&(this._sdpObject.icelite="ice-lite"),r){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};const e=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[e-1].algorithm,hash:r.fingerprints[e-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){n.debug("updateIceParameters() [iceParameters:%o]",e),this._iceParameters=e,this._sdpObject.icelite=e.iceLite?"ice-lite":void 0;for(const t of this._mediaSections)t.setIceParameters(e)}updateDtlsRole(e){n.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(const t of this._mediaSections)t.setDtlsRole(e)}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){const t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:r,answerRtpParameters:s,codecOptions:i,extmapAllowMixed:n=!1}){const o=new a.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,planB:this._planB,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:s,codecOptions:i,extmapAllowMixed:n});t?this._replaceMediaSection(o,t):this._midToIndex.has(o.mid)?this._replaceMediaSection(o):this._addMediaSection(o)}receive({mid:e,kind:t,offerRtpParameters:r,streamId:s,trackId:i}){const n=this._midToIndex.get(e);let o;if(void 0!==n&&(o=this._mediaSections[n]),o)o.planBReceive({offerRtpParameters:r,streamId:s,trackId:i}),this._replaceMediaSection(o);else{o=new a.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,planB:this._planB,mid:e,kind:t,offerRtpParameters:r,streamId:s,trackId:i});const n=this._mediaSections.find((e=>e.closed));n?this._replaceMediaSection(o,n.mid):this._addMediaSection(o)}}pauseMediaSection(e){this._findMediaSection(e).pause()}resumeSendingMediaSection(e){this._findMediaSection(e).resume()}resumeReceivingMediaSection(e){this._findMediaSection(e).resume()}disableMediaSection(e){this._findMediaSection(e).disable()}closeMediaSection(e){const t=this._findMediaSection(e);return e===this._firstMid?(n.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this._regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){const r=this._findMediaSection(e);r.muxSimulcastStreams(t),this._replaceMediaSection(r)}planBStopReceiving({mid:e,offerRtpParameters:t}){const r=this._findMediaSection(e);r.planBStopReceiving({offerRtpParameters:t}),this._replaceMediaSection(r)}sendSctpAssociation({offerMediaObject:e}){const t=new a.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e});this._addMediaSection(t)}receiveSctpAssociation({oldDataChannelSpec:e=!1}={}){const t=new a.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,mid:"datachannel",kind:"application",oldDataChannelSpec:e});this._addMediaSection(t)}getSdp(){return this._sdpObject.origin.sessionVersion++,s.write(this._sdpObject)}_addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this._regenerateBundleMids()}_replaceMediaSection(e,t){if("string"==typeof t){const r=this._midToIndex.get(t);if(void 0===r)throw new Error(`no media section found for reuseMid '${t}'`);const s=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(s.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this._regenerateBundleMids()}else{const t=this._midToIndex.get(e.mid);if(void 0===t)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[t]=e,this._sdpObject.media[t]=e.getObject()}}_findMediaSection(e){const t=this._midToIndex.get(e);if(void 0===t)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}_regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter((e=>!e.closed)).map((e=>e.mid)).join(" "))}},Le}var Ne,Be,Fe={};function $e(){if(Ne)return Fe;Ne=1,Object.defineProperty(Fe,"__esModule",{value:!0}),Fe.parse=function(t){const r=e.exec(t||"");return r?{spatialLayers:Number(r[1]),temporalLayers:Number(r[2])}:{spatialLayers:1,temporalLayers:1}};const e=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");return Fe}var Ue,qe={};var Ve,We={};var Ke,He,Ge={},ze={};function Je(){if(Ke)return ze;return Ke=1,Object.defineProperty(ze,"__esModule",{value:!0}),ze.getRtpEncodings=function({offerMediaObject:e,track:t}){const r=new Set;for(const a of e.ssrcs||[]){if("msid"!==a.attribute)continue;if(a.value.split(" ")[1]===t.id){const e=a.id;r.add(e)}}if(0===r.size)throw new Error(`a=ssrc line with msid information not found [track.id:${t.id}]`);const s=new Map;for(const a of e.ssrcGroups||[]){if("FID"!==a.semantics)continue;let[e,t]=a.ssrcs.split(/\s+/);e=Number(e),t=Number(t),r.has(e)&&(r.delete(e),r.delete(t),s.set(e,t))}for(const a of r)s.set(a,null);const i=[];for(const[a,n]of s){const e={ssrc:a};n&&(e.rtx={ssrc:n}),i.push(e)}return i},ze.addLegacySimulcast=function({offerMediaObject:e,track:t,numStreams:r}){if(r<=1)throw new TypeError("numStreams must be greater than 1");let s,i,a;if(!(e.ssrcs||[]).find((e=>{if("msid"!==e.attribute)return!1;return e.value.split(" ")[1]===t.id&&(s=e.id,a=e.value.split(" ")[0],!0)})))throw new Error(`a=ssrc line with msid information not found [track.id:${t.id}]`);(e.ssrcGroups||[]).some((e=>{if("FID"!==e.semantics)return!1;const t=e.ssrcs.split(/\s+/);return Number(t[0])===s&&(i=Number(t[1]),!0)}));const n=e.ssrcs.find((e=>"cname"===e.attribute&&e.id===s));if(!n)throw new Error(`a=ssrc line with cname information not found [track.id:${t.id}]`);const o=n.value,c=[],d=[];for(let p=0;p<r;++p)c.push(s+p),i&&d.push(i+p);e.ssrcGroups=e.ssrcGroups||[],e.ssrcs=e.ssrcs||[],e.ssrcGroups.push({semantics:"SIM",ssrcs:c.join(" ")});for(let p=0;p<c.length;++p){const r=c[p];e.ssrcs.push({id:r,attribute:"cname",value:o}),e.ssrcs.push({id:r,attribute:"msid",value:`${a} ${t.id}`})}for(let p=0;p<d.length;++p){const r=c[p],s=d[p];e.ssrcs.push({id:s,attribute:"cname",value:o}),e.ssrcs.push({id:s,attribute:"msid",value:`${a} ${t.id}`}),e.ssrcGroups.push({semantics:"FID",ssrcs:`${r} ${s}`})}},ze}var Qe,Xe={};var Ye,Ze={};var et,tt={};var rt,st={};var it,at={};var nt,ot,ct={},dt={};function pt(){if(ot)return ct;ot=1;var e=ct&&ct.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=ct&&ct.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=ct&&ct.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(ct,"__esModule",{value:!0}),ct.Edge11=void 0;const s=_(),i=T(),a=r(I()),n=r(B()),o=r(function(){if(nt)return dt;nt=1;var e=dt&&dt.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=dt&&dt.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=dt&&dt.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(dt,"__esModule",{value:!0}),dt.getCapabilities=function(){const e=RTCRtpReceiver.getCapabilities(),t=s.clone(e);for(const r of t.codecs??[]){if(r.channels=r.numChannels,delete r.numChannels,r.mimeType=r.mimeType||`${r.kind}/${r.name}`,r.parameters){const e=r.parameters;e.apt&&(e.apt=Number(e.apt)),e["packetization-mode"]&&(e["packetization-mode"]=Number(e["packetization-mode"]))}for(const e of r.rtcpFeedback||[])e.parameter||(e.parameter="")}return t},dt.mangleRtpParameters=function(e){const t=s.clone(e);t.mid&&(t.muxId=t.mid,delete t.mid);for(const r of t.codecs)r.channels&&(r.numChannels=r.channels,delete r.channels),r.mimeType&&!r.name&&(r.name=r.mimeType.split("/")[1]),delete r.mimeType;return t};const s=r(I());return dt}()),c=xe(),d=new s.Logger("Edge11");let p=class e extends c.HandlerInterface{static createFactory(){return()=>new e}constructor(){super(),this._rtpSenders=new Map,this._rtpReceivers=new Map,this._nextSendLocalId=0,this._transportReady=!1}get name(){return"Edge11"}close(){d.debug("close()");try{this._iceGatherer.close()}catch(e){}try{this._iceTransport.stop()}catch(e){}try{this._dtlsTransport.stop()}catch(e){}for(const t of this._rtpSenders.values())try{t.stop()}catch(e){}for(const t of this._rtpReceivers.values())try{t.stop()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){return d.debug("getNativeRtpCapabilities()"),o.getCapabilities()}async getNativeSctpCapabilities(){return d.debug("getNativeSctpCapabilities()"),{numStreams:{OS:0,MIS:0}}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:o,iceTransportPolicy:c,additionalSettings:p,proprietaryConstraints:l,extendedRtpCapabilities:h}){d.debug("run()"),this._sendingRtpParametersByKind={audio:n.getSendingRtpParameters("audio",h),video:n.getSendingRtpParameters("video",h)},this._remoteIceParameters=t,this._remoteIceCandidates=r,this._remoteDtlsParameters=s,this._cname=`CNAME-${a.generateRandomNumber()}`,this.setIceGatherer({iceServers:o,iceTransportPolicy:c}),this.setIceTransport(),this.setDtlsTransport()}async updateIceServers(e){throw new i.UnsupportedError("not supported")}async restartIce(e){if(d.debug("restartIce()"),this._remoteIceParameters=e,this._transportReady){d.debug("restartIce() | calling iceTransport.start()"),this._iceTransport.start(this._iceGatherer,e,"controlling");for(const e of this._remoteIceCandidates)this._iceTransport.addRemoteCandidate(e);this._iceTransport.addRemoteCandidate({})}}async getTransportStats(){return this._iceTransport.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:s}){d.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"}),d.debug("send() | calling new RTCRtpSender()");const i=new RTCRtpSender(e,this._dtlsTransport),c=a.clone(this._sendingRtpParametersByKind[e.kind]);c.codecs=n.reduceCodecs(c.codecs,s);const p=c.codecs.some((e=>/.+\/rtx$/i.test(e.mimeType)));t||(t=[{}]);for(const n of t)n.ssrc=a.generateRandomNumber(),p&&(n.rtx={ssrc:a.generateRandomNumber()});c.encodings=t,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0};const l=o.mangleRtpParameters(c);d.debug("send() | calling rtpSender.send() [params:%o]",l),await i.send(l);const h=String(this._nextSendLocalId);return this._nextSendLocalId++,this._rtpSenders.set(h,i),{localId:h,rtpParameters:c,rtpSender:i}}async stopSending(e){d.debug("stopSending() [localId:%s]",e);const t=this._rtpSenders.get(e);if(!t)throw new Error("RTCRtpSender not found");this._rtpSenders.delete(e);try{d.debug("stopSending() | calling rtpSender.stop()"),t.stop()}catch(r){throw d.warn("stopSending() | rtpSender.stop() failed:%o",r),r}}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){t?d.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):d.debug("replaceTrack() [localId:%s, no track]",e);const r=this._rtpSenders.get(e);if(!r)throw new Error("RTCRtpSender not found");r.setTrack(t)}async setMaxSpatialLayer(e,t){d.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._rtpSenders.get(e);if(!r)throw new Error("RTCRtpSender not found");const s=r.getParameters();s.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.setParameters(s)}async setRtpEncodingParameters(e,t){d.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._rtpSenders.get(e);if(!r)throw new Error("RTCRtpSender not found");const s=r.getParameters();s.encodings.forEach(((e,r)=>{s.encodings[r]={...e,...t}})),await r.setParameters(s)}async getSenderStats(e){const t=this._rtpSenders.get(e);if(!t)throw new Error("RTCRtpSender not found");return t.getStats()}async sendDataChannel(e){throw new i.UnsupportedError("not implemented")}async receive(e){const t=[];for(const r of e){const{trackId:e,kind:t}=r;d.debug("receive() [trackId:%s, kind:%s]",e,t)}this._transportReady||await this.setupTransport({localDtlsRole:"server"});for(const r of e){const{trackId:e,kind:s,rtpParameters:i}=r;d.debug("receive() | calling new RTCRtpReceiver()");const a=new RTCRtpReceiver(this._dtlsTransport,s);a.addEventListener("error",(e=>{d.error('rtpReceiver "error" event [event:%o]',e)}));const n=o.mangleRtpParameters(i);d.debug("receive() | calling rtpReceiver.receive() [params:%o]",n),await a.receive(n);const c=e;this._rtpReceivers.set(c,a),t.push({localId:c,track:a.track,rtpReceiver:a})}return t}async stopReceiving(e){for(const r of e){d.debug("stopReceiving() [localId:%s]",r);const e=this._rtpReceivers.get(r);if(!e)throw new Error("RTCRtpReceiver not found");this._rtpReceivers.delete(r);try{d.debug("stopReceiving() | calling rtpReceiver.stop()"),e.stop()}catch(t){d.warn("stopReceiving() | rtpReceiver.stop() failed:%o",t)}}}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){const t=this._rtpReceivers.get(e);if(!t)throw new Error("RTCRtpReceiver not found");return t.getStats()}async receiveDataChannel(e){throw new i.UnsupportedError("not implemented")}setIceGatherer({iceServers:e,iceTransportPolicy:t}){const r=new RTCIceGatherer({iceServers:e||[],gatherPolicy:t||"all"});r.addEventListener("error",(e=>{d.error('iceGatherer "error" event [event:%o]',e)}));try{r.gather()}catch(s){d.debug("setIceGatherer() | iceGatherer.gather() failed: %s",s.toString())}this._iceGatherer=r}setIceTransport(){const e=new RTCIceTransport(this._iceGatherer);e.addEventListener("statechange",(()=>{switch(e.state){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}})),e.addEventListener("icestatechange",(()=>{switch(e.state){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}})),e.addEventListener("candidatepairchange",(e=>{d.debug('iceTransport "candidatepairchange" event [pair:%o]',e.pair)})),this._iceTransport=e}setDtlsTransport(){const e=new RTCDtlsTransport(this._iceTransport);e.addEventListener("statechange",(()=>{d.debug('dtlsTransport "statechange" event [state:%s]',e.state)})),e.addEventListener("dtlsstatechange",(()=>{d.debug('dtlsTransport "dtlsstatechange" event [state:%s]',e.state),"closed"===e.state&&this.emit("@connectionstatechange","closed")})),e.addEventListener("error",(e=>{d.error('dtlsTransport "error" event [event:%o]',e)})),this._dtlsTransport=e}async setupTransport({localDtlsRole:e}){d.debug("setupTransport()");const t=this._dtlsTransport.getLocalParameters();t.role=e,await new Promise(((e,r)=>{this.safeEmit("@connect",{dtlsParameters:t},e,r)})),this._iceTransport.start(this._iceGatherer,this._remoteIceParameters,"controlling");for(const r of this._remoteIceCandidates)this._iceTransport.addRemoteCandidate(r);this._iceTransport.addRemoteCandidate({}),this._remoteDtlsParameters.fingerprints=this._remoteDtlsParameters.fingerprints.filter((e=>"sha-256"===e.algorithm||"sha-384"===e.algorithm||"sha-512"===e.algorithm)),this._dtlsTransport.start(this._remoteDtlsParameters),this._transportReady=!0}};return ct.Edge11=p,ct}var lt,ht={};var ut,mt,ft={};function gt(){if(mt)return h;mt=1;var e=h&&h.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=h&&h.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=h&&h.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(h,"__esModule",{value:!0}),h.Device=void 0,h.detectDevice=D;const s=f(),i=_(),a=P(),n=T(),o=r(I()),c=r(B()),d=ne(),p=function(){if(Be)return he;Be=1;var e=he&&he.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=he&&he.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=he&&he.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(he,"__esModule",{value:!0}),he.Chrome111=void 0;const s=r(ye()),i=_(),a=r(I()),n=r(B()),o=r(Se()),c=r(Ce()),d=r(De()),p=T(),l=xe(),h=je(),u=$e(),m=new i.Logger("Chrome111"),f={OS:1024,MIS:1024};let g=class e extends l.HandlerInterface{static createFactory(){return()=>new e}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome111"}close(){if(m.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){m.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");const r=await e.createOffer();try{e.close()}catch(t){}const i=s.parse(r.sdp),a=o.extractRtpCapabilities({sdpObject:i});return d.addNackSuppportForOpus(a),a}catch(t){try{e.close()}catch(r){}throw t}}async getNativeSctpCapabilities(){return m.debug("getNativeSctpCapabilities()"),{numStreams:f}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,extendedRtpCapabilities:p}){this.assertNotClosed(),m.debug("run()"),this._direction=e,this._remoteSdp=new h.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._sendingRtpParametersByKind={audio:n.getSendingRtpParameters("audio",p),video:n.getSendingRtpParameters("video",p)},this._sendingRemoteRtpParametersByKind={audio:n.getSendingRemoteRtpParameters("audio",p),video:n.getSendingRemoteRtpParameters("video",p)},s.role&&"auto"!==s.role&&(this._forcedLocalDtlsRole="server"===s.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:o||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...c},d),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):(m.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}})))}async updateIceServers(e){this.assertNotClosed(),m.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),m.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});m.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();m.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i,onRtpSender:d}){if(this.assertNotClosed(),this.assertSendDirection(),m.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&t.length>1){let e=1;for(const r of t){const t=r.scalabilityMode?(0,u.parse)(r.scalabilityMode).temporalLayers:3;t>e&&(e=t)}t.forEach(((t,r)=>{t.rid=`r${r}`,t.scalabilityMode=`L1T${e}`}))}const p=a.clone(this._sendingRtpParametersByKind[e.kind]);p.codecs=n.reduceCodecs(p.codecs,i);const l=a.clone(this._sendingRemoteRtpParametersByKind[e.kind]);l.codecs=n.reduceCodecs(l.codecs,i);const h=this._remoteSdp.getNextMediaSectionIdx(),f=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:t});d&&d(f.sender);const g=await this._pc.createOffer();let b=s.parse(g.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:b}),m.debug("send() | calling pc.setLocalDescription() [offer:%o]",g),await this._pc.setLocalDescription(g);const _=f.mid;p.mid=_,b=s.parse(this._pc.localDescription.sdp);const y=b.media[h.idx];if(p.rtcp.cname=o.getCname({offerMediaObject:y}),t)if(1===t.length){const e=c.getRtpEncodings({offerMediaObject:y});Object.assign(e[0],t[0]),p.encodings=e}else p.encodings=t;else p.encodings=c.getRtpEncodings({offerMediaObject:y});this._remoteSdp.send({offerMediaObject:y,reuseMid:h.reuseMid,offerRtpParameters:p,answerRtpParameters:l,codecOptions:r,extmapAllowMixed:!0});const w={type:"answer",sdp:this._remoteSdp.getSdp()};return m.debug("send() | calling pc.setRemoteDescription() [answer:%o]",w),await this._pc.setRemoteDescription(w),this._mapMidTransceiver.set(_,f),{localId:_,rtpParameters:p,rtpSender:f.sender}}async stopSending(e){if(this.assertSendDirection(),m.debug("stopSending() [localId:%s]",e),this._closed)return;const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(i){}const r=await this._pc.createOffer();m.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),m.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();m.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),m.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";const r=await this._pc.createOffer();m.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?m.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):m.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),m.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();m.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),m.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach(((e,r)=>{s.encodings[r]={...e,...t}})),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();m.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:a}){this.assertNotClosed(),this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:a};m.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%f.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=s.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),m.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const i={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const s of e){const{trackId:e,kind:t,rtpParameters:i,streamId:a}=s;m.debug("receive() [trackId:%s, kind:%s]",e,t);const n=i.mid||String(this._mapMidTransceiver.size);r.set(e,n),this._remoteSdp.receive({mid:n,kind:t,offerRtpParameters:i,streamId:a||i.rtcp.cname,trackId:e})}const i={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(const s of e){const{trackId:e,onRtpReceiver:t}=s;if(t){const s=r.get(e),i=this._pc.getTransceivers().find((e=>e.mid===s));if(!i)throw new Error("transceiver not found");t(i.receiver)}}let a=await this._pc.createAnswer();const n=s.parse(a.sdp);for(const s of e){const{trackId:e,rtpParameters:t}=s,i=r.get(e),a=n.media.find((e=>String(e.mid)===i));o.applyCodecParameters({offerRtpParameters:t,answerMediaObject:a})}a={type:"answer",sdp:s.write(n)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:n}),m.debug("receive() | calling pc.setLocalDescription() [answer:%o]",a),await this._pc.setLocalDescription(a);for(const s of e){const{trackId:e}=s,i=r.get(e),a=this._pc.getTransceivers().find((e=>e.mid===i));if(!a)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,a),t.push({localId:i,track:a.receiver.track,rtpReceiver:a.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const s of e){m.debug("stopReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();m.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){m.debug("pauseReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();m.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){m.debug("resumeReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();m.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o,protocol:r};m.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=s.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}m.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=s.parse(this._pc.localDescription.sdp));const r=o.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new p.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return he.Chrome111=g,he}(),l=function(){if(Ue)return qe;Ue=1;var e=qe&&qe.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=qe&&qe.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=qe&&qe.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(qe,"__esModule",{value:!0}),qe.Chrome74=void 0;const s=r(ye()),i=_(),a=r(I()),n=r(B()),o=r(Se()),c=r(Ce()),d=r(De()),p=T(),l=xe(),h=je(),u=$e(),m=new i.Logger("Chrome74"),f={OS:1024,MIS:1024};let g=class e extends l.HandlerInterface{static createFactory(){return()=>new e}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome74"}close(){if(m.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){m.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");const r=await e.createOffer();try{e.close()}catch(t){}const i=s.parse(r.sdp),a=o.extractRtpCapabilities({sdpObject:i});return d.addNackSuppportForOpus(a),a}catch(t){try{e.close()}catch(r){}throw t}}async getNativeSctpCapabilities(){return m.debug("getNativeSctpCapabilities()"),{numStreams:f}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,extendedRtpCapabilities:p}){m.debug("run()"),this._direction=e,this._remoteSdp=new h.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._sendingRtpParametersByKind={audio:n.getSendingRtpParameters("audio",p),video:n.getSendingRtpParameters("video",p)},this._sendingRemoteRtpParametersByKind={audio:n.getSendingRemoteRtpParameters("audio",p),video:n.getSendingRemoteRtpParameters("video",p)},s.role&&"auto"!==s.role&&(this._forcedLocalDtlsRole="server"===s.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:o||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...c},d),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):(m.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}})))}async updateIceServers(e){this.assertNotClosed(),m.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),m.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});m.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();m.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){this.assertNotClosed(),this.assertSendDirection(),m.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&t.length>1&&t.forEach(((e,t)=>{e.rid=`r${t}`}));const d=a.clone(this._sendingRtpParametersByKind[e.kind]);d.codecs=n.reduceCodecs(d.codecs,i);const p=a.clone(this._sendingRemoteRtpParametersByKind[e.kind]);p.codecs=n.reduceCodecs(p.codecs,i);const l=this._remoteSdp.getNextMediaSectionIdx(),h=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:t});let f,g=await this._pc.createOffer(),b=s.parse(g.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:b});let _=!1;const y=(0,u.parse)((t||[{}])[0].scalabilityMode);t&&1===t.length&&y.spatialLayers>1&&"video/vp9"===d.codecs[0].mimeType.toLowerCase()&&(m.debug("send() | enabling legacy simulcast for VP9 SVC"),_=!0,b=s.parse(g.sdp),f=b.media[l.idx],c.addLegacySimulcast({offerMediaObject:f,numStreams:y.spatialLayers}),g={type:"offer",sdp:s.write(b)}),m.debug("send() | calling pc.setLocalDescription() [offer:%o]",g),await this._pc.setLocalDescription(g);const w=h.mid;if(d.mid=w,b=s.parse(this._pc.localDescription.sdp),f=b.media[l.idx],d.rtcp.cname=o.getCname({offerMediaObject:f}),t)if(1===t.length){let e=c.getRtpEncodings({offerMediaObject:f});Object.assign(e[0],t[0]),_&&(e=[e[0]]),d.encodings=e}else d.encodings=t;else d.encodings=c.getRtpEncodings({offerMediaObject:f});if(d.encodings.length>1&&("video/vp8"===d.codecs[0].mimeType.toLowerCase()||"video/h264"===d.codecs[0].mimeType.toLowerCase()))for(const s of d.encodings)s.scalabilityMode?s.scalabilityMode=`L1T${y.temporalLayers}`:s.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:f,reuseMid:l.reuseMid,offerRtpParameters:d,answerRtpParameters:p,codecOptions:r,extmapAllowMixed:!0});const v={type:"answer",sdp:this._remoteSdp.getSdp()};return m.debug("send() | calling pc.setRemoteDescription() [answer:%o]",v),await this._pc.setRemoteDescription(v),this._mapMidTransceiver.set(w,h),{localId:w,rtpParameters:d,rtpSender:h.sender}}async stopSending(e){if(this.assertSendDirection(),m.debug("stopSending() [localId:%s]",e),this._closed)return;const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(i){}const r=await this._pc.createOffer();m.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),m.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();m.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),m.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";const r=await this._pc.createOffer();m.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?m.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):m.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),m.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();m.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),m.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach(((e,r)=>{s.encodings[r]={...e,...t}})),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();m.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:a}){this.assertNotClosed(),this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:a};m.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%f.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=s.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),m.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const i={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const s of e){const{trackId:e,kind:t,rtpParameters:i,streamId:a}=s;m.debug("receive() [trackId:%s, kind:%s]",e,t);const n=i.mid||String(this._mapMidTransceiver.size);r.set(e,n),this._remoteSdp.receive({mid:n,kind:t,offerRtpParameters:i,streamId:a||i.rtcp.cname,trackId:e})}const i={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let a=await this._pc.createAnswer();const n=s.parse(a.sdp);for(const s of e){const{trackId:e,rtpParameters:t}=s,i=r.get(e),a=n.media.find((e=>String(e.mid)===i));o.applyCodecParameters({offerRtpParameters:t,answerMediaObject:a})}a={type:"answer",sdp:s.write(n)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:n}),m.debug("receive() | calling pc.setLocalDescription() [answer:%o]",a),await this._pc.setLocalDescription(a);for(const s of e){const{trackId:e}=s,i=r.get(e),a=this._pc.getTransceivers().find((e=>e.mid===i));if(!a)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,a),t.push({localId:i,track:a.receiver.track,rtpReceiver:a.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const s of e){m.debug("stopReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();m.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){m.debug("pauseReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();m.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){m.debug("resumeReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();m.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o,protocol:r};m.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=s.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}m.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=s.parse(this._pc.localDescription.sdp));const r=o.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new p.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return qe.Chrome74=g,qe}(),u=function(){if(Ve)return We;Ve=1;var e=We&&We.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=We&&We.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=We&&We.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(We,"__esModule",{value:!0}),We.Chrome70=void 0;const s=r(ye()),i=_(),a=r(I()),n=r(B()),o=r(Se()),c=r(Ce()),d=xe(),p=je(),l=$e(),h=new i.Logger("Chrome70"),u={OS:1024,MIS:1024};let m=class e extends d.HandlerInterface{static createFactory(){return()=>new e}constructor(){super(),this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome70"}close(){if(h.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){h.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");const r=await e.createOffer();try{e.close()}catch(t){}const i=s.parse(r.sdp);return o.extractRtpCapabilities({sdpObject:i})}catch(t){try{e.close()}catch(r){}throw t}}async getNativeSctpCapabilities(){return h.debug("getNativeSctpCapabilities()"),{numStreams:u}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,extendedRtpCapabilities:l}){h.debug("run()"),this._direction=e,this._remoteSdp=new p.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._sendingRtpParametersByKind={audio:n.getSendingRtpParameters("audio",l),video:n.getSendingRtpParameters("video",l)},this._sendingRemoteRtpParametersByKind={audio:n.getSendingRemoteRtpParameters("audio",l),video:n.getSendingRemoteRtpParameters("video",l)},s.role&&"auto"!==s.role&&(this._forcedLocalDtlsRole="server"===s.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:o||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...c},d),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(h.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}}))}async updateIceServers(e){h.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(h.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});h.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};h.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};h.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();h.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){this.assertSendDirection(),h.debug("send() [kind:%s, track.id:%s]",e.kind,e.id);const d=a.clone(this._sendingRtpParametersByKind[e.kind]);d.codecs=n.reduceCodecs(d.codecs,i);const p=a.clone(this._sendingRemoteRtpParametersByKind[e.kind]);p.codecs=n.reduceCodecs(p.codecs,i);const u=this._remoteSdp.getNextMediaSectionIdx(),m=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});let f,g=await this._pc.createOffer(),b=s.parse(g.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:b}),t&&t.length>1&&(h.debug("send() | enabling legacy simulcast"),b=s.parse(g.sdp),f=b.media[u.idx],c.addLegacySimulcast({offerMediaObject:f,numStreams:t.length}),g={type:"offer",sdp:s.write(b)});let _=!1;const y=(0,l.parse)((t||[{}])[0].scalabilityMode);if(t&&1===t.length&&y.spatialLayers>1&&"video/vp9"===d.codecs[0].mimeType.toLowerCase()&&(h.debug("send() | enabling legacy simulcast for VP9 SVC"),_=!0,b=s.parse(g.sdp),f=b.media[u.idx],c.addLegacySimulcast({offerMediaObject:f,numStreams:y.spatialLayers}),g={type:"offer",sdp:s.write(b)}),h.debug("send() | calling pc.setLocalDescription() [offer:%o]",g),await this._pc.setLocalDescription(g),t){h.debug("send() | applying given encodings");const e=m.sender.getParameters();for(let r=0;r<(e.encodings||[]).length;++r){const s=e.encodings[r],i=t[r];if(!i)break;e.encodings[r]=Object.assign(s,i)}await m.sender.setParameters(e)}const w=m.mid;if(d.mid=w,b=s.parse(this._pc.localDescription.sdp),f=b.media[u.idx],d.rtcp.cname=o.getCname({offerMediaObject:f}),d.encodings=c.getRtpEncodings({offerMediaObject:f}),t)for(let s=0;s<d.encodings.length;++s)t[s]&&Object.assign(d.encodings[s],t[s]);if(_&&(d.encodings=[d.encodings[0]]),d.encodings.length>1&&("video/vp8"===d.codecs[0].mimeType.toLowerCase()||"video/h264"===d.codecs[0].mimeType.toLowerCase()))for(const s of d.encodings)s.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:f,reuseMid:u.reuseMid,offerRtpParameters:d,answerRtpParameters:p,codecOptions:r});const v={type:"answer",sdp:this._remoteSdp.getSdp()};return h.debug("send() | calling pc.setRemoteDescription() [answer:%o]",v),await this._pc.setRemoteDescription(v),this._mapMidTransceiver.set(w,m),{localId:w,rtpParameters:d,rtpSender:m.sender}}async stopSending(e){this.assertSendDirection(),h.debug("stopSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(i){}const r=await this._pc.createOffer();h.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};h.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s),this._mapMidTransceiver.delete(e)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){this.assertSendDirection(),t?h.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):h.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertSendDirection(),h.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();h.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};h.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertSendDirection(),h.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach(((e,r)=>{s.encodings[r]={...e,...t}})),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();h.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};h.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:a}){this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:a};h.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%u.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=s.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),h.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const i={type:"answer",sdp:this._remoteSdp.getSdp()};h.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[],r=new Map;for(const s of e){const{trackId:e,kind:t,rtpParameters:i,streamId:a}=s;h.debug("receive() [trackId:%s, kind:%s]",e,t);const n=i.mid||String(this._mapMidTransceiver.size);r.set(e,n),this._remoteSdp.receive({mid:n,kind:t,offerRtpParameters:i,streamId:a||i.rtcp.cname,trackId:e})}const i={type:"offer",sdp:this._remoteSdp.getSdp()};h.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let a=await this._pc.createAnswer();const n=s.parse(a.sdp);for(const s of e){const{trackId:e,rtpParameters:t}=s,i=r.get(e),a=n.media.find((e=>String(e.mid)===i));o.applyCodecParameters({offerRtpParameters:t,answerMediaObject:a})}a={type:"answer",sdp:s.write(n)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:n}),h.debug("receive() | calling pc.setLocalDescription() [answer:%o]",a),await this._pc.setLocalDescription(a);for(const s of e){const{trackId:e}=s,i=r.get(e),a=this._pc.getTransceivers().find((e=>e.mid===i));if(!a)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,a),t.push({localId:i,track:a.receiver.track,rtpReceiver:a.receiver})}return t}async stopReceiving(e){this.assertRecvDirection();for(const s of e){h.debug("stopReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};h.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();h.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmitTime:n,maxRetransmits:o,protocol:r};h.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};h.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=s.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}h.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=s.parse(this._pc.localDescription.sdp));const r=o.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return We.Chrome70=m,We}(),m=function(){if(He)return Ge;He=1;var e=Ge&&Ge.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=Ge&&Ge.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=Ge&&Ge.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(Ge,"__esModule",{value:!0}),Ge.Chrome67=void 0;const s=r(ye()),i=_(),a=r(I()),n=r(B()),o=r(Se()),c=r(Je()),d=xe(),p=je(),l=new i.Logger("Chrome67"),h={OS:1024,MIS:1024};let u=class e extends d.HandlerInterface{static createFactory(){return()=>new e}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdRtpSender=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome67"}close(){if(l.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){l.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{const r=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(t){}const i=s.parse(r.sdp);return o.extractRtpCapabilities({sdpObject:i})}catch(t){try{e.close()}catch(r){}throw t}}async getNativeSctpCapabilities(){return l.debug("getNativeSctpCapabilities()"),{numStreams:h}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,extendedRtpCapabilities:h}){l.debug("run()"),this._direction=e,this._remoteSdp=new p.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,planB:!0}),this._sendingRtpParametersByKind={audio:n.getSendingRtpParameters("audio",h),video:n.getSendingRtpParameters("video",h)},this._sendingRemoteRtpParametersByKind={audio:n.getSendingRemoteRtpParameters("audio",h),video:n.getSendingRemoteRtpParameters("video",h)},s.role&&"auto"!==s.role&&(this._forcedLocalDtlsRole="server"===s.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:o||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b",...c},d),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(l.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}}))}async updateIceServers(e){l.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(l.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});l.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();l.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){this.assertSendDirection(),l.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),i&&l.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addTrack(e,this._sendStream);let d,p=await this._pc.createOffer(),h=s.parse(p.sdp);const u=a.clone(this._sendingRtpParametersByKind[e.kind]);u.codecs=n.reduceCodecs(u.codecs);const m=a.clone(this._sendingRemoteRtpParametersByKind[e.kind]);if(m.codecs=n.reduceCodecs(m.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:h}),"video"===e.kind&&t&&t.length>1&&(l.debug("send() | enabling simulcast"),h=s.parse(p.sdp),d=h.media.find((e=>"video"===e.type)),c.addLegacySimulcast({offerMediaObject:d,track:e,numStreams:t.length}),p={type:"offer",sdp:s.write(h)}),l.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p),h=s.parse(this._pc.localDescription.sdp),d=h.media.find((t=>t.type===e.kind)),u.rtcp.cname=o.getCname({offerMediaObject:d}),u.encodings=c.getRtpEncodings({offerMediaObject:d,track:e}),t)for(let s=0;s<u.encodings.length;++s)t[s]&&Object.assign(u.encodings[s],t[s]);if(u.encodings.length>1&&"video/vp8"===u.codecs[0].mimeType.toLowerCase())for(const s of u.encodings)s.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:d,offerRtpParameters:u,answerRtpParameters:m,codecOptions:r});const f={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("send() | calling pc.setRemoteDescription() [answer:%o]",f),await this._pc.setRemoteDescription(f);const g=String(this._nextSendLocalId);this._nextSendLocalId++;const b=this._pc.getSenders().find((t=>t.track===e));return this._mapSendLocalIdRtpSender.set(g,b),{localId:g,rtpParameters:u,rtpSender:b}}async stopSending(e){this.assertSendDirection(),l.debug("stopSending() [localId:%s]",e);const t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw new Error("associated RTCRtpSender not found");this._pc.removeTrack(t),t.track&&this._sendStream.removeTrack(t.track),this._mapSendLocalIdRtpSender.delete(e);const r=await this._pc.createOffer();l.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(i){if(0===this._sendStream.getTracks().length)return void l.warn("stopSending() | ignoring expected error due no sending tracks: %s",i.toString());throw i}if("stable"===this._pc.signalingState)return;const s={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){this.assertSendDirection(),t?l.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):l.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const s=r.track;await r.replaceTrack(t),s&&this._sendStream.removeTrack(s),t&&this._sendStream.addTrack(t)}async setMaxSpatialLayer(e,t){this.assertSendDirection(),l.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const s=r.getParameters();s.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.setParameters(s)}async setRtpEncodingParameters(e,t){this.assertSendDirection(),l.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const s=r.getParameters();s.encodings.forEach(((e,r)=>{s.encodings[r]={...e,...t}})),await r.setParameters(s)}async getSenderStats(e){this.assertSendDirection();const t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw new Error("associated RTCRtpSender not found");return t.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:a}){this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:a};l.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%h.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=s.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),l.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const i={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[];for(const s of e){const{trackId:e,kind:t,rtpParameters:r,streamId:i}=s;l.debug("receive() [trackId:%s, kind:%s]",e,t);const a=t;this._remoteSdp.receive({mid:a,kind:t,offerRtpParameters:r,streamId:i||r.rtcp.cname,trackId:e})}const r={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);let i=await this._pc.createAnswer();const a=s.parse(i.sdp);for(const s of e){const{kind:e,rtpParameters:t}=s,r=e,i=a.media.find((e=>String(e.mid)===r));o.applyCodecParameters({offerRtpParameters:t,answerMediaObject:i})}i={type:"answer",sdp:s.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),l.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const s of e){const{kind:e,trackId:r,rtpParameters:i}=s,a=r,n=e,o=this._pc.getReceivers().find((e=>e.track&&e.track.id===a));if(!o)throw new Error("new RTCRtpReceiver not");this._mapRecvLocalIdInfo.set(a,{mid:n,rtpParameters:i,rtpReceiver:o}),t.push({localId:a,track:o.track,rtpReceiver:o})}return t}async stopReceiving(e){this.assertRecvDirection();for(const s of e){l.debug("stopReceiving() [localId:%s]",s);const{mid:e,rtpParameters:t}=this._mapRecvLocalIdInfo.get(s)||{};this._mapRecvLocalIdInfo.delete(s),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:t})}const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();l.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){this.assertRecvDirection();const{rtpReceiver:t}=this._mapRecvLocalIdInfo.get(e)||{};if(!t)throw new Error("associated RTCRtpReceiver not found");return t.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmitTime:n,maxRetransmits:o,protocol:r};l.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});const e={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=s.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}l.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=s.parse(this._pc.localDescription.sdp));const r=o.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return Ge.Chrome67=u,Ge}(),g=function(){if(Qe)return Xe;Qe=1;var e=Xe&&Xe.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=Xe&&Xe.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=Xe&&Xe.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(Xe,"__esModule",{value:!0}),Xe.Chrome55=void 0;const s=r(ye()),i=_(),a=T(),n=r(I()),o=r(B()),c=r(Se()),d=r(Je()),p=xe(),l=je(),h=new i.Logger("Chrome55"),u={OS:1024,MIS:1024};let m=class e extends p.HandlerInterface{static createFactory(){return()=>new e}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdTrack=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome55"}close(){if(h.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){h.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{const r=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(t){}const i=s.parse(r.sdp);return c.extractRtpCapabilities({sdpObject:i})}catch(t){try{e.close()}catch(r){}throw t}}async getNativeSctpCapabilities(){return h.debug("getNativeSctpCapabilities()"),{numStreams:u}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:c,proprietaryConstraints:d,extendedRtpCapabilities:p}){h.debug("run()"),this._direction=e,this._remoteSdp=new l.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,planB:!0}),this._sendingRtpParametersByKind={audio:o.getSendingRtpParameters("audio",p),video:o.getSendingRtpParameters("video",p)},this._sendingRemoteRtpParametersByKind={audio:o.getSendingRemoteRtpParameters("audio",p),video:o.getSendingRemoteRtpParameters("video",p)},s.role&&"auto"!==s.role&&(this._forcedLocalDtlsRole="server"===s.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b",...c},d),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(h.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}}))}async updateIceServers(e){h.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(h.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});h.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};h.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};h.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();h.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){this.assertSendDirection(),h.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),i&&h.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addStream(this._sendStream);let a,p=await this._pc.createOffer(),l=s.parse(p.sdp);const u=n.clone(this._sendingRtpParametersByKind[e.kind]);u.codecs=o.reduceCodecs(u.codecs);const m=n.clone(this._sendingRemoteRtpParametersByKind[e.kind]);if(m.codecs=o.reduceCodecs(m.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),"video"===e.kind&&t&&t.length>1&&(h.debug("send() | enabling simulcast"),l=s.parse(p.sdp),a=l.media.find((e=>"video"===e.type)),d.addLegacySimulcast({offerMediaObject:a,track:e,numStreams:t.length}),p={type:"offer",sdp:s.write(l)}),h.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p),l=s.parse(this._pc.localDescription.sdp),a=l.media.find((t=>t.type===e.kind)),u.rtcp.cname=c.getCname({offerMediaObject:a}),u.encodings=d.getRtpEncodings({offerMediaObject:a,track:e}),t)for(let s=0;s<u.encodings.length;++s)t[s]&&Object.assign(u.encodings[s],t[s]);if(u.encodings.length>1&&"video/vp8"===u.codecs[0].mimeType.toLowerCase())for(const s of u.encodings)s.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:a,offerRtpParameters:u,answerRtpParameters:m,codecOptions:r});const f={type:"answer",sdp:this._remoteSdp.getSdp()};h.debug("send() | calling pc.setRemoteDescription() [answer:%o]",f),await this._pc.setRemoteDescription(f);const g=String(this._nextSendLocalId);return this._nextSendLocalId++,this._mapSendLocalIdTrack.set(g,e),{localId:g,rtpParameters:u}}async stopSending(e){this.assertSendDirection(),h.debug("stopSending() [localId:%s]",e);const t=this._mapSendLocalIdTrack.get(e);if(!t)throw new Error("track not found");this._mapSendLocalIdTrack.delete(e),this._sendStream.removeTrack(t),this._pc.addStream(this._sendStream);const r=await this._pc.createOffer();h.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(i){if(0===this._sendStream.getTracks().length)return void h.warn("stopSending() | ignoring expected error due no sending tracks: %s",i.toString());throw i}if("stable"===this._pc.signalingState)return;const s={type:"answer",sdp:this._remoteSdp.getSdp()};h.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){throw new a.UnsupportedError("not implemented")}async setMaxSpatialLayer(e,t){throw new a.UnsupportedError(" not implemented")}async setRtpEncodingParameters(e,t){throw new a.UnsupportedError("not supported")}async getSenderStats(e){throw new a.UnsupportedError("not implemented")}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:a}){this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:a};h.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%u.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=s.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),h.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const i={type:"answer",sdp:this._remoteSdp.getSdp()};h.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[];for(const s of e){const{trackId:e,kind:t,rtpParameters:r,streamId:i}=s;h.debug("receive() [trackId:%s, kind:%s]",e,t);const a=t;this._remoteSdp.receive({mid:a,kind:t,offerRtpParameters:r,streamId:i||r.rtcp.cname,trackId:e})}const r={type:"offer",sdp:this._remoteSdp.getSdp()};h.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);let i=await this._pc.createAnswer();const a=s.parse(i.sdp);for(const s of e){const{kind:e,rtpParameters:t}=s,r=e,i=a.media.find((e=>String(e.mid)===r));c.applyCodecParameters({offerRtpParameters:t,answerMediaObject:i})}i={type:"answer",sdp:s.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),h.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const s of e){const{kind:e,trackId:r,rtpParameters:i}=s,a=e,n=r,o=s.streamId||i.rtcp.cname,c=this._pc.getRemoteStreams().find((e=>e.id===o)).getTrackById(n);if(!c)throw new Error("remote track not found");this._mapRecvLocalIdInfo.set(n,{mid:a,rtpParameters:i}),t.push({localId:n,track:c})}return t}async stopReceiving(e){this.assertRecvDirection();for(const s of e){h.debug("stopReceiving() [localId:%s]",s);const{mid:e,rtpParameters:t}=this._mapRecvLocalIdInfo.get(s)||{};this._mapRecvLocalIdInfo.delete(s),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:t})}const t={type:"offer",sdp:this._remoteSdp.getSdp()};h.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();h.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){throw new a.UnsupportedError("not implemented")}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmitTime:n,maxRetransmits:o,protocol:r};h.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});const e={type:"offer",sdp:this._remoteSdp.getSdp()};h.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=s.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}h.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=s.parse(this._pc.localDescription.sdp));const r=c.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return Xe.Chrome55=m,Xe}(),b=function(){if(Ye)return Ze;Ye=1;var e=Ze&&Ze.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=Ze&&Ze.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=Ze&&Ze.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(Ze,"__esModule",{value:!0}),Ze.Firefox120=void 0;const s=r(ye()),i=_(),a=T(),n=r(I()),o=r(B()),c=r(Se()),d=r(Ce()),p=xe(),l=je(),h=$e(),u=new i.Logger("Firefox120"),m={OS:16,MIS:2048};let f=class e extends p.HandlerInterface{static createFactory(){return()=>new e}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Firefox120"}close(){if(u.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){u.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),t=document.createElement("canvas");t.getContext("2d");const r=t.captureStream().getVideoTracks()[0];try{e.addTransceiver("audio",{direction:"sendrecv"}),e.addTransceiver(r,{direction:"sendrecv",sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});const a=await e.createOffer();try{t.remove()}catch(i){}try{r.stop()}catch(i){}try{e.close()}catch(i){}const n=s.parse(a.sdp);return c.extractRtpCapabilities({sdpObject:n})}catch(i){try{t.remove()}catch(a){}try{r.stop()}catch(a){}try{e.close()}catch(a){}throw i}}async getNativeSctpCapabilities(){return u.debug("getNativeSctpCapabilities()"),{numStreams:m}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:c,proprietaryConstraints:d,extendedRtpCapabilities:p}){this.assertNotClosed(),u.debug("run()"),this._direction=e,this._remoteSdp=new l.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._sendingRtpParametersByKind={audio:o.getSendingRtpParameters("audio",p),video:o.getSendingRtpParameters("video",p)},this._sendingRemoteRtpParametersByKind={audio:o.getSendingRemoteRtpParameters("audio",p),video:o.getSendingRemoteRtpParameters("video",p)},this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c},d),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(u.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}}))}async updateIceServers(e){throw this.assertNotClosed(),new a.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),u.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});u.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();u.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),u.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&t.length>1&&t.forEach(((e,t)=>{e.rid=`r${t}`}));const p=n.clone(this._sendingRtpParametersByKind[e.kind]);p.codecs=o.reduceCodecs(p.codecs,i);const l=n.clone(this._sendingRemoteRtpParametersByKind[e.kind]);l.codecs=o.reduceCodecs(l.codecs,i);const m=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:t});a&&a(m.sender);const f=await this._pc.createOffer();let g=s.parse(f.sdp);this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:g});const b=(0,h.parse)((t||[{}])[0].scalabilityMode);u.debug("send() | calling pc.setLocalDescription() [offer:%o]",f),await this._pc.setLocalDescription(f);const _=m.mid;p.mid=_,g=s.parse(this._pc.localDescription.sdp);const y=g.media[g.media.length-1];if(p.rtcp.cname=c.getCname({offerMediaObject:y}),t)if(1===t.length){const e=d.getRtpEncodings({offerMediaObject:y});Object.assign(e[0],t[0]),p.encodings=e}else p.encodings=t;else p.encodings=d.getRtpEncodings({offerMediaObject:y});if(p.encodings.length>1&&("video/vp8"===p.codecs[0].mimeType.toLowerCase()||"video/h264"===p.codecs[0].mimeType.toLowerCase()))for(const s of p.encodings)s.scalabilityMode?s.scalabilityMode=`L1T${b.temporalLayers}`:s.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:y,offerRtpParameters:p,answerRtpParameters:l,codecOptions:r,extmapAllowMixed:!0});const w={type:"answer",sdp:this._remoteSdp.getSdp()};return u.debug("send() | calling pc.setRemoteDescription() [answer:%o]",w),await this._pc.setRemoteDescription(w),this._mapMidTransceiver.set(_,m),{localId:_,rtpParameters:p,rtpSender:m.sender}}async stopSending(e){if(this.assertSendDirection(),u.debug("stopSending() [localId:%s]",e),this._closed)return;const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);const r=await this._pc.createOffer();u.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),u.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();u.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),u.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);const r=await this._pc.createOffer();u.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?u.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):u.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),u.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");const s=r.sender.getParameters();s.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();u.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),u.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach(((e,r)=>{s.encodings[r]={...e,...t}})),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();u.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:a}){this.assertNotClosed(),this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:a};u.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%m.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=s.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:t}),u.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const i={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const s of e){const{trackId:e,kind:t,rtpParameters:i,streamId:a}=s;u.debug("receive() [trackId:%s, kind:%s]",e,t);const n=i.mid||String(this._mapMidTransceiver.size);r.set(e,n),this._remoteSdp.receive({mid:n,kind:t,offerRtpParameters:i,streamId:a||i.rtcp.cname,trackId:e})}const i={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(const s of e){const{trackId:e,onRtpReceiver:t}=s;if(t){const s=r.get(e),i=this._pc.getTransceivers().find((e=>e.mid===s));if(!i)throw new Error("transceiver not found");t(i.receiver)}}let a=await this._pc.createAnswer();const n=s.parse(a.sdp);for(const o of e){const{trackId:e,rtpParameters:t}=o,i=r.get(e),d=n.media.find((e=>String(e.mid)===i));c.applyCodecParameters({offerRtpParameters:t,answerMediaObject:d}),a={type:"answer",sdp:s.write(n)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:n}),u.debug("receive() | calling pc.setLocalDescription() [answer:%o]",a),await this._pc.setLocalDescription(a);for(const s of e){const{trackId:e}=s,i=r.get(e),a=this._pc.getTransceivers().find((e=>e.mid===i));if(!a)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,a),t.push({localId:i,track:a.receiver.track,rtpReceiver:a.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const s of e){u.debug("stopReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();u.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){u.debug("pauseReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();u.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){u.debug("resumeReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();u.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o,protocol:r};u.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=s.parse(t.sdp);await this.setupTransport({localDtlsRole:"client",localSdpObject:e})}u.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=s.parse(this._pc.localDescription.sdp));const r=c.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new a.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return Ze.Firefox120=f,Ze}(),y=function(){if(et)return tt;et=1;var e=tt&&tt.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=tt&&tt.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=tt&&tt.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(tt,"__esModule",{value:!0}),tt.Firefox60=void 0;const s=r(ye()),i=_(),a=T(),n=r(I()),o=r(B()),c=r(Se()),d=r(Ce()),p=xe(),l=je(),h=$e(),u=new i.Logger("Firefox60"),m={OS:16,MIS:2048};let f=class e extends p.HandlerInterface{static createFactory(){return()=>new e}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Firefox60"}close(){if(u.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){u.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),t=document.createElement("canvas");t.getContext("2d");const r=t.captureStream().getVideoTracks()[0];try{e.addTransceiver("audio",{direction:"sendrecv"});const a=e.addTransceiver(r,{direction:"sendrecv"}),n=a.sender.getParameters(),o=[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}];n.encodings=o,await a.sender.setParameters(n);const d=await e.createOffer();try{t.remove()}catch(i){}try{r.stop()}catch(i){}try{e.close()}catch(i){}const p=s.parse(d.sdp);return c.extractRtpCapabilities({sdpObject:p})}catch(i){try{t.remove()}catch(a){}try{r.stop()}catch(a){}try{e.close()}catch(a){}throw i}}async getNativeSctpCapabilities(){return u.debug("getNativeSctpCapabilities()"),{numStreams:m}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:c,proprietaryConstraints:d,extendedRtpCapabilities:p}){this.assertNotClosed(),u.debug("run()"),this._direction=e,this._remoteSdp=new l.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._sendingRtpParametersByKind={audio:o.getSendingRtpParameters("audio",p),video:o.getSendingRtpParameters("video",p)},this._sendingRemoteRtpParametersByKind={audio:o.getSendingRemoteRtpParameters("audio",p),video:o.getSendingRemoteRtpParameters("video",p)},this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c},d),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(u.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}}))}async updateIceServers(e){throw this.assertNotClosed(),new a.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),u.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});u.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();u.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){this.assertNotClosed(),this.assertSendDirection(),u.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&(t=n.clone(t)).length>1&&(t.forEach(((e,t)=>{e.rid=`r${t}`})),t.reverse());const a=n.clone(this._sendingRtpParametersByKind[e.kind]);a.codecs=o.reduceCodecs(a.codecs,i);const p=n.clone(this._sendingRemoteRtpParametersByKind[e.kind]);p.codecs=o.reduceCodecs(p.codecs,i);const l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});if(t){const e=l.sender.getParameters();e.encodings=t,await l.sender.setParameters(e)}const m=await this._pc.createOffer();let f=s.parse(m.sdp);this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:f});const g=(0,h.parse)((t||[{}])[0].scalabilityMode);u.debug("send() | calling pc.setLocalDescription() [offer:%o]",m),await this._pc.setLocalDescription(m);const b=l.mid;a.mid=b,f=s.parse(this._pc.localDescription.sdp);const _=f.media[f.media.length-1];if(a.rtcp.cname=c.getCname({offerMediaObject:_}),t)if(1===t.length){const e=d.getRtpEncodings({offerMediaObject:_});Object.assign(e[0],t[0]),a.encodings=e}else a.encodings=t.reverse();else a.encodings=d.getRtpEncodings({offerMediaObject:_});if(a.encodings.length>1&&("video/vp8"===a.codecs[0].mimeType.toLowerCase()||"video/h264"===a.codecs[0].mimeType.toLowerCase()))for(const s of a.encodings)s.scalabilityMode?s.scalabilityMode=`L1T${g.temporalLayers}`:s.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:_,offerRtpParameters:a,answerRtpParameters:p,codecOptions:r,extmapAllowMixed:!0});const y={type:"answer",sdp:this._remoteSdp.getSdp()};return u.debug("send() | calling pc.setRemoteDescription() [answer:%o]",y),await this._pc.setRemoteDescription(y),this._mapMidTransceiver.set(b,l),{localId:b,rtpParameters:a,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),u.debug("stopSending() [localId:%s]",e),this._closed)return;const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);const r=await this._pc.createOffer();u.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),u.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();u.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),u.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);const r=await this._pc.createOffer();u.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?u.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):u.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),u.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");const s=r.sender.getParameters();t=s.encodings.length-1-t,s.encodings.forEach(((e,r)=>{e.active=r>=t})),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();u.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),u.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach(((e,r)=>{s.encodings[r]={...e,...t}})),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();u.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:a}){this.assertNotClosed(),this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:a};u.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%m.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=s.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:t}),u.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const i={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const s of e){const{trackId:e,kind:t,rtpParameters:i,streamId:a}=s;u.debug("receive() [trackId:%s, kind:%s]",e,t);const n=i.mid||String(this._mapMidTransceiver.size);r.set(e,n),this._remoteSdp.receive({mid:n,kind:t,offerRtpParameters:i,streamId:a||i.rtcp.cname,trackId:e})}const i={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let a=await this._pc.createAnswer();const n=s.parse(a.sdp);for(const o of e){const{trackId:e,rtpParameters:t}=o,i=r.get(e),d=n.media.find((e=>String(e.mid)===i));c.applyCodecParameters({offerRtpParameters:t,answerMediaObject:d}),a={type:"answer",sdp:s.write(n)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:n}),u.debug("receive() | calling pc.setLocalDescription() [answer:%o]",a),await this._pc.setLocalDescription(a);for(const s of e){const{trackId:e}=s,i=r.get(e),a=this._pc.getTransceivers().find((e=>e.mid===i));if(!a)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,a),t.push({localId:i,track:a.receiver.track,rtpReceiver:a.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const s of e){u.debug("stopReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();u.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){u.debug("pauseReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();u.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){u.debug("resumeReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();u.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o,protocol:r};u.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=s.parse(t.sdp);await this.setupTransport({localDtlsRole:"client",localSdpObject:e})}u.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=s.parse(this._pc.localDescription.sdp));const r=c.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new a.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return tt.Firefox60=f,tt}(),w=function(){if(rt)return st;rt=1;var e=st&&st.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=st&&st.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=st&&st.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(st,"__esModule",{value:!0}),st.Safari12=void 0;const s=r(ye()),i=_(),a=r(I()),n=r(B()),o=r(Se()),c=r(Ce()),d=r(De()),p=T(),l=xe(),h=je(),u=$e(),m=new i.Logger("Safari12"),f={OS:1024,MIS:1024};let g=class e extends l.HandlerInterface{static createFactory(){return()=>new e}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Safari12"}close(){if(m.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){m.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{e.addTransceiver("audio"),e.addTransceiver("video");const r=await e.createOffer();try{e.close()}catch(t){}const i=s.parse(r.sdp),a=o.extractRtpCapabilities({sdpObject:i});return d.addNackSuppportForOpus(a),a}catch(t){try{e.close()}catch(r){}throw t}}async getNativeSctpCapabilities(){return m.debug("getNativeSctpCapabilities()"),{numStreams:f}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,extendedRtpCapabilities:p}){this.assertNotClosed(),m.debug("run()"),this._direction=e,this._remoteSdp=new h.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._sendingRtpParametersByKind={audio:n.getSendingRtpParameters("audio",p),video:n.getSendingRtpParameters("video",p)},this._sendingRemoteRtpParametersByKind={audio:n.getSendingRemoteRtpParameters("audio",p),video:n.getSendingRemoteRtpParameters("video",p)},s.role&&"auto"!==s.role&&(this._forcedLocalDtlsRole="server"===s.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:o||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c},d),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(m.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}}))}async updateIceServers(e){this.assertNotClosed(),m.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),m.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});m.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();m.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i,onRtpSender:d}){this.assertNotClosed(),this.assertSendDirection(),m.debug("send() [kind:%s, track.id:%s]",e.kind,e.id);const p=a.clone(this._sendingRtpParametersByKind[e.kind]);p.codecs=n.reduceCodecs(p.codecs,i);const l=a.clone(this._sendingRemoteRtpParametersByKind[e.kind]);l.codecs=n.reduceCodecs(l.codecs,i);const h=this._remoteSdp.getNextMediaSectionIdx(),f=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});d&&d(f.sender);let g,b=await this._pc.createOffer(),_=s.parse(b.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:_});const y=(0,u.parse)((t||[{}])[0].scalabilityMode);t&&t.length>1&&(m.debug("send() | enabling legacy simulcast"),_=s.parse(b.sdp),g=_.media[h.idx],c.addLegacySimulcast({offerMediaObject:g,numStreams:t.length}),b={type:"offer",sdp:s.write(_)}),m.debug("send() | calling pc.setLocalDescription() [offer:%o]",b),await this._pc.setLocalDescription(b);const w=f.mid;if(p.mid=w,_=s.parse(this._pc.localDescription.sdp),g=_.media[h.idx],p.rtcp.cname=o.getCname({offerMediaObject:g}),p.encodings=c.getRtpEncodings({offerMediaObject:g}),t)for(let s=0;s<p.encodings.length;++s)t[s]&&Object.assign(p.encodings[s],t[s]);if(p.encodings.length>1&&("video/vp8"===p.codecs[0].mimeType.toLowerCase()||"video/h264"===p.codecs[0].mimeType.toLowerCase()))for(const s of p.encodings)s.scalabilityMode?s.scalabilityMode=`L1T${y.temporalLayers}`:s.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,reuseMid:h.reuseMid,offerRtpParameters:p,answerRtpParameters:l,codecOptions:r});const v={type:"answer",sdp:this._remoteSdp.getSdp()};return m.debug("send() | calling pc.setRemoteDescription() [answer:%o]",v),await this._pc.setRemoteDescription(v),this._mapMidTransceiver.set(w,f),{localId:w,rtpParameters:p,rtpSender:f.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;m.debug("stopSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(i){}const r=await this._pc.createOffer();m.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),m.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();m.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),m.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);const r=await this._pc.createOffer();m.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?m.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):m.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),m.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();m.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),m.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach(((e,r)=>{s.encodings[r]={...e,...t}})),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();m.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:a}){this.assertNotClosed(),this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:a};m.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%f.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=s.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),m.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const i={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const s of e){const{trackId:e,kind:t,rtpParameters:i,streamId:a}=s;m.debug("receive() [trackId:%s, kind:%s]",e,t);const n=i.mid||String(this._mapMidTransceiver.size);r.set(e,n),this._remoteSdp.receive({mid:n,kind:t,offerRtpParameters:i,streamId:a||i.rtcp.cname,trackId:e})}const i={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(const s of e){const{trackId:e,onRtpReceiver:t}=s;if(t){const s=r.get(e),i=this._pc.getTransceivers().find((e=>e.mid===s));if(!i)throw new Error("transceiver not found");t(i.receiver)}}let a=await this._pc.createAnswer();const n=s.parse(a.sdp);for(const s of e){const{trackId:e,rtpParameters:t}=s,i=r.get(e),a=n.media.find((e=>String(e.mid)===i));o.applyCodecParameters({offerRtpParameters:t,answerMediaObject:a})}a={type:"answer",sdp:s.write(n)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:n}),m.debug("receive() | calling pc.setLocalDescription() [answer:%o]",a),await this._pc.setLocalDescription(a);for(const s of e){const{trackId:e}=s,i=r.get(e),a=this._pc.getTransceivers().find((e=>e.mid===i));if(!a)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,a),t.push({localId:i,track:a.receiver.track,rtpReceiver:a.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const s of e){m.debug("stopReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();m.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){m.debug("pauseReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();m.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){m.debug("resumeReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();m.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o,protocol:r};m.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=s.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}m.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=s.parse(this._pc.localDescription.sdp));const r=o.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new p.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return st.Safari12=g,st}(),v=function(){if(it)return at;it=1;var e=at&&at.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=at&&at.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=at&&at.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(at,"__esModule",{value:!0}),at.Safari11=void 0;const s=r(ye()),i=_(),a=r(I()),n=r(B()),o=r(Se()),c=r(Je()),d=xe(),p=je(),l=new i.Logger("Safari11"),h={OS:1024,MIS:1024};let u=class e extends d.HandlerInterface{static createFactory(){return()=>new e}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdRtpSender=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Safari11"}close(){if(l.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){l.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{const r=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(t){}const i=s.parse(r.sdp);return o.extractRtpCapabilities({sdpObject:i})}catch(t){try{e.close()}catch(r){}throw t}}async getNativeSctpCapabilities(){return l.debug("getNativeSctpCapabilities()"),{numStreams:h}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,extendedRtpCapabilities:h}){l.debug("run()"),this._direction=e,this._remoteSdp=new p.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,planB:!0}),this._sendingRtpParametersByKind={audio:n.getSendingRtpParameters("audio",h),video:n.getSendingRtpParameters("video",h)},this._sendingRemoteRtpParametersByKind={audio:n.getSendingRemoteRtpParameters("audio",h),video:n.getSendingRemoteRtpParameters("video",h)},s.role&&"auto"!==s.role&&(this._forcedLocalDtlsRole="server"===s.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:o||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c},d),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(l.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}}))}async updateIceServers(e){l.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(l.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});l.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();l.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){this.assertSendDirection(),l.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),i&&l.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addTrack(e,this._sendStream);let d,p=await this._pc.createOffer(),h=s.parse(p.sdp);const u=a.clone(this._sendingRtpParametersByKind[e.kind]);u.codecs=n.reduceCodecs(u.codecs);const m=a.clone(this._sendingRemoteRtpParametersByKind[e.kind]);if(m.codecs=n.reduceCodecs(m.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:h}),"video"===e.kind&&t&&t.length>1&&(l.debug("send() | enabling simulcast"),h=s.parse(p.sdp),d=h.media.find((e=>"video"===e.type)),c.addLegacySimulcast({offerMediaObject:d,track:e,numStreams:t.length}),p={type:"offer",sdp:s.write(h)}),l.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p),h=s.parse(this._pc.localDescription.sdp),d=h.media.find((t=>t.type===e.kind)),u.rtcp.cname=o.getCname({offerMediaObject:d}),u.encodings=c.getRtpEncodings({offerMediaObject:d,track:e}),t)for(let s=0;s<u.encodings.length;++s)t[s]&&Object.assign(u.encodings[s],t[s]);if(u.encodings.length>1&&"video/vp8"===u.codecs[0].mimeType.toLowerCase())for(const s of u.encodings)s.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:d,offerRtpParameters:u,answerRtpParameters:m,codecOptions:r});const f={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("send() | calling pc.setRemoteDescription() [answer:%o]",f),await this._pc.setRemoteDescription(f);const g=String(this._nextSendLocalId);this._nextSendLocalId++;const b=this._pc.getSenders().find((t=>t.track===e));return this._mapSendLocalIdRtpSender.set(g,b),{localId:g,rtpParameters:u,rtpSender:b}}async stopSending(e){this.assertSendDirection();const t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw new Error("associated RTCRtpSender not found");t.track&&this._sendStream.removeTrack(t.track),this._mapSendLocalIdRtpSender.delete(e);const r=await this._pc.createOffer();l.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(i){if(0===this._sendStream.getTracks().length)return void l.warn("stopSending() | ignoring expected error due no sending tracks: %s",i.toString());throw i}if("stable"===this._pc.signalingState)return;const s={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){this.assertSendDirection(),t?l.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):l.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const s=r.track;await r.replaceTrack(t),s&&this._sendStream.removeTrack(s),t&&this._sendStream.addTrack(t)}async setMaxSpatialLayer(e,t){this.assertSendDirection(),l.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const s=r.getParameters();s.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.setParameters(s)}async setRtpEncodingParameters(e,t){this.assertSendDirection(),l.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw new Error("associated RTCRtpSender not found");const s=r.getParameters();s.encodings.forEach(((e,r)=>{s.encodings[r]={...e,...t}})),await r.setParameters(s)}async getSenderStats(e){this.assertSendDirection();const t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw new Error("associated RTCRtpSender not found");return t.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:a}){this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:a};l.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%h.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=s.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),l.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const i={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[];for(const s of e){const{trackId:e,kind:t,rtpParameters:r,streamId:i}=s;l.debug("receive() [trackId:%s, kind:%s]",e,t);const a=t;this._remoteSdp.receive({mid:a,kind:t,offerRtpParameters:r,streamId:i||r.rtcp.cname,trackId:e})}const r={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);let i=await this._pc.createAnswer();const a=s.parse(i.sdp);for(const s of e){const{kind:e,rtpParameters:t}=s,r=e,i=a.media.find((e=>String(e.mid)===r));o.applyCodecParameters({offerRtpParameters:t,answerMediaObject:i})}i={type:"answer",sdp:s.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),l.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(const s of e){const{kind:e,trackId:r,rtpParameters:i}=s,a=e,n=r,o=this._pc.getReceivers().find((e=>e.track&&e.track.id===n));if(!o)throw new Error("new RTCRtpReceiver not");this._mapRecvLocalIdInfo.set(n,{mid:a,rtpParameters:i,rtpReceiver:o}),t.push({localId:n,track:o.track,rtpReceiver:o})}return t}async stopReceiving(e){this.assertRecvDirection();for(const s of e){l.debug("stopReceiving() [localId:%s]",s);const{mid:e,rtpParameters:t}=this._mapRecvLocalIdInfo.get(s)||{};this._mapRecvLocalIdInfo.delete(s),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:t})}const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();l.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();const{rtpReceiver:t}=this._mapRecvLocalIdInfo.get(e)||{};if(!t)throw new Error("associated RTCRtpReceiver not found");return t.getStats()}async pauseReceiving(e){}async resumeReceiving(e){}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o,protocol:r};l.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});const e={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=s.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}l.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=s.parse(this._pc.localDescription.sdp));const r=o.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return at.Safari11=u,at}(),S=pt(),R=function(){if(lt)return ht;lt=1;var e=ht&&ht.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=ht&&ht.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=ht&&ht.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(ht,"__esModule",{value:!0}),ht.ReactNativeUnifiedPlan=void 0;const s=r(ye()),i=_(),a=r(I()),n=r(B()),o=r(Se()),c=r(Ce()),d=r(De()),p=T(),l=xe(),h=je(),u=$e(),m=new i.Logger("ReactNativeUnifiedPlan"),f={OS:1024,MIS:1024};let g=class e extends l.HandlerInterface{static createFactory(){return()=>new e}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"ReactNativeUnifiedPlan"}close(){if(m.debug("close()"),!this._closed){if(this._closed=!0,this._sendStream.release(!1),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){m.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");const r=await e.createOffer();try{e.close()}catch(t){}const i=s.parse(r.sdp),a=o.extractRtpCapabilities({sdpObject:i});return d.addNackSuppportForOpus(a),a}catch(t){try{e.close()}catch(r){}throw t}}async getNativeSctpCapabilities(){return m.debug("getNativeSctpCapabilities()"),{numStreams:f}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,proprietaryConstraints:d,extendedRtpCapabilities:p}){this.assertNotClosed(),m.debug("run()"),this._direction=e,this._remoteSdp=new h.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._sendingRtpParametersByKind={audio:n.getSendingRtpParameters("audio",p),video:n.getSendingRtpParameters("video",p)},this._sendingRemoteRtpParametersByKind={audio:n.getSendingRemoteRtpParameters("audio",p),video:n.getSendingRemoteRtpParameters("video",p)},s.role&&"auto"!==s.role&&(this._forcedLocalDtlsRole="server"===s.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:o||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...c},d),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(m.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}}))}async updateIceServers(e){this.assertNotClosed(),m.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),m.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});m.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();m.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i,onRtpSender:d}){this.assertNotClosed(),this.assertSendDirection(),m.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&t.length>1&&t.forEach(((e,t)=>{e.rid=`r${t}`}));const p=a.clone(this._sendingRtpParametersByKind[e.kind]);p.codecs=n.reduceCodecs(p.codecs,i);const l=a.clone(this._sendingRemoteRtpParametersByKind[e.kind]);l.codecs=n.reduceCodecs(l.codecs,i);const h=this._remoteSdp.getNextMediaSectionIdx(),f=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:t});d&&d(f.sender);let g,b=await this._pc.createOffer(),_=s.parse(b.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:_});let y=!1;const w=(0,u.parse)((t||[{}])[0].scalabilityMode);t&&1===t.length&&w.spatialLayers>1&&"video/vp9"===p.codecs[0].mimeType.toLowerCase()&&(m.debug("send() | enabling legacy simulcast for VP9 SVC"),y=!0,_=s.parse(b.sdp),g=_.media[h.idx],c.addLegacySimulcast({offerMediaObject:g,numStreams:w.spatialLayers}),b={type:"offer",sdp:s.write(_)}),m.debug("send() | calling pc.setLocalDescription() [offer:%o]",b),await this._pc.setLocalDescription(b);let v=f.mid??void 0;if(v||m.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),p.mid=v,_=s.parse(this._pc.localDescription.sdp),g=_.media[h.idx],p.rtcp.cname=o.getCname({offerMediaObject:g}),t)if(1===t.length){let e=c.getRtpEncodings({offerMediaObject:g});Object.assign(e[0],t[0]),y&&(e=[e[0]]),p.encodings=e}else p.encodings=t;else p.encodings=c.getRtpEncodings({offerMediaObject:g});if(p.encodings.length>1&&("video/vp8"===p.codecs[0].mimeType.toLowerCase()||"video/h264"===p.codecs[0].mimeType.toLowerCase()))for(const s of p.encodings)s.scalabilityMode?s.scalabilityMode=`L1T${w.temporalLayers}`:s.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,reuseMid:h.reuseMid,offerRtpParameters:p,answerRtpParameters:l,codecOptions:r,extmapAllowMixed:!0});const S={type:"answer",sdp:this._remoteSdp.getSdp()};return m.debug("send() | calling pc.setRemoteDescription() [answer:%o]",S),await this._pc.setRemoteDescription(S),v||(v=f.mid,p.mid=v),this._mapMidTransceiver.set(v,f),{localId:v,rtpParameters:p,rtpSender:f.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;m.debug("stopSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(i){}const r=await this._pc.createOffer();m.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),m.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();m.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),m.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";const r=await this._pc.createOffer();m.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?m.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):m.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),m.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach(((e,r)=>{e.active=r<=t})),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();m.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),m.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach(((e,r)=>{s.encodings[r]={...e,...t}})),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();m.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:a}){this.assertNotClosed(),this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:a};m.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%f.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=s.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),m.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const i={type:"answer",sdp:this._remoteSdp.getSdp()};m.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();const t=[],r=new Map;for(const s of e){const{trackId:e,kind:t,rtpParameters:i,streamId:a}=s;m.debug("receive() [trackId:%s, kind:%s]",e,t);const n=i.mid||String(this._mapMidTransceiver.size);r.set(e,n),this._remoteSdp.receive({mid:n,kind:t,offerRtpParameters:i,streamId:a||i.rtcp.cname,trackId:e})}const i={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(const s of e){const{trackId:e,onRtpReceiver:t}=s;if(t){const s=r.get(e),i=this._pc.getTransceivers().find((e=>e.mid===s));if(!i)throw new Error("transceiver not found");t(i.receiver)}}let a=await this._pc.createAnswer();const n=s.parse(a.sdp);for(const s of e){const{trackId:e,rtpParameters:t}=s,i=r.get(e),a=n.media.find((e=>String(e.mid)===i));o.applyCodecParameters({offerRtpParameters:t,answerMediaObject:a})}a={type:"answer",sdp:s.write(n)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:n}),m.debug("receive() | calling pc.setLocalDescription() [answer:%o]",a),await this._pc.setLocalDescription(a);for(const s of e){const{trackId:e}=s,i=r.get(e),a=this._pc.getTransceivers().find((e=>e.mid===i));if(!a)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,a),t.push({localId:i,track:a.receiver.track,rtpReceiver:a.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const s of e){m.debug("stopReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();m.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){m.debug("pauseReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();m.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){m.debug("resumeReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();m.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o,protocol:r};m.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const e={type:"offer",sdp:this._remoteSdp.getSdp()};m.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=s.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}m.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=s.parse(this._pc.localDescription.sdp));const r=o.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new p.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return ht.ReactNativeUnifiedPlan=g,ht}(),C=function(){if(ut)return ft;ut=1;var e=ft&&ft.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),t=ft&&ft.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=ft&&ft.__importStar||function(r){if(r&&r.__esModule)return r;var s={};if(null!=r)for(var i in r)"default"!==i&&Object.prototype.hasOwnProperty.call(r,i)&&e(s,r,i);return t(s,r),s};Object.defineProperty(ft,"__esModule",{value:!0}),ft.ReactNative=void 0;const s=r(ye()),i=_(),a=T(),n=r(I()),o=r(B()),c=r(Se()),d=r(Je()),p=xe(),l=je(),h=new i.Logger("ReactNative"),u={OS:1024,MIS:1024};let m=class e extends p.HandlerInterface{static createFactory(){return()=>new e}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdTrack=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"ReactNative"}close(){if(h.debug("close()"),this._sendStream.release(!1),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){h.debug("getNativeRtpCapabilities()");const e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{const r=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(t){}const i=s.parse(r.sdp);return c.extractRtpCapabilities({sdpObject:i})}catch(t){try{e.close()}catch(r){}throw t}}async getNativeSctpCapabilities(){return h.debug("getNativeSctpCapabilities()"),{numStreams:u}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:c,proprietaryConstraints:d,extendedRtpCapabilities:p}){h.debug("run()"),this._direction=e,this._remoteSdp=new l.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,planB:!0}),this._sendingRtpParametersByKind={audio:o.getSendingRtpParameters("audio",p),video:o.getSendingRtpParameters("video",p)},this._sendingRemoteRtpParametersByKind={audio:o.getSendingRemoteRtpParameters("audio",p),video:o.getSendingRemoteRtpParameters("video",p)},s.role&&"auto"!==s.role&&(this._forcedLocalDtlsRole="server"===s.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b",...c},d),this._pc.addEventListener("icegatheringstatechange",(()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)})),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",(()=>{this.emit("@connectionstatechange",this._pc.connectionState)})):this._pc.addEventListener("iceconnectionstatechange",(()=>{switch(h.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}}))}async updateIceServers(e){h.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(h.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});h.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};h.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};h.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();h.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){this.assertSendDirection(),h.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),i&&h.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addStream(this._sendStream);let a,p=await this._pc.createOffer(),l=s.parse(p.sdp);const u=n.clone(this._sendingRtpParametersByKind[e.kind]);u.codecs=o.reduceCodecs(u.codecs);const m=n.clone(this._sendingRemoteRtpParametersByKind[e.kind]);if(m.codecs=o.reduceCodecs(m.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),"video"===e.kind&&t&&t.length>1&&(h.debug("send() | enabling simulcast"),l=s.parse(p.sdp),a=l.media.find((e=>"video"===e.type)),d.addLegacySimulcast({offerMediaObject:a,track:e,numStreams:t.length}),p={type:"offer",sdp:s.write(l)}),h.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p),l=s.parse(this._pc.localDescription.sdp),a=l.media.find((t=>t.type===e.kind)),u.rtcp.cname=c.getCname({offerMediaObject:a}),u.encodings=d.getRtpEncodings({offerMediaObject:a,track:e}),t)for(let s=0;s<u.encodings.length;++s)t[s]&&Object.assign(u.encodings[s],t[s]);if(u.encodings.length>1&&("video/vp8"===u.codecs[0].mimeType.toLowerCase()||"video/h264"===u.codecs[0].mimeType.toLowerCase()))for(const s of u.encodings)s.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:a,offerRtpParameters:u,answerRtpParameters:m,codecOptions:r});const f={type:"answer",sdp:this._remoteSdp.getSdp()};h.debug("send() | calling pc.setRemoteDescription() [answer:%o]",f),await this._pc.setRemoteDescription(f);const g=String(this._nextSendLocalId);return this._nextSendLocalId++,this._mapSendLocalIdTrack.set(g,e),{localId:g,rtpParameters:u}}async stopSending(e){this.assertSendDirection(),h.debug("stopSending() [localId:%s]",e);const t=this._mapSendLocalIdTrack.get(e);if(!t)throw new Error("track not found");this._mapSendLocalIdTrack.delete(e),this._sendStream.removeTrack(t),this._pc.addStream(this._sendStream);const r=await this._pc.createOffer();h.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(i){if(0===this._sendStream.getTracks().length)return void h.warn("stopSending() | ignoring expected error due no sending tracks: %s",i.toString());throw i}if("stable"===this._pc.signalingState)return;const s={type:"answer",sdp:this._remoteSdp.getSdp()};h.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){throw new a.UnsupportedError("not implemented")}async setMaxSpatialLayer(e,t){throw new a.UnsupportedError("not implemented")}async setRtpEncodingParameters(e,t){throw new a.UnsupportedError("not implemented")}async getSenderStats(e){throw new a.UnsupportedError("not implemented")}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:a}){this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:a};h.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%u.MIS,!this._hasDataChannelMediaSection){const e=await this._pc.createOffer(),t=s.parse(e.sdp),r=t.media.find((e=>"application"===e.type));this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),h.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});const i={type:"answer",sdp:this._remoteSdp.getSdp()};h.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertRecvDirection();const t=[],r=new Map;for(const s of e){const{trackId:e,kind:t,rtpParameters:i}=s;h.debug("receive() [trackId:%s, kind:%s]",e,t);const a=t;let o=s.streamId||i.rtcp.cname;h.debug("receive() | forcing a random remote streamId to avoid well known bug in react-native-webrtc"),o+=`-hack-${n.generateRandomNumber()}`,r.set(e,o),this._remoteSdp.receive({mid:a,kind:t,offerRtpParameters:i,streamId:o,trackId:e})}const i={type:"offer",sdp:this._remoteSdp.getSdp()};h.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let a=await this._pc.createAnswer();const o=s.parse(a.sdp);for(const s of e){const{kind:e,rtpParameters:t}=s,r=e,i=o.media.find((e=>String(e.mid)===r));c.applyCodecParameters({offerRtpParameters:t,answerMediaObject:i})}a={type:"answer",sdp:s.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),h.debug("receive() | calling pc.setLocalDescription() [answer:%o]",a),await this._pc.setLocalDescription(a);for(const s of e){const{kind:e,trackId:i,rtpParameters:a}=s,n=i,o=e,c=r.get(i),d=this._pc.getRemoteStreams().find((e=>e.id===c)).getTrackById(n);if(!d)throw new Error("remote track not found");this._mapRecvLocalIdInfo.set(n,{mid:o,rtpParameters:a}),t.push({localId:n,track:d})}return t}async stopReceiving(e){this.assertRecvDirection();for(const s of e){h.debug("stopReceiving() [localId:%s]",s);const{mid:e,rtpParameters:t}=this._mapRecvLocalIdInfo.get(s)||{};this._mapRecvLocalIdInfo.delete(s),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:t})}const t={type:"offer",sdp:this._remoteSdp.getSdp()};h.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();h.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){throw new a.UnsupportedError("not implemented")}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmitTime:n,maxRetransmits:o,protocol:r};h.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});const e={type:"offer",sdp:this._remoteSdp.getSdp()};h.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();if(!this._transportReady){const e=s.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}h.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=s.parse(this._pc.localDescription.sdp));const r=c.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise(((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)})),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return ft.ReactNative=m,ft}(),k=new i.Logger("Device");function D(){if("object"==typeof navigator&&"ReactNative"===navigator.product)return k.debug("detectDevice() | React-Native detected"),"undefined"==typeof RTCPeerConnection?void k.warn("detectDevice() | unsupported react-native-webrtc without RTCPeerConnection, forgot to call registerGlobals()?"):"undefined"!=typeof RTCRtpTransceiver?(k.debug("detectDevice() | ReactNative UnifiedPlan handler chosen"),"ReactNativeUnifiedPlan"):(k.debug("detectDevice() | ReactNative PlanB handler chosen"),"ReactNative");if("object"!=typeof navigator||"string"!=typeof navigator.userAgent)k.warn("detectDevice() | unknown device");else{const e=navigator.userAgent,t=new s.UAParser(e);k.debug("detectDevice() | browser detected [ua:%s, parsed:%o]",e,t.getResult());const r=t.getBrowser(),i=r.name?.toLowerCase(),a=parseInt(r.major??"0"),n=t.getEngine(),o=n.name?.toLowerCase(),c=t.getOS(),d=c.name?.toLowerCase(),p=parseFloat(c.version??"0"),l=t.getDevice(),h=l.model?.toLowerCase(),u="ios"===d||"ipad"===h,m=i&&["chrome","chromium","mobile chrome","chrome webview","chrome headless"].includes(i),f=i&&["firefox","mobile firefox","mobile focus"].includes(i),g=i&&["safari","mobile safari"].includes(i),b=i&&["edge"].includes(i);if((m||b)&&!u&&a>=111)return"Chrome111";if(m&&!u&&a>=74||b&&!u&&a>=88)return"Chrome74";if(m&&!u&&a>=70)return"Chrome70";if(m&&!u&&a>=67)return"Chrome67";if(m&&!u&&a>=55)return"Chrome55";if(f&&!u&&a>=120)return"Firefox120";if(f&&!u&&a>=60)return"Firefox60";if(f&&u&&p>=14.3)return"Safari12";if(g&&a>=12&&"undefined"!=typeof RTCRtpTransceiver&&RTCRtpTransceiver.prototype.hasOwnProperty("currentDirection"))return"Safari12";if(g&&a>=11)return"Safari11";if(b&&!u&&a>=11&&a<=18)return"Edge11";if("webkit"===o&&u&&"undefined"!=typeof RTCRtpTransceiver&&RTCRtpTransceiver.prototype.hasOwnProperty("currentDirection"))return"Safari12";if("blink"===o){const t=e.match(/(?:(?:Chrome|Chromium))[ /](\w+)/i);if(t){const e=Number(t[1]);return e>=111?"Chrome111":e>=74?"Chrome74":e>=70?"Chrome70":e>=67?"Chrome67":"Chrome55"}return"Chrome111"}k.warn("detectDevice() | browser not supported [name:%s, version:%s]",i,a)}}return h.Device=class{constructor({handlerName:e,handlerFactory:t,Handler:r}={}){if(this._loaded=!1,this._observer=new a.EnhancedEventEmitter,k.debug("constructor()"),r){if(k.warn("constructor() | Handler option is DEPRECATED, use handlerName or handlerFactory instead"),"string"!=typeof r)throw new TypeError("non string Handler option no longer supported, use handlerFactory instead");e=r}if(e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)k.debug("constructor() | handler given: %s",e);else{if(!(e=D()))throw new n.UnsupportedError("device not supported");k.debug("constructor() | detected handler: %s",e)}switch(e){case"Chrome111":this._handlerFactory=p.Chrome111.createFactory();break;case"Chrome74":this._handlerFactory=l.Chrome74.createFactory();break;case"Chrome70":this._handlerFactory=u.Chrome70.createFactory();break;case"Chrome67":this._handlerFactory=m.Chrome67.createFactory();break;case"Chrome55":this._handlerFactory=g.Chrome55.createFactory();break;case"Firefox120":this._handlerFactory=b.Firefox120.createFactory();break;case"Firefox60":this._handlerFactory=y.Firefox60.createFactory();break;case"Safari12":this._handlerFactory=w.Safari12.createFactory();break;case"Safari11":this._handlerFactory=v.Safari11.createFactory();break;case"Edge11":this._handlerFactory=S.Edge11.createFactory();break;case"ReactNativeUnifiedPlan":this._handlerFactory=R.ReactNativeUnifiedPlan.createFactory();break;case"ReactNative":this._handlerFactory=C.ReactNative.createFactory();break;default:throw new TypeError(`unknown handlerName "${e}"`)}}const s=this._handlerFactory();this._handlerName=s.name,s.close(),this._extendedRtpCapabilities=void 0,this._recvRtpCapabilities=void 0,this._canProduceByKind={audio:!1,video:!1},this._sctpCapabilities=void 0}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){if(!this._loaded)throw new n.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new n.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e}){let t;k.debug("load() [routerRtpCapabilities:%o]",e);try{if(this._loaded)throw new n.InvalidStateError("already loaded");const r=o.clone(e);c.validateRtpCapabilities(r),t=this._handlerFactory();const s=await t.getNativeRtpCapabilities();k.debug("load() | got native RTP capabilities:%o",s);const i=o.clone(s);c.validateRtpCapabilities(i),this._extendedRtpCapabilities=c.getExtendedRtpCapabilities(i,r),k.debug("load() | got extended RTP capabilities:%o",this._extendedRtpCapabilities),this._canProduceByKind.audio=c.canSend("audio",this._extendedRtpCapabilities),this._canProduceByKind.video=c.canSend("video",this._extendedRtpCapabilities),this._recvRtpCapabilities=c.getRecvRtpCapabilities(this._extendedRtpCapabilities),c.validateRtpCapabilities(this._recvRtpCapabilities),k.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),this._sctpCapabilities=await t.getNativeSctpCapabilities(),k.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),c.validateSctpCapabilities(this._sctpCapabilities),k.debug("load() succeeded"),this._loaded=!0,t.close()}catch(r){throw t&&t.close(),r}}canProduce(e){if(!this._loaded)throw new n.InvalidStateError("not loaded");if("audio"!==e&&"video"!==e)throw new TypeError(`invalid kind "${e}"`);return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:c,appData:d}){return k.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:c,appData:d})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:c,appData:d}){return k.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:c,appData:d})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:s,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,proprietaryConstraints:l,appData:h}){if(!this._loaded)throw new n.InvalidStateError("not loaded");if("string"!=typeof t)throw new TypeError("missing id");if("object"!=typeof r)throw new TypeError("missing iceParameters");if(!Array.isArray(s))throw new TypeError("missing iceCandidates");if("object"!=typeof i)throw new TypeError("missing dtlsParameters");if(a&&"object"!=typeof a)throw new TypeError("wrong sctpParameters");if(h&&"object"!=typeof h)throw new TypeError("if given, appData must be an object");const u=new d.Transport({direction:e,id:t,iceParameters:r,iceCandidates:s,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,proprietaryConstraints:l,appData:h,handlerFactory:this._handlerFactory,extendedRtpCapabilities:this._extendedRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",u),u}},h}var bt,_t={},yt={};var wt,vt,St,Rt={};function Pt(){return vt||(vt=1,e=_t,t=_t&&_t.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),r=_t&&_t.__exportStar||function(e,r){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(r,s)||t(r,e,s)},Object.defineProperty(e,"__esModule",{value:!0}),r(gt(),e),r(ne(),e),r(J(),e),r(Y(),e),r(te(),e),r(ae(),e),r((bt||(bt=1,Object.defineProperty(yt,"__esModule",{value:!0})),yt),e),r((wt||(wt=1,Object.defineProperty(Rt,"__esModule",{value:!0})),Rt),e),r(xe(),e),r(T(),e)),_t;var e,t,r}var Ct=(St||(St=1,function(e){var t=o&&o.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,i)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),r=o&&o.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=o&&o.__importStar||function(e){if(e&&e.__esModule)return e;var s={};if(null!=e)for(var i in e)"default"!==i&&Object.prototype.hasOwnProperty.call(e,i)&&t(s,e,i);return r(s,e),s},i=o&&o.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.debug=e.parseScalabilityMode=e.detectDevice=e.Device=e.version=e.types=void 0;const a=i(p());e.debug=a.default;const n=gt();Object.defineProperty(e,"Device",{enumerable:!0,get:function(){return n.Device}}),Object.defineProperty(e,"detectDevice",{enumerable:!0,get:function(){return n.detectDevice}});const c=s(Pt());e.types=c,e.version="3.7.12";var d=$e();Object.defineProperty(e,"parseScalabilityMode",{enumerable:!0,get:function(){return d.parse}})}(o)),o);const kt={"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"},Tt={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"},Dt={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"},Et={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"},It={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};class xt{static getFirstMatch(e,t){const r=t.match(e);return r&&r.length>0&&r[1]||""}static getSecondMatch(e,t){const r=t.match(e);return r&&r.length>1&&r[2]||""}static matchAndReturnConst(e,t,r){if(e.test(t))return r}static getWindowsVersionName(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}}static getMacOSVersionName(e){const t=e.split(".").splice(0,2).map((e=>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}}static getAndroidVersionName(e){const t=e.split(".").splice(0,2).map((e=>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}static getVersionPrecision(e){return e.split(".").length}static compareVersions(e,t,r=!1){const s=xt.getVersionPrecision(e),i=xt.getVersionPrecision(t);let a=Math.max(s,i),n=0;const o=xt.map([e,t],(e=>{const t=a-xt.getVersionPrecision(e),r=e+new Array(t+1).join(".0");return xt.map(r.split("."),(e=>new Array(20-e.length).join("0")+e)).reverse()}));for(r&&(n=a-Math.min(s,i)),a-=1;a>=n;){if(o[0][a]>o[1][a])return 1;if(o[0][a]===o[1][a]){if(a===n)return 0;a-=1}else if(o[0][a]<o[1][a])return-1}}static map(e,t){const r=[];let s;if(Array.prototype.map)return Array.prototype.map.call(e,t);for(s=0;s<e.length;s+=1)r.push(t(e[s]));return r}static find(e,t){let r,s;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,s=e.length;r<s;r+=1){const s=e[r];if(t(s,r))return s}}static assign(e,...t){const r=e;let s,i;if(Object.assign)return Object.assign(e,...t);for(s=0,i=t.length;s<i;s+=1){const e=t[s];if("object"==typeof e&&null!==e){Object.keys(e).forEach((t=>{r[t]=e[t]}))}}return e}static getBrowserAlias(e){return kt[e]}static getBrowserTypeByAlias(e){return Tt[e]||""}}const Mt=/version\/(\d+(\.?_?\d+)+)/i,Ot=[{test:[/googlebot/i],describe(e){const t={name:"Googlebot"},r=xt.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/opera/i],describe(e){const t={name:"Opera"},r=xt.getFirstMatch(Mt,e)||xt.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\/|opios/i],describe(e){const t={name:"Opera"},r=xt.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe(e){const t={name:"Samsung Internet for Android"},r=xt.getFirstMatch(Mt,e)||xt.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe(e){const t={name:"NAVER Whale Browser"},r=xt.getFirstMatch(Mt,e)||xt.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe(e){const t={name:"MZ Browser"},r=xt.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/focus/i],describe(e){const t={name:"Focus"},r=xt.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/swing/i],describe(e){const t={name:"Swing"},r=xt.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/coast/i],describe(e){const t={name:"Opera Coast"},r=xt.getFirstMatch(Mt,e)||xt.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe(e){const t={name:"Opera Touch"},r=xt.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe(e){const t={name:"Yandex Browser"},r=xt.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe(e){const t={name:"UC Browser"},r=xt.getFirstMatch(Mt,e)||xt.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe(e){const t={name:"Maxthon"},r=xt.getFirstMatch(Mt,e)||xt.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe(e){const t={name:"Epiphany"},r=xt.getFirstMatch(Mt,e)||xt.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe(e){const t={name:"Puffin"},r=xt.getFirstMatch(Mt,e)||xt.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe(e){const t={name:"Sleipnir"},r=xt.getFirstMatch(Mt,e)||xt.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe(e){const t={name:"K-Meleon"},r=xt.getFirstMatch(Mt,e)||xt.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe(e){const t={name:"WeChat"},r=xt.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe(e){const t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=xt.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe(e){const t={name:"Internet Explorer"},r=xt.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\sedg\//i],describe(e){const t={name:"Microsoft Edge"},r=xt.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe(e){const t={name:"Microsoft Edge"},r=xt.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe(e){const t={name:"Vivaldi"},r=xt.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe(e){const t={name:"SeaMonkey"},r=xt.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe(e){const t={name:"Sailfish"},r=xt.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe(e){const t={name:"Amazon Silk"},r=xt.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe(e){const t={name:"PhantomJS"},r=xt.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe(e){const t={name:"SlimerJS"},r=xt.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(e){const t={name:"BlackBerry"},r=xt.getFirstMatch(Mt,e)||xt.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe(e){const t={name:"WebOS Browser"},r=xt.getFirstMatch(Mt,e)||xt.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe(e){const t={name:"Bada"},r=xt.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe(e){const t={name:"Tizen"},r=xt.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe(e){const t={name:"QupZilla"},r=xt.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe(e){const t={name:"Firefox"},r=xt.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe(e){const t={name:"Electron"},r=xt.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe(e){const t={name:"Miui"},r=xt.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe(e){const t={name:"Chromium"},r=xt.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe(e){const t={name:"Chrome"},r=xt.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe(e){const t={name:"Google Search"},r=xt.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test(e){const t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe(e){const t={name:"Android Browser"},r=xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe(e){const t={name:"PlayStation 4"},r=xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe(e){const t={name:"Safari"},r=xt.getFirstMatch(Mt,e);return r&&(t.version=r),t}},{test:[/.*/i],describe(e){const t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:xt.getFirstMatch(t,e),version:xt.getSecondMatch(t,e)}}}],Lt=[{test:[/Roku\/DVP/],describe(e){const t=xt.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return{name:Et.Roku,version:t}}},{test:[/windows phone/i],describe(e){const t=xt.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return{name:Et.WindowsPhone,version:t}}},{test:[/windows /i],describe(e){const t=xt.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=xt.getWindowsVersionName(t);return{name:Et.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe(e){const t={name:Et.iOS},r=xt.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe(e){const t=xt.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=xt.getMacOSVersionName(t),s={name:Et.MacOS,version:t};return r&&(s.versionName=r),s}},{test:[/(ipod|iphone|ipad)/i],describe(e){const t=xt.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return{name:Et.iOS,version:t}}},{test(e){const t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe(e){const t=xt.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=xt.getAndroidVersionName(t),s={name:Et.Android,version:t};return r&&(s.versionName=r),s}},{test:[/(web|hpw)[o0]s/i],describe(e){const t=xt.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:Et.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(e){const t=xt.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||xt.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||xt.getFirstMatch(/\bbb(\d+)/i,e);return{name:Et.BlackBerry,version:t}}},{test:[/bada/i],describe(e){const t=xt.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return{name:Et.Bada,version:t}}},{test:[/tizen/i],describe(e){const t=xt.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return{name:Et.Tizen,version:t}}},{test:[/linux/i],describe:()=>({name:Et.Linux})},{test:[/CrOS/],describe:()=>({name:Et.ChromeOS})},{test:[/PlayStation 4/],describe(e){const t=xt.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return{name:Et.PlayStation4,version:t}}}],At=[{test:[/googlebot/i],describe:()=>({type:"bot",vendor:"Google"})},{test:[/huawei/i],describe(e){const t=xt.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:Dt.mobile,vendor:"Huawei"};return t&&(r.model=t),r}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:()=>({type:Dt.tablet,vendor:"Nexus"})},{test:[/ipad/i],describe:()=>({type:Dt.tablet,vendor:"Apple",model:"iPad"})},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:()=>({type:Dt.tablet,vendor:"Apple",model:"iPad"})},{test:[/kftt build/i],describe:()=>({type:Dt.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"})},{test:[/silk/i],describe:()=>({type:Dt.tablet,vendor:"Amazon"})},{test:[/tablet(?! pc)/i],describe:()=>({type:Dt.tablet})},{test(e){const t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe(e){const t=xt.getFirstMatch(/(ipod|iphone)/i,e);return{type:Dt.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:()=>({type:Dt.mobile,vendor:"Nexus"})},{test:[/[^-]mobi/i],describe:()=>({type:Dt.mobile})},{test:e=>"blackberry"===e.getBrowserName(!0),describe:()=>({type:Dt.mobile,vendor:"BlackBerry"})},{test:e=>"bada"===e.getBrowserName(!0),describe:()=>({type:Dt.mobile})},{test:e=>"windows phone"===e.getBrowserName(),describe:()=>({type:Dt.mobile,vendor:"Microsoft"})},{test(e){const t=Number(String(e.getOSVersion()).split(".")[0]);return"android"===e.getOSName(!0)&&t>=3},describe:()=>({type:Dt.tablet})},{test:e=>"android"===e.getOSName(!0),describe:()=>({type:Dt.mobile})},{test:e=>"macos"===e.getOSName(!0),describe:()=>({type:Dt.desktop,vendor:"Apple"})},{test:e=>"windows"===e.getOSName(!0),describe:()=>({type:Dt.desktop})},{test:e=>"linux"===e.getOSName(!0),describe:()=>({type:Dt.desktop})},{test:e=>"playstation 4"===e.getOSName(!0),describe:()=>({type:Dt.tv})},{test:e=>"roku"===e.getOSName(!0),describe:()=>({type:Dt.tv})}],jt=[{test:e=>"microsoft edge"===e.getBrowserName(!0),describe(e){if(/\sedg\//i.test(e))return{name:It.Blink};const t=xt.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return{name:It.EdgeHTML,version:t}}},{test:[/trident/i],describe(e){const t={name:It.Trident},r=xt.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:e=>e.test(/presto/i),describe(e){const t={name:It.Presto},r=xt.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test(e){const t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe(e){const t={name:It.Gecko},r=xt.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\/537\.36/i],describe:()=>({name:It.Blink})},{test:[/(apple)?webkit/i],describe(e){const t={name:It.WebKit},r=xt.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}}];class Nt{constructor(e,t=!1){if(null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse()}getUA(){return this._ua}test(e){return e.test(this._ua)}parseBrowser(){this.parsedResult.browser={};const e=xt.find(Ot,(e=>{if("function"==typeof e.test)return e.test(this);if(e.test instanceof Array)return e.test.some((e=>this.test(e)));throw new Error("Browser's test function is not valid")}));return e&&(this.parsedResult.browser=e.describe(this.getUA())),this.parsedResult.browser}getBrowser(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()}getBrowserName(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||""}getBrowserVersion(){return this.getBrowser().version}getOS(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()}parseOS(){this.parsedResult.os={};const e=xt.find(Lt,(e=>{if("function"==typeof e.test)return e.test(this);if(e.test instanceof Array)return e.test.some((e=>this.test(e)));throw new Error("Browser's test function is not valid")}));return e&&(this.parsedResult.os=e.describe(this.getUA())),this.parsedResult.os}getOSName(e){const{name:t}=this.getOS();return e?String(t).toLowerCase()||"":t||""}getOSVersion(){return this.getOS().version}getPlatform(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()}getPlatformType(e=!1){const{type:t}=this.getPlatform();return e?String(t).toLowerCase()||"":t||""}parsePlatform(){this.parsedResult.platform={};const e=xt.find(At,(e=>{if("function"==typeof e.test)return e.test(this);if(e.test instanceof Array)return e.test.some((e=>this.test(e)));throw new Error("Browser's test function is not valid")}));return e&&(this.parsedResult.platform=e.describe(this.getUA())),this.parsedResult.platform}getEngine(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()}getEngineName(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||""}parseEngine(){this.parsedResult.engine={};const e=xt.find(jt,(e=>{if("function"==typeof e.test)return e.test(this);if(e.test instanceof Array)return e.test.some((e=>this.test(e)));throw new Error("Browser's test function is not valid")}));return e&&(this.parsedResult.engine=e.describe(this.getUA())),this.parsedResult.engine}parse(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this}getResult(){return xt.assign({},this.parsedResult)}satisfies(e){const t={};let r=0;const s={};let i=0;if(Object.keys(e).forEach((a=>{const n=e[a];"string"==typeof n?(s[a]=n,i+=1):"object"==typeof n&&(t[a]=n,r+=1)})),r>0){const e=Object.keys(t),r=xt.find(e,(e=>this.isOS(e)));if(r){const e=this.satisfies(t[r]);if(void 0!==e)return e}const s=xt.find(e,(e=>this.isPlatform(e)));if(s){const e=this.satisfies(t[s]);if(void 0!==e)return e}}if(i>0){const e=Object.keys(s),t=xt.find(e,(e=>this.isBrowser(e,!0)));if(void 0!==t)return this.compareVersion(s[t])}}isBrowser(e,t=!1){const r=this.getBrowserName().toLowerCase();let s=e.toLowerCase();const i=xt.getBrowserTypeByAlias(s);return t&&i&&(s=i.toLowerCase()),s===r}compareVersion(e){let t=[0],r=e,s=!1;const i=this.getBrowserVersion();if("string"==typeof i)return">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(s=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(s=!0,r=e.substr(1)),t.indexOf(xt.compareVersions(i,r,s))>-1}isOS(e){return this.getOSName(!0)===String(e).toLowerCase()}isPlatform(e){return this.getPlatformType(!0)===String(e).toLowerCase()}isEngine(e){return this.getEngineName(!0)===String(e).toLowerCase()}is(e,t=!1){return this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)}some(e=[]){return e.some((e=>this.is(e)))}}
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).samvyo={})}(this,function(e){"use strict";function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var r,s,i,a,n,o={},c={exports:{}};function d(){if(s)return r;s=1;var e=1e3,t=60*e,i=60*t,a=24*i,n=7*a,o=365.25*a;function c(e,t,r,s){var i=t>=1.5*r;return Math.round(e/r)+" "+s+(i?"s":"")}return r=function(r,s){s=s||{};var d=typeof r;if("string"===d&&r.length>0)return function(r){if((r=String(r)).length>100)return;var s=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(!s)return;var c=parseFloat(s[1]);switch((s[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return c*o;case"weeks":case"week":case"w":return c*n;case"days":case"day":case"d":return c*a;case"hours":case"hour":case"hrs":case"hr":case"h":return c*i;case"minutes":case"minute":case"mins":case"min":case"m":return c*t;case"seconds":case"second":case"secs":case"sec":case"s":return c*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}(r);if("number"===d&&isFinite(r))return s.long?function(r){var s=Math.abs(r);if(s>=a)return c(r,s,a,"day");if(s>=i)return c(r,s,i,"hour");if(s>=t)return c(r,s,t,"minute");if(s>=e)return c(r,s,e,"second");return r+" ms"}(r):function(r){var s=Math.abs(r);if(s>=a)return Math.round(r/a)+"d";if(s>=i)return Math.round(r/i)+"h";if(s>=t)return Math.round(r/t)+"m";if(s>=e)return Math.round(r/e)+"s";return r+"ms"}(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))}}function l(){return n||(n=1,function(e,t){t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const r="color: "+this.color;t.splice(1,0,r,"color: inherit");let s=0,i=0;t[0].replace(/%[a-zA-Z%]/g,e=>{"%%"!==e&&(s++,"%c"===e&&(i=s))}),t.splice(i,0,r)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(r){}},t.load=function(){let e;try{e=t.storage.getItem("debug")||t.storage.getItem("DEBUG")}catch(r){}!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG);return e},t.useColors=function(){if("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let e;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(e[1],10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0)}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=(a?i:(a=1,i=function(e){function t(e){let s,i,a,n=null;function o(...e){if(!o.enabled)return;const r=o,i=Number(new Date),a=i-(s||i);r.diff=a,r.prev=s,r.curr=i,s=i,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let n=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,(s,i)=>{if("%%"===s)return"%";n++;const a=t.formatters[i];if("function"==typeof a){const t=e[n];s=a.call(r,t),e.splice(n,1),n--}return s}),t.formatArgs.call(r,e),(r.log||t.log).apply(r,e)}return o.namespace=e,o.useColors=t.useColors(),o.color=t.selectColor(e),o.extend=r,o.destroy=t.destroy,Object.defineProperty(o,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==n?n:(i!==t.namespaces&&(i=t.namespaces,a=t.enabled(e)),a),set:e=>{n=e}}),"function"==typeof t.init&&t.init(o),o}function r(e,r){const s=t(this.namespace+(void 0===r?":":r)+e);return s.log=this.log,s}function s(e,t){let r=0,s=0,i=-1,a=0;for(;r<e.length;)if(s<t.length&&(t[s]===e[r]||"*"===t[s]))"*"===t[s]?(i=s,a=r,s++):(r++,s++);else{if(-1===i)return!1;s=i+1,a++,r=a}for(;s<t.length&&"*"===t[s];)s++;return s===t.length}return t.debug=t,t.default=t,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){const e=[...t.names,...t.skips.map(e=>"-"+e)].join(",");return t.enable(""),e},t.enable=function(e){t.save(e),t.namespaces=e,t.names=[],t.skips=[];const r=("string"==typeof e?e:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(const s of r)"-"===s[0]?t.skips.push(s.slice(1)):t.names.push(s)},t.enabled=function(e){for(const r of t.skips)if(s(e,r))return!1;for(const r of t.names)if(s(e,r))return!0;return!1},t.humanize=d(),t.destroy=function(){},Object.keys(e).forEach(r=>{t[r]=e[r]}),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let r=0;for(let t=0;t<e.length;t++)r=(r<<5)-r+e.charCodeAt(t),r|=0;return t.colors[Math.abs(r)%t.colors.length]},t.enable(t.load()),t}))(t);const{formatters:r}=e.exports;r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}(c,c.exports)),c.exports}var p,u={};var h,m,f={};function g(){if(m)return h;m=1;var e,t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,a={};((e,r)=>{for(var s in r)t(e,s,{get:r[s],enumerable:!0})})(a,{BrowserDetector:()=>l,KnownBrowsers:()=>n,KnownPlatforms:()=>o,default:()=>p}),e=a,h=((e,a,n,o)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let c of s(a))!i.call(e,c)&&c!==n&&t(e,c,{get:()=>a[c],enumerable:!(o=r(a,c))||o.enumerable});return e})(t({},"__esModule",{value:!0}),e);var n={chrome:"Google Chrome",brave:"Brave",crios:"Google Chrome",edge:"Microsoft Edge",edg:"Microsoft Edge",edgios:"Microsoft Edge",fennec:"Mozilla Firefox",jsdom:"JsDOM",mozilla:"Mozilla Firefox",fxios:"Mozilla Firefox",msie:"Microsoft Internet Explorer",opera:"Opera",opios:"Opera",opr:"Opera",opt:"Opera",rv:"Microsoft Internet Explorer",safari:"Safari",samsungbrowser:"Samsung Browser",electron:"Electron"},o={android:"Android",androidTablet:"Android Tablet",cros:"Chrome OS",fennec:"Android Tablet",ipad:"IPad",ipod:"IPod",iphone:"IPhone",jsdom:"JsDOM",linux:"Linux",mac:"Macintosh",tablet:"Android Tablet",win:"Windows","windows phone":"Windows Phone",xbox:"Microsoft Xbox"},c=(e,t=-1)=>{let r=new RegExp(`^-?\\d+(?:.\\d{0,${t}})?`),s=Number(e).toString().match(r);return s?s[0]:null},d=()=>typeof window<"u"?window.navigator:null,l=class{userAgent;constructor(e){this.userAgent=e||d()?.userAgent||null}static get VERSION(){return"4.1.0"}parseUserAgent(e){let t={},r=e||this.userAgent||"",s=r.toLowerCase().replace(/\s\s+/g," "),i=/(edge)\/([\w.]+)/.exec(s)||/(edg)[/]([\w.]+)/.exec(s)||/(opr)[/]([\w.]+)/.exec(s)||/(opt)[/]([\w.]+)/.exec(s)||/(fxios)[/]([\w.]+)/.exec(s)||/(edgios)[/]([\w.]+)/.exec(s)||/(jsdom)[/]([\w.]+)/.exec(s)||/(samsungbrowser)[/]([\w.]+)/.exec(s)||/(electron)[/]([\w.]+)/.exec(s)||/(chrome)[/]([\w.]+)/.exec(s)||/(crios)[/]([\w.]+)/.exec(s)||/(opios)[/]([\w.]+)/.exec(s)||/(version)(applewebkit)[/]([\w.]+).*(safari)[/]([\w.]+)/.exec(s)||/(webkit)[/]([\w.]+).*(version)[/]([\w.]+).*(safari)[/]([\w.]+)/.exec(s)||/(applewebkit)[/]([\w.]+).*(safari)[/]([\w.]+)/.exec(s)||/(webkit)[/]([\w.]+)/.exec(s)||/(opera)(?:.*version|)[/]([\w.]+)/.exec(s)||/(msie) ([\w.]+)/.exec(s)||/(fennec)[/]([\w.]+)/.exec(s)||s.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(s)||s.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(s)||[],a=/(ipad)/.exec(s)||/(ipod)/.exec(s)||/(iphone)/.exec(s)||/(jsdom)/.exec(s)||/(windows phone)/.exec(s)||/(xbox)/.exec(s)||/(win)/.exec(s)||/(tablet)/.exec(s)||/(android)/.test(s)&&!1===/(mobile)/.test(s)&&["androidTablet"]||/(android)/.exec(s)||/(mac)/.exec(s)||/(linux)/.exec(s)||/(cros)/.exec(s)||[],l=i[5]||i[3]||i[1]||null,p=a[0]||null,u=i[4]||i[2]||null,h=d();"chrome"===l&&"function"==typeof h?.brave?.isBrave&&(l="brave"),l&&(t[l]=!0),p&&(t[p]=!0);let m=!!(t.tablet||t.android||t.androidTablet),f=!!(t.ipad||t.tablet||t.androidTablet),g=!!(t.android||t.androidTablet||t.tablet||t.ipad||t.ipod||t.iphone||t["windows phone"]),b=!!(t.cros||t.mac||t.linux||t.win),y=!!(t.brave||t.chrome||t.crios||t.opr||t.safari||t.edg||t.electron),_=!(!t.msie&&!t.rv),v=!(!t.chrome&&!t.crios),w=!!(t.fxios||t.fennec||t.mozilla),S=!!t.safari,C=!!(t.opera||t.opios||t.opr||t.opt),P=!!(t.edg||t.edge||t.edgios);return{name:n[l]??null,platform:o[p]??null,userAgent:r,version:u,shortVersion:u?c(parseFloat(u),2):null,isAndroid:m,isTablet:f,isMobile:g,isDesktop:b,isWebkit:y,isIE:_,isChrome:v,isFireFox:w,isSafari:S,isOpera:C,isEdge:P}}getBrowserInfo(){let e=this.parseUserAgent();return{name:e.name,platform:e.platform,userAgent:e.userAgent,version:e.version,shortVersion:e.shortVersion}}},p=l;return h}var b,y={};function _(){if(b)return y;b=1,Object.defineProperty(y,"__esModule",{value:!0}),y.Logger=void 0;const e=l(),t="mediasoup-client";return y.Logger=class{_debug;_warn;_error;constructor(r){r?(this._debug=(0,e.default)(`${t}:${r}`),this._warn=(0,e.default)(`${t}:WARN:${r}`),this._error=(0,e.default)(`${t}:ERROR:${r}`)):(this._debug=(0,e.default)(t),this._warn=(0,e.default)(`${t}:WARN`),this._error=(0,e.default)(`${t}:ERROR`)),this._debug.log=function(){}.bind(),this._warn.log=function(){}.bind(),this._error.log=function(){}.bind()}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}},y}var v,w,S={},C={exports:{}};function P(){if(v)return C.exports;v=1;var e,t="object"==typeof Reflect?Reflect:null,r=t&&"function"==typeof t.apply?t.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};e=t&&"function"==typeof t.ownKeys?t.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var s=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}C.exports=i,C.exports.once=function(e,t){return new Promise(function(r,s){function i(r){e.removeListener(t,a),s(r)}function a(){"function"==typeof e.removeListener&&e.removeListener("error",i),r([].slice.call(arguments))}m(e,t,a,{once:!0}),"error"!==t&&function(e,t,r){"function"==typeof e.on&&m(e,"error",t,r)}(e,i,{once:!0})})},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var a=10;function n(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function o(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function c(e,t,r,s){var i,a,c;if(n(r),void 0===(a=e._events)?(a=e._events=Object.create(null),e._eventsCount=0):(void 0!==a.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),a=e._events),c=a[t]),void 0===c)c=a[t]=r,++e._eventsCount;else if("function"==typeof c?c=a[t]=s?[r,c]:[c,r]:s?c.unshift(r):c.push(r),(i=o(e))>0&&c.length>i&&!c.warned){c.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+c.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=e,d.type=t,d.count=c.length,console&&console.warn}return e}function d(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function l(e,t,r){var s={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=d.bind(s);return i.listener=r,s.wrapFn=i,i}function p(e,t,r){var s=e._events;if(void 0===s)return[];var i=s[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(i):h(i,i.length)}function u(e){var t=this._events;if(void 0!==t){var r=t[e];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function h(e,t){for(var r=new Array(t),s=0;s<t;++s)r[s]=e[s];return r}function m(e,t,r,s){if("function"==typeof e.on)s.once?e.once(t,r):e.on(t,r);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function i(a){s.once&&e.removeEventListener(t,i),r(a)})}}return Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(e){if("number"!=typeof e||e<0||s(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");a=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||s(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return o(this)},i.prototype.emit=function(e){for(var t=[],s=1;s<arguments.length;s++)t.push(arguments[s]);var i="error"===e,a=this._events;if(void 0!==a)i=i&&void 0===a.error;else if(!i)return!1;if(i){var n;if(t.length>0&&(n=t[0]),n instanceof Error)throw n;var o=new Error("Unhandled error."+(n?" ("+n.message+")":""));throw o.context=n,o}var c=a[e];if(void 0===c)return!1;if("function"==typeof c)r(c,this,t);else{var d=c.length,l=h(c,d);for(s=0;s<d;++s)r(l[s],this,t)}return!0},i.prototype.addListener=function(e,t){return c(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return c(this,e,t,!0)},i.prototype.once=function(e,t){return n(t),this.on(e,l(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return n(t),this.prependListener(e,l(this,e,t)),this},i.prototype.removeListener=function(e,t){var r,s,i,a,o;if(n(t),void 0===(s=this._events))return this;if(void 0===(r=s[e]))return this;if(r===t||r.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete s[e],s.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(i=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){o=r[a].listener,i=a;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,i),1===r.length&&(s[e]=r[0]),void 0!==s.removeListener&&this.emit("removeListener",e,o||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,r,s;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0===arguments.length){var i,a=Object.keys(r);for(s=0;s<a.length;++s)"removeListener"!==(i=a[s])&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(s=t.length-1;s>=0;s--)this.removeListener(e,t[s]);return this},i.prototype.listeners=function(e){return p(this,e,!0)},i.prototype.rawListeners=function(e){return p(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):u.call(e,t)},i.prototype.listenerCount=u,i.prototype.eventNames=function(){return this._eventsCount>0?e(this._events):[]},C.exports}function k(){if(w)return S;w=1,Object.defineProperty(S,"__esModule",{value:!0}),S.EnhancedEventEmitter=void 0;const e=P(),t=new(_().Logger)("EnhancedEventEmitter");class r extends e.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}close(){super.removeAllListeners()}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...r){try{return super.emit(e,...r)}catch(s){t.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,s);try{super.emit("listenererror",e,s)}catch(i){}return Boolean(super.listenerCount(e))}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}}return S.EnhancedEventEmitter=r,S}var R,T={};function E(){if(R)return T;R=1,Object.defineProperty(T,"__esModule",{value:!0}),T.InvalidStateError=T.UnsupportedError=void 0;class e extends Error{constructor(t){super(t),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,e):this.stack=new Error(t).stack}}T.UnsupportedError=e;class t extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,t):this.stack=new Error(e).stack}}return T.InvalidStateError=t,T}var I,x={};function D(){if(I)return x;return I=1,Object.defineProperty(x,"__esModule",{value:!0}),x.clone=function(e){return void 0===e?void 0:Number.isNaN(e)?NaN:"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e))},x.generateRandomNumber=function(){return Math.round(1e7*Math.random())},x.deepFreeze=function e(t){const r=Reflect.ownKeys(t);for(const s of r){const r=t[s];(r&&"object"==typeof r||"function"==typeof r)&&e(r)}return Object.freeze(t)},x}var M,L,O,A={},N={},j={};function F(){if(L)return N;L=1,Object.defineProperty(N,"__esModule",{value:!0}),N.ProfileLevelId=N.Level=N.Profile=void 0,N.parseProfileLevelId=u,N.profileLevelIdToString=h,N.profileToString=function(r){switch(r){case t.ConstrainedBaseline:return"ConstrainedBaseline";case t.Baseline:return"Baseline";case t.Main:return"Main";case t.ConstrainedHigh:return"ConstrainedHigh";case t.High:return"High";case t.PredictiveHigh444:return"PredictiveHigh444";default:return void e.warn(`profileToString() | unrecognized profile ${r}`)}},N.levelToString=function(t){switch(t){case s.L1_b:return"1b";case s.L1:return"1";case s.L1_1:return"1.1";case s.L1_2:return"1.2";case s.L1_3:return"1.3";case s.L2:return"2";case s.L2_1:return"2.1";case s.L2_2:return"2.2";case s.L3:return"3";case s.L3_1:return"3.1";case s.L3_2:return"3.2";case s.L4:return"4";case s.L4_1:return"4.1";case s.L4_2:return"4.2";case s.L5:return"5";case s.L5_1:return"5.1";case s.L5_2:return"5.2";default:return void e.warn(`levelToString() | unrecognized level ${t}`)}},N.parseSdpProfileLevelId=m,N.isSameProfile=function(e={},t={}){const r=m(e),s=m(t);return Boolean(r&&s&&r.profile===s.profile)},N.isSameProfileAndLevel=function(e={},t={}){const r=m(e),s=m(t);return Boolean(r&&s&&r.profile===s.profile&&r.level==s.level)},N.generateProfileLevelIdStringForAnswer=function(t={},r={}){if(!t["profile-level-id"]&&!r["profile-level-id"])return void e.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");const i=m(t),n=m(r);if(!i)throw new TypeError("invalid local_profile_level_id");if(!n)throw new TypeError("invalid remote_profile_level_id");if(i.profile!==n.profile)throw new TypeError("H264 Profile mismatch");const o=g(t)&&g(r),c=i.level,d=n.level,l=(u=c,f=d,function(e,t){return e===s.L1_b?t!==s.L1&&t!==s.L1_b:t===s.L1_b?e!==s.L1:e<t}(u,f)?u:f),p=o?c:l;var u,f;return e.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${i.profile}, level:${p}]`),h(new a(i.profile,p))},N.supportedLevel=function(t,r){for(let s=p.length-1;s>=0;--s){const i=p[s];if(256*i.max_macroblock_frame_size<=t&&i.max_macroblocks_per_second<=r*i.max_macroblock_frame_size)return e.debug(`supportedLevel() | result [max_frame_pixel_count:${t}, max_fps:${r}, level:${i.level}]`),i.level}return void e.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${t}, max_fps:${r}]`)};const e=new(function(){if(M)return j;M=1;var e=j&&j.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(j,"__esModule",{value:!0}),j.Logger=void 0;const t=e(l()),r="h264-profile-level-id";return j.Logger=class{constructor(e){e?(this._debug=(0,t.default)(`${r}:${e}`),this._warn=(0,t.default)(`${r}:WARN:${e}`),this._error=(0,t.default)(`${r}:ERROR:${e}`)):(this._debug=(0,t.default)(r),this._warn=(0,t.default)(`${r}:WARN`),this._error=(0,t.default)(`${r}:ERROR`)),this._debug.log=function(){}.bind(),this._warn.log=function(){}.bind(),this._error.log=function(){}.bind()}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}},j}().Logger);var t,r,s,i;(r=t||(N.Profile=t={}))[r.ConstrainedBaseline=1]="ConstrainedBaseline",r[r.Baseline=2]="Baseline",r[r.Main=3]="Main",r[r.ConstrainedHigh=4]="ConstrainedHigh",r[r.High=5]="High",r[r.PredictiveHigh444=6]="PredictiveHigh444",(i=s||(N.Level=s={}))[i.L1_b=0]="L1_b",i[i.L1=10]="L1",i[i.L1_1=11]="L1_1",i[i.L1_2=12]="L1_2",i[i.L1_3=13]="L1_3",i[i.L2=20]="L2",i[i.L2_1=21]="L2_1",i[i.L2_2=22]="L2_2",i[i.L3=30]="L3",i[i.L3_1=31]="L3_1",i[i.L3_2=32]="L3_2",i[i.L4=40]="L4",i[i.L4_1=41]="L4_1",i[i.L4_2=42]="L4_2",i[i.L5=50]="L5",i[i.L5_1=51]="L5_1",i[i.L5_2=52]="L5_2";class a{constructor(e,t){this.profile=e,this.level=t}}N.ProfileLevelId=a;const n=new a(t.ConstrainedBaseline,s.L3_1);class o{constructor(e){this.mask=~f("x",e),this.masked_value=f("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}}class c{constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}}const d=[new c(66,new o("x1xx0000"),t.ConstrainedBaseline),new c(77,new o("1xxx0000"),t.ConstrainedBaseline),new c(88,new o("11xx0000"),t.ConstrainedBaseline),new c(66,new o("x0xx0000"),t.Baseline),new c(88,new o("10xx0000"),t.Baseline),new c(77,new o("0x0x0000"),t.Main),new c(100,new o("00000000"),t.High),new c(100,new o("00001100"),t.ConstrainedHigh),new c(244,new o("00000000"),t.PredictiveHigh444)],p=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:s.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:s.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:s.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:s.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:s.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:s.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:s.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:s.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:s.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:s.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:s.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:s.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:s.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:s.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:s.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:s.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:s.L5_2}];function u(t){if("string"!=typeof t||6!==t.length)return;const r=parseInt(t,16);if(0===r)return;const i=255&r,n=r>>8&255,o=r>>16&255;let c;switch(i){case s.L1_1:c=16&n?s.L1_b:s.L1_1;break;case s.L1:case s.L1_2:case s.L1_3:case s.L2:case s.L2_1:case s.L2_2:case s.L3:case s.L3_1:case s.L3_2:case s.L4:case s.L4_1:case s.L4_2:case s.L5:case s.L5_1:case s.L5_2:c=i;break;default:return void e.warn(`parseProfileLevelId() | unrecognized level_idc [str:${t}, level_idc:${i}]`)}for(const s of d)if(o===s.profile_idc&&s.profile_iop.isMatch(n))return e.debug(`parseProfileLevelId() | result [str:${t}, profile:${s.profile}, level:${c}]`),new a(s.profile,c);e.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${t}, profile_idc:${o}, profile_iop:${n}]`)}function h(r){if(r.level==s.L1_b)switch(r.profile){case t.ConstrainedBaseline:return"42f00b";case t.Baseline:return"42100b";case t.Main:return"4d100b";default:return void e.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${r.profile}`)}let i;switch(r.profile){case t.ConstrainedBaseline:i="42e0";break;case t.Baseline:i="4200";break;case t.Main:i="4d00";break;case t.ConstrainedHigh:i="640c";break;case t.High:i="6400";break;case t.PredictiveHigh444:i="f400";break;default:return void e.warn(`profileLevelIdToString() | unrecognized profile ${r.profile}`)}let a=r.level.toString(16);return 1===a.length&&(a=`0${a}`),`${i}${a}`}function m(e={}){const t=e["profile-level-id"];return t?u(t):n}function f(e,t){return Number(t[0]===e)<<7|Number(t[1]===e)<<6|Number(t[2]===e)<<5|Number(t[3]===e)<<4|Number(t[4]===e)<<3|Number(t[5]===e)<<2|Number(t[6]===e)<<1|Number(t[7]===e)}function g(e={}){const t=e["level-asymmetry-allowed"];return!0===t||1===t||"1"===t}return N}function B(){if(O)return A;O=1,Object.defineProperty(A,"__esModule",{value:!0}),A.validateAndNormalizeRtpCapabilities=function(e){if("object"!=typeof e)throw new TypeError("caps is not an object");if(e.codecs&&!Array.isArray(e.codecs))throw new TypeError("caps.codecs is not an array");e.codecs||(e.codecs=[]);for(const t of e.codecs)n(t);if(e.headerExtensions&&!Array.isArray(e.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");e.headerExtensions||(e.headerExtensions=[]);for(const t of e.headerExtensions)c(t)},A.validateAndNormalizeRtpParameters=a,A.validateAndNormalizeSctpStreamParameters=function(e){if("object"!=typeof e)throw new TypeError("params is not an object");if("number"!=typeof e.streamId)throw new TypeError("missing params.streamId");let t=!1;"boolean"==typeof e.ordered?t=!0:e.ordered=!0;if(e.maxPacketLifeTime&&"number"!=typeof e.maxPacketLifeTime)throw new TypeError("invalid params.maxPacketLifeTime");if(e.maxRetransmits&&"number"!=typeof e.maxRetransmits)throw new TypeError("invalid params.maxRetransmits");if(e.maxPacketLifeTime&&e.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(t&&e.ordered&&(e.maxPacketLifeTime||e.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");t||!e.maxPacketLifeTime&&!e.maxRetransmits||(e.ordered=!1);if(e.label&&"string"!=typeof e.label)throw new TypeError("invalid params.label");if(e.protocol&&"string"!=typeof e.protocol)throw new TypeError("invalid params.protocol")},A.validateSctpCapabilities=function(e){if("object"!=typeof e)throw new TypeError("caps is not an object");if(!e.numStreams||"object"!=typeof e.numStreams)throw new TypeError("missing caps.numStreams");!function(e){if("object"!=typeof e)throw new TypeError("numStreams is not an object");if("number"!=typeof e.OS)throw new TypeError("missing numStreams.OS");if("number"!=typeof e.MIS)throw new TypeError("missing numStreams.MIS")}(e.numStreams)},A.getExtendedRtpCapabilities=function(e,t,r){const s={codecs:[],headerExtensions:[]};if(r)for(const i of e.codecs??[]){if(u(i))continue;const e=(t.codecs??[]).find(e=>h(e,i,{strict:!0,modify:!0}));if(!e)continue;const r={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:e.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:e.parameters??{},rtcpFeedback:f(i,e)};s.codecs.push(r)}else for(const i of t.codecs??[]){if(u(i))continue;const t=(e.codecs??[]).find(e=>h(e,i,{strict:!0,modify:!0}));if(!t)continue;const r={kind:t.kind,mimeType:t.mimeType,clockRate:t.clockRate,channels:t.channels,localPayloadType:t.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:t.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:f(t,i)};s.codecs.push(r)}for(const i of s.codecs){const r=e.codecs.find(e=>u(e)&&e.parameters?.apt===i.localPayloadType),s=t.codecs.find(e=>u(e)&&e.parameters?.apt===i.remotePayloadType);r&&s&&(i.localRtxPayloadType=r.preferredPayloadType,i.remoteRtxPayloadType=s.preferredPayloadType)}for(const i of t.headerExtensions){const t=e.headerExtensions.find(e=>m(e,i));if(!t)continue;const r={kind:i.kind,uri:i.uri,sendId:t.preferredId,recvId:i.preferredId,encrypt:t.preferredEncrypt??!1,direction:"sendrecv"};switch(i.direction){case"sendrecv":r.direction="sendrecv";break;case"recvonly":r.direction="sendonly";break;case"sendonly":r.direction="recvonly";break;case"inactive":r.direction="inactive"}s.headerExtensions.push(r)}return s},A.getRecvRtpCapabilities=function(e){const t={codecs:[],headerExtensions:[]};for(const r of e.codecs){const e={kind:r.kind,mimeType:r.mimeType,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(e),!r.remoteRtxPayloadType)continue;const s={kind:r.kind,mimeType:`${r.kind}/rtx`,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(s)}for(const r of e.headerExtensions){if("sendrecv"!==r.direction&&"recvonly"!==r.direction)continue;const e={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt??!1,direction:r.direction};t.headerExtensions.push(e)}return t},A.getSendingRtpParameters=function(e,t){const r={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(const s of t.codecs){if(s.kind!==e)continue;const t={mimeType:s.mimeType,payloadType:s.localPayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.localParameters,rtcpFeedback:s.rtcpFeedback};if(r.codecs.push(t),s.localRtxPayloadType){const e={mimeType:`${s.kind}/rtx`,payloadType:s.localRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.localPayloadType},rtcpFeedback:[]};r.codecs.push(e)}}for(const s of t.headerExtensions){if(s.kind&&s.kind!==e||"sendrecv"!==s.direction&&"sendonly"!==s.direction)continue;const t={uri:s.uri,id:s.sendId,encrypt:s.encrypt,parameters:{}};r.headerExtensions.push(t)}return r},A.getSendingRemoteRtpParameters=function(e,t){const r={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(const s of t.codecs){if(s.kind!==e)continue;const t={mimeType:s.mimeType,payloadType:s.localPayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.remoteParameters,rtcpFeedback:s.rtcpFeedback};if(r.codecs.push(t),s.localRtxPayloadType){const e={mimeType:`${s.kind}/rtx`,payloadType:s.localRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.localPayloadType},rtcpFeedback:[]};r.codecs.push(e)}}for(const s of t.headerExtensions){if(s.kind&&s.kind!==e||"sendrecv"!==s.direction&&"sendonly"!==s.direction)continue;const t={uri:s.uri,id:s.sendId,encrypt:s.encrypt,parameters:{}};r.headerExtensions.push(t)}if(r.headerExtensions.some(e=>"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"===e.uri))for(const s of r.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(e=>"goog-remb"!==e.type);else if(r.headerExtensions.some(e=>"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"===e.uri))for(const s of r.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(e=>"transport-cc"!==e.type);else for(const s of r.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(e=>"transport-cc"!==e.type&&"goog-remb"!==e.type);return r},A.reduceCodecs=function(e,t){const r=[];if(t){for(let s=0;s<e.length;++s)if(h(e[s],t,{strict:!0})){r.push(e[s]),u(e[s+1])&&r.push(e[s+1]);break}if(0===r.length)throw new TypeError("no matching codec found")}else r.push(e[0]),u(e[1])&&r.push(e[1]);return r},A.generateProbatorRtpParameters=function(e){a(e=t.clone(e));const n={mid:r,codecs:[],headerExtensions:[],encodings:[{ssrc:s}],rtcp:{cname:"probator"}};return n.codecs.push(e.codecs[0]),n.codecs[0].payloadType=i,n.headerExtensions=e.headerExtensions,n},A.canSend=function(e,t){return(t.codecs??[]).some(t=>t.kind===e)},A.canReceive=function(e,t){if(a(e),0===e.codecs.length)return!1;const r=e.codecs[0];return(t.codecs??[]).some(e=>e.preferredPayloadType===r.payloadType)};const e=F(),t=D(),r="probator",s=1234,i=127;function a(e){if("object"!=typeof e)throw new TypeError("params is not an object");if(e.mid&&"string"!=typeof e.mid)throw new TypeError("params.mid is not a string");if(!Array.isArray(e.codecs))throw new TypeError("missing params.codecs");for(const t of e.codecs)d(t);if(e.headerExtensions&&!Array.isArray(e.headerExtensions))throw new TypeError("params.headerExtensions is not an array");e.headerExtensions||(e.headerExtensions=[]);for(const t of e.headerExtensions)l(t);if(e.encodings&&!Array.isArray(e.encodings))throw new TypeError("params.encodings is not an array");e.encodings||(e.encodings=[]);for(const t of e.encodings)p(t);if(e.rtcp&&"object"!=typeof e.rtcp)throw new TypeError("params.rtcp is not an object");e.rtcp||(e.rtcp={}),function(e){if("object"!=typeof e)throw new TypeError("rtcp is not an object");if(e.cname&&"string"!=typeof e.cname)throw new TypeError("invalid rtcp.cname");e.reducedSize&&"boolean"==typeof e.reducedSize||(e.reducedSize=!0)}(e.rtcp)}function n(e){const t=new RegExp("^(audio|video)/(.+)","i");if("object"!=typeof e)throw new TypeError("codec is not an object");if(!e.mimeType||"string"!=typeof e.mimeType)throw new TypeError("missing codec.mimeType");const r=t.exec(e.mimeType);if(!r)throw new TypeError("invalid codec.mimeType");if(e.kind=r[1].toLowerCase(),"number"!=typeof e.preferredPayloadType)throw new TypeError("missing codec.preferredPayloadType");if("number"!=typeof e.clockRate)throw new TypeError("missing codec.clockRate");"audio"===e.kind?"number"!=typeof e.channels&&(e.channels=1):delete e.channels,e.parameters&&"object"==typeof e.parameters||(e.parameters={});for(const s of Object.keys(e.parameters)){let t=e.parameters[s];if(void 0===t&&(e.parameters[s]="",t=""),"string"!=typeof t&&"number"!=typeof t)throw new TypeError(`invalid codec parameter [key:${s}s, value:${t}]`);if("apt"===s&&"number"!=typeof t)throw new TypeError("invalid codec apt parameter")}e.rtcpFeedback&&Array.isArray(e.rtcpFeedback)||(e.rtcpFeedback=[]);for(const s of e.rtcpFeedback)o(s)}function o(e){if("object"!=typeof e)throw new TypeError("fb is not an object");if(!e.type||"string"!=typeof e.type)throw new TypeError("missing fb.type");e.parameter&&"string"==typeof e.parameter||(e.parameter="")}function c(e){if("object"!=typeof e)throw new TypeError("ext is not an object");if("audio"!==e.kind&&"video"!==e.kind)throw new TypeError("invalid ext.kind");if(!e.uri||"string"!=typeof e.uri)throw new TypeError("missing ext.uri");if("number"!=typeof e.preferredId)throw new TypeError("missing ext.preferredId");if(e.preferredEncrypt&&"boolean"!=typeof e.preferredEncrypt)throw new TypeError("invalid ext.preferredEncrypt");if(e.preferredEncrypt||(e.preferredEncrypt=!1),e.direction&&"string"!=typeof e.direction)throw new TypeError("invalid ext.direction");e.direction||(e.direction="sendrecv")}function d(e){const t=new RegExp("^(audio|video)/(.+)","i");if("object"!=typeof e)throw new TypeError("codec is not an object");if(!e.mimeType||"string"!=typeof e.mimeType)throw new TypeError("missing codec.mimeType");const r=t.exec(e.mimeType);if(!r)throw new TypeError("invalid codec.mimeType");if("number"!=typeof e.payloadType)throw new TypeError("missing codec.payloadType");if("number"!=typeof e.clockRate)throw new TypeError("missing codec.clockRate");"audio"===r[1].toLowerCase()?"number"!=typeof e.channels&&(e.channels=1):delete e.channels,e.parameters&&"object"==typeof e.parameters||(e.parameters={});for(const s of Object.keys(e.parameters)){let t=e.parameters[s];if(void 0===t&&(e.parameters[s]="",t=""),"string"!=typeof t&&"number"!=typeof t)throw new TypeError(`invalid codec parameter [key:${s}s, value:${t}]`);if("apt"===s&&"number"!=typeof t)throw new TypeError("invalid codec apt parameter")}e.rtcpFeedback&&Array.isArray(e.rtcpFeedback)||(e.rtcpFeedback=[]);for(const s of e.rtcpFeedback)o(s)}function l(e){if("object"!=typeof e)throw new TypeError("ext is not an object");if(!e.uri||"string"!=typeof e.uri)throw new TypeError("missing ext.uri");if("number"!=typeof e.id)throw new TypeError("missing ext.id");if(e.encrypt&&"boolean"!=typeof e.encrypt)throw new TypeError("invalid ext.encrypt");e.encrypt||(e.encrypt=!1),e.parameters&&"object"==typeof e.parameters||(e.parameters={});for(const t of Object.keys(e.parameters)){let r=e.parameters[t];if(void 0===r&&(e.parameters[t]="",r=""),"string"!=typeof r&&"number"!=typeof r)throw new TypeError("invalid header extension parameter")}}function p(e){if("object"!=typeof e)throw new TypeError("encoding is not an object");if(e.ssrc&&"number"!=typeof e.ssrc)throw new TypeError("invalid encoding.ssrc");if(e.rid&&"string"!=typeof e.rid)throw new TypeError("invalid encoding.rid");if(e.rtx&&"object"!=typeof e.rtx)throw new TypeError("invalid encoding.rtx");if(e.rtx&&"number"!=typeof e.rtx.ssrc)throw new TypeError("missing encoding.rtx.ssrc");if(e.dtx&&"boolean"==typeof e.dtx||(e.dtx=!1),e.scalabilityMode&&"string"!=typeof e.scalabilityMode)throw new TypeError("invalid encoding.scalabilityMode")}function u(e){return!!e&&/.+\/rtx$/i.test(e.mimeType)}function h(t,r,{strict:s=!1,modify:i=!1}={}){const a=t.mimeType.toLowerCase();if(a!==r.mimeType.toLowerCase())return!1;if(t.clockRate!==r.clockRate)return!1;if(t.channels!==r.channels)return!1;switch(a){case"video/h264":if(s){if((t.parameters["packetization-mode"]??0)!==(r.parameters["packetization-mode"]??0))return!1;if(!e.isSameProfile(t.parameters,r.parameters))return!1;let s;try{s=e.generateProfileLevelIdStringForAnswer(t.parameters,r.parameters)}catch(n){return!1}i&&(s?(t.parameters["profile-level-id"]=s,r.parameters["profile-level-id"]=s):(delete t.parameters["profile-level-id"],delete r.parameters["profile-level-id"]))}break;case"video/vp9":if(s){if((t.parameters["profile-id"]??0)!==(r.parameters["profile-id"]??0))return!1}}return!0}function m(e,t){return(!e.kind||!t.kind||e.kind===t.kind)&&e.uri===t.uri}function f(e,t){const r=[];for(const s of e.rtcpFeedback??[]){const e=(t.rtcpFeedback??[]).find(e=>e.type===s.type&&(e.parameter===s.parameter||!e.parameter&&!s.parameter));e&&r.push(e)}return r}return A}var U,$={},V={},q={},W={};var z,H,G,K={};function J(){if(z)return K;z=1,Object.defineProperty(K,"__esModule",{value:!0}),K.AwaitQueueRemovedTaskError=K.AwaitQueueStoppedError=void 0;class e extends Error{constructor(t){super(t??"queue stopped"),this.name="AwaitQueueStoppedError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,e)}}K.AwaitQueueStoppedError=e;class t extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,t)}}return K.AwaitQueueRemovedTaskError=t,K}function Q(){if(H)return q;H=1,Object.defineProperty(q,"__esModule",{value:!0}),q.AwaitQueue=void 0;const e=function(){if(U)return W;U=1,Object.defineProperty(W,"__esModule",{value:!0}),W.Logger=void 0;const e=l(),t="awaitqueue";return W.Logger=class{_debug;_warn;_error;constructor(r){r?(this._debug=e(`${t}:${r}`),this._warn=e(`${t}:WARN:${r}`),this._error=e(`${t}:ERROR:${r}`)):(this._debug=e(t),this._warn=e(`${t}:WARN`),this._error=e(`${t}:ERROR`)),this._debug.log=function(){}.bind(),this._warn.log=function(){}.bind(),this._error.log=function(){}.bind()}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}},W}(),t=J(),r=new e.Logger("AwaitQueue");return q.AwaitQueue=class{pendingTasks=new Map;nextTaskId=0;stopping=!1;constructor(){r.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t){if(t=t??e.name,r.debug(`push() [name:${t}]`),"function"!=typeof e)throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch(s){}return new Promise((s,i)=>{const a={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:e=>{if(a.completed)return;a.completed=!0,this.pendingTasks.delete(a.id),r.debug(`resolving task [name:${a.name}]`),s(e);const[t]=this.pendingTasks.values();t&&!t.executedAt&&this.execute(t)},reject:e=>{if(!a.completed&&(a.completed=!0,this.pendingTasks.delete(a.id),r.debug(`rejecting task [name:${a.name}]: %s`,String(e)),i(e),!this.stopping)){const[e]=this.pendingTasks.values();e&&!e.executedAt&&this.execute(e)}}};this.pendingTasks.set(a.id,a),1===this.pendingTasks.size&&this.execute(a)})}stop(){r.debug("stop()"),this.stopping=!0;for(const e of this.pendingTasks.values())r.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new t.AwaitQueueStoppedError);this.stopping=!1}remove(e){r.debug(`remove() [taskIdx:${e}]`);const s=Array.from(this.pendingTasks.values())[e];s?s.reject(new t.AwaitQueueRemovedTaskError):r.debug(`stop() | no task with given idx [taskIdx:${e}]`)}dump(){const e=Date.now();let t=0;return Array.from(this.pendingTasks.values()).map(r=>({idx:t++,task:r.task,name:r.name,enqueuedTime:r.executedAt?r.executedAt-r.enqueuedAt:e-r.enqueuedAt,executionTime:r.executedAt?e-r.executedAt:0}))}async execute(e){if(r.debug(`execute() [name:${e.name}]`),e.executedAt)throw new Error("task already being executed");e.executedAt=Date.now();try{const t=await e.task();e.resolve(t)}catch(t){e.reject(t)}}},q}var X,Y={};var Z,ee={};var te,re={};var se,ie,ae={};function ne(){if(ie)return $;ie=1,Object.defineProperty($,"__esModule",{value:!0}),$.Transport=void 0;const e=(G||(G=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.AwaitQueueRemovedTaskError=e.AwaitQueueStoppedError=e.AwaitQueue=void 0;var t=Q();Object.defineProperty(e,"AwaitQueue",{enumerable:!0,get:function(){return t.AwaitQueue}});var r=J();Object.defineProperty(e,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return r.AwaitQueueStoppedError}}),Object.defineProperty(e,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return r.AwaitQueueRemovedTaskError}})}(V)),V),t=_(),r=k(),s=E(),i=D(),a=B(),n=function(){if(X)return Y;X=1,Object.defineProperty(Y,"__esModule",{value:!0}),Y.Producer=void 0;const e=_(),t=k(),r=E(),s=new e.Logger("Producer");let i=class extends t.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new t.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:r,track:i,rtpParameters:a,stopTracks:n,disableTrackOnPause:o,zeroRtpOnPause:c,appData:d}){super(),s.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=i,this._kind=i.kind,this._rtpParameters=a,this._paused=!!o&&!i.enabled,this._maxSpatialLayer=void 0,this._stopTracks=n,this._disableTrackOnPause=o,this._zeroRtpOnPause=c,this._appData=d??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get closed(){return this._closed}get kind(){return this._kind}get rtpSender(){return this._rtpSender}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get maxSpatialLayer(){return this._maxSpatialLayer}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(s.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(s.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new r.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){s.debug("pause()"),this._closed?s.error("pause() | Producer closed"):(this._paused=!0,this._track&&this._disableTrackOnPause&&(this._track.enabled=!1),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@pause",e,t)}).catch(()=>{}),this._observer.safeEmit("pause"))}resume(){s.debug("resume()"),this._closed?s.error("resume() | Producer closed"):(this._paused=!1,this._track&&this._disableTrackOnPause&&(this._track.enabled=!0),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@resume",e,t)}).catch(()=>{}),this._observer.safeEmit("resume"))}async replaceTrack({track:e}){if(s.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch(t){}throw new r.InvalidStateError("closed")}if(e&&"ended"===e.readyState)throw new r.InvalidStateError("track ended");e!==this._track?(await new Promise((t,r)=>{this.safeEmit("@replacetrack",e,t,r)}),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()):s.debug("replaceTrack() | same track, ignored")}async setMaxSpatialLayer(e){if(this._closed)throw new r.InvalidStateError("closed");if("video"!==this._kind)throw new r.UnsupportedError("not a video Producer");if("number"!=typeof e)throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise((t,r)=>{this.safeEmit("@setmaxspatiallayer",e,t,r)}).catch(()=>{}),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new r.InvalidStateError("closed");if("object"!=typeof e)throw new TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){s.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track&&this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){if(this._track)try{this._track.removeEventListener("ended",this.onTrackEnded),this._stopTracks&&this._track.stop()}catch(e){}}};return Y.Producer=i,Y}(),o=function(){if(Z)return ee;Z=1,Object.defineProperty(ee,"__esModule",{value:!0}),ee.Consumer=void 0;const e=_(),t=k(),r=E(),s=new e.Logger("Consumer");let i=class extends t.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new t.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:r,rtpReceiver:i,track:a,rtpParameters:n,appData:o}){super(),s.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=i,this._track=a,this._rtpParameters=n,this._paused=!a.enabled,this._appData=o??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(s.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(s.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new r.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){s.debug("pause()"),this._closed?s.error("pause() | Consumer closed"):this._paused?s.debug("pause() | Consumer is already paused"):(this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause"))}resume(){s.debug("resume()"),this._closed?s.error("resume() | Consumer closed"):this._paused?(this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")):s.debug("resume() | Consumer is already resumed")}onTrackEnded(){s.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){try{this._track.removeEventListener("ended",this.onTrackEnded),this._track.stop()}catch(e){}}};return ee.Consumer=i,ee}(),c=function(){if(te)return re;te=1,Object.defineProperty(re,"__esModule",{value:!0}),re.DataProducer=void 0;const e=_(),t=k(),r=E(),s=new e.Logger("DataProducer");let i=class extends t.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new t.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:i}){super(),s.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,this._appData=i??{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(s.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(s.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(s.debug("send()"),this._closed)throw new r.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(s.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;const t=e.error??new Error("unknown DataChannel error");"sctp-failure"===e.error?.errorDetail?s.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):s.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(s.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||s.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};return re.DataProducer=i,re}(),d=function(){if(se)return ae;se=1,Object.defineProperty(ae,"__esModule",{value:!0}),ae.DataConsumer=void 0;const e=_(),t=k(),r=new e.Logger("DataConsumer");let s=class extends t.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new t.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:s,sctpStreamParameters:i,appData:a}){super(),r.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=s,this._sctpStreamParameters=i,this._appData=a??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(r.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(r.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(r.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;const t=e.error??new Error("unknown DataChannel error");"sctp-failure"===e.error?.errorDetail?r.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):r.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(r.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",e=>{this._closed||this.safeEmit("message",e.data)})}};return ae.DataConsumer=s,ae}(),l=new t.Logger("Transport");class p{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}}class u extends r.EnhancedEventEmitter{_id;_closed=!1;_direction;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_canProduceByKind;_maxSctpMessageSize;_handler;_iceGatheringState="new";_connectionState="new";_appData;_producers=new Map;_consumers=new Map;_dataProducers=new Map;_dataConsumers=new Map;_probatorConsumerCreated=!1;_awaitQueue=new e.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new r.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:r,iceCandidates:s,dtlsParameters:a,sctpParameters:n,iceServers:o,iceTransportPolicy:c,additionalSettings:d,appData:p,handlerFactory:u,getSendExtendedRtpCapabilities:h,recvRtpCapabilities:m,canProduceByKind:f}){super(),l.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=h,this._recvRtpCapabilities=m,this._canProduceByKind=f,this._maxSctpMessageSize=n?n.maxMessageSize:null;const g=i.clone(d)??{};delete g.iceServers,delete g.iceTransportPolicy,delete g.bundlePolicy,delete g.rtcpMuxPolicy,this._handler=u.factory({direction:e,iceParameters:r,iceCandidates:s,dtlsParameters:a,sctpParameters:n,iceServers:o,iceTransportPolicy:c,additionalSettings:g,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities}),this._appData=p??{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){l.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed";for(const e of this._producers.values())e.transportClosed();this._producers.clear();for(const e of this._consumers.values())e.transportClosed();this._consumers.clear();for(const e of this._dataProducers.values())e.transportClosed();this._dataProducers.clear();for(const e of this._dataConsumers.values())e.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close"),super.close(),this._observer.close()}}async getStats(){if(this._closed)throw new s.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(l.debug("restartIce()"),this._closed)throw new s.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(e),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(l.debug("updateIceServers()"),this._closed)throw new s.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,encodings:t,codecOptions:r,codec:i,stopTracks:o=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:d=!1,onRtpSender:p,appData:u={}}={}){if(l.debug("produce() [track:%o]",e),this._closed)throw new s.InvalidStateError("closed");if(!e)throw new TypeError("missing track");if("send"!==this._direction)throw new s.UnsupportedError("not a sending Transport");if(!this._canProduceByKind[e.kind])throw new s.UnsupportedError(`cannot produce ${e.kind}`);if("ended"===e.readyState)throw new s.InvalidStateError("track ended");if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(0===this.listenerCount("produce"))throw new TypeError('no "produce" listener set into this transport');if(u&&"object"!=typeof u)throw new TypeError("if given, appData must be an object");return this._awaitQueue.push(async()=>{let s;if(t&&!Array.isArray(t))throw TypeError("encodings must be an array");t&&0===t.length?s=void 0:t&&(s=t.map(e=>{const t={active:!0};return!1===e.active&&(t.active=!1),"boolean"==typeof e.dtx&&(t.dtx=e.dtx),"string"==typeof e.scalabilityMode&&(t.scalabilityMode=e.scalabilityMode),"number"==typeof e.scaleResolutionDownBy&&(t.scaleResolutionDownBy=e.scaleResolutionDownBy),"number"==typeof e.maxBitrate&&(t.maxBitrate=e.maxBitrate),"number"==typeof e.maxFramerate&&(t.maxFramerate=e.maxFramerate),"boolean"==typeof e.adaptivePtime&&(t.adaptivePtime=e.adaptivePtime),"string"==typeof e.priority&&(t.priority=e.priority),"string"==typeof e.networkPriority&&(t.networkPriority=e.networkPriority),t}));const{localId:l,rtpParameters:h,rtpSender:m}=await this._handler.send({track:e,encodings:s,codecOptions:r,codec:i,onRtpSender:p});try{a.validateAndNormalizeRtpParameters(h);const{id:t}=await new Promise((t,r)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:h,appData:u},t,r)}),r=new n.Producer({id:t,localId:l,rtpSender:m,track:e,rtpParameters:h,stopTracks:o,disableTrackOnPause:c,zeroRtpOnPause:d,appData:u});return this._producers.set(r.id,r),this.handleProducer(r),this._observer.safeEmit("newproducer",r),r}catch(f){throw this._handler.stopSending(l).catch(()=>{}),f}},"transport.produce()").catch(t=>{if(o)try{e.stop()}catch(r){}throw t})}async consume({id:e,producerId:t,kind:r,rtpParameters:n,streamId:o,onRtpReceiver:c,appData:d={}}){if(l.debug("consume()"),this._closed)throw new s.InvalidStateError("closed");if("recv"!==this._direction)throw new s.UnsupportedError("not a receiving Transport");if("string"!=typeof e)throw new TypeError("missing id");if("string"!=typeof t)throw new TypeError("missing producerId");if("audio"!==r&&"video"!==r)throw new TypeError(`invalid kind '${r}'`);if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(d&&"object"!=typeof d)throw new TypeError("if given, appData must be an object");const u=i.clone(n);if(!a.canReceive(u,this._recvRtpCapabilities))throw new s.UnsupportedError("cannot consume this Producer");const h=new p({id:e,producerId:t,kind:r,rtpParameters:u,streamId:o,onRtpReceiver:c,appData:d});return this._pendingConsumerTasks.push(h),queueMicrotask(()=>{this._closed||!1===this._consumerCreationInProgress&&this.createPendingConsumers()}),h.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:i="",protocol:n="",appData:o={}}={}){if(l.debug("produceData()"),this._closed)throw new s.InvalidStateError("closed");if("send"!==this._direction)throw new s.UnsupportedError("not a sending Transport");if(!this._maxSctpMessageSize)throw new s.UnsupportedError("SCTP not enabled by remote Transport");if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(0===this.listenerCount("producedata"))throw new TypeError('no "producedata" listener set into this transport');if(o&&"object"!=typeof o)throw new TypeError("if given, appData must be an object");return(t||r)&&(e=!1),this._awaitQueue.push(async()=>{const{dataChannel:s,sctpStreamParameters:d}=await this._handler.sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:n});a.validateAndNormalizeSctpStreamParameters(d);const{id:l}=await new Promise((e,t)=>{this.safeEmit("producedata",{sctpStreamParameters:d,label:i,protocol:n,appData:o},e,t)}),p=new c.DataProducer({id:l,dataChannel:s,sctpStreamParameters:d,appData:o});return this._dataProducers.set(p.id,p),this.handleDataProducer(p),this._observer.safeEmit("newdataproducer",p),p},"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:r,label:n="",protocol:o="",appData:c={}}){if(l.debug("consumeData()"),this._closed)throw new s.InvalidStateError("closed");if("recv"!==this._direction)throw new s.UnsupportedError("not a receiving Transport");if(!this._maxSctpMessageSize)throw new s.UnsupportedError("SCTP not enabled by remote Transport");if("string"!=typeof e)throw new TypeError("missing id");if("string"!=typeof t)throw new TypeError("missing dataProducerId");if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw new TypeError('no "connect" listener set into this transport');if(c&&"object"!=typeof c)throw new TypeError("if given, appData must be an object");const p=i.clone(r);return a.validateAndNormalizeSctpStreamParameters(p),this._awaitQueue.push(async()=>{const{dataChannel:r}=await this._handler.receiveDataChannel({sctpStreamParameters:p,label:n,protocol:o}),s=new d.DataConsumer({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:p,appData:c});return this._dataConsumers.set(s.id,s),this.handleDataConsumer(s),this._observer.safeEmit("newdataconsumer",s),s},"transport.consumeData()")}createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{if(0===this._pendingConsumerTasks.length)return void l.debug("createPendingConsumers() | there is no Consumer to be created");const e=[...this._pendingConsumerTasks];let t;this._pendingConsumerTasks=[];const r=[];for(const i of e){const{id:e,kind:t,rtpParameters:s,streamId:a,onRtpReceiver:n}=i.consumerOptions;r.push({trackId:e,kind:t,rtpParameters:s,streamId:a,onRtpReceiver:n})}try{const s=await this._handler.receive(r);for(let r=0;r<s.length;++r){const i=e[r],a=s[r],{id:n,producerId:c,kind:d,rtpParameters:l,appData:p}=i.consumerOptions,{localId:u,rtpReceiver:h,track:m}=a,f=new o.Consumer({id:n,localId:u,producerId:c,rtpReceiver:h,track:m,rtpParameters:l,appData:p});this._consumers.set(f.id,f),this.handleConsumer(f),this._probatorConsumerCreated||t||"video"!==d||(t=f),this._observer.safeEmit("newconsumer",f),i.resolve(f)}}catch(s){for(const t of e)t.reject(s)}if(t)try{const e=a.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:e}]),l.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(s){l.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",s)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(0===this._pendingPauseConsumers.size)return void l.debug("pausePendingConsumers() | there is no Consumer to be paused");const e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{const t=e.map(e=>e.localId);await this._handler.pauseReceiving(t)}catch(t){l.error("pausePendingConsumers() | failed to pause Consumers:",t)}},"transport.pausePendingConsumers").then(()=>{this._consumerPauseInProgress=!1,this._pendingPauseConsumers.size>0&&this.pausePendingConsumers()}).catch(()=>{})}resumePendingConsumers(){this._consumerResumeInProgress=!0,this._awaitQueue.push(async()=>{if(0===this._pendingResumeConsumers.size)return void l.debug("resumePendingConsumers() | there is no Consumer to be resumed");const e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{const t=e.map(e=>e.localId);await this._handler.resumeReceiving(t)}catch(t){l.error("resumePendingConsumers() | failed to resume Consumers:",t)}},"transport.resumePendingConsumers").then(()=>{this._consumerResumeInProgress=!1,this._pendingResumeConsumers.size>0&&this.resumePendingConsumers()}).catch(()=>{})}closePendingConsumers(){this._consumerCloseInProgress=!0,this._awaitQueue.push(async()=>{if(0===this._pendingCloseConsumers.size)return void l.debug("closePendingConsumers() | there is no Consumer to be closed");const e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map(e=>e.localId))}catch(t){l.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){const e=this._handler;e.on("@connect",({dtlsParameters:e},t,r)=>{this._closed?r(new s.InvalidStateError("closed")):this.safeEmit("connect",{dtlsParameters:e},t,r)}),e.on("@icegatheringstatechange",e=>{e!==this._iceGatheringState&&(l.debug("ICE gathering state changed to %s",e),this._iceGatheringState=e,this._closed||this.safeEmit("icegatheringstatechange",e))}),e.on("@icecandidateerror",e=>{l.warn(`ICE candidate error [url:${e.url}, localAddress:${e.address}, localPort:${e.port}]: ${e.errorCode} "${e.errorText}"`),this.safeEmit("icecandidateerror",e)}),e.on("@connectionstatechange",e=>{e!==this._connectionState&&(l.debug("connection state changed to %s",e),this._connectionState=e,this._closed||this.safeEmit("connectionstatechange",e))})}handleProducer(e){e.on("@close",()=>{this._producers.delete(e.id),this._closed||this._awaitQueue.push(async()=>await this._handler.stopSending(e.localId),"producer @close event").catch(e=>l.warn("producer.close() failed:%o",e))}),e.on("@pause",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(r)}),e.on("@resume",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(r)}),e.on("@replacetrack",(t,r,s)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(r).catch(s)}),e.on("@setmaxspatiallayer",(t,r,s)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(r).catch(s)}),e.on("@setrtpencodingparameters",(t,r,s)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(r).catch(s)}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new s.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),this._closed||(this._pendingCloseConsumers.set(e.id,e),!1===this._consumerCloseInProgress&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||!1===this._consumerPauseInProgress&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||!1===this._consumerResumeInProgress&&this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new s.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}}return $.Transport=u,$}var oe,ce,de,le,pe,ue={},he={},me={},fe={exports:{}};function ge(){if(oe)return fe.exports;oe=1;var e=fe.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(e){return null!=e.address?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(e){return null!=e.subtype?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(e){return"extmap:%d"+(e.direction?"/%s":"%v")+(e["encrypt-uri"]?" %s":"%v")+" %s"+(e.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return null!=e.sessionConfig?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(e){var t="candidate:%s %d %s %d %s %d typ %s";return t+=null!=e.raddr?" raddr %s rport %d":"%v%v",t+=null!=e.tcptype?" tcptype %s":"%v",null!=e.generation&&(t+=" generation %d"),t+=null!=e["network-id"]?" network-id %d":"%v",t+=null!=e["network-cost"]?" network-cost %d":"%v"}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(e){var t="ssrc:%d";return null!=e.attribute&&(t+=" %s",null!=e.value&&(t+=":%s")),t}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(e){return null!=e.maxMessageSize?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(e){return e.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(e){return"imageattr:%s %s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(e){return"ts-refclk:%s"+(null!=e.clksrcExt?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(e){var t="mediaclk:";return t+=null!=e.id?"id=%s %s":"%v%s",t+=null!=e.mediaClockValue?"=%s":"",t+=null!=e.rateNumerator?" rate=%s":"",t+=null!=e.rateDenominator?"/%s":""}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};return Object.keys(e).forEach(function(t){e[t].forEach(function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")})}),fe.exports}function be(){return ce||(ce=1,function(e){var t=function(e){return String(Number(e))===e?Number(e):e},r=function(e,r,s){var i=e.name&&e.names;e.push&&!r[e.push]?r[e.push]=[]:i&&!r[e.name]&&(r[e.name]={});var a=e.push?{}:i?r[e.name]:r;!function(e,r,s,i){if(i&&!s)r[i]=t(e[1]);else for(var a=0;a<s.length;a+=1)null!=e[a+1]&&(r[s[a]]=t(e[a+1]))}(s.match(e.reg),a,e.names,e.name),e.push&&r[e.push].push(a)},s=ge(),i=RegExp.prototype.test.bind(/^([a-z])=(.*)/);e.parse=function(e){var t={},a=[],n=t;return e.split(/(\r\n|\r|\n)/).filter(i).forEach(function(e){var t=e[0],i=e.slice(2);"m"===t&&(a.push({rtp:[],fmtp:[]}),n=a[a.length-1]);for(var o=0;o<(s[t]||[]).length;o+=1){var c=s[t][o];if(c.reg.test(i))return r(c,n,i)}}),t.media=a,t};var a=function(e,r){var s=r.split(/=(.+)/,2);return 2===s.length?e[s[0]]=t(s[1]):1===s.length&&r.length>1&&(e[s[0]]=void 0),e};e.parseParams=function(e){return e.split(/;\s?/).reduce(a,{})},e.parseFmtpConfig=e.parseParams,e.parsePayloads=function(e){return e.toString().split(" ").map(Number)},e.parseRemoteCandidates=function(e){for(var r=[],s=e.split(" ").map(t),i=0;i<s.length;i+=3)r.push({component:s[i],ip:s[i+1],port:s[i+2]});return r},e.parseImageAttributes=function(e){return e.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(a,{})})},e.parseSimulcastStreamList=function(e){return e.split(";").map(function(e){return e.split(",").map(function(e){var r,s=!1;return"~"!==e[0]?r=t(e):(r=t(e.substring(1,e.length)),s=!0),{scid:r,paused:s}})})}}(me)),me}function ye(){if(le)return de;le=1;var e=ge(),t=/%[sdv%]/g,r=function(e){var r=1,s=arguments,i=s.length;return e.replace(t,function(e){if(r>=i)return e;var t=s[r];switch(r+=1,e){case"%%":return"%";case"%s":return String(t);case"%d":return Number(t);case"%v":return""}})},s=function(e,t,s){var i=[e+"="+(t.format instanceof Function?t.format(t.push?s:s[t.name]):t.format)];if(t.names)for(var a=0;a<t.names.length;a+=1){var n=t.names[a];t.name?i.push(s[t.name][n]):i.push(s[t.names[a]])}else i.push(s[t.name]);return r.apply(null,i)},i=["v","o","s","i","u","e","p","c","b","t","r","z","a"],a=["i","c","b","a"];return de=function(t,r){r=r||{},null==t.version&&(t.version=0),null==t.name&&(t.name=" "),t.media.forEach(function(e){null==e.payloads&&(e.payloads="")});var n=r.outerOrder||i,o=r.innerOrder||a,c=[];return n.forEach(function(r){e[r].forEach(function(e){e.name in t&&null!=t[e.name]?c.push(s(r,e,t)):e.push in t&&null!=t[e.push]&&t[e.push].forEach(function(t){c.push(s(r,e,t))})})}),t.media.forEach(function(t){c.push(s("m",e.m[0],t)),o.forEach(function(r){e[r].forEach(function(e){e.name in t&&null!=t[e.name]?c.push(s(r,e,t)):e.push in t&&null!=t[e.push]&&t[e.push].forEach(function(t){c.push(s(r,e,t))})})})}),c.join("\r\n")+"\r\n"}}function _e(){if(pe)return he;pe=1;var e=be(),t=ye(),r=ge();return he.grammar=r,he.write=t,he.parse=e.parse,he.parseParams=e.parseParams,he.parseFmtpConfig=e.parseFmtpConfig,he.parsePayloads=e.parsePayloads,he.parseRemoteCandidates=e.parseRemoteCandidates,he.parseImageAttributes=e.parseImageAttributes,he.parseSimulcastStreamList=e.parseSimulcastStreamList,he}var ve,we={};function Se(){if(ve)return we;ve=1,Object.defineProperty(we,"__esModule",{value:!0}),we.parse=function(t){const r=e.exec(t??"");return r?{spatialLayers:Number(r[1]),temporalLayers:Number(r[2])}:{spatialLayers:1,temporalLayers:1}};const e=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");return we}var Ce,Pe={};function ke(){if(Ce)return Pe;Ce=1,Object.defineProperty(Pe,"__esModule",{value:!0}),Pe.extractRtpCapabilities=function({sdpObject:t}){const r=new Map,s=new Map;for(const i of t.media){const t=i.type;switch(t){case"audio":case"video":break;default:continue}for(const e of i.rtp){const s={kind:t,mimeType:`${t}/${e.codec}`,preferredPayloadType:e.payload,clockRate:e.rate,channels:e.encoding,parameters:{},rtcpFeedback:[]};r.set(s.preferredPayloadType,s)}for(const s of i.fmtp??[]){const t=e.parseParams(s.config),i=r.get(s.payload);i&&(t?.hasOwnProperty("profile-level-id")&&(t["profile-level-id"]=String(t["profile-level-id"])),i.parameters=t)}for(const e of i.rtcpFb??[]){const s={type:e.type,parameter:e.subtype};if(s.parameter||delete s.parameter,"*"!==e.payload){const t=r.get(Number(e.payload));if(!t)continue;t.rtcpFeedback.push(s)}else for(const e of r.values())e.kind!==t||/.+\/rtx$/i.test(e.mimeType)||e.rtcpFeedback.push(s)}for(const e of i.ext??[]){if(e["encrypt-uri"])continue;const r={kind:t,uri:e.uri,preferredId:e.value};s.set(r.preferredId,r)}}return{codecs:Array.from(r.values()),headerExtensions:Array.from(s.values())}},Pe.extractDtlsParameters=function({sdpObject:e}){let t,r=e.setup,s=e.fingerprint;if(!r||!s){const t=(e.media??[]).find(e=>0!==e.port);t&&(r??=t.setup,s??=t.fingerprint)}if(!r)throw new Error("no a=setup found at SDP session or media level");if(!s)throw new Error("no a=fingerprint found at SDP session or media level");switch(r){case"active":t="client";break;case"passive":t="server";break;case"actpass":t="auto"}return{role:t,fingerprints:[{algorithm:s.type,value:s.hash}]}},Pe.getCname=function({offerMediaObject:e}){const t=(e.ssrcs??[]).find(e=>"cname"===e.attribute);if(!t)return"";return t.value},Pe.applyCodecParameters=function({offerRtpParameters:t,answerMediaObject:r}){for(const s of t.codecs){const t=s.mimeType.toLowerCase();if("audio/opus"!==t)continue;if(!(r.rtp??[]).find(e=>e.payload===s.payloadType))continue;r.fmtp=r.fmtp??[];let i=r.fmtp.find(e=>e.payload===s.payloadType);i||(i={payload:s.payloadType,config:""},r.fmtp.push(i));const a=e.parseParams(i.config);switch(t){case"audio/opus":{const e=s.parameters?.["sprop-stereo"];void 0!==e&&(a.stereo=Number(e)?1:0);break}}i.config="";for(const e of Object.keys(a))i.config&&(i.config+=";"),i.config+=`${e}=${a[e]}`}};const e=_e();return Pe}var Re,Te={};function Ee(){if(Re)return Te;return Re=1,Object.defineProperty(Te,"__esModule",{value:!0}),Te.getRtpEncodings=function({offerMediaObject:e}){const t=new Set;for(const i of e.ssrcs??[]){const e=i.id;e&&t.add(e)}if(0===t.size)throw new Error("no a=ssrc lines found");const r=new Map;for(const i of e.ssrcGroups??[]){if("FID"!==i.semantics)continue;const e=i.ssrcs.split(/\s+/),s=Number(e[0]),a=Number(e[1]);t.has(s)&&(t.delete(s),t.delete(a),r.set(s,a))}for(const i of t)r.set(i,void 0);const s=[];for(const[i,a]of r){const e={ssrc:i};a&&(e.rtx={ssrc:a}),s.push(e)}return s},Te.addLegacySimulcast=function({offerMediaObject:e,numStreams:t}){if(t<=1)throw new TypeError("numStreams must be greater than 1");const r=(e.ssrcs??[]).find(e=>"msid"===e.attribute);if(!r)throw new Error("a=ssrc line with msid information not found");const[s,i]=r.value.split(" "),a=Number(r.id);let n;(e.ssrcGroups??[]).some(e=>{if("FID"!==e.semantics)return!1;const t=e.ssrcs.split(/\s+/);return Number(t[0])===a&&(n=Number(t[1]),!0)});const o=(e.ssrcs??[]).find(e=>"cname"===e.attribute);if(!o)throw new Error("a=ssrc line with cname information not found");const c=o.value,d=[],l=[];for(let p=0;p<t;++p)d.push(a+p),n&&l.push(n+p);e.ssrcGroups=[],e.ssrcs=[],e.ssrcGroups.push({semantics:"SIM",ssrcs:d.join(" ")});for(const p of d)e.ssrcs.push({id:p,attribute:"cname",value:c}),e.ssrcs.push({id:p,attribute:"msid",value:`${s} ${i}`});for(let p=0;p<l.length;++p){const t=d[p],r=l[p];e.ssrcs.push({id:r,attribute:"cname",value:c}),e.ssrcs.push({id:r,attribute:"msid",value:`${s} ${i}`}),e.ssrcGroups.push({semantics:"FID",ssrcs:`${t} ${r}`})}},Te}var Ie,xe={};function De(){if(Ie)return xe;return Ie=1,Object.defineProperty(xe,"__esModule",{value:!0}),xe.addNackSupportForOpus=function(e){for(const t of e.codecs??[])"audio/opus"!==t.mimeType.toLowerCase()&&"audio/multiopus"!==t.mimeType.toLowerCase()||t.rtcpFeedback?.some(e=>"nack"===e.type&&!e.parameter)||(t.rtcpFeedback||(t.rtcpFeedback=[]),t.rtcpFeedback.push({type:"nack"}))},xe}var Me,Le,Oe,Ae={},Ne={};function je(){if(Le)return Ae;Le=1,Object.defineProperty(Ae,"__esModule",{value:!0}),Ae.RemoteSdp=void 0;const e=_e(),t=_(),r=function(){if(Me)return Ne;Me=1,Object.defineProperty(Ne,"__esModule",{value:!0}),Ne.OfferMediaSection=Ne.AnswerMediaSection=Ne.MediaSection=void 0;const e=_e(),t=D();let r=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(const e of t){const t={foundation:e.foundation,component:1,ip:e.address??e.ip,port:e.port,priority:e.priority,transport:e.protocol,type:e.type};e.tcpType&&(t.tcptype=e.tcpType),this._mediaObject.candidates.push(t)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return 0===this._mediaObject.port}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause(),delete this._mediaObject.ext,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}close(){this.disable(),this._mediaObject.port=0}};function s(e){const t=new RegExp("^(audio|video)/(.+)","i").exec(e.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}return Ne.MediaSection=r,Ne.AnswerMediaSection=class extends r{constructor({iceParameters:e,iceCandidates:r,dtlsParameters:i,sctpParameters:a,plainRtpParameters:n,offerMediaObject:o,offerRtpParameters:c,answerRtpParameters:d,codecOptions:l}){switch(super({iceParameters:e,iceCandidates:r,dtlsParameters:i}),this._mediaObject.mid=String(o.mid),this._mediaObject.type=o.type,this._mediaObject.protocol=o.protocol,n?(this._mediaObject.connection={ip:n.ip,version:n.ipVersion},this._mediaObject.port=n.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),o.type){case"audio":case"video":this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(const e of d.codecs){const r={payload:e.payloadType,codec:s(e),rate:e.clockRate};e.channels>1&&(r.encoding=e.channels),this._mediaObject.rtp.push(r);const i=t.clone(e.parameters)??{};let a=t.clone(e.rtcpFeedback)??[];if(l){const{opusStereo:t,opusFec:r,opusDtx:s,opusMaxPlaybackRate:n,opusMaxAverageBitrate:o,opusPtime:d,opusNack:p,videoGoogleStartBitrate:u,videoGoogleMaxBitrate:h,videoGoogleMinBitrate:m}=l,f=c.codecs.find(t=>t.payloadType===e.payloadType);switch(e.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":void 0!==t&&(f.parameters["sprop-stereo"]=t?1:0,i.stereo=t?1:0),void 0!==r&&(f.parameters.useinbandfec=r?1:0,i.useinbandfec=r?1:0),void 0!==s&&(f.parameters.usedtx=s?1:0,i.usedtx=s?1:0),void 0!==n&&(i.maxplaybackrate=n),void 0!==o&&(i.maxaveragebitrate=o),void 0!==d&&(f.parameters.ptime=d,i.ptime=d),p||(f.rtcpFeedback=f.rtcpFeedback.filter(e=>"nack"!==e.type||e.parameter),a=a.filter(e=>"nack"!==e.type||e.parameter));break;case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":void 0!==u&&(i["x-google-start-bitrate"]=u),void 0!==h&&(i["x-google-max-bitrate"]=h),void 0!==m&&(i["x-google-min-bitrate"]=m)}}const n={payload:e.payloadType,config:""};for(const e of Object.keys(i))n.config&&(n.config+=";"),n.config+=`${e}=${i[e]}`;n.config&&this._mediaObject.fmtp.push(n);for(const t of a)this._mediaObject.rtcpFb.push({payload:e.payloadType,type:t.type,subtype:t.parameter})}this._mediaObject.payloads=d.codecs.map(e=>e.payloadType).join(" "),this._mediaObject.ext=[];for(const e of d.headerExtensions)(o.ext??[]).some(t=>t.uri===e.uri)&&this._mediaObject.ext.push({uri:e.uri,value:e.id});if("extmap-allow-mixed"===o.extmapAllowMixed&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),o.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:o.simulcast.list1},this._mediaObject.rids=[];for(const e of o.rids??[])"send"===e.direction&&this._mediaObject.rids.push({id:e.id,direction:"recv"})}else if(o.simulcast_03){this._mediaObject.simulcast_03={value:o.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(const e of o.rids??[])"send"===e.direction&&this._mediaObject.rids.push({id:e.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";break;case"application":"number"==typeof o.sctpPort?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=a.port,this._mediaObject.maxMessageSize=a.maxMessageSize):o.sctpmap&&(this._mediaObject.payloads=String(a.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:a.port,maxMessageSize:a.maxMessageSize})}}setDtlsRole(e){switch(e){case"client":this._mediaObject.setup="active";break;case"server":this._mediaObject.setup="passive";break;case"auto":this._mediaObject.setup="actpass"}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(t){if(!this._mediaObject.simulcast?.list1)return;const r={};for(const e of t)e.rid&&(r[e.rid]=e);const s=this._mediaObject.simulcast.list1,i=e.parseSimulcastStreamList(s);for(const e of i)for(const t of e)t.paused=!r[t.scid]?.active;this._mediaObject.simulcast.list1=i.map(e=>e.map(e=>`${e.paused?"~":""}${e.scid}`).join(",")).join(";")}},Ne.OfferMediaSection=class extends r{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:a,mid:n,kind:o,offerRtpParameters:c,streamId:d,trackId:l}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(n),this._mediaObject.type=o,a?(this._mediaObject.connection={ip:a.ip,version:a.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=a.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.protocol=i?"UDP/DTLS/SCTP":"UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",o){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=`${d??"-"} ${l}`;for(const i of c.codecs){const e={payload:i.payloadType,codec:s(i),rate:i.clockRate};i.channels>1&&(e.encoding=i.channels),this._mediaObject.rtp.push(e);const t={payload:i.payloadType,config:""};for(const r of Object.keys(i.parameters??{}))t.config&&(t.config+=";"),t.config+=`${r}=${i.parameters[r]}`;t.config&&this._mediaObject.fmtp.push(t);for(const r of i.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:i.payloadType,type:r.type,subtype:r.parameter})}this._mediaObject.payloads=c.codecs.map(e=>e.payloadType).join(" "),this._mediaObject.ext=[];for(const s of c.headerExtensions)this._mediaObject.ext.push({uri:s.uri,value:s.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";const e=c.encodings[0],t=e.ssrc,r=e.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],t&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:t,attribute:"cname",value:c.rtcp.cname}),r&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:r,attribute:"cname",value:c.rtcp.cname}),t&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${t} ${r}`}));break}case"application":this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=i.port,this._mediaObject.maxMessageSize=i.maxMessageSize}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}},Ne}(),s=["av1","h264"],i=new t.Logger("RemoteSdp");return Ae.RemoteSdp=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:s,plainRtpParameters:i}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=s,this._plainRtpParameters=i,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:"mediasoup-client"},name:"-",timing:{start:0,stop:0},media:[]},e?.iceLite&&(this._sdpObject.icelite="ice-lite"),r){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};const e=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[e-1].algorithm,hash:r.fingerprints[e-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){i.debug("updateIceParameters() [iceParameters:%o]",e),this._iceParameters=e,this._sdpObject.icelite=e.iceLite?"ice-lite":void 0;for(const t of this._mediaSections)t.setIceParameters(e)}updateDtlsRole(e){i.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(const t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){i.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){const t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:i,answerRtpParameters:a,codecOptions:n}){const o=new r.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:i,answerRtpParameters:a,codecOptions:n}),c=o.getObject();c.rtp.find(e=>s.includes(e.codec.toLowerCase()))||(c.ext=c.ext?.filter(e=>"https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension"!==e.uri)),t?this._replaceMediaSection(o,t):this._midToIndex.has(o.mid)?this._replaceMediaSection(o):this._addMediaSection(o)}receive({mid:e,kind:t,offerRtpParameters:s,streamId:i,trackId:a}){this.setSessionExtmapAllowMixed();const n=new r.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:s,streamId:i,trackId:a}),o=this._mediaSections.find(e=>e.closed);o?this._replaceMediaSection(n,o.mid):this._addMediaSection(n)}pauseMediaSection(e){this._findMediaSection(e).pause()}resumeSendingMediaSection(e){this._findMediaSection(e).resume()}resumeReceivingMediaSection(e){this._findMediaSection(e).resume()}disableMediaSection(e){this._findMediaSection(e).disable()}closeMediaSection(e){const t=this._findMediaSection(e);return e===this._firstMid?(i.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this._regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){const r=this._findMediaSection(e);r.muxSimulcastStreams(t),this._replaceMediaSection(r)}sendSctpAssociation({offerMediaObject:e}){const t=new r.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e});this._addMediaSection(t)}receiveSctpAssociation(){const e=new r.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,mid:"datachannel",kind:"application"});this._addMediaSection(e)}getSdp(){return this._sdpObject.origin.sessionVersion++,e.write(this._sdpObject)}_addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this._regenerateBundleMids()}_replaceMediaSection(e,t){if("string"==typeof t){const r=this._midToIndex.get(t);if(void 0===r)throw new Error(`no media section found for reuseMid '${t}'`);const s=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(s.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this._regenerateBundleMids()}else{const t=this._midToIndex.get(e.mid);if(void 0===t)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[t]=e,this._sdpObject.media[t]=e.getObject()}}_findMediaSection(e){const t=this._midToIndex.get(e);if(void 0===t)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}_regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}},Ae}var Fe,Be={};var Ue,$e={};var Ve,qe={};var We,ze,He={};function Ge(){if(ze)return f;ze=1,Object.defineProperty(f,"__esModule",{value:!0}),f.Device=void 0,f.detectDevice=h,f.detectDeviceAsync=m;const e=g(),t=_(),r=k(),s=E(),i=D(),a=B(),n=ne(),o=function(){if(Oe)return ue;Oe=1,Object.defineProperty(ue,"__esModule",{value:!0}),ue.Chrome111=void 0;const e=_e(),t=k(),r=_(),s=B(),i=E(),a=Se(),n=ke(),o=Ee(),c=De(),d=je(),l=new r.Logger("Chrome111"),p="Chrome111",u={OS:1024,MIS:1024};let h=class r extends t.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:p,factory:e=>new r(e),getNativeRtpCapabilities:async()=>{l.debug("getNativeRtpCapabilities()");let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio"),t.addTransceiver("video",{sendEncodings:[{scalabilityMode:"L3T3"}]});const i=await t.createOffer();try{t.close()}catch(s){}t=void 0;const a=e.parse(i.sdp);return r.getLocalRtpCapabilities(a)}catch(s){try{t?.close()}catch(i){}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(l.debug("getNativeSctpCapabilities()"),{numStreams:u})}}static getLocalRtpCapabilities(e){const t=n.extractRtpCapabilities({sdpObject:e});return s.validateAndNormalizeRtpCapabilities(t),c.addNackSupportForOpus(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:o,getSendExtendedRtpCapabilities:c}){super(),l.debug("constructor()"),this._direction=e,this._remoteSdp=new d.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._getSendExtendedRtpCapabilities=c,s.role&&"auto"!==s.role&&(this._forcedLocalDtlsRole="server"===s.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:n??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...o}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(l.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return p}close(){if(l.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch(e){}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),l.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),l.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});l.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();l.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:t,encodings:i,codecOptions:c,codec:d,onRtpSender:p}){if(this.assertNotClosed(),this.assertSendDirection(),l.debug("send() [kind:%s, track.id:%s]",t.kind,t.id),i&&i.length>1){let e=1;for(const t of i){const r=t.scalabilityMode?(0,a.parse)(t.scalabilityMode).temporalLayers:3;r>e&&(e=r)}i.forEach((t,r)=>{t.rid=`r${r}`,t.scalabilityMode=`L1T${e}`})}const u=this._remoteSdp.getNextMediaSectionIdx(),h=this._pc.addTransceiver(t,{direction:"sendonly",streams:[this._sendStream],sendEncodings:i});p&&p(h.sender);const m=await this._pc.createOffer();let f=e.parse(m.sdp);f.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();const g=r.getLocalRtpCapabilities(f),b=this._getSendExtendedRtpCapabilities(g),y=s.getSendingRtpParameters(t.kind,b);y.codecs=s.reduceCodecs(y.codecs,d);const _=s.getSendingRemoteRtpParameters(t.kind,b);_.codecs=s.reduceCodecs(_.codecs,d),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),l.debug("send() | calling pc.setLocalDescription() [offer:%o]",m),await this._pc.setLocalDescription(m);const v=h.mid;y.mid=v,f=e.parse(this._pc.localDescription.sdp);const w=f.media[u.idx];if(y.rtcp.cname=n.getCname({offerMediaObject:w}),i)if(1===i.length){const e=o.getRtpEncodings({offerMediaObject:w});Object.assign(e[0],i[0]),y.encodings=e}else y.encodings=i;else y.encodings=o.getRtpEncodings({offerMediaObject:w});this._remoteSdp.send({offerMediaObject:w,reuseMid:u.reuseMid,offerRtpParameters:y,answerRtpParameters:_,codecOptions:c});const S={type:"answer",sdp:this._remoteSdp.getSdp()};return l.debug("send() | calling pc.setRemoteDescription() [answer:%o]",S),await this._pc.setRemoteDescription(S),this._mapMidTransceiver.set(v,h),{localId:v,rtpParameters:y,rtpSender:h.sender}}async stopSending(e){if(this.assertSendDirection(),l.debug("stopSending() [localId:%s]",e),this._closed)return;const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(i){}const r=await this._pc.createOffer();l.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),l.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();l.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),l.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";const r=await this._pc.createOffer();l.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?l.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):l.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),l.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach((e,r)=>{e.active=r<=t}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();l.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),l.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach((e,r)=>{s.encodings[r]={...e,...t}}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();l.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:t,maxPacketLifeTime:r,maxRetransmits:s,label:i,protocol:a}){this.assertNotClosed(),this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:t,maxPacketLifeTime:r,maxRetransmits:s,protocol:a};l.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%u.MIS,!this._hasDataChannelMediaSection){const t=await this._pc.createOffer(),r=e.parse(t.sdp),s=r.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:r}),l.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t),this._remoteSdp.sendSctpAssociation({offerMediaObject:s});const i={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(t){this.assertNotClosed(),this.assertRecvDirection();const r=[],s=new Map;for(const e of t){const{trackId:t,kind:r,rtpParameters:i,streamId:a}=e;l.debug("receive() [trackId:%s, kind:%s]",t,r);const n=i.mid??String(this._mapMidTransceiver.size);s.set(t,n),this._remoteSdp.receive({mid:n,kind:r,offerRtpParameters:i,streamId:a??i.rtcp.cname,trackId:t})}const i={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(const e of t){const{trackId:t,onRtpReceiver:r}=e;if(r){const e=s.get(t),i=this._pc.getTransceivers().find(t=>t.mid===e);if(!i)throw new Error("transceiver not found");r(i.receiver)}}let a=await this._pc.createAnswer();const o=e.parse(a.sdp);for(const e of t){const{trackId:t,rtpParameters:r}=e,i=s.get(t),a=o.media.find(e=>String(e.mid)===i);n.applyCodecParameters({offerRtpParameters:r,answerMediaObject:a})}a={type:"answer",sdp:e.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),l.debug("receive() | calling pc.setLocalDescription() [answer:%o]",a),await this._pc.setLocalDescription(a);for(const e of t){const{trackId:t}=e,i=s.get(t),a=this._pc.getTransceivers().find(e=>e.mid===i);if(!a)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,a),r.push({localId:i,track:a.receiver.track,rtpReceiver:a.receiver})}return r}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const s of e){l.debug("stopReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();l.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){l.debug("pauseReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();l.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){l.debug("resumeReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();l.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:t,label:r,protocol:s}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=t,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o,protocol:s};l.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(r,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();if(!this._transportReady){const t=e.parse(r.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t})}l.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setLocalDescription(r),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:t,localSdpObject:r}){r||(r=e.parse(this._pc.localDescription.sdp));const s=n.extractDtlsParameters({sdpObject:r});s.role=t,this._remoteSdp.updateDtlsRole("client"===t?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:s},e,t)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}};assertNotClosed(){if(this._closed)throw new i.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return ue.Chrome111=h,ue}(),c=function(){if(Fe)return Be;Fe=1,Object.defineProperty(Be,"__esModule",{value:!0}),Be.Chrome74=void 0;const e=_e(),t=_(),r=k(),s=B(),i=E(),a=Se(),n=ke(),o=Ee(),c=De(),d=je(),l=new t.Logger("Chrome74"),p="Chrome74",u={OS:1024,MIS:1024};let h=class t extends r.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:p,factory:e=>new t(e),getNativeRtpCapabilities:async()=>{l.debug("getNativeRtpCapabilities()");let r=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{r.addTransceiver("audio"),r.addTransceiver("video");const i=await r.createOffer();try{r.close()}catch(s){}r=void 0;const a=e.parse(i.sdp);return t.getLocalRtpCapabilities(a)}catch(s){try{r?.close()}catch(i){}throw r=void 0,s}},getNativeSctpCapabilities:async()=>(l.debug("getNativeSctpCapabilities()"),{numStreams:u})}}static getLocalRtpCapabilities(e){const t=n.extractRtpCapabilities({sdpObject:e});return s.validateAndNormalizeRtpCapabilities(t),c.addNackSupportForOpus(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:o,getSendExtendedRtpCapabilities:c}){super(),l.debug("constructor()"),this._direction=e,this._remoteSdp=new d.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._getSendExtendedRtpCapabilities=c,s.role&&"auto"!==s.role&&(this._forcedLocalDtlsRole="server"===s.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:n??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...o}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(l.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return p}close(){if(l.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch(e){}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),l.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),l.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});l.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();l.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:r,encodings:i,codecOptions:c,codec:d}){this.assertNotClosed(),this.assertSendDirection(),l.debug("send() [kind:%s, track.id:%s]",r.kind,r.id),i&&i.length>1&&i.forEach((e,t)=>{e.rid=`r${t}`});const p=this._remoteSdp.getNextMediaSectionIdx(),u=this._pc.addTransceiver(r,{direction:"sendonly",streams:[this._sendStream],sendEncodings:i});let h=await this._pc.createOffer(),m=e.parse(h.sdp);m.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();const f=t.getLocalRtpCapabilities(m),g=this._getSendExtendedRtpCapabilities(f),b=s.getSendingRtpParameters(r.kind,g);b.codecs=s.reduceCodecs(b.codecs,d);const y=s.getSendingRemoteRtpParameters(r.kind,g);y.codecs=s.reduceCodecs(y.codecs,d),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m});let _=!1;const v=(0,a.parse)((i??[{}])[0].scalabilityMode);let w;i&&1===i.length&&v.spatialLayers>1&&"video/vp9"===b.codecs[0].mimeType.toLowerCase()&&(l.debug("send() | enabling legacy simulcast for VP9 SVC"),_=!0,m=e.parse(h.sdp),w=m.media[p.idx],o.addLegacySimulcast({offerMediaObject:w,numStreams:v.spatialLayers}),h={type:"offer",sdp:e.write(m)}),l.debug("send() | calling pc.setLocalDescription() [offer:%o]",h),await this._pc.setLocalDescription(h);const S=u.mid;if(b.mid=S,m=e.parse(this._pc.localDescription.sdp),w=m.media[p.idx],b.rtcp.cname=n.getCname({offerMediaObject:w}),i)if(1===i.length){let e=o.getRtpEncodings({offerMediaObject:w});Object.assign(e[0],i[0]),_&&(e=[e[0]]),b.encodings=e}else b.encodings=i;else b.encodings=o.getRtpEncodings({offerMediaObject:w});if(b.encodings.length>1&&("video/vp8"===b.codecs[0].mimeType.toLowerCase()||"video/h264"===b.codecs[0].mimeType.toLowerCase()))for(const e of b.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${v.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:w,reuseMid:p.reuseMid,offerRtpParameters:b,answerRtpParameters:y,codecOptions:c});const C={type:"answer",sdp:this._remoteSdp.getSdp()};return l.debug("send() | calling pc.setRemoteDescription() [answer:%o]",C),await this._pc.setRemoteDescription(C),this._mapMidTransceiver.set(S,u),{localId:S,rtpParameters:b,rtpSender:u.sender}}async stopSending(e){if(this.assertSendDirection(),l.debug("stopSending() [localId:%s]",e),this._closed)return;const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(i){}const r=await this._pc.createOffer();l.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),l.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();l.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),l.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";const r=await this._pc.createOffer();l.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?l.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):l.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),l.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach((e,r)=>{e.active=r<=t}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();l.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),l.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach((e,r)=>{s.encodings[r]={...e,...t}}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();l.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:t,maxPacketLifeTime:r,maxRetransmits:s,label:i,protocol:a}){this.assertNotClosed(),this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:t,maxPacketLifeTime:r,maxRetransmits:s,protocol:a};l.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%u.MIS,!this._hasDataChannelMediaSection){const t=await this._pc.createOffer(),r=e.parse(t.sdp),s=r.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:r}),l.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t),this._remoteSdp.sendSctpAssociation({offerMediaObject:s});const i={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(t){this.assertNotClosed(),this.assertRecvDirection();const r=[],s=new Map;for(const e of t){const{trackId:t,kind:r,rtpParameters:i,streamId:a}=e;l.debug("receive() [trackId:%s, kind:%s]",t,r);const n=i.mid??String(this._mapMidTransceiver.size);s.set(t,n),this._remoteSdp.receive({mid:n,kind:r,offerRtpParameters:i,streamId:a??i.rtcp.cname,trackId:t})}const i={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let a=await this._pc.createAnswer();const o=e.parse(a.sdp);for(const e of t){const{trackId:t,rtpParameters:r}=e,i=s.get(t),a=o.media.find(e=>String(e.mid)===i);n.applyCodecParameters({offerRtpParameters:r,answerMediaObject:a})}a={type:"answer",sdp:e.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),l.debug("receive() | calling pc.setLocalDescription() [answer:%o]",a),await this._pc.setLocalDescription(a);for(const e of t){const{trackId:t}=e,i=s.get(t),a=this._pc.getTransceivers().find(e=>e.mid===i);if(!a)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,a),r.push({localId:i,track:a.receiver.track,rtpReceiver:a.receiver})}return r}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const s of e){l.debug("stopReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();l.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){l.debug("pauseReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();l.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){l.debug("resumeReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();l.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:t,label:r,protocol:s}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=t,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o,protocol:s};l.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(r,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();if(!this._transportReady){const t=e.parse(r.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t})}l.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setLocalDescription(r),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:t,localSdpObject:r}){r||(r=e.parse(this._pc.localDescription.sdp));const s=n.extractDtlsParameters({sdpObject:r});s.role=t,this._remoteSdp.updateDtlsRole("client"===t?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:s},e,t)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}};assertNotClosed(){if(this._closed)throw new i.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return Be.Chrome74=h,Be}(),d=function(){if(Ue)return $e;Ue=1,Object.defineProperty($e,"__esModule",{value:!0}),$e.Firefox120=void 0;const e=_e(),t=k(),r=_(),s=E(),i=B(),a=Se(),n=ke(),o=Ee(),c=je(),d=new r.Logger("Firefox120"),l="Firefox120",p={OS:16,MIS:2048};let u=class r extends t.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:l,factory:e=>new r(e),getNativeRtpCapabilities:async()=>{d.debug("getNativeRtpCapabilities()");let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});const s=document.createElement("canvas");s.getContext("2d");const i=s.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:"sendrecv"}),t.addTransceiver(i,{direction:"sendrecv",sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});const n=await t.createOffer();try{s.remove()}catch(a){}try{i.stop()}catch(a){}try{t.close()}catch(a){}t=void 0;const o=e.parse(n.sdp);return r.getLocalRtpCapabilities(o)}catch(a){try{s.remove()}catch(n){}try{i.stop()}catch(n){}try{t?.close()}catch(n){}throw t=void 0,a}},getNativeSctpCapabilities:async()=>(d.debug("getNativeSctpCapabilities()"),{numStreams:p})}}static getLocalRtpCapabilities(e){const t=n.extractRtpCapabilities({sdpObject:e});return i.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:o,getSendExtendedRtpCapabilities:l}){super(),d.debug("constructor()"),this._direction=e,this._remoteSdp=new c.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:n??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...o}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(d.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return l}close(){if(d.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch(e){}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){throw this.assertNotClosed(),new s.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),d.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});d.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};d.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};d.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();d.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:t,encodings:s,codecOptions:c,codec:l,onRtpSender:p}){this.assertNotClosed(),this.assertSendDirection(),d.debug("send() [kind:%s, track.id:%s]",t.kind,t.id),s&&s.length>1&&s.forEach((e,t)=>{e.rid=`r${t}`});const u=this._pc.addTransceiver(t,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});p&&p(u.sender);const h=await this._pc.createOffer();let m=e.parse(h.sdp);m.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();const f=r.getLocalRtpCapabilities(m),g=this._getSendExtendedRtpCapabilities(f),b=i.getSendingRtpParameters(t.kind,g);b.codecs=i.reduceCodecs(b.codecs,l);const y=i.getSendingRemoteRtpParameters(t.kind,g);y.codecs=i.reduceCodecs(y.codecs,l),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:m});const _=(0,a.parse)((s??[{}])[0].scalabilityMode);d.debug("send() | calling pc.setLocalDescription() [offer:%o]",h),await this._pc.setLocalDescription(h);const v=u.mid;b.mid=v,m=e.parse(this._pc.localDescription.sdp);const w=m.media[m.media.length-1];if(b.rtcp.cname=n.getCname({offerMediaObject:w}),s)if(1===s.length){const e=o.getRtpEncodings({offerMediaObject:w});Object.assign(e[0],s[0]),b.encodings=e}else b.encodings=s;else b.encodings=o.getRtpEncodings({offerMediaObject:w});if(b.encodings.length>1&&("video/vp8"===b.codecs[0].mimeType.toLowerCase()||"video/h264"===b.codecs[0].mimeType.toLowerCase()))for(const e of b.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${_.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:w,offerRtpParameters:b,answerRtpParameters:y,codecOptions:c});const S={type:"answer",sdp:this._remoteSdp.getSdp()};return d.debug("send() | calling pc.setRemoteDescription() [answer:%o]",S),await this._pc.setRemoteDescription(S),this._mapMidTransceiver.set(v,u),{localId:v,rtpParameters:b,rtpSender:u.sender}}async stopSending(e){if(this.assertSendDirection(),d.debug("stopSending() [localId:%s]",e),this._closed)return;const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);const r=await this._pc.createOffer();d.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};d.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),d.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();d.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};d.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),d.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);const r=await this._pc.createOffer();d.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};d.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?d.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):d.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),d.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");const s=r.sender.getParameters();s.encodings.forEach((e,r)=>{e.active=r<=t}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();d.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};d.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),d.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach((e,r)=>{s.encodings[r]={...e,...t}}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();d.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};d.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:t,maxPacketLifeTime:r,maxRetransmits:s,label:i,protocol:a}){this.assertNotClosed(),this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:t,maxPacketLifeTime:r,maxRetransmits:s,protocol:a};d.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%p.MIS,!this._hasDataChannelMediaSection){const t=await this._pc.createOffer(),r=e.parse(t.sdp),s=r.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:r}),d.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t),this._remoteSdp.sendSctpAssociation({offerMediaObject:s});const i={type:"answer",sdp:this._remoteSdp.getSdp()};d.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(t){this.assertNotClosed(),this.assertRecvDirection();const r=[],s=new Map;for(const e of t){const{trackId:t,kind:r,rtpParameters:i,streamId:a}=e;d.debug("receive() [trackId:%s, kind:%s]",t,r);const n=i.mid??String(this._mapMidTransceiver.size);s.set(t,n),this._remoteSdp.receive({mid:n,kind:r,offerRtpParameters:i,streamId:a??i.rtcp.cname,trackId:t})}const i={type:"offer",sdp:this._remoteSdp.getSdp()};d.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(const e of t){const{trackId:t,onRtpReceiver:r}=e;if(r){const e=s.get(t),i=this._pc.getTransceivers().find(t=>t.mid===e);if(!i)throw new Error("transceiver not found");r(i.receiver)}}let a=await this._pc.createAnswer();const o=e.parse(a.sdp);for(const c of t){const{trackId:t,rtpParameters:r}=c,i=s.get(t),d=o.media.find(e=>String(e.mid)===i);n.applyCodecParameters({offerRtpParameters:r,answerMediaObject:d}),a={type:"answer",sdp:e.write(o)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:o}),d.debug("receive() | calling pc.setLocalDescription() [answer:%o]",a),await this._pc.setLocalDescription(a);for(const e of t){const{trackId:t}=e,i=s.get(t),a=this._pc.getTransceivers().find(e=>e.mid===i);if(!a)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,a),r.push({localId:i,track:a.receiver.track,rtpReceiver:a.receiver})}return r}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const s of e){d.debug("stopReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};d.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();d.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){d.debug("pauseReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};d.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();d.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){d.debug("resumeReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};d.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();d.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:t,label:r,protocol:s}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=t,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o,protocol:s};d.debug("receiveDataChannel() [options:%o]",c);const l=this._pc.createDataChannel(r,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const t={type:"offer",sdp:this._remoteSdp.getSdp()};d.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();if(!this._transportReady){const t=e.parse(r.sdp);await this.setupTransport({localDtlsRole:"client",localSdpObject:t})}d.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setLocalDescription(r),this._hasDataChannelMediaSection=!0}return{dataChannel:l}}async setupTransport({localDtlsRole:t,localSdpObject:r}){r||(r=e.parse(this._pc.localDescription.sdp));const s=n.extractDtlsParameters({sdpObject:r});s.role=t,this._remoteSdp.updateDtlsRole("client"===t?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:s},e,t)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}};assertNotClosed(){if(this._closed)throw new s.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return $e.Firefox120=u,$e}(),l=function(){if(Ve)return qe;Ve=1,Object.defineProperty(qe,"__esModule",{value:!0}),qe.Safari12=void 0;const e=_e(),t=k(),r=_(),s=B(),i=E(),a=Se(),n=je(),o=ke(),c=Ee(),d=De(),l=new r.Logger("Safari12"),p="Safari12",u={OS:1024,MIS:1024};let h=class r extends t.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:p,factory:e=>new r(e),getNativeRtpCapabilities:async()=>{l.debug("getNativeRtpCapabilities()");let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio"),t.addTransceiver("video");const i=await t.createOffer();try{t.close()}catch(s){}t=void 0;const a=e.parse(i.sdp);return r.getLocalRtpCapabilities(a)}catch(s){try{t?.close()}catch(i){}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(l.debug("getNativeSctpCapabilities()"),{numStreams:u})}}static getLocalRtpCapabilities(e){const t=o.extractRtpCapabilities({sdpObject:e});return s.validateAndNormalizeRtpCapabilities(t),d.addNackSupportForOpus(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),l.debug("constructor()"),this._direction=e,this._remoteSdp=new n.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._getSendExtendedRtpCapabilities=d,s.role&&"auto"!==s.role&&(this._forcedLocalDtlsRole="server"===s.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",e=>{this.emit("@icecandidateerror",e)}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(l.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return p}close(){if(l.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch(e){}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),l.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),l.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});l.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();l.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:t,encodings:i,codecOptions:n,codec:d,onRtpSender:p}){this.assertNotClosed(),this.assertSendDirection(),l.debug("send() [kind:%s, track.id:%s]",t.kind,t.id);const u=this._remoteSdp.getNextMediaSectionIdx(),h=this._pc.addTransceiver(t,{direction:"sendonly",streams:[this._sendStream]});p&&p(h.sender);let m=await this._pc.createOffer(),f=e.parse(m.sdp);f.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();const g=r.getLocalRtpCapabilities(f),b=this._getSendExtendedRtpCapabilities(g),y=s.getSendingRtpParameters(t.kind,b);y.codecs=s.reduceCodecs(y.codecs,d);const _=s.getSendingRemoteRtpParameters(t.kind,b);let v;_.codecs=s.reduceCodecs(_.codecs,d),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f});const w=(0,a.parse)((i??[{}])[0].scalabilityMode);i&&i.length>1&&(l.debug("send() | enabling legacy simulcast"),f=e.parse(m.sdp),v=f.media[u.idx],c.addLegacySimulcast({offerMediaObject:v,numStreams:i.length}),m={type:"offer",sdp:e.write(f)}),l.debug("send() | calling pc.setLocalDescription() [offer:%o]",m),await this._pc.setLocalDescription(m);const S=h.mid;if(y.mid=S,f=e.parse(this._pc.localDescription.sdp),v=f.media[u.idx],y.rtcp.cname=o.getCname({offerMediaObject:v}),y.encodings=c.getRtpEncodings({offerMediaObject:v}),i)for(let e=0;e<y.encodings.length;++e)i[e]&&Object.assign(y.encodings[e],i[e]);if(y.encodings.length>1&&("video/vp8"===y.codecs[0].mimeType.toLowerCase()||"video/h264"===y.codecs[0].mimeType.toLowerCase()))for(const e of y.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${w.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:v,reuseMid:u.reuseMid,offerRtpParameters:y,answerRtpParameters:_,codecOptions:n});const C={type:"answer",sdp:this._remoteSdp.getSdp()};return l.debug("send() | calling pc.setRemoteDescription() [answer:%o]",C),await this._pc.setRemoteDescription(C),this._mapMidTransceiver.set(S,h),{localId:S,rtpParameters:y,rtpSender:h.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;l.debug("stopSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(i){}const r=await this._pc.createOffer();l.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),l.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();l.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),l.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);const r=await this._pc.createOffer();l.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?l.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):l.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),l.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach((e,r)=>{e.active=r<=t}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();l.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),l.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach((e,r)=>{s.encodings[r]={...e,...t}}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();l.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:t,maxPacketLifeTime:r,maxRetransmits:s,label:i,protocol:a}){this.assertNotClosed(),this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:t,maxPacketLifeTime:r,maxRetransmits:s,protocol:a};l.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%u.MIS,!this._hasDataChannelMediaSection){const t=await this._pc.createOffer(),r=e.parse(t.sdp),s=r.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:r}),l.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t),this._remoteSdp.sendSctpAssociation({offerMediaObject:s});const i={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(t){this.assertNotClosed(),this.assertRecvDirection();const r=[],s=new Map;for(const e of t){const{trackId:t,kind:r,rtpParameters:i,streamId:a}=e;l.debug("receive() [trackId:%s, kind:%s]",t,r);const n=i.mid??String(this._mapMidTransceiver.size);s.set(t,n),this._remoteSdp.receive({mid:n,kind:r,offerRtpParameters:i,streamId:a??i.rtcp.cname,trackId:t})}const i={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(const e of t){const{trackId:t,onRtpReceiver:r}=e;if(r){const e=s.get(t),i=this._pc.getTransceivers().find(t=>t.mid===e);if(!i)throw new Error("transceiver not found");r(i.receiver)}}let a=await this._pc.createAnswer();const n=e.parse(a.sdp);for(const e of t){const{trackId:t,rtpParameters:r}=e,i=s.get(t),a=n.media.find(e=>String(e.mid)===i);o.applyCodecParameters({offerRtpParameters:r,answerMediaObject:a})}a={type:"answer",sdp:e.write(n)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:n}),l.debug("receive() | calling pc.setLocalDescription() [answer:%o]",a),await this._pc.setLocalDescription(a);for(const e of t){const{trackId:t}=e,i=s.get(t),a=this._pc.getTransceivers().find(e=>e.mid===i);if(!a)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,a),r.push({localId:i,track:a.receiver.track,rtpReceiver:a.receiver})}return r}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const s of e){l.debug("stopReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();l.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){l.debug("pauseReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();l.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){l.debug("resumeReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();l.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:t,label:r,protocol:s}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=t,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o,protocol:s};l.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(r,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();if(!this._transportReady){const t=e.parse(r.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t})}l.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setLocalDescription(r),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:t,localSdpObject:r}){r||(r=e.parse(this._pc.localDescription.sdp));const s=o.extractDtlsParameters({sdpObject:r});s.role=t,this._remoteSdp.updateDtlsRole("client"===t?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:s},e,t)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}};assertNotClosed(){if(this._closed)throw new i.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return qe.Safari12=h,qe}(),p=function(){if(We)return He;We=1,Object.defineProperty(He,"__esModule",{value:!0}),He.ReactNative106=void 0;const e=_e(),t=k(),r=_(),s=B(),i=E(),a=Se(),n=je(),o=ke(),c=Ee(),d=De(),l=new r.Logger("ReactNative106"),p="ReactNative106",u={OS:1024,MIS:1024};let h=class r extends t.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:p,factory:e=>new r(e),getNativeRtpCapabilities:async()=>{l.debug("getNativeRtpCapabilities()");let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio"),t.addTransceiver("video");const i=await t.createOffer();try{t.close()}catch(s){}t=void 0;const a=e.parse(i.sdp);return r.getLocalRtpCapabilities(a)}catch(s){try{t?.close()}catch(i){}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(l.debug("getNativeSctpCapabilities()"),{numStreams:u})}}static getLocalRtpCapabilities(e){const t=o.extractRtpCapabilities({sdpObject:e});return s.validateAndNormalizeRtpCapabilities(t),d.addNackSupportForOpus(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),l.debug("constructor()"),this._direction=e,this._remoteSdp=new n.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._getSendExtendedRtpCapabilities=d,s.role&&"auto"!==s.role&&(this._forcedLocalDtlsRole="server"===s.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(l.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return p}close(){if(l.debug("close()"),!this._closed){this._closed=!0,this._sendStream.release(!1);try{this._pc.close()}catch(e){}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),l.debug("updateIceServers()");const t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),l.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){const e=await this._pc.createOffer({iceRestart:!0});l.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);const t={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{const e={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);const t=await this._pc.createAnswer();l.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:t,encodings:i,codecOptions:n,codec:d,onRtpSender:p}){this.assertNotClosed(),this.assertSendDirection(),l.debug("send() [kind:%s, track.id:%s]",t.kind,t.id),i&&i.length>1&&i.forEach((e,t)=>{e.rid=`r${t}`});const u=this._remoteSdp.getNextMediaSectionIdx(),h=this._pc.addTransceiver(t,{direction:"sendonly",streams:[this._sendStream],sendEncodings:i});p&&p(h.sender);let m=await this._pc.createOffer(),f=e.parse(m.sdp);f.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();const g=r.getLocalRtpCapabilities(f),b=this._getSendExtendedRtpCapabilities(g),y=s.getSendingRtpParameters(t.kind,b);y.codecs=s.reduceCodecs(y.codecs,d);const _=s.getSendingRemoteRtpParameters(t.kind,b);_.codecs=s.reduceCodecs(_.codecs,d),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f});let v=!1;const w=(0,a.parse)((i??[{}])[0].scalabilityMode);let S;i&&1===i.length&&w.spatialLayers>1&&"video/vp9"===y.codecs[0].mimeType.toLowerCase()&&(l.debug("send() | enabling legacy simulcast for VP9 SVC"),v=!0,f=e.parse(m.sdp),S=f.media[u.idx],c.addLegacySimulcast({offerMediaObject:S,numStreams:w.spatialLayers}),m={type:"offer",sdp:e.write(f)}),l.debug("send() | calling pc.setLocalDescription() [offer:%o]",m),await this._pc.setLocalDescription(m);let C=h.mid??void 0;if(C||l.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),y.mid=C,f=e.parse(this._pc.localDescription.sdp),S=f.media[u.idx],y.rtcp.cname=o.getCname({offerMediaObject:S}),i)if(1===i.length){let e=c.getRtpEncodings({offerMediaObject:S});Object.assign(e[0],i[0]),v&&(e=[e[0]]),y.encodings=e}else y.encodings=i;else y.encodings=c.getRtpEncodings({offerMediaObject:S});if(y.encodings.length>1&&("video/vp8"===y.codecs[0].mimeType.toLowerCase()||"video/h264"===y.codecs[0].mimeType.toLowerCase()))for(const e of y.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${w.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:S,reuseMid:u.reuseMid,offerRtpParameters:y,answerRtpParameters:_,codecOptions:n});const P={type:"answer",sdp:this._remoteSdp.getSdp()};return l.debug("send() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),C||(C=h.mid,y.mid=C),this._mapMidTransceiver.set(C,h),{localId:C,rtpParameters:y,rtpSender:h.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;l.debug("stopSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(i){}const r=await this._pc.createOffer();l.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),l.debug("pauseSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);const r=await this._pc.createOffer();l.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),l.debug("resumeSending() [localId:%s]",e);const t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";const r=await this._pc.createOffer();l.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);const s={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?l.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):l.debug("replaceTrack() [localId:%s, no track]",e);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),l.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach((e,r)=>{e.active=r<=t}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();l.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),l.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);const r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");const s=r.sender.getParameters();s.encodings.forEach((e,r)=>{s.encodings[r]={...e,...t}}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);const i=await this._pc.createOffer();l.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);const a={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:t,maxPacketLifeTime:r,maxRetransmits:s,label:i,protocol:a}){this.assertNotClosed(),this.assertSendDirection();const n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:t,maxPacketLifeTime:r,maxRetransmits:s,protocol:a};l.debug("sendDataChannel() [options:%o]",n);const o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%u.MIS,!this._hasDataChannelMediaSection){const t=await this._pc.createOffer(),r=e.parse(t.sdp),s=r.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:r}),l.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t),this._remoteSdp.sendSctpAssociation({offerMediaObject:s});const i={type:"answer",sdp:this._remoteSdp.getSdp()};l.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(t){this.assertNotClosed(),this.assertRecvDirection();const r=[],s=new Map;for(const e of t){const{trackId:t,kind:r,rtpParameters:i,streamId:a}=e;l.debug("receive() [trackId:%s, kind:%s]",t,r);const n=i.mid??String(this._mapMidTransceiver.size);s.set(t,n),this._remoteSdp.receive({mid:n,kind:r,offerRtpParameters:i,streamId:a??i.rtcp.cname,trackId:t})}const i={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(const e of t){const{trackId:t,onRtpReceiver:r}=e;if(r){const e=s.get(t),i=this._pc.getTransceivers().find(t=>t.mid===e);if(!i)throw new Error("transceiver not found");r(i.receiver)}}let a=await this._pc.createAnswer();const n=e.parse(a.sdp);for(const e of t){const{trackId:t,rtpParameters:r}=e,i=s.get(t),a=n.media.find(e=>String(e.mid)===i);o.applyCodecParameters({offerRtpParameters:r,answerMediaObject:a})}a={type:"answer",sdp:e.write(n)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:n}),l.debug("receive() | calling pc.setLocalDescription() [answer:%o]",a),await this._pc.setLocalDescription(a);for(const e of t){const{trackId:t}=e,i=s.get(t),a=this._pc.getTransceivers().find(e=>e.mid===i);if(!a)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(i,a),r.push({localId:i,track:a.receiver.track,rtpReceiver:a.receiver})}return r}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(const s of e){l.debug("stopReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();l.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(const s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){l.debug("pauseReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();l.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(const s of e){l.debug("resumeReceiving() [localId:%s]",s);const e=this._mapMidTransceiver.get(s);if(!e)throw new Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();l.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();const t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:t,label:r,protocol:s}){this.assertNotClosed(),this.assertRecvDirection();const{streamId:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o}=t,c={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:n,maxRetransmits:o,protocol:s};l.debug("receiveDataChannel() [options:%o]",c);const d=this._pc.createDataChannel(r,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();const t={type:"offer",sdp:this._remoteSdp.getSdp()};l.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);const r=await this._pc.createAnswer();if(!this._transportReady){const t=e.parse(r.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t})}l.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setLocalDescription(r),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:t,localSdpObject:r}){r||(r=e.parse(this._pc.localDescription.sdp));const s=o.extractDtlsParameters({sdpObject:r});s.role=t,this._remoteSdp.updateDtlsRole("client"===t?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:s},e,t)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}};assertNotClosed(){if(this._closed)throw new i.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw new Error('method can just be called for handlers with "recv" direction')}};return He.ReactNative106=h,He}(),u=new t.Logger("Device");function h(t){u.debug("detectDevice() [userAgent:%s]",t),t||"object"!=typeof navigator||(t=navigator.userAgent);return b(new e.default(t))}async function m(t){u.debug("detectDeviceAsync() [userAgent:%s]",t),t||"object"!=typeof navigator||(t=navigator.userAgent);return b(new e.default(t))}function b(t){if("object"==typeof navigator&&"ReactNative"===navigator.product)return u.debug("detectDeviceImpl() | React-Native detected"),"undefined"==typeof RTCPeerConnection||"undefined"==typeof RTCRtpTransceiver?void u.warn("detectDeviceImpl() | unsupported react-native-webrtc without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?"):"ReactNative106";{const r=t.parseUserAgent(),s=/^\d+/.exec(r?.shortVersion??"0"),i=parseInt(s?.[0]??"0",10),a=r.platform===e.KnownPlatforms.iphone||r.platform===e.KnownPlatforms.ipad||r.platform===e.KnownPlatforms.mac&&(r.isMobile||r.isTablet||"object"==typeof navigator&&navigator?.maxTouchPoints>=2),n=r.isChrome,o=r.isFireFox,c=r.isSafari,d=r.isEdge,l=r.isDesktop&&r.name===e.KnownBrowsers.electron,p=r.isWebkit,h={browserMajorVersion:i,isIOS:a,isChrome:n,isFirefox:o,isSafari:c,isElectron:l,isWebkit:p};if(u.debug("detectDeviceImpl() | detected browser [userAgent:%s, parsed:%o, result:%o]",r.userAgent,r,h),(n||d)&&!a&&i>=111)return"Chrome111";if(n&&!a&&i>=74||d&&!a&&i>=88)return"Chrome74";if(l)return"Chrome111";if(o&&!a&&i>=120)return"Firefox120";if(c&&i>=12&&"undefined"!=typeof RTCRtpTransceiver&&RTCRtpTransceiver.prototype.hasOwnProperty("currentDirection"))return"Safari12";if(a&&"undefined"!=typeof RTCRtpTransceiver&&RTCRtpTransceiver.prototype.hasOwnProperty("currentDirection"))return"Safari12";if(p){const e=t.userAgent?.match(/(?:(?:Chrome|Chromium))[ /](\w+)/i);if(e){return Number(e[1])>=111?"Chrome111":"Chrome74"}return"Chrome111"}return void u.warn("detectDeviceImpl() | browser not supported [userAgent:%s, parsed:%o, result:%o]",r.userAgent,r,h)}}return f.Device=class e{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new r.EnhancedEventEmitter;static async factory({handlerName:t,handlerFactory:r}={}){if(u.debug("factory()"),t&&r)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!t&&!r&&!(t=await m()))throw new s.UnsupportedError("device not supported");return new e({handlerName:t,handlerFactory:r})}constructor({handlerName:e,handlerFactory:t}={}){if(u.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)u.debug("constructor() | handler given: %s",e);else{if(!(e=h()))throw new s.UnsupportedError("device not supported");u.debug("constructor() | detected handler: %s",e)}switch(e){case"Chrome111":this._handlerFactory=o.Chrome111.createFactory();break;case"Chrome74":this._handlerFactory=c.Chrome74.createFactory();break;case"Firefox120":this._handlerFactory=d.Firefox120.createFactory();break;case"Safari12":this._handlerFactory=l.Safari12.createFactory();break;case"ReactNative106":this._handlerFactory=p.ReactNative106.createFactory();break;default:throw new TypeError(`unknown handlerName "${e}"`)}}this._handlerName=this._handlerFactory.name}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){if(!this._loaded)throw new s.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new s.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(u.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new s.InvalidStateError("already loaded");const r=i.clone(e);a.validateAndNormalizeRtpCapabilities(r);const{getNativeRtpCapabilities:n,getNativeSctpCapabilities:o}=this._handlerFactory,c=i.clone(await n());a.validateAndNormalizeRtpCapabilities(c),u.debug("load() | got native RTP capabilities:%o",c),this._getSendExtendedRtpCapabilities=e=>i.clone(a.getExtendedRtpCapabilities(e,r,t));const d=a.getExtendedRtpCapabilities(c,r,!1);this._recvRtpCapabilities=a.getRecvRtpCapabilities(d),a.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities),u.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),this._canProduceByKind.audio=a.canSend("audio",this._recvRtpCapabilities),this._canProduceByKind.video=a.canSend("video",this._recvRtpCapabilities),this._sctpCapabilities=await o(),a.validateSctpCapabilities(this._sctpCapabilities),u.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),u.debug("load() succeeded"),this._loaded=!0}canProduce(e){if(!this._loaded)throw new s.InvalidStateError("not loaded");if("audio"!==e&&"video"!==e)throw new TypeError(`invalid kind "${e}"`);return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:o,appData:c}){return u.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:o,appData:c})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:o,appData:c}){return u.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:a,iceTransportPolicy:n,additionalSettings:o,appData:c})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:a,sctpParameters:o,iceServers:c,iceTransportPolicy:d,additionalSettings:l,appData:p}){if(!this._loaded)throw new s.InvalidStateError("not loaded");if("string"!=typeof t)throw new TypeError("missing id");if("object"!=typeof r)throw new TypeError("missing iceParameters");if(!Array.isArray(i))throw new TypeError("missing iceCandidates");if("object"!=typeof a)throw new TypeError("missing dtlsParameters");if(o&&"object"!=typeof o)throw new TypeError("wrong sctpParameters");if(p&&"object"!=typeof p)throw new TypeError("if given, appData must be an object");const u=new n.Transport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:a,sctpParameters:o,iceServers:c,iceTransportPolicy:d,additionalSettings:l,appData:p,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",u),u}},f}var Ke,Je={},Qe={},Xe={},Ye={};var Ze,et={};var tt,rt,st,it={},at={},nt={};function ot(){if(rt)return at;rt=1,Object.defineProperty(at,"__esModule",{value:!0});const e=(tt||(tt=1,Object.defineProperty(nt,"__esModule",{value:!0}),nt.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i),nt);return at.default=function(t){return"string"==typeof t&&e.default.test(t)},at}function ct(){if(st)return it;st=1,Object.defineProperty(it,"__esModule",{value:!0});const e=ot();return it.default=function(t){if(!(0,e.default)(t))throw TypeError("Invalid UUID");let r;return Uint8Array.of((r=parseInt(t.slice(0,8),16))>>>24,r>>>16&255,r>>>8&255,255&r,(r=parseInt(t.slice(9,13),16))>>>8,255&r,(r=parseInt(t.slice(14,18),16))>>>8,255&r,(r=parseInt(t.slice(19,23),16))>>>8,255&r,(r=parseInt(t.slice(24,36),16))/1099511627776&255,r/4294967296&255,r>>>24&255,r>>>16&255,r>>>8&255,255&r)},it}var dt,lt={};function pt(){if(dt)return lt;dt=1,Object.defineProperty(lt,"__esModule",{value:!0}),lt.unsafeStringify=void 0;const e=ot(),t=[];for(let s=0;s<256;++s)t.push((s+256).toString(16).slice(1));function r(e,r=0){return(t[e[r+0]]+t[e[r+1]]+t[e[r+2]]+t[e[r+3]]+"-"+t[e[r+4]]+t[e[r+5]]+"-"+t[e[r+6]]+t[e[r+7]]+"-"+t[e[r+8]]+t[e[r+9]]+"-"+t[e[r+10]]+t[e[r+11]]+t[e[r+12]]+t[e[r+13]]+t[e[r+14]]+t[e[r+15]]).toLowerCase()}return lt.unsafeStringify=r,lt.default=function(t,s=0){const i=r(t,s);if(!(0,e.default)(i))throw TypeError("Stringified UUID is invalid");return i},lt}var ut,ht,mt={},ft={};function gt(){if(ut)return ft;let e;ut=1,Object.defineProperty(ft,"__esModule",{value:!0});const t=new Uint8Array(16);return ft.default=function(){if(!e){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");e=crypto.getRandomValues.bind(crypto)}return e(t)},ft}function bt(){if(ht)return mt;ht=1,Object.defineProperty(mt,"__esModule",{value:!0}),mt.updateV1State=void 0;const e=gt(),t=pt(),r={};function s(e,t,r){return e.msecs??=-1/0,e.nsecs??=0,t===e.msecs?(e.nsecs++,e.nsecs>=1e4&&(e.node=void 0,e.nsecs=0)):t>e.msecs?e.nsecs=0:t<e.msecs&&(e.node=void 0),e.node||(e.node=r.slice(10,16),e.node[0]|=1,e.clockseq=16383&(r[8]<<8|r[9])),e.msecs=t,e}function i(e,t,r,s,i,a,n=0){if(e.length<16)throw new Error("Random bytes length must be >= 16");if(a){if(n<0||n+16>a.length)throw new RangeError(`UUID byte range ${n}:${n+15} is out of buffer bounds`)}else a=new Uint8Array(16),n=0;t??=Date.now(),r??=0,s??=16383&(e[8]<<8|e[9]),i??=e.slice(10,16);const o=(1e4*(268435455&(t+=122192928e5))+r)%4294967296;a[n++]=o>>>24&255,a[n++]=o>>>16&255,a[n++]=o>>>8&255,a[n++]=255&o;const c=t/4294967296*1e4&268435455;a[n++]=c>>>8&255,a[n++]=255&c,a[n++]=c>>>24&15|16,a[n++]=c>>>16&255,a[n++]=s>>>8|128,a[n++]=255&s;for(let d=0;d<6;++d)a[n++]=i[d];return a}return mt.updateV1State=s,mt.default=function(a,n,o){let c;const d=a?._v6??!1;if(a){const e=Object.keys(a);1===e.length&&"_v6"===e[0]&&(a=void 0)}if(a)c=i(a.random??a.rng?.()??(0,e.default)(),a.msecs,a.nsecs,a.clockseq,a.node,n,o);else{const t=Date.now(),a=(0,e.default)();s(r,t,a),c=i(a,r.msecs,r.nsecs,d?void 0:r.clockseq,d?void 0:r.node,n,o)}return n??(0,t.unsafeStringify)(c)},mt}var yt,_t={};function vt(){if(yt)return _t;yt=1,Object.defineProperty(_t,"__esModule",{value:!0});const e=ct(),t=pt();return _t.default=function(r){const s=function(e){return Uint8Array.of((15&e[6])<<4|e[7]>>4&15,(15&e[7])<<4|(240&e[4])>>4,(15&e[4])<<4|(240&e[5])>>4,(15&e[5])<<4|(240&e[0])>>4,(15&e[0])<<4|(240&e[1])>>4,(15&e[1])<<4|(240&e[2])>>4,96|15&e[2],e[3],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])}("string"==typeof r?(0,e.default)(r):r);return"string"==typeof r?(0,t.unsafeStringify)(s):s},_t}var wt,St={},Ct={};function Pt(){if(wt)return Ct;function e(e){return 14+(e+64>>>9<<4)+1}function t(e,t){const r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function r(e,r,s,i,a,n){return t((o=t(t(r,e),t(i,n)))<<(c=a)|o>>>32-c,s);var o,c}function s(e,t,s,i,a,n,o){return r(t&s|~t&i,e,t,a,n,o)}function i(e,t,s,i,a,n,o){return r(t&i|s&~i,e,t,a,n,o)}function a(e,t,s,i,a,n,o){return r(t^s^i,e,t,a,n,o)}function n(e,t,s,i,a,n,o){return r(s^(t|~i),e,t,a,n,o)}return wt=1,Object.defineProperty(Ct,"__esModule",{value:!0}),Ct.default=function(r){return function(e){const t=new Uint8Array(4*e.length);for(let r=0;r<4*e.length;r++)t[r]=e[r>>2]>>>r%4*8&255;return t}(function(r,o){const c=new Uint32Array(e(o)).fill(0);c.set(r),c[o>>5]|=128<<o%32,c[c.length-1]=o,r=c;let d=1732584193,l=-271733879,p=-1732584194,u=271733878;for(let e=0;e<r.length;e+=16){const o=d,c=l,h=p,m=u;d=s(d,l,p,u,r[e],7,-680876936),u=s(u,d,l,p,r[e+1],12,-389564586),p=s(p,u,d,l,r[e+2],17,606105819),l=s(l,p,u,d,r[e+3],22,-1044525330),d=s(d,l,p,u,r[e+4],7,-176418897),u=s(u,d,l,p,r[e+5],12,1200080426),p=s(p,u,d,l,r[e+6],17,-1473231341),l=s(l,p,u,d,r[e+7],22,-45705983),d=s(d,l,p,u,r[e+8],7,1770035416),u=s(u,d,l,p,r[e+9],12,-1958414417),p=s(p,u,d,l,r[e+10],17,-42063),l=s(l,p,u,d,r[e+11],22,-1990404162),d=s(d,l,p,u,r[e+12],7,1804603682),u=s(u,d,l,p,r[e+13],12,-40341101),p=s(p,u,d,l,r[e+14],17,-1502002290),l=s(l,p,u,d,r[e+15],22,1236535329),d=i(d,l,p,u,r[e+1],5,-165796510),u=i(u,d,l,p,r[e+6],9,-1069501632),p=i(p,u,d,l,r[e+11],14,643717713),l=i(l,p,u,d,r[e],20,-373897302),d=i(d,l,p,u,r[e+5],5,-701558691),u=i(u,d,l,p,r[e+10],9,38016083),p=i(p,u,d,l,r[e+15],14,-660478335),l=i(l,p,u,d,r[e+4],20,-405537848),d=i(d,l,p,u,r[e+9],5,568446438),u=i(u,d,l,p,r[e+14],9,-1019803690),p=i(p,u,d,l,r[e+3],14,-187363961),l=i(l,p,u,d,r[e+8],20,1163531501),d=i(d,l,p,u,r[e+13],5,-1444681467),u=i(u,d,l,p,r[e+2],9,-51403784),p=i(p,u,d,l,r[e+7],14,1735328473),l=i(l,p,u,d,r[e+12],20,-1926607734),d=a(d,l,p,u,r[e+5],4,-378558),u=a(u,d,l,p,r[e+8],11,-2022574463),p=a(p,u,d,l,r[e+11],16,1839030562),l=a(l,p,u,d,r[e+14],23,-35309556),d=a(d,l,p,u,r[e+1],4,-1530992060),u=a(u,d,l,p,r[e+4],11,1272893353),p=a(p,u,d,l,r[e+7],16,-155497632),l=a(l,p,u,d,r[e+10],23,-1094730640),d=a(d,l,p,u,r[e+13],4,681279174),u=a(u,d,l,p,r[e],11,-358537222),p=a(p,u,d,l,r[e+3],16,-722521979),l=a(l,p,u,d,r[e+6],23,76029189),d=a(d,l,p,u,r[e+9],4,-640364487),u=a(u,d,l,p,r[e+12],11,-421815835),p=a(p,u,d,l,r[e+15],16,530742520),l=a(l,p,u,d,r[e+2],23,-995338651),d=n(d,l,p,u,r[e],6,-198630844),u=n(u,d,l,p,r[e+7],10,1126891415),p=n(p,u,d,l,r[e+14],15,-1416354905),l=n(l,p,u,d,r[e+5],21,-57434055),d=n(d,l,p,u,r[e+12],6,1700485571),u=n(u,d,l,p,r[e+3],10,-1894986606),p=n(p,u,d,l,r[e+10],15,-1051523),l=n(l,p,u,d,r[e+1],21,-2054922799),d=n(d,l,p,u,r[e+8],6,1873313359),u=n(u,d,l,p,r[e+15],10,-30611744),p=n(p,u,d,l,r[e+6],15,-1560198380),l=n(l,p,u,d,r[e+13],21,1309151649),d=n(d,l,p,u,r[e+4],6,-145523070),u=n(u,d,l,p,r[e+11],10,-1120210379),p=n(p,u,d,l,r[e+2],15,718787259),l=n(l,p,u,d,r[e+9],21,-343485551),d=t(d,o),l=t(l,c),p=t(p,h),u=t(u,m)}return Uint32Array.of(d,l,p,u)}(function(t){if(0===t.length)return new Uint32Array;const r=new Uint32Array(e(8*t.length)).fill(0);for(let e=0;e<t.length;e++)r[e>>2]|=(255&t[e])<<e%4*8;return r}(r),8*r.length))},Ct}var kt,Rt,Tt={};function Et(){if(kt)return Tt;kt=1,Object.defineProperty(Tt,"__esModule",{value:!0}),Tt.URL=Tt.DNS=Tt.stringToBytes=void 0;const e=ct(),t=pt();function r(e){e=unescape(encodeURIComponent(e));const t=new Uint8Array(e.length);for(let r=0;r<e.length;++r)t[r]=e.charCodeAt(r);return t}return Tt.stringToBytes=r,Tt.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",Tt.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",Tt.default=function(s,i,a,n,o,c){const d="string"==typeof a?r(a):a,l="string"==typeof n?(0,e.default)(n):n;if("string"==typeof n&&(n=(0,e.default)(n)),16!==n?.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let p=new Uint8Array(16+d.length);if(p.set(l),p.set(d,l.length),p=i(p),p[6]=15&p[6]|s,p[8]=63&p[8]|128,o){c=c||0;for(let e=0;e<16;++e)o[c+e]=p[e];return o}return(0,t.unsafeStringify)(p)},Tt}var It,xt,Dt={},Mt={};function Lt(){if(xt)return Dt;xt=1,Object.defineProperty(Dt,"__esModule",{value:!0});const e=function(){if(It)return Mt;It=1,Object.defineProperty(Mt,"__esModule",{value:!0});const e="undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);return Mt.default={randomUUID:e},Mt}(),t=gt(),r=pt();return Dt.default=function(s,i,a){if(e.default.randomUUID&&!i&&!s)return e.default.randomUUID();const n=(s=s||{}).random??s.rng?.()??(0,t.default)();if(n.length<16)throw new Error("Random bytes length must be >= 16");if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,i){if((a=a||0)<0||a+16>i.length)throw new RangeError(`UUID byte range ${a}:${a+15} is out of buffer bounds`);for(let e=0;e<16;++e)i[a+e]=n[e];return i}return(0,r.unsafeStringify)(n)},Dt}var Ot,At,Nt={},jt={};function Ft(){return At||(At=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.URL=e.DNS=void 0;const t=function(){if(Ot)return jt;function e(e,t,r,s){switch(e){case 0:return t&r^~t&s;case 1:case 3:return t^r^s;case 2:return t&r^t&s^r&s}}function t(e,t){return e<<t|e>>>32-t}return Ot=1,Object.defineProperty(jt,"__esModule",{value:!0}),jt.default=function(r){const s=[1518500249,1859775393,2400959708,3395469782],i=[1732584193,4023233417,2562383102,271733878,3285377520],a=new Uint8Array(r.length+1);a.set(r),a[r.length]=128;const n=(r=a).length/4+2,o=Math.ceil(n/16),c=new Array(o);for(let e=0;e<o;++e){const t=new Uint32Array(16);for(let s=0;s<16;++s)t[s]=r[64*e+4*s]<<24|r[64*e+4*s+1]<<16|r[64*e+4*s+2]<<8|r[64*e+4*s+3];c[e]=t}c[o-1][14]=8*(r.length-1)/Math.pow(2,32),c[o-1][14]=Math.floor(c[o-1][14]),c[o-1][15]=8*(r.length-1)&4294967295;for(let d=0;d<o;++d){const r=new Uint32Array(80);for(let e=0;e<16;++e)r[e]=c[d][e];for(let e=16;e<80;++e)r[e]=t(r[e-3]^r[e-8]^r[e-14]^r[e-16],1);let a=i[0],n=i[1],o=i[2],l=i[3],p=i[4];for(let i=0;i<80;++i){const c=Math.floor(i/20),d=t(a,5)+e(c,n,o,l)+p+s[c]+r[i]>>>0;p=l,l=o,o=t(n,30)>>>0,n=a,a=d}i[0]=i[0]+a>>>0,i[1]=i[1]+n>>>0,i[2]=i[2]+o>>>0,i[3]=i[3]+l>>>0,i[4]=i[4]+p>>>0}return Uint8Array.of(i[0]>>24,i[0]>>16,i[0]>>8,i[0],i[1]>>24,i[1]>>16,i[1]>>8,i[1],i[2]>>24,i[2]>>16,i[2]>>8,i[2],i[3]>>24,i[3]>>16,i[3]>>8,i[3],i[4]>>24,i[4]>>16,i[4]>>8,i[4])},jt}(),r=Et();var s=Et();function i(e,s,i,a){return(0,r.default)(80,t.default,e,s,i,a)}Object.defineProperty(e,"DNS",{enumerable:!0,get:function(){return s.DNS}}),Object.defineProperty(e,"URL",{enumerable:!0,get:function(){return s.URL}}),i.DNS=r.DNS,i.URL=r.URL,e.default=i}(Nt)),Nt}var Bt,Ut={};var $t,Vt={};function qt(){if($t)return Vt;$t=1,Object.defineProperty(Vt,"__esModule",{value:!0});const e=ct(),t=pt();return Vt.default=function(r){const s=function(e){return Uint8Array.of((15&e[3])<<4|e[4]>>4&15,(15&e[4])<<4|(240&e[5])>>4,(15&e[5])<<4|15&e[6],e[7],(15&e[1])<<4|(240&e[2])>>4,(15&e[2])<<4|(240&e[3])>>4,16|(240&e[0])>>4,(15&e[0])<<4|(240&e[1])>>4,e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])}("string"==typeof r?(0,e.default)(r):r);return"string"==typeof r?(0,t.unsafeStringify)(s):s},Vt}var Wt,zt={};var Ht,Gt,Kt={};function Jt(){return Gt||(Gt=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.version=e.validate=e.v7=e.v6ToV1=e.v6=e.v5=e.v4=e.v3=e.v1ToV6=e.v1=e.stringify=e.parse=e.NIL=e.MAX=void 0;var t=(Ke||(Ke=1,Object.defineProperty(Ye,"__esModule",{value:!0}),Ye.default="ffffffff-ffff-ffff-ffff-ffffffffffff"),Ye);Object.defineProperty(e,"MAX",{enumerable:!0,get:function(){return t.default}});var r=(Ze||(Ze=1,Object.defineProperty(et,"__esModule",{value:!0}),et.default="00000000-0000-0000-0000-000000000000"),et);Object.defineProperty(e,"NIL",{enumerable:!0,get:function(){return r.default}});var s=ct();Object.defineProperty(e,"parse",{enumerable:!0,get:function(){return s.default}});var i=pt();Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return i.default}});var a=bt();Object.defineProperty(e,"v1",{enumerable:!0,get:function(){return a.default}});var n=vt();Object.defineProperty(e,"v1ToV6",{enumerable:!0,get:function(){return n.default}});var o=(Rt||(Rt=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.URL=e.DNS=void 0;const t=Pt(),r=Et();var s=Et();function i(e,s,i,a){return(0,r.default)(48,t.default,e,s,i,a)}Object.defineProperty(e,"DNS",{enumerable:!0,get:function(){return s.DNS}}),Object.defineProperty(e,"URL",{enumerable:!0,get:function(){return s.URL}}),i.DNS=r.DNS,i.URL=r.URL,e.default=i}(St)),St);Object.defineProperty(e,"v3",{enumerable:!0,get:function(){return o.default}});var c=Lt();Object.defineProperty(e,"v4",{enumerable:!0,get:function(){return c.default}});var d=Ft();Object.defineProperty(e,"v5",{enumerable:!0,get:function(){return d.default}});var l=function(){if(Bt)return Ut;Bt=1,Object.defineProperty(Ut,"__esModule",{value:!0});const e=pt(),t=bt(),r=vt();return Ut.default=function(s,i,a){s??={},a??=0;let n=(0,t.default)({...s,_v6:!0},new Uint8Array(16));if(n=(0,r.default)(n),i){for(let e=0;e<16;e++)i[a+e]=n[e];return i}return(0,e.unsafeStringify)(n)},Ut}();Object.defineProperty(e,"v6",{enumerable:!0,get:function(){return l.default}});var p=qt();Object.defineProperty(e,"v6ToV1",{enumerable:!0,get:function(){return p.default}});var u=function(){if(Wt)return zt;Wt=1,Object.defineProperty(zt,"__esModule",{value:!0}),zt.updateV7State=void 0;const e=gt(),t=pt(),r={};function s(e,t,r){return e.msecs??=-1/0,e.seq??=0,t>e.msecs?(e.seq=r[6]<<23|r[7]<<16|r[8]<<8|r[9],e.msecs=t):(e.seq=e.seq+1|0,0===e.seq&&e.msecs++),e}function i(e,t,r,s,i=0){if(e.length<16)throw new Error("Random bytes length must be >= 16");if(s){if(i<0||i+16>s.length)throw new RangeError(`UUID byte range ${i}:${i+15} is out of buffer bounds`)}else s=new Uint8Array(16),i=0;return t??=Date.now(),r??=127*e[6]<<24|e[7]<<16|e[8]<<8|e[9],s[i++]=t/1099511627776&255,s[i++]=t/4294967296&255,s[i++]=t/16777216&255,s[i++]=t/65536&255,s[i++]=t/256&255,s[i++]=255&t,s[i++]=112|r>>>28&15,s[i++]=r>>>20&255,s[i++]=128|r>>>14&63,s[i++]=r>>>6&255,s[i++]=r<<2&255|3&e[10],s[i++]=e[11],s[i++]=e[12],s[i++]=e[13],s[i++]=e[14],s[i++]=e[15],s}return zt.updateV7State=s,zt.default=function(a,n,o){let c;if(a)c=i(a.random??a.rng?.()??(0,e.default)(),a.msecs,a.seq,n,o);else{const t=Date.now(),a=(0,e.default)();s(r,t,a),c=i(a,r.msecs,r.seq,n,o)}return n??(0,t.unsafeStringify)(c)},zt}();Object.defineProperty(e,"v7",{enumerable:!0,get:function(){return u.default}});var h=ot();Object.defineProperty(e,"validate",{enumerable:!0,get:function(){return h.default}});var m=function(){if(Ht)return Kt;Ht=1,Object.defineProperty(Kt,"__esModule",{value:!0});const e=ot();return Kt.default=function(t){if(!(0,e.default)(t))throw TypeError("Invalid UUID");return parseInt(t.slice(14,15),16)},Kt}();Object.defineProperty(e,"version",{enumerable:!0,get:function(){return m.default}})}(Xe)),Xe}var Qt,Xt={};var Yt,Zt={};var er,tr,rr={};function sr(){if(tr)return Qe;tr=1,Object.defineProperty(Qe,"__esModule",{value:!0}),Qe.FakeMediaStreamTrack=void 0;const e=Jt(),t=(Qt||(Qt=1,Object.defineProperty(Xt,"__esModule",{value:!0}),Xt.FakeEventTarget=void 0,Xt.FakeEventTarget=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]??=[],this.listeners[e].push({callback:"function"==typeof t?t:t.handleEvent,once:"object"==typeof r&&!0===r.once}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(e=>e.callback!==("function"==typeof t?t:t.handleEvent)))}dispatchEvent(e){if(!e||"string"!=typeof e.type)throw new Error("invalid event object");const t=this.listeners[e.type];if(!t)return!0;for(const s of[...t]){try{s.callback.call(this,e)}catch(r){setTimeout(()=>{throw r},0)}s.once&&this.removeEventListener(e.type,s.callback)}return!e.defaultPrevented}}),Xt),r=(Yt||(Yt=1,Object.defineProperty(Zt,"__esModule",{value:!0}),Zt.FakeEvent=void 0,Zt.FakeEvent=class{NONE=0;CAPTURING_PHASE=1;AT_TARGET=2;BUBBLING_PHASE=3;type;bubbles;cancelable;defaultPrevented=!1;composed=!1;currentTarget=null;eventPhase=this.NONE;isTrusted=!0;target=null;timeStamp=0;cancelBubble=!1;returnValue=!0;srcElement=null;constructor(e,t={}){this.type=e,this.bubbles=t.bubbles??!1,this.cancelable=t.cancelable??!1}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopPropagation(){}stopImmediatePropagation(){}composedPath(){return[]}initEvent(e,t,r){}}),Zt),s=(er||(er=1,Object.defineProperty(rr,"__esModule",{value:!0}),rr.clone=function(e){return void 0===e?void 0:Number.isNaN(e)?NaN:"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e))}),rr);class i extends t.FakeEventTarget{#e;#t;#r;#s;#i;#a;#n;#o;#c;#d;#l;#p=null;#u=null;#h=null;#m=null;#f=null;constructor({kind:t,id:r,label:s,contentHint:i,enabled:a,muted:n,readyState:o,capabilities:c,constraints:d,settings:l,data:p}){super(),this.#e=r??(0,e.v4)(),this.#t=t,this.#r=s??"",this.#n=i??"",this.#i=a??!0,this.#a=n??!1,this.#s=o??"live",this.#o=c??{},this.#c=d??{},this.#d=l??{},this.#l=p??{}}get id(){return this.#e}get kind(){return this.#t}get label(){return this.#r}get contentHint(){return this.#n}set contentHint(e){this.#n=e}get enabled(){return this.#i}set enabled(e){const t=this.#i!==e;this.#i=e,t&&this.dispatchEvent(new r.FakeEvent("enabledchange"))}get muted(){return this.#a}get readyState(){return this.#s}get data(){return this.#l}set data(e){this.#l=e}get onmute(){return this.#p}set onmute(e){this.#p&&this.removeEventListener("mute",this.#p),this.#p=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#u}set onunmute(e){this.#u&&this.removeEventListener("unmute",this.#u),this.#u=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#h}set onended(e){this.#h&&this.removeEventListener("ended",this.#h),this.#h=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#m}set onenabledchange(e){this.#m&&this.removeEventListener("enabledchange",this.#m),this.#m=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#f}set onstopped(e){this.#f&&this.removeEventListener("stopped",this.#f),this.#f=e,e&&this.addEventListener("stopped",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}stop(){"ended"!==this.#s&&(this.#s="ended",this.dispatchEvent(new r.FakeEvent("stopped")))}clone({id:t,data:r}={}){return new i({id:t??(0,e.v4)(),kind:this.#t,label:this.#r,contentHint:this.#n,enabled:this.#i,muted:this.#a,readyState:this.#s,capabilities:(0,s.clone)(this.#o),constraints:(0,s.clone)(this.#c),settings:(0,s.clone)(this.#d),data:r??(0,s.clone)(this.#l)})}getCapabilities(){return this.#o}getConstraints(){return this.#c}async applyConstraints(e={}){return this.#c=e,Promise.resolve()}getSettings(){return this.#d}remoteStop(){"ended"!==this.#s&&(this.#s="ended",this.dispatchEvent(new r.FakeEvent("stopped")),this.dispatchEvent(new r.FakeEvent("ended")))}remoteMute(){this.#a||(this.#a=!0,this.dispatchEvent(new r.FakeEvent("mute")))}remoteUnmute(){this.#a&&(this.#a=!1,this.dispatchEvent(new r.FakeEvent("unmute")))}}return Qe.FakeMediaStreamTrack=i,Qe}var ir,ar,nr={};function or(){if(ar)return Je;ar=1,Object.defineProperty(Je,"__esModule",{value:!0}),Je.FakeHandler=void 0;const e=sr(),t=k(),r=_(),s=D(),i=B(),a=E(),n=(ir||(ir=1,Object.defineProperty(nr,"__esModule",{value:!0}),nr.FakeEventTarget=void 0,nr.FakeEventTarget=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]??=[],this.listeners[e].push({callback:"function"==typeof t?t:t.handleEvent,once:"object"==typeof r&&!0===r.once}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(e=>e.callback!==("function"==typeof t?t:t.handleEvent)))}dispatchEvent(e){if(!e||"string"!=typeof e.type)throw new Error("invalid event object");const t=this.listeners[e.type];if(!t)return!0;for(const s of[...t]){try{s.callback.call(this,e)}catch(r){setTimeout(()=>{throw r},0)}s.once&&this.removeEventListener(e.type,s.callback)}return!e.defaultPrevented}}),nr),o=new r.Logger("FakeHandler"),c="FakeHandler";let d=class r extends t.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${s.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:c,factory:t=>new r(t,e),getNativeRtpCapabilities:async()=>(o.debug("getNativeRtpCapabilities()"),r.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(o.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){const t=e.generateNativeRtpCapabilities();return i.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),o.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return c}close(){o.debug("close()"),this._closed||(this._closed=!0,super.close())}setIceGatheringState(e){this.emit("@icegatheringstatechange",e)}setConnectionState(e){this.emit("@connectionstatechange",e)}async updateIceServers(e){this.assertNotClosed(),o.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),o.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,encodings:t,codecOptions:a,codec:n}){this.assertNotClosed(),o.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});const c=r.getLocalRtpCapabilities(this._fakeParameters),d=this._getSendExtendedRtpCapabilities(c),l=i.getSendingRtpParameters(e.kind,d);l.codecs=i.reduceCodecs(l.codecs,n);const p=l.codecs.some(e=>/.+\/rtx$/i.test(e.mimeType));l.mid=`mid-${s.generateRandomNumber()}`,t||(t=[{}]);for(const r of t)r.ssrc=s.generateRandomNumber(),p&&(r.rtx={ssrc:s.generateRandomNumber()});l.encodings=t,l.rtcp={cname:this._cname,reducedSize:!0,mux:!0};const u=this._nextLocalId++;return this._tracks.set(u,e),{localId:String(u),rtpParameters:l}}async stopSending(e){if(o.debug("stopSending() [localId:%s]",e),!this._closed){if(!this._tracks.has(Number(e)))throw new Error("local track not found");this._tracks.delete(Number(e))}}async pauseSending(e){this.assertNotClosed()}async resumeSending(e){this.assertNotClosed()}async replaceTrack(e,t){this.assertNotClosed(),t?o.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):o.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),o.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),o.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t)}async getSenderStats(e){return this.assertNotClosed(),new Map}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:s,protocol:i}){this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"server"}),o.debug("sendDataChannel()");return{dataChannel:new l({id:this._nextSctpStreamId++,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:s,protocol:i}),sctpStreamParameters:{streamId:this._nextSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r}}}async receive(t){this.assertNotClosed();const r=[];for(const s of t){const{trackId:t,kind:i}=s;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),o.debug("receive() [trackId:%s, kind:%s]",t,i);const a=this._nextLocalId++,n=new e.FakeMediaStreamTrack({kind:i});this._tracks.set(a,n),r.push({localId:String(a),track:n})}return r}async stopReceiving(e){if(!this._closed)for(const t of e)o.debug("stopReceiving() [localId:%s]",t),this._tracks.delete(Number(t))}async pauseReceiving(e){this.assertNotClosed()}async resumeReceiving(e){this.assertNotClosed()}async getReceiverStats(e){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),o.debug("receiveDataChannel()");return{dataChannel:new l({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:r})}}async setupTransport({localDtlsRole:e,localSdpObject:t}){const r=s.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(r.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((e,t)=>this.emit("@connect",{dtlsParameters:r},e,t)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new a.InvalidStateError("method called in a closed handler")}};Je.FakeHandler=d;class l extends n.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:r=null,maxRetransmits:s=null,label:i="",protocol:a=""}){super(),o.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${r}, maxRetransmits:${s}, label:${i}, protocol:${a}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=r,this._maxRetransmits=s,this._label=i,this._protocol=a}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}close(){["closing","closed"].includes(this._readyState)||(this._readyState="closed")}send(e){if("open"!==this._readyState)throw new a.InvalidStateError("not open")}}return Je}var cr,dr,lr={};var pr=(dr||(dr=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.debug=e.testFakeParameters=e.FakeHandler=e.enhancedEvents=e.ortc=e.parseScalabilityMode=e.detectDeviceAsync=e.detectDevice=e.Device=e.version=e.types=void 0;const t=l();e.debug=t.default,e.types=(p||(p=1,Object.defineProperty(u,"__esModule",{value:!0})),u),e.version="3.15.6";var r=Ge();Object.defineProperty(e,"Device",{enumerable:!0,get:function(){return r.Device}}),Object.defineProperty(e,"detectDevice",{enumerable:!0,get:function(){return r.detectDevice}}),Object.defineProperty(e,"detectDeviceAsync",{enumerable:!0,get:function(){return r.detectDeviceAsync}});var s=Se();Object.defineProperty(e,"parseScalabilityMode",{enumerable:!0,get:function(){return s.parse}}),e.ortc=B(),e.enhancedEvents=k();var i=or();Object.defineProperty(e,"FakeHandler",{enumerable:!0,get:function(){return i.FakeHandler}}),e.testFakeParameters=function(){if(cr)return lr;cr=1,Object.defineProperty(lr,"__esModule",{value:!0}),lr.generateRouterRtpCapabilities=function(){return e.deepFreeze({codecs:[{mimeType:"audio/opus",kind:"audio",preferredPayloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}},{mimeType:"video/VP8",kind:"video",preferredPayloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}},{mimeType:"video/H264",kind:"video",preferredPayloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}},{mimeType:"video/VP9",kind:"video",preferredPayloadType:105,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"profile-id":0,"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:106,clockRate:9e4,rtcpFeedback:[],parameters:{apt:105}}],headerExtensions:[{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id",preferredId:2,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id",preferredId:3,preferredEncrypt:!1,direction:"recvonly"},{kind:"audio",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",preferredId:10,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:3gpp:video-orientation",preferredId:11,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:toffset",preferredId:12,preferredEncrypt:!1,direction:"sendrecv"}]})},lr.generateNativeRtpCapabilities=function(){return{codecs:[{mimeType:"audio/opus",kind:"audio",preferredPayloadType:111,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{minptime:10,useinbandfec:1}},{mimeType:"audio/ISAC",kind:"audio",preferredPayloadType:103,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}},{mimeType:"audio/CN",kind:"audio",preferredPayloadType:106,clockRate:32e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}},{mimeType:"audio/foo",kind:"audio",preferredPayloadType:107,clockRate:9e4,channels:4,rtcpFeedback:[{type:"foo-qwe-qwe"}],parameters:{foo:"lalala"}},{mimeType:"video/BAZCODEC",kind:"video",preferredPayloadType:100,clockRate:9e4,rtcpFeedback:[{type:"foo"},{type:"transport-cc"},{type:"ccm",parameter:"fir"},{type:"nack"},{type:"nack",parameter:"pli"}],parameters:{baz:"1234abcd"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:101,clockRate:9e4,rtcpFeedback:[],parameters:{apt:100}},{mimeType:"video/VP8",kind:"video",preferredPayloadType:96,clockRate:9e4,rtcpFeedback:[{type:"goog-remb"},{type:"transport-cc"},{type:"ccm",parameter:"fir"},{type:"nack"},{type:"nack",parameter:"pli"}],parameters:{baz:"1234abcd"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:97,clockRate:9e4,rtcpFeedback:[],parameters:{apt:96}},{mimeType:"video/VP9",kind:"video",preferredPayloadType:98,clockRate:9e4,rtcpFeedback:[{type:"goog-remb"},{type:"transport-cc"},{type:"ccm",parameter:"fir"},{type:"nack"},{type:"nack",parameter:"pli"}],parameters:{"profile-id":0}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:99,clockRate:9e4,rtcpFeedback:[],parameters:{apt:98}}],headerExtensions:[{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:toffset",preferredId:2},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:3},{kind:"video",uri:"urn:3gpp:video-orientation",preferredId:4},{kind:"video",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/playout-delay",preferredId:6},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/video-content-type",preferredId:7},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/video-timing",preferredId:8},{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",preferredId:10}]}},lr.generateNativeSctpCapabilities=function(){return e.deepFreeze({numStreams:{OS:2048,MIS:2048}})},lr.generateLocalDtlsParameters=function(){return e.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"82:5A:68:3D:36:C3:0A:DE:AF:E7:32:43:D2:88:83:57:AC:2D:65:E5:80:C4:B6:FB:AF:1A:A0:21:9F:6D:0C:AD"}],role:"auto"})},lr.generateTransportRemoteParameters=function(){return{id:t(),iceParameters:e.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:e.deepFreeze([{foundation:"udpcandidate",address:"9.9.9.9",ip:"9.9.9.9",port:40533,priority:1078862079,protocol:"udp",type:"host",tcpType:"passive"},{foundation:"udpcandidate",address:"9.9.9.9",ip:"9:9:9:9:9:9",port:41333,priority:1078862089,protocol:"udp",type:"host",tcpType:"passive"}]),dtlsParameters:e.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"A9:F4:E0:D2:74:D3:0F:D9:CA:A5:2F:9F:7F:47:FA:F0:C4:72:DD:73:49:D0:3B:14:90:20:51:30:1B:90:8E:71"},{algorithm:"sha-384",value:"03:D9:0B:87:13:98:F6:6D:BC:FC:92:2E:39:D4:E1:97:32:61:30:56:84:70:81:6E:D1:82:97:EA:D9:C1:21:0F:6B:C5:E7:7F:E1:97:0C:17:97:6E:CF:B3:EF:2E:74:B0"},{algorithm:"sha-512",value:"84:27:A4:28:A4:73:AF:43:02:2A:44:68:FF:2F:29:5C:3B:11:9A:60:F4:A8:F0:F5:AC:A0:E3:49:3E:B1:34:53:A9:85:CE:51:9B:ED:87:5E:B8:F4:8E:3D:FA:20:51:B8:96:EE:DA:56:DC:2F:5C:62:79:15:23:E0:21:82:2B:2C"}],role:"auto"}),sctpParameters:e.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}},lr.generateProducerRemoteParameters=function(){return e.deepFreeze({id:t()})},lr.generateConsumerRemoteParameters=function({id:r,codecMimeType:s}={}){switch(s){case"audio/opus":return{id:r??t(),producerId:t(),kind:"audio",rtpParameters:e.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:46687003}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",id:10}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"audio/ISAC":return{id:r??t(),producerId:t(),kind:"audio",rtpParameters:e.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:46687004}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/VP8":return{id:r??t(),producerId:t(),kind:"video",rtpParameters:e.deepFreeze({codecs:[{mimeType:"video/VP8",payloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",payloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}}],encodings:[{ssrc:99991111,rtx:{ssrc:99991112}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/H264":return{id:r??t(),producerId:t(),kind:"video",rtpParameters:e.deepFreeze({codecs:[{mimeType:"video/H264",payloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",payloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}}],encodings:[{ssrc:99991113,rtx:{ssrc:99991114}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};default:throw new TypeError(`unknown codecMimeType '${s}'`)}},lr.generateDataProducerRemoteParameters=function(){return e.deepFreeze({id:t()})},lr.generateDataConsumerRemoteParameters=function({id:r}={}){return{id:r??t(),dataProducerId:t(),sctpStreamParameters:e.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}};const e=D();function t(){return String(e.generateRandomNumber())}return lr}()}(o)),o);const ur={"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","Pale Moon":"pale_moon",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"},hr={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",pale_moon:"Pale Moon",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"},mr={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv",bot:"bot"},fr={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"},gr={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};class br{static getFirstMatch(e,t){const r=t.match(e);return r&&r.length>0&&r[1]||""}static getSecondMatch(e,t){const r=t.match(e);return r&&r.length>1&&r[2]||""}static matchAndReturnConst(e,t,r){if(e.test(t))return r}static getWindowsVersionName(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}}static getMacOSVersionName(e){const t=e.split(".").splice(0,2).map(e=>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}}static getAndroidVersionName(e){const t=e.split(".").splice(0,2).map(e=>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}static getVersionPrecision(e){return e.split(".").length}static compareVersions(e,t,r=!1){const s=br.getVersionPrecision(e),i=br.getVersionPrecision(t);let a=Math.max(s,i),n=0;const o=br.map([e,t],e=>{const t=a-br.getVersionPrecision(e),r=e+new Array(t+1).join(".0");return br.map(r.split("."),e=>new Array(20-e.length).join("0")+e).reverse()});for(r&&(n=a-Math.min(s,i)),a-=1;a>=n;){if(o[0][a]>o[1][a])return 1;if(o[0][a]===o[1][a]){if(a===n)return 0;a-=1}else if(o[0][a]<o[1][a])return-1}}static map(e,t){const r=[];let s;if(Array.prototype.map)return Array.prototype.map.call(e,t);for(s=0;s<e.length;s+=1)r.push(t(e[s]));return r}static find(e,t){let r,s;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,s=e.length;r<s;r+=1){const s=e[r];if(t(s,r))return s}}static assign(e,...t){const r=e;let s,i;if(Object.assign)return Object.assign(e,...t);for(s=0,i=t.length;s<i;s+=1){const e=t[s];if("object"==typeof e&&null!==e){Object.keys(e).forEach(t=>{r[t]=e[t]})}}return e}static getBrowserAlias(e){return ur[e]}static getBrowserTypeByAlias(e){return hr[e]||""}}const yr=/version\/(\d+(\.?_?\d+)+)/i,_r=[{test:[/googlebot/i],describe(e){const t={name:"Googlebot"},r=br.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/opera/i],describe(e){const t={name:"Opera"},r=br.getFirstMatch(yr,e)||br.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\/|opios/i],describe(e){const t={name:"Opera"},r=br.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe(e){const t={name:"Samsung Internet for Android"},r=br.getFirstMatch(yr,e)||br.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe(e){const t={name:"NAVER Whale Browser"},r=br.getFirstMatch(yr,e)||br.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/PaleMoon/i],describe(e){const t={name:"Pale Moon"},r=br.getFirstMatch(yr,e)||br.getFirstMatch(/(?:PaleMoon)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe(e){const t={name:"MZ Browser"},r=br.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/focus/i],describe(e){const t={name:"Focus"},r=br.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/swing/i],describe(e){const t={name:"Swing"},r=br.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/coast/i],describe(e){const t={name:"Opera Coast"},r=br.getFirstMatch(yr,e)||br.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe(e){const t={name:"Opera Touch"},r=br.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe(e){const t={name:"Yandex Browser"},r=br.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe(e){const t={name:"UC Browser"},r=br.getFirstMatch(yr,e)||br.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe(e){const t={name:"Maxthon"},r=br.getFirstMatch(yr,e)||br.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe(e){const t={name:"Epiphany"},r=br.getFirstMatch(yr,e)||br.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe(e){const t={name:"Puffin"},r=br.getFirstMatch(yr,e)||br.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe(e){const t={name:"Sleipnir"},r=br.getFirstMatch(yr,e)||br.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe(e){const t={name:"K-Meleon"},r=br.getFirstMatch(yr,e)||br.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe(e){const t={name:"WeChat"},r=br.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe(e){const t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=br.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe(e){const t={name:"Internet Explorer"},r=br.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\sedg\//i],describe(e){const t={name:"Microsoft Edge"},r=br.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe(e){const t={name:"Microsoft Edge"},r=br.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe(e){const t={name:"Vivaldi"},r=br.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe(e){const t={name:"SeaMonkey"},r=br.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe(e){const t={name:"Sailfish"},r=br.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe(e){const t={name:"Amazon Silk"},r=br.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe(e){const t={name:"PhantomJS"},r=br.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe(e){const t={name:"SlimerJS"},r=br.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(e){const t={name:"BlackBerry"},r=br.getFirstMatch(yr,e)||br.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe(e){const t={name:"WebOS Browser"},r=br.getFirstMatch(yr,e)||br.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe(e){const t={name:"Bada"},r=br.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe(e){const t={name:"Tizen"},r=br.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe(e){const t={name:"QupZilla"},r=br.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe(e){const t={name:"Firefox"},r=br.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe(e){const t={name:"Electron"},r=br.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe(e){const t={name:"Miui"},r=br.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe(e){const t={name:"Chromium"},r=br.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe(e){const t={name:"Chrome"},r=br.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe(e){const t={name:"Google Search"},r=br.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test(e){const t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe(e){const t={name:"Android Browser"},r=br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe(e){const t={name:"PlayStation 4"},r=br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe(e){const t={name:"Safari"},r=br.getFirstMatch(yr,e);return r&&(t.version=r),t}},{test:[/.*/i],describe(e){const t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:br.getFirstMatch(t,e),version:br.getSecondMatch(t,e)}}}],vr=[{test:[/Roku\/DVP/],describe(e){const t=br.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return{name:fr.Roku,version:t}}},{test:[/windows phone/i],describe(e){const t=br.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return{name:fr.WindowsPhone,version:t}}},{test:[/windows /i],describe(e){const t=br.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=br.getWindowsVersionName(t);return{name:fr.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe(e){const t={name:fr.iOS},r=br.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe(e){const t=br.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=br.getMacOSVersionName(t),s={name:fr.MacOS,version:t};return r&&(s.versionName=r),s}},{test:[/(ipod|iphone|ipad)/i],describe(e){const t=br.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return{name:fr.iOS,version:t}}},{test(e){const t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe(e){const t=br.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=br.getAndroidVersionName(t),s={name:fr.Android,version:t};return r&&(s.versionName=r),s}},{test:[/(web|hpw)[o0]s/i],describe(e){const t=br.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:fr.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(e){const t=br.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||br.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||br.getFirstMatch(/\bbb(\d+)/i,e);return{name:fr.BlackBerry,version:t}}},{test:[/bada/i],describe(e){const t=br.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return{name:fr.Bada,version:t}}},{test:[/tizen/i],describe(e){const t=br.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return{name:fr.Tizen,version:t}}},{test:[/linux/i],describe:()=>({name:fr.Linux})},{test:[/CrOS/],describe:()=>({name:fr.ChromeOS})},{test:[/PlayStation 4/],describe(e){const t=br.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return{name:fr.PlayStation4,version:t}}}],wr=[{test:[/googlebot/i],describe:()=>({type:mr.bot,vendor:"Google"})},{test:[/huawei/i],describe(e){const t=br.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:mr.mobile,vendor:"Huawei"};return t&&(r.model=t),r}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:()=>({type:mr.tablet,vendor:"Nexus"})},{test:[/ipad/i],describe:()=>({type:mr.tablet,vendor:"Apple",model:"iPad"})},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:()=>({type:mr.tablet,vendor:"Apple",model:"iPad"})},{test:[/kftt build/i],describe:()=>({type:mr.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"})},{test:[/silk/i],describe:()=>({type:mr.tablet,vendor:"Amazon"})},{test:[/tablet(?! pc)/i],describe:()=>({type:mr.tablet})},{test(e){const t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe(e){const t=br.getFirstMatch(/(ipod|iphone)/i,e);return{type:mr.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:()=>({type:mr.mobile,vendor:"Nexus"})},{test:[/Nokia/i],describe(e){const t=br.getFirstMatch(/Nokia\s+([0-9]+(\.[0-9]+)?)/i,e),r={type:mr.mobile,vendor:"Nokia"};return t&&(r.model=t),r}},{test:[/[^-]mobi/i],describe:()=>({type:mr.mobile})},{test:e=>"blackberry"===e.getBrowserName(!0),describe:()=>({type:mr.mobile,vendor:"BlackBerry"})},{test:e=>"bada"===e.getBrowserName(!0),describe:()=>({type:mr.mobile})},{test:e=>"windows phone"===e.getBrowserName(),describe:()=>({type:mr.mobile,vendor:"Microsoft"})},{test(e){const t=Number(String(e.getOSVersion()).split(".")[0]);return"android"===e.getOSName(!0)&&t>=3},describe:()=>({type:mr.tablet})},{test:e=>"android"===e.getOSName(!0),describe:()=>({type:mr.mobile})},{test:e=>"macos"===e.getOSName(!0),describe:()=>({type:mr.desktop,vendor:"Apple"})},{test:e=>"windows"===e.getOSName(!0),describe:()=>({type:mr.desktop})},{test:e=>"linux"===e.getOSName(!0),describe:()=>({type:mr.desktop})},{test:e=>"playstation 4"===e.getOSName(!0),describe:()=>({type:mr.tv})},{test:e=>"roku"===e.getOSName(!0),describe:()=>({type:mr.tv})}],Sr=[{test:e=>"microsoft edge"===e.getBrowserName(!0),describe(e){if(/\sedg\//i.test(e))return{name:gr.Blink};const t=br.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return{name:gr.EdgeHTML,version:t}}},{test:[/trident/i],describe(e){const t={name:gr.Trident},r=br.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:e=>e.test(/presto/i),describe(e){const t={name:gr.Presto},r=br.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test(e){const t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe(e){const t={name:gr.Gecko},r=br.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\/537\.36/i],describe:()=>({name:gr.Blink})},{test:[/(apple)?webkit/i],describe(e){const t={name:gr.WebKit},r=br.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}}];class Cr{constructor(e,t=!1){if(null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse()}getUA(){return this._ua}test(e){return e.test(this._ua)}parseBrowser(){this.parsedResult.browser={};const e=br.find(_r,e=>{if("function"==typeof e.test)return e.test(this);if(Array.isArray(e.test))return e.test.some(e=>this.test(e));throw new Error("Browser's test function is not valid")});return e&&(this.parsedResult.browser=e.describe(this.getUA())),this.parsedResult.browser}getBrowser(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()}getBrowserName(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||""}getBrowserVersion(){return this.getBrowser().version}getOS(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()}parseOS(){this.parsedResult.os={};const e=br.find(vr,e=>{if("function"==typeof e.test)return e.test(this);if(Array.isArray(e.test))return e.test.some(e=>this.test(e));throw new Error("Browser's test function is not valid")});return e&&(this.parsedResult.os=e.describe(this.getUA())),this.parsedResult.os}getOSName(e){const{name:t}=this.getOS();return e?String(t).toLowerCase()||"":t||""}getOSVersion(){return this.getOS().version}getPlatform(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()}getPlatformType(e=!1){const{type:t}=this.getPlatform();return e?String(t).toLowerCase()||"":t||""}parsePlatform(){this.parsedResult.platform={};const e=br.find(wr,e=>{if("function"==typeof e.test)return e.test(this);if(Array.isArray(e.test))return e.test.some(e=>this.test(e));throw new Error("Browser's test function is not valid")});return e&&(this.parsedResult.platform=e.describe(this.getUA())),this.parsedResult.platform}getEngine(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()}getEngineName(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||""}parseEngine(){this.parsedResult.engine={};const e=br.find(Sr,e=>{if("function"==typeof e.test)return e.test(this);if(Array.isArray(e.test))return e.test.some(e=>this.test(e));throw new Error("Browser's test function is not valid")});return e&&(this.parsedResult.engine=e.describe(this.getUA())),this.parsedResult.engine}parse(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this}getResult(){return br.assign({},this.parsedResult)}satisfies(e){const t={};let r=0;const s={};let i=0;if(Object.keys(e).forEach(a=>{const n=e[a];"string"==typeof n?(s[a]=n,i+=1):"object"==typeof n&&(t[a]=n,r+=1)}),r>0){const e=Object.keys(t),r=br.find(e,e=>this.isOS(e));if(r){const e=this.satisfies(t[r]);if(void 0!==e)return e}const s=br.find(e,e=>this.isPlatform(e));if(s){const e=this.satisfies(t[s]);if(void 0!==e)return e}}if(i>0){const e=Object.keys(s),t=br.find(e,e=>this.isBrowser(e,!0));if(void 0!==t)return this.compareVersion(s[t])}}isBrowser(e,t=!1){const r=this.getBrowserName().toLowerCase();let s=e.toLowerCase();const i=br.getBrowserTypeByAlias(s);return t&&i&&(s=i.toLowerCase()),s===r}compareVersion(e){let t=[0],r=e,s=!1;const i=this.getBrowserVersion();if("string"==typeof i)return">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(s=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(s=!0,r=e.substr(1)),t.indexOf(br.compareVersions(i,r,s))>-1}isOS(e){return this.getOSName(!0)===String(e).toLowerCase()}isPlatform(e){return this.getPlatformType(!0)===String(e).toLowerCase()}isEngine(e){return this.getEngineName(!0)===String(e).toLowerCase()}is(e,t=!1){return this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)}some(e=[]){return e.some(e=>this.is(e))}}
|
|
3
2
|
/*!
|
|
4
3
|
* Bowser - a browser detector
|
|
5
4
|
* https://github.com/lancedikson/bowser
|
|
6
5
|
* MIT License | (c) Dustin Diaz 2012-2015
|
|
7
6
|
* MIT License | (c) Denis Demchenko 2015-2019
|
|
8
|
-
*/class Bt{static getParser(e,t=!1){if("string"!=typeof e)throw new Error("UserAgent should be a string");return new Nt(e,t)}static parse(e){return new Nt(e).getResult()}static get BROWSER_MAP(){return Tt}static get ENGINE_MAP(){return It}static get OS_MAP(){return Et}static get PLATFORMS_MAP(){return Dt}}const Ft=t(p()),$t="VidScale-js";let Ut=class{constructor(e){e?(this._debug=Ft(`${$t}:${e}`),this._info=Ft(`${$t}:INFO:${e}`),this._warn=Ft(`${$t}:WARN:${e}`),this._error=Ft(`${$t}:ERROR:${e}`)):(this._debug=Ft($t),this._info=Ft(`${$t}:INFO`),this._warn=Ft(`${$t}:WARN`),this._error=Ft(`${$t}:ERROR`)),this._debug.log=void 0,this._info.log=void 0,this._warn.log=void 0,this._error.log=void 0}get debug(){return this._debug}get info(){return this._info}get warn(){return this._warn}get error(){return this._error}};var qt,Vt={exports:{}};var Wt=function(){if(qt)return Vt.exports;qt=1;var e,t="object"==typeof Reflect?Reflect:null,r=t&&"function"==typeof t.apply?t.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};e=t&&"function"==typeof t.ownKeys?t.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var s=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}Vt.exports=i,Vt.exports.once=function(e,t){return new Promise((function(r,s){function i(r){e.removeListener(t,a),s(r)}function a(){"function"==typeof e.removeListener&&e.removeListener("error",i),r([].slice.call(arguments))}m(e,t,a,{once:!0}),"error"!==t&&function(e,t,r){"function"==typeof e.on&&m(e,"error",t,r)}(e,i,{once:!0})}))},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var a=10;function n(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function o(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function c(e,t,r,s){var i,a,c;if(n(r),void 0===(a=e._events)?(a=e._events=Object.create(null),e._eventsCount=0):(void 0!==a.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),a=e._events),c=a[t]),void 0===c)c=a[t]=r,++e._eventsCount;else if("function"==typeof c?c=a[t]=s?[r,c]:[c,r]:s?c.unshift(r):c.push(r),(i=o(e))>0&&c.length>i&&!c.warned){c.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+c.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=e,d.type=t,d.count=c.length,console&&console.warn}return e}function d(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,r){var s={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=d.bind(s);return i.listener=r,s.wrapFn=i,i}function l(e,t,r){var s=e._events;if(void 0===s)return[];var i=s[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(i):u(i,i.length)}function h(e){var t=this._events;if(void 0!==t){var r=t[e];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function u(e,t){for(var r=new Array(t),s=0;s<t;++s)r[s]=e[s];return r}function m(e,t,r,s){if("function"==typeof e.on)s.once?e.once(t,r):e.on(t,r);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function i(a){s.once&&e.removeEventListener(t,i),r(a)}))}}return Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(e){if("number"!=typeof e||e<0||s(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");a=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||s(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return o(this)},i.prototype.emit=function(e){for(var t=[],s=1;s<arguments.length;s++)t.push(arguments[s]);var i="error"===e,a=this._events;if(void 0!==a)i=i&&void 0===a.error;else if(!i)return!1;if(i){var n;if(t.length>0&&(n=t[0]),n instanceof Error)throw n;var o=new Error("Unhandled error."+(n?" ("+n.message+")":""));throw o.context=n,o}var c=a[e];if(void 0===c)return!1;if("function"==typeof c)r(c,this,t);else{var d=c.length,p=u(c,d);for(s=0;s<d;++s)r(p[s],this,t)}return!0},i.prototype.addListener=function(e,t){return c(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return c(this,e,t,!0)},i.prototype.once=function(e,t){return n(t),this.on(e,p(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return n(t),this.prependListener(e,p(this,e,t)),this},i.prototype.removeListener=function(e,t){var r,s,i,a,o;if(n(t),void 0===(s=this._events))return this;if(void 0===(r=s[e]))return this;if(r===t||r.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete s[e],s.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(i=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){o=r[a].listener,i=a;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,i),1===r.length&&(s[e]=r[0]),void 0!==s.removeListener&&this.emit("removeListener",e,o||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,r,s;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0===arguments.length){var i,a=Object.keys(r);for(s=0;s<a.length;++s)"removeListener"!==(i=a[s])&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(s=t.length-1;s>=0;s--)this.removeListener(e,t[s]);return this},i.prototype.listeners=function(e){return l(this,e,!0)},i.prototype.rawListeners=function(e){return l(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):h.call(e,t)},i.prototype.listenerCount=h,i.prototype.eventNames=function(){return this._eventsCount>0?e(this._events):[]},Vt.exports}();class Kt extends Wt.EventEmitter{constructor(e){super(),this.setMaxListeners(1/0),this._logger=e||new Ut("EnhancedEventEmitter")}safeEmit(e,...t){try{this.emit(e,...t)}catch(r){this._logger.error("safeEmit() | event listener threw an error [event:%s]:%o",e,r)}}async safeEmitAsPromise(e,...t){return new Promise(((r,s)=>{this.safeEmit(e,...t,r,s)}))}}async function Ht(e){return new Promise((t=>setTimeout((()=>t()),e)))}const Gt=new Ut("Message");class zt{static parse(e){let t;const r={};try{t=JSON.parse(e)}catch(s){return void Gt.error("parse() | invalid JSON: %s",s)}if("object"==typeof t&&!Array.isArray(t)){if(t.request){if(r.request=!0,"string"!=typeof t.method)return void Gt.error("parse() | missing/invalid method field");if("number"!=typeof t.id)return void Gt.error("parse() | missing/invalid id field");r.id=t.id,r.method=t.method,r.data=t.data||{}}else if(t.response){if(r.response=!0,"number"!=typeof t.id)return void Gt.error("parse() | missing/invalid id field");r.id=t.id,t.ok?(r.ok=!0,r.data=t.data||{}):(r.ok=!1,r.errorCode=t.errorCode,r.errorReason=t.errorReason)}else{if(!t.notification)return void Gt.error("parse() | missing request/response field");if(r.notification=!0,"string"!=typeof t.method)return void Gt.error("parse() | missing/invalid method field");r.method=t.method,r.data=t.data||{}}return r}Gt.error("parse() | not an object")}static createRequest(e,t){return{request:!0,id:Math.round(1e7*Math.random()),method:e,data:t||{}}}static createSuccessResponse(e,t){return{response:!0,id:e.id,ok:!0,data:t||{}}}static createErrorResponse(e,t,r){return{response:!0,id:e.id,ok:!1,errorCode:t,errorReason:r}}static createNotification(e,t){return{notification:!0,method:e,data:t||{}}}}const Jt=new Ut("Peer");class Qt extends Kt{constructor(e){super(Jt),Jt.debug("constructor()"),this._closed=!1,this._transport=e,this._connected=!1,this._data={},this._sents=new Map,this._handleTransport()}get closed(){return this._closed}get connected(){return this._connected}get data(){return this._data}set data(e){throw new Error("cannot override data object")}close(){if(!this._closed){Jt.debug("close()"),this._closed=!0,this._connected=!1,this._transport.close();for(const e of this._sents.values())e.close();this.safeEmit("close")}}async request(e,t=void 0){const r=zt.createRequest(e,t);return this._logger.debug("request() [method:%s, id:%s]",e,r.id),await this._transport.send(r),new Promise(((e,t)=>{const s=1500*(15+.1*this._sents.size),i={id:r.id,method:r.method,resolve:t=>{this._sents.delete(r.id)&&(clearTimeout(i.timer),e(t))},reject:e=>{this._sents.delete(r.id)&&(clearTimeout(i.timer),t(e))},timer:setTimeout((()=>{this._sents.delete(r.id)&&t(new Error("request timeout"))}),s),close:()=>{clearTimeout(i.timer),t(new Error("peer closed"))}};this._sents.set(r.id,i)}))}async notify(e,t=void 0){const r=zt.createNotification(e,t);this._logger.debug("notify() [method:%s]",e),await this._transport.send(r)}_handleTransport(){if(this._transport.closed)return this._closed=!0,void setTimeout((()=>{this._closed||(this._connected=!1,this.safeEmit("close"))}));this._transport.on("open",(()=>{this._closed||(Jt.debug('emit "open"'),this._connected=!0,this.safeEmit("open"))})),this._transport.on("disconnected",(()=>{this._closed||(Jt.debug('emit "disconnected"'),this._connected=!1,this.safeEmit("disconnected"))})),this._transport.on("failed",(e=>{this._closed||(Jt.debug('emit "failed" [currentAttempt:%s]',e),this._connected=!1,this.safeEmit("failed",e))})),this._transport.on("close",(()=>{this._closed||(this._closed=!0,Jt.debug('emit "close"'),this._connected=!1,this.safeEmit("close"))})),this._transport.on("message",(e=>{e.request?this._handleRequest(e):e.response?this._handleResponse(e):e.notification&&this._handleNotification(e)}))}_handleRequest(e){try{this.emit("request",e,(t=>{const r=zt.createSuccessResponse(e,t);this._transport.send(r).catch((()=>{}))}),((t,r)=>{t instanceof Error?(r=t.message,t=500):"number"==typeof t&&r instanceof Error&&(r=r.message);const s=zt.createErrorResponse(e,t,r);this._transport.send(s).catch((()=>{}))}))}catch(t){const r=zt.createErrorResponse(e,500,String(t));this._transport.send(r).catch((()=>{}))}}_handleResponse(e){const t=this._sents.get(e.id);if(t)if(e.ok)t.resolve(e.data);else{const r=new Error(e.errorReason);r.code=e.errorCode,t.reject(r)}else Jt.error("received response does not match any sent request [id:%s]",e.id)}_handleNotification(e){this.safeEmit("notification",e)}}const Xt=Object.create(null);Xt.open="0",Xt.close="1",Xt.ping="2",Xt.pong="3",Xt.message="4",Xt.upgrade="5",Xt.noop="6";const Yt=Object.create(null);Object.keys(Xt).forEach((e=>{Yt[Xt[e]]=e}));const Zt={type:"error",data:"parser error"},er="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),tr="function"==typeof ArrayBuffer,rr=e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,sr=({type:e,data:t},r,s)=>er&&t instanceof Blob?r?s(t):ir(t,s):tr&&(t instanceof ArrayBuffer||rr(t))?r?s(t):ir(new Blob([t]),s):s(Xt[e]+(t||"")),ir=(e,t)=>{const r=new FileReader;return r.onload=function(){const e=r.result.split(",")[1];t("b"+(e||""))},r.readAsDataURL(e)};function ar(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let nr;const or="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",cr="undefined"==typeof Uint8Array?[]:new Uint8Array(256);for(let Hn=0;Hn<64;Hn++)cr[or.charCodeAt(Hn)]=Hn;const dr="function"==typeof ArrayBuffer,pr=(e,t)=>{if("string"!=typeof e)return{type:"message",data:hr(e,t)};const r=e.charAt(0);if("b"===r)return{type:"message",data:lr(e.substring(1),t)};return Yt[r]?e.length>1?{type:Yt[r],data:e.substring(1)}:{type:Yt[r]}:Zt},lr=(e,t)=>{if(dr){const r=(e=>{let t,r,s,i,a,n=.75*e.length,o=e.length,c=0;"="===e[e.length-1]&&(n--,"="===e[e.length-2]&&n--);const d=new ArrayBuffer(n),p=new Uint8Array(d);for(t=0;t<o;t+=4)r=cr[e.charCodeAt(t)],s=cr[e.charCodeAt(t+1)],i=cr[e.charCodeAt(t+2)],a=cr[e.charCodeAt(t+3)],p[c++]=r<<2|s>>4,p[c++]=(15&s)<<4|i>>2,p[c++]=(3&i)<<6|63&a;return d})(e);return hr(r,t)}return{base64:!0,data:e}},hr=(e,t)=>"blob"===t?e instanceof Blob?e:new Blob([e]):e instanceof ArrayBuffer?e:e.buffer,ur=String.fromCharCode(30);function mr(){return new TransformStream({transform(e,t){!function(e,t){er&&e.data instanceof Blob?e.data.arrayBuffer().then(ar).then(t):tr&&(e.data instanceof ArrayBuffer||rr(e.data))?t(ar(e.data)):sr(e,!1,(e=>{nr||(nr=new TextEncoder),t(nr.encode(e))}))}(e,(r=>{const s=r.length;let i;if(s<126)i=new Uint8Array(1),new DataView(i.buffer).setUint8(0,s);else if(s<65536){i=new Uint8Array(3);const e=new DataView(i.buffer);e.setUint8(0,126),e.setUint16(1,s)}else{i=new Uint8Array(9);const e=new DataView(i.buffer);e.setUint8(0,127),e.setBigUint64(1,BigInt(s))}e.data&&"string"!=typeof e.data&&(i[0]|=128),t.enqueue(i),t.enqueue(r)}))}})}let fr;function gr(e){return e.reduce(((e,t)=>e+t.length),0)}function br(e,t){if(e[0].length===t)return e.shift();const r=new Uint8Array(t);let s=0;for(let i=0;i<t;i++)r[i]=e[0][s++],s===e[0].length&&(e.shift(),s=0);return e.length&&s<e[0].length&&(e[0]=e[0].slice(s)),r}function _r(e){if(e)return function(e){for(var t in _r.prototype)e[t]=_r.prototype[t];return e}(e)}_r.prototype.on=_r.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},_r.prototype.once=function(e,t){function r(){this.off(e,r),t.apply(this,arguments)}return r.fn=t,this.on(e,r),this},_r.prototype.off=_r.prototype.removeListener=_r.prototype.removeAllListeners=_r.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r,s=this._callbacks["$"+e];if(!s)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var i=0;i<s.length;i++)if((r=s[i])===t||r.fn===t){s.splice(i,1);break}return 0===s.length&&delete this._callbacks["$"+e],this},_r.prototype.emit=function(e){this._callbacks=this._callbacks||{};for(var t=new Array(arguments.length-1),r=this._callbacks["$"+e],s=1;s<arguments.length;s++)t[s-1]=arguments[s];if(r){s=0;for(var i=(r=r.slice(0)).length;s<i;++s)r[s].apply(this,t)}return this},_r.prototype.emitReserved=_r.prototype.emit,_r.prototype.listeners=function(e){return this._callbacks=this._callbacks||{},this._callbacks["$"+e]||[]},_r.prototype.hasListeners=function(e){return!!this.listeners(e).length};const yr="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")();function wr(e,...t){return t.reduce(((t,r)=>(e.hasOwnProperty(r)&&(t[r]=e[r]),t)),{})}const vr=yr.setTimeout,Sr=yr.clearTimeout;function Rr(e,t){t.useNativeTimers?(e.setTimeoutFn=vr.bind(yr),e.clearTimeoutFn=Sr.bind(yr)):(e.setTimeoutFn=yr.setTimeout.bind(yr),e.clearTimeoutFn=yr.clearTimeout.bind(yr))}class Pr extends Error{constructor(e,t,r){super(e),this.description=t,this.context=r,this.type="TransportError"}}class Cr extends _r{constructor(e){super(),this.writable=!1,Rr(this,e),this.opts=e,this.query=e.query,this.socket=e.socket}onError(e,t,r){return super.emitReserved("error",new Pr(e,t,r)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this}send(e){"open"===this.readyState&&this.write(e)}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(e){const t=pr(e,this.socket.binaryType);this.onPacket(t)}onPacket(e){super.emitReserved("packet",e)}onClose(e){this.readyState="closed",super.emitReserved("close",e)}pause(e){}createUri(e,t={}){return e+"://"+this._hostname()+this._port()+this.opts.path+this._query(t)}_hostname(){const e=this.opts.hostname;return-1===e.indexOf(":")?e:"["+e+"]"}_port(){return this.opts.port&&(this.opts.secure&&Number(443!==this.opts.port)||!this.opts.secure&&80!==Number(this.opts.port))?":"+this.opts.port:""}_query(e){const t=function(e){let t="";for(let r in e)e.hasOwnProperty(r)&&(t.length&&(t+="&"),t+=encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t}(e);return t.length?"?"+t:""}}const kr="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),Tr=64,Dr={};let Er,Ir=0,xr=0;function Mr(e){let t="";do{t=kr[e%Tr]+t,e=Math.floor(e/Tr)}while(e>0);return t}function Or(){const e=Mr(+new Date);return e!==Er?(Ir=0,Er=e):e+"."+Mr(Ir++)}for(;xr<Tr;xr++)Dr[kr[xr]]=xr;let Lr=!1;try{Lr="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(Kn){}const Ar=Lr;function jr(e){const t=e.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!t||Ar))return new XMLHttpRequest}catch(r){}if(!t)try{return new(yr[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(r){}}function Nr(){}const Br=null!=new jr({xdomain:!1}).responseType;class Fr extends _r{constructor(e,t){super(),Rr(this,t),this.opts=t,this.method=t.method||"GET",this.uri=e,this.data=void 0!==t.data?t.data:null,this.create()}create(){var e;const t=wr(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this.opts.xd;const r=this.xhr=new jr(t);try{r.open(this.method,this.uri,!0);try{if(this.opts.extraHeaders){r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0);for(let e in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(e)&&r.setRequestHeader(e,this.opts.extraHeaders[e])}}catch(s){}if("POST"===this.method)try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(s){}try{r.setRequestHeader("Accept","*/*")}catch(s){}null===(e=this.opts.cookieJar)||void 0===e||e.addCookies(r),"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),r.onreadystatechange=()=>{var e;3===r.readyState&&(null===(e=this.opts.cookieJar)||void 0===e||e.parseCookies(r)),4===r.readyState&&(200===r.status||1223===r.status?this.onLoad():this.setTimeoutFn((()=>{this.onError("number"==typeof r.status?r.status:0)}),0))},r.send(this.data)}catch(s){return void this.setTimeoutFn((()=>{this.onError(s)}),0)}"undefined"!=typeof document&&(this.index=Fr.requestsCount++,Fr.requests[this.index]=this)}onError(e){this.emitReserved("error",e,this.xhr),this.cleanup(!0)}cleanup(e){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=Nr,e)try{this.xhr.abort()}catch(t){}"undefined"!=typeof document&&delete Fr.requests[this.index],this.xhr=null}}onLoad(){const e=this.xhr.responseText;null!==e&&(this.emitReserved("data",e),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}}if(Fr.requestsCount=0,Fr.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",$r);else if("function"==typeof addEventListener){addEventListener("onpagehide"in yr?"pagehide":"unload",$r,!1)}function $r(){for(let e in Fr.requests)Fr.requests.hasOwnProperty(e)&&Fr.requests[e].abort()}const Ur="function"==typeof Promise&&"function"==typeof Promise.resolve?e=>Promise.resolve().then(e):(e,t)=>t(e,0),qr=yr.WebSocket||yr.MozWebSocket,Vr="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();const Wr={websocket:class extends Cr{constructor(e){super(e),this.supportsBinary=!e.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const e=this.uri(),t=this.opts.protocols,r=Vr?{}:wr(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=Vr?new qr(e,t,r):t?new qr(e,t):new qr(e)}catch(Kn){return this.emitReserved("error",Kn)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let t=0;t<e.length;t++){const r=e[t],s=t===e.length-1;sr(r,this.supportsBinary,(e=>{try{this.ws.send(e)}catch(t){}s&&Ur((()=>{this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){void 0!==this.ws&&(this.ws.close(),this.ws=null)}uri(){const e=this.opts.secure?"wss":"ws",t=this.query||{};return this.opts.timestampRequests&&(t[this.opts.timestampParam]=Or()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}check(){return!!qr}},webtransport:class extends Cr{get name(){return"webtransport"}doOpen(){"function"==typeof WebTransport&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then((()=>{this.onClose()})).catch((e=>{this.onError("webtransport error",e)})),this.transport.ready.then((()=>{this.transport.createBidirectionalStream().then((e=>{const t=function(e,t){fr||(fr=new TextDecoder);const r=[];let s=0,i=-1,a=!1;return new TransformStream({transform(n,o){for(r.push(n);;){if(0===s){if(gr(r)<1)break;const e=br(r,1);a=!(128&~e[0]),i=127&e[0],s=i<126?3:126===i?1:2}else if(1===s){if(gr(r)<2)break;const e=br(r,2);i=new DataView(e.buffer,e.byteOffset,e.length).getUint16(0),s=3}else if(2===s){if(gr(r)<8)break;const e=br(r,8),t=new DataView(e.buffer,e.byteOffset,e.length),a=t.getUint32(0);if(a>Math.pow(2,21)-1){o.enqueue(Zt);break}i=a*Math.pow(2,32)+t.getUint32(4),s=3}else{if(gr(r)<i)break;const e=br(r,i);o.enqueue(pr(a?e:fr.decode(e),t)),s=0}if(0===i||i>e){o.enqueue(Zt);break}}}})}(Number.MAX_SAFE_INTEGER,this.socket.binaryType),r=e.readable.pipeThrough(t).getReader(),s=mr();s.readable.pipeTo(e.writable),this.writer=s.writable.getWriter();const i=()=>{r.read().then((({done:e,value:t})=>{e||(this.onPacket(t),i())})).catch((e=>{}))};i();const a={type:"open"};this.query.sid&&(a.data=`{"sid":"${this.query.sid}"}`),this.writer.write(a).then((()=>this.onOpen()))}))})))}write(e){this.writable=!1;for(let t=0;t<e.length;t++){const r=e[t],s=t===e.length-1;this.writer.write(r).then((()=>{s&&Ur((()=>{this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){var e;null===(e=this.transport)||void 0===e||e.close()}},polling:class extends Cr{constructor(e){if(super(e),this.polling=!1,"undefined"!=typeof location){const t="https:"===location.protocol;let r=location.port;r||(r=t?"443":"80"),this.xd="undefined"!=typeof location&&e.hostname!==location.hostname||r!==e.port}const t=e&&e.forceBase64;this.supportsBinary=Br&&!t,this.opts.withCredentials&&(this.cookieJar=void 0)}get name(){return"polling"}doOpen(){this.poll()}pause(e){this.readyState="pausing";const t=()=>{this.readyState="paused",e()};if(this.polling||!this.writable){let e=0;this.polling&&(e++,this.once("pollComplete",(function(){--e||t()}))),this.writable||(e++,this.once("drain",(function(){--e||t()})))}else t()}poll(){this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){((e,t)=>{const r=e.split(ur),s=[];for(let i=0;i<r.length;i++){const e=pr(r[i],t);if(s.push(e),"error"===e.type)break}return s})(e,this.socket.binaryType).forEach((e=>{if("opening"===this.readyState&&"open"===e.type&&this.onOpen(),"close"===e.type)return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(e)})),"closed"!==this.readyState&&(this.polling=!1,this.emitReserved("pollComplete"),"open"===this.readyState&&this.poll())}doClose(){const e=()=>{this.write([{type:"close"}])};"open"===this.readyState?e():this.once("open",e)}write(e){this.writable=!1,((e,t)=>{const r=e.length,s=new Array(r);let i=0;e.forEach(((e,a)=>{sr(e,!1,(e=>{s[a]=e,++i===r&&t(s.join(ur))}))}))})(e,(e=>{this.doWrite(e,(()=>{this.writable=!0,this.emitReserved("drain")}))}))}uri(){const e=this.opts.secure?"https":"http",t=this.query||{};return!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=Or()),this.supportsBinary||t.sid||(t.b64=1),this.createUri(e,t)}request(e={}){return Object.assign(e,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new Fr(this.uri(),e)}doWrite(e,t){const r=this.request({method:"POST",data:e});r.on("success",t),r.on("error",((e,t)=>{this.onError("xhr post error",e,t)}))}doPoll(){const e=this.request();e.on("data",this.onData.bind(this)),e.on("error",((e,t)=>{this.onError("xhr poll error",e,t)})),this.pollXhr=e}}},Kr=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,Hr=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function Gr(e){if(e.length>2e3)throw"URI too long";const t=e,r=e.indexOf("["),s=e.indexOf("]");-1!=r&&-1!=s&&(e=e.substring(0,r)+e.substring(r,s).replace(/:/g,";")+e.substring(s,e.length));let i=Kr.exec(e||""),a={},n=14;for(;n--;)a[Hr[n]]=i[n]||"";return-1!=r&&-1!=s&&(a.source=t,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a.pathNames=function(e,t){const r=/\/{2,9}/g,s=t.replace(r,"/").split("/");"/"!=t.slice(0,1)&&0!==t.length||s.splice(0,1);"/"==t.slice(-1)&&s.splice(s.length-1,1);return s}(0,a.path),a.queryKey=function(e,t){const r={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(e,t,s){t&&(r[t]=s)})),r}(0,a.query),a}let zr=class e extends _r{constructor(e,t={}){super(),this.binaryType="arraybuffer",this.writeBuffer=[],e&&"object"==typeof e&&(t=e,e=null),e?(e=Gr(e),t.hostname=e.host,t.secure="https"===e.protocol||"wss"===e.protocol,t.port=e.port,e.query&&(t.query=e.query)):t.host&&(t.hostname=Gr(t.host).host),Rr(this,t),this.secure=null!=t.secure?t.secure:"undefined"!=typeof location&&"https:"===location.protocol,t.hostname&&!t.port&&(t.port=this.secure?"443":"80"),this.hostname=t.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=t.port||("undefined"!=typeof location&&location.port?location.port:this.secure?"443":"80"),this.transports=t.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},t),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),"string"==typeof this.opts.query&&(this.opts.query=function(e){let t={},r=e.split("&");for(let s=0,i=r.length;s<i;s++){let e=r[s].split("=");t[decodeURIComponent(e[0])]=decodeURIComponent(e[1])}return t}(this.opts.query)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingTimeoutTimer=null,"function"==typeof addEventListener&&(this.opts.closeOnBeforeunload&&(this.beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),"localhost"!==this.hostname&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(e){const t=Object.assign({},this.opts.query);t.EIO=4,t.transport=e,this.id&&(t.sid=this.id);const r=Object.assign({},this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return new Wr[e](r)}open(){let t;if(this.opts.rememberUpgrade&&e.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))t="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((()=>{this.emitReserved("error","No transports available")}),0);t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(r){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)}setTransport(e){this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(e=>this.onClose("transport close",e)))}probe(t){let r=this.createTransport(t),s=!1;e.priorWebsocketSuccess=!1;const i=()=>{s||(r.send([{type:"ping",data:"probe"}]),r.once("packet",(t=>{if(!s)if("pong"===t.type&&"probe"===t.data){if(this.upgrading=!0,this.emitReserved("upgrading",r),!r)return;e.priorWebsocketSuccess="websocket"===r.name,this.transport.pause((()=>{s||"closed"!==this.readyState&&(p(),this.setTransport(r),r.send([{type:"upgrade"}]),this.emitReserved("upgrade",r),r=null,this.upgrading=!1,this.flush())}))}else{const e=new Error("probe error");e.transport=r.name,this.emitReserved("upgradeError",e)}})))};function a(){s||(s=!0,p(),r.close(),r=null)}const n=e=>{const t=new Error("probe error: "+e);t.transport=r.name,a(),this.emitReserved("upgradeError",t)};function o(){n("transport closed")}function c(){n("socket closed")}function d(e){r&&e.name!==r.name&&a()}const p=()=>{r.removeListener("open",i),r.removeListener("error",n),r.removeListener("close",o),this.off("close",c),this.off("upgrading",d)};r.once("open",i),r.once("error",n),r.once("close",o),this.once("close",c),this.once("upgrading",d),-1!==this.upgrades.indexOf("webtransport")&&"webtransport"!==t?this.setTimeoutFn((()=>{s||r.open()}),200):r.open()}onOpen(){if(this.readyState="open",e.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade){let e=0;const t=this.upgrades.length;for(;e<t;e++)this.probe(this.upgrades[e])}}onPacket(e){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(this.emitReserved("packet",e),this.emitReserved("heartbeat"),this.resetPingTimeout(),e.type){case"open":this.onHandshake(JSON.parse(e.data));break;case"ping":this.sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong");break;case"error":const t=new Error("server error");t.code=e.data,this.onError(t);break;case"message":this.emitReserved("data",e.data),this.emitReserved("message",e.data)}}onHandshake(e){this.emitReserved("handshake",e),this.id=e.sid,this.transport.query.sid=e.sid,this.upgrades=this.filterUpgrades(e.upgrades),this.pingInterval=e.pingInterval,this.pingTimeout=e.pingTimeout,this.maxPayload=e.maxPayload,this.onOpen(),"closed"!==this.readyState&&this.resetPingTimeout()}resetPingTimeout(){this.clearTimeoutFn(this.pingTimeoutTimer),this.pingTimeoutTimer=this.setTimeoutFn((()=>{this.onClose("ping timeout")}),this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emitReserved("drain"):this.flush()}flush(){if("closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const e=this.getWritablePackets();this.transport.send(e),this.prevBufferLen=e.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&"polling"===this.transport.name&&this.writeBuffer.length>1))return this.writeBuffer;let e=1;for(let r=0;r<this.writeBuffer.length;r++){const s=this.writeBuffer[r].data;if(s&&(e+="string"==typeof(t=s)?function(e){let t=0,r=0;for(let s=0,i=e.length;s<i;s++)t=e.charCodeAt(s),t<128?r+=1:t<2048?r+=2:t<55296||t>=57344?r+=3:(s++,r+=4);return r}(t):Math.ceil(1.33*(t.byteLength||t.size))),r>0&&e>this.maxPayload)return this.writeBuffer.slice(0,r);e+=2}var t;return this.writeBuffer}write(e,t,r){return this.sendPacket("message",e,t,r),this}send(e,t,r){return this.sendPacket("message",e,t,r),this}sendPacket(e,t,r,s){if("function"==typeof t&&(s=t,t=void 0),"function"==typeof r&&(s=r,r=null),"closing"===this.readyState||"closed"===this.readyState)return;(r=r||{}).compress=!1!==r.compress;const i={type:e,data:t,options:r};this.emitReserved("packetCreate",i),this.writeBuffer.push(i),s&&this.once("flush",s),this.flush()}close(){const e=()=>{this.onClose("forced close"),this.transport.close()},t=()=>{this.off("upgrade",t),this.off("upgradeError",t),e()},r=()=>{this.once("upgrade",t),this.once("upgradeError",t)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(()=>{this.upgrading?r():e()})):this.upgrading?r():e()),this}onError(t){e.priorWebsocketSuccess=!1,this.emitReserved("error",t),this.onClose("transport error",t)}onClose(e,t){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(e){const t=[];let r=0;const s=e.length;for(;r<s;r++)~this.transports.indexOf(e[r])&&t.push(e[r]);return t}};zr.protocol=4;const Jr="function"==typeof ArrayBuffer,Qr=e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer,Xr=Object.prototype.toString,Yr="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Xr.call(Blob),Zr="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===Xr.call(File);function es(e){return Jr&&(e instanceof ArrayBuffer||Qr(e))||Yr&&e instanceof Blob||Zr&&e instanceof File}function ts(e,t){if(!e||"object"!=typeof e)return!1;if(Array.isArray(e)){for(let t=0,r=e.length;t<r;t++)if(ts(e[t]))return!0;return!1}if(es(e))return!0;if(e.toJSON&&"function"==typeof e.toJSON&&1===arguments.length)return ts(e.toJSON(),!0);for(const r in e)if(Object.prototype.hasOwnProperty.call(e,r)&&ts(e[r]))return!0;return!1}function rs(e){const t=[],r=e.data,s=e;return s.data=ss(r,t),s.attachments=t.length,{packet:s,buffers:t}}function ss(e,t){if(!e)return e;if(es(e)){const r={_placeholder:!0,num:t.length};return t.push(e),r}if(Array.isArray(e)){const r=new Array(e.length);for(let s=0;s<e.length;s++)r[s]=ss(e[s],t);return r}if("object"==typeof e&&!(e instanceof Date)){const r={};for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&(r[s]=ss(e[s],t));return r}return e}function is(e,t){return e.data=as(e.data,t),delete e.attachments,e}function as(e,t){if(!e)return e;if(e&&!0===e._placeholder){if("number"==typeof e.num&&e.num>=0&&e.num<t.length)return t[e.num];throw new Error("illegal attachments")}if(Array.isArray(e))for(let r=0;r<e.length;r++)e[r]=as(e[r],t);else if("object"==typeof e)for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(e[r]=as(e[r],t));return e}const ns=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];var os,cs;(cs=os||(os={}))[cs.CONNECT=0]="CONNECT",cs[cs.DISCONNECT=1]="DISCONNECT",cs[cs.EVENT=2]="EVENT",cs[cs.ACK=3]="ACK",cs[cs.CONNECT_ERROR=4]="CONNECT_ERROR",cs[cs.BINARY_EVENT=5]="BINARY_EVENT",cs[cs.BINARY_ACK=6]="BINARY_ACK";function ds(e){return"[object Object]"===Object.prototype.toString.call(e)}class ps extends _r{constructor(e){super(),this.reviver=e}add(e){let t;if("string"==typeof e){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");t=this.decodeString(e);const r=t.type===os.BINARY_EVENT;r||t.type===os.BINARY_ACK?(t.type=r?os.EVENT:os.ACK,this.reconstructor=new ls(t),0===t.attachments&&super.emitReserved("decoded",t)):super.emitReserved("decoded",t)}else{if(!es(e)&&!e.base64)throw new Error("Unknown type: "+e);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");t=this.reconstructor.takeBinaryData(e),t&&(this.reconstructor=null,super.emitReserved("decoded",t))}}decodeString(e){let t=0;const r={type:Number(e.charAt(0))};if(void 0===os[r.type])throw new Error("unknown packet type "+r.type);if(r.type===os.BINARY_EVENT||r.type===os.BINARY_ACK){const s=t+1;for(;"-"!==e.charAt(++t)&&t!=e.length;);const i=e.substring(s,t);if(i!=Number(i)||"-"!==e.charAt(t))throw new Error("Illegal attachments");r.attachments=Number(i)}if("/"===e.charAt(t+1)){const s=t+1;for(;++t;){if(","===e.charAt(t))break;if(t===e.length)break}r.nsp=e.substring(s,t)}else r.nsp="/";const s=e.charAt(t+1);if(""!==s&&Number(s)==s){const s=t+1;for(;++t;){const r=e.charAt(t);if(null==r||Number(r)!=r){--t;break}if(t===e.length)break}r.id=Number(e.substring(s,t+1))}if(e.charAt(++t)){const s=this.tryParse(e.substr(t));if(!ps.isPayloadValid(r.type,s))throw new Error("invalid payload");r.data=s}return r}tryParse(e){try{return JSON.parse(e,this.reviver)}catch(t){return!1}}static isPayloadValid(e,t){switch(e){case os.CONNECT:return ds(t);case os.DISCONNECT:return void 0===t;case os.CONNECT_ERROR:return"string"==typeof t||ds(t);case os.EVENT:case os.BINARY_EVENT:return Array.isArray(t)&&("number"==typeof t[0]||"string"==typeof t[0]&&-1===ns.indexOf(t[0]));case os.ACK:case os.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}class ls{constructor(e){this.packet=e,this.buffers=[],this.reconPack=e}takeBinaryData(e){if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){const e=is(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}const hs=Object.freeze(Object.defineProperty({__proto__:null,Decoder:ps,Encoder:class{constructor(e){this.replacer=e}encode(e){return e.type!==os.EVENT&&e.type!==os.ACK||!ts(e)?[this.encodeAsString(e)]:this.encodeAsBinary({type:e.type===os.EVENT?os.BINARY_EVENT:os.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id})}encodeAsString(e){let t=""+e.type;return e.type!==os.BINARY_EVENT&&e.type!==os.BINARY_ACK||(t+=e.attachments+"-"),e.nsp&&"/"!==e.nsp&&(t+=e.nsp+","),null!=e.id&&(t+=e.id),null!=e.data&&(t+=JSON.stringify(e.data,this.replacer)),t}encodeAsBinary(e){const t=rs(e),r=this.encodeAsString(t.packet),s=t.buffers;return s.unshift(r),s}},get PacketType(){return os},protocol:5},Symbol.toStringTag,{value:"Module"}));function us(e,t,r){return e.on(t,r),function(){e.off(t,r)}}const ms=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class fs extends _r{constructor(e,t,r){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,r&&r.auth&&(this.auth=r.auth),this._opts=Object.assign({},r),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const e=this.io;this.subs=[us(e,"open",this.onopen.bind(this)),us(e,"packet",this.onpacket.bind(this)),us(e,"error",this.onerror.bind(this)),us(e,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}open(){return this.connect()}send(...e){return e.unshift("message"),this.emit.apply(this,e),this}emit(e,...t){if(ms.hasOwnProperty(e))throw new Error('"'+e.toString()+'" is a reserved event name');if(t.unshift(e),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(t),this;const r={type:os.EVENT,data:t,options:{}};if(r.options.compress=!1!==this.flags.compress,"function"==typeof t[t.length-1]){const e=this.ids++,s=t.pop();this._registerAckCallback(e,s),r.id=e}const s=this.io.engine&&this.io.engine.transport&&this.io.engine.transport.writable;return this.flags.volatile&&(!s||!this.connected)||(this.connected?(this.notifyOutgoingListeners(r),this.packet(r)):this.sendBuffer.push(r)),this.flags={},this}_registerAckCallback(e,t){var r;const s=null!==(r=this.flags.timeout)&&void 0!==r?r:this._opts.ackTimeout;if(void 0===s)return void(this.acks[e]=t);const i=this.io.setTimeoutFn((()=>{delete this.acks[e];for(let t=0;t<this.sendBuffer.length;t++)this.sendBuffer[t].id===e&&this.sendBuffer.splice(t,1);t.call(this,new Error("operation has timed out"))}),s),a=(...e)=>{this.io.clearTimeoutFn(i),t.apply(this,e)};a.withError=!0,this.acks[e]=a}emitWithAck(e,...t){return new Promise(((r,s)=>{const i=(e,t)=>e?s(e):r(t);i.withError=!0,t.push(i),this.emit(e,...t)}))}_addToQueue(e){let t;"function"==typeof e[e.length-1]&&(t=e.pop());const r={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push(((e,...s)=>{if(r!==this._queue[0])return;return null!==e?r.tryCount>this._opts.retries&&(this._queue.shift(),t&&t(e)):(this._queue.shift(),t&&t(null,...s)),r.pending=!1,this._drainQueue()})),this._queue.push(r),this._drainQueue()}_drainQueue(e=!1){if(!this.connected||0===this._queue.length)return;const t=this._queue[0];t.pending&&!e||(t.pending=!0,t.tryCount++,this.flags=t.flags,this.emit.apply(this,t.args))}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){"function"==typeof this.auth?this.auth((e=>{this._sendConnectPacket(e)})):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:os.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,t){this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach((e=>{if(!this.sendBuffer.some((t=>String(t.id)===e))){const t=this.acks[e];delete this.acks[e],t.withError&&t.call(this,new Error("socket has been disconnected"))}}))}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case os.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case os.EVENT:case os.BINARY_EVENT:this.onevent(e);break;case os.ACK:case os.BINARY_ACK:this.onack(e);break;case os.DISCONNECT:this.ondisconnect();break;case os.CONNECT_ERROR:this.destroy();const t=new Error(e.data.message);t.data=e.data.data,this.emitReserved("connect_error",t)}}onevent(e){const t=e.data||[];null!=e.id&&t.push(this.ack(e.id)),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){const t=this._anyListeners.slice();for(const r of t)r.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&"string"==typeof e[e.length-1]&&(this._lastOffset=e[e.length-1])}ack(e){const t=this;let r=!1;return function(...s){r||(r=!0,t.packet({type:os.ACK,id:e,data:s}))}}onack(e){const t=this.acks[e.id];"function"==typeof t&&(delete this.acks[e.id],t.withError&&e.data.unshift(null),t.apply(this,e.data))}onconnect(e,t){this.id=e,this.recovered=t&&this._pid===t,this._pid=t,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach((e=>this.emitEvent(e))),this.receiveBuffer=[],this.sendBuffer.forEach((e=>{this.notifyOutgoingListeners(e),this.packet(e)})),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach((e=>e())),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:os.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){const t=this._anyListeners;for(let r=0;r<t.length;r++)if(e===t[r])return t.splice(r,1),this}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(e),this}prependAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(e),this}offAnyOutgoing(e){if(!this._anyOutgoingListeners)return this;if(e){const t=this._anyOutgoingListeners;for(let r=0;r<t.length;r++)if(e===t[r])return t.splice(r,1),this}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(e){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){const t=this._anyOutgoingListeners.slice();for(const r of t)r.apply(this,e.data)}}}function gs(e){e=e||{},this.ms=e.min||100,this.max=e.max||1e4,this.factor=e.factor||2,this.jitter=e.jitter>0&&e.jitter<=1?e.jitter:0,this.attempts=0}gs.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),r=Math.floor(t*this.jitter*e);e=1&Math.floor(10*t)?e+r:e-r}return 0|Math.min(e,this.max)},gs.prototype.reset=function(){this.attempts=0},gs.prototype.setMin=function(e){this.ms=e},gs.prototype.setMax=function(e){this.max=e},gs.prototype.setJitter=function(e){this.jitter=e};class bs extends _r{constructor(e,t){var r;super(),this.nsps={},this.subs=[],e&&"object"==typeof e&&(t=e,e=void 0),(t=t||{}).path=t.path||"/socket.io",this.opts=t,Rr(this,t),this.reconnection(!1!==t.reconnection),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor(null!==(r=t.randomizationFactor)&&void 0!==r?r:.5),this.backoff=new gs({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==t.timeout?2e4:t.timeout),this._readyState="closed",this.uri=e;const s=t.parser||hs;this.encoder=new s.Encoder,this.decoder=new s.Decoder,this._autoConnect=!1!==t.autoConnect,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,this):this._reconnection}reconnectionAttempts(e){return void 0===e?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return void 0===e?this._reconnectionDelay:(this._reconnectionDelay=e,null===(t=this.backoff)||void 0===t||t.setMin(e),this)}randomizationFactor(e){var t;return void 0===e?this._randomizationFactor:(this._randomizationFactor=e,null===(t=this.backoff)||void 0===t||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return void 0===e?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,null===(t=this.backoff)||void 0===t||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}open(e){if(~this._readyState.indexOf("open"))return this;this.engine=new zr(this.uri,this.opts);const t=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;const s=us(t,"open",(function(){r.onopen(),e&&e()})),i=t=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",t),e?e(t):this.maybeReconnectOnOpen()},a=us(t,"error",i);if(!1!==this._timeout){const e=this._timeout,r=this.setTimeoutFn((()=>{s(),i(new Error("timeout")),t.close()}),e);this.opts.autoUnref&&r.unref(),this.subs.push((()=>{this.clearTimeoutFn(r)}))}return this.subs.push(s),this.subs.push(a),this}connect(e){return this.open(e)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const e=this.engine;this.subs.push(us(e,"ping",this.onping.bind(this)),us(e,"data",this.ondata.bind(this)),us(e,"error",this.onerror.bind(this)),us(e,"close",this.onclose.bind(this)),us(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(t){this.onclose("parse error",t)}}ondecoded(e){Ur((()=>{this.emitReserved("packet",e)}),this.setTimeoutFn)}onerror(e){this.emitReserved("error",e)}socket(e,t){let r=this.nsps[e];return r?this._autoConnect&&!r.active&&r.connect():(r=new fs(this,e,t),this.nsps[e]=r),r}_destroy(e){const t=Object.keys(this.nsps);for(const r of t){if(this.nsps[r].active)return}this._close()}_packet(e){const t=this.encoder.encode(e);for(let r=0;r<t.length;r++)this.engine.write(t[r],e.options)}cleanup(){this.subs.forEach((e=>e())),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(e,t){this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const t=this.backoff.duration();this._reconnecting=!0;const r=this.setTimeoutFn((()=>{e.skipReconnect||(this.emitReserved("reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open((t=>{t?(e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",t)):e.onreconnect()})))}),t);this.opts.autoUnref&&r.unref(),this.subs.push((()=>{this.clearTimeoutFn(r)}))}}onreconnect(){const e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}const _s={};function ys(e,t){"object"==typeof e&&(t=e,e=void 0);const r=function(e,t="",r){let s=e;r=r||"undefined"!=typeof location&&location,null==e&&(e=r.protocol+"//"+r.host),"string"==typeof e&&("/"===e.charAt(0)&&(e="/"===e.charAt(1)?r.protocol+e:r.host+e),/^(https?|wss?):\/\//.test(e)||(e=void 0!==r?r.protocol+"//"+e:"https://"+e),s=Gr(e)),s.port||(/^(http|ws)$/.test(s.protocol)?s.port="80":/^(http|ws)s$/.test(s.protocol)&&(s.port="443")),s.path=s.path||"/";const i=-1!==s.host.indexOf(":")?"["+s.host+"]":s.host;return s.id=s.protocol+"://"+i+":"+s.port+t,s.href=s.protocol+"://"+i+(r&&r.port===s.port?"":":"+s.port),s}(e,(t=t||{}).path||"/socket.io"),s=r.source,i=r.id,a=r.path,n=_s[i]&&a in _s[i].nsps;let o;return t.forceNew||t["force new connection"]||!1===t.multiplex||n?o=new bs(s,t):(_s[i]||(_s[i]=new bs(s,t)),o=_s[i]),r.query&&!t.query&&(t.query=r.queryKey),o.socket(r.path,t)}Object.assign(ys,{Manager:bs,Socket:fs,io:ys,connect:ys}),new Ut("WebSocketTransport");const ws=new Ut("WebsocketTransport");class vs extends Kt{constructor(e,t){super(ws),this._closed=!1,this._url=e,this._ws=null,this._socketShouldReconnect=t,this._isConnected=!1,this._lastTimerId=null,this._roomJoined=!1,ws.info("Request received to instantiate websocket transport! with url :%s",e),this.createAndUpdateSocket({connectionType:null})}get connectionStatus(){return this._isConnected}createAndUpdateSocket=async({connectionType:e=null})=>{ws.info("Room close status:%s",this._closed);let t,r=this;if(this._closed)return void ws.info("Websocket already closed!");if(!this._url)return void ws.warn("url not available!");t=null===e?`${this._url}&connectionType=landing`:`${this._url}&connectionType=${e}`,ws.debug("the url is:%s",t),this._ws=new WebSocket(t);let s=0;for(ws.debug("websocketHelper createAndUpdateSocket created a new websocket"),ws.debug("websocketHelper createAndUpdateSocket:%s",this._ws.readyState);1!==this._ws.readyState&&this._socketShouldReconnect;)if(3===this._ws.readyState&&(ws.debug("websocketHelper createAndUpdateSocket"),await Ht(2e3),this._ws=new WebSocket(t),ws.debug("websocketHelper createAndUpdateSocket newly created websocket state:%s",this._ws.readyState)),await Ht(500),s++,s>250){ws.error("No of retries limit to connect with server exhausted!");break}1===this._ws.readyState&&ws.debug(`updated the websocket with ready state -${this._ws.readyState}`),this.safeEmit("connected"),ws.debug(`updating the websocket to redux store with ready state -${this._ws.readyState}`),this._ws.onopen=()=>{this._closed||(ws.debug("Websocket open"),this.safeEmit("open"))},this._isConnected=!0,this._ws.onmessage=e=>{if(this._closed)return;let t=JSON.parse(e.data);switch(t.id){case"ping":{this._lastTimerId&&clearTimeout(this._lastTimerId);let e=this;this._lastTimerId=setTimeout((function(){e._isConnected=!1,this._roomJoined?e.close(4104,"In call connections close as server is unreachable for last 5 seconds!"):e.close(4103,"Landing page socket close by client as server not reachable for a couple of seconds!"),e._socketShouldReconnect&&(e._closed=!1,e.createAndUpdateSocket({connectionType:"inCall"}))}),22e3);const t={id:"pong"};this._ws.send(JSON.stringify(t));break}case"invalidToken":ws.debug("Session token invalid!"),this._socketShouldReconnect=!1,this.safeEmit("invalidToken",t);break;case"alreadyActive":this.safeEmit("alreadyActive",t);break;case"passwordDisabled":this.safeEmit("passwordDisabled",t);break;case"notify":this.safeEmit("notify",t.data);break;case"remotePeerJoin":this.safeEmit("roomStartedP2p",t);break;case"userError":this.safeEmit("userError",t);break;case"validationAlert":this.safeEmit("validationError",t);break;case"joinStatusOnLanding":this.safeEmit("defaultJoinStatus",t);break;default:this.safeEmit("message",t)}},this._ws.onclose=e=>{r._closed||(ws.warn('WebSocket "close" event [wasClean:%s, code:%s, reason:"%s"]',e.wasClean,e.code,e.reason),4503===e.code||4504===e.code?(ws.error("Socket closed with reason",e.reason),r._closed=!0):4500!==e.code&&(ws.debug("trying to reconnect:%s",e.code),r._closed=!1,this._roomJoined?(ws.debug("Trying to join after a network reset while in a meeting"),r.createAndUpdateSocket({connectionType:"inCall"})):(ws.debug("Trying to join after a network reset while on the landing page"),r.createAndUpdateSocket({connectionType:null})),clearTimeout(r._lastTimerId)),this._url=null,ws.info("The websocket closed status is:%s",r._closed),r.safeEmit("close",{code:e.code,reason:e.reason}))}};close(e,t){if(!this._closed){ws.info("close()"),this._closed=!0,this.safeEmit("close",{code:e,reason:t});try{this._ws.onopen=null,this._ws.onclose=null,this._ws.onerror=null,this._ws.onmessage=null,clearTimeout(this._lastTimerId),e&&t?this._ws.close(e,t):this._ws.close()}catch(r){ws.error("close() | error closing the WebSocket: %o",r)}}}async send(e){if(this._closed)ws.error("Transport closed or not yet ready. Try again later!");else try{this._ws.send(JSON.stringify(e))}catch(t){throw ws.warn("send() failed:%o",t),t}}}const Ss=()=>Math.floor(1e10*Math.random()),Rs=()=>"111-111-1111".replace(/[018]/g,(()=>(15&crypto.getRandomValues(new Uint8Array(1))[0]).toString(16)));function Ps(e,t){return function(){return e.apply(t,arguments)}}const{toString:Cs}=Object.prototype,{getPrototypeOf:ks}=Object,Ts=(e=>t=>{const r=Cs.call(t);return e[r]||(e[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),Ds=e=>(e=e.toLowerCase(),t=>Ts(t)===e),Es=e=>t=>typeof t===e,{isArray:Is}=Array,xs=Es("undefined");const Ms=Ds("ArrayBuffer");const Os=Es("string"),Ls=Es("function"),As=Es("number"),js=e=>null!==e&&"object"==typeof e,Ns=e=>{if("object"!==Ts(e))return!1;const t=ks(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},Bs=Ds("Date"),Fs=Ds("File"),$s=Ds("Blob"),Us=Ds("FileList"),qs=Ds("URLSearchParams");function Vs(e,t,{allOwnKeys:r=!1}={}){if(null==e)return;let s,i;if("object"!=typeof e&&(e=[e]),Is(e))for(s=0,i=e.length;s<i;s++)t.call(null,e[s],s,e);else{const i=r?Object.getOwnPropertyNames(e):Object.keys(e),a=i.length;let n;for(s=0;s<a;s++)n=i[s],t.call(null,e[n],n,e)}}function Ws(e,t){t=t.toLowerCase();const r=Object.keys(e);let s,i=r.length;for(;i-- >0;)if(s=r[i],t===s.toLowerCase())return s;return null}const Ks="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:globalThis,Hs=e=>!xs(e)&&e!==Ks;const Gs=(e=>t=>e&&t instanceof e)("undefined"!=typeof Uint8Array&&ks(Uint8Array)),zs=Ds("HTMLFormElement"),Js=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),Qs=Ds("RegExp"),Xs=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),s={};Vs(r,((r,i)=>{let a;!1!==(a=t(r,i,e))&&(s[i]=a||r)})),Object.defineProperties(e,s)},Ys="abcdefghijklmnopqrstuvwxyz",Zs="0123456789",ei={DIGIT:Zs,ALPHA:Ys,ALPHA_DIGIT:Ys+Ys.toUpperCase()+Zs};const ti=Ds("AsyncFunction"),ri={isArray:Is,isArrayBuffer:Ms,isBuffer:function(e){return null!==e&&!xs(e)&&null!==e.constructor&&!xs(e.constructor)&&Ls(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||Ls(e.append)&&("formdata"===(t=Ts(e))||"object"===t&&Ls(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Ms(e.buffer),t},isString:Os,isNumber:As,isBoolean:e=>!0===e||!1===e,isObject:js,isPlainObject:Ns,isUndefined:xs,isDate:Bs,isFile:Fs,isBlob:$s,isRegExp:Qs,isFunction:Ls,isStream:e=>js(e)&&Ls(e.pipe),isURLSearchParams:qs,isTypedArray:Gs,isFileList:Us,forEach:Vs,merge:function e(){const{caseless:t}=Hs(this)&&this||{},r={},s=(s,i)=>{const a=t&&Ws(r,i)||i;Ns(r[a])&&Ns(s)?r[a]=e(r[a],s):Ns(s)?r[a]=e({},s):Is(s)?r[a]=s.slice():r[a]=s};for(let i=0,a=arguments.length;i<a;i++)arguments[i]&&Vs(arguments[i],s);return r},extend:(e,t,r,{allOwnKeys:s}={})=>(Vs(t,((t,s)=>{r&&Ls(t)?e[s]=Ps(t,r):e[s]=t}),{allOwnKeys:s}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,r,s)=>{e.prototype=Object.create(t.prototype,s),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},toFlatObject:(e,t,r,s)=>{let i,a,n;const o={};if(t=t||{},null==e)return t;do{for(i=Object.getOwnPropertyNames(e),a=i.length;a-- >0;)n=i[a],s&&!s(n,e,t)||o[n]||(t[n]=e[n],o[n]=!0);e=!1!==r&&ks(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:Ts,kindOfTest:Ds,endsWith:(e,t,r)=>{e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;const s=e.indexOf(t,r);return-1!==s&&s===r},toArray:e=>{if(!e)return null;if(Is(e))return e;let t=e.length;if(!As(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},forEachEntry:(e,t)=>{const r=(e&&e[Symbol.iterator]).call(e);let s;for(;(s=r.next())&&!s.done;){const r=s.value;t.call(e,r[0],r[1])}},matchAll:(e,t)=>{let r;const s=[];for(;null!==(r=e.exec(t));)s.push(r);return s},isHTMLForm:zs,hasOwnProperty:Js,hasOwnProp:Js,reduceDescriptors:Xs,freezeMethods:e=>{Xs(e,((t,r)=>{if(Ls(e)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;const s=e[r];Ls(s)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")}))}))},toObjectSet:(e,t)=>{const r={},s=e=>{e.forEach((e=>{r[e]=!0}))};return Is(e)?s(e):s(String(e).split(t)),r},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,r){return t.toUpperCase()+r})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:Ws,global:Ks,isContextDefined:Hs,ALPHABET:ei,generateString:(e=16,t=ei.ALPHA_DIGIT)=>{let r="";const{length:s}=t;for(;e--;)r+=t[Math.random()*s|0];return r},isSpecCompliantForm:function(e){return!!(e&&Ls(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),r=(e,s)=>{if(js(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[s]=e;const i=Is(e)?[]:{};return Vs(e,((e,t)=>{const a=r(e,s+1);!xs(a)&&(i[t]=a)})),t[s]=void 0,i}}return e};return r(e,0)},isAsyncFn:ti,isThenable:e=>e&&(js(e)||Ls(e))&&Ls(e.then)&&Ls(e.catch)};function si(e,t,r,s,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),s&&(this.request=s),i&&(this.response=i)}ri.inherits(si,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:ri.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const ii=si.prototype,ai={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{ai[e]={value:e}})),Object.defineProperties(si,ai),Object.defineProperty(ii,"isAxiosError",{value:!0}),si.from=(e,t,r,s,i,a)=>{const n=Object.create(ii);return ri.toFlatObject(e,n,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),si.call(n,e.message,t,r,s,i),n.cause=e,n.name=e.name,a&&Object.assign(n,a),n};function ni(e){return ri.isPlainObject(e)||ri.isArray(e)}function oi(e){return ri.endsWith(e,"[]")?e.slice(0,-2):e}function ci(e,t,r){return e?e.concat(t).map((function(e,t){return e=oi(e),!r&&t?"["+e+"]":e})).join(r?".":""):t}const di=ri.toFlatObject(ri,{},null,(function(e){return/^is[A-Z]/.test(e)}));function pi(e,t,r){if(!ri.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const s=(r=ri.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!ri.isUndefined(t[e])}))).metaTokens,i=r.visitor||d,a=r.dots,n=r.indexes,o=(r.Blob||"undefined"!=typeof Blob&&Blob)&&ri.isSpecCompliantForm(t);if(!ri.isFunction(i))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(ri.isDate(e))return e.toISOString();if(!o&&ri.isBlob(e))throw new si("Blob is not supported. Use a Buffer instead.");return ri.isArrayBuffer(e)||ri.isTypedArray(e)?o&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function d(e,r,i){let o=e;if(e&&!i&&"object"==typeof e)if(ri.endsWith(r,"{}"))r=s?r:r.slice(0,-2),e=JSON.stringify(e);else if(ri.isArray(e)&&function(e){return ri.isArray(e)&&!e.some(ni)}(e)||(ri.isFileList(e)||ri.endsWith(r,"[]"))&&(o=ri.toArray(e)))return r=oi(r),o.forEach((function(e,s){!ri.isUndefined(e)&&null!==e&&t.append(!0===n?ci([r],s,a):null===n?r:r+"[]",c(e))})),!1;return!!ni(e)||(t.append(ci(i,r,a),c(e)),!1)}const p=[],l=Object.assign(di,{defaultVisitor:d,convertValue:c,isVisitable:ni});if(!ri.isObject(e))throw new TypeError("data must be an object");return function e(r,s){if(!ri.isUndefined(r)){if(-1!==p.indexOf(r))throw Error("Circular reference detected in "+s.join("."));p.push(r),ri.forEach(r,(function(r,a){!0===(!(ri.isUndefined(r)||null===r)&&i.call(t,r,ri.isString(a)?a.trim():a,s,l))&&e(r,s?s.concat(a):[a])})),p.pop()}}(e),t}function li(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function hi(e,t){this._pairs=[],e&&pi(e,this,t)}const ui=hi.prototype;function mi(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function fi(e,t,r){if(!t)return e;const s=r&&r.encode||mi,i=r&&r.serialize;let a;if(a=i?i(t,r):ri.isURLSearchParams(t)?t.toString():new hi(t,r).toString(s),a){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+a}return e}ui.append=function(e,t){this._pairs.push([e,t])},ui.toString=function(e){const t=e?function(t){return e.call(this,t,li)}:li;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};class gi{constructor(){this.handlers=[]}use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){ri.forEach(this.handlers,(function(t){null!==t&&e(t)}))}}const bi={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},_i={classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:hi,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},isStandardBrowserEnv:(()=>{let e;return("undefined"==typeof navigator||"ReactNative"!==(e=navigator.product)&&"NativeScript"!==e&&"NS"!==e)&&("undefined"!=typeof window&&"undefined"!=typeof document)})(),isStandardBrowserWebWorkerEnv:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,protocols:["http","https","file","blob","url","data"]};function yi(e){function t(e,r,s,i){let a=e[i++];const n=Number.isFinite(+a),o=i>=e.length;if(a=!a&&ri.isArray(s)?s.length:a,o)return ri.hasOwnProp(s,a)?s[a]=[s[a],r]:s[a]=r,!n;s[a]&&ri.isObject(s[a])||(s[a]=[]);return t(e,r,s[a],i)&&ri.isArray(s[a])&&(s[a]=function(e){const t={},r=Object.keys(e);let s;const i=r.length;let a;for(s=0;s<i;s++)a=r[s],t[a]=e[a];return t}(s[a])),!n}if(ri.isFormData(e)&&ri.isFunction(e.entries)){const r={};return ri.forEachEntry(e,((e,s)=>{t(function(e){return ri.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),s,r,0)})),r}return null}const wi={transitional:bi,adapter:["xhr","http"],transformRequest:[function(e,t){const r=t.getContentType()||"",s=r.indexOf("application/json")>-1,i=ri.isObject(e);i&&ri.isHTMLForm(e)&&(e=new FormData(e));if(ri.isFormData(e))return s&&s?JSON.stringify(yi(e)):e;if(ri.isArrayBuffer(e)||ri.isBuffer(e)||ri.isStream(e)||ri.isFile(e)||ri.isBlob(e))return e;if(ri.isArrayBufferView(e))return e.buffer;if(ri.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let a;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return pi(e,new _i.classes.URLSearchParams,Object.assign({visitor:function(e,t,r,s){return _i.isNode&&ri.isBuffer(e)?(this.append(t,e.toString("base64")),!1):s.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((a=ri.isFileList(e))||r.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return pi(a?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||s?(t.setContentType("application/json",!1),function(e,t,r){if(ri.isString(e))try{return(t||JSON.parse)(e),ri.trim(e)}catch(s){if("SyntaxError"!==s.name)throw s}return(r||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||wi.transitional,r=t&&t.forcedJSONParsing,s="json"===this.responseType;if(e&&ri.isString(e)&&(r&&!this.responseType||s)){const r=!(t&&t.silentJSONParsing)&&s;try{return JSON.parse(e)}catch(i){if(r){if("SyntaxError"===i.name)throw si.from(i,si.ERR_BAD_RESPONSE,this,null,this.response);throw i}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:_i.classes.FormData,Blob:_i.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};ri.forEach(["delete","get","head","post","put","patch"],(e=>{wi.headers[e]={}}));const vi=ri.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Si=Symbol("internals");function Ri(e){return e&&String(e).trim().toLowerCase()}function Pi(e){return!1===e||null==e?e:ri.isArray(e)?e.map(Pi):String(e)}function Ci(e,t,r,s,i){return ri.isFunction(s)?s.call(this,t,r):(i&&(t=r),ri.isString(t)?ri.isString(s)?-1!==t.indexOf(s):ri.isRegExp(s)?s.test(t):void 0:void 0)}let ki=class{constructor(e){e&&this.set(e)}set(e,t,r){const s=this;function i(e,t,r){const i=Ri(t);if(!i)throw new Error("header name must be a non-empty string");const a=ri.findKey(s,i);(!a||void 0===s[a]||!0===r||void 0===r&&!1!==s[a])&&(s[a||t]=Pi(e))}const a=(e,t)=>ri.forEach(e,((e,r)=>i(e,r,t)));return ri.isPlainObject(e)||e instanceof this.constructor?a(e,t):ri.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?a((e=>{const t={};let r,s,i;return e&&e.split("\n").forEach((function(e){i=e.indexOf(":"),r=e.substring(0,i).trim().toLowerCase(),s=e.substring(i+1).trim(),!r||t[r]&&vi[r]||("set-cookie"===r?t[r]?t[r].push(s):t[r]=[s]:t[r]=t[r]?t[r]+", "+s:s)})),t})(e),t):null!=e&&i(t,e,r),this}get(e,t){if(e=Ri(e)){const r=ri.findKey(this,e);if(r){const e=this[r];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=r.exec(e);)t[s[1]]=s[2];return t}(e);if(ri.isFunction(t))return t.call(this,e,r);if(ri.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Ri(e)){const r=ri.findKey(this,e);return!(!r||void 0===this[r]||t&&!Ci(0,this[r],r,t))}return!1}delete(e,t){const r=this;let s=!1;function i(e){if(e=Ri(e)){const i=ri.findKey(r,e);!i||t&&!Ci(0,r[i],i,t)||(delete r[i],s=!0)}}return ri.isArray(e)?e.forEach(i):i(e),s}clear(e){const t=Object.keys(this);let r=t.length,s=!1;for(;r--;){const i=t[r];e&&!Ci(0,this[i],i,e,!0)||(delete this[i],s=!0)}return s}normalize(e){const t=this,r={};return ri.forEach(this,((s,i)=>{const a=ri.findKey(r,i);if(a)return t[a]=Pi(s),void delete t[i];const n=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,r)=>t.toUpperCase()+r))}(i):String(i).trim();n!==i&&delete t[i],t[n]=Pi(s),r[n]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return ri.forEach(this,((r,s)=>{null!=r&&!1!==r&&(t[s]=e&&ri.isArray(r)?r.join(", "):r)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach((e=>r.set(e))),r}static accessor(e){const t=(this[Si]=this[Si]={accessors:{}}).accessors,r=this.prototype;function s(e){const s=Ri(e);t[s]||(!function(e,t){const r=ri.toCamelCase(" "+t);["get","set","has"].forEach((s=>{Object.defineProperty(e,s+r,{value:function(e,r,i){return this[s].call(this,t,e,r,i)},configurable:!0})}))}(r,e),t[s]=!0)}return ri.isArray(e)?e.forEach(s):s(e),this}};function Ti(e,t){const r=this||wi,s=t||r,i=ki.from(s.headers);let a=s.data;return ri.forEach(e,(function(e){a=e.call(r,a,i.normalize(),t?t.status:void 0)})),i.normalize(),a}function Di(e){return!(!e||!e.__CANCEL__)}function Ei(e,t,r){si.call(this,null==e?"canceled":e,si.ERR_CANCELED,t,r),this.name="CanceledError"}ki.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),ri.reduceDescriptors(ki.prototype,(({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[r]=e}}})),ri.freezeMethods(ki),ri.inherits(Ei,si,{__CANCEL__:!0});const Ii=_i.isStandardBrowserEnv?function(){return{write:function(e,t,r,s,i,a){const n=[];n.push(e+"="+encodeURIComponent(t)),ri.isNumber(r)&&n.push("expires="+new Date(r).toGMTString()),ri.isString(s)&&n.push("path="+s),ri.isString(i)&&n.push("domain="+i),!0===a&&n.push("secure"),document.cookie=n.join("; ")},read:function(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}();function xi(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Mi=_i.isStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let r;function s(r){let s=r;return e&&(t.setAttribute("href",s),s=t.href),t.setAttribute("href",s),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return r=s(window.location.href),function(e){const t=ri.isString(e)?s(e):e;return t.protocol===r.protocol&&t.host===r.host}}():function(){return function(){return!0}}();function Oi(e,t){let r=0;const s=function(e,t){e=e||10;const r=new Array(e),s=new Array(e);let i,a=0,n=0;return t=void 0!==t?t:1e3,function(o){const c=Date.now(),d=s[n];i||(i=c),r[a]=o,s[a]=c;let p=n,l=0;for(;p!==a;)l+=r[p++],p%=e;if(a=(a+1)%e,a===n&&(n=(n+1)%e),c-i<t)return;const h=d&&c-d;return h?Math.round(1e3*l/h):void 0}}(50,250);return i=>{const a=i.loaded,n=i.lengthComputable?i.total:void 0,o=a-r,c=s(o);r=a;const d={loaded:a,total:n,progress:n?a/n:void 0,bytes:o,rate:c||void 0,estimated:c&&n&&a<=n?(n-a)/c:void 0,event:i};d[t?"download":"upload"]=!0,e(d)}}const Li={http:null,xhr:"undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,r){let s=e.data;const i=ki.from(e.headers).normalize(),a=e.responseType;let n,o;function c(){e.cancelToken&&e.cancelToken.unsubscribe(n),e.signal&&e.signal.removeEventListener("abort",n)}ri.isFormData(s)&&(_i.isStandardBrowserEnv||_i.isStandardBrowserWebWorkerEnv?i.setContentType(!1):i.getContentType(/^\s*multipart\/form-data/)?ri.isString(o=i.getContentType())&&i.setContentType(o.replace(/^\s*(multipart\/form-data);+/,"$1")):i.setContentType("multipart/form-data"));let d=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",r=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";i.set("Authorization","Basic "+btoa(t+":"+r))}const p=xi(e.baseURL,e.url);function l(){if(!d)return;const s=ki.from("getAllResponseHeaders"in d&&d.getAllResponseHeaders());!function(e,t,r){const s=r.config.validateStatus;r.status&&s&&!s(r.status)?t(new si("Request failed with status code "+r.status,[si.ERR_BAD_REQUEST,si.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):e(r)}((function(e){t(e),c()}),(function(e){r(e),c()}),{data:a&&"text"!==a&&"json"!==a?d.response:d.responseText,status:d.status,statusText:d.statusText,headers:s,config:e,request:d}),d=null}if(d.open(e.method.toUpperCase(),fi(p,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,"onloadend"in d?d.onloadend=l:d.onreadystatechange=function(){d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))&&setTimeout(l)},d.onabort=function(){d&&(r(new si("Request aborted",si.ECONNABORTED,e,d)),d=null)},d.onerror=function(){r(new si("Network Error",si.ERR_NETWORK,e,d)),d=null},d.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const s=e.transitional||bi;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),r(new si(t,s.clarifyTimeoutError?si.ETIMEDOUT:si.ECONNABORTED,e,d)),d=null},_i.isStandardBrowserEnv){const t=Mi(p)&&e.xsrfCookieName&&Ii.read(e.xsrfCookieName);t&&i.set(e.xsrfHeaderName,t)}void 0===s&&i.setContentType(null),"setRequestHeader"in d&&ri.forEach(i.toJSON(),(function(e,t){d.setRequestHeader(t,e)})),ri.isUndefined(e.withCredentials)||(d.withCredentials=!!e.withCredentials),a&&"json"!==a&&(d.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&d.addEventListener("progress",Oi(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",Oi(e.onUploadProgress)),(e.cancelToken||e.signal)&&(n=t=>{d&&(r(!t||t.type?new Ei(null,e,d):t),d.abort(),d=null)},e.cancelToken&&e.cancelToken.subscribe(n),e.signal&&(e.signal.aborted?n():e.signal.addEventListener("abort",n)));const h=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(p);h&&-1===_i.protocols.indexOf(h)?r(new si("Unsupported protocol "+h+":",si.ERR_BAD_REQUEST,e)):d.send(s||null)}))}};ri.forEach(Li,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(r){}Object.defineProperty(e,"adapterName",{value:t})}}));const Ai=e=>`- ${e}`,ji=e=>ri.isFunction(e)||null===e||!1===e,Ni=e=>{e=ri.isArray(e)?e:[e];const{length:t}=e;let r,s;const i={};for(let a=0;a<t;a++){let t;if(r=e[a],s=r,!ji(r)&&(s=Li[(t=String(r)).toLowerCase()],void 0===s))throw new si(`Unknown adapter '${t}'`);if(s)break;i[t||"#"+a]=s}if(!s){const e=Object.entries(i).map((([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new si("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(Ai).join("\n"):" "+Ai(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return s};function Bi(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Ei(null,e)}function Fi(e){Bi(e),e.headers=ki.from(e.headers),e.data=Ti.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return Ni(e.adapter||wi.adapter)(e).then((function(t){return Bi(e),t.data=Ti.call(e,e.transformResponse,t),t.headers=ki.from(t.headers),t}),(function(t){return Di(t)||(Bi(e),t&&t.response&&(t.response.data=Ti.call(e,e.transformResponse,t.response),t.response.headers=ki.from(t.response.headers))),Promise.reject(t)}))}const $i=e=>e instanceof ki?e.toJSON():e;function Ui(e,t){t=t||{};const r={};function s(e,t,r){return ri.isPlainObject(e)&&ri.isPlainObject(t)?ri.merge.call({caseless:r},e,t):ri.isPlainObject(t)?ri.merge({},t):ri.isArray(t)?t.slice():t}function i(e,t,r){return ri.isUndefined(t)?ri.isUndefined(e)?void 0:s(void 0,e,r):s(e,t,r)}function a(e,t){if(!ri.isUndefined(t))return s(void 0,t)}function n(e,t){return ri.isUndefined(t)?ri.isUndefined(e)?void 0:s(void 0,e):s(void 0,t)}function o(r,i,a){return a in t?s(r,i):a in e?s(void 0,r):void 0}const c={url:a,method:a,data:a,baseURL:n,transformRequest:n,transformResponse:n,paramsSerializer:n,timeout:n,timeoutMessage:n,withCredentials:n,adapter:n,responseType:n,xsrfCookieName:n,xsrfHeaderName:n,onUploadProgress:n,onDownloadProgress:n,decompress:n,maxContentLength:n,maxBodyLength:n,beforeRedirect:n,transport:n,httpAgent:n,httpsAgent:n,cancelToken:n,socketPath:n,responseEncoding:n,validateStatus:o,headers:(e,t)=>i($i(e),$i(t),!0)};return ri.forEach(Object.keys(Object.assign({},e,t)),(function(s){const a=c[s]||i,n=a(e[s],t[s],s);ri.isUndefined(n)&&a!==o||(r[s]=n)})),r}const qi="1.6.0",Vi={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Vi[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));const Wi={};Vi.transitional=function(e,t,r){return(s,i,a)=>{if(!1===e)throw new si(function(e,t){return"[Axios v1.6.0] Transitional option '"+e+"'"+t+(r?". "+r:"")}(i," has been removed"+(t?" in "+t:"")),si.ERR_DEPRECATED);return t&&!Wi[i]&&(Wi[i]=!0),!e||e(s,i,a)}};const Ki={assertOptions:function(e,t,r){if("object"!=typeof e)throw new si("options must be an object",si.ERR_BAD_OPTION_VALUE);const s=Object.keys(e);let i=s.length;for(;i-- >0;){const a=s[i],n=t[a];if(n){const t=e[a],r=void 0===t||n(t,a,e);if(!0!==r)throw new si("option "+a+" must be "+r,si.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new si("Unknown option "+a,si.ERR_BAD_OPTION)}},validators:Vi},Hi=Ki.validators;let Gi=class{constructor(e){this.defaults=e,this.interceptors={request:new gi,response:new gi}}request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Ui(this.defaults,t);const{transitional:r,paramsSerializer:s,headers:i}=t;void 0!==r&&Ki.assertOptions(r,{silentJSONParsing:Hi.transitional(Hi.boolean),forcedJSONParsing:Hi.transitional(Hi.boolean),clarifyTimeoutError:Hi.transitional(Hi.boolean)},!1),null!=s&&(ri.isFunction(s)?t.paramsSerializer={serialize:s}:Ki.assertOptions(s,{encode:Hi.function,serialize:Hi.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let a=i&&ri.merge(i.common,i[t.method]);i&&ri.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete i[e]})),t.headers=ki.concat(a,i);const n=[];let o=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(o=o&&e.synchronous,n.unshift(e.fulfilled,e.rejected))}));const c=[];let d;this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)}));let p,l=0;if(!o){const e=[Fi.bind(this),void 0];for(e.unshift.apply(e,n),e.push.apply(e,c),p=e.length,d=Promise.resolve(t);l<p;)d=d.then(e[l++],e[l++]);return d}p=n.length;let h=t;for(l=0;l<p;){const e=n[l++],t=n[l++];try{h=e(h)}catch(u){t.call(this,u);break}}try{d=Fi.call(this,h)}catch(u){return Promise.reject(u)}for(l=0,p=c.length;l<p;)d=d.then(c[l++],c[l++]);return d}getUri(e){return fi(xi((e=Ui(this.defaults,e)).baseURL,e.url),e.params,e.paramsSerializer)}};ri.forEach(["delete","get","head","options"],(function(e){Gi.prototype[e]=function(t,r){return this.request(Ui(r||{},{method:e,url:t,data:(r||{}).data}))}})),ri.forEach(["post","put","patch"],(function(e){function t(t){return function(r,s,i){return this.request(Ui(i||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:r,data:s}))}}Gi.prototype[e]=t(),Gi.prototype[e+"Form"]=t(!0)}));const zi={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(zi).forEach((([e,t])=>{zi[t]=e}));const Ji=function e(t){const r=new Gi(t),s=Ps(Gi.prototype.request,r);return ri.extend(s,Gi.prototype,r,{allOwnKeys:!0}),ri.extend(s,r,null,{allOwnKeys:!0}),s.create=function(r){return e(Ui(t,r))},s}(wi);Ji.Axios=Gi,Ji.CanceledError=Ei,Ji.CancelToken=class e{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const r=this;this.promise.then((e=>{if(!r._listeners)return;let t=r._listeners.length;for(;t-- >0;)r._listeners[t](e);r._listeners=null})),this.promise.then=e=>{let t;const s=new Promise((e=>{r.subscribe(e),t=e})).then(e);return s.cancel=function(){r.unsubscribe(t)},s},e((function(e,s,i){r.reason||(r.reason=new Ei(e,s,i),t(r.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let t;return{token:new e((function(e){t=e})),cancel:t}}},Ji.isCancel=Di,Ji.VERSION=qi,Ji.toFormData=pi,Ji.AxiosError=si,Ji.Cancel=Ji.CanceledError,Ji.all=function(e){return Promise.all(e)},Ji.spread=function(e){return function(t){return e.apply(null,t)}},Ji.isAxiosError=function(e){return ri.isObject(e)&&!0===e.isAxiosError},Ji.mergeConfig=Ui,Ji.AxiosHeaders=ki,Ji.formToJSON=e=>yi(ri.isHTMLForm(e)?new FormData(e):e),Ji.getAdapter=Ni,Ji.HttpStatusCode=zi,Ji.default=Ji;const{Axios:Qi,AxiosError:Xi,CanceledError:Yi,isCancel:Zi,CancelToken:ea,VERSION:ta,all:ra,Cancel:sa,isAxiosError:ia,spread:aa,toFormData:na,AxiosHeaders:oa,HttpStatusCode:ca,formToJSON:da,getAdapter:pa,mergeConfig:la}=Ji,ha={P2P:"p2p",CONFERENCING:"conferencing"},ua="autoscalerv1.videoedge.io/api/vidScale/allocateResources",ma="record",fa="rtmpStreamAndRecord";new Ut("vidscale-url");const ga=async e=>{const{roomId:t,peerId:r,producer:s,consumer:i,sessionToken:a,participantData:n}=e,o=await Ji.post(`${ua}`,{roomId:t,peerId:r,producer:s,consumer:i,sessionToken:a,participantData:n});return new Promise((e=>{try{e(o.data)}catch(t){}}))};var ba,_a,ya,wa,va={};function Sa(){if(wa)return ya;wa=1;const e=_a?ba:(_a=1,ba=(e,t)=>{let r;return function s(){const i=Math.floor(Math.random()*(t-e+1)+e);return r=i===r&&e!==t?s():i,r}});return ya=t=>{const r=e(0,t.length-1);return()=>t[r()]}}const Ra=JSON.parse('["Bulbasaur","Ivysaur","Venusaur","Charmander","Charmeleon","Charizard","Squirtle","Wartortle","Blastoise","Caterpie","Metapod","Butterfree","Weedle","Kakuna","Beedrill","Pidgey","Pidgeotto","Pidgeot","Rattata","Raticate","Spearow","Fearow","Ekans","Arbok","Pikachu","Raichu","Sandshrew","Sandslash","Nidoran♀","Nidorina","Nidoqueen","Nidoran♂","Nidorino","Nidoking","Clefairy","Clefable","Vulpix","Ninetales","Jigglypuff","Wigglytuff","Zubat","Golbat","Oddish","Gloom","Vileplume","Paras","Parasect","Venonat","Venomoth","Diglett","Dugtrio","Meowth","Persian","Psyduck","Golduck","Mankey","Primeape","Growlithe","Arcanine","Poliwag","Poliwhirl","Poliwrath","Abra","Kadabra","Alakazam","Machop","Machoke","Machamp","Bellsprout","Weepinbell","Victreebel","Tentacool","Tentacruel","Geodude","Graveler","Golem","Ponyta","Rapidash","Slowpoke","Slowbro","Magnemite","Magneton","Farfetch\'d","Doduo","Dodrio","Seel","Dewgong","Grimer","Muk","Shellder","Cloyster","Gastly","Haunter","Gengar","Onix","Drowzee","Hypno","Krabby","Kingler","Voltorb","Electrode","Exeggcute","Exeggutor","Cubone","Marowak","Hitmonlee","Hitmonchan","Lickitung","Koffing","Weezing","Rhyhorn","Rhydon","Chansey","Tangela","Kangaskhan","Horsea","Seadra","Goldeen","Seaking","Staryu","Starmie","Mr. Mime","Scyther","Jynx","Electabuzz","Magmar","Pinsir","Tauros","Magikarp","Gyarados","Lapras","Ditto","Eevee","Vaporeon","Jolteon","Flareon","Porygon","Omanyte","Omastar","Kabuto","Kabutops","Aerodactyl","Snorlax","Articuno","Zapdos","Moltres","Dratini","Dragonair","Dragonite","Mewtwo","Mew","Chikorita","Bayleef","Meganium","Cyndaquil","Quilava","Typhlosion","Totodile","Croconaw","Feraligatr","Sentret","Furret","Hoothoot","Noctowl","Ledyba","Ledian","Spinarak","Ariados","Crobat","Chinchou","Lanturn","Pichu","Cleffa","Igglybuff","Togepi","Togetic","Natu","Xatu","Mareep","Flaaffy","Ampharos","Bellossom","Marill","Azumarill","Sudowoodo","Politoed","Hoppip","Skiploom","Jumpluff","Aipom","Sunkern","Sunflora","Yanma","Wooper","Quagsire","Espeon","Umbreon","Murkrow","Slowking","Misdreavus","Unown","Wobbuffet","Girafarig","Pineco","Forretress","Dunsparce","Gligar","Steelix","Snubbull","Granbull","Qwilfish","Scizor","Shuckle","Heracross","Sneasel","Teddiursa","Ursaring","Slugma","Magcargo","Swinub","Piloswine","Corsola","Remoraid","Octillery","Delibird","Mantine","Skarmory","Houndour","Houndoom","Kingdra","Phanpy","Donphan","Porygon2","Stantler","Smeargle","Tyrogue","Hitmontop","Smoochum","Elekid","Magby","Miltank","Blissey","Raikou","Entei","Suicune","Larvitar","Pupitar","Tyranitar","Lugia","Ho-Oh","Celebi","Treecko","Grovyle","Sceptile","Torchic","Combusken","Blaziken","Mudkip","Marshtomp","Swampert","Poochyena","Mightyena","Zigzagoon","Linoone","Wurmple","Silcoon","Beautifly","Cascoon","Dustox","Lotad","Lombre","Ludicolo","Seedot","Nuzleaf","Shiftry","Taillow","Swellow","Wingull","Pelipper","Ralts","Kirlia","Gardevoir","Surskit","Masquerain","Shroomish","Breloom","Slakoth","Vigoroth","Slaking","Nincada","Ninjask","Shedinja","Whismur","Loudred","Exploud","Makuhita","Hariyama","Azurill","Nosepass","Skitty","Delcatty","Sableye","Mawile","Aron","Lairon","Aggron","Meditite","Medicham","Electrike","Manectric","Plusle","Minun","Volbeat","Illumise","Roselia","Gulpin","Swalot","Carvanha","Sharpedo","Wailmer","Wailord","Numel","Camerupt","Torkoal","Spoink","Grumpig","Spinda","Trapinch","Vibrava","Flygon","Cacnea","Cacturne","Swablu","Altaria","Zangoose","Seviper","Lunatone","Solrock","Barboach","Whiscash","Corphish","Crawdaunt","Baltoy","Claydol","Lileep","Cradily","Anorith","Armaldo","Feebas","Milotic","Castform","Kecleon","Shuppet","Banette","Duskull","Dusclops","Tropius","Chimecho","Absol","Wynaut","Snorunt","Glalie","Spheal","Sealeo","Walrein","Clamperl","Huntail","Gorebyss","Relicanth","Luvdisc","Bagon","Shelgon","Salamence","Beldum","Metang","Metagross","Regirock","Regice","Registeel","Latias","Latios","Kyogre","Groudon","Rayquaza","Jirachi","Deoxys","Turtwig","Grotle","Torterra","Chimchar","Monferno","Infernape","Piplup","Prinplup","Empoleon","Starly","Staravia","Staraptor","Bidoof","Bibarel","Kricketot","Kricketune","Shinx","Luxio","Luxray","Budew","Roserade","Cranidos","Rampardos","Shieldon","Bastiodon","Burmy","Wormadam","Mothim","Combee","Vespiquen","Pachirisu","Buizel","Floatzel","Cherubi","Cherrim","Shellos","Gastrodon","Ambipom","Drifloon","Drifblim","Buneary","Lopunny","Mismagius","Honchkrow","Glameow","Purugly","Chingling","Stunky","Skuntank","Bronzor","Bronzong","Bonsly","Mime Jr.","Happiny","Chatot","Spiritomb","Gible","Gabite","Garchomp","Munchlax","Riolu","Lucario","Hippopotas","Hippowdon","Skorupi","Drapion","Croagunk","Toxicroak","Carnivine","Finneon","Lumineon","Mantyke","Snover","Abomasnow","Weavile","Magnezone","Lickilicky","Rhyperior","Tangrowth","Electivire","Magmortar","Togekiss","Yanmega","Leafeon","Glaceon","Gliscor","Mamoswine","Porygon-Z","Gallade","Probopass","Dusknoir","Froslass","Rotom","Uxie","Mesprit","Azelf","Dialga","Palkia","Heatran","Regigigas","Giratina","Cresselia","Phione","Manaphy","Darkrai","Shaymin","Arceus","Victini","Snivy","Servine","Serperior","Tepig","Pignite","Emboar","Oshawott","Dewott","Samurott","Patrat","Watchog","Lillipup","Herdier","Stoutland","Purrloin","Liepard","Pansage","Simisage","Pansear","Simisear","Panpour","Simipour","Munna","Musharna","Pidove","Tranquill","Unfezant","Blitzle","Zebstrika","Roggenrola","Boldore","Gigalith","Woobat","Swoobat","Drilbur","Excadrill","Audino","Timburr","Gurdurr","Conkeldurr","Tympole","Palpitoad","Seismitoad","Throh","Sawk","Sewaddle","Swadloon","Leavanny","Venipede","Whirlipede","Scolipede","Cottonee","Whimsicott","Petilil","Lilligant","Basculin","Sandile","Krokorok","Krookodile","Darumaka","Darmanitan","Maractus","Dwebble","Crustle","Scraggy","Scrafty","Sigilyph","Yamask","Cofagrigus","Tirtouga","Carracosta","Archen","Archeops","Trubbish","Garbodor","Zorua","Zoroark","Minccino","Cinccino","Gothita","Gothorita","Gothitelle","Solosis","Duosion","Reuniclus","Ducklett","Swanna","Vanillite","Vanillish","Vanilluxe","Deerling","Sawsbuck","Emolga","Karrablast","Escavalier","Foongus","Amoonguss","Frillish","Jellicent","Alomomola","Joltik","Galvantula","Ferroseed","Ferrothorn","Klink","Klang","Klinklang","Tynamo","Eelektrik","Eelektross","Elgyem","Beheeyem","Litwick","Lampent","Chandelure","Axew","Fraxure","Haxorus","Cubchoo","Beartic","Cryogonal","Shelmet","Accelgor","Stunfisk","Mienfoo","Mienshao","Druddigon","Golett","Golurk","Pawniard","Bisharp","Bouffalant","Rufflet","Braviary","Vullaby","Mandibuzz","Heatmor","Durant","Deino","Zweilous","Hydreigon","Larvesta","Volcarona","Cobalion","Terrakion","Virizion","Tornadus","Thundurus","Reshiram","Zekrom","Landorus","Kyurem","Keldeo","Meloetta","Genesect","Chespin","Quilladin","Chesnaught","Fennekin","Braixen","Delphox","Froakie","Frogadier","Greninja","Bunnelby","Diggersby","Fletchling","Fletchinder","Talonflame","Scatterbug","Spewpa","Vivillon","Litleo","Pyroar","Flabébé","Floette","Florges","Skiddo","Gogoat","Pancham","Pangoro","Furfrou","Espurr","Meowstic","Honedge","Doublade","Aegislash","Spritzee","Aromatisse","Swirlix","Slurpuff","Inkay","Malamar","Binacle","Barbaracle","Skrelp","Dragalge","Clauncher","Clawitzer","Helioptile","Heliolisk","Tyrunt","Tyrantrum","Amaura","Aurorus","Sylveon","Hawlucha","Dedenne","Carbink","Goomy","Sliggoo","Goodra","Klefki","Phantump","Trevenant","Pumpkaboo","Gourgeist","Bergmite","Avalugg","Noibat","Noivern","Xerneas","Yveltal","Zygarde","Diancie","Hoopa","Volcanion","Rowlet","Dartrix","Decidueye","Litten","Torracat","Incineroar","Popplio","Brionne","Primarina","Pikipek","Trumbeak","Toucannon","Yungoos","Gumshoos","Grubbin","Charjabug","Vikavolt","Crabrawler","Crabominable","Oricorio","Cutiefly","Ribombee","Rockruff","Lycanroc","Wishiwashi","Mareanie","Toxapex","Mudbray","Mudsdale","Dewpider","Araquanid","Fomantis","Lurantis","Morelull","Shiinotic","Salandit","Salazzle","Stufful","Bewear","Bounsweet","Steenee","Tsareena","Comfey","Oranguru","Passimian","Wimpod","Golisopod","Sandygast","Palossand","Pyukumuku","Type: Null","Silvally","Minior","Komala","Turtonator","Togedemaru","Mimikyu","Bruxish","Drampa","Dhelmise","Jangmo-o","Hakamo-o","Kommo-o","Tapu Koko","Tapu Lele","Tapu Bulu","Tapu Fini","Cosmog","Cosmoem","Solgaleo","Lunala","Nihilego","Buzzwole","Pheromosa","Xurkitree","Celesteela","Kartana","Guzzlord","Necrozma","Magearna","Marshadow","Poipole","Naganadel","Stakataka","Blacephalon","Zeraora","Meltan","Melmetal","Grookey","Thwackey","Rillaboom","Scorbunny","Raboot","Cinderace","Sobble","Drizzile","Inteleon","Skwovet","Greedent","Rookidee","Corvisquire","Corviknight","Blipbug","Dottler","Orbeetle","Nickit","Thievul","Gossifleur","Eldegoss","Wooloo","Dubwool","Chewtle","Drednaw","Yamper","Boltund","Rolycoly","Carkol","Coalossal","Applin","Flapple","Appletun","Silicobra","Sandaconda","Cramorant","Arrokuda","Barraskewda","Toxel","Toxtricity","Sizzlipede","Centiskorch","Clobbopus","Grapploct","Sinistea","Polteageist","Hatenna","Hattrem","Hatterene","Impidimp","Morgrem","Grimmsnarl","Obstagoon","Perrserker","Cursola","Sirfetch\'d","Mr. Rime","Runerigus","Milcery","Alcremie","Falinks","Pincurchin","Snom","Frosmoth","Stonjourner","Eiscue","Indeedee","Morpeko","Cufant","Copperajah","Dracozolt","Arctozolt","Dracovish","Arctovish","Duraludon","Dreepy","Drakloak","Dragapult","Zacian","Zamazenta","Eternatus","Kubfu","Urshifu","Zarude","Regieleki","Regidrago","Glastrier","Spectrier","Calyrex","Wyrdeer","Kleavor","Ursaluna","Basculegion","Sneasler","Overqwil","Enamorus","Sprigatito","Floragato","Meowscarada","Fuecoco","Crocalor","Skeledirge","Quaxly","Quaxwell","Quaquaval","Lechonk","Oinkologne","Tarountula","Spidops","Nymble","Lokix","Pawmi","Pawmo","Pawmot","Tandemaus","Maushold","Fidough","Dachsbun","Smoliv","Dolliv","Arboliva","Squawkabilly","Nacli","Naclstack","Garganacl","Charcadet","Armarouge","Ceruledge","Tadbulb","Bellibolt","Wattrel","Kilowattrel","Maschiff","Mabosstiff","Shroodle","Grafaiai","Bramblin","Brambleghast","Toedscool","Toedscruel","Klawf","Capsakid","Scovillain","Rellor","Rabsca","Flittle","Espathra","Tinkatink","Tinkatuff","Tinkaton","Wiglett","Wugtrio","Bombirdier","Finizen","Palafin","Varoom","Revavroom","Cyclizar","Orthworm","Glimmet","Glimmora","Greavard","Houndstone","Flamigo","Cetoddle","Cetitan","Veluza","Dondozo","Tatsugiri","Annihilape","Clodsire","Farigiraf","Dudunsparce","Kingambit","Great Tusk","Scream Tail","Brute Bonnet","Flutter Mane","Slither Wing","Sandy Shocks","Iron Treads","Iron Bundle","Iron Hands","Iron Jugulis","Iron Moth","Iron Thorns","Frigibax","Arctibax","Baxcalibur","Gimmighoul","Gholdengo","Wo-Chien","Chien-Pao","Ting-Lu","Chi-Yu","Roaring Moon","Iron Valiant","Koraidon","Miraidon","Walking Wake","Iron Leaves","Dipplin","Poltchageist","Sinistcha","Okidogi","Mankidori","Fezandipiti","Ogerpon","Archaludon","Hydrapple","Gouging Fire","Raging Bolt","Iron Boulder","Iron Crown","Terapagos","Pecharunt"]');var Pa;function Ca(){if(Pa)return va;Pa=1;const e=Sa(),t=Ra,r="https://github.com/sindresorhus/pokemon",s=`Please report to ${r}/issues if we missed something.`,i=new Set(["de","en","fr","es","ja","ko","ru","th","zh-Hans","zh-Hant"]),a=new Map;function n(e="en"){if("en"===e)return t;if(!i.has(e))throw new Error(`Localized list for language code '${e}' does not exist. Pull request welcome: ${r}`);return function(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}(`./data/${e.toLowerCase()}.json`)}return va.all=n,va.random=(t="en")=>{if(a.has(t))return a.get(t)();const r=n(t),s=e(r);return a.set(t,s),s()},va.getName=(e,t="en")=>{const r=n(t)[e-1];if(!r)throw new Error(`Pokémon with ID '${e}' does not exist. ${s}`);return r},va.getId=(e,t="en")=>{const r=n(t).indexOf(e);if(-1===r)throw new Error(`Pokémon with name '${e}' does not exist for language code '${t}'. ${s}`);return r+1},va.languages=i,va}var ka=Ca();function Ta(){return ka.random("en")}new Ut("device-manager");const Da=async()=>{let e=[],t=[],r=[];return new Promise(((s,i)=>{navigator.mediaDevices.enumerateDevices().then((function(i){i.forEach(((s,i)=>{if("audioinput"===s.kind){let e=s.label||`Mic ${Number(i)+1}`;t.push({label:e,deviceId:s.deviceId})}if("videoinput"===s.kind){let t=s.label||`Camera ${Number(i)+1}`;e.push({label:t,deviceId:s.deviceId})}if("audiooutput"===s.kind){let e=s.label||`Speaker ${Number(i)+1}`;r.push({label:e,deviceId:s.deviceId})}})),s({audioDevices:t,audioDevicesOutput:r,videoDevices:e})}))}))},Ea=async()=>{let e={videoDevices:[],audioDevices:[],audioOutputDevices:[]};const t=await(async()=>{let e=[];return navigator.mediaDevices.enumerateDevices().then((function(t){let r=void 0!==t.find((e=>"videoinput"===e.kind));return new Promise(((t,s)=>{navigator.mediaDevices.getUserMedia({video:r}).then((r=>{navigator.mediaDevices.enumerateDevices().then((function(s){s.forEach((function(t,r){if("videoinput"===t.kind){let s=t.label||`Camera ${Number(r)+1}`;e.push({label:s,deviceId:t.deviceId})}})),r.getTracks().forEach((e=>{e.stop()})),t({videoDevices:e})}))})).catch((function(e){t({error:e.name,reason:e.message})}))}))})).catch((function(e){}))})();let r=null;if(t.error){switch(t.error){case"TypeError":break;case"AbortError":r=`${t.error} : ${t.reason}!! Your Camera is currently being used !! If you wish to join the room with video, please close the other tab / browser wherever it is being used and refresh this page!!`;break;case"NotAllowedError":r=`${t.error} : ${t.reason}!! You have denied the access to your Camera!! If you wish to join the room with video, please allow the camera access by clicking on the camera icon in the address bar Or by going to " chrome://settings/content#media-stream-mic " link in your chrome.`;break;case"NotFoundError":r=`${t.error} : ${t.reason}!! No Camera could be found!! If you have a camera or microphone in your computer but it is not able to detect them, please refresh your browser again or restart the browser after closing all the opened tabs.`;break;case"NotReadableError":r=`${t.error} : ${t.reason}!! If you have a camera in your computer but it is not able to detect it as it may have been used by some other browser / tab, please refresh your browser again after closing the tab using the camera or restart the browser after closing all the opened tabs.`}return{success:!1,reason:{code:"EDV01",type:"DeviceError",text:r}}}t.videoDevices&&t.videoDevices.length>0&&(e.videoDevices=t.videoDevices);const s=await(async()=>{let e=[];return navigator.mediaDevices.enumerateDevices().then((function(t){let r=void 0!==t.find((e=>"audioinput"===e.kind));return new Promise(((t,s)=>{navigator.mediaDevices.getUserMedia({audio:r}).then((r=>{navigator.mediaDevices.enumerateDevices().then((function(s){s.forEach((function(t,r){if("audioinput"===t.kind){let s=t.label||`Mic ${Number(r)+1}`;e.push({label:s,deviceId:t.deviceId})}})),r.getTracks().forEach((e=>{e.stop()})),t({audioDevices:e})}))})).catch((function(e){t({error:e.name,reason:e.message})}))}))})).catch((function(e){}))})();let i=null;if(s.error){switch(s.error){case"NotAllowedError":i=`${s.error} : ${s.reason}!! You have denied the access to your Mic!! If you wish to join the room with video, please allow the camera access by clicking on the camera icon in the address bar Or by going to " chrome://settings/content#media-stream-mic " link in your chrome.`;break;case"NotFoundError":i=`${s.error} : ${s.reason}!! No Microphone could be found!! If you have a camera or microphone in your computer but it is not able to detect them, please refresh your browser again or restart the browser after closing all the opened tabs.`;break;case"NotReadableError":i=`${s.error} : ${s.reason}!! A hardware error occured at the OS OR browser Or Webpage level. If you have a microphone in your computer but it is not able to detect them, please refresh your browser again or restart the browser after closing all the opened tabs.`}return{success:!1,reason:{code:"EDA01",type:"DeviceError",text:i}}}s.audioDevices&&s.audioDevices.length>0&&(e.audioDevices=s.audioDevices);const a=await(async()=>{let e=[];return navigator.mediaDevices.enumerateDevices().then((function(t){let r=void 0!==t.find((e=>"audiooutput"===e.kind));return new Promise(((t,s)=>{navigator.mediaDevices.getUserMedia({audio:r}).then((r=>{navigator.mediaDevices.enumerateDevices().then((function(s){s.forEach((function(t,r){if("audiooutput"===t.kind){let s=t.label||`Speaker ${Number(r)+1}`;e.push({label:s,deviceId:t.deviceId})}})),r.getTracks().forEach((e=>{e.stop()})),t({audioDevicesOutput:e})}))})).catch((function(e){t({error:e.name,reason:e.message})}))}))})).catch((function(e){}))})();return a.error?{success:!1,reason:{code:"EDAO01",type:"DeviceError",text:"Some error occured while accessing your speaker. Please try again again after some time."}}:(a.audioDevicesOutput&&a.audioDevicesOutput.length>0&&(e.audioOutputDevices=a.audioDevicesOutput),{success:!0,deviceList:e})},Ia=new Ut("Room"),xa={small:{width:{ideal:160},height:{ideal:120}},qvga:{width:{ideal:320},height:{ideal:240}},vga:{width:{ideal:640},height:{ideal:480}},hd:{width:{ideal:1280},height:{ideal:720}}},Ma={optional:[{googDscp:!0}]};let Oa;class La extends Wt.EventEmitter{static async listDevices(){if(Oa)return Ia.info("Device list already exists:%O",Oa),{success:!0,deviceList:Oa};const e=await Ea();return e.success?(Oa=e.deviceList,{success:!0,deviceList:e.deviceList}):{success:!1,reason:e.reason}}static async joinRoom({sessionToken:e,roomId:t,peerId:r,peerName:s,produce:i=!0,produceAudio:a=!0,produceVideo:n=!0,consume:o=!0,videoResolution:c="hd",forceVp8:d=!1,forceVp9:p=!1,forceH264:l=!1,h264Profile:h="high",forcePCMU:u=!1,forcePCMA:m=!1,forceFPS:f=25,enableWebcamLayers:g=!0,numSimulcastStreams:b=3,autoGainControl:_=!0,echoCancellation:y=!0,noiseSuppression:w=!0,sampleRate:v=44e3,channelCount:S=1,videoBitRates:R=[700,250,75],share:P=!1,shareAudio:C=!1,enableSharingLayers:k=!0,shareBitRates:T=[2500,1250,500],audioDeviceId:D=null,videoDeviceId:E=null}={}){if(!e)throw new Error("Session token is required to join the room.");["hd","vga","qvga"].includes(c)||(Ia.warn("Invalid video resolution value. setting it to default value of 'hd' "),c="hd"),"boolean"!=typeof i&&(Ia.warn("Produe should either be true or false"),i=Boolean(i)),"boolean"!=typeof a&&(Ia.warn("ProduceAudio should either be true or false"),a=Boolean(a)),"boolean"!=typeof n&&(Ia.warn("ProduceVideo should either be true or false"),n=Boolean(n)),"boolean"!=typeof o&&(Ia.warn("Consume should either be true or false"),o=Boolean(o)),"boolean"!=typeof d&&(Ia.warn("forceVp8 should either be true or false"),d=Boolean(d)),"boolean"!=typeof p&&(Ia.warn("forceVp9 should either be true or false"),p=Boolean(p)),"boolean"!=typeof l&&(Ia.warn("forceH264 should either be true or false"),l=Boolean(l)),["high","low"].includes(h.toLowerCase())||(Ia.warn("h264Profile should either be 'high' or 'low'"),h="high"),(!Number.isInteger(f)||Number.isInteger(f)&&(f>65||f<5))&&(Ia.warn("forceFPS should be a number between 5 to 65, default value is 25 fps."),f=25),"boolean"!=typeof g&&(Ia.warn("enableWebcamLayers should either be true or false"),g=Boolean(g)),(!Number.isInteger(b)||Number.isInteger(b)&&(b>3||b<1))&&(Ia.warn("numSimulcastStreams should be a number between 1 to 3, default value is 3."),b=3),Array.isArray(R)&&R.length>=1&&R.length<=3&&R.every((e=>Number.isInteger(e)&&e>=75&&e<=800))?Ia.debug("videoBitRates values are correct"):(Ia.warn("videobitrates values should be an integer array with maximum 3 elements and minimum 1 element. The values in the array are '[75,250,75]'"),R=[75,75,75]),"boolean"!=typeof u&&(Ia.warn("forcePCMU should either be true or false"),u=Boolean(u)),"boolean"!=typeof m&&(Ia.warn("forcePCMA should either be true or false"),m=Boolean(m)),"boolean"!=typeof _&&(Ia.warn("autoGainControl should either be true or false"),_=Boolean(_)),"boolean"!=typeof y&&(Ia.warn("echoCancellation should either be true or false"),y=Boolean(y)),"boolean"!=typeof w&&(Ia.warn("noiseSuppression should either be true or false"),w=Boolean(w)),(!Number.isInteger(v)||Number.isInteger(v)&&(v>64e3||v<8e3))&&(Ia.warn("sampleRate should be a number between 8000 to 64000, default value is 44000 Khz."),v=44e3),(!Number.isInteger(S)||Number.isInteger(S)&&(S>2||S<1))&&(Ia.warn("sampleRate should be a number between 1 to 2, default value is 1, which is a mono audio."),S=1),"boolean"!=typeof P&&(Ia.warn("share should either be true or false"),P=Boolean(P)),"boolean"!=typeof C&&(Ia.warn("shareAudio should either be true or false"),C=Boolean(C)),"boolean"!=typeof k&&(Ia.warn("enableSharingLayers should either be true or false"),k=Boolean(k)),Array.isArray(T)&&T.length>=1&&T.length<=3&&T.every((e=>Number.isInteger(e)&&e>=500&&e<=2500))?Ia.debug("shareBitRates values are correct"):(Ia.warn("sharebitrates values should be an integer array with maximum 3 elements and minimum 1 element. The values in the array are '[2500,1250,500]'"),T=[2500,1250,500]);try{Ia.info("session token:%s",e),r||(r=Rs()),t||(t=Ss()),s||(s=Ta());const I=Bt.parse(window.navigator.userAgent),x=I.browser.name,M=I.browser.version,O={name:r,participantType:"moderator",browserName:x,browserVersion:M,os:I.os.name};Ia.info("browser details are:%O",I);const L={sessionToken:e,roomId:t,peerId:r,consumerReplicas:0,producer:i,consumer:o,participantData:O};let A={};Ia.debug("Received input parameters are:%O",L);const j=await async function({sessionToken:e,roomId:t,peerId:r,consumerReplicas:s,producer:i=!0,consumer:a=!0,participantData:n}){const o=await ga({sessionToken:e,roomId:t,peerId:r,producer:i,consumer:a,participantData:n});return o.success?{success:!0,wsUrl:`wss://${o.data.url}/?roomId=${t}&peerId=${r}&consumerReplicas=${s}`,roomUrl:`https://${o.data.url}`,core:o.data.core}:{success:!1,errorText:o.data.reason,errorCode:o.data.code}}(L);return j.success&&j.wsUrl&&j.core?(A.url=j.wsUrl,A.core=j.core,Ia.debug("VidScale url is:",A.url),new La({peerId:r,roomId:t,peerName:s,produce:i,produceAudio:a,produceVideo:n,consume:o,videoResolution:c,forceVp8:d,forceVp9:p,forceH264:l,h264Profile:h,forceFPS:f,forcePCMU:u,forcePCMA:m,enableWebcamLayers:g,numSimulcastStreams:b,autoGainControl:_,echoCancellation:y,noiseSuppression:w,sampleRate:v,channelCount:S,videoBitRates:R,share:P,shareAudio:C,enableSharingLayers:k,shareBitRates:T,outputData:A,audioDeviceId:D,videoDeviceId:E})):(Ia.warn("Vidscale returned success as false. with error:%O",j),j)}catch(I){throw Ia.error("Failed to join room:",I.message),I}}constructor({peerId:e,roomId:t,peerName:r,produce:s,produceAudio:i,produceVideo:a,consume:n,videoResolution:o,forceVp8:c,forceVp9:d,forceH264:p,h264Profile:l,forceFPS:h,forcePCMU:u,forcePCMA:m,enableWebcamLayers:f,numSimulcastStreams:g,autoGainControl:b,echoCancellation:_,noiseSuppression:y,sampleRate:w,channelCount:v,videoBitRates:S,share:R,shareAudio:P,enableSharingLayers:C,shareBitRates:k,outputData:T,audioDeviceId:D,videoDeviceId:E}){super(),this._closed=!1,this._roomStatus="initialised",this._cignal=null,this._sendTransport=null,this._recvTransport=null,this._device=new Ct.Device,this._webCamProducer=null,this._micProducer=null,this._shareProducer=null,this._shareAudioProducer=null,this._producers=new Map,this._consumers=new Map,this._peers=new Map,this._data={...T},this._micStream=null,this._webCamStream=null,this._webcam={device:null,resolution:o},this._mic={device:null},this._deviceList=Oa||null,this._externalVideo=null,this._externalVideoStream=null,this._forceVP8=Boolean(c),this._forceH264=Boolean(p),this._forceVP9=Boolean(d),this._enableWebcamLayers=Boolean(f),this._numSimulcastStreams=g,this._enableSharingLayers=Boolean(C),this._client=Bt.parse(window.navigator.userAgent),this._cignalConnected=!1,this._reconnectionInitiated=!1,this._restartIceInProgressSendTransport=!1,this._restartIceInProgressRecvTransport=!1,this._activeSpeaker=null,this.init({roomId:t,peerId:e,peerName:r,produce:s,produceAudio:i,produceVideo:a,consume:n,videoResolution:o,forceVp8:c,forceVp9:d,forceH264:p,h264Profile:l,forceFPS:h,forcePCMU:u,forcePCMA:m,enableWebcamLayers:f,numSimulcastStreams:g,autoGainControl:b,echoCancellation:_,noiseSuppression:y,sampleRate:w,channelCount:v,videoBitRates:S,share:R,shareAudio:P,enableSharingLayers:C,shareBitRates:k,audioDeviceId:D,videoDeviceId:E})}get closed(){return this._closed}get data(){return this._data}set data(e){throw new Error("Setting the whole data object is not possible!")}get peers(){return this._peers}set peers(e){throw new Error("Setting the whole peers object is not possible!")}get transports(){return{produce:this._sendTransport,consume:this._recvTransport}}set transports(e){throw new Error("Setting of transport is not possible!")}get videoStream(){return this._webCamStream}get audioStream(){return this._micStream}get clientAgent(){return this._client}get activeParameters(){return this._data.inputParams}get deviceList(){return this._deviceList?this._deviceList:{videoDevices:[],audioDevices:[],audioOutputDevices:[]}}set deviceList(e){throw new Error("Setting of deviceList is not possible!")}get currentlyActiveSpeaker(){return this._activeSpeaker}set currentlyActiveSpeaker(e){throw new Error("Setting of currentActivespeaker is not possible!")}async init(e){Ia.debug("init() | The input parameters are:%O",e),this.data.inputParams=e;const t=Ct.detectDevice();Ia.debug("The device is:%O",t),await this.listDevicesInternal(),await this.join()}close(){this._closed||(this._closed=!0,Ia.debug("close()"),this._cignal.close(),this._sendTransport&&this._sendTransport.close(),this._recvTransport&&this._recvTransport.close(),this._roomStatus="closed")}async leaveRoom(){Ia.debug("Leave room is called!!"),"connected"===this._roomStatus?(await this._cignal.notify("leaveRoom",{}),this._sendTransport&&(this._sendTransport.close(),this._sendTransport=null),this._recvTransport&&(this._recvTransport.close(),this._recvTransport=null),this._webCamStream&&this._webCamStream.getVideoTracks().forEach((e=>{e.stop(),Ia.debug("Video Track stopped")})),this._micStream&&this._micStream.getAudioTracks().forEach((e=>{e.stop(),Ia.debug("Mic Track stopped")})),this._roomStatus="closed",this._cignal.close()):Ia.error("The room state is:%s",this._roomStatus)}async closeRoom(){await this._cignal.notify("closeRoom",{}),this.leaveRoom()}async listDevicesInternal(){if(navigator.mediaDevices.ondevicechange=async e=>{let t=await Da();Ia.info("Media devices changed!:%O",t),t.audioDevices&&t.audioDevices.length>0&&(this._deviceList.audioDevices=t.audioDevices),t.videoDevices&&t.videoDevices.length>0&&(this._deviceList.videoDevices=t.videoDevices),t.audioDevices&&t.audioDevices.length>0&&(this._deviceList.audioOutputDevices=t.audioDevicesOutput),Oa=this._deviceList,this.emit("deviceListUpdated")},!this._deviceList){const e=await Ea();if(e.success)return this._deviceList=e.deviceList,void(Oa=this._deviceList)}}async join(){const e=new vs(this.data.url,{retries:10,factor:2,minTimeout:1e3,maxTimeout:8e3});this._cignal=new Qt(e),this._cignal.on("open",(async()=>{this._cignalConnected=!0,this._sendTransport||this._recvTransport?(!this._sendTransport||"failed"!==this._sendTransport.connectionState&&"disconnected"!==this._sendTransport.connectionState?Ia.debug("Nothing to in case of socket reconnection with send transport status:%s",this._sendTransport?.connectionState):(Ia.debug("Ws reconnected after network outage. Need to do ICE restarts for send transport."),this.restartIceSendTransport()),!this._recvTransport||"failed"!==this._recvTransport.connectionState&&"disconnected"!==this._recvTransport.connectionState?Ia.debug("Nothing to in case of socket reconnection with recv transport status:%s",this._recvTransport?.connectionState):(Ia.debug("Ws reconnected after network outage. Need to do ICE restarts for recv transport."),this.restartIceRecvTransport())):(Ia.debug("Ws connected for first time. Need to go with the regular flow."),await this._joinRoom())})),this._cignal.on("failed",(()=>{})),this._cignal.on("disconnected",(()=>{Ia.debug("ws disconnected!"),this._cignalConnected=!1})),this._cignal.on("close",(()=>{this._closed||this._reconnectionInitiated||this.close()})),this._cignal.on("request",(async(e,t,r)=>{switch(Ia.debug('cignal "request" event [method:%s, data:%o]',e.method,e.data),this._cignalConnected=!0,e.method){case"newConsumer":{if(!this.data.inputParams.consume){r(403,"I do not want to consume");break}const{peerId:i,producerId:a,id:n,kind:o,rtpParameters:c,type:d,appData:p,producerPaused:l}=e.data;try{const e=await this._recvTransport.consume({id:n,producerId:a,kind:o,rtpParameters:c,streamId:`${i}-${p.share?"share":"mic-webcam"}`,appData:{...p,peerId:i}});this._consumers.set(e.id,e),e.on("transportclose",(()=>{this._consumers.delete(e.id)}));const{spatialLayers:r,temporalLayers:s}=Ct.parseScalabilityMode(e.rtpParameters.encodings[0].scalabilityMode),h=this._peers.get(i);Ia.debug(`Consumer created for peerId ${i} for kind ${e.kind}`);let u={...h,[p.share?`ss${e.kind}`:e.kind]:{consumerId:e.id,type:d,locallyPaused:!1,remotelyPaused:l,rtpParameters:e.rtpParameters,spatialLayers:r,temporalLayers:s,preferredSpatialLayer:r-1,preferredTemporalLayer:s-1,priority:1,codec:e.rtpParameters.codecs[0].mimeType.split("/")[1],track:e.track,share:p.share}};this._peers.set(i,u),t(),Ia.debug("Going to emit mic start / videostart"),"audio"===e.kind?p.share?this.emit("ssAudioStart",{peerId:i,audioTrack:e.track,type:"remote"}):this.emit("micStart",{peerId:i,audioTrack:e.track,type:"remote"}):"video"===e.kind&&(p.share?this.emit("ssVideoStart",{peerId:i,videoTrack:e.track,type:"remote"}):this.emit("videoStart",{peerId:i,videoTrack:e.track,type:"remote"}))}catch(s){throw Ia.error('"newConsumer" request failed:%o',s),s}break}}})),this._cignal.on("notification",(e=>{switch("activeSpeaker"!==e.method&&Ia.debug('proto "notification" event [method:%s, data:%o]',e.method,e.data),this._cignalConnected=!0,e.method){case"producerScore":{const{producerId:t,score:r}=e.data;break}case"newPeer":{const t=e.data;this._peers.set(t.id,{...t,consumers:[]}),this.emit("newPeer",{peerId:t.id,peerName:t.displayName,type:"remote"});break}case"peerClosed":{const{peerId:t}=e.data;this._peers.delete(t),this.emit("peerLeft",{peerId:t});break}case"roomClosed":Ia.debug("Room closed. No need to reconnect socket"),this.close();break;case"consumerClosed":{const{consumerId:t}=e.data,r=this._consumers.get(t);if(Ia.debug("Consumer closed for consumerId:%s, type:%s",t,r?.kind),!r)break;const{peerId:s,share:i}=r.appData;let a=i?`ss${r.kind}`:r.kind;r.close(),this._consumers.delete(t);let n=this._peers.get(s);Ia.debug("Peer data before deletion:%O",n),n[a]&&n[a].consumerId===t&&delete n[a],Ia.debug("Peer data after deletion:%O",n),this._peers.set(s,n),"audio"===a?(Ia.debug("Going to emit micEnd, consumer closed for audio"),i?this.emit("ssAudioStop",{peerId:s,track:null,type:"remote"}):this.emit("micEnd",{peerId:s,track:null,type:"remote"})):"video"===a&&(Ia.debug("Going to emit videoEnd, consumer closed for video"),i?this.emit("ssVideoStop",{peerId:s,track:null,type:"remote"}):this.emit("videoEnd",{peerId:s,track:null,type:"remote"}));break}case"consumerPaused":{const{consumerId:t}=e.data,r=this._consumers.get(t);if(!r)break;r.pause();break}case"consumerResumed":{const{consumerId:t}=e.data,r=this._consumers.get(t);if(!r)break;r.resume();break}case"consumerLayersChanged":{const{consumerId:t,spatialLayer:r,temporalLayer:s}=e.data;if(!this._consumers.get(t))break;break}case"consumerScore":{const{consumerId:t,score:r}=e.data;break}case"activeSpeaker":{const{peerId:t,volume:r}=e.data;this._activeSpeaker=e.data,this.emit("activeSpeaker",{peerId:t,volume:r});break}case"peerMuted":{const{peerId:t}=e.data;this.emit("peerMuted",{peerId:t,type:"remote"});break}case"peerUnMuted":{const{peerId:t}=e.data;this.emit("peerUnMuted",{peerId:t,type:"remote"});break}default:Ia.error('unknown protoo notification.method "%s"',e.method)}}))}async restartIceSendTransport(){if(Ia.debug("restartIce SendTransport()"),this._restartIceInProgressSendTransport)Ia.warn("Restart ice already in progress for send transport! wait 4 completion b4 next request!");else{try{if(this._sendTransport&&("failed"===this._sendTransport.connectionState||"disconnected"===this._sendTransport.connectionState)){this._restartIceInProgressSendTransport=!0,Ia.debug("Restarting ICE for send transport");const e=await this._cignal.request("restartIce",{transportId:this._sendTransport.id,peerId:this._peerId});await this._sendTransport.restartIce({iceParameters:e}),this._restartIceInProgressSendTransport=!1}}catch(e){Ia.error("restartIce SendTransport() | failed:%o",e)}this._reconnectionInitiated=!1}}async restartIceRecvTransport(){if(Ia.debug("restartIce RecvTransport()"),this._restartIceInProgressRecvTransport)Ia.warn("Restart ice already in progress for recv transport! wait 4 completion b4 next request!");else{try{if(this._recvTransport&&("failed"===this._recvTransport.connectionState||"disconnected"===this._recvTransport.connectionState)){this._restartIceInProgressRecvTransport=!0,Ia.debug("Restarting ICE for recv transport");const e=await this._cignal.request("restartIce",{transportId:this._recvTransport.id,peerId:this._peerId});await this._recvTransport.restartIce({iceParameters:e}),this._restartIceInProgressRecvTransport=!1}}catch(e){Ia.error("restartIce RecvTransport() | failed:%o",e)}this._reconnectionInitiated=!1}}async _joinRoom(){Ia.debug("_joinRoom()");try{const e=await this._cignal.request("getRouterRtpCapabilities",{coreNumber:this.data.core});if(Ia.debug("Router rtp capabilities created:%O",e),Ia.debug("Input params are:",this.data.inputParams),await this._device.load({routerRtpCapabilities:e}),this.data.inputParams.produce){Ia.debug("Going to create webrtctransport send");const e=await this._cignal.request("createWebRtcTransport",{forceTcp:this._forceTcp||!1,producing:!0,consuming:!1,sctpCapabilities:this._useDataChannel?this._device.sctpCapabilities:void 0}),{id:t,iceParameters:r,iceCandidates:s,dtlsParameters:i,sctpParameters:a}=e;Ia.debug("Transport info is:%O",e),this._sendTransport=this._device.createSendTransport({id:t,iceParameters:r,iceCandidates:s,dtlsParameters:{...i,role:"auto"},sctpParameters:a,iceServers:[],proprietaryConstraints:Ma,additionalSettings:{encodedInsertableStreams:this._e2eKey&&e2e.isSupported()}}),this._sendTransport.on("connect",(({iceParameters:e,dtlsParameters:t},r,s)=>{this._cignal.request("connectWebRtcTransport",{transportId:this._sendTransport.id,iceParameters:e,dtlsParameters:t}).then(r).catch(s)})),this._sendTransport.on("produce",(async({kind:e,rtpParameters:t,appData:r},s,i)=>{try{const{id:i}=await this._cignal.request("produce",{transportId:this._sendTransport.id,kind:e,rtpParameters:t,appData:r});s({id:i})}catch(a){i(a)}}))}if(this.data.inputParams.consume){Ia.debug("Going to create webrtctransport recv");const e=await this._cignal.request("createWebRtcTransport",{forceTcp:this._forceTcp,producing:!1,consuming:!0,sctpCapabilities:this._useDataChannel?this._device.sctpCapabilities:void 0}),{id:t,iceParameters:r,iceCandidates:s,dtlsParameters:i,sctpParameters:a}=e;Ia.debug("Transport info is:%O",e),this._recvTransport=this._device.createRecvTransport({id:t,iceParameters:r,iceCandidates:s,dtlsParameters:{...i,role:"auto"},sctpParameters:a,iceServers:[],additionalSettings:{encodedInsertableStreams:this._e2eKey&&e2e.isSupported()}}),this._recvTransport.on("connect",(({iceParameters:e,dtlsParameters:t},r,s)=>{this._cignal.request("connectWebRtcTransport",{transportId:this._recvTransport.id,iceParameters:e,dtlsParameters:t}).then(r).catch(s)}))}const{peers:t}=await this._cignal.request("join",{displayName:this.data.inputParams.peerName,device:this._device,rtpCapabilities:this.data.inputParams.consume?this._device.rtpCapabilities:void 0,sctpCapabilities:this._useDataChannel&&this.data.inputParams.consume?this._device.sctpCapabilities:void 0});this.emit("newPeer",{peerId:this.data.inputParams.peerId,peerName:this.data.inputParams.peerName,type:"local"}),this._roomStatus="connected",Ia.debug("All availablepeers in this room are::%O",t);for(const r of t)this._peers.set(r.id,{...r,consumers:[]}),Ia.debug("new peer is:%O",r),this.emit("newPeer",{peerId:r.id,peerName:r.displayName,type:"remote"});this.data.inputParams.produce&&(this.data.inputParams.produceAudio?this.enableMic({deviceId:this.data.inputParams.audioDeviceId?this.data.inputParams.audioDeviceId:null}):Ia.debug("No need to produce audio!"),(this._device.canProduce("video")||this._externalVideo)&&(this.data.inputParams.produceVideo?this.enableCam({deviceId:this.data.inputParams.videoDeviceId?this.data.inputParams.videoDeviceId:null}):Ia.debug("No need to produce video!"),this.data.inputParams.share&&this.enableShare({shareAudio:this.data.inputParams.shareAudio,enableSharingLayers:this._enableSharingLayers,shareBitRates:this.data.inputParams.shareBitRates})),this._sendTransport.on("connectionstatechange",(e=>{"connected"===e&&Ia.debug("Send transport now connected!")})))}catch(e){Ia.error("_joinRoom() failed:%o",e),this.emit("error",{code:"EJR001",text:"Join room request failed!"}),this.close()}}async enableMic({deviceId:e=null,autoGainControl:t,noiseSuppression:r,echoCancellation:s,channelCount:i,sampleRate:a,forcePCMU:n,forcePCMA:o}={}){if(Ia.debug("enableMic()"),!this.data.inputParams.produce)return Ia.debug("Produce status is set to false!"),{success:!1,error:!0,code:"REID007",text:"Error while trying to start Mic/Audio. Produce flag need to set to true while joining room in order to enable Mic/Audio."};if("connected"!==this._roomStatus)return Ia.debug("Room status is not connected yet!"),{success:!1,error:!0,code:"REID008",text:`Error while trying to start Mic/Audio as room not in connected status. Current room status:!${this._roomStatus}`,possibleReasons:"Did you forget to call joinRoom before enabling Mic? OR if you have already initiated the joinRoom process, then Mic will be enabled automatically once room join process completes."};if(this._micProducer)return Ia.debug("Mic is already active!"),{success:!1,warning:!0,code:"RWID002",text:"Error while trying to start Mic/Audio. Mic/Audio is already active!"};if(!this._device.canProduce("audio"))return Ia.error("enableMic() | cannot produce audio"),{success:!1,error:!0,code:"REID009",text:"Error while trying to start Mic/Audio. Mic/Audio couldnot be activated due to limitations on this device. If you think this device has a functional Mic and the problem persists even after multiple retries, please contact technical support with the error code."};let c,d;n&&"boolean"==typeof n&&(this.data.inputParams.forcePCMU=n),o&&"boolean"==typeof o&&(this.data.inputParams.forcePCMA=o),t&&"boolean"==typeof t&&(this.data.inputParams.autoGainControl=t),s&&"boolean"==typeof s&&(this.data.inputParams.echoCancellation=s),r&&"boolean"==typeof r&&(this.data.inputParams.noiseSuppression=r),a&&Number.isInteger(a)&&a<64e3&&a>8e3&&(this.data.inputParams.sampleRate=a),i&&Number.isInteger(i)&&i>0&&i<3&&(this.data.inputParams.channelCount=i);try{if(this._externalVideo)this._micStream=await this._getExternalVideoStream(),c=this._micStream.getAudioTracks()[0].clone();else{if(e?(d=this._deviceList.audioDevices.find((t=>t.deviceId===e)),d||(Ia.warn("Selected audio input deviceId:%s not found",e),d=this._deviceList.audioDevices[0])):d=this._deviceList.audioDevices[0],this._mic.device=d,!d)return Ia.error("No mic device found! Can't start audio!"),{success:!1,reason:"No mic available for starting audio!"};e&&this.data.inputParams.audioDeviceId!==e&&(this.data.inputParams.audioDeviceId=e),Ia.debug("enableMic() | calling getUserMedia()");try{this._micStream=await navigator.mediaDevices.getUserMedia({audio:{deviceId:{ideal:d.deviceId},echoCancellation:this.data.inputParams.echoCancellation,noiseSuppression:this.data.inputParams.noiseSuppression,autoGainControl:this.data.inputParams.autoGainControl,sampleRate:this.data.inputParams.sampleRate,channelCount:this.data.inputParams.channelCount}}),c=this._micStream.getAudioTracks()[0]}catch(Kn){throw new Error("Error while acquiring mic. Possible issue with audio constraint values",Kn)}}this._micProducer=await this._sendTransport.produce({track:c,codecOptions:this.data.inputParams.forcePCMU||this.data.inputParams.forcePCMA?void 0:{opusStereo:!1,opusDtx:!0,opusFec:!0,opusNack:!0},codec:this.data.inputParams.forcePCMU?this._device.rtpCapabilities.codecs.find((e=>"audio/pcmu"===e.mimeType.toLowerCase())):this.data.inputParams.forcePCMA?this._device.rtpCapabilities.codecs.find((e=>"audio/pcma"===e.mimeType.toLowerCase())):void 0}),this._producers.set("audio",{id:this._micProducer.id,paused:this._micProducer.paused,track:this._micProducer.track,rtpParameters:this._micProducer.rtpParameters,codec:this._micProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("micStart",{peerId:this.data.inputParams.peerId,audioTrack:this._micProducer.track,type:"local"}),this._micProducer.on("transportclose",(()=>{this._micProducer=null})),this._micProducer.on("trackended",(()=>{this.disableMic().catch((()=>{}))}))}catch(p){Ia.error("enableMic() | failed:%o",p),this.emit("error",{code:"EID002",text:"Error enabling microphone!"}),c&&c.stop()}}async disableMic(){if(Ia.debug("disableMic()"),this._micStream&&this._micStream.getAudioTracks().forEach((e=>e.stop())),this._micProducer){this._micProducer.close(),this._producers.delete("audio");try{await this._cignal.request("closeProducer",{producerId:this._micProducer.id}),this.emit("micEnd",{peerId:this.data.inputParams.peerId,audioTrack:null,type:"local"})}catch(e){this.emit("error",{code:"EID003",text:"Error disabling microphone!"})}this._micProducer=null}}async muteMic(){Ia.debug("muteMic()"),this._micProducer.pause();try{await this._cignal.request("pauseProducer",{producerId:this._micProducer.id}),this.emit("peerMuted",{peerId:this.data.inputParams.peerId,type:"local"})}catch(e){Ia.error("muteMic() | failed: %o",e),this.emit("error",{code:"EID004",text:"Error muting local microphone!"})}}async unmuteMic(){Ia.debug("unmuteMic()"),this._micProducer.resume();try{await this._cignal.request("resumeProducer",{producerId:this._micProducer.id}),this.emit("peerUnMuted",{peerId:this.data.inputParams.peerId,type:"local"})}catch(e){Ia.error("unmuteMic() | failed: %o",e),this.emit("error",{code:"EID005",text:"Error unmuting local microphone!"})}}async enableCam({deviceId:e=null,videoResolution:t,forceVp8:r,forceVp9:s,forceH264:i,h264Profile:a,forceFPS:n,enableWebcamLayers:o,numSimulcastStreams:c,videoBitRates:d}={}){if(Ia.debug("enableWebcam()"),!this.data.inputParams.produce)return Ia.debug("Produce status is set to false!"),{success:!1,error:!0,code:"REID004",text:"Error while trying to start Camera. Produce flag need to set to true while joining room in order to enable Camera."};if("connected"!==this._roomStatus)return Ia.debug("Room status is not connected yet!"),{success:!1,error:!0,code:"REID005",text:`Error while trying to start Camera as room not in connected status. Current room status:!${this._roomStatus}`,possibleReasons:"Did you forget to call joinRoom before enabling Camera? OR if you have already initiated the joinRoom process, then Camera will be enabled automatically once room join process completes."};if(this._webcamProducer)return Ia.debug("Camera is already active!"),{success:!1,warning:!0,code:"RWID003",text:"Error while trying to start Camera. Camera is already active!"};if(!this._device.canProduce("video"))return Ia.error("enableWebcam() | cannot produce video"),{success:!1,error:!0,code:"REID006",text:"Error while trying to start Camera. Camera couldnot be activated due to limitations on this device. If you think this device has a functional camera and the problem persists even after multiple retries, please contact technical support with the error code."};let p,l;["hd","vga","qvga"].includes(t)&&(this.data.inputParams.videoResolution=t,this._webcam.resolution=t),r&&"boolean"==typeof r&&(this.data.inputParams.forceVp8=r),s&&"boolean"==typeof s&&(this.data.inputParams.forceVp9=s),i&&"boolean"==typeof i&&(this.data.inputParams.forceH264=i),a&&["high","low"].includes(a.toLowerCase())&&(this.data.inputParams.h264Profile=a),n&&Number.isInteger(n)&&n<65&&n>5&&(this.data.inputParams.forceFPS=25),o&&"boolean"==typeof o&&(this.data.inputParams.enableWebcamLayers=o,this._enableWebcamLayers=o),c&&Number.isInteger(c)&&c<4&&c>0&&(this.data.inputParams.numSimulcastStreams=c,this._numSimulcastStreams=c),Array.isArray(d)&&d.length>=1&&d.length<=3&&d.every((e=>Number.isInteger(e)&&e>=75&&e<=800))?(Ia.debug("videoBitRates values are correct"),this.data.inputParams.videoBitRates=d):Ia.warn("videobitrates values should be an integer array with maximum 3 elements and minimum 1 element. The values in the array are '[700,250,75]'");try{if(this._externalVideo)l={label:"external video"},this._webCamStream=await this._getExternalVideoStream(),p=this._webCamStream.getVideoTracks()[0].clone();else{e?(l=this._deviceList.videoDevices.find((t=>t.deviceId===e)),l||(Ia.warn("Selected deviceId:%s not found",e),l=this._deviceList.videoDevices[0])):l=this._deviceList.videoDevices[0],this._webcam.device=l;const{resolution:t}=this._webcam;if(!l)return Ia.error("No wencam device found! Can't start video!"),{success:!1,reason:"No Webcam available for starting video!"};e&&this.data.inputParams.videoDeviceId!==e&&(this.data.inputParams.videoDeviceId=e),Ia.debug("enableWebcam() | calling getUserMedia()"),this._webCamStream=await navigator.mediaDevices.getUserMedia({video:{deviceId:{ideal:l.deviceId},...xa[t],frameRate:{ideal:this.data.inputParams.forceFPS}}}),p=this._webCamStream.getVideoTracks()[0]}let t,r;const s={videoGoogleStartBitrate:1e3};if(Ia.debug("Current device codec options are:%O",this._device.rtpCapabilities.codecs),this._forceVP8){if(r=this._device.rtpCapabilities.codecs.find((e=>"video/vp8"===e.mimeType.toLowerCase())),!r)throw new Error("desired VP8 codec+configuration is not supported")}else if(this._forceH264){if("high"===this.data.inputParams.h264Profile?r=this._device.rtpCapabilities.codecs.find((e=>"video/h264"===e.mimeType.toLowerCase()&&"4d001f"===e.parameters["profile-level-id"])):"low"===this.data.inputParams.h264Profile&&(r=this._device.rtpCapabilities.codecs.find((e=>"video/h264"===e.mimeType.toLowerCase()&&"42e01f"===e.parameters["profile-level-id"]))),!r)throw new Error("desired H264 codec+configuration is not supported");Ia.debug("Selected h264 codec is:%O",r)}else if(this._forceVP9&&(r=this._device.rtpCapabilities.codecs.find((e=>"video/vp9"===e.mimeType.toLowerCase())),!r))throw new Error("desired VP9 codec+configuration is not supported");if(this._enableWebcamLayers){const e=this._device.rtpCapabilities.codecs.find((e=>"video"===e.kind));this._forceVP9&&r||"video/vp9"===e.mimeType.toLowerCase()?t=[{maxBitrate:5e6,scalabilityMode:this._webcamScalabilityMode||"L3T3_KEY"}]:(t=[{scaleResolutionDownBy:1,maxBitrate:1e3*this.data.inputParams.videoBitRates[0],scalabilityMode:this._webcamScalabilityMode||"L1T3"}],this._numSimulcastStreams>1&&t.unshift({scaleResolutionDownBy:2,maxBitrate:1e3*this.data.inputParams.videoBitRates[1],scalabilityMode:this._webcamScalabilityMode||"L1T3"}),this._numSimulcastStreams>2&&t.unshift({scaleResolutionDownBy:4,maxBitrate:1e3*this.data.inputParams.videoBitRates[2],scalabilityMode:this._webcamScalabilityMode||"L1T3"}))}this._webcamProducer=await this._sendTransport.produce({track:p,encodings:t,codecOptions:s,codec:r}),this._producers.set("video",{id:this._webcamProducer.id,deviceLabel:l.label,type:this._getWebcamType(l),paused:this._webcamProducer.paused,track:this._webcamProducer.track,rtpParameters:this._webcamProducer.rtpParameters,codec:this._webcamProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("videoStart",{peerId:this.data.inputParams.peerId,videoTrack:this._webcamProducer.track,type:"local"}),this._webcamProducer.on("transportclose",(()=>{this._webcamProducer=null})),this._webcamProducer.on("trackended",(()=>{this.disableWebcam().catch((()=>{}))}))}catch(h){Ia.error("enableWebcam() | failed:%o",h),this.emit("error",{code:"EID011",text:"Enable Webcam failed!"}),p&&p.stop()}}async disableCam(){if(Ia.debug("disableWebcam()"),this._webcamProducer){this._webcamProducer.close(),this._producers.delete("video");try{await this._cignal.request("closeProducer",{producerId:this._webcamProducer.id}),this.emit("videoEnd",{peerId:this.data.inputParams.peerId,videoTrack:null})}catch(e){this.emit("error",{code:"EID012",text:"Error while closing server side producer!"})}this._webcamProducer=null}}async _updateWebcams(){Ia.debug("_updateWebcams()"),this._webcams=new Map,Ia.debug("_updateWebcams() | calling enumerateDevices()");const e=await navigator.mediaDevices.enumerateDevices();for(const i of e)"videoinput"===i.kind&&this._webcams.set(i.deviceId,i);const t=Array.from(this._webcams.values()),r=t.length,s=this._webcam.device?this._webcam.device.deviceId:void 0;Ia.debug("_updateWebcams() [webcams:%o]",t),0===r?this._webcam.device=null:this._webcams.has(s)||(this._webcam.device=t[0])}async _getExternalVideoStream(){if(this._externalVideoStream)return this._externalVideoStream;if(this._externalVideo.readyState<3&&await new Promise((e=>this._externalVideo.addEventListener("canplay",e))),this._externalVideo.captureStream)this._externalVideoStream=this._externalVideo.captureStream();else{if(!this._externalVideo.mozCaptureStream)throw new Error("video.captureStream() not supported");this._externalVideoStream=this._externalVideo.mozCaptureStream()}return this._externalVideoStream}_getWebcamType(e){return/(back|rear)/i.test(e.label)?(Ia.debug("_getWebcamType() | it seems to be a back camera"),"back"):(Ia.debug("_getWebcamType() | it seems to be a front camera"),"front")}async changeVideoInput({resolution:e,deviceId:t,fps:r}){if(this._webcamProducer){return await this._changeVideoInput({resolution:e,deviceId:t,fps:r})}return Ia.error("No webcam producer available!"),{success:!1,reason:"You are not sharing your camera yet. Camera Input can be changed to a new camera only when you are sharing an existing camera. "}}async _changeVideoInput({resolution:e,deviceId:t,fps:r}){Ia.info("_changeVideoInput() | Inside"),e&&["hd","vga","qvga"].includes(e)?this._webcam.resolution=e:Ia.warn("Invalid video resolution value "),r&&Number.isInteger(r)&&r<65&&r>5?this.data.inputParams.forceFPS=r:Ia.warn("forceFPS should be a number between 5 to 65, default value is 25 fps.");let s=this._deviceList.videoDevices.find((e=>t&&e.deviceId===t));if(!s)return Ia.error("The selected deviceId not found!"),{success:!1,reason:"Invalid deviceId!"};this._webcam.device=s;try{this._webCamStream.getVideoTracks().forEach((e=>e.stop())),this._webCamStream=null,Ia.debug("changeVideoInput() | calling getUserMedia()"),this._webCamStream=await navigator.mediaDevices.getUserMedia({video:{deviceId:{ideal:s.deviceId},...xa[this._webcam.resolution],frameRate:{ideal:this.data.inputParams.forceFPS}}});const e=this._webCamStream.getVideoTracks()[0];Ia.debug("The new video track is:%O",e),await this._webcamProducer.replaceTrack({track:e});let t=this._producers.get("video");return t.deviceLabel=s.label,t.type=this._getWebcamType(s),t.track=this._webcamProducer.track,Ia.debug("Updated producer values are:%O",t),this._producers.set("video",t),this.emit("videoStart",{peerId:this.data.inputParams.peerId,videoTrack:this._webcamProducer.track,type:"local"}),{success:!0}}catch(i){return Ia.error("Error while changing input:%O",i),{success:!1,reason:"Couldn't change video input",error:i}}}async changeAudioInput({autoGainControl:e,echoCancellation:t,noiseSuppression:r,sampleRate:s,channelCount:i,deviceId:a}){if(this._micProducer){return await this._changeAudioInput({autoGainControl:e,echoCancellation:t,noiseSuppression:r,sampleRate:s,channelCount:i,deviceId:a})}return{success:!1,reason:"You are not sharing your mic yet. Mic Input can be changed to a new mic only when you are sharing an existing mic. "}}async _changeAudioInput({autoGainControl:e,echoCancellation:t,noiseSuppression:r,sampleRate:s,channelCount:i,deviceId:a}){e&&"boolean"==typeof e&&(this.data.inputParams.autoGainControl=e),t&&"boolean"==typeof t&&(this.data.inputParams.echoCancellation=Boolean(t)),r&&"boolean"==typeof r&&(this.data.inputParams.noiseSuppression=Boolean(r)),s&&Number.isInteger(s)&&s<64e3&&s>8e3&&(this.data.inputParams.sampleRate=s),i&&Number.isInteger(i)&&i>0&&i<3&&(this.data.inputParams.channelCount=i);let n=this._deviceList.audioDevices.find((e=>a&&e.deviceId===a));if(!n)return{success:!1,reason:"Invalid deviceId!"};this._mic.device=n,this._micStream&&this._micStream.getAudioTracks().forEach((e=>e.stop())),this._micStream=null;try{this._micStream=await navigator.mediaDevices.getUserMedia({audio:{deviceId:{ideal:n.deviceId},echoCancellation:this.data.inputParams.echoCancellation,noiseSuppression:this.data.inputParams.noiseSuppression,autoGainControl:this.data.inputParams.autoGainControl,sampleRate:this.data.inputParams.sampleRate,channelCount:this.data.inputParams.channelCount}});const e=this._micStream.getAudioTracks()[0];this._micProducer.replaceTrack({track:e});let t=this._producers.get("audio");return t.deviceLabel=n.label,t.track=this._micProducer.track,Ia.debug("Updated producer values are:%O",t),this._producers.set("audio",t),this.emit("micStart",{peerId:this.data.inputParams.peerId,audioTrack:this._micProducer.track,type:"local"}),{success:!0}}catch(Kn){return Ia.error("Error while changing input:%O",Kn),{success:!1,reason:"Couldn't change audio input",err:Kn}}}async enableShare({shareAudio:e=!1,enableSharingLayers:t=!0,shareBitRates:r=[2500,1250,500]}={}){if(Ia.debug("enableShare()"),!this.data.inputParams.produce)return Ia.debug("Produce status is set to false!"),{success:!1,error:!0,code:"REID003",text:"Error while trying to start screen share. Produce flag need to set to true while joining room in order to enable screen share."};if("connected"!==this._roomStatus)return Ia.debug("Room status is not connected yet!"),{success:!1,error:!0,code:"REID001",text:`Error while trying to start screen share as room not in connected status. Current room status:!${this._roomStatus}`,possibleReasons:"Did you forget to call joinRoom before enabling screen share? OR if you have already initiated the joinRoom process, then try enabling screen share after some seconds."};if(this._shareProducer)return Ia.debug("Screen share is already active!"),{success:!1,warning:!0,code:"RWID001",text:"Error while trying to start screen share. Screen share is already active!"};if(!this._device.canProduce("video"))return Ia.error("enableShare() | cannot produce video"),{success:!1,error:!0,code:"REID002",text:"Error while trying to start screen share. Screen share couldnot be activated due to limitations on this device. If you think this device is capable of screen share and the problem persists even after multiple retries, please contact technical support with the error code."};let s,i;this._enableSharingLayers="boolean"!=typeof t?Boolean(t):t,Array.isArray(r)&&r.length>=1&&r.length<=3&&r.every((e=>Number.isInteger(e)&&e>=500&&e<=2500))?this.data.inputParams.shareBitRates=r:this.data.inputParams.shareBitRates=[2500,1250,500];try{Ia.debug("enableShare() | calling getDisplayMedia()");const t=await navigator.mediaDevices.getDisplayMedia({audio:!!e,video:{displaySurface:"monitor",logicalSurface:!0,cursor:!0,width:{max:1920},height:{max:1080},frameRate:{max:30}}});if(!t)return Ia.error("Unable to capture screen."),void this.emit("error",{code:"EID013",text:"Error while trying to start screen share. Not able to capture screen!"});let r,a;i=t.getAudioTracks()[0],i&&(this._shareAudioProducer=await this._sendTransport.produce({track:i,codecOptions:this.data.inputParams.forcePCMU?void 0:{opusStereo:!1,opusDtx:!0,opusFec:!0,opusNack:!0},codec:this.data.inputParams.forcePCMU?this._device.rtpCapabilities.codecs.find((e=>"audio/pcmu"===e.mimeType.toLowerCase())):void 0}),this._producers.set("ssAudio",{id:this._shareAudioProducer.id,type:"shareAudio",paused:this._shareAudioProducer.paused,track:this._shareAudioProducer.track,rtpParameters:this._shareAudioProducer.rtpParameters,codec:this._shareAudioProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("ssAudioStart",{peerId:this.data.inputParams.peerId,audioTrack:this._shareAudioProducer.track,type:"local"})),s=t.getVideoTracks()[0];const n={videoGoogleStartBitrate:1e3};if(this._forceVP8){if(a=this._device.rtpCapabilities.codecs.find((e=>"video/vp8"===e.mimeType.toLowerCase())),!a)throw new Error("desired VP8 codec+configuration is not supported")}else if(this._forceH264){if("high"===this.data.inputParams.h264Profile?a=this._device.rtpCapabilities.codecs.find((e=>"video/h264"===e.mimeType.toLowerCase()&&"4d001f"===e.parameters["profile-level-id"])):"low"===this.data.inputParams.h264Profile&&(a=this._device.rtpCapabilities.codecs.find((e=>"video/h264"===e.mimeType.toLowerCase()&&"42e01f"===e.parameters["profile-level-id"]))),!a)throw new Error("desired H264 codec+configuration is not supported");Ia.debug("Selected h264 codec is:%O",a)}else if(this._forceVP9&&(a=this._device.rtpCapabilities.codecs.find((e=>"video/vp9"===e.mimeType.toLowerCase())),!a))throw new Error("desired VP9 codec+configuration is not supported");if(this._enableSharingLayers){const e=this._device.rtpCapabilities.codecs.find((e=>"video"===e.kind));this._forceVP9&&a||"video/vp9"===e.mimeType.toLowerCase()?r=[{maxBitrate:1e3*this.data.inputParams.shareBitRates[0],scalabilityMode:this._sharingScalabilityMode||"L3T3",dtx:!0}]:(r=[{scaleResolutionDownBy:1,maxBitrate:1e3*this.data.inputParams.shareBitRates[0],scalabilityMode:this._sharingScalabilityMode||"L1T3",dtx:!0}],this._numSimulcastStreams>1&&r.unshift({scaleResolutionDownBy:2,maxBitrate:1e3*this.data.inputParams.shareBitRates[1],scalabilityMode:this._sharingScalabilityMode||"L1T3",dtx:!0}),this._numSimulcastStreams>2&&r.unshift({scaleResolutionDownBy:4,maxBitrate:1e3*this.data.inputParams.shareBitRates[2],scalabilityMode:this._sharingScalabilityMode||"L1T3",dtx:!0}))}this._shareProducer=await this._sendTransport.produce({track:s,encodings:r,codecOptions:n,codec:a,appData:{share:!0}}),this._producers.set("ssVideo",{id:this._shareProducer.id,type:"shareVideo",paused:this._shareProducer.paused,track:this._shareProducer.track,rtpParameters:this._shareProducer.rtpParameters,codec:this._shareProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("ssVideoStart",{peerId:this.data.inputParams.peerId,videoTrack:this._shareProducer.track,type:"local"}),this._shareProducer.on("transportclose",(()=>{this._shareProducer=null})),this._shareProducer.on("trackended",(()=>{this.disableShare().catch((()=>{}))}))}catch(a){Ia.error("enableShare() | failed:%o",a),"NotAllowedError"!==a.name&&this.emit("error",{code:"EID014",text:`Error while trying to start screen share. Error is: ${a}!`}),s&&s.stop()}}async disableShare(){if(Ia.debug("disableShare()"),!this._shareProducer)return Ia.warn("Screen share doesn't seem to be on!"),void this.emit("error",{code:"EID017",text:"Error while trying to stop screen share. Is the screen share on!"});if(this._shareProducer.close(),this._shareAudioProducer){this._shareAudioProducer.close();try{await this._cignal.request("closeProducer",{producerId:this._shareAudioProducer.id}),this.emit("ssAudioStop",{peerId:this.data.inputParams.peerId,videoTrack:null,type:"local"})}catch(e){this.emit("error",{code:"EID015",text:`Error while trying to stop screen share audio. Error is: ${e}!`})}}try{await this._cignal.request("closeProducer",{producerId:this._shareProducer.id}),this.emit("ssVideoStop",{peerId:this.data.inputParams.peerId,videoTrack:null,type:"local"})}catch(e){this.emit("error",{code:"EID016",text:`Error while trying to stop screen share video. Error is: ${e}!`})}this._shareAudioProducer=null,this._shareProducer=null}}const Aa=async e=>new Promise((t=>setTimeout((()=>t()),e))),ja=new Set(["240p","360p","480p","720p","1080p","1440p","2160p"]);function Na(e){return!!Array.isArray(e)&&e.every((e=>ja.has(e)))}const Ba=new Ut("utils-verifyFiles"),Fa=["mp4"];function $a(e,t){try{const r=new URL(e).pathname;return r.split(".").pop().toLowerCase()===t.toLowerCase()}catch{return!1}}const Ua=new TextEncoder,qa=new TextDecoder;function Va(e){if(Uint8Array.fromBase64)return Uint8Array.fromBase64("string"==typeof e?e:qa.decode(e),{alphabet:"base64url"});let t=e;t instanceof Uint8Array&&(t=qa.decode(t)),t=t.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return function(e){if(Uint8Array.fromBase64)return Uint8Array.fromBase64(e);const t=atob(e),r=new Uint8Array(t.length);for(let s=0;s<t.length;s++)r[s]=t.charCodeAt(s);return r}(t)}catch{throw new TypeError("The input to be decoded is not correctly encoded.")}}class Wa extends Error{static code="ERR_JOSE_GENERIC";code="ERR_JOSE_GENERIC";constructor(e,t){super(e,t),this.name=this.constructor.name,Error.captureStackTrace?.(this,this.constructor)}}class Ka extends Wa{static code="ERR_JWT_CLAIM_VALIDATION_FAILED";code="ERR_JWT_CLAIM_VALIDATION_FAILED";claim;reason;payload;constructor(e,t,r="unspecified",s="unspecified"){super(e,{cause:{claim:r,reason:s,payload:t}}),this.claim=r,this.reason=s,this.payload=t}}class Ha extends Wa{static code="ERR_JWT_EXPIRED";code="ERR_JWT_EXPIRED";claim;reason;payload;constructor(e,t,r="unspecified",s="unspecified"){super(e,{cause:{claim:r,reason:s,payload:t}}),this.claim=r,this.reason=s,this.payload=t}}class Ga extends Wa{static code="ERR_JOSE_ALG_NOT_ALLOWED";code="ERR_JOSE_ALG_NOT_ALLOWED"}class za extends Wa{static code="ERR_JOSE_NOT_SUPPORTED";code="ERR_JOSE_NOT_SUPPORTED"}class Ja extends Wa{static code="ERR_JWS_INVALID";code="ERR_JWS_INVALID"}class Qa extends Wa{static code="ERR_JWT_INVALID";code="ERR_JWT_INVALID"}class Xa extends Wa{static code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED";code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED";constructor(e="signature verification failed",t){super(e,t)}}function Ya(e,t="algorithm.name"){return new TypeError(`CryptoKey does not support this operation, its ${t} must be ${e}`)}function Za(e,t){return e.name===t}function en(e){return parseInt(e.name.slice(4),10)}function tn(e,t,r){switch(t){case"HS256":case"HS384":case"HS512":{if(!Za(e.algorithm,"HMAC"))throw Ya("HMAC");const r=parseInt(t.slice(2),10);if(en(e.algorithm.hash)!==r)throw Ya(`SHA-${r}`,"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!Za(e.algorithm,"RSASSA-PKCS1-v1_5"))throw Ya("RSASSA-PKCS1-v1_5");const r=parseInt(t.slice(2),10);if(en(e.algorithm.hash)!==r)throw Ya(`SHA-${r}`,"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!Za(e.algorithm,"RSA-PSS"))throw Ya("RSA-PSS");const r=parseInt(t.slice(2),10);if(en(e.algorithm.hash)!==r)throw Ya(`SHA-${r}`,"algorithm.hash");break}case"Ed25519":case"EdDSA":if(!Za(e.algorithm,"Ed25519"))throw Ya("Ed25519");break;case"ML-DSA-44":case"ML-DSA-65":case"ML-DSA-87":if(!Za(e.algorithm,t))throw Ya(t);break;case"ES256":case"ES384":case"ES512":{if(!Za(e.algorithm,"ECDSA"))throw Ya("ECDSA");const r=function(e){switch(e){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}(t);if(e.algorithm.namedCurve!==r)throw Ya(r,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}!function(e,t){if(!e.usages.includes(t))throw new TypeError(`CryptoKey does not support this operation, its usages must include ${t}.`)}(e,r)}function rn(e,t,...r){if((r=r.filter(Boolean)).length>2){const t=r.pop();e+=`one of type ${r.join(", ")}, or ${t}.`}else 2===r.length?e+=`one of type ${r[0]} or ${r[1]}.`:e+=`of type ${r[0]}.`;return null==t?e+=` Received ${t}`:"function"==typeof t&&t.name?e+=` Received function ${t.name}`:"object"==typeof t&&null!=t&&t.constructor?.name&&(e+=` Received an instance of ${t.constructor.name}`),e}function sn(e,t,...r){return rn(`Key for the ${e} algorithm must be `,t,...r)}function an(e){return"CryptoKey"===e?.[Symbol.toStringTag]}function nn(e){return"KeyObject"===e?.[Symbol.toStringTag]}const on=e=>an(e)||nn(e),cn=(...e)=>{const t=e.filter(Boolean);if(0===t.length||1===t.length)return!0;let r;for(const s of t){const e=Object.keys(s);if(r&&0!==r.size)for(const t of e){if(r.has(t))return!1;r.add(t)}else r=new Set(e)}return!0};const dn=e=>{if("object"!=typeof(t=e)||null===t||"[object Object]"!==Object.prototype.toString.call(e))return!1;var t;if(null===Object.getPrototypeOf(e))return!0;let r=e;for(;null!==Object.getPrototypeOf(r);)r=Object.getPrototypeOf(r);return Object.getPrototypeOf(e)===r};const pn=async e=>{if(!e.alg)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');const{algorithm:t,keyUsages:r}=function(e){let t,r;switch(e.kty){case"AKP":switch(e.alg){case"ML-DSA-44":case"ML-DSA-65":case"ML-DSA-87":t={name:e.alg},r=e.priv?["sign"]:["verify"];break;default:throw new za('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(e.alg){case"PS256":case"PS384":case"PS512":t={name:"RSA-PSS",hash:`SHA-${e.alg.slice(-3)}`},r=e.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":t={name:"RSASSA-PKCS1-v1_5",hash:`SHA-${e.alg.slice(-3)}`},r=e.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":t={name:"RSA-OAEP",hash:`SHA-${parseInt(e.alg.slice(-3),10)||1}`},r=e.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new za('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(e.alg){case"ES256":t={name:"ECDSA",namedCurve:"P-256"},r=e.d?["sign"]:["verify"];break;case"ES384":t={name:"ECDSA",namedCurve:"P-384"},r=e.d?["sign"]:["verify"];break;case"ES512":t={name:"ECDSA",namedCurve:"P-521"},r=e.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":t={name:"ECDH",namedCurve:e.crv},r=e.d?["deriveBits"]:[];break;default:throw new za('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"OKP":switch(e.alg){case"Ed25519":case"EdDSA":t={name:"Ed25519"},r=e.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":t={name:e.crv},r=e.d?["deriveBits"]:[];break;default:throw new za('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;default:throw new za('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:t,keyUsages:r}}(e),s={...e};return"AKP"!==s.kty&&delete s.alg,delete s.use,crypto.subtle.importKey("jwk",s,t,e.ext??(!e.d&&!e.priv),e.key_ops??r)},ln=(e,t,r,s,i)=>{if(void 0!==i.crit&&void 0===s?.crit)throw new e('"crit" (Critical) Header Parameter MUST be integrity protected');if(!s||void 0===s.crit)return new Set;if(!Array.isArray(s.crit)||0===s.crit.length||s.crit.some((e=>"string"!=typeof e||0===e.length)))throw new e('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');let a;a=void 0!==r?new Map([...Object.entries(r),...t.entries()]):t;for(const n of s.crit){if(!a.has(n))throw new za(`Extension Header Parameter "${n}" is not recognized`);if(void 0===i[n])throw new e(`Extension Header Parameter "${n}" is missing`);if(a.get(n)&&void 0===s[n])throw new e(`Extension Header Parameter "${n}" MUST be integrity protected`)}return new Set(s.crit)},hn=(e,t)=>{if(void 0!==t&&(!Array.isArray(t)||t.some((e=>"string"!=typeof e))))throw new TypeError(`"${e}" option must be an array of strings`);if(t)return new Set(t)};function un(e){return dn(e)&&"string"==typeof e.kty}let mn;const fn=async(e,t,r,s=!1)=>{mn||=new WeakMap;let i=mn.get(e);if(i?.[r])return i[r];const a=await pn({...t,alg:r});return s&&Object.freeze(e),i?i[r]=a:mn.set(e,{[r]:a}),a},gn=async(e,t)=>{if(e instanceof Uint8Array)return e;if(an(e))return e;if(nn(e)){if("secret"===e.type)return e.export();if("toCryptoKey"in e&&"function"==typeof e.toCryptoKey)try{return((e,t)=>{mn||=new WeakMap;let r=mn.get(e);if(r?.[t])return r[t];const s="public"===e.type,i=!!s;let a;if("x25519"===e.asymmetricKeyType){switch(t){case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":break;default:throw new TypeError("given KeyObject instance cannot be used for this algorithm")}a=e.toCryptoKey(e.asymmetricKeyType,i,s?[]:["deriveBits"])}if("ed25519"===e.asymmetricKeyType){if("EdDSA"!==t&&"Ed25519"!==t)throw new TypeError("given KeyObject instance cannot be used for this algorithm");a=e.toCryptoKey(e.asymmetricKeyType,i,[s?"verify":"sign"])}switch(e.asymmetricKeyType){case"ml-dsa-44":case"ml-dsa-65":case"ml-dsa-87":if(t!==e.asymmetricKeyType.toUpperCase())throw new TypeError("given KeyObject instance cannot be used for this algorithm");a=e.toCryptoKey(e.asymmetricKeyType,i,[s?"verify":"sign"])}if("rsa"===e.asymmetricKeyType){let r;switch(t){case"RSA-OAEP":r="SHA-1";break;case"RS256":case"PS256":case"RSA-OAEP-256":r="SHA-256";break;case"RS384":case"PS384":case"RSA-OAEP-384":r="SHA-384";break;case"RS512":case"PS512":case"RSA-OAEP-512":r="SHA-512";break;default:throw new TypeError("given KeyObject instance cannot be used for this algorithm")}if(t.startsWith("RSA-OAEP"))return e.toCryptoKey({name:"RSA-OAEP",hash:r},i,s?["encrypt"]:["decrypt"]);a=e.toCryptoKey({name:t.startsWith("PS")?"RSA-PSS":"RSASSA-PKCS1-v1_5",hash:r},i,[s?"verify":"sign"])}if("ec"===e.asymmetricKeyType){const r=new Map([["prime256v1","P-256"],["secp384r1","P-384"],["secp521r1","P-521"]]).get(e.asymmetricKeyDetails?.namedCurve);if(!r)throw new TypeError("given KeyObject instance cannot be used for this algorithm");"ES256"===t&&"P-256"===r&&(a=e.toCryptoKey({name:"ECDSA",namedCurve:r},i,[s?"verify":"sign"])),"ES384"===t&&"P-384"===r&&(a=e.toCryptoKey({name:"ECDSA",namedCurve:r},i,[s?"verify":"sign"])),"ES512"===t&&"P-521"===r&&(a=e.toCryptoKey({name:"ECDSA",namedCurve:r},i,[s?"verify":"sign"])),t.startsWith("ECDH-ES")&&(a=e.toCryptoKey({name:"ECDH",namedCurve:r},i,s?[]:["deriveBits"]))}if(!a)throw new TypeError("given KeyObject instance cannot be used for this algorithm");return r?r[t]=a:mn.set(e,{[t]:a}),a})(e,t)}catch(Kn){if(Kn instanceof TypeError)throw Kn}let r=e.export({format:"jwk"});return fn(e,r,t)}if(un(e))return e.k?Va(e.k):fn(e,e,t,!0);throw new Error("unreachable")},bn=e=>e?.[Symbol.toStringTag],_n=(e,t,r)=>{if(void 0!==t.use){let e;switch(r){case"sign":case"verify":e="sig";break;case"encrypt":case"decrypt":e="enc"}if(t.use!==e)throw new TypeError(`Invalid key for this operation, its "use" must be "${e}" when present`)}if(void 0!==t.alg&&t.alg!==e)throw new TypeError(`Invalid key for this operation, its "alg" must be "${e}" when present`);if(Array.isArray(t.key_ops)){let s;switch(!0){case"verify"===r:case"dir"===e:case e.includes("CBC-HS"):s=r;break;case e.startsWith("PBES2"):s="deriveBits";break;case/^A\d{3}(?:GCM)?(?:KW)?$/.test(e):s=!e.includes("GCM")&&e.endsWith("KW")?"unwrapKey":r;break;case"encrypt"===r:s="wrapKey";break;case"decrypt"===r:s=e.startsWith("RSA")?"unwrapKey":"deriveBits"}if(s&&!1===t.key_ops?.includes?.(s))throw new TypeError(`Invalid key for this operation, its "key_ops" must include "${s}" when present`)}return!0},yn=(e,t,r)=>{e.startsWith("HS")||"dir"===e||e.startsWith("PBES2")||/^A(?:128|192|256)(?:GCM)?(?:KW)?$/.test(e)||/^A(?:128|192|256)CBC-HS(?:256|384|512)$/.test(e)?((e,t,r)=>{if(!(t instanceof Uint8Array)){if(un(t)){if(function(e){return"oct"===e.kty&&"string"==typeof e.k}(t)&&_n(e,t,r))return;throw new TypeError('JSON Web Key for symmetric algorithms must have JWK "kty" (Key Type) equal to "oct" and the JWK "k" (Key Value) present')}if(!on(t))throw new TypeError(sn(e,t,"CryptoKey","KeyObject","JSON Web Key","Uint8Array"));if("secret"!==t.type)throw new TypeError(`${bn(t)} instances for symmetric algorithms must be of type "secret"`)}})(e,t,r):((e,t,r)=>{if(un(t))switch(r){case"decrypt":case"sign":if(function(e){return"oct"!==e.kty&&("AKP"===e.kty&&"string"==typeof e.priv||"string"==typeof e.d)}(t)&&_n(e,t,r))return;throw new TypeError("JSON Web Key for this operation be a private JWK");case"encrypt":case"verify":if(function(e){return"oct"!==e.kty&&void 0===e.d&&void 0===e.priv}(t)&&_n(e,t,r))return;throw new TypeError("JSON Web Key for this operation be a public JWK")}if(!on(t))throw new TypeError(sn(e,t,"CryptoKey","KeyObject","JSON Web Key"));if("secret"===t.type)throw new TypeError(`${bn(t)} instances for asymmetric algorithms must not be of type "secret"`);if("public"===t.type)switch(r){case"sign":throw new TypeError(`${bn(t)} instances for asymmetric algorithm signing must be of type "private"`);case"decrypt":throw new TypeError(`${bn(t)} instances for asymmetric algorithm decryption must be of type "private"`)}if("private"===t.type)switch(r){case"verify":throw new TypeError(`${bn(t)} instances for asymmetric algorithm verifying must be of type "public"`);case"encrypt":throw new TypeError(`${bn(t)} instances for asymmetric algorithm encryption must be of type "public"`)}})(e,t,r)},wn=async(e,t,r)=>{if(t instanceof Uint8Array){if(!e.startsWith("HS"))throw new TypeError(((e,...t)=>rn("Key must be ",e,...t))(t,"CryptoKey","KeyObject","JSON Web Key"));return crypto.subtle.importKey("raw",t,{hash:`SHA-${e.slice(-3)}`,name:"HMAC"},!1,[r])}return tn(t,e,r),t},vn=async(e,t,r,s)=>{const i=await wn(e,t,"verify");((e,t)=>{if(e.startsWith("RS")||e.startsWith("PS")){const{modulusLength:r}=t.algorithm;if("number"!=typeof r||r<2048)throw new TypeError(`${e} requires key modulusLength to be 2048 bits or larger`)}})(e,i);const a=((e,t)=>{const r=`SHA-${e.slice(-3)}`;switch(e){case"HS256":case"HS384":case"HS512":return{hash:r,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:r,name:"RSA-PSS",saltLength:parseInt(e.slice(-3),10)>>3};case"RS256":case"RS384":case"RS512":return{hash:r,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:r,name:"ECDSA",namedCurve:t.namedCurve};case"Ed25519":case"EdDSA":return{name:"Ed25519"};case"ML-DSA-44":case"ML-DSA-65":case"ML-DSA-87":return{name:e};default:throw new za(`alg ${e} is not supported either by JOSE or your javascript runtime`)}})(e,i.algorithm);try{return await crypto.subtle.verify(a,i,r,s)}catch{return!1}};async function Sn(e,t,r){if(!dn(e))throw new Ja("Flattened JWS must be an object");if(void 0===e.protected&&void 0===e.header)throw new Ja('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==e.protected&&"string"!=typeof e.protected)throw new Ja("JWS Protected Header incorrect type");if(void 0===e.payload)throw new Ja("JWS Payload missing");if("string"!=typeof e.signature)throw new Ja("JWS Signature missing or incorrect type");if(void 0!==e.header&&!dn(e.header))throw new Ja("JWS Unprotected Header incorrect type");let s={};if(e.protected)try{const t=Va(e.protected);s=JSON.parse(qa.decode(t))}catch{throw new Ja("JWS Protected Header is invalid")}if(!cn(s,e.header))throw new Ja("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const i={...s,...e.header};let a=!0;if(ln(Ja,new Map([["b64",!0]]),r?.crit,s,i).has("b64")&&(a=s.b64,"boolean"!=typeof a))throw new Ja('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:n}=i;if("string"!=typeof n||!n)throw new Ja('JWS "alg" (Algorithm) Header Parameter missing or invalid');const o=r&&hn("algorithms",r.algorithms);if(o&&!o.has(n))throw new Ga('"alg" (Algorithm) Header Parameter value not allowed');if(a){if("string"!=typeof e.payload)throw new Ja("JWS Payload must be a string")}else if("string"!=typeof e.payload&&!(e.payload instanceof Uint8Array))throw new Ja("JWS Payload must be a string or an Uint8Array instance");let c=!1;"function"==typeof t&&(t=await t(s,e),c=!0),yn(n,t,"verify");const d=function(...e){const t=e.reduce(((e,{length:t})=>e+t),0),r=new Uint8Array(t);let s=0;for(const i of e)r.set(i,s),s+=i.length;return r}(Ua.encode(e.protected??""),Ua.encode("."),"string"==typeof e.payload?Ua.encode(e.payload):e.payload);let p;try{p=Va(e.signature)}catch{throw new Ja("Failed to base64url decode the signature")}const l=await gn(t,n);if(!(await vn(n,l,p,d)))throw new Xa;let h;if(a)try{h=Va(e.payload)}catch{throw new Ja("Failed to base64url decode the payload")}else h="string"==typeof e.payload?Ua.encode(e.payload):e.payload;const u={payload:h};return void 0!==e.protected&&(u.protectedHeader=s),void 0!==e.header&&(u.unprotectedHeader=e.header),c?{...u,key:l}:u}const Rn=e=>Math.floor(e.getTime()/1e3),Pn=86400,Cn=/^(\+|\-)? ?(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i,kn=e=>{const t=Cn.exec(e);if(!t||t[4]&&t[1])throw new TypeError("Invalid time period format");const r=parseFloat(t[2]);let s;switch(t[3].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":s=Math.round(r);break;case"minute":case"minutes":case"min":case"mins":case"m":s=Math.round(60*r);break;case"hour":case"hours":case"hr":case"hrs":case"h":s=Math.round(3600*r);break;case"day":case"days":case"d":s=Math.round(r*Pn);break;case"week":case"weeks":case"w":s=Math.round(604800*r);break;default:s=Math.round(31557600*r)}return"-"===t[1]||"ago"===t[4]?-s:s},Tn=e=>e.includes("/")?e.toLowerCase():`application/${e.toLowerCase()}`,Dn=(e,t)=>"string"==typeof e?t.includes(e):!!Array.isArray(e)&&t.some(Set.prototype.has.bind(new Set(e)));async function En(e,t,r){const s=await async function(e,t,r){if(e instanceof Uint8Array&&(e=qa.decode(e)),"string"!=typeof e)throw new Ja("Compact JWS must be a string or Uint8Array");const{0:s,1:i,2:a,length:n}=e.split(".");if(3!==n)throw new Ja("Invalid Compact JWS");const o=await Sn({payload:i,protected:s,signature:a},t,r),c={payload:o.payload,protectedHeader:o.protectedHeader};return"function"==typeof t?{...c,key:o.key}:c}(e,t,r);if(s.protectedHeader.crit?.includes("b64")&&!1===s.protectedHeader.b64)throw new Qa("JWTs MUST NOT use unencoded payload");const i=function(e,t,r={}){let s;try{s=JSON.parse(qa.decode(t))}catch{}if(!dn(s))throw new Qa("JWT Claims Set must be a top-level JSON object");const{typ:i}=r;if(i&&("string"!=typeof e.typ||Tn(e.typ)!==Tn(i)))throw new Ka('unexpected "typ" JWT header value',s,"typ","check_failed");const{requiredClaims:a=[],issuer:n,subject:o,audience:c,maxTokenAge:d}=r,p=[...a];void 0!==d&&p.push("iat"),void 0!==c&&p.push("aud"),void 0!==o&&p.push("sub"),void 0!==n&&p.push("iss");for(const m of new Set(p.reverse()))if(!(m in s))throw new Ka(`missing required "${m}" claim`,s,m,"missing");if(n&&!(Array.isArray(n)?n:[n]).includes(s.iss))throw new Ka('unexpected "iss" claim value',s,"iss","check_failed");if(o&&s.sub!==o)throw new Ka('unexpected "sub" claim value',s,"sub","check_failed");if(c&&!Dn(s.aud,"string"==typeof c?[c]:c))throw new Ka('unexpected "aud" claim value',s,"aud","check_failed");let l;switch(typeof r.clockTolerance){case"string":l=kn(r.clockTolerance);break;case"number":l=r.clockTolerance;break;case"undefined":l=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:h}=r,u=Rn(h||new Date);if((void 0!==s.iat||d)&&"number"!=typeof s.iat)throw new Ka('"iat" claim must be a number',s,"iat","invalid");if(void 0!==s.nbf){if("number"!=typeof s.nbf)throw new Ka('"nbf" claim must be a number',s,"nbf","invalid");if(s.nbf>u+l)throw new Ka('"nbf" claim timestamp check failed',s,"nbf","check_failed")}if(void 0!==s.exp){if("number"!=typeof s.exp)throw new Ka('"exp" claim must be a number',s,"exp","invalid");if(s.exp<=u-l)throw new Ha('"exp" claim timestamp check failed',s,"exp","check_failed")}if(d){const e=u-s.iat;if(e-l>("number"==typeof d?d:kn(d)))throw new Ha('"iat" claim timestamp check failed (too far in the past)',s,"iat","check_failed");if(e<0-l)throw new Ka('"iat" claim timestamp check failed (it should be in the past)',s,"iat","check_failed")}return s}(s.protectedHeader,s.payload,r),a={payload:i,protectedHeader:s.protectedHeader};return"function"==typeof t?{...a,key:s.key}:a}const In=new Ut("Room"),xn={small:{width:{ideal:160},height:{ideal:120}},qvga:{width:{ideal:320},height:{ideal:240}},vga:{width:{ideal:640},height:{ideal:480}},hd:{width:{ideal:1280},height:{ideal:720}}};let Mn;const On=new class{constructor(){this.queue=new Map}push(e,t){this.queue.set(e,t)}get(e){return this.queue.get(e)}remove(e){this.queue.delete(e)}};class Ln extends Wt.EventEmitter{static async listDevices(){if(Mn)return In.info("Device list already exists:%O",Mn),{success:!0,deviceList:Mn};const e=await Ea();return e.success?(Mn=e.deviceList,{success:!0,deviceList:e.deviceList}):{success:!1,reason:e.reason}}static async init({sessionToken:e,roomId:t,peerId:r}={}){if(!e)throw new Error("Session token is required to join the room.");try{let s;In.info("session token:%s",e);try{const t=(new TextEncoder).encode("samvyo_tech_321"),{payload:r}=await En(e,t,{algorithms:["HS256"]});s=r,In.info("Decoded token:",s)}catch(Kn){throw In.error("JWT verification failed:",Kn),Kn instanceof Ha?new Error("Session token has expired"):Kn instanceof Ka?new Error("Session token not yet active"):new Error("Invalid session token: "+Kn.message)}if(!s||"object"!=typeof s)throw new Error("Invalid token format");const{data:i,signallingServerUrl:a}=s;if(!i||!a)throw new Error("Missing required token data");return r||(r=Rs()),t||(t=Ss()),new Ln({peerId:r,roomId:t,outputData:{sessionToken:e,innerSessionToken:i,signallingServerUrl:a}})}catch(s){throw In.error("Failed to initialize:",s.message),s}}constructor({peerId:e,roomId:t,outputData:r}){super(),this._closed=!1,this._roomStatus="initialised",this._roomDisplayName=null,this._running=!1,this._cignal=null,this._socket=null,this._sendTransport=null,this._recvTransport=null,this._device=new Ct.Device,this._webCamProducer=null,this._micProducer=null,this._shareProducer=null,this._shareAudioProducer=null,this._producers=new Map,this._consumers=new Map,this._peers=new Map,this._data={...r,inputParams:{peerId:e,roomId:t,roomType:"conferencing"}},this._micStream=null,this._webCamStream=null,this._webcam={device:null,resolution:"hd"},this._mic={device:null},this._deviceList=Mn||null,this._externalVideo=null,this._externalVideoStream=null,this._forceVP8=!1,this._forceH264=!1,this._forceVP9=!1,this._enableWebcamLayers=!0,this._numSimulcastStreams=3,this._enableSharingLayers=!0,this._client=Bt.parse(window.navigator.userAgent),this._routerRtpCapabilities=null,this._recordingStartedByMe={},this._cignalConnected=!1,this._reconnectionInitiated=!1,this._restartIceInProgressSendTransport=!1,this._restartIceInProgressRecvTransport=!1,this._activeSpeaker=null,this.initLocal()}get closed(){return this._closed}get data(){return this._data}set data(e){throw new Error("Setting the whole data object is not possible!")}get peers(){return this._peers}set peers(e){throw new Error("Setting the whole peers object is not possible!")}get transports(){return{produce:this._sendTransport,consume:this._recvTransport}}set transports(e){throw new Error("Setting of transport is not possible!")}get videoStream(){return this._webCamStream}get audioStream(){return this._micStream}get clientAgent(){return this._client}get activeParameters(){return this._data.inputParams}get deviceList(){return this._deviceList?this._deviceList:{videoDevices:[],audioDevices:[],audioOutputDevices:[]}}set deviceList(e){throw new Error("Setting of deviceList is not possible!")}get currentlyActiveSpeaker(){return this._activeSpeaker}set currentlyActiveSpeaker(e){throw new Error("Setting of currentActivespeaker is not possible!")}get roomDisplayName(){return this._roomDisplayName}set roomDisplayName(e){throw new Error("Setting of roomDisplayName is not possible!")}async initLocal(){const e=Ct.detectDevice();In.debug("The device is:%O",e),await this._initSocket()}async _initSocket(){let e=this;const t=this.data.signallingServerUrl.replace(/^(http|https):\/\//,""),r=`wss://${t}/?sessionToken=${this.data.sessionToken}&roomId=${this.data.inputParams.roomId}&peerId=${this.data.inputParams.peerId}&roomType=${this.data.inputParams.roomType}`;In.info(`Going to create a new socket! with address: ${t}`),this._socket=new vs(r,!0),this._listenToSocket(),this._socket.on("notify",(({type:e,title:t,message:r})=>{this.emit("notification",{eventType:e,eventText:`${t}: ${r}`,roomId:this.data.inputParams.roomId,peerId:this.data.inputParams.peerId})})),this._socket.on("roomStartedP2p",(e=>{In.info("P2P room successfully started"),this._running=!0})),this._socket.on("userError",(t=>{In.error("User Error happened with message:%O",t),e.emit("notification",{eventType:t.title,eventText:`${t.text}`})})),this._socket.on("validationAlert",(e=>{In.info("Validation alert happened")})),this._socket.on("alreadyActive",(({title:e,text:t})=>{this.emit("notification",{eventType:"alreadyActive",eventText:"This peer already has an active connection",roomId:this.data.inputParams.roomId,peerId:this.data.inputParams.peerId})})),this._socket.on("passwordDisabled",(()=>{In.info("password disabled by moderator!"),this.emit("notification",{eventType:"passwordDisabled",eventText:"Password for this room has been disabled by moderator",roomId:this.data.inputParams.roomId})})),this._socket.on("close",(({code:e,reason:t})=>{if(In.info(`socket closed with code ${e}`),4500!==e&&4100!==e){let r=t||"Connection to server closed unexpectedly! Trying to reconnect.";In.info(`socket close code is${e} with reason ${r}`)}else In.info("Socket is now closed!"),this.close()})),this._socket.on("connected",(async()=>{In.info("Socket connected"),e.pc&&e._sendTransport&&e._recvTransport?roomType===ha.P2P&&e.pc?(In.info("Socket seems to be reconnected in mid call! RestartIce needed for p2p call."),"failed"!==e.pc.iceConnectionState&&"disconnected"!==e.pc.iceConnectionState||e.restartICE()):(In.debug("Ice restarts for mediasoup transports for a joined peer"),e._sendTransport&&["Failed","disconnected"].includes(e._sendTransport.connectionState)?(In.debug("Restart ice for sendtransport"),e.restartIce(e._sendTransport.id,"send")):In.error("Send transport not available!"),e._recvTransport&&["Failed","disconnected"].includes(e._recvTransport.connectionState)?(In.debug("Restart ice for recvtransport"),e.restartIce(e._recvTransport.id,"recv")):In.error("Recv transport not available!")):(In.info("Connection getting connected for first time"),this.emit("initSuccess"))})),this._socket.on("defaultJoinStatus",(async e=>{In.info(" Socket defaultjoinstatus:%O",e)}))}_sendMessage(e){this._socket.send({usageType:"sdk",...e})}_listenToSocket(){this._socket.on("message",(e=>{try{switch("currentlyActiveSpeaker"===e.id||"allStats"===e.id||In.info("message in Room is:%O",e),e.id){case"chatMessage":this.processChatMessage(e);break;case"customMessage":this.processCustomMessage(e);break;case"existingParticipants":this.onExistingParticipants(e);break;case"newPeerJoin":this.onNewPeer(e);break;case"recordingError":this.handleRecordingErrors(e);break;case"moderatorAuthentication":this.authenticateUser(e);break;case"authenticationRequested":this.authenticationRequested(e);break;case"toggleMyMic":this.toggleMyMic(e);break;case"toggleMyCamera":this.toggleMyCamera(e);break;case"logMeOut":this.logMeOutNew(e);break;case"userAlreadyAuthenticated":this.hideUserAuthenticationDialog(e);break;case"peerLeft":this.peerLeft(e);break;case"recordingStarted":this.setRecordingStatusStarted(e);break;case"recordingStopped":this.setRecordingStatusEnded(e);break;case"startDefaultRecording":this.startRecording(e);break;case"mediaToggled":this.mediaToggled(e);break;case"processingStarted":this.handleProcessingStart(e);break;case"processingCompleted":this.handleProcessingCompletion(e);break;case"processingError":this.handleProcessingError(e);break;case"createTransportResponse":this.handleCreateTransportRequest(e);break;case"connectTransportResponse":this.handleConnectTransportRequest(e);break;case"connectRecvTransportResponse":this.handleConnectRecvTransportRequest(e);break;case"sendTrackResponse":this.handleSendTrackRequest(e);break;case"recvTrackResponse":this.handleRecvTrackRequest(e);break;case"roomClosedByModerator":this.leaveRoomCommon(),this.roomClosed();break;case"currentlyActiveSpeaker":this.setCurrentlyActiveSpeaker(e);break;case"restartIceResponse":this.restartIceResponse(e);break;case"consumerClosed":this.closeConsumer(e);break;case"handRaise":this.handleHandRaise(e);break;case"updateCId":this.updateCId(e);break;case"upgradeParticipant":this.handleUpgradeParticipant(e);break;case"downgradeParticipant":this.handleDowngradeParticipant(e);break;case"switchMicOff":this.handleSwitchMicOff(e);break;case"screenShareLimitReached":this.handleScreenShareLimitReached(e);break;case"upgradeLimitReached":this.handleUpgradeLimitReached(e);break;case"modUpgradeReq":this.handleModUpgradeReq(e);break;case"lockUnlockRoom":this.handleLockUnlockRoom(e);break;case"peersWaiting":this.handlePeersWaiting(e);break;case"remotePeerJoin":this.handleRemotePeerJoin(e);break;case"offer":In.debug("inside offer"),this.handleOffer(e);break;case"answer":In.debug("inside answer"),this.handleAnswer(e);break;case"candidate":In.debug("inside handle candidate"),this.handleCandidate(e.candidate);break;case"p2pRoomClosed":In.debug("inside p2p room close"),this.leaveRoomNewP2p("leaveAndCloseRoom");break;case"p2pUserLeft":In.debug("inside p2p user left"),this.userLeftRoom(e);break;case"iceRestart":this.handleIceRestart(e);break;case"iceRestarted":this.handleIceRestartResponse(e);break;case"screenShareP2p":this.handleScreenShareP2p(e);break;default:In.warn("Unrecognized message:%o",e)}}catch(Kn){In.error("listentomessage:%O",Kn)}}))}joinRoom=async({peerName:e=null,produce:t=!0,produceAudio:r=!0,produceVideo:s=!0,consume:i=!0,videoResolution:a="hd",forceVp8:n=!1,forceVp9:o=!1,forceH264:c=!1,h264Profile:d="high",forcePCMU:p=!1,forcePCMA:l=!1,forceFPS:h=25,enableWebcamLayers:u=!0,numSimulcastStreams:m=3,autoGainControl:f=!0,echoCancellation:g=!0,noiseSuppression:b=!0,sampleRate:_=44e3,channelCount:y=1,videoBitRates:w=[700,250,75],share:v=!1,shareAudio:S=!1,enableSharingLayers:R=!0,shareBitRates:P=[2500,1250,500],audioDeviceId:C=null,videoDeviceId:k=null,peerType:T="participant",roomType:D=ha.CONFERENCING,authenticationRequired:E=!1,password:I=null,roomDisplayName:x=null}={})=>{In.info("Going to join room"),["hd","vga","qvga"].includes(a)||(In.warn("Invalid video resolution value. setting it to default value of 'hd' "),a="hd"),"boolean"!=typeof t&&(In.warn("Produe should either be true or false"),t=Boolean(t)),"boolean"!=typeof r&&(In.warn("ProduceAudio should either be true or false"),r=Boolean(r)),"boolean"!=typeof s&&(In.warn("ProduceVideo should either be true or false"),s=Boolean(s)),"boolean"!=typeof i&&(In.warn("Consume should either be true or false"),i=Boolean(i)),"boolean"!=typeof n&&(In.warn("forceVp8 should either be true or false"),n=Boolean(n)),"boolean"!=typeof o&&(In.warn("forceVp9 should either be true or false"),o=Boolean(o)),"boolean"!=typeof c&&(In.warn("forceH264 should either be true or false"),c=Boolean(c)),["high","low"].includes(d.toLowerCase())||(In.warn("h264Profile should either be 'high' or 'low'"),d="high"),(!Number.isInteger(h)||Number.isInteger(h)&&(h>65||h<5))&&(In.warn("forceFPS should be a number between 5 to 65, default value is 25 fps."),h=25),"boolean"!=typeof u&&(In.warn("enableWebcamLayers should either be true or false"),u=Boolean(u)),(!Number.isInteger(m)||Number.isInteger(m)&&(m>3||m<1))&&(In.warn("numSimulcastStreams should be a number between 1 to 3, default value is 3."),m=3),Array.isArray(w)&&w.length>=1&&w.length<=3&&w.every((e=>Number.isInteger(e)&&e>=75&&e<=800))?In.debug("videoBitRates values are correct"):(In.warn("videobitrates values should be an integer array with maximum 3 elements and minimum 1 element. The values in the array are '[700,250,75]'"),w=[700,250,75]),"boolean"!=typeof p&&(In.warn("forcePCMU should either be true or false"),p=Boolean(p)),"boolean"!=typeof l&&(In.warn("forcePCMA should either be true or false"),l=Boolean(l)),"boolean"!=typeof f&&(In.warn("autoGainControl should either be true or false"),f=Boolean(f)),"boolean"!=typeof g&&(In.warn("echoCancellation should either be true or false"),g=Boolean(g)),"boolean"!=typeof b&&(In.warn("noiseSuppression should either be true or false"),b=Boolean(b)),(!Number.isInteger(_)||Number.isInteger(_)&&(_>64e3||_<8e3))&&(In.warn("sampleRate should be a number between 8000 to 64000, default value is 44000 Khz."),_=44e3),(!Number.isInteger(y)||Number.isInteger(y)&&(y>2||y<1))&&(In.warn("sampleRate should be a number between 1 to 2, default value is 1, which is a mono audio."),y=1),"boolean"!=typeof v&&(In.warn("share should either be true or false"),v=Boolean(v)),"boolean"!=typeof S&&(In.warn("shareAudio should either be true or false"),S=Boolean(S)),"boolean"!=typeof R&&(In.warn("enableSharingLayers should either be true or false"),R=Boolean(R)),Array.isArray(P)&&P.length>=1&&P.length<=3&&P.every((e=>Number.isInteger(e)&&e>=500&&e<=2500))?In.debug("shareBitRates values are correct"):(In.warn("sharebitrates values should be an integer array with maximum 3 elements and minimum 1 element. The values in the array are '[2500,1250,500]'"),P=[2500,1250,500]),["moderator","participant","attendee"].includes(T)?In.debug("peerType is valid:%s",T):(T="participant",In.debug("peerType is invalid:%s. By default set to: participant",T)),await this.listDevicesInternal(),this._videoResolution=a,this._forceVP8=Boolean(n),this._forceH264=Boolean(c),this._forceVP9=Boolean(o),this._enableWebcamLayers=Boolean(u),this._numSimulcastStreams=m,this._enableSharingLayers=Boolean(R);try{e||(e=Ta()),this.data.inputParams={...this.data.inputParams,peerName:e,produce:t,produceAudio:r,produceVideo:s,consume:i,videoResolution:a,forceVp8:n,forceVp9:o,forceH264:c,h264Profile:d,forceFPS:h,forcePCMU:p,forcePCMA:l,enableWebcamLayers:u,numSimulcastStreams:m,autoGainControl:f,echoCancellation:g,noiseSuppression:b,sampleRate:_,channelCount:y,videoBitRates:w,share:v,shareAudio:S,enableSharingLayers:R,shareBitRates:P,audioDeviceId:C,videoDeviceId:k,peerType:T,roomType:D,authenticationRequired:E,password:I,roomDisplayName:x},In.info("input params are:%O",this.data.inputParams);const M={id:"joinRoom",type:"r",peerId:this.data.inputParams.peerId,participantType:"attendee"===T?"viewer":T,roomType:D,roomDisplayName:x||`room-${1e5+Math.round(9e5*Math.random())}`,browser:this._client,name:this.data.inputParams.peerName,room:this.data.inputParams.roomId,authenticationRequired:E,isRoomPassword:!!I,roomPassword:I||null,usageType:"sdk"};this._sendMessage(M)}catch(M){return In.error("Failed to join room:",M.message),{success:!1,reason:M.message}}};authenticateUser=e=>{In.info("Moderator authentication requested:%O",e),this.emit("moderatorAuthentication",{moderatorName:e.moderatorName,requesterName:e.requesterName,requesterPeerId:e.requesterPeerId,text:e.title})};authenticationRequested=e=>{In.info("Moderator authentication requested:%O",e),this.emit("authenticationRequested",{requesterName:e.requesterName,requesterPeerId:this.data.inputParams.peerId,text:e.title})};allowRoomJoin=e=>{if(!e)return In.error("peerId can't be undefined!"),{success:!1,reason:"PeerId can't be undefined"};In.info("Allow user to join room:%O",e);let t={id:"userAuthenticated",peerId:e,roomName:this.data.inputParams.roomId,moderator:this.data.inputParams.peerId};this._sendMessage(t)};denyRoomJoin=e=>{if(!e)return In.error("peerId can't be undefined!"),{success:!1,reason:"PeerId can't be undefined"};In.info("Deny user to join room:%O",e);let t={id:"userDenied",peerId:e,roomName:this.data.inputParams.roomId,moderator:this.data.inputParams.peerId};this._sendMessage(t)};hideUserAuthenticationDialog=e=>{In.debug("authentication already done message:%o",e),this.emit("moderatorAuthStatus",{requesterId:e.requesterId,moderatorActed:e.peerId})};onNewPeer(e){const{peerId:t,displayName:r,participantType:s}=e;this._peers.set(t,{displayName:r,participantType:s,consumers:[]}),this.emit("newPeer",{peerId:t,peerName:r,type:this.data.inputParams.peerId===t?"local":"remote",peerRole:s})}async onExistingParticipants(e){if(In.debug("Onexisting participant message:%O",e),this._routerRtpCapabilities=e.routerRtpCapabilities,this._roomStatus="connected",this._roomDisplayName=e.roomDisplayName,this._running=!0,this._socket._roomJoined=!0,this.emit("newPeer",{peerId:this.data.inputParams.peerId,peerName:this.data.inputParams.peerName,type:"local",peerRole:this.data.inputParams.peerType}),this.data.inputParams.produce?await this._createSendTransport():In.debug("Produce is false!"),this.data.inputParams.consume){await this._createRecvTransport();let t=this;e.peers&&e.peers.length>0&&e.peers.forEach((e=>{t.emit("newPeer",{peerId:e.peerId,peerName:e.name,type:"remote",peerRole:e.participantType})}))}else In.debug("Consume is false!")}sendCustomMessage=(e,t="general",r=null,s,i,a={})=>{const n={id:"customMessage",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,data:e,type:t,recieverPeerId:r,senderType:s,messageType:i,customData:a};In.debug("Room sendCustomMessage",n),this._sendMessage(n)};processCustomMessage=e=>{In.debug("Room processCustomMessage",e),this.emit("customMessage",e)};updateCId=e=>{In.debug("Received updateCId message",e),e.targetPeerId!==this.data.inputParams.peerId&&e.targetPeerId||this.emit("updateCId",{message:e,cId:e.cId,peerId:this.data.inputParams.peerId,isMyCId:e.targetPeerId===this.data.inputParams.peerId})};setCurrentlyActiveSpeaker(e){const{peerId:t,volume:r}=e.activeSpeaker;this._activeSpeaker=e.activeSpeaker,this.emit("activeSpeaker",{peerId:t,volume:r})}_createSendTransport=async()=>{In.debug("Room _createSendTransport");try{this._device.loaded||(In.debug("Room _createSendTransport","Going to load device with routerrtpcapabilities"),await this._device.load({routerRtpCapabilities:this._routerRtpCapabilities}));let e="send";this._sendTransport||this._sendMessage({id:"createTransport",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,direction:e})}catch(Kn){In.error("Room _createSendTransport",Kn)}};_createRecvTransport=async()=>{this._device.loaded||(In.debug("loading device for creating recv transport"),await this._device.load({routerRtpCapabilities:this._routerRtpCapabilities}));this._recvTransport||(In.debug("receive transport created"),this._sendMessage({id:"createTransport",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,direction:"recv"}))};handleCreateTransportRequest=async e=>{In.debug("Room handleCreateTransportRequest():%O",e);let t,{transportOptions:r,direction:s}=e;try{if("recv"===s)t=await this._device.createRecvTransport(r),In.debug("Room",`handleCreateTransportRequest() recv transport created ${t.id}`),this._recvTransport=t,this.handleRecvTransportListeners();else{if("send"!==s)throw new Error(`bad transport 'direction': ${s}`);t=await this._device.createSendTransport(r),In.debug("Room",`handleCreateTransportRequest() send transport created [id:%s]${t.id}`),this._sendTransport=t,this.handleSendTransportListeners(),this.produceMedia()}}catch(i){}};handleSendTransportListeners=()=>{this._sendTransport.on("connect",this.handleTransportConnectEvent),this._sendTransport.on("produce",this.handleTransportProduceEvent);let e=this;this._sendTransport.on("connectionstatechange",(async t=>{if(In.debug(`ConferenceRoom sendTransport connectionState ${t} & socketconnection state ${this._socket._ws.readyState}`),"failed"===t||"disconnected"===t)if(1===this._socket._ws.readyState)e.restartIce(this._sendTransport.id,"send");else{for(;1!==this._socket._ws.readyState;)In.debug(`socket not yet ready with state- ${this._socket._ws.readyState}`),await Aa(1500);"connected"===this._roomStatus&&this.restartIce(this._sendTransport.id,"send")}In.debug("ConferenceRoom",`send transport connection state change [state:%s]${t}`)}))};handleTransportConnectEvent=({dtlsParameters:e},t,r)=>{try{const r=e=>{In.debug("connect-transport action"),t(),On.remove("connectTransport")};On.push("connectTransport",r);let s={id:"connectTransport",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,transportId:this._sendTransport.id,dtlsParameters:e,direction:"send"};this._sendMessage(s)}catch(s){In.error("handleTransportConnectEvent() failed [error:%o]",s),r(s)}};handleTransportProduceEvent=({kind:e,rtpParameters:t,appData:r},s,i)=>{try{const i=e=>{In.debug("handleTransportProduceEvent callback [data:%o]",e),s({id:e.producerId}),On.remove("produce")};On.push("produce",i);let a="cam-audio"===r.mediaTag&&void 0!==this.data.inputParams.audioStatus&&!this.data.inputParams.audioStatus;In.debug(`handleTransportProduceEvent() | pause status->${a}`);let n={id:"sendTrack",transportId:this._sendTransport.id,peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,kind:e,rtpParameters:t,paused:a,appData:r,clientOs:this._client.os.name,browser:this._client.browser};this._sendMessage(n)}catch(a){In.error("handleTransportProduceEvent() failed [error:%o]",a),i(a)}};produceMedia=async()=>{this.data.inputParams.produce?(this.data.inputParams.produceAudio?this.enableMic({deviceId:this.data.inputParams.audioDeviceId?this.data.inputParams.audioDeviceId:null}):In.debug("No need to produce audio!"),this._device.canProduce("video")&&(this.data.inputParams.produceVideo?this.enableCam({deviceId:this.data.inputParams.videoDeviceId?this.data.inputParams.videoDeviceId:null}):In.debug("No need to produce video!"),this.data.inputParams.share&&this.enableShare({shareAudio:this.data.inputParams.shareAudio,enableSharingLayers:this._enableSharingLayers,shareBitRates:this.data.inputParams.shareBitRates}))):In.warn("produce is false!")};handleRecvTransportListeners=async()=>{this._recvTransport.on("connect",this.handleRecvTransportConnectEvent);let e=this;this._recvTransport.on("connectionstatechange",(async t=>{if(In.debug(`ConferenceRoom recvTransport connectionState ${t} & socketconnection state ${this._socket._ws.readyState}`),"failed"===t||"disconnected"===t)if(1===this._socket._ws.readyState)e.restartIce(this._recvTransport.id,"recv");else{for(;1!==this._socket._ws.readyState;)In.debug(`socket not yet ready with state- ${this._socket._ws.readyState}`),await Aa(1e3);"connected"===this._roomStatus&&e.restartIce(this._recvTransport.id,"recv")}In.debug("ConferenceRoom",`Recv transport connection state change [state:%s]${t}`)}));let t={id:"transportsAvailable",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,rtpCapabilities:this._device.rtpCapabilities};this._sendMessage(t)};handleRecvTransportConnectEvent=({dtlsParameters:e},t,r)=>{try{const r=e=>{In.debug("ConferenceRoom","connect-recv-transport action"),t(),On.remove("connectRecvTransport")};On.push("connectRecvTransport",r);let s={id:"connectTransport",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,transportId:this._recvTransport.id,dtlsParameters:e,direction:"recv"};this._sendMessage(s)}catch(s){In.error("handleTransportConnectEvent() failed [error:%o]",s),r(s)}};handleRecvTrackRequest=async e=>{if(In.debug("Room handleRecvTrackRequest",e),!this.data.inputParams.consume)return void In.warn("I do not want to consume");let{senderPeerId:t,mediaTag:r,sender:s,audioStatus:i,videoStatus:a,senderParticipantType:n,type:o,producerPaused:c,...d}=e;In.debug("New consumer created",d),d.id=d.consumerId,delete d.consumerId,In.debug("ConferenceRoom",`senderPeerId is ->${t}`);let p=await this._recvTransport.consume({...d,streamId:`${t}-${"screen-video"===r||"screen-audio"===r?"share":"mic-webcam"}`,appData:{peerId:t,mediaTag:r}});for(;this._recvTransport&&"connected"!==this._recvTransport.connectionState;)In.debug(`recv transport connstate${this._recvTransport.connectionState}`),await Aa(100);this._consumers.set(p.id,p),p.on("transportclose",(()=>{this._consumers.delete(p.id)}));const{spatialLayers:l,temporalLayers:h}=Ct.parseScalabilityMode(p.rtpParameters.encodings[0].scalabilityMode),u=this._peers.get(this.data.inputParams.peerId);In.debug(`Consumer created for sender peerId ${t} for kind ${p.kind} for receiver peerId ${this.data.inputParams.peerId}`),In.info("The old peer data is :%O",u),u?(u["screen-video"===r||"screen-audio"===r?`ss${p.kind}`:p.kind]={consumerId:p.id,type:o,locallyPaused:!1,remotelyPaused:c,rtpParameters:p.rtpParameters,spatialLayers:l,temporalLayers:h,preferredSpatialLayer:l-1,preferredTemporalLayer:h-1,priority:1,codec:p.rtpParameters.codecs[0].mimeType.split("/")[1],track:p.track,share:"screen-video"===r||"screen-audio"===r},In.info("The new peer data is :%O",u),this._peers.set(this.data.inputParams.peerId,u)):(In.info("Peer not found!"),this._peers.set(this.data.inputParams.peerId,{["screen-video"===r||"screen-audio"===r?`ss${p.kind}`:p.kind]:{consumerId:p.id,type:o,locallyPaused:!1,remotelyPaused:c,rtpParameters:p.rtpParameters,spatialLayers:l,temporalLayers:h,preferredSpatialLayer:l-1,preferredTemporalLayer:h-1,priority:1,codec:p.rtpParameters.codecs[0].mimeType.split("/")[1],track:p.track,share:"screen-video"===r||"screen-audio"===r}})),await this.resumeConsumer(p),In.debug("Going to emit mic start / videostart"),"audio"===p.kind?"screen-audio"===r?this.emit("ssAudioStart",{peerId:t,audioTrack:p.track,type:"remote"}):this.emit("micStart",{peerId:t,audioTrack:p.track,type:"remote"}):"video"===p.kind&&("screen-video"===r?this.emit("ssVideoStart",{peerId:t,videoTrack:p.track,type:"remote"}):this.emit("videoStart",{peerId:t,videoTrack:p.track,type:"remote"}))};resumeConsumer=async e=>{if(e){In.debug("resume consumer",e.appData.peerId,e.appData.mediaTag);try{let t={id:"resumeConsumer",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,consumerId:e.id};this._sendMessage(t),await e.resume()}catch(t){}}};handleConnectTransportRequest=async e=>{In.debug("handleTransportConnectRequest()");try{const t=On.get("connectTransport");if(!t)throw new Error("transport-connect action was not found");await t(e)}catch(t){}};handleConnectRecvTransportRequest=async e=>{In.debug("handleTransportConnectRequest()");try{const t=On.get("connectRecvTransport");if(!t)throw new Error("recv transport-connect action was not found");await t(e)}catch(t){}};handleSendTrackRequest=async e=>{In.debug("ConferenceRoom","handleProduceRequest()");try{const t=On.get("produce");if(!t)throw new Error("produce action was not found");await t(e)}catch(t){In.error("handleProduceRequest() failed [error:%o]",t)}};mediaToggled=e=>{switch(In.debug("Media Toggled message:%O",e),e.type){case"video":In.debug(`mediaToggled() | inside case video${e.videoStatus}`);break;case"audio":In.debug(`mediaToggled() | inside case audio${e.videoStatus}`),e.audioStatus?this.emit("peerUnMuted",{peerId:e.peerId,type:"remote"}):this.emit("peerMuted",{peerId:e.peerId,type:"remote"})}};closeConsumer=e=>{let{consumerId:t}=e;const r=this._consumers.get(t);if(!r)return void In.warn("Consumer with id not found!:%s",t);const{peerId:s,mediaTag:i}=r.appData;In.debug("Consumer closed for consumerId:%s, type:%s, appData:%o",t,r?.kind,r.appData);let a="screen-audio"===i||"screen-video"===i?`ss${r.kind}`:r.kind;r.close(),this._consumers.delete(t);let n=this._peers.get(this.data.inputParams.peerId);In.debug("Peer data before deletion:%O",n),n[a]&&n[a].consumerId===t&&delete n[a],In.debug("Peer data after deletion:%O",n),this._peers.set(this.data.inputParams.peerId,n),"audio"===r?.kind?(In.debug("Going to emit micEnd, consumer closed for audio"),"screen-audio"===i?this.emit("ssAudioStop",{peerId:s,track:null,type:"remote"}):this.emit("micEnd",{peerId:s,track:null,type:"remote"})):"video"===r?.kind&&(In.debug("Going to emit videoEnd, consumer closed for video"),"screen-video"===i?this.emit("ssVideoStop",{peerId:s,track:null,type:"remote"}):this.emit("videoEnd",{peerId:s,track:null,type:"remote"}))};peerLeft=e=>{In.debug("Peer Left message is:%o",e);let{peerId:t}=e;this._peers.delete(t),this.emit("peerLeft",{peerId:t})};roomClosed=()=>{In.info("room closed by Moderator"),this._peers=null,this.emit("roomClosed",{roomId:this.data.inputParams.roomId})};close(){this._closed||(this._closed=!0,this._socket=null,this.data.inputParams={},In.info("Room close()"),this._sendTransport&&this._sendTransport.close(),this._recvTransport&&this._recvTransport.close(),this._roomStatus="closed",this._running=!1)}async leaveRoom(){In.debug("Leave room is called!!"),"connected"===this._roomStatus?(this._sendMessage({id:"leaveRoomNew",peerId:this.data.inputParams.peerId,roomLeaveType:"client"}),this.leaveRoomCommon()):In.error("The room state is:%s",this._roomStatus)}async closeRoom(){"connected"===this._roomStatus?(this._sendMessage({id:"leaveAndCloseRoom",peerId:this.data.inputParams.peerId,roomCloseType:"client"}),this.leaveRoomCommon()):In.error("The room state is:%s",this._roomStatus)}leaveRoomCommon=()=>{this._sendTransport&&(this._sendTransport.close(),this._sendTransport=null),this._recvTransport&&(this._recvTransport.close(),this._recvTransport=null),this._webCamStream&&this._webCamStream.getVideoTracks().forEach((e=>{e.stop(),In.debug("Video Track stopped")})),this._micStream&&this._micStream.getAudioTracks().forEach((e=>{e.stop(),In.debug("Mic Track stopped")})),this._roomStatus="closed",this._running=!1,this._routerRtpCapabilities=null};async listDevicesInternal(){if(navigator.mediaDevices.ondevicechange=async e=>{let t=await Da();In.info("Media devices changed!:%O",t),t.audioDevices&&t.audioDevices.length>0&&(this._deviceList.audioDevices=t.audioDevices),t.videoDevices&&t.videoDevices.length>0&&(this._deviceList.videoDevices=t.videoDevices),t.audioDevices&&t.audioDevices.length>0&&(this._deviceList.audioOutputDevices=t.audioDevicesOutput),Mn=this._deviceList,this.emit("deviceListUpdated")},!this._deviceList){const e=await Ea();if(e.success)return this._deviceList=e.deviceList,void(Mn=this._deviceList)}}restartIce=async(e,t)=>{if("send"===t&&"connected"===this._sendTransport.connectionState||"recv"===t&&"connected"===this._recvTransport.connectionState)return void In.debug("no need to restart ICE as transport now connected");In.debug("websocket is ready and connectionstate is still disconnected, therefore going to restart ICE");let r={id:"restartIce",transportId:e,roomName:this.data.inputParams.roomId,peerId:this.data.inputParams.peerId};this._sendMessage(r)};restartIceResponse=e=>{In.debug("restart ICE response:%o",e);let{transportId:t,iceParameters:r}=e;this._sendTransport&&this._sendTransport.id===t?this._sendTransport.restartIce({iceParameters:r}):this._recvTransport&&this._recvTransport.id===t&&this._recvTransport.restartIce({iceParameters:r})};startRecording=({recordingType:e=null,outputType:t=null,outputQualities:r=null}={})=>{In.debug("recording type requested is:%s,outputType:%s, outputQualties:%o",e,t,r);const s=!e||"av"!==e?.toLowerCase()&&"audiovideo"!==e?.toLowerCase()?"mergedA":"mergedAV";if((!t||"hls"!==t.toLowerCase()&&"mp4"!==t.toLowerCase())&&t)return In.error("Invalid outut type"),{success:!1,reason:`Invalid outputType: ${t}. `};if(t&&"hls"===t.toLowerCase()&&r&&!Na(r))return In.error("Invalid outut qualities"),{success:!1,reason:`Invalid outputQualities: ${JSON.stringify(r)}. Allowed values are ${Array.from(ja).join(", ")}.`};let i={id:"startRecording",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,url:window.location.hostname,type:ma,recordingStrategy:s,outputQualities:r,outputType:t?.toLowerCase()};this._sendMessage(i),this._recordingStartedByMe={...this._recordingStartedByMe,"main-room":{recordingNo:null}}};stopRecording=()=>{In.debug("going to stop recording for recordingStartedByMe:%o",this._recordingStartedByMe);let e="main-room";if(!this._recordingStartedByMe[e])return{success:!1,error:!0,code:"RRID001",text:"Error while trying to stop recording. Either the recording has not been started yet Or The same user need to stop recording who started it."};{let t={id:"stopRecording",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,recordingNo:this._recordingStartedByMe[e].recordingNo,type:ma};this._sendMessage(t),delete this._recordingStartedByMe[e],this.emit("recordingEnded",{peerId:this.data.inputParams.peerId})}};setRecordingStatusStarted=e=>{In.debug("Recording/Streaming started by moderator!!:%O",e);let{breakOutRoom:t,recordingStartTime:r,recordingNo:s,type:i}=e;[ma,fa].includes(i)&&(this._recordingStartedByMe["main-room"]?(In.debug("This recording has been started by me."),this._recordingStartedByMe["main-room"].recordingNo=s,this.emit("recordingStarted",{peerId:this.data.inputParams.peerId,startTime:r})):this.emit("recordingStarted",{startTime:r}))};setRecordingStatusEnded=e=>{In.debug("Recording ended by moderator!!, data:%O",e);let{breakOutRoom:t,type:r}=e;"rtmpStream"===r||this.emit("recordingEnded",{})};startProcessing=async({inputFiles:e=[],outputQualities:t=null,bucket:r=null,cloud:s=null,region:i=null}={})=>{In.debug("Processing of Files requested for:%o",e);const a=Math.round(1e7*Math.random()),n=await async function(e){if(Ba.info("The input files are:%o, length:%s",e,e.length),e.length>0){Ba.info("Files array length is:%s",e.length);for(const{type:t,url:r}of e){if(Ba.info("The file detais are type:%s, url:%s",t,r),!Fa.includes(t))return{success:!1,reason:`Type "${t}" is not allowed.`};if(!$a(r,t))return{success:!1,reason:`Extension mismatch for ${r}; expected .${t}`}}return{success:!0}}return{success:!1,reason:"There are no files for processing!"}}(e);if(n.success){if(t&&!Na(t))return In.error("Invalid outut qualities"),{success:!1,reason:`Invalid outputQualities: ${JSON.stringify(t)}. Allowed values are ${Array.from(ja).join(", ")}.`};this._processingStartedByMe={...this._processingStartedByMe,[a]:{}};for(const{type:t,url:r}of e)this._processingStartedByMe={...this._processingStartedByMe,[a]:{...this._processingStartedByMe[a],[r]:{type:t,url:r,status:"pending"}}};let n={id:"processVideos",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,inputFiles:e,outputQualities:t,bucket:r,cloud:s,region:i,requestId:a,type:"process"};return this._sendMessage(n),{success:!0}}return n};checkProcessingStatus=({requestId:e})=>(In.debug("Going to check processing status for request Id:%s",e),this._processingStartedByMe[e]?{success:!0,details:this._processingStartedByMe[e]}:{success:!0,details:this._processingStartedByMe});handleProcessingStart=e=>{const{processingStartTime:t,processingNo:r,requestId:s}=e;In.debug("handleProcessingStart()| received message is:%o",e),this.emit("processingStarted",{processingStartTime:t,requestId:s})};handleProcessingCompletion=e=>{const{totalProcessingTime:t,hlsfileKey:r,size:s,originalFile:i,lastFile:a,requestId:n}=e;if(In.debug("handleProcessingCompletion()| received message is:%o",e),In.debug("Before update, Total files to be processed are:%o",this._processingStartedByMe),this._processingStartedByMe[i]&&(this._processingStartedByMe={...this._processingStartedByMe,[n]:{...this._processingStartedByMe[n],[i]:{...this._processingStartedByMe[i],status:"completed",hlsfileKey:r,size:s,totalProcessingTime:t}}}),In.debug("After update, Total files to be processed are:%o",this._processingStartedByMe),this.emit("processingCompleted",e),a){In.debug("The last file processing has been completed! Remove all the files that has been completed with the same requesterId");let e={...this._processingStartedByMe};delete e[n],In.debug("After deleting the current requestId:%o",e),this._processingStartedByMe=e}};handleProcessingError=e=>{const{totalProcessingTime:t,hlsfileKey:r,size:s,originalFile:i,lastFile:a,requestId:n,error:o}=e;In.debug("handleProcessingCompletion()| received message is:%o",e),In.debug("Before update, Total files to be processed are:%o",this._processingStartedByMe),this._processingStartedByMe[i]&&(this._processingStartedByMe={...this._processingStartedByMe,[n]:{...this._processingStartedByMe[n],[i]:{...this._processingStartedByMe[i],status:"error",hlsfileKey:r,size:s,totalProcessingTime:t,error:o}}}),In.debug("After update, Total files to be processed are:%o",this._processingStartedByMe),this.emit("processingError",e)};async enableMic({deviceId:e=null,autoGainControl:t,noiseSuppression:r,echoCancellation:s,channelCount:i,sampleRate:a,forcePCMU:n,forcePCMA:o}={}){if(In.debug("enableMic()"),!this.data.inputParams.produce)return In.debug("Produce status is set to false!"),{success:!1,error:!0,code:"REID007",text:"Error while trying to start Mic/Audio. Produce flag need to set to true while joining room in order to enable Mic/Audio."};if("connected"!==this._roomStatus)return In.debug("Room status is not connected yet!"),{success:!1,error:!0,code:"REID008",text:`Error while trying to start Mic/Audio as room not in connected status. Current room status:!${this._roomStatus}`,possibleReasons:"Did you forget to call joinRoom before enabling Mic? OR if you have already initiated the joinRoom process, then Mic will be enabled automatically once room join process completes."};if(this._micProducer)return In.debug("Mic is already active!"),{success:!1,warning:!0,code:"RWID002",text:"Error while trying to start Mic/Audio. Mic/Audio is already active!"};if(!this._device.canProduce("audio"))return In.error("enableMic() | cannot produce audio"),{success:!1,error:!0,code:"REID009",text:"Error while trying to start Mic/Audio. Mic/Audio couldnot be activated due to limitations on this device. If you think this device has a functional Mic and the problem persists even after multiple retries, please contact technical support with the error code."};let c,d;n&&"boolean"==typeof n&&(this.data.inputParams.forcePCMU=n),o&&"boolean"==typeof o&&(this.data.inputParams.forcePCMA=o),t&&"boolean"==typeof t&&(this.data.inputParams.autoGainControl=t),s&&"boolean"==typeof s&&(this.data.inputParams.echoCancellation=s),r&&"boolean"==typeof r&&(this.data.inputParams.noiseSuppression=r),a&&Number.isInteger(a)&&a<64e3&&a>8e3&&(this.data.inputParams.sampleRate=a),i&&Number.isInteger(i)&&i>0&&i<3&&(this.data.inputParams.channelCount=i);try{if(this._externalVideo)this._micStream=await this._getExternalVideoStream(),c=this._micStream.getAudioTracks()[0].clone();else{if(e?(d=this._deviceList.audioDevices.find((t=>t.deviceId===e)),d||(In.warn("Selected audio input deviceId:%s not found",e),d=this._deviceList.audioDevices[0])):d=this._deviceList.audioDevices[0],this._mic.device=d,!d)return In.error("No mic device found! Can't start audio!"),{success:!1,reason:"No mic available for starting audio!"};e&&this.data.inputParams.audioDeviceId!==e&&(this.data.inputParams.audioDeviceId=e),In.debug("enableMic() | calling getUserMedia()");try{this._micStream=await navigator.mediaDevices.getUserMedia({audio:{deviceId:{exact:d.deviceId},echoCancellation:this.data.inputParams.echoCancellation,noiseSuppression:this.data.inputParams.noiseSuppression,autoGainControl:this.data.inputParams.autoGainControl,sampleRate:this.data.inputParams.sampleRate,channelCount:this.data.inputParams.channelCount}}),c=this._micStream.getAudioTracks()[0]}catch(Kn){throw new Error("Error while acquiring mic. Possible issue with audio constraint values",Kn)}}this._micProducer=await this._sendTransport.produce({track:c,codecOptions:this.data.inputParams.forcePCMU||this.data.inputParams.forcePCMA?void 0:{opusStereo:!1,opusDtx:!0,opusFec:!0,opusNack:!0},codec:this.data.inputParams.forcePCMU?this._device.rtpCapabilities.codecs.find((e=>"audio/pcmu"===e.mimeType.toLowerCase())):this.data.inputParams.forcePCMA?this._device.rtpCapabilities.codecs.find((e=>"audio/pcma"===e.mimeType.toLowerCase())):void 0,appData:{mediaTag:"cam-audio"}}),this._producers.set("audio",{id:this._micProducer.id,paused:this._micProducer.paused,track:this._micProducer.track,rtpParameters:this._micProducer.rtpParameters,codec:this._micProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("micStart",{peerId:this.data.inputParams.peerId,audioTrack:this._micProducer.track,type:"local"}),this._micProducer.on("transportclose",(()=>{this._micProducer=null})),this._micProducer.on("trackended",(()=>{this.disableMic().catch((()=>{}))}))}catch(p){In.error("enableMic() | failed:%o",p),this.emit("error",{code:"EID002",text:"Error enabling microphone!"}),c&&c.stop()}}async disableMic(){if(In.debug("disableMic()"),this._micStream&&this._micStream.getAudioTracks().forEach((e=>e.stop())),this._micProducer){this._micProducer.close(),this._producers.delete("audio");try{let e={id:"closeProducerSDK",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,type:"audio",producerId:this._micProducer.id};this._sendMessage(e),this.emit("micEnd",{peerId:this.data.inputParams.peerId,audioTrack:null,type:"local"})}catch(e){this.emit("error",{code:"EID003",text:"Error disabling microphone!"})}this._micProducer=null}}async muteMic(){In.debug("muteMic()"),this._micProducer.pause();try{let e={id:"toggleMedia",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,type:"audio",audioStatus:!1,producerId:this._micProducer.id};this._sendMessage(e),this.emit("peerMuted",{peerId:this.data.inputParams.peerId,type:"local"})}catch(e){In.error("muteMic() | failed: %o",e),this.emit("error",{code:"EID004",text:"Error muting local microphone!"})}}async unmuteMic(){In.debug("unmuteMic()"),this._micProducer.resume();try{let e={id:"toggleMedia",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,type:"audio",audioStatus:!0,producerId:this._micProducer.id};this._sendMessage(e),this.emit("peerUnMuted",{peerId:this.data.inputParams.peerId,type:"local"})}catch(e){In.error("unmuteMic() | failed: %o",e),this.emit("error",{code:"EID005",text:"Error unmuting local microphone!"})}}async enableCam({deviceId:e=null,videoResolution:t,forceVp8:r,forceVp9:s,forceH264:i,h264Profile:a,forceFPS:n,enableWebcamLayers:o,numSimulcastStreams:c,videoBitRates:d}={}){if(In.debug("enableWebcam()"),!this.data.inputParams.produce)return In.debug("Produce status is set to false!"),{success:!1,error:!0,code:"REID004",text:"Error while trying to start Camera. Produce flag need to set to true while joining room in order to enable Camera."};if("connected"!==this._roomStatus)return In.debug("Room status is not connected yet!"),{success:!1,error:!0,code:"REID005",text:`Error while trying to start Camera as room not in connected status. Current room status:!${this._roomStatus}`,possibleReasons:"Did you forget to call joinRoom before enabling Camera? OR if you have already initiated the joinRoom process, then Camera will be enabled automatically once room join process completes."};if(this._webcamProducer)return In.debug("Camera is already active!"),{success:!1,warning:!0,code:"RWID003",text:"Error while trying to start Camera. Camera is already active!"};if(!this._device.canProduce("video"))return In.error("enableWebcam() | cannot produce video"),{success:!1,error:!0,code:"REID006",text:"Error while trying to start Camera. Camera couldnot be activated due to limitations on this device. If you think this device has a functional camera and the problem persists even after multiple retries, please contact technical support with the error code."};let p,l;["hd","vga","qvga"].includes(t)&&(this.data.inputParams.videoResolution=t,this._webcam.resolution=t),r&&"boolean"==typeof r&&(this.data.inputParams.forceVp8=r),s&&"boolean"==typeof s&&(this.data.inputParams.forceVp9=s),i&&"boolean"==typeof i&&(this.data.inputParams.forceH264=i),a&&["high","low"].includes(a.toLowerCase())&&(this.data.inputParams.h264Profile=a),n&&Number.isInteger(n)&&n<65&&n>5&&(this.data.inputParams.forceFPS=25),o&&"boolean"==typeof o&&(this.data.inputParams.enableWebcamLayers=o,this._enableWebcamLayers=o),c&&Number.isInteger(c)&&c<4&&c>0&&(this.data.inputParams.numSimulcastStreams=c,this._numSimulcastStreams=c),Array.isArray(d)&&d.length>=1&&d.length<=3&&d.every((e=>Number.isInteger(e)&&e>=75&&e<=800))?(In.debug("videoBitRates values are correct"),this.data.inputParams.videoBitRates=d):In.warn("videobitrates values should be an integer array with maximum 3 elements and minimum 1 element. The values in the array are '[700,250,75]'");try{if(this._externalVideo)l={label:"external video"},this._webCamStream=await this._getExternalVideoStream(),p=this._webCamStream.getVideoTracks()[0].clone();else{e?(l=this._deviceList.videoDevices.find((t=>t.deviceId===e)),l||(In.warn("Selected deviceId:%s not found",e),l=this._deviceList.videoDevices[0])):l=this._deviceList.videoDevices[0],this._webcam.device=l;const{resolution:t}=this._webcam;if(!l)return In.error("No wencam device found! Can't start video!"),{success:!1,reason:"No Webcam available for starting video!"};e&&this.data.inputParams.videoDeviceId!==e&&(this.data.inputParams.videoDeviceId=e),In.debug("enableWebcam() | calling getUserMedia()"),this._webCamStream=await navigator.mediaDevices.getUserMedia({video:{deviceId:{exact:l.deviceId},...xn[t],frameRate:{ideal:this.data.inputParams.forceFPS}}}),p=this._webCamStream.getVideoTracks()[0]}let t,r;const s={videoGoogleStartBitrate:1e3};if(In.debug("Current device codec options are:%O",this._device.rtpCapabilities.codecs),this._forceVP8){if(r=this._device.rtpCapabilities.codecs.find((e=>"video/vp8"===e.mimeType.toLowerCase())),!r)throw new Error("desired VP8 codec+configuration is not supported")}else if(this._forceH264){if("high"===this.data.inputParams.h264Profile?r=this._device.rtpCapabilities.codecs.find((e=>"video/h264"===e.mimeType.toLowerCase()&&"4d001f"===e.parameters["profile-level-id"])):"low"===this.data.inputParams.h264Profile&&(r=this._device.rtpCapabilities.codecs.find((e=>"video/h264"===e.mimeType.toLowerCase()&&"42e01f"===e.parameters["profile-level-id"]))),!r)throw new Error("desired H264 codec+configuration is not supported");In.debug("Selected h264 codec is:%O",r)}else if(this._forceVP9&&(r=this._device.rtpCapabilities.codecs.find((e=>"video/vp9"===e.mimeType.toLowerCase())),!r))throw new Error("desired VP9 codec+configuration is not supported");if(this._enableWebcamLayers){const e=this._device.rtpCapabilities.codecs.find((e=>"video"===e.kind));this._forceVP9&&r||"video/vp9"===e.mimeType.toLowerCase()?t=[{maxBitrate:5e6,scalabilityMode:this._webcamScalabilityMode||"L3T3_KEY"}]:(t=[{scaleResolutionDownBy:1,maxBitrate:1e3*this.data.inputParams.videoBitRates[0],scalabilityMode:this._webcamScalabilityMode||"L1T3"}],this._numSimulcastStreams>1&&t.unshift({scaleResolutionDownBy:2,maxBitrate:1e3*this.data.inputParams.videoBitRates[1],scalabilityMode:this._webcamScalabilityMode||"L1T3"}),this._numSimulcastStreams>2&&t.unshift({scaleResolutionDownBy:4,maxBitrate:1e3*this.data.inputParams.videoBitRates[2],scalabilityMode:this._webcamScalabilityMode||"L1T3"}))}this._webcamProducer=await this._sendTransport.produce({track:p,encodings:t,codecOptions:s,codec:r,appData:{mediaTag:"cam-video"}}),this._producers.set("video",{id:this._webcamProducer.id,deviceLabel:l.label,type:this._getWebcamType(l),paused:this._webcamProducer.paused,track:this._webcamProducer.track,rtpParameters:this._webcamProducer.rtpParameters,codec:this._webcamProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("videoStart",{peerId:this.data.inputParams.peerId,videoTrack:this._webcamProducer.track,type:"local"}),this._webcamProducer.on("transportclose",(()=>{this._webcamProducer=null})),this._webcamProducer.on("trackended",(()=>{this.disableCam().catch((()=>{}))}))}catch(h){In.error("enableWebcam() | failed:%o",h),this.emit("error",{code:"EID011",text:"Enable Webcam failed!"}),p&&p.stop()}}async disableCam(){if(In.debug("disableWebcam()"),this._webcamProducer){this._webcamProducer.close(),this._producers.delete("video");try{let e={id:"closeProducerSDK",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,type:"video",producerId:this._webcamProducer.id};this._sendMessage(e),this.emit("videoEnd",{peerId:this.data.inputParams.peerId,videoTrack:null})}catch(e){this.emit("error",{code:"EID012",text:"Error while closing server side producer!"})}this._webcamProducer=null}}async _updateWebcams(){In.debug("_updateWebcams()"),this._webcams=new Map,In.debug("_updateWebcams() | calling enumerateDevices()");const e=await navigator.mediaDevices.enumerateDevices();for(const i of e)"videoinput"===i.kind&&this._webcams.set(i.deviceId,i);const t=Array.from(this._webcams.values()),r=t.length,s=this._webcam.device?this._webcam.device.deviceId:void 0;In.debug("_updateWebcams() [webcams:%o]",t),0===r?this._webcam.device=null:this._webcams.has(s)||(this._webcam.device=t[0])}async _getExternalVideoStream(){if(this._externalVideoStream)return this._externalVideoStream;if(this._externalVideo.readyState<3&&await new Promise((e=>this._externalVideo.addEventListener("canplay",e))),this._externalVideo.captureStream)this._externalVideoStream=this._externalVideo.captureStream();else{if(!this._externalVideo.mozCaptureStream)throw new Error("video.captureStream() not supported");this._externalVideoStream=this._externalVideo.mozCaptureStream()}return this._externalVideoStream}_getWebcamType(e){return/(back|rear)/i.test(e.label)?(In.debug("_getWebcamType() | it seems to be a back camera"),"back"):(In.debug("_getWebcamType() | it seems to be a front camera"),"front")}async changeVideoInput({resolution:e,deviceId:t,fps:r}){if(this._webcamProducer){return await this._changeVideoInput({resolution:e,deviceId:t,fps:r})}return In.error("No webcam producer available!"),{success:!1,reason:"You are not sharing your camera yet. Camera Input can be changed to a new camera only when you are sharing an existing camera. "}}async _changeVideoInput({resolution:e,deviceId:t,fps:r}){In.info("_changeVideoInput() | Inside"),e&&["hd","vga","qvga"].includes(e)?this._webcam.resolution=e:In.warn("Invalid video resolution value "),r&&Number.isInteger(r)&&r<65&&r>5?this.data.inputParams.forceFPS=r:In.warn("forceFPS should be a number between 5 to 65, default value is 25 fps.");let s=this._deviceList.videoDevices.find((e=>t&&e.deviceId===t));if(!s)return In.error("The selected deviceId not found!"),{success:!1,reason:"Invalid deviceId!"};this._webcam.device=s;try{this._webCamStream.getVideoTracks().forEach((e=>e.stop())),this._webCamStream=null,In.debug("changeVideoInput() | calling getUserMedia()"),this._webCamStream=await navigator.mediaDevices.getUserMedia({video:{deviceId:{exact:s.deviceId},...xn[this._webcam.resolution],frameRate:{ideal:this.data.inputParams.forceFPS}}});const e=this._webCamStream.getVideoTracks()[0];In.debug("The new video track is:%O",e),await this._webcamProducer.replaceTrack({track:e});let t=this._producers.get("video");return t.deviceLabel=s.label,t.type=this._getWebcamType(s),t.track=this._webcamProducer.track,In.debug("Updated producer values are:%O",t),this._producers.set("video",t),this.emit("videoStart",{peerId:this.data.inputParams.peerId,videoTrack:this._webcamProducer.track,type:"local"}),{success:!0}}catch(i){return In.error("Error while changing input:%O",i),{success:!1,reason:"Couldn't change video input",error:i}}}async changeAudioInput({autoGainControl:e,echoCancellation:t,noiseSuppression:r,sampleRate:s,channelCount:i,deviceId:a}){if(this._micProducer){return await this._changeAudioInput({autoGainControl:e,echoCancellation:t,noiseSuppression:r,sampleRate:s,channelCount:i,deviceId:a})}return{success:!1,reason:"You are not sharing your mic yet. Mic Input can be changed to a new mic only when you are sharing an existing mic. "}}async _changeAudioInput({autoGainControl:e,echoCancellation:t,noiseSuppression:r,sampleRate:s,channelCount:i,deviceId:a}){e&&"boolean"==typeof e&&(this.data.inputParams.autoGainControl=e),t&&"boolean"==typeof t&&(this.data.inputParams.echoCancellation=Boolean(t)),r&&"boolean"==typeof r&&(this.data.inputParams.noiseSuppression=Boolean(r)),s&&Number.isInteger(s)&&s<64e3&&s>8e3&&(this.data.inputParams.sampleRate=s),i&&Number.isInteger(i)&&i>0&&i<3&&(this.data.inputParams.channelCount=i);let n=this._deviceList.audioDevices.find((e=>a&&e.deviceId===a));if(!n)return{success:!1,reason:"Invalid deviceId!"};this._mic.device=n,this._micStream&&this._micStream.getAudioTracks().forEach((e=>e.stop())),this._micStream=null;try{this._micStream=await navigator.mediaDevices.getUserMedia({audio:{deviceId:{exact:n.deviceId},echoCancellation:this.data.inputParams.echoCancellation,noiseSuppression:this.data.inputParams.noiseSuppression,autoGainControl:this.data.inputParams.autoGainControl,sampleRate:this.data.inputParams.sampleRate,channelCount:this.data.inputParams.channelCount}});const e=this._micStream.getAudioTracks()[0];this._micProducer.replaceTrack({track:e});let t=this._producers.get("audio");return t.deviceLabel=n.label,t.track=this._micProducer.track,In.debug("Updated producer values are:%O",t),this._producers.set("audio",t),this.emit("micStart",{peerId:this.data.inputParams.peerId,audioTrack:this._micProducer.track,type:"local"}),{success:!0}}catch(Kn){return In.error("Error while changing input:%O",Kn),{success:!1,reason:"Couldn't change audio input",err:Kn}}}async enableShare({shareAudio:e=!1,enableSharingLayers:t=!0,shareBitRates:r=[2500,1250,500]}={}){if(In.debug("enableShare()"),!this.data.inputParams.produce)return In.debug("Produce status is set to false!"),{success:!1,error:!0,code:"REID003",text:"Error while trying to start screen share. Produce flag need to set to true while joining room in order to enable screen share."};if("connected"!==this._roomStatus)return In.debug("Room status is not connected yet!"),{success:!1,error:!0,code:"REID001",text:`Error while trying to start screen share as room not in connected status. Current room status:!${this._roomStatus}`,possibleReasons:"Did you forget to call joinRoom before enabling screen share? OR if you have already initiated the joinRoom process, then try enabling screen share after some seconds."};if(this._shareProducer)return In.debug("Screen share is already active!"),{success:!1,warning:!0,code:"RWID001",text:"Error while trying to start screen share. Screen share is already active!"};if(!this._device.canProduce("video"))return In.error("enableShare() | cannot produce video"),{success:!1,error:!0,code:"REID002",text:"Error while trying to start screen share. Screen share couldnot be activated due to limitations on this device. If you think this device is capable of screen share and the problem persists even after multiple retries, please contact technical support with the error code."};let s,i;this._enableSharingLayers="boolean"!=typeof t?Boolean(t):t,Array.isArray(r)&&r.length>=1&&r.length<=3&&r.every((e=>Number.isInteger(e)&&e>=500&&e<=2500))?this.data.inputParams.shareBitRates=r:this.data.inputParams.shareBitRates=[2500,1250,500];try{In.debug("enableShare() | calling getDisplayMedia()");const t=await navigator.mediaDevices.getDisplayMedia({audio:!!e,video:{displaySurface:"monitor",logicalSurface:!0,cursor:!0,width:{max:1920},height:{max:1080},frameRate:{max:30}}});if(!t)return In.error("Unable to capture screen."),void this.emit("error",{code:"EID013",text:"Error while trying to start screen share. Not able to capture screen!"});let r,a;i=t.getAudioTracks()[0],i&&(this._shareAudioProducer=await this._sendTransport.produce({track:i,codecOptions:this.data.inputParams.forcePCMU?void 0:{opusStereo:!1,opusDtx:!0,opusFec:!0,opusNack:!0},codec:this.data.inputParams.forcePCMU?this._device.rtpCapabilities.codecs.find((e=>"audio/pcmu"===e.mimeType.toLowerCase())):void 0,appData:{mediaTag:"screen-audio"}}),this._producers.set("ssAudio",{id:this._shareAudioProducer.id,type:"shareAudio",paused:this._shareAudioProducer.paused,track:this._shareAudioProducer.track,rtpParameters:this._shareAudioProducer.rtpParameters,codec:this._shareAudioProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("ssAudioStart",{peerId:this.data.inputParams.peerId,audioTrack:this._shareAudioProducer.track,type:"local"})),s=t.getVideoTracks()[0];const n={videoGoogleStartBitrate:1e3};if(this._forceVP8){if(a=this._device.rtpCapabilities.codecs.find((e=>"video/vp8"===e.mimeType.toLowerCase())),!a)throw new Error("desired VP8 codec+configuration is not supported")}else if(this._forceH264){if("high"===this.data.inputParams.h264Profile?a=this._device.rtpCapabilities.codecs.find((e=>"video/h264"===e.mimeType.toLowerCase()&&"4d001f"===e.parameters["profile-level-id"])):"low"===this.data.inputParams.h264Profile&&(a=this._device.rtpCapabilities.codecs.find((e=>"video/h264"===e.mimeType.toLowerCase()&&"42e01f"===e.parameters["profile-level-id"]))),!a)throw new Error("desired H264 codec+configuration is not supported");In.debug("Selected h264 codec is:%O",a)}else if(this._forceVP9&&(a=this._device.rtpCapabilities.codecs.find((e=>"video/vp9"===e.mimeType.toLowerCase())),!a))throw new Error("desired VP9 codec+configuration is not supported");if(this._enableSharingLayers){const e=this._device.rtpCapabilities.codecs.find((e=>"video"===e.kind));this._forceVP9&&a||"video/vp9"===e.mimeType.toLowerCase()?r=[{maxBitrate:1e3*this.data.inputParams.shareBitRates[0],scalabilityMode:this._sharingScalabilityMode||"L3T3",dtx:!0}]:(r=[{scaleResolutionDownBy:1,maxBitrate:1e3*this.data.inputParams.shareBitRates[0],scalabilityMode:this._sharingScalabilityMode||"L1T3",dtx:!0}],this._numSimulcastStreams>1&&r.unshift({scaleResolutionDownBy:2,maxBitrate:1e3*this.data.inputParams.shareBitRates[1],scalabilityMode:this._sharingScalabilityMode||"L1T3",dtx:!0}),this._numSimulcastStreams>2&&r.unshift({scaleResolutionDownBy:4,maxBitrate:1e3*this.data.inputParams.shareBitRates[2],scalabilityMode:this._sharingScalabilityMode||"L1T3",dtx:!0}))}this._shareProducer=await this._sendTransport.produce({track:s,encodings:r,codecOptions:n,codec:a,appData:{mediaTag:"screen-video"}}),this._producers.set("ssVideo",{id:this._shareProducer.id,type:"shareVideo",paused:this._shareProducer.paused,track:this._shareProducer.track,rtpParameters:this._shareProducer.rtpParameters,codec:this._shareProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("ssVideoStart",{peerId:this.data.inputParams.peerId,videoTrack:this._shareProducer.track,type:"local"}),this._shareProducer.on("transportclose",(()=>{this._shareProducer=null})),this._shareProducer.on("trackended",(()=>{this.disableShare().catch((()=>{}))}))}catch(a){In.error("enableShare() | failed:%o",a),"NotAllowedError"!==a.name&&this.emit("error",{code:"EID014",text:`Error while trying to start screen share. Error is: ${a}!`}),s&&s.stop()}}async disableShare(){if(In.debug("disableShare()"),!this._shareProducer)return In.warn("Screen share doesn't seem to be on!"),void this.emit("error",{code:"EID017",text:"Error while trying to stop screen share. Is the screen share on!"});if(this._shareProducer.close(),this._shareAudioProducer){this._shareAudioProducer.close();try{let e={id:"closeProducerSDK",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,type:"audio",producerId:this._shareAudioProducer.id};this._sendMessage(e),this.emit("ssAudioStop",{peerId:this.data.inputParams.peerId,videoTrack:null,type:"local"})}catch(e){this.emit("error",{code:"EID015",text:`Error while trying to stop screen share audio. Error is: ${e}!`})}}try{let e={id:"closeProducerSDK",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,type:"video",producerId:this._shareProducer.id};this._sendMessage(e),this.emit("ssVideoStop",{peerId:this.data.inputParams.peerId,videoTrack:null,type:"local"})}catch(e){this.emit("error",{code:"EID016",text:`Error while trying to stop screen share video. Error is: ${e}!`})}this._shareAudioProducer=null,this._shareProducer=null}}const An="cp2p-client";class jn{constructor(e){e?(this._debug=Ft(`${An}:${e}`),this._info=Ft(`${An}:INFO:${e}`),this._warn=Ft(`${An}:WARN:${e}`),this._error=Ft(`${An}:ERROR:${e}`)):(this._debug=Ft(An),this._info=Ft(`${An}:INFO`),this._warn=Ft(`${An}:WARN`),this._error=Ft(`${An}:ERROR`)),this._debug.log=void 0,this._info.log=void 0,this._warn.log=void 0,this._error.log=void 0}get debug(){return this._debug}get info(){return this._info}get warn(){return this._warn}get error(){return this._error}}const Nn={audio:{deviceId:{exact:void 0}},video:!1},Bn={video:{deviceId:{exact:void 0},width:{min:320,ideal:640,max:1280},height:{min:240,ideal:480,max:720},frameRate:{min:15,max:30}}},Fn={audio:!0,video:{width:{min:320,ideal:1280,max:1280},height:{min:240,ideal:720,max:720},aspectRatio:1.777777778,frameRate:{min:15,max:30}}},$n=new jn("socket");class Un extends Wt.EventEmitter{constructor({url:e,roomId:t,peerId:r,peerName:s,role:i}){super(),$n.debug("constructor():%o ",{url:e,roomId:t,peerId:r,peerName:s,role:i}),this._closed=!1,this._params={url:e,roomId:t,peerId:r,peerName:s,role:i},this._socket=null,this._connectionStatus=null,this._createSocket()}get closed(){return this._closed}get connectionStatus(){return this._connectionStatus}close(){if(!this._closed){$n.debug("close()"),this._closed=!0,this.emit("close");try{this._socket.disconnect()}catch(e){$n.error("close() | error closing the Socket:%o",e)}}}async send(e){if(this._closed)throw new Error("transport closed");try{this._socket.send(JSON.stringify(e))}catch(t){throw $n.warn("send() failed:%o",t),t}}async request({type:e,message:t}){return new Promise((r=>{if(this._closed)throw new Error("transport closed");try{this._socket.emit(e,JSON.stringify(t),(e=>{r(e)}))}catch(s){throw $n.warn("emit() failed:%o",s),s}}))}async _createSocket(){let e=this;const t=io(this._params.url,{query:{roomId:this._params.roomId,peerId:this._params.peerId,peerName:this._params.peerName,role:this._params.role}});t.on("connect",(()=>{$n.debug("Socket connected!!"),e._connectionStatus=!0,e.emit("connected")})),t.on("disconnect",(()=>{$n.debug("Socket disconnected!!"),e._connectionStatus=!1,e.emit("disconnected")})),t.on("reconnect",(()=>{$n.debug("Socket reconnected after disconnect!!"),t.emit("reconnected")})),t.on("message",(t=>{const r=JSON.parse(t);$n.debug("New mesage received with id:%s",r.type),e.emit("message",r)})),this._socket=t}}
|
|
7
|
+
*/class Pr{static getParser(e,t=!1){if("string"!=typeof e)throw new Error("UserAgent should be a string");return new Cr(e,t)}static parse(e){return new Cr(e).getResult()}static get BROWSER_MAP(){return hr}static get ENGINE_MAP(){return gr}static get OS_MAP(){return fr}static get PLATFORMS_MAP(){return mr}}const kr=t(l()),Rr="VidScale-js";let Tr=class{constructor(e){e?(this._debug=kr(`${Rr}:${e}`),this._info=kr(`${Rr}:INFO:${e}`),this._warn=kr(`${Rr}:WARN:${e}`),this._error=kr(`${Rr}:ERROR:${e}`)):(this._debug=kr(Rr),this._info=kr(`${Rr}:INFO`),this._warn=kr(`${Rr}:WARN`),this._error=kr(`${Rr}:ERROR`)),this._debug.log=function(){}.bind(),this._info.log=function(){}.bind(),this._warn.log=function(){}.bind(),this._error.log=function(){}.bind()}get debug(){return this._debug}get info(){return this._info}get warn(){return this._warn}get error(){return this._error}};var Er,Ir={exports:{}};var xr=function(){if(Er)return Ir.exports;Er=1;var e,t="object"==typeof Reflect?Reflect:null,r=t&&"function"==typeof t.apply?t.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};e=t&&"function"==typeof t.ownKeys?t.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var s=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}Ir.exports=i,Ir.exports.once=function(e,t){return new Promise(function(r,s){function i(r){e.removeListener(t,a),s(r)}function a(){"function"==typeof e.removeListener&&e.removeListener("error",i),r([].slice.call(arguments))}m(e,t,a,{once:!0}),"error"!==t&&function(e,t,r){"function"==typeof e.on&&m(e,"error",t,r)}(e,i,{once:!0})})},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var a=10;function n(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function o(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function c(e,t,r,s){var i,a,c;if(n(r),void 0===(a=e._events)?(a=e._events=Object.create(null),e._eventsCount=0):(void 0!==a.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),a=e._events),c=a[t]),void 0===c)c=a[t]=r,++e._eventsCount;else if("function"==typeof c?c=a[t]=s?[r,c]:[c,r]:s?c.unshift(r):c.push(r),(i=o(e))>0&&c.length>i&&!c.warned){c.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+c.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=e,d.type=t,d.count=c.length,console&&console.warn}return e}function d(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function l(e,t,r){var s={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=d.bind(s);return i.listener=r,s.wrapFn=i,i}function p(e,t,r){var s=e._events;if(void 0===s)return[];var i=s[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(i):h(i,i.length)}function u(e){var t=this._events;if(void 0!==t){var r=t[e];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function h(e,t){for(var r=new Array(t),s=0;s<t;++s)r[s]=e[s];return r}function m(e,t,r,s){if("function"==typeof e.on)s.once?e.once(t,r):e.on(t,r);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,function i(a){s.once&&e.removeEventListener(t,i),r(a)})}}return Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(e){if("number"!=typeof e||e<0||s(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");a=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||s(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return o(this)},i.prototype.emit=function(e){for(var t=[],s=1;s<arguments.length;s++)t.push(arguments[s]);var i="error"===e,a=this._events;if(void 0!==a)i=i&&void 0===a.error;else if(!i)return!1;if(i){var n;if(t.length>0&&(n=t[0]),n instanceof Error)throw n;var o=new Error("Unhandled error."+(n?" ("+n.message+")":""));throw o.context=n,o}var c=a[e];if(void 0===c)return!1;if("function"==typeof c)r(c,this,t);else{var d=c.length,l=h(c,d);for(s=0;s<d;++s)r(l[s],this,t)}return!0},i.prototype.addListener=function(e,t){return c(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return c(this,e,t,!0)},i.prototype.once=function(e,t){return n(t),this.on(e,l(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return n(t),this.prependListener(e,l(this,e,t)),this},i.prototype.removeListener=function(e,t){var r,s,i,a,o;if(n(t),void 0===(s=this._events))return this;if(void 0===(r=s[e]))return this;if(r===t||r.listener===t)0===--this._eventsCount?this._events=Object.create(null):(delete s[e],s.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(i=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){o=r[a].listener,i=a;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,i),1===r.length&&(s[e]=r[0]),void 0!==s.removeListener&&this.emit("removeListener",e,o||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,r,s;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0===arguments.length){var i,a=Object.keys(r);for(s=0;s<a.length;++s)"removeListener"!==(i=a[s])&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(s=t.length-1;s>=0;s--)this.removeListener(e,t[s]);return this},i.prototype.listeners=function(e){return p(this,e,!0)},i.prototype.rawListeners=function(e){return p(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):u.call(e,t)},i.prototype.listenerCount=u,i.prototype.eventNames=function(){return this._eventsCount>0?e(this._events):[]},Ir.exports}();class Dr extends xr.EventEmitter{constructor(e){super(),this.setMaxListeners(1/0),this._logger=e||new Tr("EnhancedEventEmitter")}safeEmit(e,...t){try{this.emit(e,...t)}catch(r){this._logger.error("safeEmit() | event listener threw an error [event:%s]:%o",e,r)}}async safeEmitAsPromise(e,...t){return new Promise((r,s)=>{this.safeEmit(e,...t,r,s)})}}async function Mr(e){return new Promise(t=>setTimeout(()=>t(),e))}const Lr=new Tr("Message");class Or{static parse(e){let t;const r={};try{t=JSON.parse(e)}catch(s){return void Lr.error("parse() | invalid JSON: %s",s)}if("object"==typeof t&&!Array.isArray(t)){if(t.request){if(r.request=!0,"string"!=typeof t.method)return void Lr.error("parse() | missing/invalid method field");if("number"!=typeof t.id)return void Lr.error("parse() | missing/invalid id field");r.id=t.id,r.method=t.method,r.data=t.data||{}}else if(t.response){if(r.response=!0,"number"!=typeof t.id)return void Lr.error("parse() | missing/invalid id field");r.id=t.id,t.ok?(r.ok=!0,r.data=t.data||{}):(r.ok=!1,r.errorCode=t.errorCode,r.errorReason=t.errorReason)}else{if(!t.notification)return void Lr.error("parse() | missing request/response field");if(r.notification=!0,"string"!=typeof t.method)return void Lr.error("parse() | missing/invalid method field");r.method=t.method,r.data=t.data||{}}return r}Lr.error("parse() | not an object")}static createRequest(e,t){return{request:!0,id:Math.round(1e7*Math.random()),method:e,data:t||{}}}static createSuccessResponse(e,t){return{response:!0,id:e.id,ok:!0,data:t||{}}}static createErrorResponse(e,t,r){return{response:!0,id:e.id,ok:!1,errorCode:t,errorReason:r}}static createNotification(e,t){return{notification:!0,method:e,data:t||{}}}}const Ar=new Tr("Peer");class Nr extends Dr{constructor(e){super(Ar),Ar.debug("constructor()"),this._closed=!1,this._transport=e,this._connected=!1,this._data={},this._sents=new Map,this._handleTransport()}get closed(){return this._closed}get connected(){return this._connected}get data(){return this._data}set data(e){throw new Error("cannot override data object")}close(){if(!this._closed){Ar.debug("close()"),this._closed=!0,this._connected=!1,this._transport.close();for(const e of this._sents.values())e.close();this.safeEmit("close")}}async request(e,t=void 0){const r=Or.createRequest(e,t);return this._logger.debug("request() [method:%s, id:%s]",e,r.id),await this._transport.send(r),new Promise((e,t)=>{const s=1500*(15+.1*this._sents.size),i={id:r.id,method:r.method,resolve:t=>{this._sents.delete(r.id)&&(clearTimeout(i.timer),e(t))},reject:e=>{this._sents.delete(r.id)&&(clearTimeout(i.timer),t(e))},timer:setTimeout(()=>{this._sents.delete(r.id)&&t(new Error("request timeout"))},s),close:()=>{clearTimeout(i.timer),t(new Error("peer closed"))}};this._sents.set(r.id,i)})}async notify(e,t=void 0){const r=Or.createNotification(e,t);this._logger.debug("notify() [method:%s]",e),await this._transport.send(r)}_handleTransport(){if(this._transport.closed)return this._closed=!0,void setTimeout(()=>{this._closed||(this._connected=!1,this.safeEmit("close"))});this._transport.on("open",()=>{this._closed||(Ar.debug('emit "open"'),this._connected=!0,this.safeEmit("open"))}),this._transport.on("disconnected",()=>{this._closed||(Ar.debug('emit "disconnected"'),this._connected=!1,this.safeEmit("disconnected"))}),this._transport.on("failed",e=>{this._closed||(Ar.debug('emit "failed" [currentAttempt:%s]',e),this._connected=!1,this.safeEmit("failed",e))}),this._transport.on("close",()=>{this._closed||(this._closed=!0,Ar.debug('emit "close"'),this._connected=!1,this.safeEmit("close"))}),this._transport.on("message",e=>{e.request?this._handleRequest(e):e.response?this._handleResponse(e):e.notification&&this._handleNotification(e)})}_handleRequest(e){try{this.emit("request",e,t=>{const r=Or.createSuccessResponse(e,t);this._transport.send(r).catch(()=>{})},(t,r)=>{t instanceof Error?(r=t.message,t=500):"number"==typeof t&&r instanceof Error&&(r=r.message);const s=Or.createErrorResponse(e,t,r);this._transport.send(s).catch(()=>{})})}catch(t){const r=Or.createErrorResponse(e,500,String(t));this._transport.send(r).catch(()=>{})}}_handleResponse(e){const t=this._sents.get(e.id);if(t)if(e.ok)t.resolve(e.data);else{const r=new Error(e.errorReason);r.code=e.errorCode,t.reject(r)}else Ar.error("received response does not match any sent request [id:%s]",e.id)}_handleNotification(e){this.safeEmit("notification",e)}}const jr=Object.create(null);jr.open="0",jr.close="1",jr.ping="2",jr.pong="3",jr.message="4",jr.upgrade="5",jr.noop="6";const Fr=Object.create(null);Object.keys(jr).forEach(e=>{Fr[jr[e]]=e});const Br={type:"error",data:"parser error"},Ur="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),$r="function"==typeof ArrayBuffer,Vr=e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,qr=({type:e,data:t},r,s)=>Ur&&t instanceof Blob?r?s(t):Wr(t,s):$r&&(t instanceof ArrayBuffer||Vr(t))?r?s(t):Wr(new Blob([t]),s):s(jr[e]+(t||"")),Wr=(e,t)=>{const r=new FileReader;return r.onload=function(){const e=r.result.split(",")[1];t("b"+(e||""))},r.readAsDataURL(e)};function zr(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let Hr;const Gr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Kr="undefined"==typeof Uint8Array?[]:new Uint8Array(256);for(let io=0;io<64;io++)Kr[Gr.charCodeAt(io)]=io;const Jr="function"==typeof ArrayBuffer,Qr=(e,t)=>{if("string"!=typeof e)return{type:"message",data:Yr(e,t)};const r=e.charAt(0);if("b"===r)return{type:"message",data:Xr(e.substring(1),t)};return Fr[r]?e.length>1?{type:Fr[r],data:e.substring(1)}:{type:Fr[r]}:Br},Xr=(e,t)=>{if(Jr){const r=(e=>{let t,r,s,i,a,n=.75*e.length,o=e.length,c=0;"="===e[e.length-1]&&(n--,"="===e[e.length-2]&&n--);const d=new ArrayBuffer(n),l=new Uint8Array(d);for(t=0;t<o;t+=4)r=Kr[e.charCodeAt(t)],s=Kr[e.charCodeAt(t+1)],i=Kr[e.charCodeAt(t+2)],a=Kr[e.charCodeAt(t+3)],l[c++]=r<<2|s>>4,l[c++]=(15&s)<<4|i>>2,l[c++]=(3&i)<<6|63&a;return d})(e);return Yr(r,t)}return{base64:!0,data:e}},Yr=(e,t)=>"blob"===t?e instanceof Blob?e:new Blob([e]):e instanceof ArrayBuffer?e:e.buffer,Zr=String.fromCharCode(30);function es(){return new TransformStream({transform(e,t){!function(e,t){Ur&&e.data instanceof Blob?e.data.arrayBuffer().then(zr).then(t):$r&&(e.data instanceof ArrayBuffer||Vr(e.data))?t(zr(e.data)):qr(e,!1,e=>{Hr||(Hr=new TextEncoder),t(Hr.encode(e))})}(e,r=>{const s=r.length;let i;if(s<126)i=new Uint8Array(1),new DataView(i.buffer).setUint8(0,s);else if(s<65536){i=new Uint8Array(3);const e=new DataView(i.buffer);e.setUint8(0,126),e.setUint16(1,s)}else{i=new Uint8Array(9);const e=new DataView(i.buffer);e.setUint8(0,127),e.setBigUint64(1,BigInt(s))}e.data&&"string"!=typeof e.data&&(i[0]|=128),t.enqueue(i),t.enqueue(r)})}})}let ts;function rs(e){return e.reduce((e,t)=>e+t.length,0)}function ss(e,t){if(e[0].length===t)return e.shift();const r=new Uint8Array(t);let s=0;for(let i=0;i<t;i++)r[i]=e[0][s++],s===e[0].length&&(e.shift(),s=0);return e.length&&s<e[0].length&&(e[0]=e[0].slice(s)),r}function is(e){if(e)return function(e){for(var t in is.prototype)e[t]=is.prototype[t];return e}(e)}is.prototype.on=is.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},is.prototype.once=function(e,t){function r(){this.off(e,r),t.apply(this,arguments)}return r.fn=t,this.on(e,r),this},is.prototype.off=is.prototype.removeListener=is.prototype.removeAllListeners=is.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r,s=this._callbacks["$"+e];if(!s)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var i=0;i<s.length;i++)if((r=s[i])===t||r.fn===t){s.splice(i,1);break}return 0===s.length&&delete this._callbacks["$"+e],this},is.prototype.emit=function(e){this._callbacks=this._callbacks||{};for(var t=new Array(arguments.length-1),r=this._callbacks["$"+e],s=1;s<arguments.length;s++)t[s-1]=arguments[s];if(r){s=0;for(var i=(r=r.slice(0)).length;s<i;++s)r[s].apply(this,t)}return this},is.prototype.emitReserved=is.prototype.emit,is.prototype.listeners=function(e){return this._callbacks=this._callbacks||{},this._callbacks["$"+e]||[]},is.prototype.hasListeners=function(e){return!!this.listeners(e).length};const as="function"==typeof Promise&&"function"==typeof Promise.resolve?e=>Promise.resolve().then(e):(e,t)=>t(e,0),ns="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")();function os(e,...t){return t.reduce((t,r)=>(e.hasOwnProperty(r)&&(t[r]=e[r]),t),{})}const cs=ns.setTimeout,ds=ns.clearTimeout;function ls(e,t){t.useNativeTimers?(e.setTimeoutFn=cs.bind(ns),e.clearTimeoutFn=ds.bind(ns)):(e.setTimeoutFn=ns.setTimeout.bind(ns),e.clearTimeoutFn=ns.clearTimeout.bind(ns))}function ps(e){return"string"==typeof e?function(e){let t=0,r=0;for(let s=0,i=e.length;s<i;s++)t=e.charCodeAt(s),t<128?r+=1:t<2048?r+=2:t<55296||t>=57344?r+=3:(s++,r+=4);return r}(e):Math.ceil(1.33*(e.byteLength||e.size))}function us(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}class hs extends Error{constructor(e,t,r){super(e),this.description=t,this.context=r,this.type="TransportError"}}class ms extends is{constructor(e){super(),this.writable=!1,ls(this,e),this.opts=e,this.query=e.query,this.socket=e.socket,this.supportsBinary=!e.forceBase64}onError(e,t,r){return super.emitReserved("error",new hs(e,t,r)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this}send(e){"open"===this.readyState&&this.write(e)}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(e){const t=Qr(e,this.socket.binaryType);this.onPacket(t)}onPacket(e){super.emitReserved("packet",e)}onClose(e){this.readyState="closed",super.emitReserved("close",e)}pause(e){}createUri(e,t={}){return e+"://"+this._hostname()+this._port()+this.opts.path+this._query(t)}_hostname(){const e=this.opts.hostname;return-1===e.indexOf(":")?e:"["+e+"]"}_port(){return this.opts.port&&(this.opts.secure&&Number(443!==this.opts.port)||!this.opts.secure&&80!==Number(this.opts.port))?":"+this.opts.port:""}_query(e){const t=function(e){let t="";for(let r in e)e.hasOwnProperty(r)&&(t.length&&(t+="&"),t+=encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t}(e);return t.length?"?"+t:""}}class fs extends ms{constructor(){super(...arguments),this._polling=!1}get name(){return"polling"}doOpen(){this._poll()}pause(e){this.readyState="pausing";const t=()=>{this.readyState="paused",e()};if(this._polling||!this.writable){let e=0;this._polling&&(e++,this.once("pollComplete",function(){--e||t()})),this.writable||(e++,this.once("drain",function(){--e||t()}))}else t()}_poll(){this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){((e,t)=>{const r=e.split(Zr),s=[];for(let i=0;i<r.length;i++){const e=Qr(r[i],t);if(s.push(e),"error"===e.type)break}return s})(e,this.socket.binaryType).forEach(e=>{if("opening"===this.readyState&&"open"===e.type&&this.onOpen(),"close"===e.type)return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(e)}),"closed"!==this.readyState&&(this._polling=!1,this.emitReserved("pollComplete"),"open"===this.readyState&&this._poll())}doClose(){const e=()=>{this.write([{type:"close"}])};"open"===this.readyState?e():this.once("open",e)}write(e){this.writable=!1,((e,t)=>{const r=e.length,s=new Array(r);let i=0;e.forEach((e,a)=>{qr(e,!1,e=>{s[a]=e,++i===r&&t(s.join(Zr))})})})(e,e=>{this.doWrite(e,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const e=this.opts.secure?"https":"http",t=this.query||{};return!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=us()),this.supportsBinary||t.sid||(t.b64=1),this.createUri(e,t)}}let gs=!1;try{gs="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(dc){}const bs=gs;function ys(){}class _s extends fs{constructor(e){if(super(e),"undefined"!=typeof location){const t="https:"===location.protocol;let r=location.port;r||(r=t?"443":"80"),this.xd="undefined"!=typeof location&&e.hostname!==location.hostname||r!==e.port}}doWrite(e,t){const r=this.request({method:"POST",data:e});r.on("success",t),r.on("error",(e,t)=>{this.onError("xhr post error",e,t)})}doPoll(){const e=this.request();e.on("data",this.onData.bind(this)),e.on("error",(e,t)=>{this.onError("xhr poll error",e,t)}),this.pollXhr=e}}let vs=class e extends is{constructor(e,t,r){super(),this.createRequest=e,ls(this,r),this._opts=r,this._method=r.method||"GET",this._uri=t,this._data=void 0!==r.data?r.data:null,this._create()}_create(){var t;const r=os(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");r.xdomain=!!this._opts.xd;const s=this._xhr=this.createRequest(r);try{s.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders){s.setDisableHeaderCheck&&s.setDisableHeaderCheck(!0);for(let e in this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(e)&&s.setRequestHeader(e,this._opts.extraHeaders[e])}}catch(i){}if("POST"===this._method)try{s.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(i){}try{s.setRequestHeader("Accept","*/*")}catch(i){}null===(t=this._opts.cookieJar)||void 0===t||t.addCookies(s),"withCredentials"in s&&(s.withCredentials=this._opts.withCredentials),this._opts.requestTimeout&&(s.timeout=this._opts.requestTimeout),s.onreadystatechange=()=>{var e;3===s.readyState&&(null===(e=this._opts.cookieJar)||void 0===e||e.parseCookies(s.getResponseHeader("set-cookie"))),4===s.readyState&&(200===s.status||1223===s.status?this._onLoad():this.setTimeoutFn(()=>{this._onError("number"==typeof s.status?s.status:0)},0))},s.send(this._data)}catch(i){return void this.setTimeoutFn(()=>{this._onError(i)},0)}"undefined"!=typeof document&&(this._index=e.requestsCount++,e.requests[this._index]=this)}_onError(e){this.emitReserved("error",e,this._xhr),this._cleanup(!0)}_cleanup(t){if(void 0!==this._xhr&&null!==this._xhr){if(this._xhr.onreadystatechange=ys,t)try{this._xhr.abort()}catch(r){}"undefined"!=typeof document&&delete e.requests[this._index],this._xhr=null}}_onLoad(){const e=this._xhr.responseText;null!==e&&(this.emitReserved("data",e),this.emitReserved("success"),this._cleanup())}abort(){this._cleanup()}};if(vs.requestsCount=0,vs.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",ws);else if("function"==typeof addEventListener){addEventListener("onpagehide"in ns?"pagehide":"unload",ws,!1)}function ws(){for(let e in vs.requests)vs.requests.hasOwnProperty(e)&&vs.requests[e].abort()}const Ss=function(){const e=Cs({xdomain:!1});return e&&null!==e.responseType}();function Cs(e){const t=e.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!t||bs))return new XMLHttpRequest}catch(r){}if(!t)try{return new(ns[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(r){}}const Ps="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();class ks extends ms{get name(){return"websocket"}doOpen(){const e=this.uri(),t=this.opts.protocols,r=Ps?{}:os(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(e,t,r)}catch(dc){return this.emitReserved("error",dc)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let t=0;t<e.length;t++){const r=e[t],s=t===e.length-1;qr(r,this.supportsBinary,e=>{try{this.doWrite(r,e)}catch(t){}s&&as(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){void 0!==this.ws&&(this.ws.onerror=()=>{},this.ws.close(),this.ws=null)}uri(){const e=this.opts.secure?"wss":"ws",t=this.query||{};return this.opts.timestampRequests&&(t[this.opts.timestampParam]=us()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}}const Rs=ns.WebSocket||ns.MozWebSocket;const Ts={websocket:class extends ks{createSocket(e,t,r){return Ps?new Rs(e,t,r):t?new Rs(e,t):new Rs(e)}doWrite(e,t){this.ws.send(t)}},webtransport:class extends ms{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(dc){return this.emitReserved("error",dc)}this._transport.closed.then(()=>{this.onClose()}).catch(e=>{this.onError("webtransport error",e)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(e=>{const t=function(e,t){ts||(ts=new TextDecoder);const r=[];let s=0,i=-1,a=!1;return new TransformStream({transform(n,o){for(r.push(n);;){if(0===s){if(rs(r)<1)break;const e=ss(r,1);a=!(128&~e[0]),i=127&e[0],s=i<126?3:126===i?1:2}else if(1===s){if(rs(r)<2)break;const e=ss(r,2);i=new DataView(e.buffer,e.byteOffset,e.length).getUint16(0),s=3}else if(2===s){if(rs(r)<8)break;const e=ss(r,8),t=new DataView(e.buffer,e.byteOffset,e.length),a=t.getUint32(0);if(a>Math.pow(2,21)-1){o.enqueue(Br);break}i=a*Math.pow(2,32)+t.getUint32(4),s=3}else{if(rs(r)<i)break;const e=ss(r,i);o.enqueue(Qr(a?e:ts.decode(e),t)),s=0}if(0===i||i>e){o.enqueue(Br);break}}}})}(Number.MAX_SAFE_INTEGER,this.socket.binaryType),r=e.readable.pipeThrough(t).getReader(),s=es();s.readable.pipeTo(e.writable),this._writer=s.writable.getWriter();const i=()=>{r.read().then(({done:e,value:t})=>{e||(this.onPacket(t),i())}).catch(e=>{})};i();const a={type:"open"};this.query.sid&&(a.data=`{"sid":"${this.query.sid}"}`),this._writer.write(a).then(()=>this.onOpen())})})}write(e){this.writable=!1;for(let t=0;t<e.length;t++){const r=e[t],s=t===e.length-1;this._writer.write(r).then(()=>{s&&as(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var e;null===(e=this._transport)||void 0===e||e.close()}},polling:class extends _s{constructor(e){super(e);const t=e&&e.forceBase64;this.supportsBinary=Ss&&!t}request(e={}){return Object.assign(e,{xd:this.xd},this.opts),new vs(Cs,this.uri(),e)}}},Es=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,Is=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function xs(e){if(e.length>8e3)throw"URI too long";const t=e,r=e.indexOf("["),s=e.indexOf("]");-1!=r&&-1!=s&&(e=e.substring(0,r)+e.substring(r,s).replace(/:/g,";")+e.substring(s,e.length));let i=Es.exec(e||""),a={},n=14;for(;n--;)a[Is[n]]=i[n]||"";return-1!=r&&-1!=s&&(a.source=t,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a.pathNames=function(e,t){const r=/\/{2,9}/g,s=t.replace(r,"/").split("/");"/"!=t.slice(0,1)&&0!==t.length||s.splice(0,1);"/"==t.slice(-1)&&s.splice(s.length-1,1);return s}(0,a.path),a.queryKey=function(e,t){const r={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(e,t,s){t&&(r[t]=s)}),r}(0,a.query),a}const Ds="function"==typeof addEventListener&&"function"==typeof removeEventListener,Ms=[];Ds&&addEventListener("offline",()=>{Ms.forEach(e=>e())},!1);class Ls extends is{constructor(e,t){if(super(),this.binaryType="arraybuffer",this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,e&&"object"==typeof e&&(t=e,e=null),e){const r=xs(e);t.hostname=r.host,t.secure="https"===r.protocol||"wss"===r.protocol,t.port=r.port,r.query&&(t.query=r.query)}else t.host&&(t.hostname=xs(t.host).host);ls(this,t),this.secure=null!=t.secure?t.secure:"undefined"!=typeof location&&"https:"===location.protocol,t.hostname&&!t.port&&(t.port=this.secure?"443":"80"),this.hostname=t.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=t.port||("undefined"!=typeof location&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},t.transports.forEach(e=>{const t=e.prototype.name;this.transports.push(t),this._transportsByName[t]=e}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},t),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),"string"==typeof this.opts.query&&(this.opts.query=function(e){let t={},r=e.split("&");for(let s=0,i=r.length;s<i;s++){let e=r[s].split("=");t[decodeURIComponent(e[0])]=decodeURIComponent(e[1])}return t}(this.opts.query)),Ds&&(this.opts.closeOnBeforeunload&&(this._beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this._beforeunloadEventListener,!1)),"localhost"!==this.hostname&&(this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},Ms.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=void 0),this._open()}createTransport(e){const t=Object.assign({},this.opts.query);t.EIO=4,t.transport=e,this.id&&(t.sid=this.id);const r=Object.assign({},this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return new this._transportsByName[e](r)}_open(){if(0===this.transports.length)return void this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);const e=this.opts.rememberUpgrade&&Ls.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket")?"websocket":this.transports[0];this.readyState="opening";const t=this.createTransport(e);t.open(),this.setTransport(t)}setTransport(e){this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",e=>this._onClose("transport close",e))}onOpen(){this.readyState="open",Ls.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush()}_onPacket(e){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(this.emitReserved("packet",e),this.emitReserved("heartbeat"),e.type){case"open":this.onHandshake(JSON.parse(e.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":const t=new Error("server error");t.code=e.data,this._onError(t);break;case"message":this.emitReserved("data",e.data),this.emitReserved("message",e.data)}}onHandshake(e){this.emitReserved("handshake",e),this.id=e.sid,this.transport.query.sid=e.sid,this._pingInterval=e.pingInterval,this._pingTimeout=e.pingTimeout,this._maxPayload=e.maxPayload,this.onOpen(),"closed"!==this.readyState&&this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);const e=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+e,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},e),this.opts.autoUnref&&this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,0===this.writeBuffer.length?this.emitReserved("drain"):this.flush()}flush(){if("closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const e=this._getWritablePackets();this.transport.send(e),this._prevBufferLen=e.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&"polling"===this.transport.name&&this.writeBuffer.length>1))return this.writeBuffer;let e=1;for(let t=0;t<this.writeBuffer.length;t++){const r=this.writeBuffer[t].data;if(r&&(e+=ps(r)),t>0&&e>this._maxPayload)return this.writeBuffer.slice(0,t);e+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;const e=Date.now()>this._pingTimeoutTime;return e&&(this._pingTimeoutTime=0,as(()=>{this._onClose("ping timeout")},this.setTimeoutFn)),e}write(e,t,r){return this._sendPacket("message",e,t,r),this}send(e,t,r){return this._sendPacket("message",e,t,r),this}_sendPacket(e,t,r,s){if("function"==typeof t&&(s=t,t=void 0),"function"==typeof r&&(s=r,r=null),"closing"===this.readyState||"closed"===this.readyState)return;(r=r||{}).compress=!1!==r.compress;const i={type:e,data:t,options:r};this.emitReserved("packetCreate",i),this.writeBuffer.push(i),s&&this.once("flush",s),this.flush()}close(){const e=()=>{this._onClose("forced close"),this.transport.close()},t=()=>{this.off("upgrade",t),this.off("upgradeError",t),e()},r=()=>{this.once("upgrade",t),this.once("upgradeError",t)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?r():e()}):this.upgrading?r():e()),this}_onError(e){if(Ls.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&"opening"===this.readyState)return this.transports.shift(),this._open();this.emitReserved("error",e),this._onClose("transport error",e)}_onClose(e,t){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState){if(this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),Ds&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){const e=Ms.indexOf(this._offlineEventListener);-1!==e&&Ms.splice(e,1)}this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this._prevBufferLen=0}}}Ls.protocol=4;class Os extends Ls{constructor(){super(...arguments),this._upgrades=[]}onOpen(){if(super.onOpen(),"open"===this.readyState&&this.opts.upgrade)for(let e=0;e<this._upgrades.length;e++)this._probe(this._upgrades[e])}_probe(e){let t=this.createTransport(e),r=!1;Ls.priorWebsocketSuccess=!1;const s=()=>{r||(t.send([{type:"ping",data:"probe"}]),t.once("packet",e=>{if(!r)if("pong"===e.type&&"probe"===e.data){if(this.upgrading=!0,this.emitReserved("upgrading",t),!t)return;Ls.priorWebsocketSuccess="websocket"===t.name,this.transport.pause(()=>{r||"closed"!==this.readyState&&(d(),this.setTransport(t),t.send([{type:"upgrade"}]),this.emitReserved("upgrade",t),t=null,this.upgrading=!1,this.flush())})}else{const e=new Error("probe error");e.transport=t.name,this.emitReserved("upgradeError",e)}}))};function i(){r||(r=!0,d(),t.close(),t=null)}const a=e=>{const r=new Error("probe error: "+e);r.transport=t.name,i(),this.emitReserved("upgradeError",r)};function n(){a("transport closed")}function o(){a("socket closed")}function c(e){t&&e.name!==t.name&&i()}const d=()=>{t.removeListener("open",s),t.removeListener("error",a),t.removeListener("close",n),this.off("close",o),this.off("upgrading",c)};t.once("open",s),t.once("error",a),t.once("close",n),this.once("close",o),this.once("upgrading",c),-1!==this._upgrades.indexOf("webtransport")&&"webtransport"!==e?this.setTimeoutFn(()=>{r||t.open()},200):t.open()}onHandshake(e){this._upgrades=this._filterUpgrades(e.upgrades),super.onHandshake(e)}_filterUpgrades(e){const t=[];for(let r=0;r<e.length;r++)~this.transports.indexOf(e[r])&&t.push(e[r]);return t}}let As=class extends Os{constructor(e,t={}){const r="object"==typeof e?e:t;(!r.transports||r.transports&&"string"==typeof r.transports[0])&&(r.transports=(r.transports||["polling","websocket","webtransport"]).map(e=>Ts[e]).filter(e=>!!e)),super(e,r)}};const Ns="function"==typeof ArrayBuffer,js=Object.prototype.toString,Fs="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===js.call(Blob),Bs="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===js.call(File);function Us(e){return Ns&&(e instanceof ArrayBuffer||(e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer)(e))||Fs&&e instanceof Blob||Bs&&e instanceof File}function $s(e,t){if(!e||"object"!=typeof e)return!1;if(Array.isArray(e)){for(let t=0,r=e.length;t<r;t++)if($s(e[t]))return!0;return!1}if(Us(e))return!0;if(e.toJSON&&"function"==typeof e.toJSON&&1===arguments.length)return $s(e.toJSON(),!0);for(const r in e)if(Object.prototype.hasOwnProperty.call(e,r)&&$s(e[r]))return!0;return!1}function Vs(e){const t=[],r=e.data,s=e;return s.data=qs(r,t),s.attachments=t.length,{packet:s,buffers:t}}function qs(e,t){if(!e)return e;if(Us(e)){const r={_placeholder:!0,num:t.length};return t.push(e),r}if(Array.isArray(e)){const r=new Array(e.length);for(let s=0;s<e.length;s++)r[s]=qs(e[s],t);return r}if("object"==typeof e&&!(e instanceof Date)){const r={};for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&(r[s]=qs(e[s],t));return r}return e}function Ws(e,t){return e.data=zs(e.data,t),delete e.attachments,e}function zs(e,t){if(!e)return e;if(e&&!0===e._placeholder){if("number"==typeof e.num&&e.num>=0&&e.num<t.length)return t[e.num];throw new Error("illegal attachments")}if(Array.isArray(e))for(let r=0;r<e.length;r++)e[r]=zs(e[r],t);else if("object"==typeof e)for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(e[r]=zs(e[r],t));return e}const Hs=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];var Gs,Ks;(Ks=Gs||(Gs={}))[Ks.CONNECT=0]="CONNECT",Ks[Ks.DISCONNECT=1]="DISCONNECT",Ks[Ks.EVENT=2]="EVENT",Ks[Ks.ACK=3]="ACK",Ks[Ks.CONNECT_ERROR=4]="CONNECT_ERROR",Ks[Ks.BINARY_EVENT=5]="BINARY_EVENT",Ks[Ks.BINARY_ACK=6]="BINARY_ACK";function Js(e){return"[object Object]"===Object.prototype.toString.call(e)}class Qs extends is{constructor(e){super(),this.reviver=e}add(e){let t;if("string"==typeof e){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");t=this.decodeString(e);const r=t.type===Gs.BINARY_EVENT;r||t.type===Gs.BINARY_ACK?(t.type=r?Gs.EVENT:Gs.ACK,this.reconstructor=new Xs(t),0===t.attachments&&super.emitReserved("decoded",t)):super.emitReserved("decoded",t)}else{if(!Us(e)&&!e.base64)throw new Error("Unknown type: "+e);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");t=this.reconstructor.takeBinaryData(e),t&&(this.reconstructor=null,super.emitReserved("decoded",t))}}decodeString(e){let t=0;const r={type:Number(e.charAt(0))};if(void 0===Gs[r.type])throw new Error("unknown packet type "+r.type);if(r.type===Gs.BINARY_EVENT||r.type===Gs.BINARY_ACK){const s=t+1;for(;"-"!==e.charAt(++t)&&t!=e.length;);const i=e.substring(s,t);if(i!=Number(i)||"-"!==e.charAt(t))throw new Error("Illegal attachments");r.attachments=Number(i)}if("/"===e.charAt(t+1)){const s=t+1;for(;++t;){if(","===e.charAt(t))break;if(t===e.length)break}r.nsp=e.substring(s,t)}else r.nsp="/";const s=e.charAt(t+1);if(""!==s&&Number(s)==s){const s=t+1;for(;++t;){const r=e.charAt(t);if(null==r||Number(r)!=r){--t;break}if(t===e.length)break}r.id=Number(e.substring(s,t+1))}if(e.charAt(++t)){const s=this.tryParse(e.substr(t));if(!Qs.isPayloadValid(r.type,s))throw new Error("invalid payload");r.data=s}return r}tryParse(e){try{return JSON.parse(e,this.reviver)}catch(t){return!1}}static isPayloadValid(e,t){switch(e){case Gs.CONNECT:return Js(t);case Gs.DISCONNECT:return void 0===t;case Gs.CONNECT_ERROR:return"string"==typeof t||Js(t);case Gs.EVENT:case Gs.BINARY_EVENT:return Array.isArray(t)&&("number"==typeof t[0]||"string"==typeof t[0]&&-1===Hs.indexOf(t[0]));case Gs.ACK:case Gs.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}class Xs{constructor(e){this.packet=e,this.buffers=[],this.reconPack=e}takeBinaryData(e){if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){const e=Ws(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}const Ys=Object.freeze(Object.defineProperty({__proto__:null,Decoder:Qs,Encoder:class{constructor(e){this.replacer=e}encode(e){return e.type!==Gs.EVENT&&e.type!==Gs.ACK||!$s(e)?[this.encodeAsString(e)]:this.encodeAsBinary({type:e.type===Gs.EVENT?Gs.BINARY_EVENT:Gs.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id})}encodeAsString(e){let t=""+e.type;return e.type!==Gs.BINARY_EVENT&&e.type!==Gs.BINARY_ACK||(t+=e.attachments+"-"),e.nsp&&"/"!==e.nsp&&(t+=e.nsp+","),null!=e.id&&(t+=e.id),null!=e.data&&(t+=JSON.stringify(e.data,this.replacer)),t}encodeAsBinary(e){const t=Vs(e),r=this.encodeAsString(t.packet),s=t.buffers;return s.unshift(r),s}},get PacketType(){return Gs},protocol:5},Symbol.toStringTag,{value:"Module"}));function Zs(e,t,r){return e.on(t,r),function(){e.off(t,r)}}const ei=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class ti extends is{constructor(e,t,r){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,r&&r.auth&&(this.auth=r.auth),this._opts=Object.assign({},r),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const e=this.io;this.subs=[Zs(e,"open",this.onopen.bind(this)),Zs(e,"packet",this.onpacket.bind(this)),Zs(e,"error",this.onerror.bind(this)),Zs(e,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}open(){return this.connect()}send(...e){return e.unshift("message"),this.emit.apply(this,e),this}emit(e,...t){var r,s,i;if(ei.hasOwnProperty(e))throw new Error('"'+e.toString()+'" is a reserved event name');if(t.unshift(e),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(t),this;const a={type:Gs.EVENT,data:t,options:{}};if(a.options.compress=!1!==this.flags.compress,"function"==typeof t[t.length-1]){const e=this.ids++,r=t.pop();this._registerAckCallback(e,r),a.id=e}const n=null===(s=null===(r=this.io.engine)||void 0===r?void 0:r.transport)||void 0===s?void 0:s.writable,o=this.connected&&!(null===(i=this.io.engine)||void 0===i?void 0:i._hasPingExpired());return this.flags.volatile&&!n||(o?(this.notifyOutgoingListeners(a),this.packet(a)):this.sendBuffer.push(a)),this.flags={},this}_registerAckCallback(e,t){var r;const s=null!==(r=this.flags.timeout)&&void 0!==r?r:this._opts.ackTimeout;if(void 0===s)return void(this.acks[e]=t);const i=this.io.setTimeoutFn(()=>{delete this.acks[e];for(let t=0;t<this.sendBuffer.length;t++)this.sendBuffer[t].id===e&&this.sendBuffer.splice(t,1);t.call(this,new Error("operation has timed out"))},s),a=(...e)=>{this.io.clearTimeoutFn(i),t.apply(this,e)};a.withError=!0,this.acks[e]=a}emitWithAck(e,...t){return new Promise((r,s)=>{const i=(e,t)=>e?s(e):r(t);i.withError=!0,t.push(i),this.emit(e,...t)})}_addToQueue(e){let t;"function"==typeof e[e.length-1]&&(t=e.pop());const r={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push((e,...s)=>{if(r!==this._queue[0])return;return null!==e?r.tryCount>this._opts.retries&&(this._queue.shift(),t&&t(e)):(this._queue.shift(),t&&t(null,...s)),r.pending=!1,this._drainQueue()}),this._queue.push(r),this._drainQueue()}_drainQueue(e=!1){if(!this.connected||0===this._queue.length)return;const t=this._queue[0];t.pending&&!e||(t.pending=!0,t.tryCount++,this.flags=t.flags,this.emit.apply(this,t.args))}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){"function"==typeof this.auth?this.auth(e=>{this._sendConnectPacket(e)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:Gs.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,t){this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(e=>{if(!this.sendBuffer.some(t=>String(t.id)===e)){const t=this.acks[e];delete this.acks[e],t.withError&&t.call(this,new Error("socket has been disconnected"))}})}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case Gs.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case Gs.EVENT:case Gs.BINARY_EVENT:this.onevent(e);break;case Gs.ACK:case Gs.BINARY_ACK:this.onack(e);break;case Gs.DISCONNECT:this.ondisconnect();break;case Gs.CONNECT_ERROR:this.destroy();const t=new Error(e.data.message);t.data=e.data.data,this.emitReserved("connect_error",t)}}onevent(e){const t=e.data||[];null!=e.id&&t.push(this.ack(e.id)),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){const t=this._anyListeners.slice();for(const r of t)r.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&"string"==typeof e[e.length-1]&&(this._lastOffset=e[e.length-1])}ack(e){const t=this;let r=!1;return function(...s){r||(r=!0,t.packet({type:Gs.ACK,id:e,data:s}))}}onack(e){const t=this.acks[e.id];"function"==typeof t&&(delete this.acks[e.id],t.withError&&e.data.unshift(null),t.apply(this,e.data))}onconnect(e,t){this.id=e,this.recovered=t&&this._pid===t,this._pid=t,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach(e=>this.emitEvent(e)),this.receiveBuffer=[],this.sendBuffer.forEach(e=>{this.notifyOutgoingListeners(e),this.packet(e)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(e=>e()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:Gs.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){const t=this._anyListeners;for(let r=0;r<t.length;r++)if(e===t[r])return t.splice(r,1),this}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(e),this}prependAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(e),this}offAnyOutgoing(e){if(!this._anyOutgoingListeners)return this;if(e){const t=this._anyOutgoingListeners;for(let r=0;r<t.length;r++)if(e===t[r])return t.splice(r,1),this}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(e){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){const t=this._anyOutgoingListeners.slice();for(const r of t)r.apply(this,e.data)}}}function ri(e){e=e||{},this.ms=e.min||100,this.max=e.max||1e4,this.factor=e.factor||2,this.jitter=e.jitter>0&&e.jitter<=1?e.jitter:0,this.attempts=0}ri.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),r=Math.floor(t*this.jitter*e);e=1&Math.floor(10*t)?e+r:e-r}return 0|Math.min(e,this.max)},ri.prototype.reset=function(){this.attempts=0},ri.prototype.setMin=function(e){this.ms=e},ri.prototype.setMax=function(e){this.max=e},ri.prototype.setJitter=function(e){this.jitter=e};class si extends is{constructor(e,t){var r;super(),this.nsps={},this.subs=[],e&&"object"==typeof e&&(t=e,e=void 0),(t=t||{}).path=t.path||"/socket.io",this.opts=t,ls(this,t),this.reconnection(!1!==t.reconnection),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor(null!==(r=t.randomizationFactor)&&void 0!==r?r:.5),this.backoff=new ri({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==t.timeout?2e4:t.timeout),this._readyState="closed",this.uri=e;const s=t.parser||Ys;this.encoder=new s.Encoder,this.decoder=new s.Decoder,this._autoConnect=!1!==t.autoConnect,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,e||(this.skipReconnect=!0),this):this._reconnection}reconnectionAttempts(e){return void 0===e?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return void 0===e?this._reconnectionDelay:(this._reconnectionDelay=e,null===(t=this.backoff)||void 0===t||t.setMin(e),this)}randomizationFactor(e){var t;return void 0===e?this._randomizationFactor:(this._randomizationFactor=e,null===(t=this.backoff)||void 0===t||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return void 0===e?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,null===(t=this.backoff)||void 0===t||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}open(e){if(~this._readyState.indexOf("open"))return this;this.engine=new As(this.uri,this.opts);const t=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;const s=Zs(t,"open",function(){r.onopen(),e&&e()}),i=t=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",t),e?e(t):this.maybeReconnectOnOpen()},a=Zs(t,"error",i);if(!1!==this._timeout){const e=this._timeout,r=this.setTimeoutFn(()=>{s(),i(new Error("timeout")),t.close()},e);this.opts.autoUnref&&r.unref(),this.subs.push(()=>{this.clearTimeoutFn(r)})}return this.subs.push(s),this.subs.push(a),this}connect(e){return this.open(e)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const e=this.engine;this.subs.push(Zs(e,"ping",this.onping.bind(this)),Zs(e,"data",this.ondata.bind(this)),Zs(e,"error",this.onerror.bind(this)),Zs(e,"close",this.onclose.bind(this)),Zs(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(t){this.onclose("parse error",t)}}ondecoded(e){as(()=>{this.emitReserved("packet",e)},this.setTimeoutFn)}onerror(e){this.emitReserved("error",e)}socket(e,t){let r=this.nsps[e];return r?this._autoConnect&&!r.active&&r.connect():(r=new ti(this,e,t),this.nsps[e]=r),r}_destroy(e){const t=Object.keys(this.nsps);for(const r of t){if(this.nsps[r].active)return}this._close()}_packet(e){const t=this.encoder.encode(e);for(let r=0;r<t.length;r++)this.engine.write(t[r],e.options)}cleanup(){this.subs.forEach(e=>e()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(e,t){var r;this.cleanup(),null===(r=this.engine)||void 0===r||r.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const t=this.backoff.duration();this._reconnecting=!0;const r=this.setTimeoutFn(()=>{e.skipReconnect||(this.emitReserved("reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open(t=>{t?(e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",t)):e.onreconnect()}))},t);this.opts.autoUnref&&r.unref(),this.subs.push(()=>{this.clearTimeoutFn(r)})}}onreconnect(){const e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}const ii={};function ai(e,t){"object"==typeof e&&(t=e,e=void 0);const r=function(e,t="",r){let s=e;r=r||"undefined"!=typeof location&&location,null==e&&(e=r.protocol+"//"+r.host),"string"==typeof e&&("/"===e.charAt(0)&&(e="/"===e.charAt(1)?r.protocol+e:r.host+e),/^(https?|wss?):\/\//.test(e)||(e=void 0!==r?r.protocol+"//"+e:"https://"+e),s=xs(e)),s.port||(/^(http|ws)$/.test(s.protocol)?s.port="80":/^(http|ws)s$/.test(s.protocol)&&(s.port="443")),s.path=s.path||"/";const i=-1!==s.host.indexOf(":")?"["+s.host+"]":s.host;return s.id=s.protocol+"://"+i+":"+s.port+t,s.href=s.protocol+"://"+i+(r&&r.port===s.port?"":":"+s.port),s}(e,(t=t||{}).path||"/socket.io"),s=r.source,i=r.id,a=r.path,n=ii[i]&&a in ii[i].nsps;let o;return t.forceNew||t["force new connection"]||!1===t.multiplex||n?o=new si(s,t):(ii[i]||(ii[i]=new si(s,t)),o=ii[i]),r.query&&!t.query&&(t.query=r.queryKey),o.socket(r.path,t)}Object.assign(ai,{Manager:si,Socket:ti,io:ai,connect:ai}),new Tr("WebSocketTransport");const ni=new Tr("WebsocketTransport");class oi extends Dr{constructor(e,t){super(ni),this._closed=!1,this._url=e,this._ws=null,this._socketShouldReconnect=t,this._isConnected=!1,this._lastTimerId=null,this._roomJoined=!1,ni.info("Request received to instantiate websocket transport! with url :%s",e),this.createAndUpdateSocket({connectionType:null})}get connectionStatus(){return this._isConnected}createAndUpdateSocket=async({connectionType:e=null})=>{ni.info("Room close status:%s",this._closed);let t,r=this;if(this._closed)return void ni.info("Websocket already closed!");if(!this._url)return void ni.warn("url not available!");t=null===e?`${this._url}&connectionType=landing`:`${this._url}&connectionType=${e}`,ni.debug("the url is:%s",t),this._ws=new WebSocket(t);let s=0;for(ni.debug("websocketHelper createAndUpdateSocket created a new websocket"),ni.debug("websocketHelper createAndUpdateSocket:%s",this._ws.readyState);1!==this._ws.readyState&&this._socketShouldReconnect;)if(3===this._ws.readyState&&(ni.debug("websocketHelper createAndUpdateSocket"),await Mr(2e3),this._ws=new WebSocket(t),ni.debug("websocketHelper createAndUpdateSocket newly created websocket state:%s",this._ws.readyState)),await Mr(500),s++,s>250){ni.error("No of retries limit to connect with server exhausted!");break}1===this._ws.readyState&&ni.debug(`updated the websocket with ready state -${this._ws.readyState}`),this.safeEmit("connected"),ni.debug(`updating the websocket to redux store with ready state -${this._ws.readyState}`),this._ws.onopen=()=>{this._closed||(ni.debug("Websocket open"),this.safeEmit("open"))},this._isConnected=!0,this._ws.onmessage=e=>{if(this._closed)return;let t=JSON.parse(e.data);switch(t.id){case"ping":{this._lastTimerId&&clearTimeout(this._lastTimerId);let e=this;this._lastTimerId=setTimeout(function(){e._isConnected=!1,this._roomJoined?e.close(4104,"In call connections close as server is unreachable for last 5 seconds!"):e.close(4103,"Landing page socket close by client as server not reachable for a couple of seconds!"),e._socketShouldReconnect&&(e._closed=!1,e.createAndUpdateSocket({connectionType:"inCall"}))},22e3);const t={id:"pong"};this._ws.send(JSON.stringify(t));break}case"invalidToken":ni.debug("Session token invalid!"),this._socketShouldReconnect=!1,this.safeEmit("invalidToken",t);break;case"alreadyActive":this.safeEmit("alreadyActive",t);break;case"passwordDisabled":this.safeEmit("passwordDisabled",t);break;case"notify":this.safeEmit("notify",t.data);break;case"remotePeerJoin":this.safeEmit("roomStartedP2p",t);break;case"userError":this.safeEmit("userError",t);break;case"validationAlert":this.safeEmit("validationError",t);break;case"joinStatusOnLanding":this.safeEmit("defaultJoinStatus",t);break;default:this.safeEmit("message",t)}},this._ws.onclose=e=>{r._closed||(ni.warn('WebSocket "close" event [wasClean:%s, code:%s, reason:"%s"]',e.wasClean,e.code,e.reason),4503===e.code||4504===e.code?(ni.error("Socket closed with reason",e.reason),r._closed=!0):4500!==e.code&&(ni.debug("trying to reconnect:%s",e.code),r._closed=!1,this._roomJoined?(ni.debug("Trying to join after a network reset while in a meeting"),r.createAndUpdateSocket({connectionType:"inCall"})):(ni.debug("Trying to join after a network reset while on the landing page"),r.createAndUpdateSocket({connectionType:null})),clearTimeout(r._lastTimerId)),this._url=null,ni.info("The websocket closed status is:%s",r._closed),r.safeEmit("close",{code:e.code,reason:e.reason}))}};close(e,t){if(!this._closed){ni.info("close()"),this._closed=!0,this.safeEmit("close",{code:e,reason:t});try{this._ws.onopen=null,this._ws.onclose=null,this._ws.onerror=null,this._ws.onmessage=null,clearTimeout(this._lastTimerId),e&&t?this._ws.close(e,t):this._ws.close()}catch(r){ni.error("close() | error closing the WebSocket: %o",r)}}}async send(e){if(this._closed)ni.error("Transport closed or not yet ready. Try again later!");else try{this._ws.send(JSON.stringify(e))}catch(t){throw ni.warn("send() failed:%o",t),t}}}const ci=()=>Math.floor(1e10*Math.random()),di=()=>"111-111-1111".replace(/[018]/g,()=>(15&crypto.getRandomValues(new Uint8Array(1))[0]).toString(16));function li(e,t){return function(){return e.apply(t,arguments)}}const{toString:pi}=Object.prototype,{getPrototypeOf:ui}=Object,{iterator:hi,toStringTag:mi}=Symbol,fi=(e=>t=>{const r=pi.call(t);return e[r]||(e[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),gi=e=>(e=e.toLowerCase(),t=>fi(t)===e),bi=e=>t=>typeof t===e,{isArray:yi}=Array,_i=bi("undefined");function vi(e){return null!==e&&!_i(e)&&null!==e.constructor&&!_i(e.constructor)&&Ci(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const wi=gi("ArrayBuffer");const Si=bi("string"),Ci=bi("function"),Pi=bi("number"),ki=e=>null!==e&&"object"==typeof e,Ri=e=>{if("object"!==fi(e))return!1;const t=ui(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||mi in e||hi in e)},Ti=gi("Date"),Ei=gi("File"),Ii=gi("Blob"),xi=gi("FileList"),Di=gi("URLSearchParams"),[Mi,Li,Oi,Ai]=["ReadableStream","Request","Response","Headers"].map(gi);function Ni(e,t,{allOwnKeys:r=!1}={}){if(null==e)return;let s,i;if("object"!=typeof e&&(e=[e]),yi(e))for(s=0,i=e.length;s<i;s++)t.call(null,e[s],s,e);else{if(vi(e))return;const i=r?Object.getOwnPropertyNames(e):Object.keys(e),a=i.length;let n;for(s=0;s<a;s++)n=i[s],t.call(null,e[n],n,e)}}function ji(e,t){if(vi(e))return null;t=t.toLowerCase();const r=Object.keys(e);let s,i=r.length;for(;i-- >0;)if(s=r[i],t===s.toLowerCase())return s;return null}const Fi="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:globalThis,Bi=e=>!_i(e)&&e!==Fi;const Ui=(e=>t=>e&&t instanceof e)("undefined"!=typeof Uint8Array&&ui(Uint8Array)),$i=gi("HTMLFormElement"),Vi=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),qi=gi("RegExp"),Wi=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),s={};Ni(r,(r,i)=>{let a;!1!==(a=t(r,i,e))&&(s[i]=a||r)}),Object.defineProperties(e,s)};const zi=gi("AsyncFunction"),Hi=(Gi="function"==typeof setImmediate,Ki=Ci(Fi.postMessage),Gi?setImmediate:Ki?(Ji=`axios@${Math.random()}`,Qi=[],Fi.addEventListener("message",({source:e,data:t})=>{e===Fi&&t===Ji&&Qi.length&&Qi.shift()()},!1),e=>{Qi.push(e),Fi.postMessage(Ji,"*")}):e=>setTimeout(e));var Gi,Ki,Ji,Qi;const Xi="undefined"!=typeof queueMicrotask?queueMicrotask.bind(Fi):"undefined"!=typeof process&&process.nextTick||Hi,Yi={isArray:yi,isArrayBuffer:wi,isBuffer:vi,isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||Ci(e.append)&&("formdata"===(t=fi(e))||"object"===t&&Ci(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&wi(e.buffer),t},isString:Si,isNumber:Pi,isBoolean:e=>!0===e||!1===e,isObject:ki,isPlainObject:Ri,isEmptyObject:e=>{if(!ki(e)||vi(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(t){return!1}},isReadableStream:Mi,isRequest:Li,isResponse:Oi,isHeaders:Ai,isUndefined:_i,isDate:Ti,isFile:Ei,isBlob:Ii,isRegExp:qi,isFunction:Ci,isStream:e=>ki(e)&&Ci(e.pipe),isURLSearchParams:Di,isTypedArray:Ui,isFileList:xi,forEach:Ni,merge:function e(){const{caseless:t}=Bi(this)&&this||{},r={},s=(s,i)=>{const a=t&&ji(r,i)||i;Ri(r[a])&&Ri(s)?r[a]=e(r[a],s):Ri(s)?r[a]=e({},s):yi(s)?r[a]=s.slice():r[a]=s};for(let i=0,a=arguments.length;i<a;i++)arguments[i]&&Ni(arguments[i],s);return r},extend:(e,t,r,{allOwnKeys:s}={})=>(Ni(t,(t,s)=>{r&&Ci(t)?e[s]=li(t,r):e[s]=t},{allOwnKeys:s}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,r,s)=>{e.prototype=Object.create(t.prototype,s),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},toFlatObject:(e,t,r,s)=>{let i,a,n;const o={};if(t=t||{},null==e)return t;do{for(i=Object.getOwnPropertyNames(e),a=i.length;a-- >0;)n=i[a],s&&!s(n,e,t)||o[n]||(t[n]=e[n],o[n]=!0);e=!1!==r&&ui(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:fi,kindOfTest:gi,endsWith:(e,t,r)=>{e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;const s=e.indexOf(t,r);return-1!==s&&s===r},toArray:e=>{if(!e)return null;if(yi(e))return e;let t=e.length;if(!Pi(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},forEachEntry:(e,t)=>{const r=(e&&e[hi]).call(e);let s;for(;(s=r.next())&&!s.done;){const r=s.value;t.call(e,r[0],r[1])}},matchAll:(e,t)=>{let r;const s=[];for(;null!==(r=e.exec(t));)s.push(r);return s},isHTMLForm:$i,hasOwnProperty:Vi,hasOwnProp:Vi,reduceDescriptors:Wi,freezeMethods:e=>{Wi(e,(t,r)=>{if(Ci(e)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;const s=e[r];Ci(s)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")}))})},toObjectSet:(e,t)=>{const r={},s=e=>{e.forEach(e=>{r[e]=!0})};return yi(e)?s(e):s(String(e).split(t)),r},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,r){return t.toUpperCase()+r}),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:ji,global:Fi,isContextDefined:Bi,isSpecCompliantForm:function(e){return!!(e&&Ci(e.append)&&"FormData"===e[mi]&&e[hi])},toJSONObject:e=>{const t=new Array(10),r=(e,s)=>{if(ki(e)){if(t.indexOf(e)>=0)return;if(vi(e))return e;if(!("toJSON"in e)){t[s]=e;const i=yi(e)?[]:{};return Ni(e,(e,t)=>{const a=r(e,s+1);!_i(a)&&(i[t]=a)}),t[s]=void 0,i}}return e};return r(e,0)},isAsyncFn:zi,isThenable:e=>e&&(ki(e)||Ci(e))&&Ci(e.then)&&Ci(e.catch),setImmediate:Hi,asap:Xi,isIterable:e=>null!=e&&Ci(e[hi])};function Zi(e,t,r,s,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),s&&(this.request=s),i&&(this.response=i,this.status=i.status?i.status:null)}Yi.inherits(Zi,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Yi.toJSONObject(this.config),code:this.code,status:this.status}}});const ea=Zi.prototype,ta={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{ta[e]={value:e}}),Object.defineProperties(Zi,ta),Object.defineProperty(ea,"isAxiosError",{value:!0}),Zi.from=(e,t,r,s,i,a)=>{const n=Object.create(ea);return Yi.toFlatObject(e,n,function(e){return e!==Error.prototype},e=>"isAxiosError"!==e),Zi.call(n,e.message,t,r,s,i),n.cause=e,n.name=e.name,a&&Object.assign(n,a),n};function ra(e){return Yi.isPlainObject(e)||Yi.isArray(e)}function sa(e){return Yi.endsWith(e,"[]")?e.slice(0,-2):e}function ia(e,t,r){return e?e.concat(t).map(function(e,t){return e=sa(e),!r&&t?"["+e+"]":e}).join(r?".":""):t}const aa=Yi.toFlatObject(Yi,{},null,function(e){return/^is[A-Z]/.test(e)});function na(e,t,r){if(!Yi.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const s=(r=Yi.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!Yi.isUndefined(t[e])})).metaTokens,i=r.visitor||d,a=r.dots,n=r.indexes,o=(r.Blob||"undefined"!=typeof Blob&&Blob)&&Yi.isSpecCompliantForm(t);if(!Yi.isFunction(i))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(Yi.isDate(e))return e.toISOString();if(Yi.isBoolean(e))return e.toString();if(!o&&Yi.isBlob(e))throw new Zi("Blob is not supported. Use a Buffer instead.");return Yi.isArrayBuffer(e)||Yi.isTypedArray(e)?o&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function d(e,r,i){let o=e;if(e&&!i&&"object"==typeof e)if(Yi.endsWith(r,"{}"))r=s?r:r.slice(0,-2),e=JSON.stringify(e);else if(Yi.isArray(e)&&function(e){return Yi.isArray(e)&&!e.some(ra)}(e)||(Yi.isFileList(e)||Yi.endsWith(r,"[]"))&&(o=Yi.toArray(e)))return r=sa(r),o.forEach(function(e,s){!Yi.isUndefined(e)&&null!==e&&t.append(!0===n?ia([r],s,a):null===n?r:r+"[]",c(e))}),!1;return!!ra(e)||(t.append(ia(i,r,a),c(e)),!1)}const l=[],p=Object.assign(aa,{defaultVisitor:d,convertValue:c,isVisitable:ra});if(!Yi.isObject(e))throw new TypeError("data must be an object");return function e(r,s){if(!Yi.isUndefined(r)){if(-1!==l.indexOf(r))throw Error("Circular reference detected in "+s.join("."));l.push(r),Yi.forEach(r,function(r,a){!0===(!(Yi.isUndefined(r)||null===r)&&i.call(t,r,Yi.isString(a)?a.trim():a,s,p))&&e(r,s?s.concat(a):[a])}),l.pop()}}(e),t}function oa(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function ca(e,t){this._pairs=[],e&&na(e,this,t)}const da=ca.prototype;function la(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function pa(e,t,r){if(!t)return e;const s=r&&r.encode||la;Yi.isFunction(r)&&(r={serialize:r});const i=r&&r.serialize;let a;if(a=i?i(t,r):Yi.isURLSearchParams(t)?t.toString():new ca(t,r).toString(s),a){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+a}return e}da.append=function(e,t){this._pairs.push([e,t])},da.toString=function(e){const t=e?function(t){return e.call(this,t,oa)}:oa;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};class ua{constructor(){this.handlers=[]}use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){Yi.forEach(this.handlers,function(t){null!==t&&e(t)})}}const ha={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ma={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:ca,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},fa="undefined"!=typeof window&&"undefined"!=typeof document,ga="object"==typeof navigator&&navigator||void 0,ba=fa&&(!ga||["ReactNative","NativeScript","NS"].indexOf(ga.product)<0),ya="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,_a=fa&&window.location.href||"http://localhost",va={...Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:fa,hasStandardBrowserEnv:ba,hasStandardBrowserWebWorkerEnv:ya,navigator:ga,origin:_a},Symbol.toStringTag,{value:"Module"})),...ma};function wa(e){function t(e,r,s,i){let a=e[i++];if("__proto__"===a)return!0;const n=Number.isFinite(+a),o=i>=e.length;if(a=!a&&Yi.isArray(s)?s.length:a,o)return Yi.hasOwnProp(s,a)?s[a]=[s[a],r]:s[a]=r,!n;s[a]&&Yi.isObject(s[a])||(s[a]=[]);return t(e,r,s[a],i)&&Yi.isArray(s[a])&&(s[a]=function(e){const t={},r=Object.keys(e);let s;const i=r.length;let a;for(s=0;s<i;s++)a=r[s],t[a]=e[a];return t}(s[a])),!n}if(Yi.isFormData(e)&&Yi.isFunction(e.entries)){const r={};return Yi.forEachEntry(e,(e,s)=>{t(function(e){return Yi.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),s,r,0)}),r}return null}const Sa={transitional:ha,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const r=t.getContentType()||"",s=r.indexOf("application/json")>-1,i=Yi.isObject(e);i&&Yi.isHTMLForm(e)&&(e=new FormData(e));if(Yi.isFormData(e))return s?JSON.stringify(wa(e)):e;if(Yi.isArrayBuffer(e)||Yi.isBuffer(e)||Yi.isStream(e)||Yi.isFile(e)||Yi.isBlob(e)||Yi.isReadableStream(e))return e;if(Yi.isArrayBufferView(e))return e.buffer;if(Yi.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let a;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return na(e,new va.classes.URLSearchParams,{visitor:function(e,t,r,s){return va.isNode&&Yi.isBuffer(e)?(this.append(t,e.toString("base64")),!1):s.defaultVisitor.apply(this,arguments)},...t})}(e,this.formSerializer).toString();if((a=Yi.isFileList(e))||r.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return na(a?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||s?(t.setContentType("application/json",!1),function(e,t,r){if(Yi.isString(e))try{return(t||JSON.parse)(e),Yi.trim(e)}catch(s){if("SyntaxError"!==s.name)throw s}return(r||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||Sa.transitional,r=t&&t.forcedJSONParsing,s="json"===this.responseType;if(Yi.isResponse(e)||Yi.isReadableStream(e))return e;if(e&&Yi.isString(e)&&(r&&!this.responseType||s)){const r=!(t&&t.silentJSONParsing)&&s;try{return JSON.parse(e)}catch(i){if(r){if("SyntaxError"===i.name)throw Zi.from(i,Zi.ERR_BAD_RESPONSE,this,null,this.response);throw i}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:va.classes.FormData,Blob:va.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Yi.forEach(["delete","get","head","post","put","patch"],e=>{Sa.headers[e]={}});const Ca=Yi.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Pa=Symbol("internals");function ka(e){return e&&String(e).trim().toLowerCase()}function Ra(e){return!1===e||null==e?e:Yi.isArray(e)?e.map(Ra):String(e)}function Ta(e,t,r,s,i){return Yi.isFunction(s)?s.call(this,t,r):(i&&(t=r),Yi.isString(t)?Yi.isString(s)?-1!==t.indexOf(s):Yi.isRegExp(s)?s.test(t):void 0:void 0)}let Ea=class{constructor(e){e&&this.set(e)}set(e,t,r){const s=this;function i(e,t,r){const i=ka(t);if(!i)throw new Error("header name must be a non-empty string");const a=Yi.findKey(s,i);(!a||void 0===s[a]||!0===r||void 0===r&&!1!==s[a])&&(s[a||t]=Ra(e))}const a=(e,t)=>Yi.forEach(e,(e,r)=>i(e,r,t));if(Yi.isPlainObject(e)||e instanceof this.constructor)a(e,t);else if(Yi.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))a((e=>{const t={};let r,s,i;return e&&e.split("\n").forEach(function(e){i=e.indexOf(":"),r=e.substring(0,i).trim().toLowerCase(),s=e.substring(i+1).trim(),!r||t[r]&&Ca[r]||("set-cookie"===r?t[r]?t[r].push(s):t[r]=[s]:t[r]=t[r]?t[r]+", "+s:s)}),t})(e),t);else if(Yi.isObject(e)&&Yi.isIterable(e)){let r,s,i={};for(const t of e){if(!Yi.isArray(t))throw TypeError("Object iterator must return a key-value pair");i[s=t[0]]=(r=i[s])?Yi.isArray(r)?[...r,t[1]]:[r,t[1]]:t[1]}a(i,t)}else null!=e&&i(t,e,r);return this}get(e,t){if(e=ka(e)){const r=Yi.findKey(this,e);if(r){const e=this[r];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=r.exec(e);)t[s[1]]=s[2];return t}(e);if(Yi.isFunction(t))return t.call(this,e,r);if(Yi.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=ka(e)){const r=Yi.findKey(this,e);return!(!r||void 0===this[r]||t&&!Ta(0,this[r],r,t))}return!1}delete(e,t){const r=this;let s=!1;function i(e){if(e=ka(e)){const i=Yi.findKey(r,e);!i||t&&!Ta(0,r[i],i,t)||(delete r[i],s=!0)}}return Yi.isArray(e)?e.forEach(i):i(e),s}clear(e){const t=Object.keys(this);let r=t.length,s=!1;for(;r--;){const i=t[r];e&&!Ta(0,this[i],i,e,!0)||(delete this[i],s=!0)}return s}normalize(e){const t=this,r={};return Yi.forEach(this,(s,i)=>{const a=Yi.findKey(r,i);if(a)return t[a]=Ra(s),void delete t[i];const n=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,r)=>t.toUpperCase()+r)}(i):String(i).trim();n!==i&&delete t[i],t[n]=Ra(s),r[n]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return Yi.forEach(this,(r,s)=>{null!=r&&!1!==r&&(t[s]=e&&Yi.isArray(r)?r.join(", "):r)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach(e=>r.set(e)),r}static accessor(e){const t=(this[Pa]=this[Pa]={accessors:{}}).accessors,r=this.prototype;function s(e){const s=ka(e);t[s]||(!function(e,t){const r=Yi.toCamelCase(" "+t);["get","set","has"].forEach(s=>{Object.defineProperty(e,s+r,{value:function(e,r,i){return this[s].call(this,t,e,r,i)},configurable:!0})})}(r,e),t[s]=!0)}return Yi.isArray(e)?e.forEach(s):s(e),this}};function Ia(e,t){const r=this||Sa,s=t||r,i=Ea.from(s.headers);let a=s.data;return Yi.forEach(e,function(e){a=e.call(r,a,i.normalize(),t?t.status:void 0)}),i.normalize(),a}function xa(e){return!(!e||!e.__CANCEL__)}function Da(e,t,r){Zi.call(this,null==e?"canceled":e,Zi.ERR_CANCELED,t,r),this.name="CanceledError"}function Ma(e,t,r){const s=r.config.validateStatus;r.status&&s&&!s(r.status)?t(new Zi("Request failed with status code "+r.status,[Zi.ERR_BAD_REQUEST,Zi.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):e(r)}Ea.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),Yi.reduceDescriptors(Ea.prototype,({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[r]=e}}}),Yi.freezeMethods(Ea),Yi.inherits(Da,Zi,{__CANCEL__:!0});const La=(e,t,r=3)=>{let s=0;const i=function(e,t){e=e||10;const r=new Array(e),s=new Array(e);let i,a=0,n=0;return t=void 0!==t?t:1e3,function(o){const c=Date.now(),d=s[n];i||(i=c),r[a]=o,s[a]=c;let l=n,p=0;for(;l!==a;)p+=r[l++],l%=e;if(a=(a+1)%e,a===n&&(n=(n+1)%e),c-i<t)return;const u=d&&c-d;return u?Math.round(1e3*p/u):void 0}}(50,250);return function(e,t){let r,s,i=0,a=1e3/t;const n=(t,a=Date.now())=>{i=a,r=null,s&&(clearTimeout(s),s=null),e(...t)};return[(...e)=>{const t=Date.now(),o=t-i;o>=a?n(e,t):(r=e,s||(s=setTimeout(()=>{s=null,n(r)},a-o)))},()=>r&&n(r)]}(r=>{const a=r.loaded,n=r.lengthComputable?r.total:void 0,o=a-s,c=i(o);s=a;e({loaded:a,total:n,progress:n?a/n:void 0,bytes:o,rate:c||void 0,estimated:c&&n&&a<=n?(n-a)/c:void 0,event:r,lengthComputable:null!=n,[t?"download":"upload"]:!0})},r)},Oa=(e,t)=>{const r=null!=e;return[s=>t[0]({lengthComputable:r,total:e,loaded:s}),t[1]]},Aa=e=>(...t)=>Yi.asap(()=>e(...t)),Na=va.hasStandardBrowserEnv?((e,t)=>r=>(r=new URL(r,va.origin),e.protocol===r.protocol&&e.host===r.host&&(t||e.port===r.port)))(new URL(va.origin),va.navigator&&/(msie|trident)/i.test(va.navigator.userAgent)):()=>!0,ja=va.hasStandardBrowserEnv?{write(e,t,r,s,i,a){const n=[e+"="+encodeURIComponent(t)];Yi.isNumber(r)&&n.push("expires="+new Date(r).toGMTString()),Yi.isString(s)&&n.push("path="+s),Yi.isString(i)&&n.push("domain="+i),!0===a&&n.push("secure"),document.cookie=n.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function Fa(e,t,r){let s=!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t);return e&&(s||0==r)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Ba=e=>e instanceof Ea?{...e}:e;function Ua(e,t){t=t||{};const r={};function s(e,t,r,s){return Yi.isPlainObject(e)&&Yi.isPlainObject(t)?Yi.merge.call({caseless:s},e,t):Yi.isPlainObject(t)?Yi.merge({},t):Yi.isArray(t)?t.slice():t}function i(e,t,r,i){return Yi.isUndefined(t)?Yi.isUndefined(e)?void 0:s(void 0,e,0,i):s(e,t,0,i)}function a(e,t){if(!Yi.isUndefined(t))return s(void 0,t)}function n(e,t){return Yi.isUndefined(t)?Yi.isUndefined(e)?void 0:s(void 0,e):s(void 0,t)}function o(r,i,a){return a in t?s(r,i):a in e?s(void 0,r):void 0}const c={url:a,method:a,data:a,baseURL:n,transformRequest:n,transformResponse:n,paramsSerializer:n,timeout:n,timeoutMessage:n,withCredentials:n,withXSRFToken:n,adapter:n,responseType:n,xsrfCookieName:n,xsrfHeaderName:n,onUploadProgress:n,onDownloadProgress:n,decompress:n,maxContentLength:n,maxBodyLength:n,beforeRedirect:n,transport:n,httpAgent:n,httpsAgent:n,cancelToken:n,socketPath:n,responseEncoding:n,validateStatus:o,headers:(e,t,r)=>i(Ba(e),Ba(t),0,!0)};return Yi.forEach(Object.keys({...e,...t}),function(s){const a=c[s]||i,n=a(e[s],t[s],s);Yi.isUndefined(n)&&a!==o||(r[s]=n)}),r}const $a=e=>{const t=Ua({},e);let r,{data:s,withXSRFToken:i,xsrfHeaderName:a,xsrfCookieName:n,headers:o,auth:c}=t;if(t.headers=o=Ea.from(o),t.url=pa(Fa(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),c&&o.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):""))),Yi.isFormData(s))if(va.hasStandardBrowserEnv||va.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if(!1!==(r=o.getContentType())){const[e,...t]=r?r.split(";").map(e=>e.trim()).filter(Boolean):[];o.setContentType([e||"multipart/form-data",...t].join("; "))}if(va.hasStandardBrowserEnv&&(i&&Yi.isFunction(i)&&(i=i(t)),i||!1!==i&&Na(t.url))){const e=a&&n&&ja.read(n);e&&o.set(a,e)}return t},Va="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,r){const s=$a(e);let i=s.data;const a=Ea.from(s.headers).normalize();let n,o,c,d,l,{responseType:p,onUploadProgress:u,onDownloadProgress:h}=s;function m(){d&&d(),l&&l(),s.cancelToken&&s.cancelToken.unsubscribe(n),s.signal&&s.signal.removeEventListener("abort",n)}let f=new XMLHttpRequest;function g(){if(!f)return;const s=Ea.from("getAllResponseHeaders"in f&&f.getAllResponseHeaders());Ma(function(e){t(e),m()},function(e){r(e),m()},{data:p&&"text"!==p&&"json"!==p?f.response:f.responseText,status:f.status,statusText:f.statusText,headers:s,config:e,request:f}),f=null}f.open(s.method.toUpperCase(),s.url,!0),f.timeout=s.timeout,"onloadend"in f?f.onloadend=g:f.onreadystatechange=function(){f&&4===f.readyState&&(0!==f.status||f.responseURL&&0===f.responseURL.indexOf("file:"))&&setTimeout(g)},f.onabort=function(){f&&(r(new Zi("Request aborted",Zi.ECONNABORTED,e,f)),f=null)},f.onerror=function(){r(new Zi("Network Error",Zi.ERR_NETWORK,e,f)),f=null},f.ontimeout=function(){let t=s.timeout?"timeout of "+s.timeout+"ms exceeded":"timeout exceeded";const i=s.transitional||ha;s.timeoutErrorMessage&&(t=s.timeoutErrorMessage),r(new Zi(t,i.clarifyTimeoutError?Zi.ETIMEDOUT:Zi.ECONNABORTED,e,f)),f=null},void 0===i&&a.setContentType(null),"setRequestHeader"in f&&Yi.forEach(a.toJSON(),function(e,t){f.setRequestHeader(t,e)}),Yi.isUndefined(s.withCredentials)||(f.withCredentials=!!s.withCredentials),p&&"json"!==p&&(f.responseType=s.responseType),h&&([c,l]=La(h,!0),f.addEventListener("progress",c)),u&&f.upload&&([o,d]=La(u),f.upload.addEventListener("progress",o),f.upload.addEventListener("loadend",d)),(s.cancelToken||s.signal)&&(n=t=>{f&&(r(!t||t.type?new Da(null,e,f):t),f.abort(),f=null)},s.cancelToken&&s.cancelToken.subscribe(n),s.signal&&(s.signal.aborted?n():s.signal.addEventListener("abort",n)));const b=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(s.url);b&&-1===va.protocols.indexOf(b)?r(new Zi("Unsupported protocol "+b+":",Zi.ERR_BAD_REQUEST,e)):f.send(i||null)})},qa=(e,t)=>{const{length:r}=e=e?e.filter(Boolean):[];if(t||r){let r,s=new AbortController;const i=function(e){if(!r){r=!0,n();const t=e instanceof Error?e:this.reason;s.abort(t instanceof Zi?t:new Da(t instanceof Error?t.message:t))}};let a=t&&setTimeout(()=>{a=null,i(new Zi(`timeout ${t} of ms exceeded`,Zi.ETIMEDOUT))},t);const n=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(i):e.removeEventListener("abort",i)}),e=null)};e.forEach(e=>e.addEventListener("abort",i));const{signal:o}=s;return o.unsubscribe=()=>Yi.asap(n),o}},Wa=function*(e,t){let r=e.byteLength;if(r<t)return void(yield e);let s,i=0;for(;i<r;)s=i+t,yield e.slice(i,s),i=s},za=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:r}=await t.read();if(e)break;yield r}}finally{await t.cancel()}},Ha=(e,t,r,s)=>{const i=async function*(e,t){for await(const r of za(e))yield*Wa(r,t)}(e,t);let a,n=0,o=e=>{a||(a=!0,s&&s(e))};return new ReadableStream({async pull(e){try{const{done:t,value:s}=await i.next();if(t)return o(),void e.close();let a=s.byteLength;if(r){let e=n+=a;r(e)}e.enqueue(new Uint8Array(s))}catch(dc){throw o(dc),dc}},cancel:e=>(o(e),i.return())},{highWaterMark:2})},Ga="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,Ka=Ga&&"function"==typeof ReadableStream,Ja=Ga&&("function"==typeof TextEncoder?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),Qa=(e,...t)=>{try{return!!e(...t)}catch(r){return!1}},Xa=Ka&&Qa(()=>{let e=!1;const t=new Request(va.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),Ya=Ka&&Qa(()=>Yi.isReadableStream(new Response("").body)),Za={stream:Ya&&(e=>e.body)};var en;Ga&&(en=new Response,["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!Za[e]&&(Za[e]=Yi.isFunction(en[e])?t=>t[e]():(t,r)=>{throw new Zi(`Response type '${e}' is not supported`,Zi.ERR_NOT_SUPPORT,r)})}));const tn=async(e,t)=>{const r=Yi.toFiniteNumber(e.getContentLength());return null==r?(async e=>{if(null==e)return 0;if(Yi.isBlob(e))return e.size;if(Yi.isSpecCompliantForm(e)){const t=new Request(va.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return Yi.isArrayBufferView(e)||Yi.isArrayBuffer(e)?e.byteLength:(Yi.isURLSearchParams(e)&&(e+=""),Yi.isString(e)?(await Ja(e)).byteLength:void 0)})(t):r},rn={http:null,xhr:Va,fetch:Ga&&(async e=>{let{url:t,method:r,data:s,signal:i,cancelToken:a,timeout:n,onDownloadProgress:o,onUploadProgress:c,responseType:d,headers:l,withCredentials:p="same-origin",fetchOptions:u}=$a(e);d=d?(d+"").toLowerCase():"text";let h,m=qa([i,a&&a.toAbortSignal()],n);const f=m&&m.unsubscribe&&(()=>{m.unsubscribe()});let g;try{if(c&&Xa&&"get"!==r&&"head"!==r&&0!==(g=await tn(l,s))){let e,r=new Request(t,{method:"POST",body:s,duplex:"half"});if(Yi.isFormData(s)&&(e=r.headers.get("content-type"))&&l.setContentType(e),r.body){const[e,t]=Oa(g,La(Aa(c)));s=Ha(r.body,65536,e,t)}}Yi.isString(p)||(p=p?"include":"omit");const i="credentials"in Request.prototype;h=new Request(t,{...u,signal:m,method:r.toUpperCase(),headers:l.normalize().toJSON(),body:s,duplex:"half",credentials:i?p:void 0});let a=await fetch(h,u);const n=Ya&&("stream"===d||"response"===d);if(Ya&&(o||n&&f)){const e={};["status","statusText","headers"].forEach(t=>{e[t]=a[t]});const t=Yi.toFiniteNumber(a.headers.get("content-length")),[r,s]=o&&Oa(t,La(Aa(o),!0))||[];a=new Response(Ha(a.body,65536,r,()=>{s&&s(),f&&f()}),e)}d=d||"text";let b=await Za[Yi.findKey(Za,d)||"text"](a,e);return!n&&f&&f(),await new Promise((t,r)=>{Ma(t,r,{data:b,headers:Ea.from(a.headers),status:a.status,statusText:a.statusText,config:e,request:h})})}catch(dc){if(f&&f(),dc&&"TypeError"===dc.name&&/Load failed|fetch/i.test(dc.message))throw Object.assign(new Zi("Network Error",Zi.ERR_NETWORK,e,h),{cause:dc.cause||dc});throw Zi.from(dc,dc&&dc.code,e,h)}})};Yi.forEach(rn,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(r){}Object.defineProperty(e,"adapterName",{value:t})}});const sn=e=>`- ${e}`,an=e=>Yi.isFunction(e)||null===e||!1===e,nn=e=>{e=Yi.isArray(e)?e:[e];const{length:t}=e;let r,s;const i={};for(let a=0;a<t;a++){let t;if(r=e[a],s=r,!an(r)&&(s=rn[(t=String(r)).toLowerCase()],void 0===s))throw new Zi(`Unknown adapter '${t}'`);if(s)break;i[t||"#"+a]=s}if(!s){const e=Object.entries(i).map(([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build"));throw new Zi("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(sn).join("\n"):" "+sn(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return s};function on(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Da(null,e)}function cn(e){on(e),e.headers=Ea.from(e.headers),e.data=Ia.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return nn(e.adapter||Sa.adapter)(e).then(function(t){return on(e),t.data=Ia.call(e,e.transformResponse,t),t.headers=Ea.from(t.headers),t},function(t){return xa(t)||(on(e),t&&t.response&&(t.response.data=Ia.call(e,e.transformResponse,t.response),t.response.headers=Ea.from(t.response.headers))),Promise.reject(t)})}const dn="1.11.0",ln={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{ln[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const pn={};ln.transitional=function(e,t,r){return(s,i,a)=>{if(!1===e)throw new Zi(function(e,t){return"[Axios v"+dn+"] Transitional option '"+e+"'"+t+(r?". "+r:"")}(i," has been removed"+(t?" in "+t:"")),Zi.ERR_DEPRECATED);return t&&!pn[i]&&(pn[i]=!0),!e||e(s,i,a)}},ln.spelling=function(e){return(e,t)=>!0};const un={assertOptions:function(e,t,r){if("object"!=typeof e)throw new Zi("options must be an object",Zi.ERR_BAD_OPTION_VALUE);const s=Object.keys(e);let i=s.length;for(;i-- >0;){const a=s[i],n=t[a];if(n){const t=e[a],r=void 0===t||n(t,a,e);if(!0!==r)throw new Zi("option "+a+" must be "+r,Zi.ERR_BAD_OPTION_VALUE);continue}if(!0!==r)throw new Zi("Unknown option "+a,Zi.ERR_BAD_OPTION)}},validators:ln},hn=un.validators;let mn=class{constructor(e){this.defaults=e||{},this.interceptors={request:new ua,response:new ua}}async request(e,t){try{return await this._request(e,t)}catch(dc){if(dc instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const s=t.stack?t.stack.replace(/^.+\n/,""):"";try{dc.stack?s&&!String(dc.stack).endsWith(s.replace(/^.+\n.+\n/,""))&&(dc.stack+="\n"+s):dc.stack=s}catch(r){}}throw dc}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Ua(this.defaults,t);const{transitional:r,paramsSerializer:s,headers:i}=t;void 0!==r&&un.assertOptions(r,{silentJSONParsing:hn.transitional(hn.boolean),forcedJSONParsing:hn.transitional(hn.boolean),clarifyTimeoutError:hn.transitional(hn.boolean)},!1),null!=s&&(Yi.isFunction(s)?t.paramsSerializer={serialize:s}:un.assertOptions(s,{encode:hn.function,serialize:hn.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),un.assertOptions(t,{baseUrl:hn.spelling("baseURL"),withXsrfToken:hn.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let a=i&&Yi.merge(i.common,i[t.method]);i&&Yi.forEach(["delete","get","head","post","put","patch","common"],e=>{delete i[e]}),t.headers=Ea.concat(a,i);const n=[];let o=!0;this.interceptors.request.forEach(function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(o=o&&e.synchronous,n.unshift(e.fulfilled,e.rejected))});const c=[];let d;this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,p=0;if(!o){const e=[cn.bind(this),void 0];for(e.unshift(...n),e.push(...c),l=e.length,d=Promise.resolve(t);p<l;)d=d.then(e[p++],e[p++]);return d}l=n.length;let u=t;for(p=0;p<l;){const e=n[p++],t=n[p++];try{u=e(u)}catch(h){t.call(this,h);break}}try{d=cn.call(this,u)}catch(h){return Promise.reject(h)}for(p=0,l=c.length;p<l;)d=d.then(c[p++],c[p++]);return d}getUri(e){return pa(Fa((e=Ua(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}};Yi.forEach(["delete","get","head","options"],function(e){mn.prototype[e]=function(t,r){return this.request(Ua(r||{},{method:e,url:t,data:(r||{}).data}))}}),Yi.forEach(["post","put","patch"],function(e){function t(t){return function(r,s,i){return this.request(Ua(i||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:r,data:s}))}}mn.prototype[e]=t(),mn.prototype[e+"Form"]=t(!0)});const fn={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(fn).forEach(([e,t])=>{fn[t]=e});const gn=function e(t){const r=new mn(t),s=li(mn.prototype.request,r);return Yi.extend(s,mn.prototype,r,{allOwnKeys:!0}),Yi.extend(s,r,null,{allOwnKeys:!0}),s.create=function(r){return e(Ua(t,r))},s}(Sa);gn.Axios=mn,gn.CanceledError=Da,gn.CancelToken=class e{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(e){t=e});const r=this;this.promise.then(e=>{if(!r._listeners)return;let t=r._listeners.length;for(;t-- >0;)r._listeners[t](e);r._listeners=null}),this.promise.then=e=>{let t;const s=new Promise(e=>{r.subscribe(e),t=e}).then(e);return s.cancel=function(){r.unsubscribe(t)},s},e(function(e,s,i){r.reason||(r.reason=new Da(e,s,i),t(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let t;return{token:new e(function(e){t=e}),cancel:t}}},gn.isCancel=xa,gn.VERSION=dn,gn.toFormData=na,gn.AxiosError=Zi,gn.Cancel=gn.CanceledError,gn.all=function(e){return Promise.all(e)},gn.spread=function(e){return function(t){return e.apply(null,t)}},gn.isAxiosError=function(e){return Yi.isObject(e)&&!0===e.isAxiosError},gn.mergeConfig=Ua,gn.AxiosHeaders=Ea,gn.formToJSON=e=>wa(Yi.isHTMLForm(e)?new FormData(e):e),gn.getAdapter=nn,gn.HttpStatusCode=fn,gn.default=gn;const{Axios:bn,AxiosError:yn,CanceledError:_n,isCancel:vn,CancelToken:wn,VERSION:Sn,all:Cn,Cancel:Pn,isAxiosError:kn,spread:Rn,toFormData:Tn,AxiosHeaders:En,HttpStatusCode:In,formToJSON:xn,getAdapter:Dn,mergeConfig:Mn}=gn,Ln={P2P:"p2p",CONFERENCING:"conferencing"},On="autoscalerv1.videoedge.io/api/vidScale/allocateResources",An="record",Nn="rtmpStreamAndRecord";new Tr("vidscale-url");const jn=async e=>{const{roomId:t,peerId:r,producer:s,consumer:i,sessionToken:a,participantData:n}=e,o=await gn.post(`${On}`,{roomId:t,peerId:r,producer:s,consumer:i,sessionToken:a,participantData:n});return new Promise(e=>{try{e(o.data)}catch(t){}})};var Fn,Bn,Un,$n,Vn={};function qn(){if($n)return Un;$n=1;const e=Bn?Fn:(Bn=1,Fn=(e,t)=>{let r;return function s(){const i=Math.floor(Math.random()*(t-e+1)+e);return r=i===r&&e!==t?s():i,r}});return Un=t=>{const r=e(0,t.length-1);return()=>t[r()]}}const Wn=JSON.parse('["Bulbasaur","Ivysaur","Venusaur","Charmander","Charmeleon","Charizard","Squirtle","Wartortle","Blastoise","Caterpie","Metapod","Butterfree","Weedle","Kakuna","Beedrill","Pidgey","Pidgeotto","Pidgeot","Rattata","Raticate","Spearow","Fearow","Ekans","Arbok","Pikachu","Raichu","Sandshrew","Sandslash","Nidoran♀","Nidorina","Nidoqueen","Nidoran♂","Nidorino","Nidoking","Clefairy","Clefable","Vulpix","Ninetales","Jigglypuff","Wigglytuff","Zubat","Golbat","Oddish","Gloom","Vileplume","Paras","Parasect","Venonat","Venomoth","Diglett","Dugtrio","Meowth","Persian","Psyduck","Golduck","Mankey","Primeape","Growlithe","Arcanine","Poliwag","Poliwhirl","Poliwrath","Abra","Kadabra","Alakazam","Machop","Machoke","Machamp","Bellsprout","Weepinbell","Victreebel","Tentacool","Tentacruel","Geodude","Graveler","Golem","Ponyta","Rapidash","Slowpoke","Slowbro","Magnemite","Magneton","Farfetch\'d","Doduo","Dodrio","Seel","Dewgong","Grimer","Muk","Shellder","Cloyster","Gastly","Haunter","Gengar","Onix","Drowzee","Hypno","Krabby","Kingler","Voltorb","Electrode","Exeggcute","Exeggutor","Cubone","Marowak","Hitmonlee","Hitmonchan","Lickitung","Koffing","Weezing","Rhyhorn","Rhydon","Chansey","Tangela","Kangaskhan","Horsea","Seadra","Goldeen","Seaking","Staryu","Starmie","Mr. Mime","Scyther","Jynx","Electabuzz","Magmar","Pinsir","Tauros","Magikarp","Gyarados","Lapras","Ditto","Eevee","Vaporeon","Jolteon","Flareon","Porygon","Omanyte","Omastar","Kabuto","Kabutops","Aerodactyl","Snorlax","Articuno","Zapdos","Moltres","Dratini","Dragonair","Dragonite","Mewtwo","Mew","Chikorita","Bayleef","Meganium","Cyndaquil","Quilava","Typhlosion","Totodile","Croconaw","Feraligatr","Sentret","Furret","Hoothoot","Noctowl","Ledyba","Ledian","Spinarak","Ariados","Crobat","Chinchou","Lanturn","Pichu","Cleffa","Igglybuff","Togepi","Togetic","Natu","Xatu","Mareep","Flaaffy","Ampharos","Bellossom","Marill","Azumarill","Sudowoodo","Politoed","Hoppip","Skiploom","Jumpluff","Aipom","Sunkern","Sunflora","Yanma","Wooper","Quagsire","Espeon","Umbreon","Murkrow","Slowking","Misdreavus","Unown","Wobbuffet","Girafarig","Pineco","Forretress","Dunsparce","Gligar","Steelix","Snubbull","Granbull","Qwilfish","Scizor","Shuckle","Heracross","Sneasel","Teddiursa","Ursaring","Slugma","Magcargo","Swinub","Piloswine","Corsola","Remoraid","Octillery","Delibird","Mantine","Skarmory","Houndour","Houndoom","Kingdra","Phanpy","Donphan","Porygon2","Stantler","Smeargle","Tyrogue","Hitmontop","Smoochum","Elekid","Magby","Miltank","Blissey","Raikou","Entei","Suicune","Larvitar","Pupitar","Tyranitar","Lugia","Ho-Oh","Celebi","Treecko","Grovyle","Sceptile","Torchic","Combusken","Blaziken","Mudkip","Marshtomp","Swampert","Poochyena","Mightyena","Zigzagoon","Linoone","Wurmple","Silcoon","Beautifly","Cascoon","Dustox","Lotad","Lombre","Ludicolo","Seedot","Nuzleaf","Shiftry","Taillow","Swellow","Wingull","Pelipper","Ralts","Kirlia","Gardevoir","Surskit","Masquerain","Shroomish","Breloom","Slakoth","Vigoroth","Slaking","Nincada","Ninjask","Shedinja","Whismur","Loudred","Exploud","Makuhita","Hariyama","Azurill","Nosepass","Skitty","Delcatty","Sableye","Mawile","Aron","Lairon","Aggron","Meditite","Medicham","Electrike","Manectric","Plusle","Minun","Volbeat","Illumise","Roselia","Gulpin","Swalot","Carvanha","Sharpedo","Wailmer","Wailord","Numel","Camerupt","Torkoal","Spoink","Grumpig","Spinda","Trapinch","Vibrava","Flygon","Cacnea","Cacturne","Swablu","Altaria","Zangoose","Seviper","Lunatone","Solrock","Barboach","Whiscash","Corphish","Crawdaunt","Baltoy","Claydol","Lileep","Cradily","Anorith","Armaldo","Feebas","Milotic","Castform","Kecleon","Shuppet","Banette","Duskull","Dusclops","Tropius","Chimecho","Absol","Wynaut","Snorunt","Glalie","Spheal","Sealeo","Walrein","Clamperl","Huntail","Gorebyss","Relicanth","Luvdisc","Bagon","Shelgon","Salamence","Beldum","Metang","Metagross","Regirock","Regice","Registeel","Latias","Latios","Kyogre","Groudon","Rayquaza","Jirachi","Deoxys","Turtwig","Grotle","Torterra","Chimchar","Monferno","Infernape","Piplup","Prinplup","Empoleon","Starly","Staravia","Staraptor","Bidoof","Bibarel","Kricketot","Kricketune","Shinx","Luxio","Luxray","Budew","Roserade","Cranidos","Rampardos","Shieldon","Bastiodon","Burmy","Wormadam","Mothim","Combee","Vespiquen","Pachirisu","Buizel","Floatzel","Cherubi","Cherrim","Shellos","Gastrodon","Ambipom","Drifloon","Drifblim","Buneary","Lopunny","Mismagius","Honchkrow","Glameow","Purugly","Chingling","Stunky","Skuntank","Bronzor","Bronzong","Bonsly","Mime Jr.","Happiny","Chatot","Spiritomb","Gible","Gabite","Garchomp","Munchlax","Riolu","Lucario","Hippopotas","Hippowdon","Skorupi","Drapion","Croagunk","Toxicroak","Carnivine","Finneon","Lumineon","Mantyke","Snover","Abomasnow","Weavile","Magnezone","Lickilicky","Rhyperior","Tangrowth","Electivire","Magmortar","Togekiss","Yanmega","Leafeon","Glaceon","Gliscor","Mamoswine","Porygon-Z","Gallade","Probopass","Dusknoir","Froslass","Rotom","Uxie","Mesprit","Azelf","Dialga","Palkia","Heatran","Regigigas","Giratina","Cresselia","Phione","Manaphy","Darkrai","Shaymin","Arceus","Victini","Snivy","Servine","Serperior","Tepig","Pignite","Emboar","Oshawott","Dewott","Samurott","Patrat","Watchog","Lillipup","Herdier","Stoutland","Purrloin","Liepard","Pansage","Simisage","Pansear","Simisear","Panpour","Simipour","Munna","Musharna","Pidove","Tranquill","Unfezant","Blitzle","Zebstrika","Roggenrola","Boldore","Gigalith","Woobat","Swoobat","Drilbur","Excadrill","Audino","Timburr","Gurdurr","Conkeldurr","Tympole","Palpitoad","Seismitoad","Throh","Sawk","Sewaddle","Swadloon","Leavanny","Venipede","Whirlipede","Scolipede","Cottonee","Whimsicott","Petilil","Lilligant","Basculin","Sandile","Krokorok","Krookodile","Darumaka","Darmanitan","Maractus","Dwebble","Crustle","Scraggy","Scrafty","Sigilyph","Yamask","Cofagrigus","Tirtouga","Carracosta","Archen","Archeops","Trubbish","Garbodor","Zorua","Zoroark","Minccino","Cinccino","Gothita","Gothorita","Gothitelle","Solosis","Duosion","Reuniclus","Ducklett","Swanna","Vanillite","Vanillish","Vanilluxe","Deerling","Sawsbuck","Emolga","Karrablast","Escavalier","Foongus","Amoonguss","Frillish","Jellicent","Alomomola","Joltik","Galvantula","Ferroseed","Ferrothorn","Klink","Klang","Klinklang","Tynamo","Eelektrik","Eelektross","Elgyem","Beheeyem","Litwick","Lampent","Chandelure","Axew","Fraxure","Haxorus","Cubchoo","Beartic","Cryogonal","Shelmet","Accelgor","Stunfisk","Mienfoo","Mienshao","Druddigon","Golett","Golurk","Pawniard","Bisharp","Bouffalant","Rufflet","Braviary","Vullaby","Mandibuzz","Heatmor","Durant","Deino","Zweilous","Hydreigon","Larvesta","Volcarona","Cobalion","Terrakion","Virizion","Tornadus","Thundurus","Reshiram","Zekrom","Landorus","Kyurem","Keldeo","Meloetta","Genesect","Chespin","Quilladin","Chesnaught","Fennekin","Braixen","Delphox","Froakie","Frogadier","Greninja","Bunnelby","Diggersby","Fletchling","Fletchinder","Talonflame","Scatterbug","Spewpa","Vivillon","Litleo","Pyroar","Flabébé","Floette","Florges","Skiddo","Gogoat","Pancham","Pangoro","Furfrou","Espurr","Meowstic","Honedge","Doublade","Aegislash","Spritzee","Aromatisse","Swirlix","Slurpuff","Inkay","Malamar","Binacle","Barbaracle","Skrelp","Dragalge","Clauncher","Clawitzer","Helioptile","Heliolisk","Tyrunt","Tyrantrum","Amaura","Aurorus","Sylveon","Hawlucha","Dedenne","Carbink","Goomy","Sliggoo","Goodra","Klefki","Phantump","Trevenant","Pumpkaboo","Gourgeist","Bergmite","Avalugg","Noibat","Noivern","Xerneas","Yveltal","Zygarde","Diancie","Hoopa","Volcanion","Rowlet","Dartrix","Decidueye","Litten","Torracat","Incineroar","Popplio","Brionne","Primarina","Pikipek","Trumbeak","Toucannon","Yungoos","Gumshoos","Grubbin","Charjabug","Vikavolt","Crabrawler","Crabominable","Oricorio","Cutiefly","Ribombee","Rockruff","Lycanroc","Wishiwashi","Mareanie","Toxapex","Mudbray","Mudsdale","Dewpider","Araquanid","Fomantis","Lurantis","Morelull","Shiinotic","Salandit","Salazzle","Stufful","Bewear","Bounsweet","Steenee","Tsareena","Comfey","Oranguru","Passimian","Wimpod","Golisopod","Sandygast","Palossand","Pyukumuku","Type: Null","Silvally","Minior","Komala","Turtonator","Togedemaru","Mimikyu","Bruxish","Drampa","Dhelmise","Jangmo-o","Hakamo-o","Kommo-o","Tapu Koko","Tapu Lele","Tapu Bulu","Tapu Fini","Cosmog","Cosmoem","Solgaleo","Lunala","Nihilego","Buzzwole","Pheromosa","Xurkitree","Celesteela","Kartana","Guzzlord","Necrozma","Magearna","Marshadow","Poipole","Naganadel","Stakataka","Blacephalon","Zeraora","Meltan","Melmetal","Grookey","Thwackey","Rillaboom","Scorbunny","Raboot","Cinderace","Sobble","Drizzile","Inteleon","Skwovet","Greedent","Rookidee","Corvisquire","Corviknight","Blipbug","Dottler","Orbeetle","Nickit","Thievul","Gossifleur","Eldegoss","Wooloo","Dubwool","Chewtle","Drednaw","Yamper","Boltund","Rolycoly","Carkol","Coalossal","Applin","Flapple","Appletun","Silicobra","Sandaconda","Cramorant","Arrokuda","Barraskewda","Toxel","Toxtricity","Sizzlipede","Centiskorch","Clobbopus","Grapploct","Sinistea","Polteageist","Hatenna","Hattrem","Hatterene","Impidimp","Morgrem","Grimmsnarl","Obstagoon","Perrserker","Cursola","Sirfetch\'d","Mr. Rime","Runerigus","Milcery","Alcremie","Falinks","Pincurchin","Snom","Frosmoth","Stonjourner","Eiscue","Indeedee","Morpeko","Cufant","Copperajah","Dracozolt","Arctozolt","Dracovish","Arctovish","Duraludon","Dreepy","Drakloak","Dragapult","Zacian","Zamazenta","Eternatus","Kubfu","Urshifu","Zarude","Regieleki","Regidrago","Glastrier","Spectrier","Calyrex","Wyrdeer","Kleavor","Ursaluna","Basculegion","Sneasler","Overqwil","Enamorus","Sprigatito","Floragato","Meowscarada","Fuecoco","Crocalor","Skeledirge","Quaxly","Quaxwell","Quaquaval","Lechonk","Oinkologne","Tarountula","Spidops","Nymble","Lokix","Pawmi","Pawmo","Pawmot","Tandemaus","Maushold","Fidough","Dachsbun","Smoliv","Dolliv","Arboliva","Squawkabilly","Nacli","Naclstack","Garganacl","Charcadet","Armarouge","Ceruledge","Tadbulb","Bellibolt","Wattrel","Kilowattrel","Maschiff","Mabosstiff","Shroodle","Grafaiai","Bramblin","Brambleghast","Toedscool","Toedscruel","Klawf","Capsakid","Scovillain","Rellor","Rabsca","Flittle","Espathra","Tinkatink","Tinkatuff","Tinkaton","Wiglett","Wugtrio","Bombirdier","Finizen","Palafin","Varoom","Revavroom","Cyclizar","Orthworm","Glimmet","Glimmora","Greavard","Houndstone","Flamigo","Cetoddle","Cetitan","Veluza","Dondozo","Tatsugiri","Annihilape","Clodsire","Farigiraf","Dudunsparce","Kingambit","Great Tusk","Scream Tail","Brute Bonnet","Flutter Mane","Slither Wing","Sandy Shocks","Iron Treads","Iron Bundle","Iron Hands","Iron Jugulis","Iron Moth","Iron Thorns","Frigibax","Arctibax","Baxcalibur","Gimmighoul","Gholdengo","Wo-Chien","Chien-Pao","Ting-Lu","Chi-Yu","Roaring Moon","Iron Valiant","Koraidon","Miraidon","Walking Wake","Iron Leaves","Dipplin","Poltchageist","Sinistcha","Okidogi","Munkidori","Fezandipiti","Ogerpon","Archaludon","Hydrapple","Gouging Fire","Raging Bolt","Iron Boulder","Iron Crown","Terapagos","Pecharunt"]');var zn;function Hn(){if(zn)return Vn;zn=1;const e=qn(),t=Wn,r="https://github.com/sindresorhus/pokemon",s=`Please report to ${r}/issues if we missed something.`,i=new Set(["de","en","fr","es","ja","ko","ru","th","zh-Hans","zh-Hant"]),a=new Map;function n(e="en"){if("en"===e)return t;if(!i.has(e))throw new Error(`Localized list for language code '${e}' does not exist. Pull request welcome: ${r}`);return function(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}(`./data/${e.toLowerCase()}.json`)}return Vn.all=n,Vn.random=(t="en")=>{if(a.has(t))return a.get(t)();const r=n(t),s=e(r);return a.set(t,s),s()},Vn.getName=(e,t="en")=>{const r=n(t)[e-1];if(!r)throw new Error(`Pokémon with ID '${e}' does not exist. ${s}`);return r},Vn.getId=(e,t="en")=>{const r=n(t).indexOf(e);if(-1===r)throw new Error(`Pokémon with name '${e}' does not exist for language code '${t}'. ${s}`);return r+1},Vn.languages=i,Vn}var Gn=Hn();function Kn(){return Gn.random("en")}new Tr("device-manager");const Jn=async()=>{let e=[],t=[],r=[];return new Promise((s,i)=>{navigator.mediaDevices.enumerateDevices().then(function(i){i.forEach((s,i)=>{if("audioinput"===s.kind){let e=s.label||`Mic ${Number(i)+1}`;t.push({label:e,deviceId:s.deviceId})}if("videoinput"===s.kind){let t=s.label||`Camera ${Number(i)+1}`;e.push({label:t,deviceId:s.deviceId})}if("audiooutput"===s.kind){let e=s.label||`Speaker ${Number(i)+1}`;r.push({label:e,deviceId:s.deviceId})}}),s({audioDevices:t,audioDevicesOutput:r,videoDevices:e})})})},Qn=async()=>{let e={videoDevices:[],audioDevices:[],audioOutputDevices:[]};const t=await(async()=>{let e=[];return navigator.mediaDevices.enumerateDevices().then(function(t){let r=void 0!==t.find(e=>"videoinput"===e.kind);return new Promise((t,s)=>{navigator.mediaDevices.getUserMedia({video:r}).then(r=>{navigator.mediaDevices.enumerateDevices().then(function(s){s.forEach(function(t,r){if("videoinput"===t.kind){let s=t.label||`Camera ${Number(r)+1}`;e.push({label:s,deviceId:t.deviceId})}}),r.getTracks().forEach(e=>{e.stop()}),t({videoDevices:e})})}).catch(function(e){t({error:e.name,reason:e.message})})})}).catch(function(e){})})();let r=null;if(t.error){switch(t.error){case"TypeError":break;case"AbortError":r=`${t.error} : ${t.reason}!! Your Camera is currently being used !! If you wish to join the room with video, please close the other tab / browser wherever it is being used and refresh this page!!`;break;case"NotAllowedError":r=`${t.error} : ${t.reason}!! You have denied the access to your Camera!! If you wish to join the room with video, please allow the camera access by clicking on the camera icon in the address bar Or by going to " chrome://settings/content#media-stream-mic " link in your chrome.`;break;case"NotFoundError":r=`${t.error} : ${t.reason}!! No Camera could be found!! If you have a camera or microphone in your computer but it is not able to detect them, please refresh your browser again or restart the browser after closing all the opened tabs.`;break;case"NotReadableError":r=`${t.error} : ${t.reason}!! If you have a camera in your computer but it is not able to detect it as it may have been used by some other browser / tab, please refresh your browser again after closing the tab using the camera or restart the browser after closing all the opened tabs.`}return{success:!1,reason:{code:"EDV01",type:"DeviceError",text:r}}}t.videoDevices&&t.videoDevices.length>0&&(e.videoDevices=t.videoDevices);const s=await(async()=>{let e=[];return navigator.mediaDevices.enumerateDevices().then(function(t){let r=void 0!==t.find(e=>"audioinput"===e.kind);return new Promise((t,s)=>{navigator.mediaDevices.getUserMedia({audio:r}).then(r=>{navigator.mediaDevices.enumerateDevices().then(function(s){s.forEach(function(t,r){if("audioinput"===t.kind){let s=t.label||`Mic ${Number(r)+1}`;e.push({label:s,deviceId:t.deviceId})}}),r.getTracks().forEach(e=>{e.stop()}),t({audioDevices:e})})}).catch(function(e){t({error:e.name,reason:e.message})})})}).catch(function(e){})})();let i=null;if(s.error){switch(s.error){case"NotAllowedError":i=`${s.error} : ${s.reason}!! You have denied the access to your Mic!! If you wish to join the room with video, please allow the camera access by clicking on the camera icon in the address bar Or by going to " chrome://settings/content#media-stream-mic " link in your chrome.`;break;case"NotFoundError":i=`${s.error} : ${s.reason}!! No Microphone could be found!! If you have a camera or microphone in your computer but it is not able to detect them, please refresh your browser again or restart the browser after closing all the opened tabs.`;break;case"NotReadableError":i=`${s.error} : ${s.reason}!! A hardware error occured at the OS OR browser Or Webpage level. If you have a microphone in your computer but it is not able to detect them, please refresh your browser again or restart the browser after closing all the opened tabs.`}return{success:!1,reason:{code:"EDA01",type:"DeviceError",text:i}}}s.audioDevices&&s.audioDevices.length>0&&(e.audioDevices=s.audioDevices);const a=await(async()=>{let e=[];return navigator.mediaDevices.enumerateDevices().then(function(t){let r=void 0!==t.find(e=>"audiooutput"===e.kind);return new Promise((t,s)=>{navigator.mediaDevices.getUserMedia({audio:r}).then(r=>{navigator.mediaDevices.enumerateDevices().then(function(s){s.forEach(function(t,r){if("audiooutput"===t.kind){let s=t.label||`Speaker ${Number(r)+1}`;e.push({label:s,deviceId:t.deviceId})}}),r.getTracks().forEach(e=>{e.stop()}),t({audioDevicesOutput:e})})}).catch(function(e){t({error:e.name,reason:e.message})})})}).catch(function(e){})})();return a.error?{success:!1,reason:{code:"EDAO01",type:"DeviceError",text:"Some error occured while accessing your speaker. Please try again again after some time."}}:(a.audioDevicesOutput&&a.audioDevicesOutput.length>0&&(e.audioOutputDevices=a.audioDevicesOutput),{success:!0,deviceList:e})},Xn=new Tr("Room"),Yn={small:{width:{ideal:160},height:{ideal:120}},qvga:{width:{ideal:320},height:{ideal:240}},vga:{width:{ideal:640},height:{ideal:480}},hd:{width:{ideal:1280},height:{ideal:720}}},Zn={optional:[{googDscp:!0}]};let eo;class to extends xr.EventEmitter{static async listDevices(){if(eo)return Xn.info("Device list already exists:%O",eo),{success:!0,deviceList:eo};const e=await Qn();return e.success?(eo=e.deviceList,{success:!0,deviceList:e.deviceList}):{success:!1,reason:e.reason}}static async joinRoom({sessionToken:e,roomId:t,peerId:r,peerName:s,produce:i=!0,produceAudio:a=!0,produceVideo:n=!0,consume:o=!0,videoResolution:c="hd",forceVp8:d=!1,forceVp9:l=!1,forceH264:p=!1,h264Profile:u="high",forcePCMU:h=!1,forcePCMA:m=!1,forceFPS:f=25,enableWebcamLayers:g=!0,numSimulcastStreams:b=3,autoGainControl:y=!0,echoCancellation:_=!0,noiseSuppression:v=!0,sampleRate:w=44e3,channelCount:S=1,videoBitRates:C=[700,250,75],share:P=!1,shareAudio:k=!1,enableSharingLayers:R=!0,shareBitRates:T=[2500,1250,500],audioDeviceId:E=null,videoDeviceId:I=null}={}){if(!e)throw new Error("Session token is required to join the room.");["hd","vga","qvga"].includes(c)||(Xn.warn("Invalid video resolution value. setting it to default value of 'hd' "),c="hd"),"boolean"!=typeof i&&(Xn.warn("Produe should either be true or false"),i=Boolean(i)),"boolean"!=typeof a&&(Xn.warn("ProduceAudio should either be true or false"),a=Boolean(a)),"boolean"!=typeof n&&(Xn.warn("ProduceVideo should either be true or false"),n=Boolean(n)),"boolean"!=typeof o&&(Xn.warn("Consume should either be true or false"),o=Boolean(o)),"boolean"!=typeof d&&(Xn.warn("forceVp8 should either be true or false"),d=Boolean(d)),"boolean"!=typeof l&&(Xn.warn("forceVp9 should either be true or false"),l=Boolean(l)),"boolean"!=typeof p&&(Xn.warn("forceH264 should either be true or false"),p=Boolean(p)),["high","low"].includes(u.toLowerCase())||(Xn.warn("h264Profile should either be 'high' or 'low'"),u="high"),(!Number.isInteger(f)||Number.isInteger(f)&&(f>65||f<5))&&(Xn.warn("forceFPS should be a number between 5 to 65, default value is 25 fps."),f=25),"boolean"!=typeof g&&(Xn.warn("enableWebcamLayers should either be true or false"),g=Boolean(g)),(!Number.isInteger(b)||Number.isInteger(b)&&(b>3||b<1))&&(Xn.warn("numSimulcastStreams should be a number between 1 to 3, default value is 3."),b=3),Array.isArray(C)&&C.length>=1&&C.length<=3&&C.every(e=>Number.isInteger(e)&&e>=75&&e<=800)?Xn.debug("videoBitRates values are correct"):(Xn.warn("videobitrates values should be an integer array with maximum 3 elements and minimum 1 element. The values in the array are '[75,250,75]'"),C=[75,75,75]),"boolean"!=typeof h&&(Xn.warn("forcePCMU should either be true or false"),h=Boolean(h)),"boolean"!=typeof m&&(Xn.warn("forcePCMA should either be true or false"),m=Boolean(m)),"boolean"!=typeof y&&(Xn.warn("autoGainControl should either be true or false"),y=Boolean(y)),"boolean"!=typeof _&&(Xn.warn("echoCancellation should either be true or false"),_=Boolean(_)),"boolean"!=typeof v&&(Xn.warn("noiseSuppression should either be true or false"),v=Boolean(v)),(!Number.isInteger(w)||Number.isInteger(w)&&(w>64e3||w<8e3))&&(Xn.warn("sampleRate should be a number between 8000 to 64000, default value is 44000 Khz."),w=44e3),(!Number.isInteger(S)||Number.isInteger(S)&&(S>2||S<1))&&(Xn.warn("sampleRate should be a number between 1 to 2, default value is 1, which is a mono audio."),S=1),"boolean"!=typeof P&&(Xn.warn("share should either be true or false"),P=Boolean(P)),"boolean"!=typeof k&&(Xn.warn("shareAudio should either be true or false"),k=Boolean(k)),"boolean"!=typeof R&&(Xn.warn("enableSharingLayers should either be true or false"),R=Boolean(R)),Array.isArray(T)&&T.length>=1&&T.length<=3&&T.every(e=>Number.isInteger(e)&&e>=500&&e<=2500)?Xn.debug("shareBitRates values are correct"):(Xn.warn("sharebitrates values should be an integer array with maximum 3 elements and minimum 1 element. The values in the array are '[2500,1250,500]'"),T=[2500,1250,500]);try{Xn.info("session token:%s",e),r||(r=di()),t||(t=ci()),s||(s=Kn());const x=Pr.parse(window.navigator.userAgent),D=x.browser.name,M=x.browser.version,L={name:r,participantType:"moderator",browserName:D,browserVersion:M,os:x.os.name};Xn.info("browser details are:%O",x);const O={sessionToken:e,roomId:t,peerId:r,consumerReplicas:0,producer:i,consumer:o,participantData:L};let A={};Xn.debug("Received input parameters are:%O",O);const N=await async function({sessionToken:e,roomId:t,peerId:r,consumerReplicas:s,producer:i=!0,consumer:a=!0,participantData:n}){const o=await jn({sessionToken:e,roomId:t,peerId:r,producer:i,consumer:a,participantData:n});return o.success?{success:!0,wsUrl:`wss://${o.data.url}/?roomId=${t}&peerId=${r}&consumerReplicas=${s}`,roomUrl:`https://${o.data.url}`,core:o.data.core}:{success:!1,errorText:o.data.reason,errorCode:o.data.code}}(O);return N.success&&N.wsUrl&&N.core?(A.url=N.wsUrl,A.core=N.core,Xn.debug("VidScale url is:",A.url),new to({peerId:r,roomId:t,peerName:s,produce:i,produceAudio:a,produceVideo:n,consume:o,videoResolution:c,forceVp8:d,forceVp9:l,forceH264:p,h264Profile:u,forceFPS:f,forcePCMU:h,forcePCMA:m,enableWebcamLayers:g,numSimulcastStreams:b,autoGainControl:y,echoCancellation:_,noiseSuppression:v,sampleRate:w,channelCount:S,videoBitRates:C,share:P,shareAudio:k,enableSharingLayers:R,shareBitRates:T,outputData:A,audioDeviceId:E,videoDeviceId:I})):(Xn.warn("Vidscale returned success as false. with error:%O",N),N)}catch(x){throw Xn.error("Failed to join room:",x.message),x}}constructor({peerId:e,roomId:t,peerName:r,produce:s,produceAudio:i,produceVideo:a,consume:n,videoResolution:o,forceVp8:c,forceVp9:d,forceH264:l,h264Profile:p,forceFPS:u,forcePCMU:h,forcePCMA:m,enableWebcamLayers:f,numSimulcastStreams:g,autoGainControl:b,echoCancellation:y,noiseSuppression:_,sampleRate:v,channelCount:w,videoBitRates:S,share:C,shareAudio:P,enableSharingLayers:k,shareBitRates:R,outputData:T,audioDeviceId:E,videoDeviceId:I}){super(),this._closed=!1,this._roomStatus="initialised",this._cignal=null,this._sendTransport=null,this._recvTransport=null,this._device=new pr.Device,this._webCamProducer=null,this._micProducer=null,this._shareProducer=null,this._shareAudioProducer=null,this._producers=new Map,this._consumers=new Map,this._peers=new Map,this._data={...T},this._micStream=null,this._webCamStream=null,this._webcam={device:null,resolution:o},this._mic={device:null},this._deviceList=eo||null,this._externalVideo=null,this._externalVideoStream=null,this._forceVP8=Boolean(c),this._forceH264=Boolean(l),this._forceVP9=Boolean(d),this._enableWebcamLayers=Boolean(f),this._numSimulcastStreams=g,this._enableSharingLayers=Boolean(k),this._client=Pr.parse(window.navigator.userAgent),this._cignalConnected=!1,this._reconnectionInitiated=!1,this._restartIceInProgressSendTransport=!1,this._restartIceInProgressRecvTransport=!1,this._activeSpeaker=null,this.init({roomId:t,peerId:e,peerName:r,produce:s,produceAudio:i,produceVideo:a,consume:n,videoResolution:o,forceVp8:c,forceVp9:d,forceH264:l,h264Profile:p,forceFPS:u,forcePCMU:h,forcePCMA:m,enableWebcamLayers:f,numSimulcastStreams:g,autoGainControl:b,echoCancellation:y,noiseSuppression:_,sampleRate:v,channelCount:w,videoBitRates:S,share:C,shareAudio:P,enableSharingLayers:k,shareBitRates:R,audioDeviceId:E,videoDeviceId:I})}get closed(){return this._closed}get data(){return this._data}set data(e){throw new Error("Setting the whole data object is not possible!")}get peers(){return this._peers}set peers(e){throw new Error("Setting the whole peers object is not possible!")}get transports(){return{produce:this._sendTransport,consume:this._recvTransport}}set transports(e){throw new Error("Setting of transport is not possible!")}get videoStream(){return this._webCamStream}get audioStream(){return this._micStream}get clientAgent(){return this._client}get activeParameters(){return this._data.inputParams}get deviceList(){return this._deviceList?this._deviceList:{videoDevices:[],audioDevices:[],audioOutputDevices:[]}}set deviceList(e){throw new Error("Setting of deviceList is not possible!")}get currentlyActiveSpeaker(){return this._activeSpeaker}set currentlyActiveSpeaker(e){throw new Error("Setting of currentActivespeaker is not possible!")}async init(e){Xn.debug("init() | The input parameters are:%O",e),this.data.inputParams=e;const t=pr.detectDevice();Xn.debug("The device is:%O",t),await this.listDevicesInternal(),await this.join()}close(){this._closed||(this._closed=!0,Xn.debug("close()"),this._cignal.close(),this._sendTransport&&this._sendTransport.close(),this._recvTransport&&this._recvTransport.close(),this._roomStatus="closed")}async leaveRoom(){Xn.debug("Leave room is called!!"),"connected"===this._roomStatus?(await this._cignal.notify("leaveRoom",{}),this._sendTransport&&(this._sendTransport.close(),this._sendTransport=null),this._recvTransport&&(this._recvTransport.close(),this._recvTransport=null),this._webCamStream&&this._webCamStream.getVideoTracks().forEach(e=>{e.stop(),Xn.debug("Video Track stopped")}),this._micStream&&this._micStream.getAudioTracks().forEach(e=>{e.stop(),Xn.debug("Mic Track stopped")}),this._roomStatus="closed",this._cignal.close()):Xn.error("The room state is:%s",this._roomStatus)}async closeRoom(){await this._cignal.notify("closeRoom",{}),this.leaveRoom()}async listDevicesInternal(){if(navigator.mediaDevices.ondevicechange=async e=>{let t=await Jn();Xn.info("Media devices changed!:%O",t),t.audioDevices&&t.audioDevices.length>0&&(this._deviceList.audioDevices=t.audioDevices),t.videoDevices&&t.videoDevices.length>0&&(this._deviceList.videoDevices=t.videoDevices),t.audioDevices&&t.audioDevices.length>0&&(this._deviceList.audioOutputDevices=t.audioDevicesOutput),eo=this._deviceList,this.emit("deviceListUpdated")},!this._deviceList){const e=await Qn();if(e.success)return this._deviceList=e.deviceList,void(eo=this._deviceList)}}async join(){const e=new oi(this.data.url,{retries:10,factor:2,minTimeout:1e3,maxTimeout:8e3});this._cignal=new Nr(e),this._cignal.on("open",async()=>{this._cignalConnected=!0,this._sendTransport||this._recvTransport?(!this._sendTransport||"failed"!==this._sendTransport.connectionState&&"disconnected"!==this._sendTransport.connectionState?Xn.debug("Nothing to in case of socket reconnection with send transport status:%s",this._sendTransport?.connectionState):(Xn.debug("Ws reconnected after network outage. Need to do ICE restarts for send transport."),this.restartIceSendTransport()),!this._recvTransport||"failed"!==this._recvTransport.connectionState&&"disconnected"!==this._recvTransport.connectionState?Xn.debug("Nothing to in case of socket reconnection with recv transport status:%s",this._recvTransport?.connectionState):(Xn.debug("Ws reconnected after network outage. Need to do ICE restarts for recv transport."),this.restartIceRecvTransport())):(Xn.debug("Ws connected for first time. Need to go with the regular flow."),await this._joinRoom())}),this._cignal.on("failed",()=>{}),this._cignal.on("disconnected",()=>{Xn.debug("ws disconnected!"),this._cignalConnected=!1}),this._cignal.on("close",()=>{this._closed||this._reconnectionInitiated||this.close()}),this._cignal.on("request",async(e,t,r)=>{switch(Xn.debug('cignal "request" event [method:%s, data:%o]',e.method,e.data),this._cignalConnected=!0,e.method){case"newConsumer":{if(!this.data.inputParams.consume){r(403,"I do not want to consume");break}const{peerId:i,producerId:a,id:n,kind:o,rtpParameters:c,type:d,appData:l,producerPaused:p}=e.data;try{const e=await this._recvTransport.consume({id:n,producerId:a,kind:o,rtpParameters:c,streamId:`${i}-${l.share?"share":"mic-webcam"}`,appData:{...l,peerId:i}});this._consumers.set(e.id,e),e.on("transportclose",()=>{this._consumers.delete(e.id)});const{spatialLayers:r,temporalLayers:s}=pr.parseScalabilityMode(e.rtpParameters.encodings[0].scalabilityMode),u=this._peers.get(i);Xn.debug(`Consumer created for peerId ${i} for kind ${e.kind}`);let h={...u,[l.share?`ss${e.kind}`:e.kind]:{consumerId:e.id,type:d,locallyPaused:!1,remotelyPaused:p,rtpParameters:e.rtpParameters,spatialLayers:r,temporalLayers:s,preferredSpatialLayer:r-1,preferredTemporalLayer:s-1,priority:1,codec:e.rtpParameters.codecs[0].mimeType.split("/")[1],track:e.track,share:l.share}};this._peers.set(i,h),t(),Xn.debug("Going to emit mic start / videostart"),"audio"===e.kind?l.share?this.emit("ssAudioStart",{peerId:i,audioTrack:e.track,type:"remote"}):this.emit("micStart",{peerId:i,audioTrack:e.track,type:"remote"}):"video"===e.kind&&(l.share?this.emit("ssVideoStart",{peerId:i,videoTrack:e.track,type:"remote"}):this.emit("videoStart",{peerId:i,videoTrack:e.track,type:"remote"}))}catch(s){throw Xn.error('"newConsumer" request failed:%o',s),s}break}}}),this._cignal.on("notification",e=>{switch("activeSpeaker"!==e.method&&Xn.debug('proto "notification" event [method:%s, data:%o]',e.method,e.data),this._cignalConnected=!0,e.method){case"producerScore":{const{producerId:t,score:r}=e.data;break}case"newPeer":{const t=e.data;this._peers.set(t.id,{...t,consumers:[]}),this.emit("newPeer",{peerId:t.id,peerName:t.displayName,type:"remote"});break}case"peerClosed":{const{peerId:t}=e.data;this._peers.delete(t),this.emit("peerLeft",{peerId:t});break}case"roomClosed":Xn.debug("Room closed. No need to reconnect socket"),this.close();break;case"consumerClosed":{const{consumerId:t}=e.data,r=this._consumers.get(t);if(Xn.debug("Consumer closed for consumerId:%s, type:%s",t,r?.kind),!r)break;const{peerId:s,share:i}=r.appData;let a=i?`ss${r.kind}`:r.kind;r.close(),this._consumers.delete(t);let n=this._peers.get(s);Xn.debug("Peer data before deletion:%O",n),n[a]&&n[a].consumerId===t&&delete n[a],Xn.debug("Peer data after deletion:%O",n),this._peers.set(s,n),"audio"===a?(Xn.debug("Going to emit micEnd, consumer closed for audio"),i?this.emit("ssAudioStop",{peerId:s,track:null,type:"remote"}):this.emit("micEnd",{peerId:s,track:null,type:"remote"})):"video"===a&&(Xn.debug("Going to emit videoEnd, consumer closed for video"),i?this.emit("ssVideoStop",{peerId:s,track:null,type:"remote"}):this.emit("videoEnd",{peerId:s,track:null,type:"remote"}));break}case"consumerPaused":{const{consumerId:t}=e.data,r=this._consumers.get(t);if(!r)break;r.pause();break}case"consumerResumed":{const{consumerId:t}=e.data,r=this._consumers.get(t);if(!r)break;r.resume();break}case"consumerLayersChanged":{const{consumerId:t,spatialLayer:r,temporalLayer:s}=e.data;if(!this._consumers.get(t))break;break}case"consumerScore":{const{consumerId:t,score:r}=e.data;break}case"activeSpeaker":{const{peerId:t,volume:r}=e.data;this._activeSpeaker=e.data,this.emit("activeSpeaker",{peerId:t,volume:r});break}case"peerMuted":{const{peerId:t}=e.data;this.emit("peerMuted",{peerId:t,type:"remote"});break}case"peerUnMuted":{const{peerId:t}=e.data;this.emit("peerUnMuted",{peerId:t,type:"remote"});break}default:Xn.error('unknown protoo notification.method "%s"',e.method)}})}async restartIceSendTransport(){if(Xn.debug("restartIce SendTransport()"),this._restartIceInProgressSendTransport)Xn.warn("Restart ice already in progress for send transport! wait 4 completion b4 next request!");else{try{if(this._sendTransport&&("failed"===this._sendTransport.connectionState||"disconnected"===this._sendTransport.connectionState)){this._restartIceInProgressSendTransport=!0,Xn.debug("Restarting ICE for send transport");const e=await this._cignal.request("restartIce",{transportId:this._sendTransport.id,peerId:this._peerId});await this._sendTransport.restartIce({iceParameters:e}),this._restartIceInProgressSendTransport=!1}}catch(e){Xn.error("restartIce SendTransport() | failed:%o",e)}this._reconnectionInitiated=!1}}async restartIceRecvTransport(){if(Xn.debug("restartIce RecvTransport()"),this._restartIceInProgressRecvTransport)Xn.warn("Restart ice already in progress for recv transport! wait 4 completion b4 next request!");else{try{if(this._recvTransport&&("failed"===this._recvTransport.connectionState||"disconnected"===this._recvTransport.connectionState)){this._restartIceInProgressRecvTransport=!0,Xn.debug("Restarting ICE for recv transport");const e=await this._cignal.request("restartIce",{transportId:this._recvTransport.id,peerId:this._peerId});await this._recvTransport.restartIce({iceParameters:e}),this._restartIceInProgressRecvTransport=!1}}catch(e){Xn.error("restartIce RecvTransport() | failed:%o",e)}this._reconnectionInitiated=!1}}async _joinRoom(){Xn.debug("_joinRoom()");try{const e=await this._cignal.request("getRouterRtpCapabilities",{coreNumber:this.data.core});if(Xn.debug("Router rtp capabilities created:%O",e),Xn.debug("Input params are:",this.data.inputParams),await this._device.load({routerRtpCapabilities:e}),this.data.inputParams.produce){Xn.debug("Going to create webrtctransport send");const e=await this._cignal.request("createWebRtcTransport",{forceTcp:this._forceTcp||!1,producing:!0,consuming:!1,sctpCapabilities:this._useDataChannel?this._device.sctpCapabilities:void 0}),{id:t,iceParameters:r,iceCandidates:s,dtlsParameters:i,sctpParameters:a}=e;Xn.debug("Transport info is:%O",e),this._sendTransport=this._device.createSendTransport({id:t,iceParameters:r,iceCandidates:s,dtlsParameters:{...i,role:"auto"},sctpParameters:a,iceServers:[],proprietaryConstraints:Zn,additionalSettings:{encodedInsertableStreams:this._e2eKey&&e2e.isSupported()}}),this._sendTransport.on("connect",({iceParameters:e,dtlsParameters:t},r,s)=>{this._cignal.request("connectWebRtcTransport",{transportId:this._sendTransport.id,iceParameters:e,dtlsParameters:t}).then(r).catch(s)}),this._sendTransport.on("produce",async({kind:e,rtpParameters:t,appData:r},s,i)=>{try{const{id:i}=await this._cignal.request("produce",{transportId:this._sendTransport.id,kind:e,rtpParameters:t,appData:r});s({id:i})}catch(a){i(a)}})}if(this.data.inputParams.consume){Xn.debug("Going to create webrtctransport recv");const e=await this._cignal.request("createWebRtcTransport",{forceTcp:this._forceTcp,producing:!1,consuming:!0,sctpCapabilities:this._useDataChannel?this._device.sctpCapabilities:void 0}),{id:t,iceParameters:r,iceCandidates:s,dtlsParameters:i,sctpParameters:a}=e;Xn.debug("Transport info is:%O",e),this._recvTransport=this._device.createRecvTransport({id:t,iceParameters:r,iceCandidates:s,dtlsParameters:{...i,role:"auto"},sctpParameters:a,iceServers:[],additionalSettings:{encodedInsertableStreams:this._e2eKey&&e2e.isSupported()}}),this._recvTransport.on("connect",({iceParameters:e,dtlsParameters:t},r,s)=>{this._cignal.request("connectWebRtcTransport",{transportId:this._recvTransport.id,iceParameters:e,dtlsParameters:t}).then(r).catch(s)})}const{peers:t}=await this._cignal.request("join",{displayName:this.data.inputParams.peerName,device:this._device,rtpCapabilities:this.data.inputParams.consume?this._device.rtpCapabilities:void 0,sctpCapabilities:this._useDataChannel&&this.data.inputParams.consume?this._device.sctpCapabilities:void 0});this.emit("newPeer",{peerId:this.data.inputParams.peerId,peerName:this.data.inputParams.peerName,type:"local"}),this._roomStatus="connected",Xn.debug("All availablepeers in this room are::%O",t);for(const r of t)this._peers.set(r.id,{...r,consumers:[]}),Xn.debug("new peer is:%O",r),this.emit("newPeer",{peerId:r.id,peerName:r.displayName,type:"remote"});this.data.inputParams.produce&&(this.data.inputParams.produceAudio?this.enableMic({deviceId:this.data.inputParams.audioDeviceId?this.data.inputParams.audioDeviceId:null}):Xn.debug("No need to produce audio!"),(this._device.canProduce("video")||this._externalVideo)&&(this.data.inputParams.produceVideo?this.enableCam({deviceId:this.data.inputParams.videoDeviceId?this.data.inputParams.videoDeviceId:null}):Xn.debug("No need to produce video!"),this.data.inputParams.share&&this.enableShare({shareAudio:this.data.inputParams.shareAudio,enableSharingLayers:this._enableSharingLayers,shareBitRates:this.data.inputParams.shareBitRates})),this._sendTransport.on("connectionstatechange",e=>{"connected"===e&&Xn.debug("Send transport now connected!")}))}catch(e){Xn.error("_joinRoom() failed:%o",e),this.emit("error",{code:"EJR001",text:"Join room request failed!"}),this.close()}}async enableMic({deviceId:e=null,autoGainControl:t,noiseSuppression:r,echoCancellation:s,channelCount:i,sampleRate:a,forcePCMU:n,forcePCMA:o}={}){if(Xn.debug("enableMic()"),!this.data.inputParams.produce)return Xn.debug("Produce status is set to false!"),{success:!1,error:!0,code:"REID007",text:"Error while trying to start Mic/Audio. Produce flag need to set to true while joining room in order to enable Mic/Audio."};if("connected"!==this._roomStatus)return Xn.debug("Room status is not connected yet!"),{success:!1,error:!0,code:"REID008",text:`Error while trying to start Mic/Audio as room not in connected status. Current room status:!${this._roomStatus}`,possibleReasons:"Did you forget to call joinRoom before enabling Mic? OR if you have already initiated the joinRoom process, then Mic will be enabled automatically once room join process completes."};if(this._micProducer)return Xn.debug("Mic is already active!"),{success:!1,warning:!0,code:"RWID002",text:"Error while trying to start Mic/Audio. Mic/Audio is already active!"};if(!this._device.canProduce("audio"))return Xn.error("enableMic() | cannot produce audio"),{success:!1,error:!0,code:"REID009",text:"Error while trying to start Mic/Audio. Mic/Audio couldnot be activated due to limitations on this device. If you think this device has a functional Mic and the problem persists even after multiple retries, please contact technical support with the error code."};let c,d;n&&"boolean"==typeof n&&(this.data.inputParams.forcePCMU=n),o&&"boolean"==typeof o&&(this.data.inputParams.forcePCMA=o),t&&"boolean"==typeof t&&(this.data.inputParams.autoGainControl=t),s&&"boolean"==typeof s&&(this.data.inputParams.echoCancellation=s),r&&"boolean"==typeof r&&(this.data.inputParams.noiseSuppression=r),a&&Number.isInteger(a)&&a<64e3&&a>8e3&&(this.data.inputParams.sampleRate=a),i&&Number.isInteger(i)&&i>0&&i<3&&(this.data.inputParams.channelCount=i);try{if(this._externalVideo)this._micStream=await this._getExternalVideoStream(),c=this._micStream.getAudioTracks()[0].clone();else{if(e?(d=this._deviceList.audioDevices.find(t=>t.deviceId===e),d||(Xn.warn("Selected audio input deviceId:%s not found",e),d=this._deviceList.audioDevices[0])):d=this._deviceList.audioDevices[0],this._mic.device=d,!d)return Xn.error("No mic device found! Can't start audio!"),{success:!1,reason:"No mic available for starting audio!"};e&&this.data.inputParams.audioDeviceId!==e&&(this.data.inputParams.audioDeviceId=e),Xn.debug("enableMic() | calling getUserMedia()");try{this._micStream=await navigator.mediaDevices.getUserMedia({audio:{deviceId:{ideal:d.deviceId},echoCancellation:this.data.inputParams.echoCancellation,noiseSuppression:this.data.inputParams.noiseSuppression,autoGainControl:this.data.inputParams.autoGainControl,sampleRate:this.data.inputParams.sampleRate,channelCount:this.data.inputParams.channelCount}}),c=this._micStream.getAudioTracks()[0]}catch(dc){throw new Error("Error while acquiring mic. Possible issue with audio constraint values",dc)}}this._micProducer=await this._sendTransport.produce({track:c,codecOptions:this.data.inputParams.forcePCMU||this.data.inputParams.forcePCMA?void 0:{opusStereo:!1,opusDtx:!0,opusFec:!0,opusNack:!0},codec:this.data.inputParams.forcePCMU?this._device.rtpCapabilities.codecs.find(e=>"audio/pcmu"===e.mimeType.toLowerCase()):this.data.inputParams.forcePCMA?this._device.rtpCapabilities.codecs.find(e=>"audio/pcma"===e.mimeType.toLowerCase()):void 0}),this._producers.set("audio",{id:this._micProducer.id,paused:this._micProducer.paused,track:this._micProducer.track,rtpParameters:this._micProducer.rtpParameters,codec:this._micProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("micStart",{peerId:this.data.inputParams.peerId,audioTrack:this._micProducer.track,type:"local"}),this._micProducer.on("transportclose",()=>{this._micProducer=null}),this._micProducer.on("trackended",()=>{this.disableMic().catch(()=>{})})}catch(l){Xn.error("enableMic() | failed:%o",l),this.emit("error",{code:"EID002",text:"Error enabling microphone!"}),c&&c.stop()}}async disableMic(){if(Xn.debug("disableMic()"),this._micStream&&this._micStream.getAudioTracks().forEach(e=>e.stop()),this._micProducer){this._micProducer.close(),this._producers.delete("audio");try{await this._cignal.request("closeProducer",{producerId:this._micProducer.id}),this.emit("micEnd",{peerId:this.data.inputParams.peerId,audioTrack:null,type:"local"})}catch(e){this.emit("error",{code:"EID003",text:"Error disabling microphone!"})}this._micProducer=null}}async muteMic(){Xn.debug("muteMic()"),this._micProducer.pause();try{await this._cignal.request("pauseProducer",{producerId:this._micProducer.id}),this.emit("peerMuted",{peerId:this.data.inputParams.peerId,type:"local"})}catch(e){Xn.error("muteMic() | failed: %o",e),this.emit("error",{code:"EID004",text:"Error muting local microphone!"})}}async unmuteMic(){Xn.debug("unmuteMic()"),this._micProducer.resume();try{await this._cignal.request("resumeProducer",{producerId:this._micProducer.id}),this.emit("peerUnMuted",{peerId:this.data.inputParams.peerId,type:"local"})}catch(e){Xn.error("unmuteMic() | failed: %o",e),this.emit("error",{code:"EID005",text:"Error unmuting local microphone!"})}}async enableCam({deviceId:e=null,videoResolution:t,forceVp8:r,forceVp9:s,forceH264:i,h264Profile:a,forceFPS:n,enableWebcamLayers:o,numSimulcastStreams:c,videoBitRates:d}={}){if(Xn.debug("enableWebcam()"),!this.data.inputParams.produce)return Xn.debug("Produce status is set to false!"),{success:!1,error:!0,code:"REID004",text:"Error while trying to start Camera. Produce flag need to set to true while joining room in order to enable Camera."};if("connected"!==this._roomStatus)return Xn.debug("Room status is not connected yet!"),{success:!1,error:!0,code:"REID005",text:`Error while trying to start Camera as room not in connected status. Current room status:!${this._roomStatus}`,possibleReasons:"Did you forget to call joinRoom before enabling Camera? OR if you have already initiated the joinRoom process, then Camera will be enabled automatically once room join process completes."};if(this._webcamProducer)return Xn.debug("Camera is already active!"),{success:!1,warning:!0,code:"RWID003",text:"Error while trying to start Camera. Camera is already active!"};if(!this._device.canProduce("video"))return Xn.error("enableWebcam() | cannot produce video"),{success:!1,error:!0,code:"REID006",text:"Error while trying to start Camera. Camera couldnot be activated due to limitations on this device. If you think this device has a functional camera and the problem persists even after multiple retries, please contact technical support with the error code."};let l,p;["hd","vga","qvga"].includes(t)&&(this.data.inputParams.videoResolution=t,this._webcam.resolution=t),r&&"boolean"==typeof r&&(this.data.inputParams.forceVp8=r),s&&"boolean"==typeof s&&(this.data.inputParams.forceVp9=s),i&&"boolean"==typeof i&&(this.data.inputParams.forceH264=i),a&&["high","low"].includes(a.toLowerCase())&&(this.data.inputParams.h264Profile=a),n&&Number.isInteger(n)&&n<65&&n>5&&(this.data.inputParams.forceFPS=25),o&&"boolean"==typeof o&&(this.data.inputParams.enableWebcamLayers=o,this._enableWebcamLayers=o),c&&Number.isInteger(c)&&c<4&&c>0&&(this.data.inputParams.numSimulcastStreams=c,this._numSimulcastStreams=c),Array.isArray(d)&&d.length>=1&&d.length<=3&&d.every(e=>Number.isInteger(e)&&e>=75&&e<=800)?(Xn.debug("videoBitRates values are correct"),this.data.inputParams.videoBitRates=d):Xn.warn("videobitrates values should be an integer array with maximum 3 elements and minimum 1 element. The values in the array are '[700,250,75]'");try{if(this._externalVideo)p={label:"external video"},this._webCamStream=await this._getExternalVideoStream(),l=this._webCamStream.getVideoTracks()[0].clone();else{e?(p=this._deviceList.videoDevices.find(t=>t.deviceId===e),p||(Xn.warn("Selected deviceId:%s not found",e),p=this._deviceList.videoDevices[0])):p=this._deviceList.videoDevices[0],this._webcam.device=p;const{resolution:t}=this._webcam;if(!p)return Xn.error("No wencam device found! Can't start video!"),{success:!1,reason:"No Webcam available for starting video!"};e&&this.data.inputParams.videoDeviceId!==e&&(this.data.inputParams.videoDeviceId=e),Xn.debug("enableWebcam() | calling getUserMedia()"),this._webCamStream=await navigator.mediaDevices.getUserMedia({video:{deviceId:{ideal:p.deviceId},...Yn[t],frameRate:{ideal:this.data.inputParams.forceFPS}}}),l=this._webCamStream.getVideoTracks()[0]}let t,r;const s={videoGoogleStartBitrate:1e3};if(Xn.debug("Current device codec options are:%O",this._device.rtpCapabilities.codecs),this._forceVP8){if(r=this._device.rtpCapabilities.codecs.find(e=>"video/vp8"===e.mimeType.toLowerCase()),!r)throw new Error("desired VP8 codec+configuration is not supported")}else if(this._forceH264){if("high"===this.data.inputParams.h264Profile?r=this._device.rtpCapabilities.codecs.find(e=>"video/h264"===e.mimeType.toLowerCase()&&"4d001f"===e.parameters["profile-level-id"]):"low"===this.data.inputParams.h264Profile&&(r=this._device.rtpCapabilities.codecs.find(e=>"video/h264"===e.mimeType.toLowerCase()&&"42e01f"===e.parameters["profile-level-id"])),!r)throw new Error("desired H264 codec+configuration is not supported");Xn.debug("Selected h264 codec is:%O",r)}else if(this._forceVP9&&(r=this._device.rtpCapabilities.codecs.find(e=>"video/vp9"===e.mimeType.toLowerCase()),!r))throw new Error("desired VP9 codec+configuration is not supported");if(this._enableWebcamLayers){const e=this._device.rtpCapabilities.codecs.find(e=>"video"===e.kind);this._forceVP9&&r||"video/vp9"===e.mimeType.toLowerCase()?t=[{maxBitrate:5e6,scalabilityMode:this._webcamScalabilityMode||"L3T3_KEY"}]:(t=[{scaleResolutionDownBy:1,maxBitrate:1e3*this.data.inputParams.videoBitRates[0],scalabilityMode:this._webcamScalabilityMode||"L1T3"}],this._numSimulcastStreams>1&&t.unshift({scaleResolutionDownBy:2,maxBitrate:1e3*this.data.inputParams.videoBitRates[1],scalabilityMode:this._webcamScalabilityMode||"L1T3"}),this._numSimulcastStreams>2&&t.unshift({scaleResolutionDownBy:4,maxBitrate:1e3*this.data.inputParams.videoBitRates[2],scalabilityMode:this._webcamScalabilityMode||"L1T3"}))}this._webcamProducer=await this._sendTransport.produce({track:l,encodings:t,codecOptions:s,codec:r}),this._producers.set("video",{id:this._webcamProducer.id,deviceLabel:p.label,type:this._getWebcamType(p),paused:this._webcamProducer.paused,track:this._webcamProducer.track,rtpParameters:this._webcamProducer.rtpParameters,codec:this._webcamProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("videoStart",{peerId:this.data.inputParams.peerId,videoTrack:this._webcamProducer.track,type:"local"}),this._webcamProducer.on("transportclose",()=>{this._webcamProducer=null}),this._webcamProducer.on("trackended",()=>{this.disableWebcam().catch(()=>{})})}catch(u){Xn.error("enableWebcam() | failed:%o",u),this.emit("error",{code:"EID011",text:"Enable Webcam failed!"}),l&&l.stop()}}async disableCam(){if(Xn.debug("disableWebcam()"),this._webcamProducer){this._webcamProducer.close(),this._producers.delete("video");try{await this._cignal.request("closeProducer",{producerId:this._webcamProducer.id}),this.emit("videoEnd",{peerId:this.data.inputParams.peerId,videoTrack:null})}catch(e){this.emit("error",{code:"EID012",text:"Error while closing server side producer!"})}this._webcamProducer=null}}async _updateWebcams(){Xn.debug("_updateWebcams()"),this._webcams=new Map,Xn.debug("_updateWebcams() | calling enumerateDevices()");const e=await navigator.mediaDevices.enumerateDevices();for(const i of e)"videoinput"===i.kind&&this._webcams.set(i.deviceId,i);const t=Array.from(this._webcams.values()),r=t.length,s=this._webcam.device?this._webcam.device.deviceId:void 0;Xn.debug("_updateWebcams() [webcams:%o]",t),0===r?this._webcam.device=null:this._webcams.has(s)||(this._webcam.device=t[0])}async _getExternalVideoStream(){if(this._externalVideoStream)return this._externalVideoStream;if(this._externalVideo.readyState<3&&await new Promise(e=>this._externalVideo.addEventListener("canplay",e)),this._externalVideo.captureStream)this._externalVideoStream=this._externalVideo.captureStream();else{if(!this._externalVideo.mozCaptureStream)throw new Error("video.captureStream() not supported");this._externalVideoStream=this._externalVideo.mozCaptureStream()}return this._externalVideoStream}_getWebcamType(e){return/(back|rear)/i.test(e.label)?(Xn.debug("_getWebcamType() | it seems to be a back camera"),"back"):(Xn.debug("_getWebcamType() | it seems to be a front camera"),"front")}async changeVideoInput({resolution:e,deviceId:t,fps:r}){if(this._webcamProducer){return await this._changeVideoInput({resolution:e,deviceId:t,fps:r})}return Xn.error("No webcam producer available!"),{success:!1,reason:"You are not sharing your camera yet. Camera Input can be changed to a new camera only when you are sharing an existing camera. "}}async _changeVideoInput({resolution:e,deviceId:t,fps:r}){Xn.info("_changeVideoInput() | Inside"),e&&["hd","vga","qvga"].includes(e)?this._webcam.resolution=e:Xn.warn("Invalid video resolution value "),r&&Number.isInteger(r)&&r<65&&r>5?this.data.inputParams.forceFPS=r:Xn.warn("forceFPS should be a number between 5 to 65, default value is 25 fps.");let s=this._deviceList.videoDevices.find(e=>t&&e.deviceId===t);if(!s)return Xn.error("The selected deviceId not found!"),{success:!1,reason:"Invalid deviceId!"};this._webcam.device=s;try{this._webCamStream.getVideoTracks().forEach(e=>e.stop()),this._webCamStream=null,Xn.debug("changeVideoInput() | calling getUserMedia()"),this._webCamStream=await navigator.mediaDevices.getUserMedia({video:{deviceId:{ideal:s.deviceId},...Yn[this._webcam.resolution],frameRate:{ideal:this.data.inputParams.forceFPS}}});const e=this._webCamStream.getVideoTracks()[0];Xn.debug("The new video track is:%O",e),await this._webcamProducer.replaceTrack({track:e});let t=this._producers.get("video");return t.deviceLabel=s.label,t.type=this._getWebcamType(s),t.track=this._webcamProducer.track,Xn.debug("Updated producer values are:%O",t),this._producers.set("video",t),this.emit("videoStart",{peerId:this.data.inputParams.peerId,videoTrack:this._webcamProducer.track,type:"local"}),{success:!0}}catch(i){return Xn.error("Error while changing input:%O",i),{success:!1,reason:"Couldn't change video input",error:i}}}async changeAudioInput({autoGainControl:e,echoCancellation:t,noiseSuppression:r,sampleRate:s,channelCount:i,deviceId:a}){if(this._micProducer){return await this._changeAudioInput({autoGainControl:e,echoCancellation:t,noiseSuppression:r,sampleRate:s,channelCount:i,deviceId:a})}return{success:!1,reason:"You are not sharing your mic yet. Mic Input can be changed to a new mic only when you are sharing an existing mic. "}}async _changeAudioInput({autoGainControl:e,echoCancellation:t,noiseSuppression:r,sampleRate:s,channelCount:i,deviceId:a}){e&&"boolean"==typeof e&&(this.data.inputParams.autoGainControl=e),t&&"boolean"==typeof t&&(this.data.inputParams.echoCancellation=Boolean(t)),r&&"boolean"==typeof r&&(this.data.inputParams.noiseSuppression=Boolean(r)),s&&Number.isInteger(s)&&s<64e3&&s>8e3&&(this.data.inputParams.sampleRate=s),i&&Number.isInteger(i)&&i>0&&i<3&&(this.data.inputParams.channelCount=i);let n=this._deviceList.audioDevices.find(e=>a&&e.deviceId===a);if(!n)return{success:!1,reason:"Invalid deviceId!"};this._mic.device=n,this._micStream&&this._micStream.getAudioTracks().forEach(e=>e.stop()),this._micStream=null;try{this._micStream=await navigator.mediaDevices.getUserMedia({audio:{deviceId:{ideal:n.deviceId},echoCancellation:this.data.inputParams.echoCancellation,noiseSuppression:this.data.inputParams.noiseSuppression,autoGainControl:this.data.inputParams.autoGainControl,sampleRate:this.data.inputParams.sampleRate,channelCount:this.data.inputParams.channelCount}});const e=this._micStream.getAudioTracks()[0];this._micProducer.replaceTrack({track:e});let t=this._producers.get("audio");return t.deviceLabel=n.label,t.track=this._micProducer.track,Xn.debug("Updated producer values are:%O",t),this._producers.set("audio",t),this.emit("micStart",{peerId:this.data.inputParams.peerId,audioTrack:this._micProducer.track,type:"local"}),{success:!0}}catch(dc){return Xn.error("Error while changing input:%O",dc),{success:!1,reason:"Couldn't change audio input",err:dc}}}async enableShare({shareAudio:e=!1,enableSharingLayers:t=!0,shareBitRates:r=[2500,1250,500]}={}){if(Xn.debug("enableShare()"),!this.data.inputParams.produce)return Xn.debug("Produce status is set to false!"),{success:!1,error:!0,code:"REID003",text:"Error while trying to start screen share. Produce flag need to set to true while joining room in order to enable screen share."};if("connected"!==this._roomStatus)return Xn.debug("Room status is not connected yet!"),{success:!1,error:!0,code:"REID001",text:`Error while trying to start screen share as room not in connected status. Current room status:!${this._roomStatus}`,possibleReasons:"Did you forget to call joinRoom before enabling screen share? OR if you have already initiated the joinRoom process, then try enabling screen share after some seconds."};if(this._shareProducer)return Xn.debug("Screen share is already active!"),{success:!1,warning:!0,code:"RWID001",text:"Error while trying to start screen share. Screen share is already active!"};if(!this._device.canProduce("video"))return Xn.error("enableShare() | cannot produce video"),{success:!1,error:!0,code:"REID002",text:"Error while trying to start screen share. Screen share couldnot be activated due to limitations on this device. If you think this device is capable of screen share and the problem persists even after multiple retries, please contact technical support with the error code."};let s,i;this._enableSharingLayers="boolean"!=typeof t?Boolean(t):t,Array.isArray(r)&&r.length>=1&&r.length<=3&&r.every(e=>Number.isInteger(e)&&e>=500&&e<=2500)?this.data.inputParams.shareBitRates=r:this.data.inputParams.shareBitRates=[2500,1250,500];try{Xn.debug("enableShare() | calling getDisplayMedia()");const t=await navigator.mediaDevices.getDisplayMedia({audio:!!e,video:{displaySurface:"monitor",logicalSurface:!0,cursor:!0,width:{max:1920},height:{max:1080},frameRate:{max:30}}});if(!t)return Xn.error("Unable to capture screen."),void this.emit("error",{code:"EID013",text:"Error while trying to start screen share. Not able to capture screen!"});let r,a;i=t.getAudioTracks()[0],i&&(this._shareAudioProducer=await this._sendTransport.produce({track:i,codecOptions:this.data.inputParams.forcePCMU?void 0:{opusStereo:!1,opusDtx:!0,opusFec:!0,opusNack:!0},codec:this.data.inputParams.forcePCMU?this._device.rtpCapabilities.codecs.find(e=>"audio/pcmu"===e.mimeType.toLowerCase()):void 0}),this._producers.set("ssAudio",{id:this._shareAudioProducer.id,type:"shareAudio",paused:this._shareAudioProducer.paused,track:this._shareAudioProducer.track,rtpParameters:this._shareAudioProducer.rtpParameters,codec:this._shareAudioProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("ssAudioStart",{peerId:this.data.inputParams.peerId,audioTrack:this._shareAudioProducer.track,type:"local"})),s=t.getVideoTracks()[0];const n={videoGoogleStartBitrate:1e3};if(this._forceVP8){if(a=this._device.rtpCapabilities.codecs.find(e=>"video/vp8"===e.mimeType.toLowerCase()),!a)throw new Error("desired VP8 codec+configuration is not supported")}else if(this._forceH264){if("high"===this.data.inputParams.h264Profile?a=this._device.rtpCapabilities.codecs.find(e=>"video/h264"===e.mimeType.toLowerCase()&&"4d001f"===e.parameters["profile-level-id"]):"low"===this.data.inputParams.h264Profile&&(a=this._device.rtpCapabilities.codecs.find(e=>"video/h264"===e.mimeType.toLowerCase()&&"42e01f"===e.parameters["profile-level-id"])),!a)throw new Error("desired H264 codec+configuration is not supported");Xn.debug("Selected h264 codec is:%O",a)}else if(this._forceVP9&&(a=this._device.rtpCapabilities.codecs.find(e=>"video/vp9"===e.mimeType.toLowerCase()),!a))throw new Error("desired VP9 codec+configuration is not supported");if(this._enableSharingLayers){const e=this._device.rtpCapabilities.codecs.find(e=>"video"===e.kind);this._forceVP9&&a||"video/vp9"===e.mimeType.toLowerCase()?r=[{maxBitrate:1e3*this.data.inputParams.shareBitRates[0],scalabilityMode:this._sharingScalabilityMode||"L3T3",dtx:!0}]:(r=[{scaleResolutionDownBy:1,maxBitrate:1e3*this.data.inputParams.shareBitRates[0],scalabilityMode:this._sharingScalabilityMode||"L1T3",dtx:!0}],this._numSimulcastStreams>1&&r.unshift({scaleResolutionDownBy:2,maxBitrate:1e3*this.data.inputParams.shareBitRates[1],scalabilityMode:this._sharingScalabilityMode||"L1T3",dtx:!0}),this._numSimulcastStreams>2&&r.unshift({scaleResolutionDownBy:4,maxBitrate:1e3*this.data.inputParams.shareBitRates[2],scalabilityMode:this._sharingScalabilityMode||"L1T3",dtx:!0}))}this._shareProducer=await this._sendTransport.produce({track:s,encodings:r,codecOptions:n,codec:a,appData:{share:!0}}),this._producers.set("ssVideo",{id:this._shareProducer.id,type:"shareVideo",paused:this._shareProducer.paused,track:this._shareProducer.track,rtpParameters:this._shareProducer.rtpParameters,codec:this._shareProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("ssVideoStart",{peerId:this.data.inputParams.peerId,videoTrack:this._shareProducer.track,type:"local"}),this._shareProducer.on("transportclose",()=>{this._shareProducer=null}),this._shareProducer.on("trackended",()=>{this.disableShare().catch(()=>{})})}catch(a){Xn.error("enableShare() | failed:%o",a),"NotAllowedError"!==a.name&&this.emit("error",{code:"EID014",text:`Error while trying to start screen share. Error is: ${a}!`}),s&&s.stop()}}async disableShare(){if(Xn.debug("disableShare()"),!this._shareProducer)return Xn.warn("Screen share doesn't seem to be on!"),void this.emit("error",{code:"EID017",text:"Error while trying to stop screen share. Is the screen share on!"});if(this._shareProducer.close(),this._shareAudioProducer){this._shareAudioProducer.close();try{await this._cignal.request("closeProducer",{producerId:this._shareAudioProducer.id}),this.emit("ssAudioStop",{peerId:this.data.inputParams.peerId,videoTrack:null,type:"local"})}catch(e){this.emit("error",{code:"EID015",text:`Error while trying to stop screen share audio. Error is: ${e}!`})}}try{await this._cignal.request("closeProducer",{producerId:this._shareProducer.id}),this.emit("ssVideoStop",{peerId:this.data.inputParams.peerId,videoTrack:null,type:"local"})}catch(e){this.emit("error",{code:"EID016",text:`Error while trying to stop screen share video. Error is: ${e}!`})}this._shareAudioProducer=null,this._shareProducer=null}}const ro=async e=>new Promise(t=>setTimeout(()=>t(),e)),so=new Set(["240p","360p","480p","720p","1080p","1440p","2160p"]);function ao(e){return!!Array.isArray(e)&&e.every(e=>so.has(e))}const no=new Tr("utils-verifyFiles"),oo=["mp4"];function co(e,t){try{const r=new URL(e).pathname;return r.split(".").pop().toLowerCase()===t.toLowerCase()}catch{return!1}}const lo=new TextEncoder,po=new TextDecoder;function uo(e){if(Uint8Array.fromBase64)return Uint8Array.fromBase64("string"==typeof e?e:po.decode(e),{alphabet:"base64url"});let t=e;t instanceof Uint8Array&&(t=po.decode(t)),t=t.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return function(e){if(Uint8Array.fromBase64)return Uint8Array.fromBase64(e);const t=atob(e),r=new Uint8Array(t.length);for(let s=0;s<t.length;s++)r[s]=t.charCodeAt(s);return r}(t)}catch{throw new TypeError("The input to be decoded is not correctly encoded.")}}class ho extends Error{static code="ERR_JOSE_GENERIC";code="ERR_JOSE_GENERIC";constructor(e,t){super(e,t),this.name=this.constructor.name,Error.captureStackTrace?.(this,this.constructor)}}class mo extends ho{static code="ERR_JWT_CLAIM_VALIDATION_FAILED";code="ERR_JWT_CLAIM_VALIDATION_FAILED";claim;reason;payload;constructor(e,t,r="unspecified",s="unspecified"){super(e,{cause:{claim:r,reason:s,payload:t}}),this.claim=r,this.reason=s,this.payload=t}}class fo extends ho{static code="ERR_JWT_EXPIRED";code="ERR_JWT_EXPIRED";claim;reason;payload;constructor(e,t,r="unspecified",s="unspecified"){super(e,{cause:{claim:r,reason:s,payload:t}}),this.claim=r,this.reason=s,this.payload=t}}class go extends ho{static code="ERR_JOSE_ALG_NOT_ALLOWED";code="ERR_JOSE_ALG_NOT_ALLOWED"}class bo extends ho{static code="ERR_JOSE_NOT_SUPPORTED";code="ERR_JOSE_NOT_SUPPORTED"}class yo extends ho{static code="ERR_JWS_INVALID";code="ERR_JWS_INVALID"}class _o extends ho{static code="ERR_JWT_INVALID";code="ERR_JWT_INVALID"}class vo extends ho{static code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED";code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED";constructor(e="signature verification failed",t){super(e,t)}}function wo(e,t="algorithm.name"){return new TypeError(`CryptoKey does not support this operation, its ${t} must be ${e}`)}function So(e,t){return e.name===t}function Co(e){return parseInt(e.name.slice(4),10)}function Po(e,t,r){switch(t){case"HS256":case"HS384":case"HS512":{if(!So(e.algorithm,"HMAC"))throw wo("HMAC");const r=parseInt(t.slice(2),10);if(Co(e.algorithm.hash)!==r)throw wo(`SHA-${r}`,"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!So(e.algorithm,"RSASSA-PKCS1-v1_5"))throw wo("RSASSA-PKCS1-v1_5");const r=parseInt(t.slice(2),10);if(Co(e.algorithm.hash)!==r)throw wo(`SHA-${r}`,"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!So(e.algorithm,"RSA-PSS"))throw wo("RSA-PSS");const r=parseInt(t.slice(2),10);if(Co(e.algorithm.hash)!==r)throw wo(`SHA-${r}`,"algorithm.hash");break}case"Ed25519":case"EdDSA":if(!So(e.algorithm,"Ed25519"))throw wo("Ed25519");break;case"ML-DSA-44":case"ML-DSA-65":case"ML-DSA-87":if(!So(e.algorithm,t))throw wo(t);break;case"ES256":case"ES384":case"ES512":{if(!So(e.algorithm,"ECDSA"))throw wo("ECDSA");const r=function(e){switch(e){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}(t);if(e.algorithm.namedCurve!==r)throw wo(r,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}!function(e,t){if(!e.usages.includes(t))throw new TypeError(`CryptoKey does not support this operation, its usages must include ${t}.`)}(e,r)}function ko(e,t,...r){if((r=r.filter(Boolean)).length>2){const t=r.pop();e+=`one of type ${r.join(", ")}, or ${t}.`}else 2===r.length?e+=`one of type ${r[0]} or ${r[1]}.`:e+=`of type ${r[0]}.`;return null==t?e+=` Received ${t}`:"function"==typeof t&&t.name?e+=` Received function ${t.name}`:"object"==typeof t&&null!=t&&t.constructor?.name&&(e+=` Received an instance of ${t.constructor.name}`),e}function Ro(e,t,...r){return ko(`Key for the ${e} algorithm must be `,t,...r)}function To(e){return"CryptoKey"===e?.[Symbol.toStringTag]}function Eo(e){return"KeyObject"===e?.[Symbol.toStringTag]}const Io=e=>To(e)||Eo(e);const xo=e=>{if("object"!=typeof(t=e)||null===t||"[object Object]"!==Object.prototype.toString.call(e))return!1;var t;if(null===Object.getPrototypeOf(e))return!0;let r=e;for(;null!==Object.getPrototypeOf(r);)r=Object.getPrototypeOf(r);return Object.getPrototypeOf(e)===r};const Do=async e=>{if(!e.alg)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');const{algorithm:t,keyUsages:r}=function(e){let t,r;switch(e.kty){case"AKP":switch(e.alg){case"ML-DSA-44":case"ML-DSA-65":case"ML-DSA-87":t={name:e.alg},r=e.priv?["sign"]:["verify"];break;default:throw new bo('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(e.alg){case"PS256":case"PS384":case"PS512":t={name:"RSA-PSS",hash:`SHA-${e.alg.slice(-3)}`},r=e.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":t={name:"RSASSA-PKCS1-v1_5",hash:`SHA-${e.alg.slice(-3)}`},r=e.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":t={name:"RSA-OAEP",hash:`SHA-${parseInt(e.alg.slice(-3),10)||1}`},r=e.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new bo('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(e.alg){case"ES256":t={name:"ECDSA",namedCurve:"P-256"},r=e.d?["sign"]:["verify"];break;case"ES384":t={name:"ECDSA",namedCurve:"P-384"},r=e.d?["sign"]:["verify"];break;case"ES512":t={name:"ECDSA",namedCurve:"P-521"},r=e.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":t={name:"ECDH",namedCurve:e.crv},r=e.d?["deriveBits"]:[];break;default:throw new bo('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"OKP":switch(e.alg){case"Ed25519":case"EdDSA":t={name:"Ed25519"},r=e.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":t={name:e.crv},r=e.d?["deriveBits"]:[];break;default:throw new bo('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;default:throw new bo('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:t,keyUsages:r}}(e),s={...e};return"AKP"!==s.kty&&delete s.alg,delete s.use,crypto.subtle.importKey("jwk",s,t,e.ext??(!e.d&&!e.priv),e.key_ops??r)};function Mo(e){return xo(e)&&"string"==typeof e.kty}let Lo;const Oo=async(e,t,r,s=!1)=>{Lo||=new WeakMap;let i=Lo.get(e);if(i?.[r])return i[r];const a=await Do({...t,alg:r});return s&&Object.freeze(e),i?i[r]=a:Lo.set(e,{[r]:a}),a},Ao=async(e,t)=>{if(e instanceof Uint8Array)return e;if(To(e))return e;if(Eo(e)){if("secret"===e.type)return e.export();if("toCryptoKey"in e&&"function"==typeof e.toCryptoKey)try{return((e,t)=>{Lo||=new WeakMap;let r=Lo.get(e);if(r?.[t])return r[t];const s="public"===e.type,i=!!s;let a;if("x25519"===e.asymmetricKeyType){switch(t){case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":break;default:throw new TypeError("given KeyObject instance cannot be used for this algorithm")}a=e.toCryptoKey(e.asymmetricKeyType,i,s?[]:["deriveBits"])}if("ed25519"===e.asymmetricKeyType){if("EdDSA"!==t&&"Ed25519"!==t)throw new TypeError("given KeyObject instance cannot be used for this algorithm");a=e.toCryptoKey(e.asymmetricKeyType,i,[s?"verify":"sign"])}switch(e.asymmetricKeyType){case"ml-dsa-44":case"ml-dsa-65":case"ml-dsa-87":if(t!==e.asymmetricKeyType.toUpperCase())throw new TypeError("given KeyObject instance cannot be used for this algorithm");a=e.toCryptoKey(e.asymmetricKeyType,i,[s?"verify":"sign"])}if("rsa"===e.asymmetricKeyType){let r;switch(t){case"RSA-OAEP":r="SHA-1";break;case"RS256":case"PS256":case"RSA-OAEP-256":r="SHA-256";break;case"RS384":case"PS384":case"RSA-OAEP-384":r="SHA-384";break;case"RS512":case"PS512":case"RSA-OAEP-512":r="SHA-512";break;default:throw new TypeError("given KeyObject instance cannot be used for this algorithm")}if(t.startsWith("RSA-OAEP"))return e.toCryptoKey({name:"RSA-OAEP",hash:r},i,s?["encrypt"]:["decrypt"]);a=e.toCryptoKey({name:t.startsWith("PS")?"RSA-PSS":"RSASSA-PKCS1-v1_5",hash:r},i,[s?"verify":"sign"])}if("ec"===e.asymmetricKeyType){const r=new Map([["prime256v1","P-256"],["secp384r1","P-384"],["secp521r1","P-521"]]).get(e.asymmetricKeyDetails?.namedCurve);if(!r)throw new TypeError("given KeyObject instance cannot be used for this algorithm");"ES256"===t&&"P-256"===r&&(a=e.toCryptoKey({name:"ECDSA",namedCurve:r},i,[s?"verify":"sign"])),"ES384"===t&&"P-384"===r&&(a=e.toCryptoKey({name:"ECDSA",namedCurve:r},i,[s?"verify":"sign"])),"ES512"===t&&"P-521"===r&&(a=e.toCryptoKey({name:"ECDSA",namedCurve:r},i,[s?"verify":"sign"])),t.startsWith("ECDH-ES")&&(a=e.toCryptoKey({name:"ECDH",namedCurve:r},i,s?[]:["deriveBits"]))}if(!a)throw new TypeError("given KeyObject instance cannot be used for this algorithm");return r?r[t]=a:Lo.set(e,{[t]:a}),a})(e,t)}catch(dc){if(dc instanceof TypeError)throw dc}let r=e.export({format:"jwk"});return Oo(e,r,t)}if(Mo(e))return e.k?uo(e.k):Oo(e,e,t,!0);throw new Error("unreachable")},No=e=>e?.[Symbol.toStringTag],jo=(e,t,r)=>{if(void 0!==t.use){let e;switch(r){case"sign":case"verify":e="sig";break;case"encrypt":case"decrypt":e="enc"}if(t.use!==e)throw new TypeError(`Invalid key for this operation, its "use" must be "${e}" when present`)}if(void 0!==t.alg&&t.alg!==e)throw new TypeError(`Invalid key for this operation, its "alg" must be "${e}" when present`);if(Array.isArray(t.key_ops)){let s;switch(!0){case"verify"===r:case"dir"===e:case e.includes("CBC-HS"):s=r;break;case e.startsWith("PBES2"):s="deriveBits";break;case/^A\d{3}(?:GCM)?(?:KW)?$/.test(e):s=!e.includes("GCM")&&e.endsWith("KW")?"unwrapKey":r;break;case"encrypt"===r:s="wrapKey";break;case"decrypt"===r:s=e.startsWith("RSA")?"unwrapKey":"deriveBits"}if(s&&!1===t.key_ops?.includes?.(s))throw new TypeError(`Invalid key for this operation, its "key_ops" must include "${s}" when present`)}return!0},Fo=(e,t,r)=>{e.startsWith("HS")||"dir"===e||e.startsWith("PBES2")||/^A(?:128|192|256)(?:GCM)?(?:KW)?$/.test(e)||/^A(?:128|192|256)CBC-HS(?:256|384|512)$/.test(e)?((e,t,r)=>{if(!(t instanceof Uint8Array)){if(Mo(t)){if(function(e){return"oct"===e.kty&&"string"==typeof e.k}(t)&&jo(e,t,r))return;throw new TypeError('JSON Web Key for symmetric algorithms must have JWK "kty" (Key Type) equal to "oct" and the JWK "k" (Key Value) present')}if(!Io(t))throw new TypeError(Ro(e,t,"CryptoKey","KeyObject","JSON Web Key","Uint8Array"));if("secret"!==t.type)throw new TypeError(`${No(t)} instances for symmetric algorithms must be of type "secret"`)}})(e,t,r):((e,t,r)=>{if(Mo(t))switch(r){case"decrypt":case"sign":if(function(e){return"oct"!==e.kty&&("AKP"===e.kty&&"string"==typeof e.priv||"string"==typeof e.d)}(t)&&jo(e,t,r))return;throw new TypeError("JSON Web Key for this operation be a private JWK");case"encrypt":case"verify":if(function(e){return"oct"!==e.kty&&void 0===e.d&&void 0===e.priv}(t)&&jo(e,t,r))return;throw new TypeError("JSON Web Key for this operation be a public JWK")}if(!Io(t))throw new TypeError(Ro(e,t,"CryptoKey","KeyObject","JSON Web Key"));if("secret"===t.type)throw new TypeError(`${No(t)} instances for asymmetric algorithms must not be of type "secret"`);if("public"===t.type)switch(r){case"sign":throw new TypeError(`${No(t)} instances for asymmetric algorithm signing must be of type "private"`);case"decrypt":throw new TypeError(`${No(t)} instances for asymmetric algorithm decryption must be of type "private"`)}if("private"===t.type)switch(r){case"verify":throw new TypeError(`${No(t)} instances for asymmetric algorithm verifying must be of type "public"`);case"encrypt":throw new TypeError(`${No(t)} instances for asymmetric algorithm encryption must be of type "public"`)}})(e,t,r)},Bo=async(e,t,r)=>{if(t instanceof Uint8Array){if(!e.startsWith("HS"))throw new TypeError(((e,...t)=>ko("Key must be ",e,...t))(t,"CryptoKey","KeyObject","JSON Web Key"));return crypto.subtle.importKey("raw",t,{hash:`SHA-${e.slice(-3)}`,name:"HMAC"},!1,[r])}return Po(t,e,r),t},Uo=async(e,t,r,s)=>{const i=await Bo(e,t,"verify");((e,t)=>{if(e.startsWith("RS")||e.startsWith("PS")){const{modulusLength:r}=t.algorithm;if("number"!=typeof r||r<2048)throw new TypeError(`${e} requires key modulusLength to be 2048 bits or larger`)}})(e,i);const a=((e,t)=>{const r=`SHA-${e.slice(-3)}`;switch(e){case"HS256":case"HS384":case"HS512":return{hash:r,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:r,name:"RSA-PSS",saltLength:parseInt(e.slice(-3),10)>>3};case"RS256":case"RS384":case"RS512":return{hash:r,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:r,name:"ECDSA",namedCurve:t.namedCurve};case"Ed25519":case"EdDSA":return{name:"Ed25519"};case"ML-DSA-44":case"ML-DSA-65":case"ML-DSA-87":return{name:e};default:throw new bo(`alg ${e} is not supported either by JOSE or your javascript runtime`)}})(e,i.algorithm);try{return await crypto.subtle.verify(a,i,r,s)}catch{return!1}};async function $o(e,t,r){if(!xo(e))throw new yo("Flattened JWS must be an object");if(void 0===e.protected&&void 0===e.header)throw new yo('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==e.protected&&"string"!=typeof e.protected)throw new yo("JWS Protected Header incorrect type");if(void 0===e.payload)throw new yo("JWS Payload missing");if("string"!=typeof e.signature)throw new yo("JWS Signature missing or incorrect type");if(void 0!==e.header&&!xo(e.header))throw new yo("JWS Unprotected Header incorrect type");let s={};if(e.protected)try{const t=uo(e.protected);s=JSON.parse(po.decode(t))}catch{throw new yo("JWS Protected Header is invalid")}if(!((...e)=>{const t=e.filter(Boolean);if(0===t.length||1===t.length)return!0;let r;for(const s of t){const e=Object.keys(s);if(r&&0!==r.size)for(const t of e){if(r.has(t))return!1;r.add(t)}else r=new Set(e)}return!0})(s,e.header))throw new yo("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const i={...s,...e.header},a=((e,t,r,s,i)=>{if(void 0!==i.crit&&void 0===s?.crit)throw new e('"crit" (Critical) Header Parameter MUST be integrity protected');if(!s||void 0===s.crit)return new Set;if(!Array.isArray(s.crit)||0===s.crit.length||s.crit.some(e=>"string"!=typeof e||0===e.length))throw new e('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');let a;a=void 0!==r?new Map([...Object.entries(r),...t.entries()]):t;for(const n of s.crit){if(!a.has(n))throw new bo(`Extension Header Parameter "${n}" is not recognized`);if(void 0===i[n])throw new e(`Extension Header Parameter "${n}" is missing`);if(a.get(n)&&void 0===s[n])throw new e(`Extension Header Parameter "${n}" MUST be integrity protected`)}return new Set(s.crit)})(yo,new Map([["b64",!0]]),r?.crit,s,i);let n=!0;if(a.has("b64")&&(n=s.b64,"boolean"!=typeof n))throw new yo('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:o}=i;if("string"!=typeof o||!o)throw new yo('JWS "alg" (Algorithm) Header Parameter missing or invalid');const c=r&&((e,t)=>{if(void 0!==t&&(!Array.isArray(t)||t.some(e=>"string"!=typeof e)))throw new TypeError(`"${e}" option must be an array of strings`);if(t)return new Set(t)})("algorithms",r.algorithms);if(c&&!c.has(o))throw new go('"alg" (Algorithm) Header Parameter value not allowed');if(n){if("string"!=typeof e.payload)throw new yo("JWS Payload must be a string")}else if("string"!=typeof e.payload&&!(e.payload instanceof Uint8Array))throw new yo("JWS Payload must be a string or an Uint8Array instance");let d=!1;"function"==typeof t&&(t=await t(s,e),d=!0),Fo(o,t,"verify");const l=function(...e){const t=e.reduce((e,{length:t})=>e+t,0),r=new Uint8Array(t);let s=0;for(const i of e)r.set(i,s),s+=i.length;return r}(lo.encode(e.protected??""),lo.encode("."),"string"==typeof e.payload?lo.encode(e.payload):e.payload);let p;try{p=uo(e.signature)}catch{throw new yo("Failed to base64url decode the signature")}const u=await Ao(t,o);if(!(await Uo(o,u,p,l)))throw new vo;let h;if(n)try{h=uo(e.payload)}catch{throw new yo("Failed to base64url decode the payload")}else h="string"==typeof e.payload?lo.encode(e.payload):e.payload;const m={payload:h};return void 0!==e.protected&&(m.protectedHeader=s),void 0!==e.header&&(m.unprotectedHeader=e.header),d?{...m,key:u}:m}const Vo=86400,qo=/^(\+|\-)? ?(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i,Wo=e=>{const t=qo.exec(e);if(!t||t[4]&&t[1])throw new TypeError("Invalid time period format");const r=parseFloat(t[2]);let s;switch(t[3].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":s=Math.round(r);break;case"minute":case"minutes":case"min":case"mins":case"m":s=Math.round(60*r);break;case"hour":case"hours":case"hr":case"hrs":case"h":s=Math.round(3600*r);break;case"day":case"days":case"d":s=Math.round(r*Vo);break;case"week":case"weeks":case"w":s=Math.round(604800*r);break;default:s=Math.round(31557600*r)}return"-"===t[1]||"ago"===t[4]?-s:s},zo=e=>e.includes("/")?e.toLowerCase():`application/${e.toLowerCase()}`;function Ho(e,t,r={}){let s;try{s=JSON.parse(po.decode(t))}catch{}if(!xo(s))throw new _o("JWT Claims Set must be a top-level JSON object");const{typ:i}=r;if(i&&("string"!=typeof e.typ||zo(e.typ)!==zo(i)))throw new mo('unexpected "typ" JWT header value',s,"typ","check_failed");const{requiredClaims:a=[],issuer:n,subject:o,audience:c,maxTokenAge:d}=r,l=[...a];void 0!==d&&l.push("iat"),void 0!==c&&l.push("aud"),void 0!==o&&l.push("sub"),void 0!==n&&l.push("iss");for(const b of new Set(l.reverse()))if(!(b in s))throw new mo(`missing required "${b}" claim`,s,b,"missing");if(n&&!(Array.isArray(n)?n:[n]).includes(s.iss))throw new mo('unexpected "iss" claim value',s,"iss","check_failed");if(o&&s.sub!==o)throw new mo('unexpected "sub" claim value',s,"sub","check_failed");if(c&&(p=s.aud,u="string"==typeof c?[c]:c,!("string"==typeof p?u.includes(p):Array.isArray(p)&&u.some(Set.prototype.has.bind(new Set(p))))))throw new mo('unexpected "aud" claim value',s,"aud","check_failed");var p,u;let h;switch(typeof r.clockTolerance){case"string":h=Wo(r.clockTolerance);break;case"number":h=r.clockTolerance;break;case"undefined":h=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:m}=r,f=(g=m||new Date,Math.floor(g.getTime()/1e3));var g;if((void 0!==s.iat||d)&&"number"!=typeof s.iat)throw new mo('"iat" claim must be a number',s,"iat","invalid");if(void 0!==s.nbf){if("number"!=typeof s.nbf)throw new mo('"nbf" claim must be a number',s,"nbf","invalid");if(s.nbf>f+h)throw new mo('"nbf" claim timestamp check failed',s,"nbf","check_failed")}if(void 0!==s.exp){if("number"!=typeof s.exp)throw new mo('"exp" claim must be a number',s,"exp","invalid");if(s.exp<=f-h)throw new fo('"exp" claim timestamp check failed',s,"exp","check_failed")}if(d){const e=f-s.iat;if(e-h>("number"==typeof d?d:Wo(d)))throw new fo('"iat" claim timestamp check failed (too far in the past)',s,"iat","check_failed");if(e<0-h)throw new mo('"iat" claim timestamp check failed (it should be in the past)',s,"iat","check_failed")}return s}async function Go(e,t,r){const s=await async function(e,t,r){if(e instanceof Uint8Array&&(e=po.decode(e)),"string"!=typeof e)throw new yo("Compact JWS must be a string or Uint8Array");const{0:s,1:i,2:a,length:n}=e.split(".");if(3!==n)throw new yo("Invalid Compact JWS");const o=await $o({payload:i,protected:s,signature:a},t,r),c={payload:o.payload,protectedHeader:o.protectedHeader};return"function"==typeof t?{...c,key:o.key}:c}(e,t,r);if(s.protectedHeader.crit?.includes("b64")&&!1===s.protectedHeader.b64)throw new _o("JWTs MUST NOT use unencoded payload");const i={payload:Ho(s.protectedHeader,s.payload,r),protectedHeader:s.protectedHeader};return"function"==typeof t?{...i,key:s.key}:i}const Ko=new Tr("Room"),Jo={small:{width:{ideal:160},height:{ideal:120}},qvga:{width:{ideal:320},height:{ideal:240}},vga:{width:{ideal:640},height:{ideal:480}},hd:{width:{ideal:1280},height:{ideal:720}}};let Qo;const Xo=new class{constructor(){this.queue=new Map}push(e,t){this.queue.set(e,t)}get(e){return this.queue.get(e)}remove(e){this.queue.delete(e)}};class Yo extends xr.EventEmitter{static async listDevices(){if(Qo)return Ko.info("Device list already exists:%O",Qo),{success:!0,deviceList:Qo};const e=await Qn();return e.success?(Qo=e.deviceList,{success:!0,deviceList:e.deviceList}):{success:!1,reason:e.reason}}static async init({sessionToken:e,roomId:t,peerId:r}={}){if(!e)throw new Error("Session token is required to join the room.");try{let s;Ko.info("session token:%s",e);try{const t=(new TextEncoder).encode("samvyo_tech_321"),{payload:r}=await Go(e,t,{algorithms:["HS256"]});s=r,Ko.info("Decoded token:",s)}catch(dc){throw Ko.error("JWT verification failed:",dc),dc instanceof fo?new Error("Session token has expired"):dc instanceof mo?new Error("Session token not yet active"):new Error("Invalid session token: "+dc.message)}if(!s||"object"!=typeof s)throw new Error("Invalid token format");const{data:i,signallingServerUrl:a}=s;if(!i||!a)throw new Error("Missing required token data");return r||(r=di()),t||(t=ci()),new Yo({peerId:r,roomId:t,outputData:{sessionToken:e,innerSessionToken:i,signallingServerUrl:a}})}catch(s){throw Ko.error("Failed to initialize:",s.message),s}}constructor({peerId:e,roomId:t,outputData:r}){super(),this._closed=!1,this._roomStatus="initialised",this._roomDisplayName=null,this._running=!1,this._cignal=null,this._socket=null,this._sendTransport=null,this._recvTransport=null,this._device=new pr.Device,this._webCamProducer=null,this._micProducer=null,this._shareProducer=null,this._shareAudioProducer=null,this._producers=new Map,this._consumers=new Map,this._peers=new Map,this._data={...r,inputParams:{peerId:e,roomId:t,roomType:"conferencing"}},this._micStream=null,this._webCamStream=null,this._webcam={device:null,resolution:"hd"},this._mic={device:null},this._deviceList=Qo||null,this._externalVideo=null,this._externalVideoStream=null,this._forceVP8=!1,this._forceH264=!1,this._forceVP9=!1,this._enableWebcamLayers=!0,this._numSimulcastStreams=3,this._enableSharingLayers=!0,this._client=Pr.parse(window.navigator.userAgent),this._routerRtpCapabilities=null,this._recordingStartedByMe={},this._cignalConnected=!1,this._reconnectionInitiated=!1,this._restartIceInProgressSendTransport=!1,this._restartIceInProgressRecvTransport=!1,this._activeSpeaker=null,this.initLocal()}get closed(){return this._closed}get data(){return this._data}set data(e){throw new Error("Setting the whole data object is not possible!")}get peers(){return this._peers}set peers(e){throw new Error("Setting the whole peers object is not possible!")}get transports(){return{produce:this._sendTransport,consume:this._recvTransport}}set transports(e){throw new Error("Setting of transport is not possible!")}get videoStream(){return this._webCamStream}get audioStream(){return this._micStream}get clientAgent(){return this._client}get activeParameters(){return this._data.inputParams}get deviceList(){return this._deviceList?this._deviceList:{videoDevices:[],audioDevices:[],audioOutputDevices:[]}}set deviceList(e){throw new Error("Setting of deviceList is not possible!")}get currentlyActiveSpeaker(){return this._activeSpeaker}set currentlyActiveSpeaker(e){throw new Error("Setting of currentActivespeaker is not possible!")}get roomDisplayName(){return this._roomDisplayName}set roomDisplayName(e){throw new Error("Setting of roomDisplayName is not possible!")}async initLocal(){const e=pr.detectDevice();Ko.debug("The device is:%O",e),await this._initSocket()}async _initSocket(){let e=this;const t=this.data.signallingServerUrl.replace(/^(http|https):\/\//,""),r=`wss://${t}/?sessionToken=${this.data.sessionToken}&roomId=${this.data.inputParams.roomId}&peerId=${this.data.inputParams.peerId}&roomType=${this.data.inputParams.roomType}`;Ko.info(`Going to create a new socket! with address: ${t}`),this._socket=new oi(r,!0),this._listenToSocket(),this._socket.on("notify",({type:e,title:t,message:r})=>{this.emit("notification",{eventType:e,eventText:`${t}: ${r}`,roomId:this.data.inputParams.roomId,peerId:this.data.inputParams.peerId})}),this._socket.on("roomStartedP2p",e=>{Ko.info("P2P room successfully started"),this._running=!0}),this._socket.on("userError",t=>{Ko.error("User Error happened with message:%O",t),e.emit("notification",{eventType:t.title,eventText:`${t.text}`})}),this._socket.on("validationAlert",e=>{Ko.info("Validation alert happened")}),this._socket.on("alreadyActive",({title:e,text:t})=>{this.emit("notification",{eventType:"alreadyActive",eventText:"This peer already has an active connection",roomId:this.data.inputParams.roomId,peerId:this.data.inputParams.peerId})}),this._socket.on("passwordDisabled",()=>{Ko.info("password disabled by moderator!"),this.emit("notification",{eventType:"passwordDisabled",eventText:"Password for this room has been disabled by moderator",roomId:this.data.inputParams.roomId})}),this._socket.on("close",({code:e,reason:t})=>{if(Ko.info(`socket closed with code ${e}`),4500!==e&&4100!==e){let r=t||"Connection to server closed unexpectedly! Trying to reconnect.";Ko.info(`socket close code is${e} with reason ${r}`)}else Ko.info("Socket is now closed!"),this.close()}),this._socket.on("connected",async()=>{Ko.info("Socket connected"),e.pc&&e._sendTransport&&e._recvTransport?roomType===Ln.P2P&&e.pc?(Ko.info("Socket seems to be reconnected in mid call! RestartIce needed for p2p call."),"failed"!==e.pc.iceConnectionState&&"disconnected"!==e.pc.iceConnectionState||e.restartICE()):(Ko.debug("Ice restarts for mediasoup transports for a joined peer"),e._sendTransport&&["Failed","disconnected"].includes(e._sendTransport.connectionState)?(Ko.debug("Restart ice for sendtransport"),e.restartIce(e._sendTransport.id,"send")):Ko.error("Send transport not available!"),e._recvTransport&&["Failed","disconnected"].includes(e._recvTransport.connectionState)?(Ko.debug("Restart ice for recvtransport"),e.restartIce(e._recvTransport.id,"recv")):Ko.error("Recv transport not available!")):(Ko.info("Connection getting connected for first time"),this.emit("initSuccess"))}),this._socket.on("defaultJoinStatus",async e=>{Ko.info(" Socket defaultjoinstatus:%O",e)})}_sendMessage(e){this._socket.send({usageType:"sdk",...e})}_listenToSocket(){this._socket.on("message",e=>{try{switch("currentlyActiveSpeaker"===e.id||"allStats"===e.id||Ko.info("message in Room is:%O",e),e.id){case"chatMessage":this.processChatMessage(e);break;case"customMessage":this.processCustomMessage(e);break;case"existingParticipants":this.onExistingParticipants(e);break;case"newPeerJoin":this.onNewPeer(e);break;case"recordingError":this.handleRecordingErrors(e);break;case"moderatorAuthentication":this.authenticateUser(e);break;case"authenticationRequested":this.authenticationRequested(e);break;case"toggleMyMic":this.toggleMyMic(e);break;case"toggleMyCamera":this.toggleMyCamera(e);break;case"logMeOut":this.logMeOutNew(e);break;case"userAlreadyAuthenticated":this.hideUserAuthenticationDialog(e);break;case"peerLeft":this.peerLeft(e);break;case"recordingStarted":this.setRecordingStatusStarted(e);break;case"recordingStopped":this.setRecordingStatusEnded(e);break;case"startDefaultRecording":this.startRecording(e);break;case"mediaToggled":this.mediaToggled(e);break;case"processingStarted":this.handleProcessingStart(e);break;case"processingCompleted":this.handleProcessingCompletion(e);break;case"processingError":this.handleProcessingError(e);break;case"createTransportResponse":this.handleCreateTransportRequest(e);break;case"connectTransportResponse":this.handleConnectTransportRequest(e);break;case"connectRecvTransportResponse":this.handleConnectRecvTransportRequest(e);break;case"sendTrackResponse":this.handleSendTrackRequest(e);break;case"recvTrackResponse":this.handleRecvTrackRequest(e);break;case"roomClosedByModerator":this.leaveRoomCommon(),this.roomClosed();break;case"currentlyActiveSpeaker":this.setCurrentlyActiveSpeaker(e);break;case"restartIceResponse":this.restartIceResponse(e);break;case"consumerClosed":this.closeConsumer(e);break;case"handRaise":this.handleHandRaise(e);break;case"updateCId":this.updateCId(e);break;case"upgradeParticipant":this.handleUpgradeParticipant(e);break;case"downgradeParticipant":this.handleDowngradeParticipant(e);break;case"switchMicOff":this.handleSwitchMicOff(e);break;case"screenShareLimitReached":this.handleScreenShareLimitReached(e);break;case"upgradeLimitReached":this.handleUpgradeLimitReached(e);break;case"modUpgradeReq":this.handleModUpgradeReq(e);break;case"lockUnlockRoom":this.handleLockUnlockRoom(e);break;case"peersWaiting":this.handlePeersWaiting(e);break;case"remotePeerJoin":this.handleRemotePeerJoin(e);break;case"offer":Ko.debug("inside offer"),this.handleOffer(e);break;case"answer":Ko.debug("inside answer"),this.handleAnswer(e);break;case"candidate":Ko.debug("inside handle candidate"),this.handleCandidate(e.candidate);break;case"p2pRoomClosed":Ko.debug("inside p2p room close"),this.leaveRoomNewP2p("leaveAndCloseRoom");break;case"p2pUserLeft":Ko.debug("inside p2p user left"),this.userLeftRoom(e);break;case"iceRestart":this.handleIceRestart(e);break;case"iceRestarted":this.handleIceRestartResponse(e);break;case"screenShareP2p":this.handleScreenShareP2p(e);break;default:Ko.warn("Unrecognized message:%o",e)}}catch(dc){Ko.error("listentomessage:%O",dc)}})}joinRoom=async({peerName:e=null,produce:t=!0,produceAudio:r=!0,produceVideo:s=!0,consume:i=!0,videoResolution:a="hd",forceVp8:n=!1,forceVp9:o=!1,forceH264:c=!1,h264Profile:d="high",forcePCMU:l=!1,forcePCMA:p=!1,forceFPS:u=25,enableWebcamLayers:h=!0,numSimulcastStreams:m=3,autoGainControl:f=!0,echoCancellation:g=!0,noiseSuppression:b=!0,sampleRate:y=44e3,channelCount:_=1,videoBitRates:v=[700,250,75],share:w=!1,shareAudio:S=!1,enableSharingLayers:C=!0,shareBitRates:P=[2500,1250,500],audioDeviceId:k=null,videoDeviceId:R=null,peerType:T="participant",roomType:E=Ln.CONFERENCING,authenticationRequired:I=!1,password:x=null,roomDisplayName:D=null}={})=>{Ko.info("Going to join room"),["hd","vga","qvga"].includes(a)||(Ko.warn("Invalid video resolution value. setting it to default value of 'hd' "),a="hd"),"boolean"!=typeof t&&(Ko.warn("Produe should either be true or false"),t=Boolean(t)),"boolean"!=typeof r&&(Ko.warn("ProduceAudio should either be true or false"),r=Boolean(r)),"boolean"!=typeof s&&(Ko.warn("ProduceVideo should either be true or false"),s=Boolean(s)),"boolean"!=typeof i&&(Ko.warn("Consume should either be true or false"),i=Boolean(i)),"boolean"!=typeof n&&(Ko.warn("forceVp8 should either be true or false"),n=Boolean(n)),"boolean"!=typeof o&&(Ko.warn("forceVp9 should either be true or false"),o=Boolean(o)),"boolean"!=typeof c&&(Ko.warn("forceH264 should either be true or false"),c=Boolean(c)),["high","low"].includes(d.toLowerCase())||(Ko.warn("h264Profile should either be 'high' or 'low'"),d="high"),(!Number.isInteger(u)||Number.isInteger(u)&&(u>65||u<5))&&(Ko.warn("forceFPS should be a number between 5 to 65, default value is 25 fps."),u=25),"boolean"!=typeof h&&(Ko.warn("enableWebcamLayers should either be true or false"),h=Boolean(h)),(!Number.isInteger(m)||Number.isInteger(m)&&(m>3||m<1))&&(Ko.warn("numSimulcastStreams should be a number between 1 to 3, default value is 3."),m=3),Array.isArray(v)&&v.length>=1&&v.length<=3&&v.every(e=>Number.isInteger(e)&&e>=75&&e<=800)?Ko.debug("videoBitRates values are correct"):(Ko.warn("videobitrates values should be an integer array with maximum 3 elements and minimum 1 element. The values in the array are '[700,250,75]'"),v=[700,250,75]),"boolean"!=typeof l&&(Ko.warn("forcePCMU should either be true or false"),l=Boolean(l)),"boolean"!=typeof p&&(Ko.warn("forcePCMA should either be true or false"),p=Boolean(p)),"boolean"!=typeof f&&(Ko.warn("autoGainControl should either be true or false"),f=Boolean(f)),"boolean"!=typeof g&&(Ko.warn("echoCancellation should either be true or false"),g=Boolean(g)),"boolean"!=typeof b&&(Ko.warn("noiseSuppression should either be true or false"),b=Boolean(b)),(!Number.isInteger(y)||Number.isInteger(y)&&(y>64e3||y<8e3))&&(Ko.warn("sampleRate should be a number between 8000 to 64000, default value is 44000 Khz."),y=44e3),(!Number.isInteger(_)||Number.isInteger(_)&&(_>2||_<1))&&(Ko.warn("sampleRate should be a number between 1 to 2, default value is 1, which is a mono audio."),_=1),"boolean"!=typeof w&&(Ko.warn("share should either be true or false"),w=Boolean(w)),"boolean"!=typeof S&&(Ko.warn("shareAudio should either be true or false"),S=Boolean(S)),"boolean"!=typeof C&&(Ko.warn("enableSharingLayers should either be true or false"),C=Boolean(C)),Array.isArray(P)&&P.length>=1&&P.length<=3&&P.every(e=>Number.isInteger(e)&&e>=500&&e<=2500)?Ko.debug("shareBitRates values are correct"):(Ko.warn("sharebitrates values should be an integer array with maximum 3 elements and minimum 1 element. The values in the array are '[2500,1250,500]'"),P=[2500,1250,500]),["moderator","participant","attendee"].includes(T)?Ko.debug("peerType is valid:%s",T):(T="participant",Ko.debug("peerType is invalid:%s. By default set to: participant",T)),await this.listDevicesInternal(),this._videoResolution=a,this._forceVP8=Boolean(n),this._forceH264=Boolean(c),this._forceVP9=Boolean(o),this._enableWebcamLayers=Boolean(h),this._numSimulcastStreams=m,this._enableSharingLayers=Boolean(C);try{e||(e=Kn()),this.data.inputParams={...this.data.inputParams,peerName:e,produce:t,produceAudio:r,produceVideo:s,consume:i,videoResolution:a,forceVp8:n,forceVp9:o,forceH264:c,h264Profile:d,forceFPS:u,forcePCMU:l,forcePCMA:p,enableWebcamLayers:h,numSimulcastStreams:m,autoGainControl:f,echoCancellation:g,noiseSuppression:b,sampleRate:y,channelCount:_,videoBitRates:v,share:w,shareAudio:S,enableSharingLayers:C,shareBitRates:P,audioDeviceId:k,videoDeviceId:R,peerType:T,roomType:E,authenticationRequired:I,password:x,roomDisplayName:D},Ko.info("input params are:%O",this.data.inputParams);const M={id:"joinRoom",type:"r",peerId:this.data.inputParams.peerId,participantType:"attendee"===T?"viewer":T,roomType:E,roomDisplayName:D||`room-${1e5+Math.round(9e5*Math.random())}`,browser:this._client,name:this.data.inputParams.peerName,room:this.data.inputParams.roomId,authenticationRequired:I,isRoomPassword:!!x,roomPassword:x||null,usageType:"sdk"};this._sendMessage(M)}catch(M){return Ko.error("Failed to join room:",M.message),{success:!1,reason:M.message}}};authenticateUser=e=>{Ko.info("Moderator authentication requested:%O",e),this.emit("moderatorAuthentication",{moderatorName:e.moderatorName,requesterName:e.requesterName,requesterPeerId:e.requesterPeerId,text:e.title})};authenticationRequested=e=>{Ko.info("Moderator authentication requested:%O",e),this.emit("authenticationRequested",{requesterName:e.requesterName,requesterPeerId:this.data.inputParams.peerId,text:e.title})};allowRoomJoin=e=>{if(!e)return Ko.error("peerId can't be undefined!"),{success:!1,reason:"PeerId can't be undefined"};Ko.info("Allow user to join room:%O",e);let t={id:"userAuthenticated",peerId:e,roomName:this.data.inputParams.roomId,moderator:this.data.inputParams.peerId};this._sendMessage(t)};denyRoomJoin=e=>{if(!e)return Ko.error("peerId can't be undefined!"),{success:!1,reason:"PeerId can't be undefined"};Ko.info("Deny user to join room:%O",e);let t={id:"userDenied",peerId:e,roomName:this.data.inputParams.roomId,moderator:this.data.inputParams.peerId};this._sendMessage(t)};hideUserAuthenticationDialog=e=>{Ko.debug("authentication already done message:%o",e),this.emit("moderatorAuthStatus",{requesterId:e.requesterId,moderatorActed:e.peerId})};onNewPeer(e){const{peerId:t,displayName:r,participantType:s}=e;this._peers.set(t,{displayName:r,participantType:s,consumers:[]}),this.emit("newPeer",{peerId:t,peerName:r,type:this.data.inputParams.peerId===t?"local":"remote",peerRole:s})}async onExistingParticipants(e){if(Ko.debug("Onexisting participant message:%O",e),this._routerRtpCapabilities=e.routerRtpCapabilities,this._roomStatus="connected",this._roomDisplayName=e.roomDisplayName,this._running=!0,this._socket._roomJoined=!0,this.emit("newPeer",{peerId:this.data.inputParams.peerId,peerName:this.data.inputParams.peerName,type:"local",peerRole:this.data.inputParams.peerType}),this.data.inputParams.produce?await this._createSendTransport():Ko.debug("Produce is false!"),this.data.inputParams.consume){await this._createRecvTransport();let t=this;e.peers&&e.peers.length>0&&e.peers.forEach(e=>{t.emit("newPeer",{peerId:e.peerId,peerName:e.name,type:"remote",peerRole:e.participantType})})}else Ko.debug("Consume is false!")}sendCustomMessage=(e,t="general",r=null,s,i,a={})=>{const n={id:"customMessage",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,data:e,type:t,recieverPeerId:r,senderType:s,messageType:i,customData:a};Ko.debug("Room sendCustomMessage",n),this._sendMessage(n)};processCustomMessage=e=>{Ko.debug("Room processCustomMessage",e),this.emit("customMessage",e)};updateCId=e=>{Ko.debug("Received updateCId message",e),e.targetPeerId!==this.data.inputParams.peerId&&e.targetPeerId||this.emit("updateCId",{message:e,cId:e.cId,peerId:this.data.inputParams.peerId,isMyCId:e.targetPeerId===this.data.inputParams.peerId})};setCurrentlyActiveSpeaker(e){const{peerId:t,volume:r}=e.activeSpeaker;this._activeSpeaker=e.activeSpeaker,this.emit("activeSpeaker",{peerId:t,volume:r})}_createSendTransport=async()=>{Ko.debug("Room _createSendTransport");try{this._device.loaded||(Ko.debug("Room _createSendTransport","Going to load device with routerrtpcapabilities"),await this._device.load({routerRtpCapabilities:this._routerRtpCapabilities}));let e="send";this._sendTransport||this._sendMessage({id:"createTransport",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,direction:e})}catch(dc){Ko.error("Room _createSendTransport",dc)}};_createRecvTransport=async()=>{this._device.loaded||(Ko.debug("loading device for creating recv transport"),await this._device.load({routerRtpCapabilities:this._routerRtpCapabilities}));this._recvTransport||(Ko.debug("receive transport created"),this._sendMessage({id:"createTransport",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,direction:"recv"}))};handleCreateTransportRequest=async e=>{Ko.debug("Room handleCreateTransportRequest():%O",e);let t,{transportOptions:r,direction:s}=e;try{if("recv"===s)t=await this._device.createRecvTransport(r),Ko.debug("Room",`handleCreateTransportRequest() recv transport created ${t.id}`),this._recvTransport=t,this.handleRecvTransportListeners();else{if("send"!==s)throw new Error(`bad transport 'direction': ${s}`);t=await this._device.createSendTransport(r),Ko.debug("Room",`handleCreateTransportRequest() send transport created [id:%s]${t.id}`),this._sendTransport=t,this.handleSendTransportListeners(),this.produceMedia()}}catch(i){}};handleSendTransportListeners=()=>{this._sendTransport.on("connect",this.handleTransportConnectEvent),this._sendTransport.on("produce",this.handleTransportProduceEvent);let e=this;this._sendTransport.on("connectionstatechange",async t=>{if(Ko.debug(`ConferenceRoom sendTransport connectionState ${t} & socketconnection state ${this._socket._ws.readyState}`),"failed"===t||"disconnected"===t)if(1===this._socket._ws.readyState)e.restartIce(this._sendTransport.id,"send");else{for(;1!==this._socket._ws.readyState;)Ko.debug(`socket not yet ready with state- ${this._socket._ws.readyState}`),await ro(1500);"connected"===this._roomStatus&&this.restartIce(this._sendTransport.id,"send")}Ko.debug("ConferenceRoom",`send transport connection state change [state:%s]${t}`)})};handleTransportConnectEvent=({dtlsParameters:e},t,r)=>{try{const r=e=>{Ko.debug("connect-transport action"),t(),Xo.remove("connectTransport")};Xo.push("connectTransport",r);let s={id:"connectTransport",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,transportId:this._sendTransport.id,dtlsParameters:e,direction:"send"};this._sendMessage(s)}catch(s){Ko.error("handleTransportConnectEvent() failed [error:%o]",s),r(s)}};handleTransportProduceEvent=({kind:e,rtpParameters:t,appData:r},s,i)=>{try{const i=e=>{Ko.debug("handleTransportProduceEvent callback [data:%o]",e),s({id:e.producerId}),Xo.remove("produce")};Xo.push("produce",i);let a="cam-audio"===r.mediaTag&&void 0!==this.data.inputParams.audioStatus&&!this.data.inputParams.audioStatus;Ko.debug(`handleTransportProduceEvent() | pause status->${a}`);let n={id:"sendTrack",transportId:this._sendTransport.id,peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,kind:e,rtpParameters:t,paused:a,appData:r,clientOs:this._client.os.name,browser:this._client.browser};this._sendMessage(n)}catch(a){Ko.error("handleTransportProduceEvent() failed [error:%o]",a),i(a)}};produceMedia=async()=>{this.data.inputParams.produce?(this.data.inputParams.produceAudio?this.enableMic({deviceId:this.data.inputParams.audioDeviceId?this.data.inputParams.audioDeviceId:null}):Ko.debug("No need to produce audio!"),this._device.canProduce("video")&&(this.data.inputParams.produceVideo?this.enableCam({deviceId:this.data.inputParams.videoDeviceId?this.data.inputParams.videoDeviceId:null}):Ko.debug("No need to produce video!"),this.data.inputParams.share&&this.enableShare({shareAudio:this.data.inputParams.shareAudio,enableSharingLayers:this._enableSharingLayers,shareBitRates:this.data.inputParams.shareBitRates}))):Ko.warn("produce is false!")};handleRecvTransportListeners=async()=>{this._recvTransport.on("connect",this.handleRecvTransportConnectEvent);let e=this;this._recvTransport.on("connectionstatechange",async t=>{if(Ko.debug(`ConferenceRoom recvTransport connectionState ${t} & socketconnection state ${this._socket._ws.readyState}`),"failed"===t||"disconnected"===t)if(1===this._socket._ws.readyState)e.restartIce(this._recvTransport.id,"recv");else{for(;1!==this._socket._ws.readyState;)Ko.debug(`socket not yet ready with state- ${this._socket._ws.readyState}`),await ro(1e3);"connected"===this._roomStatus&&e.restartIce(this._recvTransport.id,"recv")}Ko.debug("ConferenceRoom",`Recv transport connection state change [state:%s]${t}`)});let t={id:"transportsAvailable",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,rtpCapabilities:this._device.rtpCapabilities};this._sendMessage(t)};handleRecvTransportConnectEvent=({dtlsParameters:e},t,r)=>{try{const r=e=>{Ko.debug("ConferenceRoom","connect-recv-transport action"),t(),Xo.remove("connectRecvTransport")};Xo.push("connectRecvTransport",r);let s={id:"connectTransport",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,transportId:this._recvTransport.id,dtlsParameters:e,direction:"recv"};this._sendMessage(s)}catch(s){Ko.error("handleTransportConnectEvent() failed [error:%o]",s),r(s)}};handleRecvTrackRequest=async e=>{if(Ko.debug("Room handleRecvTrackRequest",e),!this.data.inputParams.consume)return void Ko.warn("I do not want to consume");let{senderPeerId:t,mediaTag:r,sender:s,audioStatus:i,videoStatus:a,senderParticipantType:n,type:o,producerPaused:c,...d}=e;Ko.debug("New consumer created",d),d.id=d.consumerId,delete d.consumerId,Ko.debug("ConferenceRoom",`senderPeerId is ->${t}`);let l=await this._recvTransport.consume({...d,streamId:`${t}-${"screen-video"===r||"screen-audio"===r?"share":"mic-webcam"}`,appData:{peerId:t,mediaTag:r}});for(;this._recvTransport&&"connected"!==this._recvTransport.connectionState;)Ko.debug(`recv transport connstate${this._recvTransport.connectionState}`),await ro(100);this._consumers.set(l.id,l),l.on("transportclose",()=>{this._consumers.delete(l.id)});const{spatialLayers:p,temporalLayers:u}=pr.parseScalabilityMode(l.rtpParameters.encodings[0].scalabilityMode),h=this._peers.get(this.data.inputParams.peerId);Ko.debug(`Consumer created for sender peerId ${t} for kind ${l.kind} for receiver peerId ${this.data.inputParams.peerId}`),Ko.info("The old peer data is :%O",h),h?(h["screen-video"===r||"screen-audio"===r?`ss${l.kind}`:l.kind]={consumerId:l.id,type:o,locallyPaused:!1,remotelyPaused:c,rtpParameters:l.rtpParameters,spatialLayers:p,temporalLayers:u,preferredSpatialLayer:p-1,preferredTemporalLayer:u-1,priority:1,codec:l.rtpParameters.codecs[0].mimeType.split("/")[1],track:l.track,share:"screen-video"===r||"screen-audio"===r},Ko.info("The new peer data is :%O",h),this._peers.set(this.data.inputParams.peerId,h)):(Ko.info("Peer not found!"),this._peers.set(this.data.inputParams.peerId,{["screen-video"===r||"screen-audio"===r?`ss${l.kind}`:l.kind]:{consumerId:l.id,type:o,locallyPaused:!1,remotelyPaused:c,rtpParameters:l.rtpParameters,spatialLayers:p,temporalLayers:u,preferredSpatialLayer:p-1,preferredTemporalLayer:u-1,priority:1,codec:l.rtpParameters.codecs[0].mimeType.split("/")[1],track:l.track,share:"screen-video"===r||"screen-audio"===r}})),await this.resumeConsumer(l),Ko.debug("Going to emit mic start / videostart"),"audio"===l.kind?"screen-audio"===r?this.emit("ssAudioStart",{peerId:t,audioTrack:l.track,type:"remote"}):this.emit("micStart",{peerId:t,audioTrack:l.track,type:"remote"}):"video"===l.kind&&("screen-video"===r?this.emit("ssVideoStart",{peerId:t,videoTrack:l.track,type:"remote"}):this.emit("videoStart",{peerId:t,videoTrack:l.track,type:"remote"}))};resumeConsumer=async e=>{if(e){Ko.debug("resume consumer",e.appData.peerId,e.appData.mediaTag);try{let t={id:"resumeConsumer",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,consumerId:e.id};this._sendMessage(t),await e.resume()}catch(t){}}};handleConnectTransportRequest=async e=>{Ko.debug("handleTransportConnectRequest()");try{const t=Xo.get("connectTransport");if(!t)throw new Error("transport-connect action was not found");await t(e)}catch(t){}};handleConnectRecvTransportRequest=async e=>{Ko.debug("handleTransportConnectRequest()");try{const t=Xo.get("connectRecvTransport");if(!t)throw new Error("recv transport-connect action was not found");await t(e)}catch(t){}};handleSendTrackRequest=async e=>{Ko.debug("ConferenceRoom","handleProduceRequest()");try{const t=Xo.get("produce");if(!t)throw new Error("produce action was not found");await t(e)}catch(t){Ko.error("handleProduceRequest() failed [error:%o]",t)}};mediaToggled=e=>{switch(Ko.debug("Media Toggled message:%O",e),e.type){case"video":Ko.debug(`mediaToggled() | inside case video${e.videoStatus}`);break;case"audio":Ko.debug(`mediaToggled() | inside case audio${e.videoStatus}`),e.audioStatus?this.emit("peerUnMuted",{peerId:e.peerId,type:"remote"}):this.emit("peerMuted",{peerId:e.peerId,type:"remote"})}};closeConsumer=e=>{let{consumerId:t}=e;const r=this._consumers.get(t);if(!r)return void Ko.warn("Consumer with id not found!:%s",t);const{peerId:s,mediaTag:i}=r.appData;Ko.debug("Consumer closed for consumerId:%s, type:%s, appData:%o",t,r?.kind,r.appData);let a="screen-audio"===i||"screen-video"===i?`ss${r.kind}`:r.kind;r.close(),this._consumers.delete(t);let n=this._peers.get(this.data.inputParams.peerId);Ko.debug("Peer data before deletion:%O",n),n[a]&&n[a].consumerId===t&&delete n[a],Ko.debug("Peer data after deletion:%O",n),this._peers.set(this.data.inputParams.peerId,n),"audio"===r?.kind?(Ko.debug("Going to emit micEnd, consumer closed for audio"),"screen-audio"===i?this.emit("ssAudioStop",{peerId:s,track:null,type:"remote"}):this.emit("micEnd",{peerId:s,track:null,type:"remote"})):"video"===r?.kind&&(Ko.debug("Going to emit videoEnd, consumer closed for video"),"screen-video"===i?this.emit("ssVideoStop",{peerId:s,track:null,type:"remote"}):this.emit("videoEnd",{peerId:s,track:null,type:"remote"}))};peerLeft=e=>{Ko.debug("Peer Left message is:%o",e);let{peerId:t}=e;this._peers.delete(t),this.emit("peerLeft",{peerId:t})};roomClosed=()=>{Ko.info("room closed by Moderator"),this._peers=null,this.emit("roomClosed",{roomId:this.data.inputParams.roomId})};close(){this._closed||(this._closed=!0,this._socket=null,this.data.inputParams={},Ko.info("Room close()"),this._sendTransport&&this._sendTransport.close(),this._recvTransport&&this._recvTransport.close(),this._roomStatus="closed",this._running=!1)}async leaveRoom(){Ko.debug("Leave room is called!!"),"connected"===this._roomStatus?(this._sendMessage({id:"leaveRoomNew",peerId:this.data.inputParams.peerId,roomLeaveType:"client"}),this.leaveRoomCommon()):Ko.error("The room state is:%s",this._roomStatus)}async closeRoom(){"connected"===this._roomStatus?(this._sendMessage({id:"leaveAndCloseRoom",peerId:this.data.inputParams.peerId,roomCloseType:"client"}),this.leaveRoomCommon()):Ko.error("The room state is:%s",this._roomStatus)}leaveRoomCommon=()=>{this._sendTransport&&(this._sendTransport.close(),this._sendTransport=null),this._recvTransport&&(this._recvTransport.close(),this._recvTransport=null),this._webCamStream&&this._webCamStream.getVideoTracks().forEach(e=>{e.stop(),Ko.debug("Video Track stopped")}),this._micStream&&this._micStream.getAudioTracks().forEach(e=>{e.stop(),Ko.debug("Mic Track stopped")}),this._roomStatus="closed",this._running=!1,this._routerRtpCapabilities=null};async listDevicesInternal(){if(navigator.mediaDevices.ondevicechange=async e=>{let t=await Jn();Ko.info("Media devices changed!:%O",t),t.audioDevices&&t.audioDevices.length>0&&(this._deviceList.audioDevices=t.audioDevices),t.videoDevices&&t.videoDevices.length>0&&(this._deviceList.videoDevices=t.videoDevices),t.audioDevices&&t.audioDevices.length>0&&(this._deviceList.audioOutputDevices=t.audioDevicesOutput),Qo=this._deviceList,this.emit("deviceListUpdated")},!this._deviceList){const e=await Qn();if(e.success)return this._deviceList=e.deviceList,void(Qo=this._deviceList)}}restartIce=async(e,t)=>{if("send"===t&&"connected"===this._sendTransport.connectionState||"recv"===t&&"connected"===this._recvTransport.connectionState)return void Ko.debug("no need to restart ICE as transport now connected");Ko.debug("websocket is ready and connectionstate is still disconnected, therefore going to restart ICE");let r={id:"restartIce",transportId:e,roomName:this.data.inputParams.roomId,peerId:this.data.inputParams.peerId};this._sendMessage(r)};restartIceResponse=e=>{Ko.debug("restart ICE response:%o",e);let{transportId:t,iceParameters:r}=e;this._sendTransport&&this._sendTransport.id===t?this._sendTransport.restartIce({iceParameters:r}):this._recvTransport&&this._recvTransport.id===t&&this._recvTransport.restartIce({iceParameters:r})};startRecording=({recordingType:e=null,outputType:t=null,outputQualities:r=null}={})=>{Ko.debug("recording type requested is:%s,outputType:%s, outputQualties:%o",e,t,r);const s=!e||"av"!==e?.toLowerCase()&&"audiovideo"!==e?.toLowerCase()?"mergedA":"mergedAV";if((!t||"hls"!==t.toLowerCase()&&"mp4"!==t.toLowerCase())&&t)return Ko.error("Invalid outut type"),{success:!1,reason:`Invalid outputType: ${t}. `};if(t&&"hls"===t.toLowerCase()&&r&&!ao(r))return Ko.error("Invalid outut qualities"),{success:!1,reason:`Invalid outputQualities: ${JSON.stringify(r)}. Allowed values are ${Array.from(so).join(", ")}.`};let i={id:"startRecording",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,url:window.location.hostname,type:An,recordingStrategy:s,outputQualities:r,outputType:t?.toLowerCase()};this._sendMessage(i),this._recordingStartedByMe={...this._recordingStartedByMe,"main-room":{recordingNo:null}}};stopRecording=()=>{Ko.debug("going to stop recording for recordingStartedByMe:%o",this._recordingStartedByMe);let e="main-room";if(!this._recordingStartedByMe[e])return{success:!1,error:!0,code:"RRID001",text:"Error while trying to stop recording. Either the recording has not been started yet Or The same user need to stop recording who started it."};{let t={id:"stopRecording",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,recordingNo:this._recordingStartedByMe[e].recordingNo,type:An};this._sendMessage(t),delete this._recordingStartedByMe[e],this.emit("recordingEnded",{peerId:this.data.inputParams.peerId})}};setRecordingStatusStarted=e=>{Ko.debug("Recording/Streaming started by moderator!!:%O",e);let{breakOutRoom:t,recordingStartTime:r,recordingNo:s,type:i}=e;[An,Nn].includes(i)&&(this._recordingStartedByMe["main-room"]?(Ko.debug("This recording has been started by me."),this._recordingStartedByMe["main-room"].recordingNo=s,this.emit("recordingStarted",{peerId:this.data.inputParams.peerId,startTime:r})):this.emit("recordingStarted",{startTime:r}))};setRecordingStatusEnded=e=>{Ko.debug("Recording ended by moderator!!, data:%O",e);let{breakOutRoom:t,type:r}=e;"rtmpStream"===r||this.emit("recordingEnded",{})};startProcessing=async({inputFiles:e=[],outputQualities:t=null,bucket:r=null,cloud:s=null,region:i=null}={})=>{Ko.debug("Processing of Files requested for:%o",e);const a=Math.round(1e7*Math.random()),n=await async function(e){if(no.info("The input files are:%o, length:%s",e,e.length),e.length>0){no.info("Files array length is:%s",e.length);for(const{type:t,url:r}of e){if(no.info("The file detais are type:%s, url:%s",t,r),!oo.includes(t))return{success:!1,reason:`Type "${t}" is not allowed.`};if(!co(r,t))return{success:!1,reason:`Extension mismatch for ${r}; expected .${t}`}}return{success:!0}}return{success:!1,reason:"There are no files for processing!"}}(e);if(n.success){if(t&&!ao(t))return Ko.error("Invalid outut qualities"),{success:!1,reason:`Invalid outputQualities: ${JSON.stringify(t)}. Allowed values are ${Array.from(so).join(", ")}.`};this._processingStartedByMe={...this._processingStartedByMe,[a]:{}};for(const{type:t,url:r}of e)this._processingStartedByMe={...this._processingStartedByMe,[a]:{...this._processingStartedByMe[a],[r]:{type:t,url:r,status:"pending"}}};let n={id:"processVideos",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,inputFiles:e,outputQualities:t,bucket:r,cloud:s,region:i,requestId:a,type:"process"};return this._sendMessage(n),{success:!0}}return n};checkProcessingStatus=({requestId:e})=>(Ko.debug("Going to check processing status for request Id:%s",e),this._processingStartedByMe[e]?{success:!0,details:this._processingStartedByMe[e]}:{success:!0,details:this._processingStartedByMe});handleProcessingStart=e=>{const{processingStartTime:t,processingNo:r,requestId:s}=e;Ko.debug("handleProcessingStart()| received message is:%o",e),this.emit("processingStarted",{processingStartTime:t,requestId:s})};handleProcessingCompletion=e=>{const{totalProcessingTime:t,hlsfileKey:r,size:s,originalFile:i,lastFile:a,requestId:n}=e;if(Ko.debug("handleProcessingCompletion()| received message is:%o",e),Ko.debug("Before update, Total files to be processed are:%o",this._processingStartedByMe),this._processingStartedByMe[i]&&(this._processingStartedByMe={...this._processingStartedByMe,[n]:{...this._processingStartedByMe[n],[i]:{...this._processingStartedByMe[i],status:"completed",hlsfileKey:r,size:s,totalProcessingTime:t}}}),Ko.debug("After update, Total files to be processed are:%o",this._processingStartedByMe),this.emit("processingCompleted",e),a){Ko.debug("The last file processing has been completed! Remove all the files that has been completed with the same requesterId");let e={...this._processingStartedByMe};delete e[n],Ko.debug("After deleting the current requestId:%o",e),this._processingStartedByMe=e}};handleProcessingError=e=>{const{totalProcessingTime:t,hlsfileKey:r,size:s,originalFile:i,lastFile:a,requestId:n,error:o}=e;Ko.debug("handleProcessingCompletion()| received message is:%o",e),Ko.debug("Before update, Total files to be processed are:%o",this._processingStartedByMe),this._processingStartedByMe[i]&&(this._processingStartedByMe={...this._processingStartedByMe,[n]:{...this._processingStartedByMe[n],[i]:{...this._processingStartedByMe[i],status:"error",hlsfileKey:r,size:s,totalProcessingTime:t,error:o}}}),Ko.debug("After update, Total files to be processed are:%o",this._processingStartedByMe),this.emit("processingError",e)};async enableMic({deviceId:e=null,autoGainControl:t,noiseSuppression:r,echoCancellation:s,channelCount:i,sampleRate:a,forcePCMU:n,forcePCMA:o}={}){if(Ko.debug("enableMic()"),!this.data.inputParams.produce)return Ko.debug("Produce status is set to false!"),{success:!1,error:!0,code:"REID007",text:"Error while trying to start Mic/Audio. Produce flag need to set to true while joining room in order to enable Mic/Audio."};if("connected"!==this._roomStatus)return Ko.debug("Room status is not connected yet!"),{success:!1,error:!0,code:"REID008",text:`Error while trying to start Mic/Audio as room not in connected status. Current room status:!${this._roomStatus}`,possibleReasons:"Did you forget to call joinRoom before enabling Mic? OR if you have already initiated the joinRoom process, then Mic will be enabled automatically once room join process completes."};if(this._micProducer)return Ko.debug("Mic is already active!"),{success:!1,warning:!0,code:"RWID002",text:"Error while trying to start Mic/Audio. Mic/Audio is already active!"};if(!this._device.canProduce("audio"))return Ko.error("enableMic() | cannot produce audio"),{success:!1,error:!0,code:"REID009",text:"Error while trying to start Mic/Audio. Mic/Audio couldnot be activated due to limitations on this device. If you think this device has a functional Mic and the problem persists even after multiple retries, please contact technical support with the error code."};let c,d;n&&"boolean"==typeof n&&(this.data.inputParams.forcePCMU=n),o&&"boolean"==typeof o&&(this.data.inputParams.forcePCMA=o),t&&"boolean"==typeof t&&(this.data.inputParams.autoGainControl=t),s&&"boolean"==typeof s&&(this.data.inputParams.echoCancellation=s),r&&"boolean"==typeof r&&(this.data.inputParams.noiseSuppression=r),a&&Number.isInteger(a)&&a<64e3&&a>8e3&&(this.data.inputParams.sampleRate=a),i&&Number.isInteger(i)&&i>0&&i<3&&(this.data.inputParams.channelCount=i);try{if(this._externalVideo)this._micStream=await this._getExternalVideoStream(),c=this._micStream.getAudioTracks()[0].clone();else{if(e?(d=this._deviceList.audioDevices.find(t=>t.deviceId===e),d||(Ko.warn("Selected audio input deviceId:%s not found",e),d=this._deviceList.audioDevices[0])):d=this._deviceList.audioDevices[0],this._mic.device=d,!d)return Ko.error("No mic device found! Can't start audio!"),{success:!1,reason:"No mic available for starting audio!"};e&&this.data.inputParams.audioDeviceId!==e&&(this.data.inputParams.audioDeviceId=e),Ko.debug("enableMic() | calling getUserMedia()");try{this._micStream=await navigator.mediaDevices.getUserMedia({audio:{deviceId:{exact:d.deviceId},echoCancellation:this.data.inputParams.echoCancellation,noiseSuppression:this.data.inputParams.noiseSuppression,autoGainControl:this.data.inputParams.autoGainControl,sampleRate:this.data.inputParams.sampleRate,channelCount:this.data.inputParams.channelCount}}),c=this._micStream.getAudioTracks()[0]}catch(dc){throw new Error("Error while acquiring mic. Possible issue with audio constraint values",dc)}}this._micProducer=await this._sendTransport.produce({track:c,codecOptions:this.data.inputParams.forcePCMU||this.data.inputParams.forcePCMA?void 0:{opusStereo:!1,opusDtx:!0,opusFec:!0,opusNack:!0},codec:this.data.inputParams.forcePCMU?this._device.rtpCapabilities.codecs.find(e=>"audio/pcmu"===e.mimeType.toLowerCase()):this.data.inputParams.forcePCMA?this._device.rtpCapabilities.codecs.find(e=>"audio/pcma"===e.mimeType.toLowerCase()):void 0,appData:{mediaTag:"cam-audio"}}),this._producers.set("audio",{id:this._micProducer.id,paused:this._micProducer.paused,track:this._micProducer.track,rtpParameters:this._micProducer.rtpParameters,codec:this._micProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("micStart",{peerId:this.data.inputParams.peerId,audioTrack:this._micProducer.track,type:"local"}),this._micProducer.on("transportclose",()=>{this._micProducer=null}),this._micProducer.on("trackended",()=>{this.disableMic().catch(()=>{})})}catch(l){Ko.error("enableMic() | failed:%o",l),this.emit("error",{code:"EID002",text:"Error enabling microphone!"}),c&&c.stop()}}async disableMic(){if(Ko.debug("disableMic()"),this._micStream&&this._micStream.getAudioTracks().forEach(e=>e.stop()),this._micProducer){this._micProducer.close(),this._producers.delete("audio");try{let e={id:"closeProducerSDK",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,type:"audio",producerId:this._micProducer.id};this._sendMessage(e),this.emit("micEnd",{peerId:this.data.inputParams.peerId,audioTrack:null,type:"local"})}catch(e){this.emit("error",{code:"EID003",text:"Error disabling microphone!"})}this._micProducer=null}}async muteMic(){Ko.debug("muteMic()"),this._micProducer.pause();try{let e={id:"toggleMedia",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,type:"audio",audioStatus:!1,producerId:this._micProducer.id};this._sendMessage(e),this.emit("peerMuted",{peerId:this.data.inputParams.peerId,type:"local"})}catch(e){Ko.error("muteMic() | failed: %o",e),this.emit("error",{code:"EID004",text:"Error muting local microphone!"})}}async unmuteMic(){Ko.debug("unmuteMic()"),this._micProducer.resume();try{let e={id:"toggleMedia",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,type:"audio",audioStatus:!0,producerId:this._micProducer.id};this._sendMessage(e),this.emit("peerUnMuted",{peerId:this.data.inputParams.peerId,type:"local"})}catch(e){Ko.error("unmuteMic() | failed: %o",e),this.emit("error",{code:"EID005",text:"Error unmuting local microphone!"})}}async enableCam({deviceId:e=null,videoResolution:t,forceVp8:r,forceVp9:s,forceH264:i,h264Profile:a,forceFPS:n,enableWebcamLayers:o,numSimulcastStreams:c,videoBitRates:d}={}){if(Ko.debug("enableWebcam()"),!this.data.inputParams.produce)return Ko.debug("Produce status is set to false!"),{success:!1,error:!0,code:"REID004",text:"Error while trying to start Camera. Produce flag need to set to true while joining room in order to enable Camera."};if("connected"!==this._roomStatus)return Ko.debug("Room status is not connected yet!"),{success:!1,error:!0,code:"REID005",text:`Error while trying to start Camera as room not in connected status. Current room status:!${this._roomStatus}`,possibleReasons:"Did you forget to call joinRoom before enabling Camera? OR if you have already initiated the joinRoom process, then Camera will be enabled automatically once room join process completes."};if(this._webcamProducer)return Ko.debug("Camera is already active!"),{success:!1,warning:!0,code:"RWID003",text:"Error while trying to start Camera. Camera is already active!"};if(!this._device.canProduce("video"))return Ko.error("enableWebcam() | cannot produce video"),{success:!1,error:!0,code:"REID006",text:"Error while trying to start Camera. Camera couldnot be activated due to limitations on this device. If you think this device has a functional camera and the problem persists even after multiple retries, please contact technical support with the error code."};let l,p;["hd","vga","qvga"].includes(t)&&(this.data.inputParams.videoResolution=t,this._webcam.resolution=t),r&&"boolean"==typeof r&&(this.data.inputParams.forceVp8=r),s&&"boolean"==typeof s&&(this.data.inputParams.forceVp9=s),i&&"boolean"==typeof i&&(this.data.inputParams.forceH264=i),a&&["high","low"].includes(a.toLowerCase())&&(this.data.inputParams.h264Profile=a),n&&Number.isInteger(n)&&n<65&&n>5&&(this.data.inputParams.forceFPS=25),o&&"boolean"==typeof o&&(this.data.inputParams.enableWebcamLayers=o,this._enableWebcamLayers=o),c&&Number.isInteger(c)&&c<4&&c>0&&(this.data.inputParams.numSimulcastStreams=c,this._numSimulcastStreams=c),Array.isArray(d)&&d.length>=1&&d.length<=3&&d.every(e=>Number.isInteger(e)&&e>=75&&e<=800)?(Ko.debug("videoBitRates values are correct"),this.data.inputParams.videoBitRates=d):Ko.warn("videobitrates values should be an integer array with maximum 3 elements and minimum 1 element. The values in the array are '[700,250,75]'");try{if(this._externalVideo)p={label:"external video"},this._webCamStream=await this._getExternalVideoStream(),l=this._webCamStream.getVideoTracks()[0].clone();else{e?(p=this._deviceList.videoDevices.find(t=>t.deviceId===e),p||(Ko.warn("Selected deviceId:%s not found",e),p=this._deviceList.videoDevices[0])):p=this._deviceList.videoDevices[0],this._webcam.device=p;const{resolution:t}=this._webcam;if(!p)return Ko.error("No wencam device found! Can't start video!"),{success:!1,reason:"No Webcam available for starting video!"};e&&this.data.inputParams.videoDeviceId!==e&&(this.data.inputParams.videoDeviceId=e),Ko.debug("enableWebcam() | calling getUserMedia()"),this._webCamStream=await navigator.mediaDevices.getUserMedia({video:{deviceId:{exact:p.deviceId},...Jo[t],frameRate:{ideal:this.data.inputParams.forceFPS}}}),l=this._webCamStream.getVideoTracks()[0]}let t,r;const s={videoGoogleStartBitrate:1e3};if(Ko.debug("Current device codec options are:%O",this._device.rtpCapabilities.codecs),this._forceVP8){if(r=this._device.rtpCapabilities.codecs.find(e=>"video/vp8"===e.mimeType.toLowerCase()),!r)throw new Error("desired VP8 codec+configuration is not supported")}else if(this._forceH264){if("high"===this.data.inputParams.h264Profile?r=this._device.rtpCapabilities.codecs.find(e=>"video/h264"===e.mimeType.toLowerCase()&&"4d001f"===e.parameters["profile-level-id"]):"low"===this.data.inputParams.h264Profile&&(r=this._device.rtpCapabilities.codecs.find(e=>"video/h264"===e.mimeType.toLowerCase()&&"42e01f"===e.parameters["profile-level-id"])),!r)throw new Error("desired H264 codec+configuration is not supported");Ko.debug("Selected h264 codec is:%O",r)}else if(this._forceVP9&&(r=this._device.rtpCapabilities.codecs.find(e=>"video/vp9"===e.mimeType.toLowerCase()),!r))throw new Error("desired VP9 codec+configuration is not supported");if(this._enableWebcamLayers){const e=this._device.rtpCapabilities.codecs.find(e=>"video"===e.kind);this._forceVP9&&r||"video/vp9"===e.mimeType.toLowerCase()?t=[{maxBitrate:5e6,scalabilityMode:this._webcamScalabilityMode||"L3T3_KEY"}]:(t=[{scaleResolutionDownBy:1,maxBitrate:1e3*this.data.inputParams.videoBitRates[0],scalabilityMode:this._webcamScalabilityMode||"L1T3"}],this._numSimulcastStreams>1&&t.unshift({scaleResolutionDownBy:2,maxBitrate:1e3*this.data.inputParams.videoBitRates[1],scalabilityMode:this._webcamScalabilityMode||"L1T3"}),this._numSimulcastStreams>2&&t.unshift({scaleResolutionDownBy:4,maxBitrate:1e3*this.data.inputParams.videoBitRates[2],scalabilityMode:this._webcamScalabilityMode||"L1T3"}))}this._webcamProducer=await this._sendTransport.produce({track:l,encodings:t,codecOptions:s,codec:r,appData:{mediaTag:"cam-video"}}),this._producers.set("video",{id:this._webcamProducer.id,deviceLabel:p.label,type:this._getWebcamType(p),paused:this._webcamProducer.paused,track:this._webcamProducer.track,rtpParameters:this._webcamProducer.rtpParameters,codec:this._webcamProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("videoStart",{peerId:this.data.inputParams.peerId,videoTrack:this._webcamProducer.track,type:"local"}),this._webcamProducer.on("transportclose",()=>{this._webcamProducer=null}),this._webcamProducer.on("trackended",()=>{this.disableCam().catch(()=>{})})}catch(u){Ko.error("enableWebcam() | failed:%o",u),this.emit("error",{code:"EID011",text:"Enable Webcam failed!"}),l&&l.stop()}}async disableCam(){if(Ko.debug("disableWebcam()"),this._webcamProducer){this._webcamProducer.close(),this._producers.delete("video");try{let e={id:"closeProducerSDK",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,type:"video",producerId:this._webcamProducer.id};this._sendMessage(e),this.emit("videoEnd",{peerId:this.data.inputParams.peerId,videoTrack:null})}catch(e){this.emit("error",{code:"EID012",text:"Error while closing server side producer!"})}this._webcamProducer=null}}async _updateWebcams(){Ko.debug("_updateWebcams()"),this._webcams=new Map,Ko.debug("_updateWebcams() | calling enumerateDevices()");const e=await navigator.mediaDevices.enumerateDevices();for(const i of e)"videoinput"===i.kind&&this._webcams.set(i.deviceId,i);const t=Array.from(this._webcams.values()),r=t.length,s=this._webcam.device?this._webcam.device.deviceId:void 0;Ko.debug("_updateWebcams() [webcams:%o]",t),0===r?this._webcam.device=null:this._webcams.has(s)||(this._webcam.device=t[0])}async _getExternalVideoStream(){if(this._externalVideoStream)return this._externalVideoStream;if(this._externalVideo.readyState<3&&await new Promise(e=>this._externalVideo.addEventListener("canplay",e)),this._externalVideo.captureStream)this._externalVideoStream=this._externalVideo.captureStream();else{if(!this._externalVideo.mozCaptureStream)throw new Error("video.captureStream() not supported");this._externalVideoStream=this._externalVideo.mozCaptureStream()}return this._externalVideoStream}_getWebcamType(e){return/(back|rear)/i.test(e.label)?(Ko.debug("_getWebcamType() | it seems to be a back camera"),"back"):(Ko.debug("_getWebcamType() | it seems to be a front camera"),"front")}async changeVideoInput({resolution:e,deviceId:t,fps:r}){if(this._webcamProducer){return await this._changeVideoInput({resolution:e,deviceId:t,fps:r})}return Ko.error("No webcam producer available!"),{success:!1,reason:"You are not sharing your camera yet. Camera Input can be changed to a new camera only when you are sharing an existing camera. "}}async _changeVideoInput({resolution:e,deviceId:t,fps:r}){Ko.info("_changeVideoInput() | Inside"),e&&["hd","vga","qvga"].includes(e)?this._webcam.resolution=e:Ko.warn("Invalid video resolution value "),r&&Number.isInteger(r)&&r<65&&r>5?this.data.inputParams.forceFPS=r:Ko.warn("forceFPS should be a number between 5 to 65, default value is 25 fps.");let s=this._deviceList.videoDevices.find(e=>t&&e.deviceId===t);if(!s)return Ko.error("The selected deviceId not found!"),{success:!1,reason:"Invalid deviceId!"};this._webcam.device=s;try{this._webCamStream.getVideoTracks().forEach(e=>e.stop()),this._webCamStream=null,Ko.debug("changeVideoInput() | calling getUserMedia()"),this._webCamStream=await navigator.mediaDevices.getUserMedia({video:{deviceId:{exact:s.deviceId},...Jo[this._webcam.resolution],frameRate:{ideal:this.data.inputParams.forceFPS}}});const e=this._webCamStream.getVideoTracks()[0];Ko.debug("The new video track is:%O",e),await this._webcamProducer.replaceTrack({track:e});let t=this._producers.get("video");return t.deviceLabel=s.label,t.type=this._getWebcamType(s),t.track=this._webcamProducer.track,Ko.debug("Updated producer values are:%O",t),this._producers.set("video",t),this.emit("videoStart",{peerId:this.data.inputParams.peerId,videoTrack:this._webcamProducer.track,type:"local"}),{success:!0}}catch(i){return Ko.error("Error while changing input:%O",i),{success:!1,reason:"Couldn't change video input",error:i}}}async changeAudioInput({autoGainControl:e,echoCancellation:t,noiseSuppression:r,sampleRate:s,channelCount:i,deviceId:a}){if(this._micProducer){return await this._changeAudioInput({autoGainControl:e,echoCancellation:t,noiseSuppression:r,sampleRate:s,channelCount:i,deviceId:a})}return{success:!1,reason:"You are not sharing your mic yet. Mic Input can be changed to a new mic only when you are sharing an existing mic. "}}async _changeAudioInput({autoGainControl:e,echoCancellation:t,noiseSuppression:r,sampleRate:s,channelCount:i,deviceId:a}){e&&"boolean"==typeof e&&(this.data.inputParams.autoGainControl=e),t&&"boolean"==typeof t&&(this.data.inputParams.echoCancellation=Boolean(t)),r&&"boolean"==typeof r&&(this.data.inputParams.noiseSuppression=Boolean(r)),s&&Number.isInteger(s)&&s<64e3&&s>8e3&&(this.data.inputParams.sampleRate=s),i&&Number.isInteger(i)&&i>0&&i<3&&(this.data.inputParams.channelCount=i);let n=this._deviceList.audioDevices.find(e=>a&&e.deviceId===a);if(!n)return{success:!1,reason:"Invalid deviceId!"};this._mic.device=n,this._micStream&&this._micStream.getAudioTracks().forEach(e=>e.stop()),this._micStream=null;try{this._micStream=await navigator.mediaDevices.getUserMedia({audio:{deviceId:{exact:n.deviceId},echoCancellation:this.data.inputParams.echoCancellation,noiseSuppression:this.data.inputParams.noiseSuppression,autoGainControl:this.data.inputParams.autoGainControl,sampleRate:this.data.inputParams.sampleRate,channelCount:this.data.inputParams.channelCount}});const e=this._micStream.getAudioTracks()[0];this._micProducer.replaceTrack({track:e});let t=this._producers.get("audio");return t.deviceLabel=n.label,t.track=this._micProducer.track,Ko.debug("Updated producer values are:%O",t),this._producers.set("audio",t),this.emit("micStart",{peerId:this.data.inputParams.peerId,audioTrack:this._micProducer.track,type:"local"}),{success:!0}}catch(dc){return Ko.error("Error while changing input:%O",dc),{success:!1,reason:"Couldn't change audio input",err:dc}}}async enableShare({shareAudio:e=!1,enableSharingLayers:t=!0,shareBitRates:r=[2500,1250,500]}={}){if(Ko.debug("enableShare()"),!this.data.inputParams.produce)return Ko.debug("Produce status is set to false!"),{success:!1,error:!0,code:"REID003",text:"Error while trying to start screen share. Produce flag need to set to true while joining room in order to enable screen share."};if("connected"!==this._roomStatus)return Ko.debug("Room status is not connected yet!"),{success:!1,error:!0,code:"REID001",text:`Error while trying to start screen share as room not in connected status. Current room status:!${this._roomStatus}`,possibleReasons:"Did you forget to call joinRoom before enabling screen share? OR if you have already initiated the joinRoom process, then try enabling screen share after some seconds."};if(this._shareProducer)return Ko.debug("Screen share is already active!"),{success:!1,warning:!0,code:"RWID001",text:"Error while trying to start screen share. Screen share is already active!"};if(!this._device.canProduce("video"))return Ko.error("enableShare() | cannot produce video"),{success:!1,error:!0,code:"REID002",text:"Error while trying to start screen share. Screen share couldnot be activated due to limitations on this device. If you think this device is capable of screen share and the problem persists even after multiple retries, please contact technical support with the error code."};let s,i;this._enableSharingLayers="boolean"!=typeof t?Boolean(t):t,Array.isArray(r)&&r.length>=1&&r.length<=3&&r.every(e=>Number.isInteger(e)&&e>=500&&e<=2500)?this.data.inputParams.shareBitRates=r:this.data.inputParams.shareBitRates=[2500,1250,500];try{Ko.debug("enableShare() | calling getDisplayMedia()");const t=await navigator.mediaDevices.getDisplayMedia({audio:!!e,video:{displaySurface:"monitor",logicalSurface:!0,cursor:!0,width:{max:1920},height:{max:1080},frameRate:{max:30}}});if(!t)return Ko.error("Unable to capture screen."),void this.emit("error",{code:"EID013",text:"Error while trying to start screen share. Not able to capture screen!"});let r,a;i=t.getAudioTracks()[0],i&&(this._shareAudioProducer=await this._sendTransport.produce({track:i,codecOptions:this.data.inputParams.forcePCMU?void 0:{opusStereo:!1,opusDtx:!0,opusFec:!0,opusNack:!0},codec:this.data.inputParams.forcePCMU?this._device.rtpCapabilities.codecs.find(e=>"audio/pcmu"===e.mimeType.toLowerCase()):void 0,appData:{mediaTag:"screen-audio"}}),this._producers.set("ssAudio",{id:this._shareAudioProducer.id,type:"shareAudio",paused:this._shareAudioProducer.paused,track:this._shareAudioProducer.track,rtpParameters:this._shareAudioProducer.rtpParameters,codec:this._shareAudioProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("ssAudioStart",{peerId:this.data.inputParams.peerId,audioTrack:this._shareAudioProducer.track,type:"local"})),s=t.getVideoTracks()[0];const n={videoGoogleStartBitrate:1e3};if(this._forceVP8){if(a=this._device.rtpCapabilities.codecs.find(e=>"video/vp8"===e.mimeType.toLowerCase()),!a)throw new Error("desired VP8 codec+configuration is not supported")}else if(this._forceH264){if("high"===this.data.inputParams.h264Profile?a=this._device.rtpCapabilities.codecs.find(e=>"video/h264"===e.mimeType.toLowerCase()&&"4d001f"===e.parameters["profile-level-id"]):"low"===this.data.inputParams.h264Profile&&(a=this._device.rtpCapabilities.codecs.find(e=>"video/h264"===e.mimeType.toLowerCase()&&"42e01f"===e.parameters["profile-level-id"])),!a)throw new Error("desired H264 codec+configuration is not supported");Ko.debug("Selected h264 codec is:%O",a)}else if(this._forceVP9&&(a=this._device.rtpCapabilities.codecs.find(e=>"video/vp9"===e.mimeType.toLowerCase()),!a))throw new Error("desired VP9 codec+configuration is not supported");if(this._enableSharingLayers){const e=this._device.rtpCapabilities.codecs.find(e=>"video"===e.kind);this._forceVP9&&a||"video/vp9"===e.mimeType.toLowerCase()?r=[{maxBitrate:1e3*this.data.inputParams.shareBitRates[0],scalabilityMode:this._sharingScalabilityMode||"L3T3",dtx:!0}]:(r=[{scaleResolutionDownBy:1,maxBitrate:1e3*this.data.inputParams.shareBitRates[0],scalabilityMode:this._sharingScalabilityMode||"L1T3",dtx:!0}],this._numSimulcastStreams>1&&r.unshift({scaleResolutionDownBy:2,maxBitrate:1e3*this.data.inputParams.shareBitRates[1],scalabilityMode:this._sharingScalabilityMode||"L1T3",dtx:!0}),this._numSimulcastStreams>2&&r.unshift({scaleResolutionDownBy:4,maxBitrate:1e3*this.data.inputParams.shareBitRates[2],scalabilityMode:this._sharingScalabilityMode||"L1T3",dtx:!0}))}this._shareProducer=await this._sendTransport.produce({track:s,encodings:r,codecOptions:n,codec:a,appData:{mediaTag:"screen-video"}}),this._producers.set("ssVideo",{id:this._shareProducer.id,type:"shareVideo",paused:this._shareProducer.paused,track:this._shareProducer.track,rtpParameters:this._shareProducer.rtpParameters,codec:this._shareProducer.rtpParameters.codecs[0].mimeType.split("/")[1]}),this.emit("ssVideoStart",{peerId:this.data.inputParams.peerId,videoTrack:this._shareProducer.track,type:"local"}),this._shareProducer.on("transportclose",()=>{this._shareProducer=null}),this._shareProducer.on("trackended",()=>{this.disableShare().catch(()=>{})})}catch(a){Ko.error("enableShare() | failed:%o",a),"NotAllowedError"!==a.name&&this.emit("error",{code:"EID014",text:`Error while trying to start screen share. Error is: ${a}!`}),s&&s.stop()}}async disableShare(){if(Ko.debug("disableShare()"),!this._shareProducer)return Ko.warn("Screen share doesn't seem to be on!"),void this.emit("error",{code:"EID017",text:"Error while trying to stop screen share. Is the screen share on!"});if(this._shareProducer.close(),this._shareAudioProducer){this._shareAudioProducer.close();try{let e={id:"closeProducerSDK",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,type:"audio",producerId:this._shareAudioProducer.id};this._sendMessage(e),this.emit("ssAudioStop",{peerId:this.data.inputParams.peerId,videoTrack:null,type:"local"})}catch(e){this.emit("error",{code:"EID015",text:`Error while trying to stop screen share audio. Error is: ${e}!`})}}try{let e={id:"closeProducerSDK",peerId:this.data.inputParams.peerId,roomName:this.data.inputParams.roomId,type:"video",producerId:this._shareProducer.id};this._sendMessage(e),this.emit("ssVideoStop",{peerId:this.data.inputParams.peerId,videoTrack:null,type:"local"})}catch(e){this.emit("error",{code:"EID016",text:`Error while trying to stop screen share video. Error is: ${e}!`})}this._shareAudioProducer=null,this._shareProducer=null}}const Zo="cp2p-client";class ec{constructor(e){e?(this._debug=kr(`${Zo}:${e}`),this._info=kr(`${Zo}:INFO:${e}`),this._warn=kr(`${Zo}:WARN:${e}`),this._error=kr(`${Zo}:ERROR:${e}`)):(this._debug=kr(Zo),this._info=kr(`${Zo}:INFO`),this._warn=kr(`${Zo}:WARN`),this._error=kr(`${Zo}:ERROR`)),this._debug.log=function(){}.bind(),this._info.log=function(){}.bind(),this._warn.log=function(){}.bind(),this._error.log=function(){}.bind()}get debug(){return this._debug}get info(){return this._info}get warn(){return this._warn}get error(){return this._error}}const tc={audio:{deviceId:{exact:void 0}},video:!1},rc={video:{deviceId:{exact:void 0},width:{min:320,ideal:640,max:1280},height:{min:240,ideal:480,max:720},frameRate:{min:15,max:30}}},sc={audio:!0,video:{width:{min:320,ideal:1280,max:1280},height:{min:240,ideal:720,max:720},aspectRatio:1.777777778,frameRate:{min:15,max:30}}},ic=new ec("socket");class ac extends xr.EventEmitter{constructor({url:e,roomId:t,peerId:r,peerName:s,role:i}){super(),ic.debug("constructor():%o ",{url:e,roomId:t,peerId:r,peerName:s,role:i}),this._closed=!1,this._params={url:e,roomId:t,peerId:r,peerName:s,role:i},this._socket=null,this._connectionStatus=null,this._createSocket()}get closed(){return this._closed}get connectionStatus(){return this._connectionStatus}close(){if(!this._closed){ic.debug("close()"),this._closed=!0,this.emit("close");try{this._socket.disconnect()}catch(e){ic.error("close() | error closing the Socket:%o",e)}}}async send(e){if(this._closed)throw new Error("transport closed");try{this._socket.send(JSON.stringify(e))}catch(t){throw ic.warn("send() failed:%o",t),t}}async request({type:e,message:t}){return new Promise(r=>{if(this._closed)throw new Error("transport closed");try{this._socket.emit(e,JSON.stringify(t),e=>{r(e)})}catch(s){throw ic.warn("emit() failed:%o",s),s}})}async _createSocket(){let e=this;const t=io(this._params.url,{query:{roomId:this._params.roomId,peerId:this._params.peerId,peerName:this._params.peerName,role:this._params.role}});t.on("connect",()=>{ic.debug("Socket connected!!"),e._connectionStatus=!0,e.emit("connected")}),t.on("disconnect",()=>{ic.debug("Socket disconnected!!"),e._connectionStatus=!1,e.emit("disconnected")}),t.on("reconnect",()=>{ic.debug("Socket reconnected after disconnect!!"),t.emit("reconnected")}),t.on("message",t=>{const r=JSON.parse(t);ic.debug("New mesage received with id:%s",r.type),e.emit("message",r)}),this._socket=t}}
|
|
9
8
|
/*!
|
|
10
9
|
* Platform.js
|
|
11
10
|
* Copyright 2014-2020 Benjamin Tan
|
|
12
11
|
* Copyright 2011-2013 John-David Dalton
|
|
13
12
|
* Available under MIT license
|
|
14
|
-
*/(function(){var t={function:!0,object:!0},r=t[typeof window]&&window||this,s=t[typeof e]&&e,i=t[typeof module]&&module&&!module.nodeType&&module,a=s&&i&&"object"==typeof globalThis&&globalThis;!a||a.global!==a&&a.window!==a&&a.self!==a||(r=a);var n=Math.pow(2,53)-1,o=/\bOpera/,c=Object.prototype,d=c.hasOwnProperty,p=c.toString;function l(e){return(e=String(e)).charAt(0).toUpperCase()+e.slice(1)}function h(e){return e=b(e),/^(?:webOS|i(?:OS|P))/.test(e)?e:l(e)}function u(e,t){for(var r in e)d.call(e,r)&&t(e[r],r,e)}function m(e){return null==e?l(e):p.call(e).slice(8,-1)}function f(e){return String(e).replace(/([ -])(?!$)/g,"$1?")}function g(e,t){var r=null;return function(e,t){var r=-1,s=e?e.length:0;if("number"==typeof s&&s>-1&&s<=n)for(;++r<s;)t(e[r],r,e);else u(e,t)}(e,(function(s,i){r=t(r,s,i,e)})),r}function b(e){return String(e).replace(/^ +| +$/g,"")}var _=function e(t){var s=r,i=t&&"object"==typeof t&&"String"!=m(t);i&&(s=t,t=null);var a=s.navigator||{},n=a.userAgent||"";t||(t=n);var c,d,l,_,y,w=i?!!a.likeChrome:/\bChrome\b/.test(t)&&!/internal|\n/i.test(p.toString()),v="Object",S=i?v:"ScriptBridgingProxyObject",R=i?v:"Environment",P=i&&s.java?"JavaPackage":m(s.java),C=i?v:"RuntimeObject",k=/\bJava/.test(P)&&s.java,T=k&&m(s.environment)==R,D=k?"a":"α",E=k?"b":"β",I=s.document||{},x=s.operamini||s.opera,M=o.test(M=i&&x?x["[[Class]]"]:m(x))?M:x=null,O=t,L=[],A=null,j=t==n,N=j&&x&&"function"==typeof x.version&&x.version(),B=g([{label:"EdgeHTML",pattern:"Edge"},"Trident",{label:"WebKit",pattern:"AppleWebKit"},"iCab","Presto","NetFront","Tasman","KHTML","Gecko"],(function(e,r){return e||RegExp("\\b"+(r.pattern||f(r))+"\\b","i").exec(t)&&(r.label||r)})),F=function(e){return g(e,(function(e,r){return e||RegExp("\\b"+(r.pattern||f(r))+"\\b","i").exec(t)&&(r.label||r)}))}(["Adobe AIR","Arora","Avant Browser","Breach","Camino","Electron","Epiphany","Fennec","Flock","Galeon","GreenBrowser","iCab","Iceweasel","K-Meleon","Konqueror","Lunascape","Maxthon",{label:"Microsoft Edge",pattern:"(?:Edge|Edg|EdgA|EdgiOS)"},"Midori","Nook Browser","PaleMoon","PhantomJS","Raven","Rekonq","RockMelt",{label:"Samsung Internet",pattern:"SamsungBrowser"},"SeaMonkey",{label:"Silk",pattern:"(?:Cloud9|Silk-Accelerated)"},"Sleipnir","SlimBrowser",{label:"SRWare Iron",pattern:"Iron"},"Sunrise","Swiftfox","Vivaldi","Waterfox","WebPositive",{label:"Yandex Browser",pattern:"YaBrowser"},{label:"UC Browser",pattern:"UCBrowser"},"Opera Mini",{label:"Opera Mini",pattern:"OPiOS"},"Opera",{label:"Opera",pattern:"OPR"},"Chromium","Chrome",{label:"Chrome",pattern:"(?:HeadlessChrome)"},{label:"Chrome Mobile",pattern:"(?:CriOS|CrMo)"},{label:"Firefox",pattern:"(?:Firefox|Minefield)"},{label:"Firefox for iOS",pattern:"FxiOS"},{label:"IE",pattern:"IEMobile"},{label:"IE",pattern:"MSIE"},"Safari"]),$=V([{label:"BlackBerry",pattern:"BB10"},"BlackBerry",{label:"Galaxy S",pattern:"GT-I9000"},{label:"Galaxy S2",pattern:"GT-I9100"},{label:"Galaxy S3",pattern:"GT-I9300"},{label:"Galaxy S4",pattern:"GT-I9500"},{label:"Galaxy S5",pattern:"SM-G900"},{label:"Galaxy S6",pattern:"SM-G920"},{label:"Galaxy S6 Edge",pattern:"SM-G925"},{label:"Galaxy S7",pattern:"SM-G930"},{label:"Galaxy S7 Edge",pattern:"SM-G935"},"Google TV","Lumia","iPad","iPod","iPhone","Kindle",{label:"Kindle Fire",pattern:"(?:Cloud9|Silk-Accelerated)"},"Nexus","Nook","PlayBook","PlayStation Vita","PlayStation","TouchPad","Transformer",{label:"Wii U",pattern:"WiiU"},"Wii","Xbox One",{label:"Xbox 360",pattern:"Xbox"},"Xoom"]),U=function(e){return g(e,(function(e,r,s){return e||(r[$]||r[/^[a-z]+(?: +[a-z]+\b)*/i.exec($)]||RegExp("\\b"+f(s)+"(?:\\b|\\w*\\d)","i").exec(t))&&s}))}({Apple:{iPad:1,iPhone:1,iPod:1},Alcatel:{},Archos:{},Amazon:{Kindle:1,"Kindle Fire":1},Asus:{Transformer:1},"Barnes & Noble":{Nook:1},BlackBerry:{PlayBook:1},Google:{"Google TV":1,Nexus:1},HP:{TouchPad:1},HTC:{},Huawei:{},Lenovo:{},LG:{},Microsoft:{Xbox:1,"Xbox One":1},Motorola:{Xoom:1},Nintendo:{"Wii U":1,Wii:1},Nokia:{Lumia:1},Oppo:{},Samsung:{"Galaxy S":1,"Galaxy S2":1,"Galaxy S3":1,"Galaxy S4":1},Sony:{PlayStation:1,"PlayStation Vita":1},Xiaomi:{Mi:1,Redmi:1}}),q=function(e){return g(e,(function(e,r){var s=r.pattern||f(r);return!e&&(e=RegExp("\\b"+s+"(?:/[\\d.]+|[ \\w.]*)","i").exec(t))&&(e=function(e,t,r){var s={"10.0":"10",6.4:"10 Technical Preview",6.3:"8.1",6.2:"8",6.1:"Server 2008 R2 / 7","6.0":"Server 2008 / Vista",5.2:"Server 2003 / XP 64-bit",5.1:"XP",5.01:"2000 SP1","5.0":"2000","4.0":"NT","4.90":"ME"};return t&&r&&/^Win/i.test(e)&&!/^Windows Phone /i.test(e)&&(s=s[/[\d.]+$/.exec(e)])&&(e="Windows "+s),e=String(e),t&&r&&(e=e.replace(RegExp(t,"i"),r)),h(e.replace(/ ce$/i," CE").replace(/\bhpw/i,"web").replace(/\bMacintosh\b/,"Mac OS").replace(/_PowerPC\b/i," OS").replace(/\b(OS X) [^ \d]+/i,"$1").replace(/\bMac (OS X)\b/,"$1").replace(/\/(\d)/," $1").replace(/_/g,".").replace(/(?: BePC|[ .]*fc[ \d.]+)$/i,"").replace(/\bx86\.64\b/gi,"x86_64").replace(/\b(Windows Phone) OS\b/,"$1").replace(/\b(Chrome OS \w+) [\d.]+\b/,"$1").split(" on ")[0])}(e,s,r.label||r)),e}))}(["Windows Phone","KaiOS","Android","CentOS",{label:"Chrome OS",pattern:"CrOS"},"Debian",{label:"DragonFly BSD",pattern:"DragonFly"},"Fedora","FreeBSD","Gentoo","Haiku","Kubuntu","Linux Mint","OpenBSD","Red Hat","SuSE","Ubuntu","Xubuntu","Cygwin","Symbian OS","hpwOS","webOS ","webOS","Tablet OS","Tizen","Linux","Mac OS X","Macintosh","Mac","Windows 98;","Windows "]);function V(e){return g(e,(function(e,r){var s=r.pattern||f(r);return!e&&(e=RegExp("\\b"+s+" *\\d+[.\\w_]*","i").exec(t)||RegExp("\\b"+s+" *\\w+-[\\w]*","i").exec(t)||RegExp("\\b"+s+"(?:; *(?:[a-z]+[_-])?[a-z]+\\d+|[^ ();-]*)","i").exec(t))&&((e=String(r.label&&!RegExp(s,"i").test(r.label)?r.label:e).split("/"))[1]&&!/[\d.]+/.test(e[0])&&(e[0]+=" "+e[1]),r=r.label||r,e=h(e[0].replace(RegExp(s,"i"),r).replace(RegExp("; *(?:"+r+"[_-])?","i")," ").replace(RegExp("("+r+")[-_.]?(\\w)","i"),"$1 $2"))),e}))}function W(e){return g(e,(function(e,r){return e||(RegExp(r+"(?:-[\\d.]+/|(?: for [\\w-]+)?[ /-])([\\d.]+[^ ();/_-]*)","i").exec(t)||0)[1]||null}))}if(B&&(B=[B]),/\bAndroid\b/.test(q)&&!$&&(c=/\bAndroid[^;]*;(.*?)(?:Build|\) AppleWebKit)\b/i.exec(t))&&($=b(c[1]).replace(/^[a-z]{2}-[a-z]{2};\s*/i,"")||null),U&&!$?$=V([U]):U&&$&&($=$.replace(RegExp("^("+f(U)+")[-_.\\s]","i"),U+" ").replace(RegExp("^("+f(U)+")[-_.]?(\\w)","i"),U+" $2")),(c=/\bGoogle TV\b/.exec($))&&($=c[0]),/\bSimulator\b/i.test(t)&&($=($?$+" ":"")+"Simulator"),"Opera Mini"==F&&/\bOPiOS\b/.test(t)&&L.push("running in Turbo/Uncompressed mode"),"IE"==F&&/\blike iPhone OS\b/.test(t)?(U=(c=e(t.replace(/like iPhone OS/,""))).manufacturer,$=c.product):/^iP/.test($)?(F||(F="Safari"),q="iOS"+((c=/ OS ([\d_]+)/i.exec(t))?" "+c[1].replace(/_/g,"."):"")):"Konqueror"==F&&/^Linux\b/i.test(q)?q="Kubuntu":U&&"Google"!=U&&(/Chrome/.test(F)&&!/\bMobile Safari\b/i.test(t)||/\bVita\b/.test($))||/\bAndroid\b/.test(q)&&/^Chrome/.test(F)&&/\bVersion\//i.test(t)?(F="Android Browser",q=/\bAndroid\b/.test(q)?q:"Android"):"Silk"==F?(/\bMobi/i.test(t)||(q="Android",L.unshift("desktop mode")),/Accelerated *= *true/i.test(t)&&L.unshift("accelerated")):"UC Browser"==F&&/\bUCWEB\b/.test(t)?L.push("speed mode"):"PaleMoon"==F&&(c=/\bFirefox\/([\d.]+)\b/.exec(t))?L.push("identifying as Firefox "+c[1]):"Firefox"==F&&(c=/\b(Mobile|Tablet|TV)\b/i.exec(t))?(q||(q="Firefox OS"),$||($=c[1])):!F||(c=!/\bMinefield\b/i.test(t)&&/\b(?:Firefox|Safari)\b/.exec(F))?(F&&!$&&/[\/,]|^[^(]+?\)/.test(t.slice(t.indexOf(c+"/")+8))&&(F=null),(c=$||U||q)&&($||U||/\b(?:Android|Symbian OS|Tablet OS|webOS)\b/.test(q))&&(F=/[a-z]+(?: Hat)?/i.exec(/\bAndroid\b/.test(q)?q:c)+" Browser")):"Electron"==F&&(c=(/\bChrome\/([\d.]+)\b/.exec(t)||0)[1])&&L.push("Chromium "+c),N||(N=W(["(?:Cloud9|CriOS|CrMo|Edge|Edg|EdgA|EdgiOS|FxiOS|HeadlessChrome|IEMobile|Iron|Opera ?Mini|OPiOS|OPR|Raven|SamsungBrowser|Silk(?!/[\\d.]+$)|UCBrowser|YaBrowser)","Version",f(F),"(?:Firefox|Minefield|NetFront)"])),(c=("iCab"==B&&parseFloat(N)>3?"WebKit":/\bOpera\b/.test(F)&&(/\bOPR\b/.test(t)?"Blink":"Presto"))||/\b(?:Midori|Nook|Safari)\b/i.test(t)&&!/^(?:Trident|EdgeHTML)$/.test(B)&&"WebKit"||!B&&/\bMSIE\b/i.test(t)&&("Mac OS"==q?"Tasman":"Trident")||"WebKit"==B&&/\bPlayStation\b(?! Vita\b)/i.test(F)&&"NetFront")&&(B=[c]),"IE"==F&&(c=(/; *(?:XBLWP|ZuneWP)(\d+)/i.exec(t)||0)[1])?(F+=" Mobile",q="Windows Phone "+(/\+$/.test(c)?c:c+".x"),L.unshift("desktop mode")):/\bWPDesktop\b/i.test(t)?(F="IE Mobile",q="Windows Phone 8.x",L.unshift("desktop mode"),N||(N=(/\brv:([\d.]+)/.exec(t)||0)[1])):"IE"!=F&&"Trident"==B&&(c=/\brv:([\d.]+)/.exec(t))&&(F&&L.push("identifying as "+F+(N?" "+N:"")),F="IE",N=c[1]),j){if(_="global",y=null!=(l=s)?typeof l[_]:"number",/^(?:boolean|number|string|undefined)$/.test(y)||"object"==y&&!l[_])m(c=s.runtime)==S?(F="Adobe AIR",q=c.flash.system.Capabilities.os):m(c=s.phantom)==C?(F="PhantomJS",N=(c=c.version||null)&&c.major+"."+c.minor+"."+c.patch):"number"==typeof I.documentMode&&(c=/\bTrident\/(\d+)/i.exec(t))?(N=[N,I.documentMode],(c=+c[1]+4)!=N[1]&&(L.push("IE "+N[1]+" mode"),B&&(B[1]=""),N[1]=c),N="IE"==F?String(N[1].toFixed(1)):N[0]):"number"==typeof I.documentMode&&/^(?:Chrome|Firefox)\b/.test(F)&&(L.push("masking as "+F+" "+N),F="IE",N="11.0",B=["Trident"],q="Windows");else if(k&&(O=(c=k.lang.System).getProperty("os.arch"),q=q||c.getProperty("os.name")+" "+c.getProperty("os.version")),T){try{N=s.require("ringo/engine").version.join("."),F="RingoJS"}catch(H){(c=s.system)&&c.global.system==s.system&&(F="Narwhal",q||(q=c[0].os||null))}F||(F="Rhino")}else"object"==typeof s.process&&!s.process.browser&&(c=s.process)&&("object"==typeof c.versions&&("string"==typeof c.versions.electron?(L.push("Node "+c.versions.node),F="Electron",N=c.versions.electron):"string"==typeof c.versions.nw&&(L.push("Chromium "+N,"Node "+c.versions.node),F="NW.js",N=c.versions.nw)),F||(F="Node.js",O=c.arch,q=c.platform,N=(N=/[\d.]+/.exec(c.version))?N[0]:null));q=q&&h(q)}if(N&&(c=/(?:[ab]|dp|pre|[ab]\d+pre)(?:\d+\+?)?$/i.exec(N)||/(?:alpha|beta)(?: ?\d)?/i.exec(t+";"+(j&&a.appMinorVersion))||/\bMinefield\b/i.test(t)&&"a")&&(A=/b/i.test(c)?"beta":"alpha",N=N.replace(RegExp(c+"\\+?$"),"")+("beta"==A?E:D)+(/\d+\+?/.exec(c)||"")),"Fennec"==F||"Firefox"==F&&/\b(?:Android|Firefox OS|KaiOS)\b/.test(q))F="Firefox Mobile";else if("Maxthon"==F&&N)N=N.replace(/\.[\d.]+/,".x");else if(/\bXbox\b/i.test($))"Xbox 360"==$&&(q=null),"Xbox 360"==$&&/\bIEMobile\b/.test(t)&&L.unshift("mobile mode");else if(!/^(?:Chrome|IE|Opera)$/.test(F)&&(!F||$||/Browser|Mobi/.test(F))||"Windows CE"!=q&&!/Mobi/i.test(t))if("IE"==F&&j)try{null===s.external&&L.unshift("platform preview")}catch(H){L.unshift("embedded")}else(/\bBlackBerry\b/.test($)||/\bBB10\b/.test(t))&&(c=(RegExp($.replace(/ +/g," *")+"/([.\\d]+)","i").exec(t)||0)[1]||N)?(q=((c=[c,/BB10/.test(t)])[1]?($=null,U="BlackBerry"):"Device Software")+" "+c[0],N=null):this!=u&&"Wii"!=$&&(j&&x||/Opera/.test(F)&&/\b(?:MSIE|Firefox)\b/i.test(t)||"Firefox"==F&&/\bOS X (?:\d+\.){2,}/.test(q)||"IE"==F&&(q&&!/^Win/.test(q)&&N>5.5||/\bWindows XP\b/.test(q)&&N>8||8==N&&!/\bTrident\b/.test(t)))&&!o.test(c=e.call(u,t.replace(o,"")+";"))&&c.name&&(c="ing as "+c.name+((c=c.version)?" "+c:""),o.test(F)?(/\bIE\b/.test(c)&&"Mac OS"==q&&(q=null),c="identify"+c):(c="mask"+c,F=M?h(M.replace(/([a-z])([A-Z])/g,"$1 $2")):"Opera",/\bIE\b/.test(c)&&(q=null),j||(N=null)),B=["Presto"],L.push(c));else F+=" Mobile";(c=(/\bAppleWebKit\/([\d.]+\+?)/i.exec(t)||0)[1])&&(c=[parseFloat(c.replace(/\.(\d)$/,".0$1")),c],"Safari"==F&&"+"==c[1].slice(-1)?(F="WebKit Nightly",A="alpha",N=c[1].slice(0,-1)):N!=c[1]&&N!=(c[2]=(/\bSafari\/([\d.]+\+?)/i.exec(t)||0)[1])||(N=null),c[1]=(/\b(?:Headless)?Chrome\/([\d.]+)/i.exec(t)||0)[1],537.36==c[0]&&537.36==c[2]&&parseFloat(c[1])>=28&&"WebKit"==B&&(B=["Blink"]),j&&(w||c[1])?(B&&(B[1]="like Chrome"),c=c[1]||((c=c[0])<530?1:c<532?2:c<532.05?3:c<533?4:c<534.03?5:c<534.07?6:c<534.1?7:c<534.13?8:c<534.16?9:c<534.24?10:c<534.3?11:c<535.01?12:c<535.02?"13+":c<535.07?15:c<535.11?16:c<535.19?17:c<536.05?18:c<536.1?19:c<537.01?20:c<537.11?"21+":c<537.13?23:c<537.18?24:c<537.24?25:c<537.36?26:"Blink"!=B?"27":"28")):(B&&(B[1]="like Safari"),c=(c=c[0])<400?1:c<500?2:c<526?3:c<533?4:c<534?"4+":c<535?5:c<537?6:c<538?7:c<601?8:c<602?9:c<604?10:c<606?11:c<608?12:"12"),B&&(B[1]+=" "+(c+="number"==typeof c?".x":/[.+]/.test(c)?"":"+")),"Safari"==F&&(!N||parseInt(N)>45)?N=c:"Chrome"==F&&/\bHeadlessChrome/i.test(t)&&L.unshift("headless")),"Opera"==F&&(c=/\bzbov|zvav$/.exec(q))?(F+=" ",L.unshift("desktop mode"),"zvav"==c?(F+="Mini",N=null):F+="Mobile",q=q.replace(RegExp(" *"+c+"$"),"")):"Safari"==F&&/\bChrome\b/.exec(B&&B[1])?(L.unshift("desktop mode"),F="Chrome Mobile",N=null,/\bOS X\b/.test(q)?(U="Apple",q="iOS 4.3+"):q=null):/\bSRWare Iron\b/.test(F)&&!N&&(N=W("Chrome")),N&&0==N.indexOf(c=/[\d.]+$/.exec(q))&&t.indexOf("/"+c+"-")>-1&&(q=b(q.replace(c,""))),q&&-1!=q.indexOf(F)&&!RegExp(F+" OS").test(q)&&(q=q.replace(RegExp(" *"+f(F)+" *"),"")),B&&!/\b(?:Avant|Nook)\b/.test(F)&&(/Browser|Lunascape|Maxthon/.test(F)||"Safari"!=F&&/^iOS/.test(q)&&/\bSafari\b/.test(B[1])||/^(?:Adobe|Arora|Breach|Midori|Opera|Phantom|Rekonq|Rock|Samsung Internet|Sleipnir|SRWare Iron|Vivaldi|Web)/.test(F)&&B[1])&&(c=B[B.length-1])&&L.push(c),L.length&&(L=["("+L.join("; ")+")"]),U&&$&&$.indexOf(U)<0&&L.push("on "+U),$&&L.push((/^on /.test(L[L.length-1])?"":"on ")+$),q&&(c=/ ([\d.+]+)$/.exec(q),d=c&&"/"==q.charAt(q.length-c[0].length-1),q={architecture:32,family:c&&!d?q.replace(c[0],""):q,version:c?c[1]:null,toString:function(){var e=this.version;return this.family+(e&&!d?" "+e:"")+(64==this.architecture?" 64-bit":"")}}),(c=/\b(?:AMD|IA|Win|WOW|x86_|x)64\b/i.exec(O))&&!/\bi686\b/i.test(O)?(q&&(q.architecture=64,q.family=q.family.replace(RegExp(" *"+c),"")),F&&(/\bWOW64\b/i.test(t)||j&&/\w(?:86|32)$/.test(a.cpuClass||a.platform)&&!/\bWin64; x64\b/i.test(t))&&L.unshift("32-bit")):q&&/^OS X/.test(q.family)&&"Chrome"==F&&parseFloat(N)>=39&&(q.architecture=64),t||(t=null);var K={};return K.description=t,K.layout=B&&B[0],K.manufacturer=U,K.name=F,K.prerelease=A,K.product=$,K.ua=t,K.version=F&&N,K.os=q||{architecture:null,family:null,version:null,toString:function(){return"null"}},K.parse=e,K.toString=function(){return this.description||""},K.version&&L.unshift(N),K.name&&L.unshift(F),q&&F&&(q!=String(q).split(" ")[0]||q!=F.split(" ")[0]&&!$)&&L.push($?"("+q+")":"on "+q),L.length&&(K.description=L.join(" ")),K}();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(r.platform=_,define((function(){return _}))):s&&i?u(_,(function(e,t){s[t]=e})):r.platform=_}).call(void 0);const qn=new jn("Room");class Vn extends Wt.EventEmitter{static async createRoom({roomId:e,peerId:t,peerName:r,role:s="caller"}){if(t||(t="111-111-1111".replace(/[018]/g,(()=>(15&crypto.getRandomValues(new Uint8Array(1))[0]).toString(16)))),!e)return{success:!1,reason:"roomId is required!"};const i=process.env.NODE_ENV="https//cp2p.centedge.io";return new Room({peerId:t,roomId:e,peerName:r,role:s,url:i})}constructor({peerId:e,roomId:t,peerName:r,role:s,url:i}){super(),this._closed=!1,this._roomId=t,this._socket=null,this._peerConnection=null,this._myDisplayName=r,this._myPeerId=e,this._myRole=s,this._localStream=null,this._remoteDisplayName=null,this._remotePeerId=null,this._remoteRole=null,this._remoteStream=null,this._canvas=null,this._imageData=null,this._imageWidth=1280,this._imageHeight=720,this._availableMediaInputs=null,this._userAgent={name:platform.name,version:platform.version,os:platform.os.family,description:platform.description},this._remoteMediaInputs=null,this._remoteUserAgent=null,this._statsCaptureInterval=null,this._localStats=null,this._remoteStats=null,this._otherPeerConnected=null,this._data={},this._url=i,this.prepareForCall(),qn.debug("user agent is:%o",this._userAgent)}get imageData(){return this._imageData}get roomId(){return this._roomId}get localStream(){return this._localStream}get remoteStream(){return this._remoteStream}get myName(){return this._myDisplayName}set myName(e){this._myDisplayName=e}get myId(){return this._myPeerId}get myRole(){return this._myRole}get remoteName(){return this._remoteDisplayName}get remoteId(){return this._remotePeerId}get remoteRole(){return this._remoteRole}get imageHeight(){return this._imageHeight}get imageWidth(){return this._imageWidth}get userAgent(){return this._userAgent}get mediaInputs(){return this._availableMediaInputs}get remoteUserAgent(){return this._remoteUserAgent}get remoteMediaInputs(){return this._remoteMediaInputs}get localStats(){return this._localStats}get remoteStats(){return this._remoteStats}get pc(){return this._peerConnection}get data(){return this._data}set data(e){throw new Error("Can't set the whole of data object.")}setImageProps({width:e,height:t}){e&&t?(this._imageHeight=t,this._imageWidth=e):this.clientErrorHandler({reason:"Both width and height are required to set the new image properties. ",error:null})}async prepareForCall(){let e=this;(async()=>{let e=[],t=[];return navigator.mediaDevices.enumerateDevices().then((function(r){let s=void 0!==r.find((e=>"videoinput"===e.kind)),i=void 0!==r.find((e=>"audioinput"===e.kind));return new Promise(((r,a)=>{navigator.mediaDevices.getUserMedia({audio:i,video:s}).then((s=>{navigator.mediaDevices.enumerateDevices().then((function(i){i.forEach((function(r){"audioinput"===r.kind&&t.push(r.label),"videoinput"===r.kind&&e.push(r.label)})),s.getTracks().forEach((e=>{e.stop()})),t.length>0&&e.length>0?r({videoLabels:e,audioLabels:t}):r({audioLabels:t,videoLabels:e})}))})).catch((function(e){r({error:e.name,reason:e.message})}))}))})).catch((function(e){}))})().then((async t=>{if(t.error)switch(t.error){case"NotAllowedError":let e=`${t.error} : ${t.reason}!! You have denied the access to your Mic!! If you wish to join the room with video, please allow the camera access by clicking on the camera icon in the address bar Or by going to " chrome://settings/content#media-stream-mic " link in your chrome.`;this.clientErrorHandler({reason:e,error:null});break;case"NotFoundError":let r=`${t.error} : ${t.reason}!! No Microphone could be found!! If you have a camera or microphone in your computer but it is not able to detect them, please refresh your browser again or restart the browser after closing all the opened tabs.`;this.clientErrorHandler({reason:r,error:null});break;case"NotReadableError":let s=`${t.error} : ${t.reason}!! A hardware error occured at the OS OR browser Or Webpage level. If you have a microphone in your computer but it is not able to detect them, please refresh your browser again or restart the browser after closing all the opened tabs.`;this.clientErrorHandler({reason:s,error:null})}else t.audioLabels&&t.audioLabels.length>0&&t.videoLabels&&t.videoLabels.length>0&&(e._availableMediaInputs={audioInputs:t.audioLabels,videoInputs:t.videoLabels},qn.debug("available A/V inputs:%o",e.mediaInputs),await e.getUserMedia(),e.emit("mediaInputs"))})),navigator.mediaDevices.ondevicechange=async t=>{qn.info("Media devices changed!");let r=await(async()=>{let e=[],t=[];return new Promise(((r,s)=>{navigator.mediaDevices.enumerateDevices().then((function(s){s.forEach((r=>{"audioinput"===r.kind&&t.push(r.label),"videoinput"===r.kind&&e.push(r.label)})),r({audioLabels:t,videoLabels:e})}))}))})();r.audioLabels&&r.audioLabels.length>0&&r.videoLabels&&r.videoLabels.length>0&&(e._availableMediaInputs={audioInputs:r.audioLabels,videoInputs:r.videoLabels},qn.debug("updated A/V inputs:%o",e.mediaInputs),e.emit("mediaInputs"),"client"===e.myRole&&e.pc&&(qn.info("Going to update the agent about the updated media devices list."),e.send({type:"mediaListUpdated",mediaInputs:e.mediaInputs})))}}send(e){this._closed||this._socket.send(e)}inform(e){if(this._closed)return;let t={type:"information",msg:e};this._socket.send(t)}async request({type:e,message:t}){const r=await this._socket.request({type:e,message:t});if(r)return r}gotMessageFromServer(e){switch(qn.debug("Got message:%o",e),e.type){case"login":this.handleLogin(e.details);break;case"offer":qn.debug("inside offer"),this.handleOffer({offer:e.offer,peer:e.peer,name:e.name});break;case"answer":qn.debug("inside answer"),this.handleAnswer(e);break;case"candidate":qn.debug("inside handle candidate"),this.handleCandidate(e.candidate);break;case"leave":this.handleLeave(),this.emit("peerHangUp");break;case"audioToggle":this.emit("audioToggle",{status:e.status,peer:"other"});break;case"videoToggle":this.emit("videoToggle",{status:e.status,peer:"other"});break;case"remoteStreamToggle":this.handleRemoteStreamToggle(e);break;case"chatMessage":this.emit("chatMessage",e.message);break;case"imageCapture":this.captureImage("local");break;case"mediaChange":this.changeRemoteMediaSource(e);break;case"requestStats":this.sendRequestedstats();break;case"statsFetched":this._remoteStats=e.stats,this.emit("remoteStats");break;case"information":this.emit("information",e.msg);break;case"iceRestart":this.handleIceRestart(e);break;case"iceRestarted":this.handleIceRestartResponse(e);break;case"nameUpdate":this._remoteDisplayName=e.name,this.emit("peerName");break;case"mediaListUpdated":this._remoteMediaInputs=e.mediaInputs,this.emit("remoteMediaInputs");break;case"peerLeft":this.pc||(this._remoteDisplayName=null,this._remotePeerId=null,this._remoteRole=null,this._otherPeerConnected=!1,this.emit("peerJoin","None"),alert("Other person disconnected from the room"));break;case"error":this.emit("serverError",e.details)}}async getUserMedia(){qn.debug("Inside getusermedia"),this._localStream?qn.debug("Local stream already acquired! Waiting for call!"):navigator.mediaDevices.getUserMedia?navigator.mediaDevices.getUserMedia(Fn).then((e=>this.getUserMediaSuccess(e))).catch((e=>this.clientErrorHandler({reason:"Error while acquiring camera/mic",error:e}))):alert("Your browser does not support getUserMedia API")}getUserMediaSuccess(e){let t=this;qn.debug("Inside getUserMediaSuccess"),this._localStream=e,this.emit("localStream"),this._socket=new Un({url:this._url,roomId:this._roomId,peerId:this._myPeerId,peerName:this._myDisplayName,role:this._myRole}),this._socket.on("message",(e=>this.gotMessageFromServer(e))),this._socket.on("connected",(async()=>{t.pc&&(qn.debug("Socket reconnection happened after a disconnection, ICEState:%s",t._peerConnection.iceConnectionState),"failed"!==t._peerConnection.iceConnectionState&&"disconnected"!==t._peerConnection.iceConnectionState||(qn.debug("Going to restart ICE as ICE is not in connected state!!"),await t.restartICE()))}))}handleAudioToggle(){let e=this._localStream.getAudioTracks()[0];e.enabled=!e.enabled,this.send({type:"audioToggle",status:e.enabled}),this.emit("audioToggle",{status:e.enabled,peer:"self"})}handleVideoToggle(){let e=this._localStream.getVideoTracks()[0];e.enabled=!e.enabled,this.send({type:"videoToggle",status:e.enabled}),this.emit("videoToggle",{status:e.enabled,peer:"self"})}handleVideoToggleNew(){let e=this;if(this._peerConnection){const t=this._peerConnection.getSenders().find((function(e){return e.track&&"video"==e.track.kind}));if(t){qn.debug("found sender:%o",t),this._peerConnection.removeTrack(t);let e=this._localStream.getVideoTracks()[0];e&&(e.stop(),this._localStream.removeTrack(e)),this.send({type:"videoToggle",status:!1}),this.emit("videoToggle",{status:!1,peer:"self"})}else qn.debug("sender not found. Going to create a new video track."),navigator.mediaDevices.getUserMedia?navigator.mediaDevices.getUserMedia({...Fn,audio:!1}).then((t=>{let r=t.getVideoTracks()[0];e._localStream.addTrack(r),e._peerConnection.addTrack(r),e.send({type:"videoToggle",status:!0}),e.emit("localStream"),e.emit("videoToggle",{status:!0,peer:"self"})})).catch((e=>this.clientErrorHandler({reason:"Error while acquiring camera/mic",error:e}))):alert("Your browser does not support getUserMedia API")}else qn.warn("Peer connection not found!")}handleRemoteAudioToggle(){this.send({type:"remoteStreamToggle",streamType:"audio"})}handleRemoteVideoToggle(){this.send({type:"remoteStreamToggle",streamType:"video"})}handleRemoteStreamToggle(e){qn.debug("inside remote stream toggle"),"audio"===e.streamType?this.handleAudioToggle():"video"===e.streamType?this.handleVideoToggle():qn.warn("Invalid stream type!")}sendChatMessage(e){e&&" "!==e?this.send({type:"chatMessage",message:e}):this.clientErrorHandler({reason:"Chat message need to have a valid value!",error:null})}async informPeer(){this.remoteId&&this.send({type:"nameUpdate",name:this.myName})}handleLogin(e){e&&(qn.debug("All available users:%o",e),this._remoteDisplayName=e.displayName,this._remotePeerId=e.peerId,this._remoteRole=e.role),this._otherPeerConnected=!0,this.emit("peerJoin",this._remoteDisplayName)}async gotRemoteTrack(e){qn.debug("inside got remote track:%o",e),e.streams&&e.streams[0]?(qn.debug("Got a remote stream"),this._remoteStream=e.streams[0]):(this._remoteStream=new MediaStream,this._remoteStream.addTrack(e.track),qn.debug("Got a remote track")),this.emit("remoteStream")}_onICeCandidate(e){qn.debug("onicecandidate",e.candidate),e.candidate&&this.send({type:"candidate",candidate:e.candidate,peer:this._remotePeerId})}handleNegotiationNeededEvent=()=>{qn.debug("handleNegotiationNeededEvent() | needed to negotiate a new negotiation"),this.restartICE()};handleRemoveTrackEvent=()=>{qn.debug("handleRemoveTrackEvent() | Track removed by remote peer. Need to handle UI locally."),this.emit("videoToggle",{status:!1,peer:"other"})};async createPeerOffer(e){let t,r=this;t=await this._socket.request({type:"fetchIceServers",message:{}}),this._peerConnection=new RTCPeerConnection({iceServers:t}),qn.debug("connection state in createPeeroffer():%s",this._peerConnection.connectionState),this._peerConnection.onicecandidate=e=>{this._onICeCandidate(e)},this._localStream.getTracks().forEach((e=>this._peerConnection.addTrack(e,this._localStream)));const s=await this._peerConnection.createOffer().catch((function(e){alert("Error when creating an offer",e),qn.error("Error when creating an offer:%o",e)}));await this._peerConnection.setLocalDescription(s),this.send({type:"offer",offer:r._peerConnection.localDescription,peer:r._remotePeerId,name:r.myName}),this._peerConnection.ontrack=e=>r.gotRemoteTrack(e),this._peerConnection.addEventListener("iceconnectionstatechange",(async e=>{qn.debug("Current ICEState:%s",r._peerConnection.iceConnectionState),"failed"!==r._peerConnection.iceConnectionState&&"disconnected"!==r._peerConnection.iceConnectionState||(qn.debug("Ice connection failed!! with socket connection status:%s",r._socket.connectionStatus),r.emit("iceFailure"))})),this._peerConnection.onnegotiationneeded=()=>this.handleNegotiationNeededEvent(),this._peerConnection.onremovetrack=()=>this.handleRemoveTrackEvent()}async handleOffer({peer:e,name:t,offer:r}){let s=this;const i=await this._socket.request({type:"fetchIceServers",message:{}});this._peerConnection=new RTCPeerConnection({iceServers:i}),qn.debug("Peer connection in handle offer is:%s",this._peerConnection),this._remoteDisplayName=t,this._remotePeerId=e,this._peerConnection.setRemoteDescription(new RTCSessionDescription(r)),this._localStream.getTracks().forEach((e=>this._peerConnection.addTrack(e,this._localStream))),this._peerConnection.createAnswer().then((function(e){return s._peerConnection.setLocalDescription(e)})).then((function(){qn.debug("Ice already completed. sending answer!!"),s.send({type:"answer",answer:s._peerConnection.localDescription,peer:s._remotePeerId,mediaInputs:s.mediaInputs,userAgent:s.userAgent})})).catch((function(e){alert("Error when creating an answer"),qn.error("Error while creating answer:%o",e)})),this._peerConnection.ontrack=e=>s.gotRemoteTrack(e),this._peerConnection.onicecandidate=e=>{this._onICeCandidate(e)},this._peerConnection.addEventListener("iceconnectionstatechange",(async e=>{qn.debug("Current ICEState:%s",s._peerConnection.iceConnectionState),"failed"!==s._peerConnection.iceConnectionState&&"disconnected"!==s._peerConnection.iceConnectionState||(qn.debug("Ice connection failed!! with socket connection status:%s",s._socket.connectionStatus),s.emit("iceFailure"))})),this._peerConnection.onnegotiationneeded=()=>this.handleNegotiationNeededEvent(),this._peerConnection.onremovetrack=()=>this.handleRemoveTrackEvent(),this.emit("offerReceived")}handleAnswer(e){qn.debug("answer:%o ",e),this._peerConnection.setRemoteDescription(new RTCSessionDescription(e.answer)),this._remoteMediaInputs=e.mediaInputs,this._remoteUserAgent=e.userAgent,this.emit("remoteMediaInputs")}async handleCandidate(e){this.pc?(qn.debug("Peerconnection available, Inside handle candidate for remote icecandidates"),this._peerConnection.addIceCandidate(new RTCIceCandidate(e)).catch((e=>{qn.error("Error while adding iceCandidate",e)}))):qn.warn("Candidate arrived before peer connection instantiation:%o",e)}async restartICE(){const e=await this._peerConnection.createOffer({iceRestart:!0});await this._peerConnection.setLocalDescription(e),this.send({type:"iceRestart",offer:e})}async handleIceRestart(e){qn.debug("Ice restart message received!!"),this._peerConnection.setRemoteDescription(e.offer);const t=await this._peerConnection.createAnswer();await this._peerConnection.setLocalDescription(t),this.send({type:"iceRestarted",answer:t})}async handleIceRestartResponse(e){qn.debug("Ice restart message response received!!"),this._peerConnection.setRemoteDescription(e.answer)}async informRoomLeave(){this.send({type:"leave",peer:this.remoteId}),await this.handleLeave()}async handleLeave(){this._peerConnection?(this._peerConnection.ontrack=null,this._peerConnection.onremovetrack=null,this._peerConnection.onremovestream=null,this._peerConnection.onicecandidate=null,this._peerConnection.oniceconnectionstatechange=null,this._peerConnection.onsignalingstatechange=null,this._peerConnection.onicegatheringstatechange=null,this._peerConnection.onnegotiationneeded=null,this._localStream&&this._localStream.getTracks().forEach((e=>e.stop())),this._remoteStream&&this._remoteStream.getTracks().forEach((e=>e.stop())),this._peerConnection.close(),this._peerConnection=null,this._remoteDisplayName=null,this._remotePeerId=null,this._remoteStream=null,this._localStream=null,this._canvas=null,this._imageData=null,this._imageWidth=640,this._imageHeight=480,this._socket.close()):qn.error("No peerconnection object found!")}async changeRemoteMediaSource(e){let{label:t,mediaType:r}=e;!t||"video"!==r&&"audio"!==r?this.send({type:"error",details:{reason:"Can't change remote media source as either media label or media type is not available!"}}):this.handleReplaceTrack({label:t,mediaType:r})}async handleReplaceTrack({label:e,mediaType:t}){try{let r,s,i;const a=await(e=>new Promise((t=>{navigator.mediaDevices.enumerateDevices().then((function(r){r.forEach((function(r){r.label===e&&t(r.deviceId)})),r[0].label||t({error:"noLabel",reason:"Device label names not found!"})})).catch((function(e){ConsoleHelper(e.name+": "+e.message),t({error:e.name,reason:e.message})}))})))(e);"video"===t?(Bn.video.deviceId.exact=a,i=Bn,r=this._localStream.getVideoTracks()[0]):"audio"===t?(Nn.audio.deviceId.exact=a,i=Nn,r=this._localStream.getAudioTracks()[0]):qn.error("Unknown media type:%s",t);let n=r.enabled;r.stop(),qn.debug("selected constraints are:%o",i);let o=await navigator.mediaDevices.getUserMedia(i);if(qn.debug("new stream is:%o",o),"video"===t?s=o.getVideoTracks()[0]:"audio"===t&&(s=o.getAudioTracks()[0]),s.enabled=n,this._peerConnection){const e=this._peerConnection.getSenders().find((function(e){return e.track.kind==s.kind}));qn.debug("found sender:%o",e),e.replaceTrack(s)}this._localStream.removeTrack(r),this._localStream.addTrack(s)}catch(r){qn.error("Error while replace media track:%o",r),this.clientErrorHandler({reason:"Error while replacing media track with new source",error:r})}}async captureImage(e){const t=document.createElement("canvas"),r=t.getContext("2d"),s=this._imageWidth,i=this._imageHeight;qn.debug("height:%s and width:%s",s,i),t.width=s,t.height=i,"local"===e?r.drawImage(localVideo,0,0,s,i):r.drawImage(remoteVideo,0,0,s,i);let a=t.toDataURL("image/png");this._canvas=t,this._imageData=a,this.emit("imageCaptured")}async clearImage(){const e=this._canvas,t=e.getContext("2d");t.fillStyle="#AAA",t.fillRect(0,0,e.width,e.height);let r=e.toDataURL("image/png");this._imageData=r}captureRemoteImage(){this.send({type:"imageCapture"})}remoteCamChange(e){e?this.send({type:"mediaChange",mediaType:"video",label:e}):this.clientErrorHandler({reason:"A valid camera name must be selected for to change the remote camera!",error:null})}remoteMicChange(e){e?this.send({type:"mediaChange",mediaType:"audio",label:e}):this.clientErrorHandler({reason:"A valid mic name must be selected for to change the remote mic!",error:null})}requestStats(){this.send({type:"requestStats"})}async captureStats(){let e=this;return new Promise((t=>{this._peerConnection.getStats(null).then((r=>{let s={};r.forEach((e=>{["inbound-rtp","outbound-rtp","remote-inbound-rtp","remote-outbound-rtp","local-candidate","remote-candidate","candidate-pair"].includes(e.type)&&(s={...s,[`${e.type}`]:e})})),e._localStats=s,t(s)}))}))}displayStats({stats:e,element:t}){let r="";Object.values(e).forEach((e=>{r+=`<h2>Report: ${e.type}</h2>\n<strong>ID:</strong> ${e.id}<br>\n<strong>Timestamp:</strong> ${e.timestamp}<br>\n`,Object.keys(e).forEach((t=>{"id"!==t&&"timestamp"!==t&&"type"!==t&&(r+=`<strong>${t}:</strong> ${e[t]}<br>\n`)}))})),document.querySelector(t).innerHTML=r}async sendRequestedstats(){let e=await this.captureStats();qn.debug("Local stats are:%o",e),this.send({type:"statsFetched",stats:e})}clientErrorHandler({reason:e,error:t}){this.emit("clientError",{reason:e,error:t})}copyLink(e){navigator.clipboard.writeText(e).then((function(){qn.debug("Async: Copying to clipboard was successful!"),alert("Link copied!!")}),(function(e){qn.error("Async: Could not copy text:%o ",e)}))}}const Wn={JsSdk_v1:La,JsSdk:Ln,P2pSdk:Vn};e.JsSdk=Ln,e.JsSdk_v1=La,e.P2pSdk=Vn,e.default=Wn,Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|
|
13
|
+
*/(function(){var t={function:!0,object:!0},r=t[typeof window]&&window||this,s=t[typeof e]&&e,i=t[typeof module]&&module&&!module.nodeType&&module,a=s&&i&&"object"==typeof globalThis&&globalThis;!a||a.global!==a&&a.window!==a&&a.self!==a||(r=a);var n=Math.pow(2,53)-1,o=/\bOpera/,c=Object.prototype,d=c.hasOwnProperty,l=c.toString;function p(e){return(e=String(e)).charAt(0).toUpperCase()+e.slice(1)}function u(e){return e=b(e),/^(?:webOS|i(?:OS|P))/.test(e)?e:p(e)}function h(e,t){for(var r in e)d.call(e,r)&&t(e[r],r,e)}function m(e){return null==e?p(e):l.call(e).slice(8,-1)}function f(e){return String(e).replace(/([ -])(?!$)/g,"$1?")}function g(e,t){var r=null;return function(e,t){var r=-1,s=e?e.length:0;if("number"==typeof s&&s>-1&&s<=n)for(;++r<s;)t(e[r],r,e);else h(e,t)}(e,function(s,i){r=t(r,s,i,e)}),r}function b(e){return String(e).replace(/^ +| +$/g,"")}var y=function e(t){var s=r,i=t&&"object"==typeof t&&"String"!=m(t);i&&(s=t,t=null);var a=s.navigator||{},n=a.userAgent||"";t||(t=n);var c,d,p,y,_,v=i?!!a.likeChrome:/\bChrome\b/.test(t)&&!/internal|\n/i.test(l.toString()),w="Object",S=i?w:"ScriptBridgingProxyObject",C=i?w:"Environment",P=i&&s.java?"JavaPackage":m(s.java),k=i?w:"RuntimeObject",R=/\bJava/.test(P)&&s.java,T=R&&m(s.environment)==C,E=R?"a":"α",I=R?"b":"β",x=s.document||{},D=s.operamini||s.opera,M=o.test(M=i&&D?D["[[Class]]"]:m(D))?M:D=null,L=t,O=[],A=null,N=t==n,j=N&&D&&"function"==typeof D.version&&D.version(),F=g([{label:"EdgeHTML",pattern:"Edge"},"Trident",{label:"WebKit",pattern:"AppleWebKit"},"iCab","Presto","NetFront","Tasman","KHTML","Gecko"],function(e,r){return e||RegExp("\\b"+(r.pattern||f(r))+"\\b","i").exec(t)&&(r.label||r)}),B=function(e){return g(e,function(e,r){return e||RegExp("\\b"+(r.pattern||f(r))+"\\b","i").exec(t)&&(r.label||r)})}(["Adobe AIR","Arora","Avant Browser","Breach","Camino","Electron","Epiphany","Fennec","Flock","Galeon","GreenBrowser","iCab","Iceweasel","K-Meleon","Konqueror","Lunascape","Maxthon",{label:"Microsoft Edge",pattern:"(?:Edge|Edg|EdgA|EdgiOS)"},"Midori","Nook Browser","PaleMoon","PhantomJS","Raven","Rekonq","RockMelt",{label:"Samsung Internet",pattern:"SamsungBrowser"},"SeaMonkey",{label:"Silk",pattern:"(?:Cloud9|Silk-Accelerated)"},"Sleipnir","SlimBrowser",{label:"SRWare Iron",pattern:"Iron"},"Sunrise","Swiftfox","Vivaldi","Waterfox","WebPositive",{label:"Yandex Browser",pattern:"YaBrowser"},{label:"UC Browser",pattern:"UCBrowser"},"Opera Mini",{label:"Opera Mini",pattern:"OPiOS"},"Opera",{label:"Opera",pattern:"OPR"},"Chromium","Chrome",{label:"Chrome",pattern:"(?:HeadlessChrome)"},{label:"Chrome Mobile",pattern:"(?:CriOS|CrMo)"},{label:"Firefox",pattern:"(?:Firefox|Minefield)"},{label:"Firefox for iOS",pattern:"FxiOS"},{label:"IE",pattern:"IEMobile"},{label:"IE",pattern:"MSIE"},"Safari"]),U=q([{label:"BlackBerry",pattern:"BB10"},"BlackBerry",{label:"Galaxy S",pattern:"GT-I9000"},{label:"Galaxy S2",pattern:"GT-I9100"},{label:"Galaxy S3",pattern:"GT-I9300"},{label:"Galaxy S4",pattern:"GT-I9500"},{label:"Galaxy S5",pattern:"SM-G900"},{label:"Galaxy S6",pattern:"SM-G920"},{label:"Galaxy S6 Edge",pattern:"SM-G925"},{label:"Galaxy S7",pattern:"SM-G930"},{label:"Galaxy S7 Edge",pattern:"SM-G935"},"Google TV","Lumia","iPad","iPod","iPhone","Kindle",{label:"Kindle Fire",pattern:"(?:Cloud9|Silk-Accelerated)"},"Nexus","Nook","PlayBook","PlayStation Vita","PlayStation","TouchPad","Transformer",{label:"Wii U",pattern:"WiiU"},"Wii","Xbox One",{label:"Xbox 360",pattern:"Xbox"},"Xoom"]),$=function(e){return g(e,function(e,r,s){return e||(r[U]||r[/^[a-z]+(?: +[a-z]+\b)*/i.exec(U)]||RegExp("\\b"+f(s)+"(?:\\b|\\w*\\d)","i").exec(t))&&s})}({Apple:{iPad:1,iPhone:1,iPod:1},Alcatel:{},Archos:{},Amazon:{Kindle:1,"Kindle Fire":1},Asus:{Transformer:1},"Barnes & Noble":{Nook:1},BlackBerry:{PlayBook:1},Google:{"Google TV":1,Nexus:1},HP:{TouchPad:1},HTC:{},Huawei:{},Lenovo:{},LG:{},Microsoft:{Xbox:1,"Xbox One":1},Motorola:{Xoom:1},Nintendo:{"Wii U":1,Wii:1},Nokia:{Lumia:1},Oppo:{},Samsung:{"Galaxy S":1,"Galaxy S2":1,"Galaxy S3":1,"Galaxy S4":1},Sony:{PlayStation:1,"PlayStation Vita":1},Xiaomi:{Mi:1,Redmi:1}}),V=function(e){return g(e,function(e,r){var s=r.pattern||f(r);return!e&&(e=RegExp("\\b"+s+"(?:/[\\d.]+|[ \\w.]*)","i").exec(t))&&(e=function(e,t,r){var s={"10.0":"10",6.4:"10 Technical Preview",6.3:"8.1",6.2:"8",6.1:"Server 2008 R2 / 7","6.0":"Server 2008 / Vista",5.2:"Server 2003 / XP 64-bit",5.1:"XP",5.01:"2000 SP1","5.0":"2000","4.0":"NT","4.90":"ME"};return t&&r&&/^Win/i.test(e)&&!/^Windows Phone /i.test(e)&&(s=s[/[\d.]+$/.exec(e)])&&(e="Windows "+s),e=String(e),t&&r&&(e=e.replace(RegExp(t,"i"),r)),u(e.replace(/ ce$/i," CE").replace(/\bhpw/i,"web").replace(/\bMacintosh\b/,"Mac OS").replace(/_PowerPC\b/i," OS").replace(/\b(OS X) [^ \d]+/i,"$1").replace(/\bMac (OS X)\b/,"$1").replace(/\/(\d)/," $1").replace(/_/g,".").replace(/(?: BePC|[ .]*fc[ \d.]+)$/i,"").replace(/\bx86\.64\b/gi,"x86_64").replace(/\b(Windows Phone) OS\b/,"$1").replace(/\b(Chrome OS \w+) [\d.]+\b/,"$1").split(" on ")[0])}(e,s,r.label||r)),e})}(["Windows Phone","KaiOS","Android","CentOS",{label:"Chrome OS",pattern:"CrOS"},"Debian",{label:"DragonFly BSD",pattern:"DragonFly"},"Fedora","FreeBSD","Gentoo","Haiku","Kubuntu","Linux Mint","OpenBSD","Red Hat","SuSE","Ubuntu","Xubuntu","Cygwin","Symbian OS","hpwOS","webOS ","webOS","Tablet OS","Tizen","Linux","Mac OS X","Macintosh","Mac","Windows 98;","Windows "]);function q(e){return g(e,function(e,r){var s=r.pattern||f(r);return!e&&(e=RegExp("\\b"+s+" *\\d+[.\\w_]*","i").exec(t)||RegExp("\\b"+s+" *\\w+-[\\w]*","i").exec(t)||RegExp("\\b"+s+"(?:; *(?:[a-z]+[_-])?[a-z]+\\d+|[^ ();-]*)","i").exec(t))&&((e=String(r.label&&!RegExp(s,"i").test(r.label)?r.label:e).split("/"))[1]&&!/[\d.]+/.test(e[0])&&(e[0]+=" "+e[1]),r=r.label||r,e=u(e[0].replace(RegExp(s,"i"),r).replace(RegExp("; *(?:"+r+"[_-])?","i")," ").replace(RegExp("("+r+")[-_.]?(\\w)","i"),"$1 $2"))),e})}function W(e){return g(e,function(e,r){return e||(RegExp(r+"(?:-[\\d.]+/|(?: for [\\w-]+)?[ /-])([\\d.]+[^ ();/_-]*)","i").exec(t)||0)[1]||null})}if(F&&(F=[F]),/\bAndroid\b/.test(V)&&!U&&(c=/\bAndroid[^;]*;(.*?)(?:Build|\) AppleWebKit)\b/i.exec(t))&&(U=b(c[1]).replace(/^[a-z]{2}-[a-z]{2};\s*/i,"")||null),$&&!U?U=q([$]):$&&U&&(U=U.replace(RegExp("^("+f($)+")[-_.\\s]","i"),$+" ").replace(RegExp("^("+f($)+")[-_.]?(\\w)","i"),$+" $2")),(c=/\bGoogle TV\b/.exec(U))&&(U=c[0]),/\bSimulator\b/i.test(t)&&(U=(U?U+" ":"")+"Simulator"),"Opera Mini"==B&&/\bOPiOS\b/.test(t)&&O.push("running in Turbo/Uncompressed mode"),"IE"==B&&/\blike iPhone OS\b/.test(t)?($=(c=e(t.replace(/like iPhone OS/,""))).manufacturer,U=c.product):/^iP/.test(U)?(B||(B="Safari"),V="iOS"+((c=/ OS ([\d_]+)/i.exec(t))?" "+c[1].replace(/_/g,"."):"")):"Konqueror"==B&&/^Linux\b/i.test(V)?V="Kubuntu":$&&"Google"!=$&&(/Chrome/.test(B)&&!/\bMobile Safari\b/i.test(t)||/\bVita\b/.test(U))||/\bAndroid\b/.test(V)&&/^Chrome/.test(B)&&/\bVersion\//i.test(t)?(B="Android Browser",V=/\bAndroid\b/.test(V)?V:"Android"):"Silk"==B?(/\bMobi/i.test(t)||(V="Android",O.unshift("desktop mode")),/Accelerated *= *true/i.test(t)&&O.unshift("accelerated")):"UC Browser"==B&&/\bUCWEB\b/.test(t)?O.push("speed mode"):"PaleMoon"==B&&(c=/\bFirefox\/([\d.]+)\b/.exec(t))?O.push("identifying as Firefox "+c[1]):"Firefox"==B&&(c=/\b(Mobile|Tablet|TV)\b/i.exec(t))?(V||(V="Firefox OS"),U||(U=c[1])):!B||(c=!/\bMinefield\b/i.test(t)&&/\b(?:Firefox|Safari)\b/.exec(B))?(B&&!U&&/[\/,]|^[^(]+?\)/.test(t.slice(t.indexOf(c+"/")+8))&&(B=null),(c=U||$||V)&&(U||$||/\b(?:Android|Symbian OS|Tablet OS|webOS)\b/.test(V))&&(B=/[a-z]+(?: Hat)?/i.exec(/\bAndroid\b/.test(V)?V:c)+" Browser")):"Electron"==B&&(c=(/\bChrome\/([\d.]+)\b/.exec(t)||0)[1])&&O.push("Chromium "+c),j||(j=W(["(?:Cloud9|CriOS|CrMo|Edge|Edg|EdgA|EdgiOS|FxiOS|HeadlessChrome|IEMobile|Iron|Opera ?Mini|OPiOS|OPR|Raven|SamsungBrowser|Silk(?!/[\\d.]+$)|UCBrowser|YaBrowser)","Version",f(B),"(?:Firefox|Minefield|NetFront)"])),(c=("iCab"==F&&parseFloat(j)>3?"WebKit":/\bOpera\b/.test(B)&&(/\bOPR\b/.test(t)?"Blink":"Presto"))||/\b(?:Midori|Nook|Safari)\b/i.test(t)&&!/^(?:Trident|EdgeHTML)$/.test(F)&&"WebKit"||!F&&/\bMSIE\b/i.test(t)&&("Mac OS"==V?"Tasman":"Trident")||"WebKit"==F&&/\bPlayStation\b(?! Vita\b)/i.test(B)&&"NetFront")&&(F=[c]),"IE"==B&&(c=(/; *(?:XBLWP|ZuneWP)(\d+)/i.exec(t)||0)[1])?(B+=" Mobile",V="Windows Phone "+(/\+$/.test(c)?c:c+".x"),O.unshift("desktop mode")):/\bWPDesktop\b/i.test(t)?(B="IE Mobile",V="Windows Phone 8.x",O.unshift("desktop mode"),j||(j=(/\brv:([\d.]+)/.exec(t)||0)[1])):"IE"!=B&&"Trident"==F&&(c=/\brv:([\d.]+)/.exec(t))&&(B&&O.push("identifying as "+B+(j?" "+j:"")),B="IE",j=c[1]),N){if(y="global",_=null!=(p=s)?typeof p[y]:"number",/^(?:boolean|number|string|undefined)$/.test(_)||"object"==_&&!p[y])m(c=s.runtime)==S?(B="Adobe AIR",V=c.flash.system.Capabilities.os):m(c=s.phantom)==k?(B="PhantomJS",j=(c=c.version||null)&&c.major+"."+c.minor+"."+c.patch):"number"==typeof x.documentMode&&(c=/\bTrident\/(\d+)/i.exec(t))?(j=[j,x.documentMode],(c=+c[1]+4)!=j[1]&&(O.push("IE "+j[1]+" mode"),F&&(F[1]=""),j[1]=c),j="IE"==B?String(j[1].toFixed(1)):j[0]):"number"==typeof x.documentMode&&/^(?:Chrome|Firefox)\b/.test(B)&&(O.push("masking as "+B+" "+j),B="IE",j="11.0",F=["Trident"],V="Windows");else if(R&&(L=(c=R.lang.System).getProperty("os.arch"),V=V||c.getProperty("os.name")+" "+c.getProperty("os.version")),T){try{j=s.require("ringo/engine").version.join("."),B="RingoJS"}catch(H){(c=s.system)&&c.global.system==s.system&&(B="Narwhal",V||(V=c[0].os||null))}B||(B="Rhino")}else"object"==typeof s.process&&!s.process.browser&&(c=s.process)&&("object"==typeof c.versions&&("string"==typeof c.versions.electron?(O.push("Node "+c.versions.node),B="Electron",j=c.versions.electron):"string"==typeof c.versions.nw&&(O.push("Chromium "+j,"Node "+c.versions.node),B="NW.js",j=c.versions.nw)),B||(B="Node.js",L=c.arch,V=c.platform,j=(j=/[\d.]+/.exec(c.version))?j[0]:null));V=V&&u(V)}if(j&&(c=/(?:[ab]|dp|pre|[ab]\d+pre)(?:\d+\+?)?$/i.exec(j)||/(?:alpha|beta)(?: ?\d)?/i.exec(t+";"+(N&&a.appMinorVersion))||/\bMinefield\b/i.test(t)&&"a")&&(A=/b/i.test(c)?"beta":"alpha",j=j.replace(RegExp(c+"\\+?$"),"")+("beta"==A?I:E)+(/\d+\+?/.exec(c)||"")),"Fennec"==B||"Firefox"==B&&/\b(?:Android|Firefox OS|KaiOS)\b/.test(V))B="Firefox Mobile";else if("Maxthon"==B&&j)j=j.replace(/\.[\d.]+/,".x");else if(/\bXbox\b/i.test(U))"Xbox 360"==U&&(V=null),"Xbox 360"==U&&/\bIEMobile\b/.test(t)&&O.unshift("mobile mode");else if(!/^(?:Chrome|IE|Opera)$/.test(B)&&(!B||U||/Browser|Mobi/.test(B))||"Windows CE"!=V&&!/Mobi/i.test(t))if("IE"==B&&N)try{null===s.external&&O.unshift("platform preview")}catch(H){O.unshift("embedded")}else(/\bBlackBerry\b/.test(U)||/\bBB10\b/.test(t))&&(c=(RegExp(U.replace(/ +/g," *")+"/([.\\d]+)","i").exec(t)||0)[1]||j)?(V=((c=[c,/BB10/.test(t)])[1]?(U=null,$="BlackBerry"):"Device Software")+" "+c[0],j=null):this!=h&&"Wii"!=U&&(N&&D||/Opera/.test(B)&&/\b(?:MSIE|Firefox)\b/i.test(t)||"Firefox"==B&&/\bOS X (?:\d+\.){2,}/.test(V)||"IE"==B&&(V&&!/^Win/.test(V)&&j>5.5||/\bWindows XP\b/.test(V)&&j>8||8==j&&!/\bTrident\b/.test(t)))&&!o.test(c=e.call(h,t.replace(o,"")+";"))&&c.name&&(c="ing as "+c.name+((c=c.version)?" "+c:""),o.test(B)?(/\bIE\b/.test(c)&&"Mac OS"==V&&(V=null),c="identify"+c):(c="mask"+c,B=M?u(M.replace(/([a-z])([A-Z])/g,"$1 $2")):"Opera",/\bIE\b/.test(c)&&(V=null),N||(j=null)),F=["Presto"],O.push(c));else B+=" Mobile";(c=(/\bAppleWebKit\/([\d.]+\+?)/i.exec(t)||0)[1])&&(c=[parseFloat(c.replace(/\.(\d)$/,".0$1")),c],"Safari"==B&&"+"==c[1].slice(-1)?(B="WebKit Nightly",A="alpha",j=c[1].slice(0,-1)):j!=c[1]&&j!=(c[2]=(/\bSafari\/([\d.]+\+?)/i.exec(t)||0)[1])||(j=null),c[1]=(/\b(?:Headless)?Chrome\/([\d.]+)/i.exec(t)||0)[1],537.36==c[0]&&537.36==c[2]&&parseFloat(c[1])>=28&&"WebKit"==F&&(F=["Blink"]),N&&(v||c[1])?(F&&(F[1]="like Chrome"),c=c[1]||((c=c[0])<530?1:c<532?2:c<532.05?3:c<533?4:c<534.03?5:c<534.07?6:c<534.1?7:c<534.13?8:c<534.16?9:c<534.24?10:c<534.3?11:c<535.01?12:c<535.02?"13+":c<535.07?15:c<535.11?16:c<535.19?17:c<536.05?18:c<536.1?19:c<537.01?20:c<537.11?"21+":c<537.13?23:c<537.18?24:c<537.24?25:c<537.36?26:"Blink"!=F?"27":"28")):(F&&(F[1]="like Safari"),c=(c=c[0])<400?1:c<500?2:c<526?3:c<533?4:c<534?"4+":c<535?5:c<537?6:c<538?7:c<601?8:c<602?9:c<604?10:c<606?11:c<608?12:"12"),F&&(F[1]+=" "+(c+="number"==typeof c?".x":/[.+]/.test(c)?"":"+")),"Safari"==B&&(!j||parseInt(j)>45)?j=c:"Chrome"==B&&/\bHeadlessChrome/i.test(t)&&O.unshift("headless")),"Opera"==B&&(c=/\bzbov|zvav$/.exec(V))?(B+=" ",O.unshift("desktop mode"),"zvav"==c?(B+="Mini",j=null):B+="Mobile",V=V.replace(RegExp(" *"+c+"$"),"")):"Safari"==B&&/\bChrome\b/.exec(F&&F[1])?(O.unshift("desktop mode"),B="Chrome Mobile",j=null,/\bOS X\b/.test(V)?($="Apple",V="iOS 4.3+"):V=null):/\bSRWare Iron\b/.test(B)&&!j&&(j=W("Chrome")),j&&0==j.indexOf(c=/[\d.]+$/.exec(V))&&t.indexOf("/"+c+"-")>-1&&(V=b(V.replace(c,""))),V&&-1!=V.indexOf(B)&&!RegExp(B+" OS").test(V)&&(V=V.replace(RegExp(" *"+f(B)+" *"),"")),F&&!/\b(?:Avant|Nook)\b/.test(B)&&(/Browser|Lunascape|Maxthon/.test(B)||"Safari"!=B&&/^iOS/.test(V)&&/\bSafari\b/.test(F[1])||/^(?:Adobe|Arora|Breach|Midori|Opera|Phantom|Rekonq|Rock|Samsung Internet|Sleipnir|SRWare Iron|Vivaldi|Web)/.test(B)&&F[1])&&(c=F[F.length-1])&&O.push(c),O.length&&(O=["("+O.join("; ")+")"]),$&&U&&U.indexOf($)<0&&O.push("on "+$),U&&O.push((/^on /.test(O[O.length-1])?"":"on ")+U),V&&(c=/ ([\d.+]+)$/.exec(V),d=c&&"/"==V.charAt(V.length-c[0].length-1),V={architecture:32,family:c&&!d?V.replace(c[0],""):V,version:c?c[1]:null,toString:function(){var e=this.version;return this.family+(e&&!d?" "+e:"")+(64==this.architecture?" 64-bit":"")}}),(c=/\b(?:AMD|IA|Win|WOW|x86_|x)64\b/i.exec(L))&&!/\bi686\b/i.test(L)?(V&&(V.architecture=64,V.family=V.family.replace(RegExp(" *"+c),"")),B&&(/\bWOW64\b/i.test(t)||N&&/\w(?:86|32)$/.test(a.cpuClass||a.platform)&&!/\bWin64; x64\b/i.test(t))&&O.unshift("32-bit")):V&&/^OS X/.test(V.family)&&"Chrome"==B&&parseFloat(j)>=39&&(V.architecture=64),t||(t=null);var z={};return z.description=t,z.layout=F&&F[0],z.manufacturer=$,z.name=B,z.prerelease=A,z.product=U,z.ua=t,z.version=B&&j,z.os=V||{architecture:null,family:null,version:null,toString:function(){return"null"}},z.parse=e,z.toString=function(){return this.description||""},z.version&&O.unshift(j),z.name&&O.unshift(B),V&&B&&(V!=String(V).split(" ")[0]||V!=B.split(" ")[0]&&!U)&&O.push(U?"("+V+")":"on "+V),O.length&&(z.description=O.join(" ")),z}();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(r.platform=y,define(function(){return y})):s&&i?h(y,function(e,t){s[t]=e}):r.platform=y}).call(void 0);const nc=new ec("Room");class oc extends xr.EventEmitter{static async createRoom({roomId:e,peerId:t,peerName:r,role:s="caller"}){if(t||(t="111-111-1111".replace(/[018]/g,()=>(15&crypto.getRandomValues(new Uint8Array(1))[0]).toString(16))),!e)return{success:!1,reason:"roomId is required!"};const i=process.env.NODE_ENV="https//cp2p.centedge.io";return new Room({peerId:t,roomId:e,peerName:r,role:s,url:i})}constructor({peerId:e,roomId:t,peerName:r,role:s,url:i}){super(),this._closed=!1,this._roomId=t,this._socket=null,this._peerConnection=null,this._myDisplayName=r,this._myPeerId=e,this._myRole=s,this._localStream=null,this._remoteDisplayName=null,this._remotePeerId=null,this._remoteRole=null,this._remoteStream=null,this._canvas=null,this._imageData=null,this._imageWidth=1280,this._imageHeight=720,this._availableMediaInputs=null,this._userAgent={name:platform.name,version:platform.version,os:platform.os.family,description:platform.description},this._remoteMediaInputs=null,this._remoteUserAgent=null,this._statsCaptureInterval=null,this._localStats=null,this._remoteStats=null,this._otherPeerConnected=null,this._data={},this._url=i,this.prepareForCall(),nc.debug("user agent is:%o",this._userAgent)}get imageData(){return this._imageData}get roomId(){return this._roomId}get localStream(){return this._localStream}get remoteStream(){return this._remoteStream}get myName(){return this._myDisplayName}set myName(e){this._myDisplayName=e}get myId(){return this._myPeerId}get myRole(){return this._myRole}get remoteName(){return this._remoteDisplayName}get remoteId(){return this._remotePeerId}get remoteRole(){return this._remoteRole}get imageHeight(){return this._imageHeight}get imageWidth(){return this._imageWidth}get userAgent(){return this._userAgent}get mediaInputs(){return this._availableMediaInputs}get remoteUserAgent(){return this._remoteUserAgent}get remoteMediaInputs(){return this._remoteMediaInputs}get localStats(){return this._localStats}get remoteStats(){return this._remoteStats}get pc(){return this._peerConnection}get data(){return this._data}set data(e){throw new Error("Can't set the whole of data object.")}setImageProps({width:e,height:t}){e&&t?(this._imageHeight=t,this._imageWidth=e):this.clientErrorHandler({reason:"Both width and height are required to set the new image properties. ",error:null})}async prepareForCall(){let e=this;(async()=>{let e=[],t=[];return navigator.mediaDevices.enumerateDevices().then(function(r){let s=void 0!==r.find(e=>"videoinput"===e.kind),i=void 0!==r.find(e=>"audioinput"===e.kind);return new Promise((r,a)=>{navigator.mediaDevices.getUserMedia({audio:i,video:s}).then(s=>{navigator.mediaDevices.enumerateDevices().then(function(i){i.forEach(function(r){"audioinput"===r.kind&&t.push(r.label),"videoinput"===r.kind&&e.push(r.label)}),s.getTracks().forEach(e=>{e.stop()}),t.length>0&&e.length>0?r({videoLabels:e,audioLabels:t}):r({audioLabels:t,videoLabels:e})})}).catch(function(e){r({error:e.name,reason:e.message})})})}).catch(function(e){})})().then(async t=>{if(t.error)switch(t.error){case"NotAllowedError":let e=`${t.error} : ${t.reason}!! You have denied the access to your Mic!! If you wish to join the room with video, please allow the camera access by clicking on the camera icon in the address bar Or by going to " chrome://settings/content#media-stream-mic " link in your chrome.`;this.clientErrorHandler({reason:e,error:null});break;case"NotFoundError":let r=`${t.error} : ${t.reason}!! No Microphone could be found!! If you have a camera or microphone in your computer but it is not able to detect them, please refresh your browser again or restart the browser after closing all the opened tabs.`;this.clientErrorHandler({reason:r,error:null});break;case"NotReadableError":let s=`${t.error} : ${t.reason}!! A hardware error occured at the OS OR browser Or Webpage level. If you have a microphone in your computer but it is not able to detect them, please refresh your browser again or restart the browser after closing all the opened tabs.`;this.clientErrorHandler({reason:s,error:null})}else t.audioLabels&&t.audioLabels.length>0&&t.videoLabels&&t.videoLabels.length>0&&(e._availableMediaInputs={audioInputs:t.audioLabels,videoInputs:t.videoLabels},nc.debug("available A/V inputs:%o",e.mediaInputs),await e.getUserMedia(),e.emit("mediaInputs"))}),navigator.mediaDevices.ondevicechange=async t=>{nc.info("Media devices changed!");let r=await(async()=>{let e=[],t=[];return new Promise((r,s)=>{navigator.mediaDevices.enumerateDevices().then(function(s){s.forEach(r=>{"audioinput"===r.kind&&t.push(r.label),"videoinput"===r.kind&&e.push(r.label)}),r({audioLabels:t,videoLabels:e})})})})();r.audioLabels&&r.audioLabels.length>0&&r.videoLabels&&r.videoLabels.length>0&&(e._availableMediaInputs={audioInputs:r.audioLabels,videoInputs:r.videoLabels},nc.debug("updated A/V inputs:%o",e.mediaInputs),e.emit("mediaInputs"),"client"===e.myRole&&e.pc&&(nc.info("Going to update the agent about the updated media devices list."),e.send({type:"mediaListUpdated",mediaInputs:e.mediaInputs})))}}send(e){this._closed||this._socket.send(e)}inform(e){if(this._closed)return;let t={type:"information",msg:e};this._socket.send(t)}async request({type:e,message:t}){const r=await this._socket.request({type:e,message:t});if(r)return r}gotMessageFromServer(e){switch(nc.debug("Got message:%o",e),e.type){case"login":this.handleLogin(e.details);break;case"offer":nc.debug("inside offer"),this.handleOffer({offer:e.offer,peer:e.peer,name:e.name});break;case"answer":nc.debug("inside answer"),this.handleAnswer(e);break;case"candidate":nc.debug("inside handle candidate"),this.handleCandidate(e.candidate);break;case"leave":this.handleLeave(),this.emit("peerHangUp");break;case"audioToggle":this.emit("audioToggle",{status:e.status,peer:"other"});break;case"videoToggle":this.emit("videoToggle",{status:e.status,peer:"other"});break;case"remoteStreamToggle":this.handleRemoteStreamToggle(e);break;case"chatMessage":this.emit("chatMessage",e.message);break;case"imageCapture":this.captureImage("local");break;case"mediaChange":this.changeRemoteMediaSource(e);break;case"requestStats":this.sendRequestedstats();break;case"statsFetched":this._remoteStats=e.stats,this.emit("remoteStats");break;case"information":this.emit("information",e.msg);break;case"iceRestart":this.handleIceRestart(e);break;case"iceRestarted":this.handleIceRestartResponse(e);break;case"nameUpdate":this._remoteDisplayName=e.name,this.emit("peerName");break;case"mediaListUpdated":this._remoteMediaInputs=e.mediaInputs,this.emit("remoteMediaInputs");break;case"peerLeft":this.pc||(this._remoteDisplayName=null,this._remotePeerId=null,this._remoteRole=null,this._otherPeerConnected=!1,this.emit("peerJoin","None"),alert("Other person disconnected from the room"));break;case"error":this.emit("serverError",e.details)}}async getUserMedia(){nc.debug("Inside getusermedia"),this._localStream?nc.debug("Local stream already acquired! Waiting for call!"):navigator.mediaDevices.getUserMedia?navigator.mediaDevices.getUserMedia(sc).then(e=>this.getUserMediaSuccess(e)).catch(e=>this.clientErrorHandler({reason:"Error while acquiring camera/mic",error:e})):alert("Your browser does not support getUserMedia API")}getUserMediaSuccess(e){let t=this;nc.debug("Inside getUserMediaSuccess"),this._localStream=e,this.emit("localStream"),this._socket=new ac({url:this._url,roomId:this._roomId,peerId:this._myPeerId,peerName:this._myDisplayName,role:this._myRole}),this._socket.on("message",e=>this.gotMessageFromServer(e)),this._socket.on("connected",async()=>{t.pc&&(nc.debug("Socket reconnection happened after a disconnection, ICEState:%s",t._peerConnection.iceConnectionState),"failed"!==t._peerConnection.iceConnectionState&&"disconnected"!==t._peerConnection.iceConnectionState||(nc.debug("Going to restart ICE as ICE is not in connected state!!"),await t.restartICE()))})}handleAudioToggle(){let e=this._localStream.getAudioTracks()[0];e.enabled=!e.enabled,this.send({type:"audioToggle",status:e.enabled}),this.emit("audioToggle",{status:e.enabled,peer:"self"})}handleVideoToggle(){let e=this._localStream.getVideoTracks()[0];e.enabled=!e.enabled,this.send({type:"videoToggle",status:e.enabled}),this.emit("videoToggle",{status:e.enabled,peer:"self"})}handleVideoToggleNew(){let e=this;if(this._peerConnection){const t=this._peerConnection.getSenders().find(function(e){return e.track&&"video"==e.track.kind});if(t){nc.debug("found sender:%o",t),this._peerConnection.removeTrack(t);let e=this._localStream.getVideoTracks()[0];e&&(e.stop(),this._localStream.removeTrack(e)),this.send({type:"videoToggle",status:!1}),this.emit("videoToggle",{status:!1,peer:"self"})}else nc.debug("sender not found. Going to create a new video track."),navigator.mediaDevices.getUserMedia?navigator.mediaDevices.getUserMedia({...sc,audio:!1}).then(t=>{let r=t.getVideoTracks()[0];e._localStream.addTrack(r),e._peerConnection.addTrack(r),e.send({type:"videoToggle",status:!0}),e.emit("localStream"),e.emit("videoToggle",{status:!0,peer:"self"})}).catch(e=>this.clientErrorHandler({reason:"Error while acquiring camera/mic",error:e})):alert("Your browser does not support getUserMedia API")}else nc.warn("Peer connection not found!")}handleRemoteAudioToggle(){this.send({type:"remoteStreamToggle",streamType:"audio"})}handleRemoteVideoToggle(){this.send({type:"remoteStreamToggle",streamType:"video"})}handleRemoteStreamToggle(e){nc.debug("inside remote stream toggle"),"audio"===e.streamType?this.handleAudioToggle():"video"===e.streamType?this.handleVideoToggle():nc.warn("Invalid stream type!")}sendChatMessage(e){e&&" "!==e?this.send({type:"chatMessage",message:e}):this.clientErrorHandler({reason:"Chat message need to have a valid value!",error:null})}async informPeer(){this.remoteId&&this.send({type:"nameUpdate",name:this.myName})}handleLogin(e){e&&(nc.debug("All available users:%o",e),this._remoteDisplayName=e.displayName,this._remotePeerId=e.peerId,this._remoteRole=e.role),this._otherPeerConnected=!0,this.emit("peerJoin",this._remoteDisplayName)}async gotRemoteTrack(e){nc.debug("inside got remote track:%o",e),e.streams&&e.streams[0]?(nc.debug("Got a remote stream"),this._remoteStream=e.streams[0]):(this._remoteStream=new MediaStream,this._remoteStream.addTrack(e.track),nc.debug("Got a remote track")),this.emit("remoteStream")}_onICeCandidate(e){nc.debug("onicecandidate",e.candidate),e.candidate&&this.send({type:"candidate",candidate:e.candidate,peer:this._remotePeerId})}handleNegotiationNeededEvent=()=>{nc.debug("handleNegotiationNeededEvent() | needed to negotiate a new negotiation"),this.restartICE()};handleRemoveTrackEvent=()=>{nc.debug("handleRemoveTrackEvent() | Track removed by remote peer. Need to handle UI locally."),this.emit("videoToggle",{status:!1,peer:"other"})};async createPeerOffer(e){let t,r=this;t=await this._socket.request({type:"fetchIceServers",message:{}}),this._peerConnection=new RTCPeerConnection({iceServers:t}),nc.debug("connection state in createPeeroffer():%s",this._peerConnection.connectionState),this._peerConnection.onicecandidate=e=>{this._onICeCandidate(e)},this._localStream.getTracks().forEach(e=>this._peerConnection.addTrack(e,this._localStream));const s=await this._peerConnection.createOffer().catch(function(e){alert("Error when creating an offer",e),nc.error("Error when creating an offer:%o",e)});await this._peerConnection.setLocalDescription(s),this.send({type:"offer",offer:r._peerConnection.localDescription,peer:r._remotePeerId,name:r.myName}),this._peerConnection.ontrack=e=>r.gotRemoteTrack(e),this._peerConnection.addEventListener("iceconnectionstatechange",async e=>{nc.debug("Current ICEState:%s",r._peerConnection.iceConnectionState),"failed"!==r._peerConnection.iceConnectionState&&"disconnected"!==r._peerConnection.iceConnectionState||(nc.debug("Ice connection failed!! with socket connection status:%s",r._socket.connectionStatus),r.emit("iceFailure"))}),this._peerConnection.onnegotiationneeded=()=>this.handleNegotiationNeededEvent(),this._peerConnection.onremovetrack=()=>this.handleRemoveTrackEvent()}async handleOffer({peer:e,name:t,offer:r}){let s=this;const i=await this._socket.request({type:"fetchIceServers",message:{}});this._peerConnection=new RTCPeerConnection({iceServers:i}),nc.debug("Peer connection in handle offer is:%s",this._peerConnection),this._remoteDisplayName=t,this._remotePeerId=e,this._peerConnection.setRemoteDescription(new RTCSessionDescription(r)),this._localStream.getTracks().forEach(e=>this._peerConnection.addTrack(e,this._localStream)),this._peerConnection.createAnswer().then(function(e){return s._peerConnection.setLocalDescription(e)}).then(function(){nc.debug("Ice already completed. sending answer!!"),s.send({type:"answer",answer:s._peerConnection.localDescription,peer:s._remotePeerId,mediaInputs:s.mediaInputs,userAgent:s.userAgent})}).catch(function(e){alert("Error when creating an answer"),nc.error("Error while creating answer:%o",e)}),this._peerConnection.ontrack=e=>s.gotRemoteTrack(e),this._peerConnection.onicecandidate=e=>{this._onICeCandidate(e)},this._peerConnection.addEventListener("iceconnectionstatechange",async e=>{nc.debug("Current ICEState:%s",s._peerConnection.iceConnectionState),"failed"!==s._peerConnection.iceConnectionState&&"disconnected"!==s._peerConnection.iceConnectionState||(nc.debug("Ice connection failed!! with socket connection status:%s",s._socket.connectionStatus),s.emit("iceFailure"))}),this._peerConnection.onnegotiationneeded=()=>this.handleNegotiationNeededEvent(),this._peerConnection.onremovetrack=()=>this.handleRemoveTrackEvent(),this.emit("offerReceived")}handleAnswer(e){nc.debug("answer:%o ",e),this._peerConnection.setRemoteDescription(new RTCSessionDescription(e.answer)),this._remoteMediaInputs=e.mediaInputs,this._remoteUserAgent=e.userAgent,this.emit("remoteMediaInputs")}async handleCandidate(e){this.pc?(nc.debug("Peerconnection available, Inside handle candidate for remote icecandidates"),this._peerConnection.addIceCandidate(new RTCIceCandidate(e)).catch(e=>{nc.error("Error while adding iceCandidate",e)})):nc.warn("Candidate arrived before peer connection instantiation:%o",e)}async restartICE(){const e=await this._peerConnection.createOffer({iceRestart:!0});await this._peerConnection.setLocalDescription(e),this.send({type:"iceRestart",offer:e})}async handleIceRestart(e){nc.debug("Ice restart message received!!"),this._peerConnection.setRemoteDescription(e.offer);const t=await this._peerConnection.createAnswer();await this._peerConnection.setLocalDescription(t),this.send({type:"iceRestarted",answer:t})}async handleIceRestartResponse(e){nc.debug("Ice restart message response received!!"),this._peerConnection.setRemoteDescription(e.answer)}async informRoomLeave(){this.send({type:"leave",peer:this.remoteId}),await this.handleLeave()}async handleLeave(){this._peerConnection?(this._peerConnection.ontrack=null,this._peerConnection.onremovetrack=null,this._peerConnection.onremovestream=null,this._peerConnection.onicecandidate=null,this._peerConnection.oniceconnectionstatechange=null,this._peerConnection.onsignalingstatechange=null,this._peerConnection.onicegatheringstatechange=null,this._peerConnection.onnegotiationneeded=null,this._localStream&&this._localStream.getTracks().forEach(e=>e.stop()),this._remoteStream&&this._remoteStream.getTracks().forEach(e=>e.stop()),this._peerConnection.close(),this._peerConnection=null,this._remoteDisplayName=null,this._remotePeerId=null,this._remoteStream=null,this._localStream=null,this._canvas=null,this._imageData=null,this._imageWidth=640,this._imageHeight=480,this._socket.close()):nc.error("No peerconnection object found!")}async changeRemoteMediaSource(e){let{label:t,mediaType:r}=e;!t||"video"!==r&&"audio"!==r?this.send({type:"error",details:{reason:"Can't change remote media source as either media label or media type is not available!"}}):this.handleReplaceTrack({label:t,mediaType:r})}async handleReplaceTrack({label:e,mediaType:t}){try{let r,s,i;const a=await(e=>new Promise(t=>{navigator.mediaDevices.enumerateDevices().then(function(r){r.forEach(function(r){r.label===e&&t(r.deviceId)}),r[0].label||t({error:"noLabel",reason:"Device label names not found!"})}).catch(function(e){ConsoleHelper(e.name+": "+e.message),t({error:e.name,reason:e.message})})}))(e);"video"===t?(rc.video.deviceId.exact=a,i=rc,r=this._localStream.getVideoTracks()[0]):"audio"===t?(tc.audio.deviceId.exact=a,i=tc,r=this._localStream.getAudioTracks()[0]):nc.error("Unknown media type:%s",t);let n=r.enabled;r.stop(),nc.debug("selected constraints are:%o",i);let o=await navigator.mediaDevices.getUserMedia(i);if(nc.debug("new stream is:%o",o),"video"===t?s=o.getVideoTracks()[0]:"audio"===t&&(s=o.getAudioTracks()[0]),s.enabled=n,this._peerConnection){const e=this._peerConnection.getSenders().find(function(e){return e.track.kind==s.kind});nc.debug("found sender:%o",e),e.replaceTrack(s)}this._localStream.removeTrack(r),this._localStream.addTrack(s)}catch(r){nc.error("Error while replace media track:%o",r),this.clientErrorHandler({reason:"Error while replacing media track with new source",error:r})}}async captureImage(e){const t=document.createElement("canvas"),r=t.getContext("2d"),s=this._imageWidth,i=this._imageHeight;nc.debug("height:%s and width:%s",s,i),t.width=s,t.height=i,"local"===e?r.drawImage(localVideo,0,0,s,i):r.drawImage(remoteVideo,0,0,s,i);let a=t.toDataURL("image/png");this._canvas=t,this._imageData=a,this.emit("imageCaptured")}async clearImage(){const e=this._canvas,t=e.getContext("2d");t.fillStyle="#AAA",t.fillRect(0,0,e.width,e.height);let r=e.toDataURL("image/png");this._imageData=r}captureRemoteImage(){this.send({type:"imageCapture"})}remoteCamChange(e){e?this.send({type:"mediaChange",mediaType:"video",label:e}):this.clientErrorHandler({reason:"A valid camera name must be selected for to change the remote camera!",error:null})}remoteMicChange(e){e?this.send({type:"mediaChange",mediaType:"audio",label:e}):this.clientErrorHandler({reason:"A valid mic name must be selected for to change the remote mic!",error:null})}requestStats(){this.send({type:"requestStats"})}async captureStats(){let e=this;return new Promise(t=>{this._peerConnection.getStats(null).then(r=>{let s={};r.forEach(e=>{["inbound-rtp","outbound-rtp","remote-inbound-rtp","remote-outbound-rtp","local-candidate","remote-candidate","candidate-pair"].includes(e.type)&&(s={...s,[`${e.type}`]:e})}),e._localStats=s,t(s)})})}displayStats({stats:e,element:t}){let r="";Object.values(e).forEach(e=>{r+=`<h2>Report: ${e.type}</h2>\n<strong>ID:</strong> ${e.id}<br>\n<strong>Timestamp:</strong> ${e.timestamp}<br>\n`,Object.keys(e).forEach(t=>{"id"!==t&&"timestamp"!==t&&"type"!==t&&(r+=`<strong>${t}:</strong> ${e[t]}<br>\n`)})}),document.querySelector(t).innerHTML=r}async sendRequestedstats(){let e=await this.captureStats();nc.debug("Local stats are:%o",e),this.send({type:"statsFetched",stats:e})}clientErrorHandler({reason:e,error:t}){this.emit("clientError",{reason:e,error:t})}copyLink(e){navigator.clipboard.writeText(e).then(function(){nc.debug("Async: Copying to clipboard was successful!"),alert("Link copied!!")},function(e){nc.error("Async: Could not copy text:%o ",e)})}}const cc={JsSdk_v1:to,JsSdk:Yo,P2pSdk:oc};e.JsSdk=Yo,e.JsSdk_v1=to,e.P2pSdk=oc,e.default=cc,Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|