-
Notifications
You must be signed in to change notification settings - Fork 27
/
remon.min.mjs
1 lines (1 loc) · 166 KB
/
remon.min.mjs
1
var e=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var n=Object.prototype.toString.call(e);return"[object RegExp]"===n||"[object Date]"===n||function(e){return e.$$typeof===t}(e)}(e)};var t="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function n(e,t){return!1!==t.clone&&t.isMergeableObject(e)?s((n=e,Array.isArray(n)?[]:{}),e,t):e;var n}function r(e,t,r){return e.concat(t).map((function(e){return n(e,r)}))}function i(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return e.propertyIsEnumerable(t)})):[]}(e))}function o(e,t){try{return t in e}catch(e){return!1}}function a(e,t,r){var a={};return r.isMergeableObject(e)&&i(e).forEach((function(t){a[t]=n(e[t],r)})),i(t).forEach((function(i){(function(e,t){return o(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,i)||(o(e,i)&&r.isMergeableObject(t[i])?a[i]=function(e,t){if(!t.customMerge)return s;var n=t.customMerge(e);return"function"==typeof n?n:s}(i,r)(e[i],t[i],r):a[i]=n(t[i],r))})),a}function s(t,i,o){(o=o||{}).arrayMerge=o.arrayMerge||r,o.isMergeableObject=o.isMergeableObject||e,o.cloneUnlessOtherwiseSpecified=n;var s=Array.isArray(i);return s===Array.isArray(t)?s?o.arrayMerge(t,i,o):a(t,i,o):n(i,o)}s.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,n){return s(e,n,t)}),{})};var c=s,d="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function l(e,t){return e(t={exports:{}},t.exports),t.exports}var h=l((function(e,t){(function(){var n={function:!0,object:!0},r=n[typeof window]&&window||this,i=n.object&&t,o=n.object&&e&&!e.nodeType&&e,a=i&&o&&"object"==typeof d&&d;!a||a.global!==a&&a.window!==a&&a.self!==a||(r=a);var s=Math.pow(2,53)-1,c=/\bOpera/,l=Object.prototype,h=l.hasOwnProperty,p=l.toString;function u(e){return(e=String(e)).charAt(0).toUpperCase()+e.slice(1)}function m(e){return e=C(e),/^(?:webOS|i(?:OS|P))/.test(e)?e:u(e)}function f(e,t){for(var n in e)h.call(e,n)&&t(e[n],n,e)}function v(e){return null==e?u(e):p.call(e).slice(8,-1)}function g(e){return String(e).replace(/([ -])(?!$)/g,"$1?")}function y(e,t){var n=null;return function(e,t){var n=-1,r=e?e.length:0;if("number"==typeof r&&r>-1&&r<=s)for(;++n<r;)t(e[n],n,e);else f(e,t)}(e,(function(r,i){n=t(n,r,i,e)})),n}function C(e){return String(e).replace(/^ +| +$/g,"")}var S=function e(t){var n=r,i=t&&"object"==typeof t&&"String"!=v(t);i&&(n=t,t=null);var o=n.navigator||{},a=o.userAgent||"";t||(t=a);var s,d,l,h,u,S=i?!!o.likeChrome:/\bChrome\b/.test(t)&&!/internal|\n/i.test(p.toString()),R=i?"Object":"ScriptBridgingProxyObject",E=i?"Object":"Environment",T=i&&n.java?"JavaPackage":v(n.java),b=i?"Object":"RuntimeObject",x=/\bJava/.test(T)&&n.java,k=x&&v(n.environment)==E,P=x?"a":"α",w=x?"b":"β",M=n.document||{},L=n.operamini||n.opera,O=c.test(O=i&&L?L["[[Class]]"]:v(L))?O:L=null,I=t,_=[],D=null,A=t==a,j=A&&L&&"function"==typeof L.version&&L.version(),F=y([{label:"EdgeHTML",pattern:"Edge"},"Trident",{label:"WebKit",pattern:"AppleWebKit"},"iCab","Presto","NetFront","Tasman","KHTML","Gecko"],(function(e,n){return e||RegExp("\\b"+(n.pattern||g(n))+"\\b","i").exec(t)&&(n.label||n)})),N=function(e){return y(e,(function(e,n){return e||RegExp("\\b"+(n.pattern||g(n))+"\\b","i").exec(t)&&(n.label||n)}))}(["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"},"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","Waterfox","WebPositive","Opera Mini",{label:"Opera Mini",pattern:"OPiOS"},"Opera",{label:"Opera",pattern:"OPR"},"Chrome",{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=U([{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"]),B=function(e){return y(e,(function(e,n,r){return e||(n[V]||n[/^[a-z]+(?: +[a-z]+\b)*/i.exec(V)]||RegExp("\\b"+g(r)+"(?:\\b|\\w*\\d)","i").exec(t))&&r}))}({Apple:{iPad:1,iPhone:1,iPod:1},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:{},LG:{},Microsoft:{Xbox:1,"Xbox One":1},Motorola:{Xoom:1},Nintendo:{"Wii U":1,Wii:1},Nokia:{Lumia:1},Samsung:{"Galaxy S":1,"Galaxy S2":1,"Galaxy S3":1,"Galaxy S4":1},Sony:{PlayStation:1,"PlayStation Vita":1}}),G=function(e){return y(e,(function(e,n){var r=n.pattern||g(n);return!e&&(e=RegExp("\\b"+r+"(?:/[\\d.]+|[ \\w.]*)","i").exec(t))&&(e=function(e,t,n){var r={"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&&n&&/^Win/i.test(e)&&!/^Windows Phone /i.test(e)&&(r=r[/[\d.]+$/.exec(e)])&&(e="Windows "+r),e=String(e),t&&n&&(e=e.replace(RegExp(t,"i"),n)),e=m(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,r,n.label||n)),e}))}(["Windows Phone","Android","CentOS",{label:"Chrome OS",pattern:"CrOS"},"Debian","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 U(e){return y(e,(function(e,n){var r=n.pattern||g(n);return!e&&(e=RegExp("\\b"+r+" *\\d+[.\\w_]*","i").exec(t)||RegExp("\\b"+r+" *\\w+-[\\w]*","i").exec(t)||RegExp("\\b"+r+"(?:; *(?:[a-z]+[_-])?[a-z]+\\d+|[^ ();-]*)","i").exec(t))&&((e=String(n.label&&!RegExp(r,"i").test(n.label)?n.label:e).split("/"))[1]&&!/[\d.]+/.test(e[0])&&(e[0]+=" "+e[1]),n=n.label||n,e=m(e[0].replace(RegExp(r,"i"),n).replace(RegExp("; *(?:"+n+"[_-])?","i")," ").replace(RegExp("("+n+")[-_.]?(\\w)","i"),"$1 $2"))),e}))}if(F&&(F=[F]),B&&!V&&(V=U([B])),(s=/\bGoogle TV\b/.exec(V))&&(V=s[0]),/\bSimulator\b/i.test(t)&&(V=(V?V+" ":"")+"Simulator"),"Opera Mini"==N&&/\bOPiOS\b/.test(t)&&_.push("running in Turbo/Uncompressed mode"),"IE"==N&&/\blike iPhone OS\b/.test(t)?(B=(s=e(t.replace(/like iPhone OS/,""))).manufacturer,V=s.product):/^iP/.test(V)?(N||(N="Safari"),G="iOS"+((s=/ OS ([\d_]+)/i.exec(t))?" "+s[1].replace(/_/g,"."):"")):"Konqueror"!=N||/buntu/i.test(G)?B&&"Google"!=B&&(/Chrome/.test(N)&&!/\bMobile Safari\b/i.test(t)||/\bVita\b/.test(V))||/\bAndroid\b/.test(G)&&/^Chrome/.test(N)&&/\bVersion\//i.test(t)?(N="Android Browser",G=/\bAndroid\b/.test(G)?G:"Android"):"Silk"==N?(/\bMobi/i.test(t)||(G="Android",_.unshift("desktop mode")),/Accelerated *= *true/i.test(t)&&_.unshift("accelerated")):"PaleMoon"==N&&(s=/\bFirefox\/([\d.]+)\b/.exec(t))?_.push("identifying as Firefox "+s[1]):"Firefox"==N&&(s=/\b(Mobile|Tablet|TV)\b/i.exec(t))?(G||(G="Firefox OS"),V||(V=s[1])):!N||(s=!/\bMinefield\b/i.test(t)&&/\b(?:Firefox|Safari)\b/.exec(N))?(N&&!V&&/[\/,]|^[^(]+?\)/.test(t.slice(t.indexOf(s+"/")+8))&&(N=null),(s=V||B||G)&&(V||B||/\b(?:Android|Symbian OS|Tablet OS|webOS)\b/.test(G))&&(N=/[a-z]+(?: Hat)?/i.exec(/\bAndroid\b/.test(G)?G:s)+" Browser")):"Electron"==N&&(s=(/\bChrome\/([\d.]+)\b/.exec(t)||0)[1])&&_.push("Chromium "+s):G="Kubuntu",j||(j=y(["(?:Cloud9|CriOS|CrMo|Edge|FxiOS|IEMobile|Iron|Opera ?Mini|OPiOS|OPR|Raven|SamsungBrowser|Silk(?!/[\\d.]+$))","Version",g(N),"(?:Firefox|Minefield|NetFront)"],(function(e,n){return e||(RegExp(n+"(?:-[\\d.]+/|(?: for [\\w-]+)?[ /-])([\\d.]+[^ ();/_-]*)","i").exec(t)||0)[1]||null}))),(s=("iCab"==F&&parseFloat(j)>3?"WebKit":/\bOpera\b/.test(N)&&(/\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"==G?"Tasman":"Trident")||"WebKit"==F&&/\bPlayStation\b(?! Vita\b)/i.test(N)&&"NetFront")&&(F=[s]),"IE"==N&&(s=(/; *(?:XBLWP|ZuneWP)(\d+)/i.exec(t)||0)[1])?(N+=" Mobile",G="Windows Phone "+(/\+$/.test(s)?s:s+".x"),_.unshift("desktop mode")):/\bWPDesktop\b/i.test(t)?(N="IE Mobile",G="Windows Phone 8.x",_.unshift("desktop mode"),j||(j=(/\brv:([\d.]+)/.exec(t)||0)[1])):"IE"!=N&&"Trident"==F&&(s=/\brv:([\d.]+)/.exec(t))&&(N&&_.push("identifying as "+N+(j?" "+j:"")),N="IE",j=s[1]),A){if(h="global",u=null!=(l=n)?typeof l[h]:"number",/^(?:boolean|number|string|undefined)$/.test(u)||"object"==u&&!l[h])v(s=n.runtime)==R?(N="Adobe AIR",G=s.flash.system.Capabilities.os):v(s=n.phantom)==b?(N="PhantomJS",j=(s=s.version||null)&&s.major+"."+s.minor+"."+s.patch):"number"==typeof M.documentMode&&(s=/\bTrident\/(\d+)/i.exec(t))?(j=[j,M.documentMode],(s=+s[1]+4)!=j[1]&&(_.push("IE "+j[1]+" mode"),F&&(F[1]=""),j[1]=s),j="IE"==N?String(j[1].toFixed(1)):j[0]):"number"==typeof M.documentMode&&/^(?:Chrome|Firefox)\b/.test(N)&&(_.push("masking as "+N+" "+j),N="IE",j="11.0",F=["Trident"],G="Windows");else if(x&&(I=(s=x.lang.System).getProperty("os.arch"),G=G||s.getProperty("os.name")+" "+s.getProperty("os.version")),k){try{j=n.require("ringo/engine").version.join("."),N="RingoJS"}catch(e){(s=n.system)&&s.global.system==n.system&&(N="Narwhal",G||(G=s[0].os||null))}N||(N="Rhino")}else"object"==typeof n.process&&!n.process.browser&&(s=n.process)&&("object"==typeof s.versions&&("string"==typeof s.versions.electron?(_.push("Node "+s.versions.node),N="Electron",j=s.versions.electron):"string"==typeof s.versions.nw&&(_.push("Chromium "+j,"Node "+s.versions.node),N="NW.js",j=s.versions.nw)),N||(N="Node.js",I=s.arch,G=s.platform,j=(j=/[\d.]+/.exec(s.version))?j[0]:null));G=G&&m(G)}if(j&&(s=/(?:[ab]|dp|pre|[ab]\d+pre)(?:\d+\+?)?$/i.exec(j)||/(?:alpha|beta)(?: ?\d)?/i.exec(t+";"+(A&&o.appMinorVersion))||/\bMinefield\b/i.test(t)&&"a")&&(D=/b/i.test(s)?"beta":"alpha",j=j.replace(RegExp(s+"\\+?$"),"")+("beta"==D?w:P)+(/\d+\+?/.exec(s)||"")),"Fennec"==N||"Firefox"==N&&/\b(?:Android|Firefox OS)\b/.test(G))N="Firefox Mobile";else if("Maxthon"==N&&j)j=j.replace(/\.[\d.]+/,".x");else if(/\bXbox\b/i.test(V))"Xbox 360"==V&&(G=null),"Xbox 360"==V&&/\bIEMobile\b/.test(t)&&_.unshift("mobile mode");else if(!/^(?:Chrome|IE|Opera)$/.test(N)&&(!N||V||/Browser|Mobi/.test(N))||"Windows CE"!=G&&!/Mobi/i.test(t))if("IE"==N&&A)try{null===n.external&&_.unshift("platform preview")}catch(e){_.unshift("embedded")}else(/\bBlackBerry\b/.test(V)||/\bBB10\b/.test(t))&&(s=(RegExp(V.replace(/ +/g," *")+"/([.\\d]+)","i").exec(t)||0)[1]||j)?(G=((s=[s,/BB10/.test(t)])[1]?(V=null,B="BlackBerry"):"Device Software")+" "+s[0],j=null):this!=f&&"Wii"!=V&&(A&&L||/Opera/.test(N)&&/\b(?:MSIE|Firefox)\b/i.test(t)||"Firefox"==N&&/\bOS X (?:\d+\.){2,}/.test(G)||"IE"==N&&(G&&!/^Win/.test(G)&&j>5.5||/\bWindows XP\b/.test(G)&&j>8||8==j&&!/\bTrident\b/.test(t)))&&!c.test(s=e.call(f,t.replace(c,"")+";"))&&s.name&&(s="ing as "+s.name+((s=s.version)?" "+s:""),c.test(N)?(/\bIE\b/.test(s)&&"Mac OS"==G&&(G=null),s="identify"+s):(s="mask"+s,N=O?m(O.replace(/([a-z])([A-Z])/g,"$1 $2")):"Opera",/\bIE\b/.test(s)&&(G=null),A||(j=null)),F=["Presto"],_.push(s));else N+=" Mobile";(s=(/\bAppleWebKit\/([\d.]+\+?)/i.exec(t)||0)[1])&&(s=[parseFloat(s.replace(/\.(\d)$/,".0$1")),s],"Safari"==N&&"+"==s[1].slice(-1)?(N="WebKit Nightly",D="alpha",j=s[1].slice(0,-1)):j!=s[1]&&j!=(s[2]=(/\bSafari\/([\d.]+\+?)/i.exec(t)||0)[1])||(j=null),s[1]=(/\bChrome\/([\d.]+)/i.exec(t)||0)[1],537.36==s[0]&&537.36==s[2]&&parseFloat(s[1])>=28&&"WebKit"==F&&(F=["Blink"]),A&&(S||s[1])?(F&&(F[1]="like Chrome"),s=s[1]||((s=s[0])<530?1:s<532?2:s<532.05?3:s<533?4:s<534.03?5:s<534.07?6:s<534.1?7:s<534.13?8:s<534.16?9:s<534.24?10:s<534.3?11:s<535.01?12:s<535.02?"13+":s<535.07?15:s<535.11?16:s<535.19?17:s<536.05?18:s<536.1?19:s<537.01?20:s<537.11?"21+":s<537.13?23:s<537.18?24:s<537.24?25:s<537.36?26:"Blink"!=F?"27":"28")):(F&&(F[1]="like Safari"),s=(s=s[0])<400?1:s<500?2:s<526?3:s<533?4:s<534?"4+":s<535?5:s<537?6:s<538?7:s<601?8:"8"),F&&(F[1]+=" "+(s+="number"==typeof s?".x":/[.+]/.test(s)?"":"+")),"Safari"==N&&(!j||parseInt(j)>45)&&(j=s)),"Opera"==N&&(s=/\bzbov|zvav$/.exec(G))?(N+=" ",_.unshift("desktop mode"),"zvav"==s?(N+="Mini",j=null):N+="Mobile",G=G.replace(RegExp(" *"+s+"$"),"")):"Safari"==N&&/\bChrome\b/.exec(F&&F[1])&&(_.unshift("desktop mode"),N="Chrome Mobile",j=null,/\bOS X\b/.test(G)?(B="Apple",G="iOS 4.3+"):G=null),j&&0==j.indexOf(s=/[\d.]+$/.exec(G))&&t.indexOf("/"+s+"-")>-1&&(G=C(G.replace(s,""))),F&&!/\b(?:Avant|Nook)\b/.test(N)&&(/Browser|Lunascape|Maxthon/.test(N)||"Safari"!=N&&/^iOS/.test(G)&&/\bSafari\b/.test(F[1])||/^(?:Adobe|Arora|Breach|Midori|Opera|Phantom|Rekonq|Rock|Samsung Internet|Sleipnir|Web)/.test(N)&&F[1])&&(s=F[F.length-1])&&_.push(s),_.length&&(_=["("+_.join("; ")+")"]),B&&V&&V.indexOf(B)<0&&_.push("on "+B),V&&_.push((/^on /.test(_[_.length-1])?"":"on ")+V),G&&(s=/ ([\d.+]+)$/.exec(G),d=s&&"/"==G.charAt(G.length-s[0].length-1),G={architecture:32,family:s&&!d?G.replace(s[0],""):G,version:s?s[1]:null,toString:function(){var e=this.version;return this.family+(e&&!d?" "+e:"")+(64==this.architecture?" 64-bit":"")}}),(s=/\b(?:AMD|IA|Win|WOW|x86_|x)64\b/i.exec(I))&&!/\bi686\b/i.test(I)?(G&&(G.architecture=64,G.family=G.family.replace(RegExp(" *"+s),"")),N&&(/\bWOW64\b/i.test(t)||A&&/\w(?:86|32)$/.test(o.cpuClass||o.platform)&&!/\bWin64; x64\b/i.test(t))&&_.unshift("32-bit")):G&&/^OS X/.test(G.family)&&"Chrome"==N&&parseFloat(j)>=39&&(G.architecture=64),t||(t=null);var W={};return W.description=t,W.layout=F&&F[0],W.manufacturer=B,W.name=N,W.prerelease=D,W.product=V,W.ua=t,W.version=N&&j,W.os=G||{architecture:null,family:null,version:null,toString:function(){return"null"}},W.parse=e,W.toString=function(){return this.description||""},W.version&&_.unshift(j),W.name&&_.unshift(N),G&&N&&(G!=String(G).split(" ")[0]||G!=N.split(" ")[0]&&!V)&&_.push(V?"("+G+")":"on "+G),_.length&&(W.description=_.join(" ")),W}();i&&o?f(S,(function(e,t){i[t]=e})):r.platform=S}).call(d)})),p={rtc:{selectiveCandidate:void 0,iceServers:[],localStream:void 0,localVideo:void 0,audioType:"voice",simulcast:!1,sdpSemantics:"unified-plan"},signalingServer:{url:"wss://signal.remotemonster.com/ws"},appServer:{url:"https://signal.remotemonster.com/rest"},logServer:{url:"https://signal.remotemonster.com:2001/topics",logSending:!0,qualityLogSending:!0},sentry:{dsn:"https://[email protected]/3",logSending:!0},sdk:{logLevel:void 0,country:void 0,version:void 0},credential:{key:void 0,serviceId:void 0},view:{local:void 0,remote:void 0,localStream:void 0},media:{video:!0,audio:!0,screen:!1}};class u{constructor(){this.token,this.channel={name:void 0,peers:[],serviceId:void 0,startTime:void 0,status:void 0,type:void 0,id:void 0,msType:"Ms"},this.sentry,this.config,this.peers=[],this.audioTransceiver,this.videoTransceiver,this.videoCodec,this.audioCodec,this.remoteVideo,this.remoteStream,this.screenStream,this.devices,this.isCaller,this.startTime,this.endTime,this.serviceId,this.peerConnection,this.signalingConnection,this.state,this.hasAddTrack,this.eventManager,this.health,this.useVideo=!0,this.useAudio=!0,this.currentVideoDeviceId,this.useRecord=!1,this.remoteRecorder,this.localRecorder,this.mediaManager,this.hasLocalStream=!1,this.isConnectToSignal=!1,this.broadcast=!1,this.videoBandwidth,this.audioBandwidth,this.sdkVersion,this.simulcast,this.currentSimulcast="HIGH",this.sdpSemantics,this.qualityChecker,this.env}}const m=function(){const e=["SILENT","ERROR","WARN","INFO","DEBUG","VERBOSE"];let t,n,r,i,o;return Object.freeze({init:function(a){if(!e.includes(a.logLevel))throw new Error("Logger:UnmatchedLogLevel");n=a,t=a.logLevel,r=a.logServer.url,i=a.logServer.logSending,o=a.config.logServer.qualityLogSending},e:function(...e){if("SILENT"!==t)return n.eventManager.hasEventListener("onLog")&&n.eventManager.dispatchEvent("onLog",e),console.error("[RM]E>",...e)},w:function(...e){if("SILENT"!==t&&"ERROR"!==t)return n.eventManager.hasEventListener("onLog")&&n.eventManager.dispatchEvent("onLog",e),console.warn("[RM]W>",...e)},g:function(...e){if("SILENT"!==t&&"ERROR"!==t&&"WARN"!==t)return n.eventManager.hasEventListener("onLog")&&n.eventManager.dispatchEvent("onLog",e),console.group("[RM]G>",...e)},gEnd:function(){if("SILENT"!==t&&"ERROR"!==t&&"WARN"!==t)return console.groupEnd()},l:function(...e){if("SILENT"!==t&&"ERROR"!==t&&"WARN"!==t)return n.eventManager.hasEventListener("onLog")&&n.eventManager.dispatchEvent("onLog",e),console.info("[RM]I>",...e)},i:function(...e){if("SILENT"!==t&&"ERROR"!==t&&"WARN"!==t)return n.eventManager.hasEventListener("onLog")&&n.eventManager.dispatchEvent("onLog",e),console.info("[RM]I>",...e)},d:function(...e){if("SILENT"!==t&&"ERROR"!==t&&"WARN"!==t&&"INFO"!==t)return n.eventManager.hasEventListener("onLog")&&n.eventManager.dispatchEvent("onLog",e),console.log("[RM]D>",...e)},v:function(...e){if("SILENT"!==t&&"ERROR"!==t&&"WARN"!==t&&"INFO"!==t&&"DEBUG"!==t)return n.eventManager.hasEventListener("onLog")&&n.eventManager.dispatchEvent("onLog",e),console.debug("[RM]V>",...e)},evt:function(...e){i&&fetch(r,{method:"PUT",mode:"cors",headers:{"Content-Type":"application/json; charset=utf-8","Access-Control-Allow-Origin":"*"},body:e})},errorEvt:function(e,t,n){if(i){var o={topic:"log",messages:{log:n,logLevel:"error",errorCode:t}};e.serviceId&&(o.messages.svcId=e.serviceId),e.channel&&e.channel.id&&(o.messages.chId=e.channel.id),e.token&&(o.messages.pId=e.token),fetch(r,{method:"PUT",mode:"cors",headers:{"Content-Type":"application/json; charset=utf-8","Access-Control-Allow-Origin":"*"},body:JSON.stringify(o)})}},qualityLog:function(e){let t;if(!i)return;if(!o)return;"quality.start"===e.type&&e.config&&(t={rtc:{iceServers:e.config.rtc.iceServers,audioType:e.config.rtc.audioType,simulcast:e.config.rtc.simulcast},sinalingServer:e.config.signalingServer,appServer:e.config.appServer,logServer:e.config.logServer,sdk:e.config.sdk,credential:e.config.credential,view:{local:e.config.view.local,remote:e.config.view.remote},media:e.config.media});const a={topic:"quality",messages:"quality.middle"===e.type?e:{stats:t,logLevel:"info",type:e.type||"quality.start",svcId:n.serviceId,env:n.env,state:n.state}};n.channel&&n.channel.id&&"quality.middle"!==e.type&&(a.messages.chId=n.channel.id,a.messages.chType=n.channel.type),n.token&&(a.messages.sessionId=n.token),fetch(r,{method:"PUT",mode:"cors",headers:{"Content-Type":"application/json; charset=utf-8","Access-Control-Allow-Origin":"*"},body:JSON.stringify(a)})}})}(),f=Object.freeze({validateConfig:function(e,t){const n=Object.seal({credential:{key:void 0,serviceId:void 0}});Object.keys(n).forEach(e=>{Object.keys(n[e]).forEach(r=>{t[e][r]?n[e][r]=!0:n[e][r]=!1})}),Object.keys(n).forEach(t=>{Object.keys(n[t]).forEach(r=>{!1===n[t][r]&&e.eventManager.hasEventListener("onError")&&e.eventManager.dispatchEvent("onError","InvalidParameterError")})})},MediaDeviceCheck:function(e,t){navigator.mediaDevices||e.eventManager.hasEventListener("onError")&&e.eventManager.dispatchEvent("onError","SSL authentication(https) is required.")},bind:function(e,t){if(!e||!t)throw new Error("Failed to execute 'bind' on 'utils': 2 arguments required, but only "+arguments.length+" present.");return function(){e.apply(t,Array.prototype.slice.call(arguments))}},buildMessage:function(e,t,n){var r="\r\n",i=[],o="";o+="Content-Disposition: form-data; ",o+='name=files"; ',o+='filename="'+e+'"'+r,o+="Content-Type: application/octet-stream",o+=r+r,o+=t+r,i.push(o);var a="--"+n+r;return a+=i.join("--"+n+r),a+="--"+n+"--"+r},setMediaBitrate:function(e,t,n){for(var r=e.split("\n"),i=-1,o=0;o<r.length;o++)if(0===r[o].indexOf("m="+t)){i=o;break}if(-1===i)return console.debug("Could not find the m line for",t),e;for(console.debug("Found the m line for",t,"at line",i),i++;0===r[i].indexOf("i=")||0===r[i].indexOf("c=");)i++;if(0===r[i].indexOf("b"))return console.debug("Replaced b line at line",i),r[i]="b=AS:"+n,r.join("\n");console.debug("Adding new b line before line",i);var a=r.slice(0,i);return a.push("b=AS:"+n),(a=a.concat(r.slice(i,r.length))).join("\n")},getVideoFractionLostRating:function(e){return e<40||!e?1:e<55?2:e<70?3:e<90?4:5},getAudioFractionLostRating:function(e){return e<50||!e?1:e<150?2:e<250?3:e<350?4:5},cloneObject:function e(t){var n={};for(var r in t)"object"==typeof t[r]&&null!=t[r]?n[r]=e(t[r]):n[r]=t[r];return n}});class v{constructor(e,t,n){this.context=e,this.isStart=!1,this.postfix=n,this.audioFile,this.stream=new MediaStream(t.getAudioTracks()),this.type="Firefox"===h.name?"audio/ogg":"audio/webm",this.recorder=new MediaRecorder(this.stream,{audioBitsPerSecond:64e3,videoBitsPerSecond:16e3,mimeType:this.type}),this.array=[],this.recorder.ondataavailable=e=>{this.array.push(e.data)},this.recorder.onstop=e=>{if("local"===this.context.recordUrl)return;this.audioFile=new Blob(this.array,{type:this.type});var t=new XMLHttpRequest;const r=this;t.open("POST",this.context.recordUrl,!0),t.setRequestHeader("X-FILENAME",this.context.serviceId+"."+this.context.channel.id+n+".ogg"),t.onload=function(e){m.d("upload is completed"),r.context.eventManager.dispatchEvent("onRecordEvent",{event:"uploaded",id:r.context.channel.id+r.postfix,size:r.audioFile.size})},t.onerror=function(e){m.e("upload is failed"),m.e(e),r.context.eventManager.dispatchEvent("onRecordEvent",{event:"error",id:r.context.channel.id+r.postfix,size:r.audioFile.size,error:e})},t.onprogress=function(e){r.context.eventManager.dispatchEvent("onRecordEvent",{event:"progress",id:r.context.channel.id+r.postfix,size:e.loaded})},this.context.eventManager.dispatchEvent("onRecordEvent",{event:"upload",id:this.context.channel.id+this.postfix,size:this.audioFile.size,file:this.audioFile}),t.send(this.audioFile)}}start(){this.isStart=!0,this.recorder.start(3e3)}stop(){if(!this.isStart)return;let e={event:"stop",id:this.context.channel.id+this.postfix,size:this.array.length};"local"===this.context.recordUrl&&(e.file=new Blob(this.array,{type:this.type})),this.context.eventManager.dispatchEvent("onRecordEvent",e),this.recorder.stop(),this.isStart=!1}}class g{constructor(e){this.context=e,m.init(e)}bindLocalStreamToPeerConnection(e){0!=this.context.useVideo||0!=this.context.useAudio?(this.context.hasAddTrack?(this.context.simulcast&&parseInt(h.version.split(".")[0],10)>=74&&"Chrome"===h.name?(this.context.config.rtc.localStream.getAudioTracks().forEach(t=>e.addTransceiver(t,{streams:[this.context.config.rtc.localStream]})),this.context.config.rtc.localStream.getVideoTracks().forEach(t=>e.addTransceiver(t,{sendEncodings:[{rid:"h",active:!0,maxBitrate:15e5},{rid:"m",active:!0,maxBitrate:3e5,scaleResolutionDownBy:2},{rid:"l",active:!0,maxBitrate:1e5,scaleResolutionDownBy:4}],streams:[this.context.config.rtc.localStream]}))):this.context.config.rtc.localStream.getTracks().forEach(t=>e.addTrack(t,this.context.config.rtc.localStream)),m.i("Local track added:",e.getSenders())):(e.addStream(this.context.config.rtc.localStream),m.i("Local stream added:",e.getLocalStreams())),this.context.eventManager.hasEventListener("onAddLocalStream")&&this.context.eventManager.dispatchEvent("onAddLocalStream",this.context.config.rtc.localStream)):console.log("no media setting")}gotDevicesInfo(e){this.context.devices=e}isLocalPrepared(){return!this.context.useVideo||(0==this.context.config.media.audio&&0==this.context.config.media.video||(!this.context.config.rtc.localVideo||!!this.context.config.rtc.localVideo.srcObject))}async createLocalStream(e,t){var n;if(m.i("start create localstream"),0!=t.audio||0!=t.video){if(e){if(this.context.config.view.localStream)return this.context.config.rtc.localStream=this.context.config.view.localStream,void(e.hasLocalStream=!0);try{if(m.d("try to get user media %j",t),n=this.context.config.media.screen?await navigator.mediaDevices.getDisplayMedia({video:{width:t.video.width,height:t.video.height,frameRate:t.video.frameRate},audio:t.audio}):await navigator.mediaDevices.getUserMedia(t),null!==this.context.config.rtc.localVideo&&void 0!==this.context.config.rtc.localVideo){m.d("type of localvideo: "+typeof this.context.config.rtc.localVideo),m.d("localvideo: "+this.context.config.rtc.localVideo),m.d("stream: "+n);try{this.context.config.rtc.localVideo.srcObject=n}catch(e){console.log(e)}}else m.w("no local video");this.context.config.rtc.localStream=n,e.eventManager.dispatchEvent("onDisplayUserMedia",this.context.config.rtc.localStream),e.eventManager.hasEventListener("onStateChange")&&e.eventManager.dispatchEvent("onStateChange","LOCALMEDIA"),e.hasLocalStream=!0,e.isConnectToSignal&&e.eventManager.hasEventListener("onInit")&&e.eventManager.dispatchEvent("onInit",e.token),m.i("config stream"),m.i(this.context.config.rtc.localStream),e.useRecord&&(e.localRecorder=new v(e,n,"LL"))}catch(t){m.errorEvt(e,"4182","create media stream is failed: %j",t),console.log(t),e.eventManager.hasEventListener("onError")&&(e.eventManager.dispatchEvent("onError","UserMediaDeviceFailedError",t),e.eventManager.dispatchEvent("onError","4182","UserMediaDeviceFailedError:"+t)),m.e(t)}}}else console.log("no audio and video")}bindRemoteStreamToView(e){let t;m.g("Media: Bind remote stream: Bind remote media to video element and regist to context"),m.d("event:",e),t=this.context.hasAddTrack?e.streams[0]:e.stream,m.d("Stream:",t),this.context.remoteVideo.srcObject=t,this.context.remoteStream=t,m.gEnd()}mediaStreamTrackSwitch(e){let t;return Object.freeze({type:function(e){if("Video"!==e&&"Audio"!==e)throw new Error("MediaStreamSwitcher:InvailedMediaType");return t=`get${e}Tracks`,this},enabled:function(n){switch(n){case!0:e[t]().forEach(e=>{e.enabled=!0});break;case!1:e[t]().forEach(e=>{e.enabled=!1});break;default:throw new Error("MediaStreamSwitcher:InvalidCommand")}}})}setAudioOutput(e){this.context.config.rtc.localVideo||this.context.config.rtc.localVideo.setSinkId(e).then(()=>{m.d("Devices: Audio output device attached success:",e)}).catch(()=>{m.e("Devices: Audio output device attached failed:",e),m.errorEvt(this.context,"1007","Devices: Audio output device attached failed:")})}setUserDevices(e,t){window.stream&&window.stream.getTracks().forEach((function(e){e.stop()})),this.context.config.rtc.localVideo.srcObject.getVideoTracks()[0].stop();const n=this.context.config.media;e?(!0===n.audio&&(n.audio={}),n.audio.deviceId={exact:e}):t&&(!0===n.video&&(n.video={}),n.video.deviceId={exact:t}),this.changeLocalStream(n)}async captureScreen(e,t,n,r){this.context.screenStream=await navigator.mediaDevices.getDisplayMedia({video:{width:e,height:t,frameRate:{max:n}},audio:r});const i=r?this.context.screenStream.getTracks()[1]:this.context.screenStream.getTracks()[0];this.context.videoTransceiver.sender.replaceTrack(i),this.context.config.rtc.localStream.getTracks().forEach(e=>{"video"===e.kind&&(e.enabled=!1)}),this.context.screenStream.getAudioTracks().length>0&&(this.context.audioTransceiver.sender.replaceTrack(this.mergeAudioStreams(this.context.screenStream,this.context.config.rtc.localStream)),this.context.config.rtc.localStream.getTracks().forEach(e=>{"audio"===e.kind&&(e.enabled=!1)})),this.context.config.rtc.localVideo.srcObject=this.context.screenStream}stopCaptureScreen(){try{this.showLocalVideo()}catch(e){m.e(e)}}async showLocalVideo(){if(!this.context.config.rtc.localStream)throw"There is no localstream to show.";this.context.screenStream.getTracks().forEach(e=>{e.stop()}),this.context.config.rtc.localStream.getTracks().forEach(e=>{"audio"===e.kind&&(e.enabled=!0),"video"===e.kind&&(e.enabled=!0)}),this.context.config.rtc.localStream.getTracks().forEach(e=>{"audio"===e.kind?this.context.audioTransceiver.sender.replaceTrack(e):"video"===e.kind&&this.context.videoTransceiver.sender.replaceTrack(e)}),this.context.config.rtc.localVideo.srcObject=this.context.config.rtc.localStream}async changeLocalStream(e){let t;try{m.d("try to get user media %j",e),t=await navigator.mediaDevices.getUserMedia(e),this.context.config.rtc.localVideo.srcObject=t,this.context.peerConnection.getTransceivers()[1].sender.replaceTrack(t.getVideoTracks()[0]),this.context.eventManager.hasEventListener("onStateChange")&&this.context.eventManager.dispatchEvent("onStateChange","LOCALMEDIA"),this.context.hasLocalStream=!0,m.i("config stream"),m.i(this.context.config.rtc.localStream)}catch(e){m.errorEvt(this.context,"4182","create media stream is failed: %j",e),console.log(e),this.context.eventManager.hasEventListener("onError")&&(this.context.eventManager.dispatchEvent("onError","UserMediaDeviceFailedError",e),this.context.eventManager.dispatchEvent("onError","4182","UserMediaDeviceFailedError:"+e)),m.e(e)}}mergeAudioStreams(e,t){const n=new AudioContext,r=n.createMediaStreamSource(e),i=n.createMediaStreamSource(t),o=n.createMediaStreamDestination(),a=n.createGain(),s=n.createGain();return a.gain.value=.7,s.gain.value=.7,r.connect(a).connect(o),i.connect(s).connect(o),o.stream.getAudioTracks()[0]}}class y{constructor(e){this.context=e,this.result={channelId:this.context.channel.id,startTime:this.context.startTime,endTime:(new Date).getTime(),videoPacketsReceived:0,videoPacketsLoss:0,audioPacketsReceived:0,audioPacketsLoss:0,audioPacketsSent:0,videoPacketsSent:0,type:"quality.end"}}async check(){m.d("QualityCheck is start w/interval");let e,t,n=await this.context.peerConnection.getStats(null),r={};n.forEach(e=>{r[e.id]=e}),"Safari"===h.name||"safari"===h.name?Object.keys(r).forEach(n=>{"inbound-rtp"===r[n].type?"audio"===r[n].mediaType?(this.result.audioPacketsReceived=r[n].packetsReceived,this.result.audioPacketsLoss=r[n].packetsLost):(this.result.videoPacketsReceived=r[n].packetsReceived,this.result.videoPacketsLoss=r[n].packetsLost):"outbound-rtp"===r[n].type?"audio"===r[n].mediaType?this.result.audioPacketsSent=r[n].packetsSent:this.result.videoPacketsSent=r[n].packetsSent:"candidate-pair"===r[n].type&&"succeeded"===r[n].state&&(t=r[n].localCandidateId,e=r[n].remoteCandidateId,t&&e&&(this.result.localCandidate=r[t].candidateType,this.result.protocol=r[t].protocol,this.result.remoteCandidate=r[e].candidateType))}):"Firefox"===h.name?Object.keys(r).forEach(n=>{"inbound-rtp"===r[n].type?"audio"===r[n].kind?(this.result.audioPacketsReceived=r[n].packetsReceived,this.result.audioPacketsLoss=r[n].packetsLost):(this.result.videoPacketsReceived=r[n].packetsReceived,this.result.videoPacketsLoss=r[n].packetsLost):"outbound-rtp"===r[n].type?"audio"===r[n].kind?this.result.audioPacketsSent=r[n].packetsSent:this.result.videoPacketsSent=r[n].packetsSent:"candidate-pair"===r[n].type&&"succeeded"===r[n].state&&(t=r[n].localCandidateId,e=r[n].remoteCandidateId,t&&e&&(this.result.localCandidate=r[t].candidateType,this.result.protocol=r[t].protocol,this.result.remoteCandidate=r[e].candidateType))}):"Chrome"===h.name&&Object.keys(r).forEach(n=>{"inbound-rtp"===r[n].type?"audio"===r[n].kind?(this.result.audioPacketsReceived=r[n].packetsReceived,this.result.audioPacketsLoss=r[n].packetsLost):(this.result.videoPacketsReceived=r[n].packetsReceived,this.result.videoPacketsLoss=r[n].packetsLost):"outbound-rtp"===r[n].type?"audio"===r[n].kind?this.result.audioPacketsSent=r[n].packetsSent:this.result.videoPacketsSent=r[n].packetsSent:"candidate-pair"===r[n].type&&"succeeded"===r[n].state&&(t=r[n].localCandidateId,e=r[n].remoteCandidateId,t&&e&&(this.result.localCandidate=r[t].candidateType,this.result.protocol=r[t].protocol,this.result.remoteCandidate=r[e].candidateType))}),m.qualityLog(this.result)}}const C=Object.freeze(["INIT","WAIT","CONNECT","COMPLETE","CLOSE","EXIT","FAIL"]);class S{constructor(e){this.interval=5e3,this.statsReportTimer=null,this.context=e,this.oldStats=null,this.result={nowLocalABSent:0,nowLocalVBSent:0,nowRemoteABReceived:0,nowRemoteVBReceived:0,diffRemoteVPReceived:0,nowLocalAPSent:0,nowLocalVPSent:0,nowRemoteAPReceived:0,diffRemoteAPReceived:0,nowRemoteVPReceived:0,oldRemoteAudioPacketsLost:0,oldRemoteVideoPacketsLost:0,diffVideoPacketsLost:0,oldRemoteAudioFractionLost:0,oldRemoteVideoFractionLost:0,diffAudioPacketsLost:0,localFrameWidth:0,localFrameHeight:0,remoteFrameWidth:0,remoteFrameHeight:0,oldFramesReceived:0,nowLocalFrameRate:0,oldLocalFrameRate:0,nowRemoteFrameRate:0,oldRemoteFrameRate:0,oldFramesSent:0},this.oldResult={},this.qualityResult={timestamp:void 0,svcId:this.context.channel.serviceId,chId:this.context.channel.id,type:"quality.middle",videoPacketsReceived:0,videoPacketsLoss:0,audioPacketsReceived:0,audioPacketsLoss:0,audioPacketsSent:0,videoPacketsSent:0,framesDecoded:0,insertedSamplesForDeceleration:0,removedSamplesForAcceleration:0},this.fractionLost={audio:[{rating:1,fromFractionLost:0,toFractionLost:50},{rating:2,fromFractionLost:51,toFractionLost:150},{rating:3,fromFractionLost:151,toFractionLost:250},{rating:4,fromFractionLost:251,toFractionLost:350},{rating:5,fromFractionLost:351,toFractionLost:9999999}],video:[{rating:1,fromFractionLost:0,toFractionLost:40},{rating:2,fromFractionLost:41,toFractionLost:55},{rating:3,fromFractionLost:56,toFractionLost:70},{rating:4,fromFractionLost:71,toFractionLost:90},{rating:5,fromFractionLost:91,toFractionLost:9999999}]}}stop(){this.statsReportTimer&&(window.clearInterval(this.statsReportTimer),this.statsReportTimer=null)}start(){m.i("Health is start w/interval:"+this.interval),this.statsReportTimer&&(window.clearInterval(this.statsReportTimer),this.statsReportTimer=null),this.statsReportTimer=window.setInterval(f.bind(this.getStats,this),this.interval)}getMaxRating(){var e=0,t=0;for(e=0;e<arguments.length;e++)arguments[e]>t&&(t=arguments[e]);return t}getRttRating(e){var t=0;return e>=1e3?t=5:e>=800?t=4:e>=600?t=3:e>=400?t=2:e<400&&(t=1),t}getVideoFractionLostRating(e){return e<40?1:e<55?2:e<70?3:e<90?4:5}getAudioFractionLostRating(e){return e<50?1:e<150?2:e<250?3:e<350?4:5}getFractionLostRating(e,t){var n=t;for(let t=0;t<n.length;t++)if(n[t].fromFractionLost<=e&&n[t].toFractionLost>=e)return n[t].rating;return 1}async getStats(){if("Safari"===h.name||"safari"===h.name);else if("Firefox"===h.name){let t,n,r,i=await this.context.peerConnection.getStats(null),o={};i.forEach(e=>{o[e.id]=e}),Object.keys(o).forEach(e=>{"inbound-rtp"===o[e].type?"audio"===o[e].kind?(this.qualityResult.audioPacketsReceived=o[e].packetsReceived,this.qualityResult.audioPacketsLoss=o[e].packetsLost,this.result.nowRemoteAPReceived=o[e].packetsReceived,this.result.nowRemoteABReceived=o[e].bytesReceived,this.result.remoteAudioPacketsLost=void 0!==this.result.remoteAudioPacketsLost?o[e].packetsLost-this.result.oldRemoteAudioPacketsLost:0,this.result.oldRemoteAudioPacketsLost=void 0!==this.result.oldRemoteAudioPacketsLost?o[e].packetsLost:0,this.result.diffAudioPacketsLost=this.result.remoteAudioPacketsLost>0?this.result.remoteAudioPacketsLost/(this.interval/1e3):0,this.result.diffRemoteAPReceived=(this.result.nowRemoteAPReceived-this.result.oldRemoteAPReceived)/(this.interval/1e3),this.result.remoteAudioFractionLost=void 0!==this.result.remoteAudioFractionLost?parseInt(this.result.diffAudioPacketsLost/(this.result.diffRemoteAPReceived+this.result.diffAudioPacketsLost)*255||0):0,this.result.oldRemoteAPReceived=this.result.nowRemoteAPReceived):(this.qualityResult.videoPacketsReceived=o[e].packetsReceived,this.qualityResult.videoPacketsLoss=o[e].packetsLost,this.qualityResult.framesDecoded=o[e].framesDecoded,this.result.nowRemoteVPReceived=o[e].packetsReceived,this.result.nowRemoteVBReceived=o[e].bytesReceived,this.result.remoteVideoPacketsLost=void 0!==this.result.remoteVideoPacketsLost?o[e].packetsLost-this.result.oldRemoteVideoPacketsLost:0,this.result.oldRemoteVideoPacketsLost=void 0!==this.result.oldRemoteVideoPacketsLost?o[e].packetsLost:0,this.result.diffVideoPacketsLost=this.result.remoteVideoPacketsLost>0?this.result.remoteVideoPacketsLost/(this.interval/1e3):0,this.result.diffRemoteVPReceived=(this.result.nowRemoteVPReceived-this.result.oldRemoteVPReceived)/(this.interval/1e3),this.result.remoteVideoFractionLost=void 0!==this.result.remoteVideoFractionLost?parseInt(this.result.diffVideoPacketsLost/(this.result.diffRemoteVPReceived+this.result.diffVideoPacketsLost)*255||0):0,this.result.oldRemoteVPReceived=this.result.nowRemoteVPReceived):"outbound-rtp"===o[e].type?"audio"===o[e].kind?(this.qualityResult.audioPacketsSent=o[e].packetsSent,this.result.nowLocalAPSent=o[e].packetsSent,this.result.nowLocalABSent=o[e].bytesSent,this.result.audioRtt=o[e].remoteId?o[o[e].remoteId].roundTripTime:0):(this.qualityResult.videoPacketsSent=o[e].packetsSent,this.result.nowLocalVPSent=o[e].packetsSent,this.result.nowLocalVBSent=o[e].bytesSent,this.result.videoRtt=o[e].remoteId?o[o[e].remoteId].roundTripTime:0):"candidate-pair"===o[e].type&&"succeeded"===o[e].state&&(t=o[e].selectedCandidatePairId,r=o[e].localCandidateId,n=o[e].remoteCandidateId,r&&n&&(this.result.localCandidate=o[r].candidateType,this.result.protocol=o[r].protocol,this.result.remoteCandidate=o[n].candidateType))}),this.result.remoteAudioFractionRating=f.getAudioFractionLostRating(this.result.remoteAudioFractionLost),this.result.remoteVideoFractionRating=f.getVideoFractionLostRating(this.result.remoteVideoFractionLost),this.result.fractionRating=this.result.remoteVideoFractionRating,this.result.audioRttRating=this.getRttRating(1e3*this.result.audioRtt),this.result.videoRttRating=this.getRttRating(1e3*this.result.videoRtt),this.result.rating=this.getMaxRating(this.result.audioRttRating,this.result.videoRttRating,this.result.remoteAudioFractionRating,this.result.remoteVideoFractionRating),this.context.eventManager.hasEventListener("onStat")&&this.context.eventManager.dispatchEvent("onStat",this.result),0==this.result.nowRemoteFrameRate&&0==this.result.oldRemoteFrameRate&&this.remoteVideo&&this.remoteStream&&this.context.signalingConnection.reduceVideoQuality();let a=this.context.signalingConnection.createMessage({command:"health",body:JSON.stringify(this.result)});(e={topic:"health"}).messages=this.result,e.messages.serviceId=this.context.serviceId,e.messages.pId=this.context.token,e.messages.chType=this.context.channel.type,e.messages.chId=this.context.channel.id,m.evt(JSON.stringify(e)),a&&(this.context.database||this.context.signalingConnection.send(JSON.stringify(a)))}else if("Chrome"===h.name||"Chrome Mobile"===h.name){let t,n,r,i=await this.context.peerConnection.getStats(null),o={},a="RTCTransport_0_1";this.oldResult={...this.result},i.forEach(e=>{"transport"===e.type&&(a=e.id),o[e.id]=e}),o[a]&&o[a].selectedCandidatePairId&&(t=o[a].selectedCandidatePairId,n=o[t].localCandidateId,r=o[t].remoteCandidateId),n&&r&&(this.result.localCandidate=o[n].candidateType,this.result.localNetworkType=o[n].networkType,this.result.protocol=o[n].protocol,this.result.remoteCandidate=o[r].candidateType),Object.keys(o).forEach(e=>{"inbound-rtp"===o[e].type?"audio"===o[e].kind?(this.qualityResult.audioPacketsReceived=o[e].packetsReceived,this.qualityResult.audioPacketsLoss=o[e].packetsLost,this.result.nowRemoteAPReceived=o[e].packetsReceived,this.result.nowRemoteABReceived=o[e].bytesReceived,this.result.remoteAudioPacketsLost=void 0!==this.result.remoteAudioPacketsLost?o[e].packetsLost-this.result.oldRemoteAudioPacketsLost:0,this.result.oldRemoteAudioPacketsLost=void 0!==this.result.oldRemoteAudioPacketsLost?o[e].packetsLost:0,this.result.diffAudioPacketsLost=this.result.remoteAudioPacketsLost>0?this.result.remoteAudioPacketsLost/(this.interval/1e3):0,this.result.diffRemoteAPReceived=(this.result.nowRemoteAPReceived-this.result.oldRemoteAPReceived)/(this.interval/1e3),this.result.remoteAudioFractionLost=void 0!==this.result.remoteAudioFractionLost?parseInt(this.result.diffAudioPacketsLost/(this.diffRemoteAPReceived+this.result.diffAudioPacketsLost)*255||0):0,this.result.oldRemoteAPReceived=this.result.nowRemoteAPReceived,this.result.remoteAudioCodec=o[o[e].codecId]?o[o[e].codecId].mimeType:""):(this.qualityResult.videoPacketsReceived=o[e].packetsReceived,this.qualityResult.videoPacketsLoss=o[e].packetsLost,this.qualityResult.framesDecoded=o[e].framesDecoded,this.result.nowRemoteVPReceived=o[e].packetsReceived,this.result.nowRemoteVBReceived=o[e].bytesReceived,this.result.remoteVideoPacketsLost=void 0!==this.result.remoteVideoPacketsLost?o[e].packetsLost-this.result.oldRemoteVideoPacketsLost:0,this.result.oldRemoteVideoPacketsLost=void 0!==this.result.oldRemoteVideoPacketsLost?o[e].packetsLost:0,this.result.diffVideoPacketsLost=this.result.remoteVideoPacketsLost>0?this.result.remoteVideoPacketsLost/(this.interval/1e3):0,this.result.diffRemoteVPReceived=(this.result.nowRemoteVPReceived-this.result.oldRemoteVPReceived)/(this.interval/1e3),this.result.remoteVideoFractionLost=void 0!==this.result.remoteVideoFractionLost?parseInt(this.result.diffVideoPacketsLost/(this.result.diffRemoteVPReceived+this.result.diffVideoPacketsLost)*255||0):0,this.result.oldRemoteVPReceived=this.result.nowRemoteVPReceived,this.result.remoteVideoCodec=o[o[e].codecId]?o[o[e].codecId].mimeType:""):"outbound-rtp"===o[e].type?"audio"===o[e].kind?(this.qualityResult.audioPacketsSent=o[e].packetsSent,this.result.nowLocalAPSent=o[e].packetsSent,this.result.nowLocalABSent=o[e].bytesSent,this.result.localAudioCodec=o[o[e].codecId].mimeType,this.result.audioRtt=o["RTCRemoteInboundRtpAudioStream_"+`${o[e].ssrc}`]?o["RTCRemoteInboundRtpAudioStream_"+`${o[e].ssrc}`].roundTripTime:0):(this.qualityResult.videoPacketsSent=o[e].packetsSent,this.result.nowLocalVPSent=o[e].packetsSent,this.result.nowLocalVBSent=o[e].bytesSent,this.result.localVideoCodec=o[o[e].codecId].mimeType,this.result.videoRtt=o["RTCRemoteInboundRtpVideoStream_"+`${o[e].ssrc}`]?o["RTCRemoteInboundRtpVideoStream_"+`${o[e].ssrc}`].roundTripTime:0):"track"===o[e].type&&(!0===o[e].remoteSource?"audio"===o[e].kind?(this.qualityResult.insertedSamplesForDeceleration=o[e].insertedSamplesForDeceleration,this.qualityResult.removedSamplesForAcceleration=o[e].removedSamplesForAcceleration,this.result.remoteAudioLevel=o[e].audioLevel,this.result.remoteTotalAudioEnergy=o[e].totalAudioEnergy):(this.result.remoteFrameWidth=o[e].frameWidth,this.result.remoteFrameHeight=o[e].frameHeight,o[e].framesReceived&&(this.result.nowRemoteFrameRate=(o[e].framesReceived-this.result.oldFramesReceived)/(this.interval/1e3)),this.result.oldFramesReceived=o[e].framesReceived,this.result.oldRemoteFrameRate=this.result.nowRemoteFrameRate):"audio"===o[e].kind?(this.result.localAudioLevel=o[o[e].mediaSourceId].audioLevel,this.result.localTotalAudioEnergy=o[o[e].mediaSourceId].totalAudioEnergy):(this.result.localFrameWidth=o[e].frameWidth,this.result.localFrameHeight=o[e].frameHeight,o[e].framesSent&&(this.result.nowLocalFrameRate=(o[e].framesSent-this.result.oldFramesSent)/(this.interval/1e3)),this.result.oldFramesSent=o[e].framesSent,this.result.oldLocalFrameRate=this.result.nowLocalFrameRate))}),this.result.remoteAudioFractionRating=f.getAudioFractionLostRating(this.result.remoteAudioFractionLost),this.result.remoteVideoFractionRating=f.getVideoFractionLostRating(this.result.remoteVideoFractionLost),this.result.fractionRating=this.result.remoteVideoFractionRating,this.result.audioRttRating=this.getRttRating(1e3*this.result.audioRtt),this.result.videoRttRating=this.getRttRating(1e3*this.result.videoRtt),this.result.rating=this.getMaxRating(this.result.audioRttRating,this.result.videoRttRating,this.result.remoteAudioFractionRating,this.result.remoteVideoFractionRating),this.context.eventManager.hasEventListener("onStat")&&this.context.eventManager.dispatchEvent("onStat",this.result),0==this.result.nowRemoteFrameRate&&0==this.result.oldRemoteFrameRate&&this.remoteVideo&&this.remoteStream&&this.context.signalingConnection.reduceVideoQuality();let s=this.context.signalingConnection.createMessage({command:"health",body:JSON.stringify(this.result)});var e;(e={topic:"health"}).messages=this.result,e.messages.serviceId=this.context.serviceId,e.messages.pId=this.context.token,e.messages.chType=this.context.channel.type,e.messages.chId=this.context.channel.id,m.evt(JSON.stringify(e)),s&&(this.context.database||this.context.signalingConnection.send(JSON.stringify(s)))}this.qualityResult.timestamp=(new Date).getTime(),m.qualityLog(this.qualityResult)}}class R{constructor(e){this.context=e,this.config=e.config,this.interval=6e4,this.mixerAliveTimer}stopCheck(){this.mixerAliveTimer&&(window.clearInterval(this.mixerAliveTimer),this.mixerAliveTimer=null)}startCheck(){m.i("Mixer starts checking getAlive w/interval:"+this.interval),this.mixerAliveTimer&&(window.clearInterval(this.mixerAliveTimer),this.mixerAliveTimer=null),this.mixerAliveTimer=window.setInterval(f.bind(this.getAlive,this),this.interval)}async mixerCreate(e){try{let t=await fetch("https://mixer.remotemonster.com/api/v1/mixer",{method:"POST",headers:new Headers({Authorization:`Basic ${btoa(`${this.config.credential.serviceId}:${this.config.credential.key}`)}`,"Content-Type":"application/json; charset=UTF-8"}),body:JSON.stringify(e)}),n=await t.json();if(n.error)return void(this.context.eventManager.hasEventListener("onError")&&this.context.eventManager.dispatchEvent("onError","mixer:"+n.error.message));n.instanceId&&(this.context.mixerInstanceId=n.instanceId,this.context.mixer.startCheck())}catch(e){this.context.eventManager.hasEventListener("onError")&&this.context.eventManager.dispatchEvent("onError","mixer: unknown error")}}async mixerUpdate(e){if(!this.context.mixerInstanceId)return!1;try{let t=await fetch(`https://mixer.remotemonster.com/api/v1/mixer/${this.context.mixerInstanceId}`,{method:"PUT",headers:new Headers({Authorization:`Basic ${btoa(`${this.config.credential.serviceId}:${this.config.credential.key}`)}`,"Content-Type":"application/json; charset=UTF-8"}),body:JSON.stringify(e)});if(!t.ok){if(503!=t.status){let e=await t.json();e.error&&this.context.eventManager.hasEventListener("onError")&&this.context.eventManager.dispatchEvent("onError","mixer:"+e.error.message)}return!1}return!0}catch(e){this.context.eventManager.hasEventListener("onError")&&this.context.eventManager.dispatchEvent("onError","mixer: unknown error")}return!1}async mixerDelete(){if(this.context.mixerInstanceId)try{let e=await fetch(`https://mixer.remotemonster.com/api/v1/mixer/${this.context.mixerInstanceId}`,{method:"DELETE",headers:new Headers({Authorization:`Basic ${btoa(`${this.config.credential.serviceId}:${this.config.credential.key}`)}`,"Content-Type":"application/json; charset=UTF-8"})});if(!e.ok){let t=await e.json();t.error&&this.context.eventManager.hasEventListener("onError")&&this.context.eventManager.dispatchEvent("onError","mixer:"+t.error.message)}}catch(e){this.context.eventManager.hasEventListener("onError")&&this.context.eventManager.dispatchEvent("onError","mixer: unknown error")}}async getAlive(){try{let e=await fetch(`https://mixer.remotemonster.com/api/v1/mixer/${this.context.mixerInstanceId}/alive`,{method:"GET",headers:new Headers({Authorization:`Basic ${btoa(`${this.config.credential.serviceId}:${this.config.credential.key}`)}`,"Content-Type":"application/json; charset=utf-8"})});if(!e.ok&&503!=e.status){let t=await e.json();t.error&&this.context.eventManager.hasEventListener("onError")&&this.context.eventManager.dispatchEvent("onError","mixer:"+t.error.message)}}catch(e){this.context.eventManager.hasEventListener("onError")&&this.context.eventManager.dispatchEvent("onError","mixer: unknown error")}}}function E({context:e,media:t,config:n}){function r(t){let n;m.g("PeerCon: Bind remote stream"),m.v("bindRemoteStream:",t),e.hasAddTrack?(m.v("PeerCon: context has track"),e.remoteStream?(e.remoteStream.addTrack(t.track),n=e.remoteStream):(e.remoteStream=new MediaStream,e.remoteStream.addTrack(t.track),e.useVideo||(n=e.remoteStream))):(m.v("PeerCon: context has stream"),n=t.stream,e.remoteStream=n),e.useRecord&&!e.remoteRecorder&&n&&(console.log("record is start"),e.remoteRecorder=new v(e,n,"RR"),e.remoteRecorder.start(),e.localRecorder.start()),m.gEnd()}e.peerConnection.onicecandidate=function(t){m.i("PeerCon: HandleICECandidateEvent"),m.d("Event:",t),m.d("-> Candidate:",t.candidate);const r=e.signalingConnection.createMessage({command:"ice",body:JSON.stringify(t.candidate)});if(t.candidate){m.d("Message ->: ",r),"BROADCAST"===e.channel.type&&(r.channel.type="BROADCAST"),void 0!==r&&(n.rtc.selectiveCandidate?"default"===n.rtc.selectiveCandidate.mode?e.signalingConnection.send(JSON.stringify(r)):"auto"!==n.rtc.selectiveCandidate.mode||"relay"!==t.candidate.type&&"srflx"!==t.candidate.type?"relay"===n.rtc.selectiveCandidate.mode&&"relay"===t.candidate.type?e.signalingConnection.send(JSON.stringify(r)):"route"===n.rtc.selectiveCandidate.mode&&"srflx"===t.candidate.type&&e.signalingConnection.send(JSON.stringify(r)):e.signalingConnection.send(JSON.stringify(r)):e.signalingConnection.send(JSON.stringify(r)));const i={topic:"log",messages:{log:"iceType:local "+t.candidate,logLevel:"info",sdkVersion:e.sdkVersion,svcId:e.serviceId,pId:e.token,chId:e.channel.id}};m.evt(JSON.stringify(i))}},e.peerConnection.onicegatheringstatechange=function(){m.i("PeerCon: Handle ice gathering state event"),m.d(`Event: ${e.peerConnection.iceGatheringState}:`,event)},e.peerConnection.onsignalingstatechange=function(t){switch(m.i("PeerCon: Handle signaling state change event"),m.d(`Event: ${e.peerConnection.signalingState}:`,t),e.peerConnection.signalingState){case"stable":e.endTime=(new Date).getTime(),e.eventManager.hasEventListener("onAddRemoteStream")&&e.eventManager.dispatchEvent("onAddRemoteStream",e.remoteStream);break;case"have-local-offer":case"have-remote-offer":case"have-local-pranswer":case"have-remote-pranswer":case"closed":break;default:m.e("Unknown signaling state event:",e.peerConnection.signalingState)}},e.peerConnection.onnegotiationneeded=function(e){m.w("PeerCon: Handle negotiation needed event"),m.w("Event:",e)},e.peerConnection.oniceconnectionstatechange=function(t){let r;switch(m.i("PeerCon: Handle ICE state change event"),m.i(`Event: ${e.peerConnection.iceConnectionState}:`,t),e.peerConnection.iceConnectionState){case"connected":if(m.i("ice State:connected"),e.eventManager.hasEventListener("onStateChange")&&e.eventManager.dispatchEvent("onStateChange","COMPLETE"),e.eventManager.hasEventListener("onComplete")&&e.eventManager.dispatchEvent("onComplete"),e.state="COMPLETE",r=e.signalingConnection.createMessage({command:"stateChange",body:"COMPLETE"}),e.peerConnection.__proto__.hasOwnProperty("getTransceivers")&&(e.audioTransceiver=e.peerConnection.getTransceivers()[0],e.useVideo&&e.peerConnection.getTransceivers().length>1&&(e.videoTransceiver=e.peerConnection.getTransceivers()[1])),e.remoteVideo&&e.remoteStream&&(e.remoteVideo.srcObject=e.remoteStream),!e.health||null===e.health.statsReportTimer){var i=new S(e);i.start(),e.health=i}if(n.mixer&&"BROADCAST"===e.channel.type){if(n.mixer.resolution){let e=n.mixer.resolution.split("x");n.mixer.width=Number(e[0]),n.mixer.height=Number(e[1]),delete n.mixer.resolution}n.mixer.sources&&n.mixer.sources.forEach((t,n,r)=>{"remon"==t.type&&(t.remon={serviceId:e.serviceId,key:e.key,chid:e.channel.id})}),e.mixer=new R(e),e.mixer.mixerCreate(n.mixer)}break;case"failed":m.i("ice State:failed"),m.errorEvt(e,"1001","ice state is failed"),e.eventManager.hasEventListener("onError")&&e.eventManager.dispatchEvent("onError","4245","ICEFailed"),"COMPLETE"===e.state||e.qualityChecker||(e.qualityChecker=new y(e),e.qualityChecker.check());break;case"closed":return m.i("ice State:closed"),this.context.eventManager.hasEventListener("onError")&&this.context.eventManager.dispatchEvent("onError","4343","ICEClosed"),e.eventManager.hasEventListener("onClose")&&e.eventManager.dispatchEvent("onClose",{message:"ICEClosed",closeType:"UNKNOWN"}),void("CLOSE"!==e.state&&function(){e.health&&e.health.stop();if(!e.peerConnection)return;e.peerConnection.close();if(!e.signalingConnection)return;e.signalingConnection.close();e.state="CLOSE",e.useRecord&&e.remoteRecorder&&(e.remoteRecorder.stop(),e.remoteRecorder=null);e.useRecord&&e.localRecorder&&(e.localRecorder.stop(),e.localRecorder=null,e.useRecord=!1);e.remoteVideo.srcObject&&e.remoteVideo.srcObject.getTracks().forEach(e=>e.stop());e.remoteVideo&&(e.remoteVideo.srcObject=null);e.hasAddTrack?e.peerConnection.ontrack=null:e.peerConnection.onaddstream=null;e.peerConnection.onremovestream=null,e.peerConnection.onicecandidate=null,e.peerConnection.oniceconnectionstatechange=null,e.peerConnection.onsignalingstatechange=null,e.peerConnection.onicegatheringstatechange=null,e.peerConnection.onnegotiationneeded=null,e.peerConnection=null}());case"disconnected":{m.i("ice State:disconnected");let t=e.eventManager.hasEventListener("onError");t&&e.eventManager.dispatchEvent("onError","4344","ICEDisconnected"),"P2P"===e.channel.type&&setTimeout(()=>{"connected"!==e.peerConnection.iceConnectionState?(t&&e.eventManager.dispatchEvent("onError","4343","ICEDisconnected After 3 seconds"),e.eventManager.hasEventListener("onClose")&&e.eventManager.dispatchEvent("onClose",{message:"ICEDisconnected",closeType:"UNKNOWN"})):t&&e.eventManager.dispatchEvent("onError","4345","ICEDisconnected but Connected in 3 seconds")},3e3);break}case"completed":m.v("iceconState:completed");break;case"checking":m.v("iceconState:checking");break;default:m.e("Unknown ice connection change event:",e.peerConnection.iceConnectionState)}m.v("Message ->:",r),m.i("Sending ice state to other"),void 0!==r&&e.signalingConnection.send(JSON.stringify(r))},e.peerConnection.onicecandidateerror=function(t){m.i("PeerCon: Handle ICE candidate error event",t),m.errorEvt(e,"1001",`ICE candidate error event occured hostCandidate : ${t.hostCandidate} url : ${t.url} errorCode: ${t.errorCode} errorText ${t.errorText}`)},e.hasAddTrack?(m.i("PeerCon: context has addTrack"),e.peerConnection.ontrack=r):(m.i("PeerCon: context has onAddstream"),e.peerConnection.onaddstream=r),e.peerConnection.onremovestream=function(e){m.v("PeerCon: Handle remove stream event")}}var T,b="object"==typeof Reflect?Reflect:null,x=b&&"function"==typeof b.apply?b.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};T=b&&"function"==typeof b.ownKeys?b.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var k=Number.isNaN||function(e){return e!=e};function P(){P.init.call(this)}var w=P;P.EventEmitter=P,P.prototype._events=void 0,P.prototype._eventsCount=0,P.prototype._maxListeners=void 0;var M=10;function L(e){return void 0===e._maxListeners?P.defaultMaxListeners:e._maxListeners}function O(e,t,n,r){var i,o,a,s;if("function"!=typeof n)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof n);if(void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),a=o[t]),void 0===a)a=o[t]=n,++e._eventsCount;else if("function"==typeof a?a=o[t]=r?[n,a]:[a,n]:r?a.unshift(n):a.push(n),(i=L(e))>0&&a.length>i&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function I(){for(var e=[],t=0;t<arguments.length;t++)e.push(arguments[t]);this.fired||(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,x(this.listener,this.target,e))}function _(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=I.bind(r);return i.listener=n,r.wrapFn=i,i}function D(e,t,n){var r=e._events;if(void 0===r)return[];var i=r[t];return void 0===i?[]:"function"==typeof i?n?[i.listener||i]:[i]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(i):j(i,i.length)}function A(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function j(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}function F(e,t,n,r){let i,o,a=n,s=!0;function c(){if(a<=0)return r("timeout",null),void(s=!1);m.i("try connect signaling. remainRetries:"+a),o=new WebSocket(e),o.onopen=()=>{clearTimeout(i),r(null,o),s=!1},o.onerror=()=>{},o.onclose=()=>{},i=setTimeout(()=>{o.onerror=null,o.onclose=null,o.close(),clearTimeout(i),setTimeout(()=>{a--,c()},0)},t)}return c(),{cancel:function(){!1!==s&&(o.onerror=null,o.onclose=null,o.close(),clearTimeout(i),r("cancel",null))}}}Object.defineProperty(P,"defaultMaxListeners",{enumerable:!0,get:function(){return M},set:function(e){if("number"!=typeof e||e<0||k(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");M=e}}),P.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},P.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||k(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},P.prototype.getMaxListeners=function(){return L(this)},P.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var r="error"===e,i=this._events;if(void 0!==i)r=r&&void 0===i.error;else if(!r)return!1;if(r){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var s=i[e];if(void 0===s)return!1;if("function"==typeof s)x(s,this,t);else{var c=s.length,d=j(s,c);for(n=0;n<c;++n)x(d[n],this,t)}return!0},P.prototype.addListener=function(e,t){return O(this,e,t,!1)},P.prototype.on=P.prototype.addListener,P.prototype.prependListener=function(e,t){return O(this,e,t,!0)},P.prototype.once=function(e,t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t);return this.on(e,_(this,e,t)),this},P.prototype.prependOnceListener=function(e,t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t);return this.prependListener(e,_(this,e,t)),this},P.prototype.removeListener=function(e,t){var n,r,i,o,a;if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t);if(void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(i=-1,o=n.length-1;o>=0;o--)if(n[o]===t||n[o].listener===t){a=n[o].listener,i=o;break}if(i<0)return this;0===i?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,i),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit("removeListener",e,a||t)}return this},P.prototype.off=P.prototype.removeListener,P.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var i,o=Object.keys(n);for(r=0;r<o.length;++r)"removeListener"!==(i=o[r])&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=0;r--)this.removeListener(e,t[r]);return this},P.prototype.listeners=function(e){return D(this,e,!0)},P.prototype.rawListeners=function(e){return D(this,e,!1)},P.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):A.call(e,t)},P.prototype.listenerCount=A,P.prototype.eventNames=function(){return this._eventsCount>0?T(this._events):[]};class N extends w{constructor({url:e,context:t}){super(),m.init(t),this.wsUrl=e,this.connectTimeoutMs=1e3,this.connectRetries=5,this.context=t,this.ws=null,this.connector,this.onMessageHandler=null,this.context.isConnectToSignal=!1,this.needReconnect=!1}connect(){m.i("Signaling: Connect"),this.context.isConnectToSignal=!1,this.connector=F(this.wsUrl,this.connectTimeoutMs,this.connectRetries,(e,t)=>{if(e)return console.log("websocket connection fail. error:"+e),void("timeout"===e&&this.emit("disconnect"));this.ws=t,this.ws.onmessage=this.onMessageHandler,this.ws.onopen=null,this.ws.onclose=this.handleCloseEvent.bind(this),this.ws.onerror=this.handleErrorEvent.bind(this),!1===this.needReconnect?(m.i("Signaling: Success connect to the signaling server"),m.v("OpenEvent:",event),this.context.isConnectToSignal=!0,this.context.eventManager.hasEventListener("onInit")&&this.context.eventManager.dispatchEvent("onInit",this.context.token),this.context.eventManager.hasEventListener("onStateChange")&&this.context.eventManager.dispatchEvent("onStateChange","INIT"),this.emit("connect")):(m.i("Signaling: Success re-connect to the signaling server"),m.v("Re-OpenEvent:",event),this.context.isConnectToSignal=!0,this.emit("reconnect")),this.needReconnect=!0})}send(...e){if(null!==this.ws&&void 0!==this.ws)try{this.ws.send(...e)}catch(e){}}setDisconnectHandler(){this.context.channel.type}close(){if(this.connector&&this.connector.cancel(),this.needReconnect=!1,null!==this.ws&&void 0!==this.ws){if(this.ws.readyState===WebSocket.OPEN){const e=this.createMessage({command:"disconnect"});m.v("DisconnectCh Message ->:",e),this.send(JSON.stringify(e)),console.log("DisconnectCh:"+JSON.stringify(e)+" "+this.ws.readyState)}this.ws.close(),delete this.ws}}onOffline(){!1!==this.needReconnect&&(this.ws&&(this.ws.onclose=null,this.ws.onerror=null,this.ws.close(),delete this.ws),this.connect())}onMessage(e){this.onMessageHandler=e}handleCloseEvent(e){m.i("Signaling: Closed the signaling connection"),m.v("Event:",e),this.context.isConnectToSignal=!1,this.needReconnect&&this.connect()}handleErrorEvent(e){m.e("Signaling: Error from the signaling connection."),m.e("Event",e)}createMessage({command:e,body:t}){m.d("Signaling: Create Message %j",t);const n={command:e,token:this.context.token,serviceId:this.context.serviceId,channel:{id:this.context.channel.id,name:this.context.channel.name,type:this.context.channel.type}};return t&&(n.body=t),m.v("createMessage: "+JSON.stringify(n)),n}connectChannel(e){m.i("Signaling: Connect channel: As a caller"),this.context.startTime=(new Date).getTime(),this.context.isCaller=!0,this.context.channel.id=e;const t=this.createMessage({command:"connect"});m.v("ConnectCh Message ->:",t),this.send(JSON.stringify(t))}reconnectChannel(){m.i("Signaling: re-connect channel:");const e=this.createMessage({command:"reconnect"});m.i("Re-Connect Ch Message ->:",e),this.send(JSON.stringify(e))}createViewerChannel(e){m.i("Signaling: Create channel: As a viewer"),this.context.startTime=(new Date).getTime(),this.context.isCaller=!1,this.context.channel.id=e;const t=this.createMessage({command:"create"});t.channel.type="VIEWER",t.channel.id=e,m.v("ConnectCh Message ->:",t),this.send(JSON.stringify(t))}createConferenceRoom(e){m.i("SignalingConnection.js:createConferenceRoom"),this.context.startTime=(new Date).getTime(),this.context.isCaller=!1;const t=this.createMessage({command:"create"});t.roomId=e,t.channel.type="ROOM",t.channel.videoCodec=this.context.videoCodec,t.channel.audioCodec=this.context.audioCodec,t.channel.simulcast=this.context.simulcast,m.v("SignalingConnection.js:createConferenceRoom:ConnectCh Message ->:",t),m.i("SignalingConnection.js:createConferenceRoom:room id: "+this.context.channel.id),this.send(JSON.stringify(t))}createBroadcastChannel(e){m.i("Signaling: Create channel: As a presenter"),this.context.startTime=(new Date).getTime(),this.context.isCaller=!1,this.context.channel.id=this.context.channel.name=e;const t=this.createMessage({command:"create"});t.channel.type="BROADCAST",t.channel.videoCodec=this.context.videoCodec,t.channel.audioCodec=this.context.audioCodec,t.channel.simulcast=this.context.simulcast,t.channel.id=e,m.v("ConnectCh Message ->:",t),m.i("channel id: "+this.context.channel.id),this.send(JSON.stringify(t))}disconnectChannel(){m.i("Signaling: Close channel:");const e=this.createMessage({command:"disconnect"});m.v("DisconnectCh Message ->:",e),this.send(JSON.stringify(e))}setSimulcastPriority(e){m.i("Signaling: Set Simulcast Priority",e);const t=this.createMessage({command:"switchStream",body:e});this.context.currentSimulcast=e,t.channel.type="VIEVER",t.channel.id=this.context.channel.id,m.v("SetSimulcastPriority Message ->:",t),this.send(JSON.stringify(t))}reduceVideoQuality(){let e=this.context.currentSimulcast;if("HIGH"===e)e="MEDIUM";else{if("MEDIUM"!==e)return;e="LOW"}this.setSimulcastPriority(e)}isOpened(){return this.context.isConnectToSignal}}function V({context:e,media:t,config:n}){const r={async onCreate(t){switch(m.i("Signaling: On create channel"),e.isCaller=!1,t.code){case"500":e.eventManager.dispatchEvent("onError","Signaling: 500 Error");break;case"502":e.eventManager.dispatchEvent("onError","Signaling: 502 Error: Unknown token");break;case"530":e.eventManager.dispatchEvent("onError","Signaling: 530 Error: No media server");break;default:m.i("Signaling:",t.code)}e.eventManager.hasEventListener("onStateChange")&&e.eventManager.dispatchEvent("onStateChange","WAIT"),t.channel||e.eventManager.hasEventListener("onError")&&e.eventManager.dispatchEvent("onError","ConnectChannelFailedError"),e.channel=t.channel,m.i("Channel id:",e.channel.id),m.i("Channel type: ",e.channel.type),!0!==n.media.recvonly&&(m.d("try to create local stream"),await e.mediaManager.createLocalStream(e,n.media),e.mediaManager.bindLocalStreamToPeerConnection(e.peerConnection),m.i("success to create and bind local stream to pc")),e.eventManager.hasEventListener("onCreateChannel")&&e.eventManager.dispatchEvent("onCreateChannel",e.channel.id),e.eventManager.hasEventListener("onConnect")&&"P2P"===e.channel.type&&e.eventManager.dispatchEvent("onConnect",e.channel.id),!e.eventManager.hasEventListener("onCreate")||"BROADCAST"!==e.channel.type&&"ROOM"!==e.channel.type?e.eventManager.hasEventListener("onJoin")&&"VIEWER"===e.channel.type&&e.eventManager.dispatchEvent("onJoin",e.channel.id):e.eventManager.dispatchEvent("onCreate",e.channel.id),"BROADCAST"===e.channel.type||"ROOM"===e.channel.type?function(){let t={offerToReceiveAudio:!1,offerToReceiveVideo:!1};"music"===n.rtc.audioType&&(t.voiceActivityDetection=!1);if("BROADCAST"===e.channel.type&&"Firefox"===h.name&&e.simulcast){const t=1;let n=e.peerConnection.getSenders()[t];n.getParameters();n.setParameters({encodings:[{rid:"high",active:!0,priority:"high",maxBitrate:25e5},{rid:"medium",active:!0,priority:"medium",maxBitrate:5e5},{rid:"low",active:!0,priority:"low",maxBitrate:1e5}]}).then(()=>{console.log(e.peerConnection.getSenders()[t].getParameters())})}e.peerConnection.createOffer(t).then(o).catch(t=>{m.e("PeerConnection: Create offer failed:",t),m.errorEvt(e,"1009","create offer is failed:"+t),e.eventManager.hasEventListener("onError")&&e.eventManager.dispatchEvent("onError","ICEFailedError")})}():"VIEWER"===e.channel.type&&function(){m.i("createViewerOffer is called "+h.name);e.peerConnection.createOffer({offerToReceiveAudio:1,offerToReceiveVideo:1}).then(i).catch(t=>{m.e("PeerConnection: Create offer failed:",t),m.errorEvt(e,"1009","create offer is failed:"+t),e.eventManager.hasEventListener("onError")&&e.eventManager.dispatchEvent("onError","ICEFailedError")})}()},async onConnect(t){if(m.i("Signaling: On connect channel"),e.isCaller=!0,e.channel=t.channel,e.state="CONNECT",m.i("Channel id:",e.channel.id),m.d("Channel type: ",e.channel.type),m.d("isCaller: true"),e.eventManager.hasEventListener("onStateChange")&&e.eventManager.dispatchEvent("onStateChange","CONNECT"),!t.channel)return void(e.eventManager.hasEventListener("onError")&&e.eventManager.dispatchEvent("onError","ConnectChannelFailedError"));!0!==n.media.recvonly&&(m.d("try to create local stream"),await e.mediaManager.createLocalStream(e,n.media),e.mediaManager.bindLocalStreamToPeerConnection(e.peerConnection),m.i("success to create and bind local stream to pc")),e.eventManager.hasEventListener("onConnectChannel")&&e.eventManager.dispatchEvent("onConnectChannel",e.channel.id);e.peerConnection.createOffer({offerToReceiveAudio:1,offerToReceiveVideo:1}).then(o).catch(t=>{if(m.e("PeerConnection: Create offer failed:",t),m.errorEvt(e,"4231","Create offer failed:"+t),e.eventManager.hasEventListener("onError"))return e.eventManager.dispatchEvent("onError","ICEFailedError"),void e.eventManager.dispatchEvent("onError","4231","Create offer failed :"+t)})},onReconnect(t){m.i("Signaling: On re-connect channel"),e.eventManager.hasEventListener("onReconnect")&&e.eventManager.dispatchEvent("onReconnect",t.body)},onSdp(t){m.i("Signaling: On sdp");const r=new RTCSessionDescription(JSON.parse(t.body));var i={topic:"log",messages:{log:"sdpType:"+r.type+" "+t.body,logLevel:"info",sdkVersion:e.sdkVersion,svcId:e.serviceId,pId:e.token,chId:e.channel.id}};m.evt(JSON.stringify(i)),m.d("-> Remote Description:",r),e.videoBandwidth&&"Safari"!==h.name&&"safari"!==h.name&&(r.sdp=f.setMediaBitrate(r.sdp,"video",e.videoBandwidth)),"music"===n.rtc.audioType&&"Safari"!==h.name&&"safari"!==h.name&&(r.sdp=function(e){return e.replace("a=rtpmap:111 opus/48000/2","a=rtpmap:111 opus/48000/2\na=fmtp:111 maxaveragebitrate=128000;stereo=1;cbr=1")}(r.sdp)),e.peerConnection.setRemoteDescription(r).then(()=>{m.i("Remote Description Setted")}).catch(t=>{if(m.e("PeerConnection: Remote description set failed:",t),m.errorEvt(e,"1009","set remote sdp is failed:"+t),e.eventManager.hasEventListener("onError"))return e.eventManager.dispatchEvent("onError","ICEFailedError"),void e.eventManager.dispatchEvent("onError","4233","set remote sdp is failed")}),m.d("Am I a caller?:",e.isCaller),m.d("channel info?:",e.channel),e.isCaller||"offer"!==r.type||(m.i("Create answer"),e.peerConnection.createAnswer().then(o).catch(t=>{m.e("PeerConnection: Create Answer failed:",t),e.eventManager.hasEventListener("onError")&&e.eventManager.dispatchEvent("onError","ICEFailedError")}))},async onDisconnectChannel(t){m.i("Signaling: onDisconnectChannel"),await a(),e.eventManager.hasEventListener("onDisconnectChannel")&&e.eventManager.dispatchEvent("onDisconnectChannel",t.body),e.eventManager.hasEventListener("onClose")&&e.eventManager.dispatchEvent("onClose",{message:t.body,closeType:"OTHER"})},onRoomEvent(t){m.i("Signaling: onRoomEvent:"+t.body),e.eventManager.hasEventListener("onRoomEvent")&&e.eventManager.dispatchEvent("onRoomEvent",{event:t.body,channel:t.channel})},ping(t){t.command="pong",e.signalingConnection.send(JSON.stringify(t))},onStateChange(t){if(C.includes(t.body)){if(t.body===e.state)return;switch(e.state=t.body,e.eventManager.hasEventListener("onStateChange")&&e.eventManager.dispatchEvent("onStateChange",t.body),t.body){case"INIT":m.i(">STATE:INIT");break;case"WAIT":m.i(">STATE:WAIT");break;case"CONNECT":m.i(">STATE:CONNECT");break;case"COMPLETE":m.i(">STATE:COMPLETE"),e.eventManager.hasEventListener("onStateChange")&&e.eventManager.dispatchEvent("onStateChange","COMPLETE"),e.eventManager.hasEventListener("onComplete")&&e.eventManager.dispatchEvent("onComplete");var n={topic:"log",messages:{log:"IceConnectionState: CONNECTED",logLevel:"info",os:h.os.family,osVersion:h.os.version||"0",device:h.name,deviceVersion:h.version||"0",networkType:Navigator.connection,svcId:e.serviceId,pId:e.token,sdkVersion:e.sdkVersion,status:"COMPLETE",chId:e.channel.id}};m.evt(JSON.stringify(n));break;case"CLOSE":m.i(">STATE:CLOSE"),a(),e.eventManager.hasEventListener("onStateChange")&&e.eventManager.dispatchEvent("onStateChange","CLOSE"),e.eventManager.hasEventListener("onError")&&e.eventManager.dispatchEvent("onError","4241","Disconnected from Signal Server"),e.eventManager.hasEventListener("onClose")&&e.eventManager.dispatchEvent("onClose",{closeType:"OTHER_UNEXPECTED"});break;case"FAIL":m.i(">STATE:FAIL"),a(),e.eventManager.hasEventListener("onError")&&e.eventManager.dispatchEvent("onError","ICEFailedError")}}else m(m.e("Unknown signaling state:"+t.body));m.gEnd()},onIce(t){const n=new RTCIceCandidate(JSON.parse(t.body));m.d("Candidate:",JSON.stringify(n));var r={topic:"log",messages:{log:"iceType:remote "+t.body,logLevel:"info",sdkVersion:e.sdkVersion,svcId:e.serviceId,pId:e.token,chId:e.channel.id}};m.evt(JSON.stringify(r)),e.peerConnection.addIceCandidate(n).then(()=>{m.d("Add ICE candidate success")}).catch(t=>{m.e("Peer Connection: Add ICE candidate failed",t),m.errorEvt(e,"1001","add ice candidate failed:"+t),e.eventManager.hasEventListener("onError")&&(e.eventManager.dispatchEvent("onError","ICEFailedError"),e.eventManager.dispatchEvent("onError","4246","add ice candidate failed"))})},onMessage(t){m.d("Signaling: On message: "+t.body),e.eventManager.hasEventListener("onMessage")&&e.eventManager.dispatchEvent("onMessage",t.body)},onSearch(t){m.d("Signaling: On search: "+t.body),e.eventManager.hasEventListener("onSearch")&&e.eventManager.dispatchEvent("onSearch",t.body)},ack(e){},onError(t){m.e("Signaling error -> Message:",t),e.eventManager.hasEventListener("onError")&&e.eventManager.dispatchEvent("onError",JSON.stringify(t.code),JSON.stringify(t.body));var n={topic:"log",messages:{log:t,logLevel:"error",errorCode:"1000",sdkVersion:e.sdkVersion,svcId:e.serviceId,pId:e.token,chId:e.channel.id}};m.evt(JSON.stringify(n))}};function i(t){m.i("Local Description:",t),"music"===n.rtc.audioType&&(t.sdp=s(t.sdp)),e.videoCodec?(m.v("Signaling: video codec: "+e.videoCodec),t.sdp=c(t.sdp,/m=video(:?.*)?/,e.videoCodec)):(m.v("Signaling: video codec: H264"),t.sdp=c(t.sdp,/m=video(:?.*)?/,"H264"));const r=e.signalingConnection.createMessage({command:"sdp",body:JSON.stringify(t)});r.channel.type=e.channel.type,e.signalingConnection.send(JSON.stringify(r))}function o(t){m.i("new Local Description:",t),e.videoCodec?(m.v("Signaling: video codec: "+e.videoCodec),t.sdp=c(t.sdp,/m=video(:?.*)?/,e.videoCodec)):(m.v("Signaling: video codec: H264"),t.sdp=c(t.sdp,/m=video(:?.*)?/,"H264")),e.videoBandwidth&&(t.sdp=f.setMediaBitrate(t.sdp,"video",e.videoBandwidth)),"BROADCAST"===e.channel.type&&"Chrome"===h.name&&parseInt(h.version.split(".")[0],10)<74&&e.simulcast&&(t.sdp=function(e){for(var t=e.split("\r\n"),n=!1,r=[-1],i=[-1],o=null,a=null,s=null,c=null,d=-1,l=0;l<t.length;l++){if(p=t[l].match(/m=(\w+) */)){if("video"===p[1]){if(!(r[0]<0)){d=l;break}n=!0}else if(r[0]>-1){d=l;break}}else if(n){var h=t[l].match(/a=ssrc-group:FID (\d+) (\d+)/);if(h)r[0]=h[1],i[0]=h[2],t.splice(l,1),l--;else{if(r[0]){if((f=t[l].match("a=ssrc:"+r[0]+" cname:(.+)"))&&(o=f[1]),(f=t[l].match("a=ssrc:"+r[0]+" msid:(.+)"))&&(a=f[1]),(f=t[l].match("a=ssrc:"+r[0]+" mslabel:(.+)"))&&(s=f[1]),(f=t[l].match("a=ssrc:"+r+" label:(.+)"))&&(c=f[1]),0===t[l].indexOf("a=ssrc:"+i)){t.splice(l,1),l--;continue}if(0===t[l].indexOf("a=ssrc:"+r[0])){t.splice(l,1),l--;continue}}0!=t[l].length||(t.splice(l,1),l--)}}}if(r[0]<0){d=-1,n=!1;for(l=0;l<t.length;l++){var p;if(p=t[l].match(/m=(\w+) */)){if("video"===p[1]){if(!(r[0]<0)){d=l;break}n=!0}else if(r[0]>-1){d=l;break}}else if(n){if(r[0]<0){var u=t[l].match(/a=ssrc:(\d+)/);if(u){r[0]=u[1],t.splice(l,1),l--;continue}}else{var f;if((f=t[l].match("a=ssrc:"+r[0]+" cname:(.+)"))&&(o=f[1]),(f=t[l].match("a=ssrc:"+r[0]+" msid:(.+)"))&&(a=f[1]),(f=t[l].match("a=ssrc:"+r[0]+" mslabel:(.+)"))&&(s=f[1]),(f=t[l].match("a=ssrc:"+r[0]+" label:(.+)"))&&(c=f[1]),0===t[l].indexOf("a=ssrc:"+i[0])){t.splice(l,1),l--;continue}if(0===t[l].indexOf("a=ssrc:"+r[0])){t.splice(l,1),l--;continue}}0!=t[l].length||(t.splice(l,1),l--)}}}if(r[0]<0)return m.e("Couldn't find the video SSRC, simulcasting NOT enabled"),e;d<0&&(d=t.length);r[1]=Math.floor(4294967295*Math.random()),r[2]=Math.floor(4294967295*Math.random()),i[1]=Math.floor(4294967295*Math.random()),i[2]=Math.floor(4294967295*Math.random());for(l=0;l<r.length;l++)o&&(t.splice(d,0,"a=ssrc:"+r[l]+" cname:"+o),d++),a&&(t.splice(d,0,"a=ssrc:"+r[l]+" msid:"+a),d++),s&&(t.splice(d,0,"a=ssrc:"+r[l]+" mslabel:"+s),d++),c&&(t.splice(d,0,"a=ssrc:"+r[l]+" label:"+c),d++),o&&(t.splice(d,0,"a=ssrc:"+i[l]+" cname:"+o),d++),a&&(t.splice(d,0,"a=ssrc:"+i[l]+" msid:"+a),d++),s&&(t.splice(d,0,"a=ssrc:"+i[l]+" mslabel:"+s),d++),c&&(t.splice(d,0,"a=ssrc:"+i[l]+" label:"+c),d++);t.splice(d,0,"a=ssrc-group:FID "+r[2]+" "+i[2]),t.splice(d,0,"a=ssrc-group:FID "+r[1]+" "+i[1]),t.splice(d,0,"a=ssrc-group:FID "+r[0]+" "+i[0]),t.splice(d,0,"a=ssrc-group:SIM "+r[0]+" "+r[1]),(e=t.join("\r\n")).endsWith("\r\n")||(e+="\r\n");return e}(t.sdp)),"music"===n.rtc.audioType&&(t.sdp=s(t.sdp));const r=e.signalingConnection.createMessage({command:"sdp",body:JSON.stringify(t)});r.channel.type=e.channel.type,e.peerConnection.setLocalDescription(t).then(()=>{m.v("Local Description Setted:",e.peerConnection.localDescription),m.i("Message ->:",r),e.signalingConnection.send(JSON.stringify(r))}).catch(t=>{m.e("PeerConnection: set Local description failed",t),m.errorEvt(e,"4232","set local offer is failed:"+t),e.eventManager.hasEventListener("onError")&&(e.eventManager.dispatchEvent("onError","ConnectChannelFailedError"),e.eventManager.dispatchEvent("onError","4232","set local offer is failed"))})}async function a(){m.i("close resources"),e.health&&e.health.stop(),e.state="CLOSE",e.useRecord&&e.remoteRecorder&&(e.remoteRecorder.stop(),e.remoteRecorder=null),e.useRecord&&e.localRecorder&&(e.localRecorder.stop(),e.localRecorder=null,e.useRecord=!1),e.remoteVideo.srcObject&&e.remoteVideo.srcObject.getTracks().forEach(e=>e.stop()),e.remoteVideo&&(e.remoteVideo.srcObject=null),e.signalingConnection&&e.peerConnection&&(e.qualityChecker||(e.qualityChecker=new y(e),await e.qualityChecker.check()),e.peerConnection.close(),e.signalingConnection.close(),e.peerConnection&&(e.hasAddTrack?e.peerConnection.ontrack=null:e.peerConnection.onaddstream=null,e.peerConnection.onremovestream=null,e.peerConnection.onicecandidate=null,e.peerConnection.oniceconnectionstatechange=null,e.peerConnection.onsignalingstatechange=null,e.peerConnection.onicegatheringstatechange=null,e.peerConnection.onnegotiationneeded=null,e.peerConnection=null))}function s(e){return e.replace("a=fmtp:111 minptime=10;useinbandfec=1","a=fmtp:111 useinbandfec=1;minptime=10;stereo=1;cbr=1;maxaveragebitrate=128000")}function c(e,t,n){var r,i,o,a=[],s=new RegExp("a=rtpmap:(\\d+) "+n+"/\\d+");if(!(r=e.match(t)))return e;if(!(i=e.match(s)))return e;r=r[0],i=i[1],o=r.split(" "),a.push(o[0]),a.push(o[1]),a.push(o[2]),a.push(i);for(var c=3;c<o.length;c++)o[c]!==i&&a.push(o[c]);return e.replace(r,a.join(" "))}e.signalingConnection.onMessage((function(e){m.d("Signaling: Got command from server");const t=JSON.parse(e.data),n=t.command;m.v(`-> Message: ${t.command}:`,t),r[n](t)}))}let B=!0,G=!0;function U(e,t,n){const r=e.match(t);return r&&r.length>=n&&parseInt(r[n],10)}function W(e,t,n){if(!e.RTCPeerConnection)return;const r=e.RTCPeerConnection.prototype,i=r.addEventListener;r.addEventListener=function(e,r){if(e!==t)return i.apply(this,arguments);const o=e=>{const t=n(e);t&&r(t)};return this._eventMap=this._eventMap||{},this._eventMap[r]=o,i.apply(this,[e,o])};const o=r.removeEventListener;r.removeEventListener=function(e,n){if(e!==t||!this._eventMap||!this._eventMap[n])return o.apply(this,arguments);const r=this._eventMap[n];return delete this._eventMap[n],o.apply(this,[e,r])},Object.defineProperty(r,"on"+t,{get(){return this["_on"+t]},set(e){this["_on"+t]&&(this.removeEventListener(t,this["_on"+t]),delete this["_on"+t]),e&&this.addEventListener(t,this["_on"+t]=e)},enumerable:!0,configurable:!0})}function J(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(B=e,e?"adapter.js logging disabled":"adapter.js logging enabled")}function $(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(G=!e,"adapter.js deprecation warnings "+(e?"disabled":"enabled"))}function q(){if("object"==typeof window){if(B)return;"undefined"!=typeof console&&"function"==typeof console.log&&console.log.apply(console,arguments)}}function z(e,t){G&&console.warn(e+" is deprecated, please use "+t+" instead.")}function H(e){const{navigator:t}=e,n={browser:null,version:null};if(void 0===e||!e.navigator)return n.browser="Not a browser.",n;if(t.mozGetUserMedia)n.browser="firefox",n.version=U(t.userAgent,/Firefox\/(\d+)\./,1);else if(t.webkitGetUserMedia)n.browser="chrome",n.version=U(t.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(t.mediaDevices&&t.userAgent.match(/Edge\/(\d+).(\d+)$/))n.browser="edge",n.version=U(t.userAgent,/Edge\/(\d+).(\d+)$/,2);else{if(!e.RTCPeerConnection||!t.userAgent.match(/AppleWebKit\/(\d+)\./))return n.browser="Not a supported browser.",n;n.browser="safari",n.version=U(t.userAgent,/AppleWebKit\/(\d+)\./,1)}return n}function K(e){return"object"!=typeof e?e:Object.keys(e).reduce((function(t,n){const r="object"==typeof e[n],i=r?K(e[n]):e[n],o=r&&!Object.keys(i).length;return void 0===i||o?t:Object.assign(t,{[n]:i})}),{})}const X=q;function Q(e){const t=e&&e.navigator;if(!t.mediaDevices)return;const n=H(e),r=function(e){if("object"!=typeof e||e.mandatory||e.optional)return e;const t={};return Object.keys(e).forEach(n=>{if("require"===n||"advanced"===n||"mediaSource"===n)return;const r="object"==typeof e[n]?e[n]:{ideal:e[n]};void 0!==r.exact&&"number"==typeof r.exact&&(r.min=r.max=r.exact);const i=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==r.ideal){t.optional=t.optional||[];let e={};"number"==typeof r.ideal?(e[i("min",n)]=r.ideal,t.optional.push(e),e={},e[i("max",n)]=r.ideal,t.optional.push(e)):(e[i("",n)]=r.ideal,t.optional.push(e))}void 0!==r.exact&&"number"!=typeof r.exact?(t.mandatory=t.mandatory||{},t.mandatory[i("",n)]=r.exact):["min","max"].forEach(e=>{void 0!==r[e]&&(t.mandatory=t.mandatory||{},t.mandatory[i(e,n)]=r[e])})}),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},i=function(e,i){if(n.version>=61)return i(e);if((e=JSON.parse(JSON.stringify(e)))&&"object"==typeof e.audio){const t=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])};t((e=JSON.parse(JSON.stringify(e))).audio,"autoGainControl","googAutoGainControl"),t(e.audio,"noiseSuppression","googNoiseSuppression"),e.audio=r(e.audio)}if(e&&"object"==typeof e.video){let o=e.video.facingMode;o=o&&("object"==typeof o?o:{ideal:o});const a=n.version<66;if(o&&("user"===o.exact||"environment"===o.exact||"user"===o.ideal||"environment"===o.ideal)&&(!t.mediaDevices.getSupportedConstraints||!t.mediaDevices.getSupportedConstraints().facingMode||a)){let n;if(delete e.video.facingMode,"environment"===o.exact||"environment"===o.ideal?n=["back","rear"]:"user"!==o.exact&&"user"!==o.ideal||(n=["front"]),n)return t.mediaDevices.enumerateDevices().then(t=>{let a=(t=t.filter(e=>"videoinput"===e.kind)).find(e=>n.some(t=>e.label.toLowerCase().includes(t)));return!a&&t.length&&n.includes("back")&&(a=t[t.length-1]),a&&(e.video.deviceId=o.exact?{exact:a.deviceId}:{ideal:a.deviceId}),e.video=r(e.video),X("chrome: "+JSON.stringify(e)),i(e)})}e.video=r(e.video)}return X("chrome: "+JSON.stringify(e)),i(e)},o=function(e){return n.version>=64?e:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};t.getUserMedia=function(e,n,r){i(e,e=>{t.webkitGetUserMedia(e,n,e=>{r&&r(o(e))})})}.bind(t);const a=t.mediaDevices.getUserMedia.bind(t.mediaDevices);t.mediaDevices.getUserMedia=function(e){return i(e,e=>a(e).then(t=>{if(e.audio&&!t.getAudioTracks().length||e.video&&!t.getVideoTracks().length)throw t.getTracks().forEach(e=>{e.stop()}),new DOMException("","NotFoundError");return t},e=>Promise.reject(o(e))))}}function Z(e,t,n){const r=n?"outbound-rtp":"inbound-rtp",i=new Map;if(null===t)return i;const o=[];return e.forEach(e=>{"track"===e.type&&e.trackIdentifier===t.id&&o.push(e)}),o.forEach(t=>{e.forEach(n=>{n.type===r&&n.trackId===t.id&&function e(t,n,r){n&&!r.has(n.id)&&(r.set(n.id,n),Object.keys(n).forEach(i=>{i.endsWith("Id")?e(t,t.get(n[i]),r):i.endsWith("Ids")&&n[i].forEach(n=>{e(t,t.get(n),r)})}))}(e,n,i)})}),i}function Y(e){e.MediaStream=e.MediaStream||e.webkitMediaStream}function ee(e){if("object"!=typeof e||!e.RTCPeerConnection||"ontrack"in e.RTCPeerConnection.prototype)W(e,"track",e=>(e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e));else{Object.defineProperty(e.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(e){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=e)},enumerable:!0,configurable:!0});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=t=>{t.stream.addEventListener("addtrack",n=>{let r;r=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===n.track.id):{track:n.track};const i=new Event("track");i.track=n.track,i.receiver=r,i.transceiver={receiver:r},i.streams=[t.stream],this.dispatchEvent(i)}),t.stream.getTracks().forEach(n=>{let r;r=e.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(e=>e.track&&e.track.id===n.id):{track:n};const i=new Event("track");i.track=n,i.receiver=r,i.transceiver={receiver:r},i.streams=[t.stream],this.dispatchEvent(i)})},this.addEventListener("addstream",this._ontrackpoly)),t.apply(this,arguments)}}}function te(e){if("object"==typeof e&&e.RTCPeerConnection&&!("getSenders"in e.RTCPeerConnection.prototype)&&"createDTMFSender"in e.RTCPeerConnection.prototype){const t=function(e,t){return{track:t,get dtmf(){return void 0===this._dtmf&&("audio"===t.kind?this._dtmf=e.createDTMFSender(t):this._dtmf=null),this._dtmf},_pc:e}};if(!e.RTCPeerConnection.prototype.getSenders){e.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const n=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,r){let i=n.apply(this,arguments);return i||(i=t(this,e),this._senders.push(i)),i};const r=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){r.apply(this,arguments);const t=this._senders.indexOf(e);-1!==t&&this._senders.splice(t,1)}}const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._senders=this._senders||[],n.apply(this,[e]),e.getTracks().forEach(e=>{this._senders.push(t(this,e))})};const r=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){this._senders=this._senders||[],r.apply(this,[e]),e.getTracks().forEach(e=>{const t=this._senders.find(t=>t.track===e);t&&this._senders.splice(this._senders.indexOf(t),1)})}}else if("object"==typeof e&&e.RTCPeerConnection&&"getSenders"in e.RTCPeerConnection.prototype&&"createDTMFSender"in e.RTCPeerConnection.prototype&&e.RTCRtpSender&&!("dtmf"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e},Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function ne(e){if(!("object"==typeof e&&e.RTCPeerConnection&&e.RTCRtpSender&&e.RTCRtpReceiver))return;if(!("getStats"in e.RTCRtpSender.prototype)){const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){const e=this;return this._pc.getStats().then(t=>Z(t,e.track,!0))}}if(!("getStats"in e.RTCRtpReceiver.prototype)){const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e}),W(e,"track",e=>(e.receiver._pc=e.srcElement,e)),e.RTCRtpReceiver.prototype.getStats=function(){const e=this;return this._pc.getStats().then(t=>Z(t,e.track,!1))}}if(!("getStats"in e.RTCRtpSender.prototype&&"getStats"in e.RTCRtpReceiver.prototype))return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof e.MediaStreamTrack){const e=arguments[0];let t,n,r;return this.getSenders().forEach(n=>{n.track===e&&(t?r=!0:t=n)}),this.getReceivers().forEach(t=>(t.track===e&&(n?r=!0:n=t),t.track===e)),r||t&&n?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):t?t.getStats():n?n.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return t.apply(this,arguments)}}function re(e){e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(e=>this._shimmedLocalStreams[e][0])};const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addTrack=function(e,n){if(!n)return t.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const r=t.apply(this,arguments);return this._shimmedLocalStreams[n.id]?-1===this._shimmedLocalStreams[n.id].indexOf(r)&&this._shimmedLocalStreams[n.id].push(r):this._shimmedLocalStreams[n.id]=[n,r],r};const n=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(e){this._shimmedLocalStreams=this._shimmedLocalStreams||{},e.getTracks().forEach(e=>{if(this.getSenders().find(t=>t.track===e))throw new DOMException("Track already exists.","InvalidAccessError")});const t=this.getSenders();n.apply(this,arguments);const r=this.getSenders().filter(e=>-1===t.indexOf(e));this._shimmedLocalStreams[e.id]=[e].concat(r)};const r=e.RTCPeerConnection.prototype.removeStream;e.RTCPeerConnection.prototype.removeStream=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[e.id],r.apply(this,arguments)};const i=e.RTCPeerConnection.prototype.removeTrack;e.RTCPeerConnection.prototype.removeTrack=function(e){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},e&&Object.keys(this._shimmedLocalStreams).forEach(t=>{const n=this._shimmedLocalStreams[t].indexOf(e);-1!==n&&this._shimmedLocalStreams[t].splice(n,1),1===this._shimmedLocalStreams[t].length&&delete this._shimmedLocalStreams[t]}),i.apply(this,arguments)}}function ie(e){if(!e.RTCPeerConnection)return;const t=H(e);if(e.RTCPeerConnection.prototype.addTrack&&t.version>=65)return re(e);const n=e.RTCPeerConnection.prototype.getLocalStreams;e.RTCPeerConnection.prototype.getLocalStreams=function(){const e=n.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map(e=>this._reverseStreams[e.id])};const r=e.RTCPeerConnection.prototype.addStream;e.RTCPeerConnection.prototype.addStream=function(t){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},t.getTracks().forEach(e=>{if(this.getSenders().find(t=>t.track===e))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[t.id]){const n=new e.MediaStream(t.getTracks());this._streams[t.id]=n,this._reverseStreams[n.id]=t,t=n}r.apply(this,[t])};const i=e.RTCPeerConnection.prototype.removeStream;function o(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(t=>{const r=e._reverseStreams[t],i=e._streams[r.id];n=n.replace(new RegExp(i.id,"g"),r.id)}),new RTCSessionDescription({type:t.type,sdp:n})}function a(e,t){let n=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(t=>{const r=e._reverseStreams[t],i=e._streams[r.id];n=n.replace(new RegExp(r.id,"g"),i.id)}),new RTCSessionDescription({type:t.type,sdp:n})}e.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},i.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},e.RTCPeerConnection.prototype.addTrack=function(t,n){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const r=[].slice.call(arguments,1);if(1!==r.length||!r[0].getTracks().find(e=>e===t))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");const i=this.getSenders().find(e=>e.track===t);if(i)throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const o=this._streams[n.id];if(o)o.addTrack(t),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const r=new e.MediaStream([t]);this._streams[n.id]=r,this._reverseStreams[r.id]=n,this.addStream(r)}return this.getSenders().find(e=>e.track===t)},["createOffer","createAnswer"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t];e.RTCPeerConnection.prototype[t]=function(){const e=arguments,t=arguments.length&&"function"==typeof arguments[0];return t?n.apply(this,[t=>{const n=o(this,t);e[0].apply(null,[n])},t=>{e[1]&&e[1].apply(null,t)},arguments[2]]):n.apply(this,arguments).then(e=>o(this,e))}}));const s=e.RTCPeerConnection.prototype.setLocalDescription;e.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=a(this,arguments[0]),s.apply(this,arguments)):s.apply(this,arguments)};const c=Object.getOwnPropertyDescriptor(e.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(e.RTCPeerConnection.prototype,"localDescription",{get(){const e=c.get.apply(this);return""===e.type?e:o(this,e)}}),e.RTCPeerConnection.prototype.removeTrack=function(e){if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(e._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let t;this._streams=this._streams||{},Object.keys(this._streams).forEach(n=>{this._streams[n].getTracks().find(t=>e.track===t)&&(t=this._streams[n])}),t&&(1===t.getTracks().length?this.removeStream(this._reverseStreams[t.id]):t.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function oe(e){if(!e.RTCPeerConnection&&e.webkitRTCPeerConnection&&(e.RTCPeerConnection=e.webkitRTCPeerConnection),!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(e,n,r){const i=arguments;if(arguments.length>0&&"function"==typeof e)return t.apply(this,arguments);if(0===t.length&&(0===arguments.length||"function"!=typeof arguments[0]))return t.apply(this,[]);const o=function(e){const t={};return e.result().forEach(e=>{const n={id:e.id,timestamp:e.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[e.type]||e.type};e.names().forEach(t=>{n[t]=e.stat(t)}),t[n.id]=n}),t},a=function(e){return new Map(Object.keys(e).map(t=>[t,e[t]]))};if(arguments.length>=2){const e=function(e){i[1](a(o(e)))};return t.apply(this,[e,arguments[0]])}return new Promise((e,n)=>{t.apply(this,[function(t){e(a(o(t)))},n])}).then(n,r)},["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t];e.RTCPeerConnection.prototype[t]=function(){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}}));const n=e.RTCPeerConnection.prototype.addIceCandidate;e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?n.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())}}function ae(e){W(e,"negotiationneeded",e=>{if("stable"===e.target.signalingState)return e})}var se=Object.freeze({__proto__:null,shimMediaStream:Y,shimOnTrack:ee,shimGetSendersWithDtmf:te,shimSenderReceiverGetStats:ne,shimAddTrackRemoveTrackWithNative:re,shimAddTrackRemoveTrack:ie,shimPeerConnection:oe,fixNegotiationNeeded:ae,shimGetUserMedia:Q,shimGetDisplayMedia:function(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&("function"==typeof t?e.navigator.mediaDevices.getDisplayMedia=function(n){return t(n).then(t=>{const r=n.video&&n.video.width,i=n.video&&n.video.height,o=n.video&&n.video.frameRate;return n.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:t,maxFrameRate:o||3}},r&&(n.video.mandatory.maxWidth=r),i&&(n.video.mandatory.maxHeight=i),e.navigator.mediaDevices.getUserMedia(n)})}:console.error("shimGetDisplayMedia: getSourceId argument is not a function"))}});var ce=l((function(e){var t={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};t.localCName=t.generateIdentifier(),t.splitLines=function(e){return e.trim().split("\n").map((function(e){return e.trim()}))},t.splitSections=function(e){return e.split("\nm=").map((function(e,t){return(t>0?"m="+e:e).trim()+"\r\n"}))},t.getDescription=function(e){var n=t.splitSections(e);return n&&n[0]},t.getMediaSections=function(e){var n=t.splitSections(e);return n.shift(),n},t.matchPrefix=function(e,n){return t.splitLines(e).filter((function(e){return 0===e.indexOf(n)}))},t.parseCandidate=function(e){for(var t,n={foundation:(t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" "))[0],component:parseInt(t[1],10),protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]},r=8;r<t.length;r+=2)switch(t[r]){case"raddr":n.relatedAddress=t[r+1];break;case"rport":n.relatedPort=parseInt(t[r+1],10);break;case"tcptype":n.tcpType=t[r+1];break;case"ufrag":n.ufrag=t[r+1],n.usernameFragment=t[r+1];break;default:n[t[r]]=t[r+1]}return n},t.writeCandidate=function(e){var t=[];t.push(e.foundation),t.push(e.component),t.push(e.protocol.toUpperCase()),t.push(e.priority),t.push(e.address||e.ip),t.push(e.port);var n=e.type;return t.push("typ"),t.push(n),"host"!==n&&e.relatedAddress&&e.relatedPort&&(t.push("raddr"),t.push(e.relatedAddress),t.push("rport"),t.push(e.relatedPort)),e.tcpType&&"tcp"===e.protocol.toLowerCase()&&(t.push("tcptype"),t.push(e.tcpType)),(e.usernameFragment||e.ufrag)&&(t.push("ufrag"),t.push(e.usernameFragment||e.ufrag)),"candidate:"+t.join(" ")},t.parseIceOptions=function(e){return e.substr(14).split(" ")},t.parseRtpMap=function(e){var t=e.substr(9).split(" "),n={payloadType:parseInt(t.shift(),10)};return t=t[0].split("/"),n.name=t[0],n.clockRate=parseInt(t[1],10),n.channels=3===t.length?parseInt(t[2],10):1,n.numChannels=n.channels,n},t.writeRtpMap=function(e){var t=e.payloadType;void 0!==e.preferredPayloadType&&(t=e.preferredPayloadType);var n=e.channels||e.numChannels||1;return"a=rtpmap:"+t+" "+e.name+"/"+e.clockRate+(1!==n?"/"+n:"")+"\r\n"},t.parseExtmap=function(e){var t=e.substr(9).split(" ");return{id:parseInt(t[0],10),direction:t[0].indexOf("/")>0?t[0].split("/")[1]:"sendrecv",uri:t[1]}},t.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+"\r\n"},t.parseFmtp=function(e){for(var t,n={},r=e.substr(e.indexOf(" ")+1).split(";"),i=0;i<r.length;i++)n[(t=r[i].trim().split("="))[0].trim()]=t[1];return n},t.writeFmtp=function(e){var t="",n=e.payloadType;if(void 0!==e.preferredPayloadType&&(n=e.preferredPayloadType),e.parameters&&Object.keys(e.parameters).length){var r=[];Object.keys(e.parameters).forEach((function(t){e.parameters[t]?r.push(t+"="+e.parameters[t]):r.push(t)})),t+="a=fmtp:"+n+" "+r.join(";")+"\r\n"}return t},t.parseRtcpFb=function(e){var t=e.substr(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},t.writeRtcpFb=function(e){var t="",n=e.payloadType;return void 0!==e.preferredPayloadType&&(n=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach((function(e){t+="a=rtcp-fb:"+n+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"})),t},t.parseSsrcMedia=function(e){var t=e.indexOf(" "),n={ssrc:parseInt(e.substr(7,t-7),10)},r=e.indexOf(":",t);return r>-1?(n.attribute=e.substr(t+1,r-t-1),n.value=e.substr(r+1)):n.attribute=e.substr(t+1),n},t.parseSsrcGroup=function(e){var t=e.substr(13).split(" ");return{semantics:t.shift(),ssrcs:t.map((function(e){return parseInt(e,10)}))}},t.getMid=function(e){var n=t.matchPrefix(e,"a=mid:")[0];if(n)return n.substr(6)},t.parseFingerprint=function(e){var t=e.substr(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1]}},t.getDtlsParameters=function(e,n){return{role:"auto",fingerprints:t.matchPrefix(e+n,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){var n="a=setup:"+t+"\r\n";return e.fingerprints.forEach((function(e){n+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"})),n},t.getIceParameters=function(e,n){var r=t.splitLines(e);return{usernameFragment:(r=r.concat(t.splitLines(n))).filter((function(e){return 0===e.indexOf("a=ice-ufrag:")}))[0].substr(12),password:r.filter((function(e){return 0===e.indexOf("a=ice-pwd:")}))[0].substr(10)}},t.writeIceParameters=function(e){return"a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n"},t.parseRtpParameters=function(e){for(var n={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},r=t.splitLines(e)[0].split(" "),i=3;i<r.length;i++){var o=r[i],a=t.matchPrefix(e,"a=rtpmap:"+o+" ")[0];if(a){var s=t.parseRtpMap(a),c=t.matchPrefix(e,"a=fmtp:"+o+" ");switch(s.parameters=c.length?t.parseFmtp(c[0]):{},s.rtcpFeedback=t.matchPrefix(e,"a=rtcp-fb:"+o+" ").map(t.parseRtcpFb),n.codecs.push(s),s.name.toUpperCase()){case"RED":case"ULPFEC":n.fecMechanisms.push(s.name.toUpperCase())}}}return t.matchPrefix(e,"a=extmap:").forEach((function(e){n.headerExtensions.push(t.parseExtmap(e))})),n},t.writeRtpDescription=function(e,n){var r="";r+="m="+e+" ",r+=n.codecs.length>0?"9":"0",r+=" UDP/TLS/RTP/SAVPF ",r+=n.codecs.map((function(e){return void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType})).join(" ")+"\r\n",r+="c=IN IP4 0.0.0.0\r\n",r+="a=rtcp:9 IN IP4 0.0.0.0\r\n",n.codecs.forEach((function(e){r+=t.writeRtpMap(e),r+=t.writeFmtp(e),r+=t.writeRtcpFb(e)}));var i=0;return n.codecs.forEach((function(e){e.maxptime>i&&(i=e.maxptime)})),i>0&&(r+="a=maxptime:"+i+"\r\n"),r+="a=rtcp-mux\r\n",n.headerExtensions&&n.headerExtensions.forEach((function(e){r+=t.writeExtmap(e)})),r},t.parseRtpEncodingParameters=function(e){var n,r=[],i=t.parseRtpParameters(e),o=-1!==i.fecMechanisms.indexOf("RED"),a=-1!==i.fecMechanisms.indexOf("ULPFEC"),s=t.matchPrefix(e,"a=ssrc:").map((function(e){return t.parseSsrcMedia(e)})).filter((function(e){return"cname"===e.attribute})),c=s.length>0&&s[0].ssrc,d=t.matchPrefix(e,"a=ssrc-group:FID").map((function(e){return e.substr(17).split(" ").map((function(e){return parseInt(e,10)}))}));d.length>0&&d[0].length>1&&d[0][0]===c&&(n=d[0][1]),i.codecs.forEach((function(e){if("RTX"===e.name.toUpperCase()&&e.parameters.apt){var t={ssrc:c,codecPayloadType:parseInt(e.parameters.apt,10)};c&&n&&(t.rtx={ssrc:n}),r.push(t),o&&((t=JSON.parse(JSON.stringify(t))).fec={ssrc:c,mechanism:a?"red+ulpfec":"red"},r.push(t))}})),0===r.length&&c&&r.push({ssrc:c});var l=t.matchPrefix(e,"b=");return l.length&&(l=0===l[0].indexOf("b=TIAS:")?parseInt(l[0].substr(7),10):0===l[0].indexOf("b=AS:")?1e3*parseInt(l[0].substr(5),10)*.95-16e3:void 0,r.forEach((function(e){e.maxBitrate=l}))),r},t.parseRtcpParameters=function(e){var n={},r=t.matchPrefix(e,"a=ssrc:").map((function(e){return t.parseSsrcMedia(e)})).filter((function(e){return"cname"===e.attribute}))[0];r&&(n.cname=r.value,n.ssrc=r.ssrc);var i=t.matchPrefix(e,"a=rtcp-rsize");n.reducedSize=i.length>0,n.compound=0===i.length;var o=t.matchPrefix(e,"a=rtcp-mux");return n.mux=o.length>0,n},t.parseMsid=function(e){var n,r=t.matchPrefix(e,"a=msid:");if(1===r.length)return{stream:(n=r[0].substr(7).split(" "))[0],track:n[1]};var i=t.matchPrefix(e,"a=ssrc:").map((function(e){return t.parseSsrcMedia(e)})).filter((function(e){return"msid"===e.attribute}));return i.length>0?{stream:(n=i[0].value.split(" "))[0],track:n[1]}:void 0},t.generateSessionId=function(){return Math.random().toString().substr(2,21)},t.writeSessionBoilerplate=function(e,n,r){var i=void 0!==n?n:2;return"v=0\r\no="+(r||"thisisadapterortc")+" "+(e||t.generateSessionId())+" "+i+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},t.writeMediaSection=function(e,n,r,i){var o=t.writeRtpDescription(e.kind,n);if(o+=t.writeIceParameters(e.iceGatherer.getLocalParameters()),o+=t.writeDtlsParameters(e.dtlsTransport.getLocalParameters(),"offer"===r?"actpass":"active"),o+="a=mid:"+e.mid+"\r\n",e.direction?o+="a="+e.direction+"\r\n":e.rtpSender&&e.rtpReceiver?o+="a=sendrecv\r\n":e.rtpSender?o+="a=sendonly\r\n":e.rtpReceiver?o+="a=recvonly\r\n":o+="a=inactive\r\n",e.rtpSender){var a="msid:"+i.id+" "+e.rtpSender.track.id+"\r\n";o+="a="+a,o+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" "+a,e.sendEncodingParameters[0].rtx&&(o+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" "+a,o+="a=ssrc-group:FID "+e.sendEncodingParameters[0].ssrc+" "+e.sendEncodingParameters[0].rtx.ssrc+"\r\n")}return o+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" cname:"+t.localCName+"\r\n",e.rtpSender&&e.sendEncodingParameters[0].rtx&&(o+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" cname:"+t.localCName+"\r\n"),o},t.getDirection=function(e,n){for(var r=t.splitLines(e),i=0;i<r.length;i++)switch(r[i]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return r[i].substr(2)}return n?t.getDirection(n):"sendrecv"},t.getKind=function(e){return t.splitLines(e)[0].split(" ")[0].substr(2)},t.isRejected=function(e){return"0"===e.split(" ",2)[1]},t.parseMLine=function(e){var n=t.splitLines(e)[0].substr(2).split(" ");return{kind:n[0],port:parseInt(n[1],10),protocol:n[2],fmt:n.slice(3).join(" ")}},t.parseOLine=function(e){var n=t.matchPrefix(e,"o=")[0].substr(2).split(" ");return{username:n[0],sessionId:n[1],sessionVersion:parseInt(n[2],10),netType:n[3],addressType:n[4],address:n[5]}},t.isValidSDP=function(e){if("string"!=typeof e||0===e.length)return!1;for(var n=t.splitLines(e),r=0;r<n.length;r++)if(n[r].length<2||"="!==n[r].charAt(1))return!1;return!0},e.exports=t}));function de(e,t,n,r,i){var o=ce.writeRtpDescription(e.kind,t);if(o+=ce.writeIceParameters(e.iceGatherer.getLocalParameters()),o+=ce.writeDtlsParameters(e.dtlsTransport.getLocalParameters(),"offer"===n?"actpass":i||"active"),o+="a=mid:"+e.mid+"\r\n",e.rtpSender&&e.rtpReceiver?o+="a=sendrecv\r\n":e.rtpSender?o+="a=sendonly\r\n":e.rtpReceiver?o+="a=recvonly\r\n":o+="a=inactive\r\n",e.rtpSender){var a=e.rtpSender._initialTrackId||e.rtpSender.track.id;e.rtpSender._initialTrackId=a;var s="msid:"+(r?r.id:"-")+" "+a+"\r\n";o+="a="+s,o+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" "+s,e.sendEncodingParameters[0].rtx&&(o+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" "+s,o+="a=ssrc-group:FID "+e.sendEncodingParameters[0].ssrc+" "+e.sendEncodingParameters[0].rtx.ssrc+"\r\n")}return o+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" cname:"+ce.localCName+"\r\n",e.rtpSender&&e.sendEncodingParameters[0].rtx&&(o+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" cname:"+ce.localCName+"\r\n"),o}function le(e,t){var n={codecs:[],headerExtensions:[],fecMechanisms:[]},r=function(e,t){e=parseInt(e,10);for(var n=0;n<t.length;n++)if(t[n].payloadType===e||t[n].preferredPayloadType===e)return t[n]},i=function(e,t,n,i){var o=r(e.parameters.apt,n),a=r(t.parameters.apt,i);return o&&a&&o.name.toLowerCase()===a.name.toLowerCase()};return e.codecs.forEach((function(r){for(var o=0;o<t.codecs.length;o++){var a=t.codecs[o];if(r.name.toLowerCase()===a.name.toLowerCase()&&r.clockRate===a.clockRate){if("rtx"===r.name.toLowerCase()&&r.parameters&&a.parameters.apt&&!i(r,a,e.codecs,t.codecs))continue;(a=JSON.parse(JSON.stringify(a))).numChannels=Math.min(r.numChannels,a.numChannels),n.codecs.push(a),a.rtcpFeedback=a.rtcpFeedback.filter((function(e){for(var t=0;t<r.rtcpFeedback.length;t++)if(r.rtcpFeedback[t].type===e.type&&r.rtcpFeedback[t].parameter===e.parameter)return!0;return!1}));break}}})),e.headerExtensions.forEach((function(e){for(var r=0;r<t.headerExtensions.length;r++){var i=t.headerExtensions[r];if(e.uri===i.uri){n.headerExtensions.push(i);break}}})),n}function he(e,t,n){return-1!=={offer:{setLocalDescription:["stable","have-local-offer"],setRemoteDescription:["stable","have-remote-offer"]},answer:{setLocalDescription:["have-remote-offer","have-local-pranswer"],setRemoteDescription:["have-local-offer","have-remote-pranswer"]}}[t][e].indexOf(n)}function pe(e,t){var n=e.getRemoteCandidates().find((function(e){return t.foundation===e.foundation&&t.ip===e.ip&&t.port===e.port&&t.priority===e.priority&&t.protocol===e.protocol&&t.type===e.type}));return n||e.addRemoteCandidate(t),!n}function ue(e,t){var n=new Error(t);return n.name=e,n.code={NotSupportedError:9,InvalidStateError:11,InvalidAccessError:15,TypeError:void 0,OperationError:void 0}[e],n}var me=function(e,t){function n(t,n){n.addTrack(t),n.dispatchEvent(new e.MediaStreamTrackEvent("addtrack",{track:t}))}function r(t,n,r,i){var o=new Event("track");o.track=n,o.receiver=r,o.transceiver={receiver:r},o.streams=i,e.setTimeout((function(){t._dispatchEvent("track",o)}))}var i=function(n){var r=this,i=document.createDocumentFragment();if(["addEventListener","removeEventListener","dispatchEvent"].forEach((function(e){r[e]=i[e].bind(i)})),this.canTrickleIceCandidates=null,this.needNegotiation=!1,this.localStreams=[],this.remoteStreams=[],this._localDescription=null,this._remoteDescription=null,this.signalingState="stable",this.iceConnectionState="new",this.connectionState="new",this.iceGatheringState="new",n=JSON.parse(JSON.stringify(n||{})),this.usingBundle="max-bundle"===n.bundlePolicy,"negotiate"===n.rtcpMuxPolicy)throw ue("NotSupportedError","rtcpMuxPolicy 'negotiate' is not supported");switch(n.rtcpMuxPolicy||(n.rtcpMuxPolicy="require"),n.iceTransportPolicy){case"all":case"relay":break;default:n.iceTransportPolicy="all"}switch(n.bundlePolicy){case"balanced":case"max-compat":case"max-bundle":break;default:n.bundlePolicy="balanced"}if(n.iceServers=function(e,t){var n=!1;return(e=JSON.parse(JSON.stringify(e))).filter((function(e){if(e&&(e.urls||e.url)){var r=e.urls||e.url;e.url&&!e.urls&&console.warn("RTCIceServer.url is deprecated! Use urls instead.");var i="string"==typeof r;return i&&(r=[r]),r=r.filter((function(e){return 0===e.indexOf("turn:")&&-1!==e.indexOf("transport=udp")&&-1===e.indexOf("turn:[")&&!n?(n=!0,!0):0===e.indexOf("stun:")&&t>=14393&&-1===e.indexOf("?transport=udp")})),delete e.url,e.urls=i?r[0]:r,!!r.length}}))}(n.iceServers||[],t),this._iceGatherers=[],n.iceCandidatePoolSize)for(var o=n.iceCandidatePoolSize;o>0;o--)this._iceGatherers.push(new e.RTCIceGatherer({iceServers:n.iceServers,gatherPolicy:n.iceTransportPolicy}));else n.iceCandidatePoolSize=0;this._config=n,this.transceivers=[],this._sdpSessionId=ce.generateSessionId(),this._sdpSessionVersion=0,this._dtlsRole=void 0,this._isClosed=!1};Object.defineProperty(i.prototype,"localDescription",{configurable:!0,get:function(){return this._localDescription}}),Object.defineProperty(i.prototype,"remoteDescription",{configurable:!0,get:function(){return this._remoteDescription}}),i.prototype.onicecandidate=null,i.prototype.onaddstream=null,i.prototype.ontrack=null,i.prototype.onremovestream=null,i.prototype.onsignalingstatechange=null,i.prototype.oniceconnectionstatechange=null,i.prototype.onconnectionstatechange=null,i.prototype.onicegatheringstatechange=null,i.prototype.onnegotiationneeded=null,i.prototype.ondatachannel=null,i.prototype._dispatchEvent=function(e,t){this._isClosed||(this.dispatchEvent(t),"function"==typeof this["on"+e]&&this["on"+e](t))},i.prototype._emitGatheringStateChange=function(){var e=new Event("icegatheringstatechange");this._dispatchEvent("icegatheringstatechange",e)},i.prototype.getConfiguration=function(){return this._config},i.prototype.getLocalStreams=function(){return this.localStreams},i.prototype.getRemoteStreams=function(){return this.remoteStreams},i.prototype._createTransceiver=function(e,t){var n=this.transceivers.length>0,r={track:null,iceGatherer:null,iceTransport:null,dtlsTransport:null,localCapabilities:null,remoteCapabilities:null,rtpSender:null,rtpReceiver:null,kind:e,mid:null,sendEncodingParameters:null,recvEncodingParameters:null,stream:null,associatedRemoteMediaStreams:[],wantReceive:!0};if(this.usingBundle&&n)r.iceTransport=this.transceivers[0].iceTransport,r.dtlsTransport=this.transceivers[0].dtlsTransport;else{var i=this._createIceAndDtlsTransports();r.iceTransport=i.iceTransport,r.dtlsTransport=i.dtlsTransport}return t||this.transceivers.push(r),r},i.prototype.addTrack=function(t,n){if(this._isClosed)throw ue("InvalidStateError","Attempted to call addTrack on a closed peerconnection.");var r;if(this.transceivers.find((function(e){return e.track===t})))throw ue("InvalidAccessError","Track already exists.");for(var i=0;i<this.transceivers.length;i++)this.transceivers[i].track||this.transceivers[i].kind!==t.kind||(r=this.transceivers[i]);return r||(r=this._createTransceiver(t.kind)),this._maybeFireNegotiationNeeded(),-1===this.localStreams.indexOf(n)&&this.localStreams.push(n),r.track=t,r.stream=n,r.rtpSender=new e.RTCRtpSender(t,r.dtlsTransport),r.rtpSender},i.prototype.addStream=function(e){var n=this;if(t>=15025)e.getTracks().forEach((function(t){n.addTrack(t,e)}));else{var r=e.clone();e.getTracks().forEach((function(e,t){var n=r.getTracks()[t];e.addEventListener("enabled",(function(e){n.enabled=e.enabled}))})),r.getTracks().forEach((function(e){n.addTrack(e,r)}))}},i.prototype.removeTrack=function(t){if(this._isClosed)throw ue("InvalidStateError","Attempted to call removeTrack on a closed peerconnection.");if(!(t instanceof e.RTCRtpSender))throw new TypeError("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.");var n=this.transceivers.find((function(e){return e.rtpSender===t}));if(!n)throw ue("InvalidAccessError","Sender was not created by this connection.");var r=n.stream;n.rtpSender.stop(),n.rtpSender=null,n.track=null,n.stream=null,-1===this.transceivers.map((function(e){return e.stream})).indexOf(r)&&this.localStreams.indexOf(r)>-1&&this.localStreams.splice(this.localStreams.indexOf(r),1),this._maybeFireNegotiationNeeded()},i.prototype.removeStream=function(e){var t=this;e.getTracks().forEach((function(e){var n=t.getSenders().find((function(t){return t.track===e}));n&&t.removeTrack(n)}))},i.prototype.getSenders=function(){return this.transceivers.filter((function(e){return!!e.rtpSender})).map((function(e){return e.rtpSender}))},i.prototype.getReceivers=function(){return this.transceivers.filter((function(e){return!!e.rtpReceiver})).map((function(e){return e.rtpReceiver}))},i.prototype._createIceGatherer=function(t,n){var r=this;if(n&&t>0)return this.transceivers[0].iceGatherer;if(this._iceGatherers.length)return this._iceGatherers.shift();var i=new e.RTCIceGatherer({iceServers:this._config.iceServers,gatherPolicy:this._config.iceTransportPolicy});return Object.defineProperty(i,"state",{value:"new",writable:!0}),this.transceivers[t].bufferedCandidateEvents=[],this.transceivers[t].bufferCandidates=function(e){var n=!e.candidate||0===Object.keys(e.candidate).length;i.state=n?"completed":"gathering",null!==r.transceivers[t].bufferedCandidateEvents&&r.transceivers[t].bufferedCandidateEvents.push(e)},i.addEventListener("localcandidate",this.transceivers[t].bufferCandidates),i},i.prototype._gather=function(t,n){var r=this,i=this.transceivers[n].iceGatherer;if(!i.onlocalcandidate){var o=this.transceivers[n].bufferedCandidateEvents;this.transceivers[n].bufferedCandidateEvents=null,i.removeEventListener("localcandidate",this.transceivers[n].bufferCandidates),i.onlocalcandidate=function(e){if(!(r.usingBundle&&n>0)){var o=new Event("icecandidate");o.candidate={sdpMid:t,sdpMLineIndex:n};var a=e.candidate,s=!a||0===Object.keys(a).length;if(s)"new"!==i.state&&"gathering"!==i.state||(i.state="completed");else{"new"===i.state&&(i.state="gathering"),a.component=1,a.ufrag=i.getLocalParameters().usernameFragment;var c=ce.writeCandidate(a);o.candidate=Object.assign(o.candidate,ce.parseCandidate(c)),o.candidate.candidate=c,o.candidate.toJSON=function(){return{candidate:o.candidate.candidate,sdpMid:o.candidate.sdpMid,sdpMLineIndex:o.candidate.sdpMLineIndex,usernameFragment:o.candidate.usernameFragment}}}var d=ce.getMediaSections(r._localDescription.sdp);d[o.candidate.sdpMLineIndex]+=s?"a=end-of-candidates\r\n":"a="+o.candidate.candidate+"\r\n",r._localDescription.sdp=ce.getDescription(r._localDescription.sdp)+d.join("");var l=r.transceivers.every((function(e){return e.iceGatherer&&"completed"===e.iceGatherer.state}));"gathering"!==r.iceGatheringState&&(r.iceGatheringState="gathering",r._emitGatheringStateChange()),s||r._dispatchEvent("icecandidate",o),l&&(r._dispatchEvent("icecandidate",new Event("icecandidate")),r.iceGatheringState="complete",r._emitGatheringStateChange())}},e.setTimeout((function(){o.forEach((function(e){i.onlocalcandidate(e)}))}),0)}},i.prototype._createIceAndDtlsTransports=function(){var t=this,n=new e.RTCIceTransport(null);n.onicestatechange=function(){t._updateIceConnectionState(),t._updateConnectionState()};var r=new e.RTCDtlsTransport(n);return r.ondtlsstatechange=function(){t._updateConnectionState()},r.onerror=function(){Object.defineProperty(r,"state",{value:"failed",writable:!0}),t._updateConnectionState()},{iceTransport:n,dtlsTransport:r}},i.prototype._disposeIceAndDtlsTransports=function(e){var t=this.transceivers[e].iceGatherer;t&&(delete t.onlocalcandidate,delete this.transceivers[e].iceGatherer);var n=this.transceivers[e].iceTransport;n&&(delete n.onicestatechange,delete this.transceivers[e].iceTransport);var r=this.transceivers[e].dtlsTransport;r&&(delete r.ondtlsstatechange,delete r.onerror,delete this.transceivers[e].dtlsTransport)},i.prototype._transceive=function(e,n,r){var i=le(e.localCapabilities,e.remoteCapabilities);n&&e.rtpSender&&(i.encodings=e.sendEncodingParameters,i.rtcp={cname:ce.localCName,compound:e.rtcpParameters.compound},e.recvEncodingParameters.length&&(i.rtcp.ssrc=e.recvEncodingParameters[0].ssrc),e.rtpSender.send(i)),r&&e.rtpReceiver&&i.codecs.length>0&&("video"===e.kind&&e.recvEncodingParameters&&t<15019&&e.recvEncodingParameters.forEach((function(e){delete e.rtx})),e.recvEncodingParameters.length?i.encodings=e.recvEncodingParameters:i.encodings=[{}],i.rtcp={compound:e.rtcpParameters.compound},e.rtcpParameters.cname&&(i.rtcp.cname=e.rtcpParameters.cname),e.sendEncodingParameters.length&&(i.rtcp.ssrc=e.sendEncodingParameters[0].ssrc),e.rtpReceiver.receive(i))},i.prototype.setLocalDescription=function(e){var t,n,r=this;if(-1===["offer","answer"].indexOf(e.type))return Promise.reject(ue("TypeError",'Unsupported type "'+e.type+'"'));if(!he("setLocalDescription",e.type,r.signalingState)||r._isClosed)return Promise.reject(ue("InvalidStateError","Can not set local "+e.type+" in state "+r.signalingState));if("offer"===e.type)t=ce.splitSections(e.sdp),n=t.shift(),t.forEach((function(e,t){var n=ce.parseRtpParameters(e);r.transceivers[t].localCapabilities=n})),r.transceivers.forEach((function(e,t){r._gather(e.mid,t)}));else if("answer"===e.type){t=ce.splitSections(r._remoteDescription.sdp),n=t.shift();var i=ce.matchPrefix(n,"a=ice-lite").length>0;t.forEach((function(e,t){var o=r.transceivers[t],a=o.iceGatherer,s=o.iceTransport,c=o.dtlsTransport,d=o.localCapabilities,l=o.remoteCapabilities;if(!(ce.isRejected(e)&&0===ce.matchPrefix(e,"a=bundle-only").length)&&!o.rejected){var h=ce.getIceParameters(e,n),p=ce.getDtlsParameters(e,n);i&&(p.role="server"),r.usingBundle&&0!==t||(r._gather(o.mid,t),"new"===s.state&&s.start(a,h,i?"controlling":"controlled"),"new"===c.state&&c.start(p));var u=le(d,l);r._transceive(o,u.codecs.length>0,!1)}}))}return r._localDescription={type:e.type,sdp:e.sdp},"offer"===e.type?r._updateSignalingState("have-local-offer"):r._updateSignalingState("stable"),Promise.resolve()},i.prototype.setRemoteDescription=function(i){var o=this;if(-1===["offer","answer"].indexOf(i.type))return Promise.reject(ue("TypeError",'Unsupported type "'+i.type+'"'));if(!he("setRemoteDescription",i.type,o.signalingState)||o._isClosed)return Promise.reject(ue("InvalidStateError","Can not set remote "+i.type+" in state "+o.signalingState));var a={};o.remoteStreams.forEach((function(e){a[e.id]=e}));var s=[],c=ce.splitSections(i.sdp),d=c.shift(),l=ce.matchPrefix(d,"a=ice-lite").length>0,h=ce.matchPrefix(d,"a=group:BUNDLE ").length>0;o.usingBundle=h;var p=ce.matchPrefix(d,"a=ice-options:")[0];return o.canTrickleIceCandidates=!!p&&p.substr(14).split(" ").indexOf("trickle")>=0,c.forEach((function(r,c){var p=ce.splitLines(r),u=ce.getKind(r),m=ce.isRejected(r)&&0===ce.matchPrefix(r,"a=bundle-only").length,f=p[0].substr(2).split(" ")[2],v=ce.getDirection(r,d),g=ce.parseMsid(r),y=ce.getMid(r)||ce.generateIdentifier();if(m||"application"===u&&("DTLS/SCTP"===f||"UDP/DTLS/SCTP"===f))o.transceivers[c]={mid:y,kind:u,protocol:f,rejected:!0};else{var C,S,R,E,T,b,x,k,P;!m&&o.transceivers[c]&&o.transceivers[c].rejected&&(o.transceivers[c]=o._createTransceiver(u,!0));var w,M,L=ce.parseRtpParameters(r);m||(w=ce.getIceParameters(r,d),(M=ce.getDtlsParameters(r,d)).role="client"),x=ce.parseRtpEncodingParameters(r);var O=ce.parseRtcpParameters(r),I=ce.matchPrefix(r,"a=end-of-candidates",d).length>0,_=ce.matchPrefix(r,"a=candidate:").map((function(e){return ce.parseCandidate(e)})).filter((function(e){return 1===e.component}));if(("offer"===i.type||"answer"===i.type)&&!m&&h&&c>0&&o.transceivers[c]&&(o._disposeIceAndDtlsTransports(c),o.transceivers[c].iceGatherer=o.transceivers[0].iceGatherer,o.transceivers[c].iceTransport=o.transceivers[0].iceTransport,o.transceivers[c].dtlsTransport=o.transceivers[0].dtlsTransport,o.transceivers[c].rtpSender&&o.transceivers[c].rtpSender.setTransport(o.transceivers[0].dtlsTransport),o.transceivers[c].rtpReceiver&&o.transceivers[c].rtpReceiver.setTransport(o.transceivers[0].dtlsTransport)),"offer"!==i.type||m){if("answer"===i.type&&!m){S=(C=o.transceivers[c]).iceGatherer,R=C.iceTransport,E=C.dtlsTransport,T=C.rtpReceiver,b=C.sendEncodingParameters,k=C.localCapabilities,o.transceivers[c].recvEncodingParameters=x,o.transceivers[c].remoteCapabilities=L,o.transceivers[c].rtcpParameters=O,_.length&&"new"===R.state&&(!l&&!I||h&&0!==c?_.forEach((function(e){pe(C.iceTransport,e)})):R.setRemoteCandidates(_)),h&&0!==c||("new"===R.state&&R.start(S,w,"controlling"),"new"===E.state&&E.start(M)),!le(C.localCapabilities,C.remoteCapabilities).codecs.filter((function(e){return"rtx"===e.name.toLowerCase()})).length&&C.sendEncodingParameters[0].rtx&&delete C.sendEncodingParameters[0].rtx,o._transceive(C,"sendrecv"===v||"recvonly"===v,"sendrecv"===v||"sendonly"===v),!T||"sendrecv"!==v&&"sendonly"!==v?delete C.rtpReceiver:(P=T.track,g?(a[g.stream]||(a[g.stream]=new e.MediaStream),n(P,a[g.stream]),s.push([P,T,a[g.stream]])):(a.default||(a.default=new e.MediaStream),n(P,a.default),s.push([P,T,a.default])))}}else{(C=o.transceivers[c]||o._createTransceiver(u)).mid=y,C.iceGatherer||(C.iceGatherer=o._createIceGatherer(c,h)),_.length&&"new"===C.iceTransport.state&&(!I||h&&0!==c?_.forEach((function(e){pe(C.iceTransport,e)})):C.iceTransport.setRemoteCandidates(_)),k=e.RTCRtpReceiver.getCapabilities(u),t<15019&&(k.codecs=k.codecs.filter((function(e){return"rtx"!==e.name}))),b=C.sendEncodingParameters||[{ssrc:1001*(2*c+2)}];var D,A=!1;if("sendrecv"===v||"sendonly"===v){if(A=!C.rtpReceiver,T=C.rtpReceiver||new e.RTCRtpReceiver(C.dtlsTransport,u),A)P=T.track,g&&"-"===g.stream||(g?(a[g.stream]||(a[g.stream]=new e.MediaStream,Object.defineProperty(a[g.stream],"id",{get:function(){return g.stream}})),Object.defineProperty(P,"id",{get:function(){return g.track}}),D=a[g.stream]):(a.default||(a.default=new e.MediaStream),D=a.default)),D&&(n(P,D),C.associatedRemoteMediaStreams.push(D)),s.push([P,T,D])}else C.rtpReceiver&&C.rtpReceiver.track&&(C.associatedRemoteMediaStreams.forEach((function(t){var n=t.getTracks().find((function(e){return e.id===C.rtpReceiver.track.id}));n&&function(t,n){n.removeTrack(t),n.dispatchEvent(new e.MediaStreamTrackEvent("removetrack",{track:t}))}(n,t)})),C.associatedRemoteMediaStreams=[]);C.localCapabilities=k,C.remoteCapabilities=L,C.rtpReceiver=T,C.rtcpParameters=O,C.sendEncodingParameters=b,C.recvEncodingParameters=x,o._transceive(o.transceivers[c],!1,A)}}})),void 0===o._dtlsRole&&(o._dtlsRole="offer"===i.type?"active":"passive"),o._remoteDescription={type:i.type,sdp:i.sdp},"offer"===i.type?o._updateSignalingState("have-remote-offer"):o._updateSignalingState("stable"),Object.keys(a).forEach((function(t){var n=a[t];if(n.getTracks().length){if(-1===o.remoteStreams.indexOf(n)){o.remoteStreams.push(n);var i=new Event("addstream");i.stream=n,e.setTimeout((function(){o._dispatchEvent("addstream",i)}))}s.forEach((function(e){var t=e[0],i=e[1];n.id===e[2].id&&r(o,t,i,[n])}))}})),s.forEach((function(e){e[2]||r(o,e[0],e[1],[])})),e.setTimeout((function(){o&&o.transceivers&&o.transceivers.forEach((function(e){e.iceTransport&&"new"===e.iceTransport.state&&e.iceTransport.getRemoteCandidates().length>0&&(console.warn("Timeout for addRemoteCandidate. Consider sending an end-of-candidates notification"),e.iceTransport.addRemoteCandidate({}))}))}),4e3),Promise.resolve()},i.prototype.close=function(){this.transceivers.forEach((function(e){e.iceTransport&&e.iceTransport.stop(),e.dtlsTransport&&e.dtlsTransport.stop(),e.rtpSender&&e.rtpSender.stop(),e.rtpReceiver&&e.rtpReceiver.stop()})),this._isClosed=!0,this._updateSignalingState("closed")},i.prototype._updateSignalingState=function(e){this.signalingState=e;var t=new Event("signalingstatechange");this._dispatchEvent("signalingstatechange",t)},i.prototype._maybeFireNegotiationNeeded=function(){var t=this;"stable"===this.signalingState&&!0!==this.needNegotiation&&(this.needNegotiation=!0,e.setTimeout((function(){if(t.needNegotiation){t.needNegotiation=!1;var e=new Event("negotiationneeded");t._dispatchEvent("negotiationneeded",e)}}),0))},i.prototype._updateIceConnectionState=function(){var e,t={new:0,closed:0,checking:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach((function(e){e.iceTransport&&!e.rejected&&t[e.iceTransport.state]++})),e="new",t.failed>0?e="failed":t.checking>0?e="checking":t.disconnected>0?e="disconnected":t.new>0?e="new":t.connected>0?e="connected":t.completed>0&&(e="completed"),e!==this.iceConnectionState){this.iceConnectionState=e;var n=new Event("iceconnectionstatechange");this._dispatchEvent("iceconnectionstatechange",n)}},i.prototype._updateConnectionState=function(){var e,t={new:0,closed:0,connecting:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach((function(e){e.iceTransport&&e.dtlsTransport&&!e.rejected&&(t[e.iceTransport.state]++,t[e.dtlsTransport.state]++)})),t.connected+=t.completed,e="new",t.failed>0?e="failed":t.connecting>0?e="connecting":t.disconnected>0?e="disconnected":t.new>0?e="new":t.connected>0&&(e="connected"),e!==this.connectionState){this.connectionState=e;var n=new Event("connectionstatechange");this._dispatchEvent("connectionstatechange",n)}},i.prototype.createOffer=function(){var n=this;if(n._isClosed)return Promise.reject(ue("InvalidStateError","Can not call createOffer after close"));var r=n.transceivers.filter((function(e){return"audio"===e.kind})).length,i=n.transceivers.filter((function(e){return"video"===e.kind})).length,o=arguments[0];if(o){if(o.mandatory||o.optional)throw new TypeError("Legacy mandatory/optional constraints not supported.");void 0!==o.offerToReceiveAudio&&(r=!0===o.offerToReceiveAudio?1:!1===o.offerToReceiveAudio?0:o.offerToReceiveAudio),void 0!==o.offerToReceiveVideo&&(i=!0===o.offerToReceiveVideo?1:!1===o.offerToReceiveVideo?0:o.offerToReceiveVideo)}for(n.transceivers.forEach((function(e){"audio"===e.kind?--r<0&&(e.wantReceive=!1):"video"===e.kind&&--i<0&&(e.wantReceive=!1)}));r>0||i>0;)r>0&&(n._createTransceiver("audio"),r--),i>0&&(n._createTransceiver("video"),i--);var a=ce.writeSessionBoilerplate(n._sdpSessionId,n._sdpSessionVersion++);n.transceivers.forEach((function(r,i){var o=r.track,a=r.kind,s=r.mid||ce.generateIdentifier();r.mid=s,r.iceGatherer||(r.iceGatherer=n._createIceGatherer(i,n.usingBundle));var c=e.RTCRtpSender.getCapabilities(a);t<15019&&(c.codecs=c.codecs.filter((function(e){return"rtx"!==e.name}))),c.codecs.forEach((function(e){"H264"===e.name&&void 0===e.parameters["level-asymmetry-allowed"]&&(e.parameters["level-asymmetry-allowed"]="1"),r.remoteCapabilities&&r.remoteCapabilities.codecs&&r.remoteCapabilities.codecs.forEach((function(t){e.name.toLowerCase()===t.name.toLowerCase()&&e.clockRate===t.clockRate&&(e.preferredPayloadType=t.payloadType)}))})),c.headerExtensions.forEach((function(e){(r.remoteCapabilities&&r.remoteCapabilities.headerExtensions||[]).forEach((function(t){e.uri===t.uri&&(e.id=t.id)}))}));var d=r.sendEncodingParameters||[{ssrc:1001*(2*i+1)}];o&&t>=15019&&"video"===a&&!d[0].rtx&&(d[0].rtx={ssrc:d[0].ssrc+1}),r.wantReceive&&(r.rtpReceiver=new e.RTCRtpReceiver(r.dtlsTransport,a)),r.localCapabilities=c,r.sendEncodingParameters=d})),"max-compat"!==n._config.bundlePolicy&&(a+="a=group:BUNDLE "+n.transceivers.map((function(e){return e.mid})).join(" ")+"\r\n"),a+="a=ice-options:trickle\r\n",n.transceivers.forEach((function(e,t){a+=de(e,e.localCapabilities,"offer",e.stream,n._dtlsRole),a+="a=rtcp-rsize\r\n",!e.iceGatherer||"new"===n.iceGatheringState||0!==t&&n.usingBundle||(e.iceGatherer.getLocalCandidates().forEach((function(e){e.component=1,a+="a="+ce.writeCandidate(e)+"\r\n"})),"completed"===e.iceGatherer.state&&(a+="a=end-of-candidates\r\n"))}));var s=new e.RTCSessionDescription({type:"offer",sdp:a});return Promise.resolve(s)},i.prototype.createAnswer=function(){var n=this;if(n._isClosed)return Promise.reject(ue("InvalidStateError","Can not call createAnswer after close"));if("have-remote-offer"!==n.signalingState&&"have-local-pranswer"!==n.signalingState)return Promise.reject(ue("InvalidStateError","Can not call createAnswer in signalingState "+n.signalingState));var r=ce.writeSessionBoilerplate(n._sdpSessionId,n._sdpSessionVersion++);n.usingBundle&&(r+="a=group:BUNDLE "+n.transceivers.map((function(e){return e.mid})).join(" ")+"\r\n"),r+="a=ice-options:trickle\r\n";var i=ce.getMediaSections(n._remoteDescription.sdp).length;n.transceivers.forEach((function(e,o){if(!(o+1>i)){if(e.rejected)return"application"===e.kind?"DTLS/SCTP"===e.protocol?r+="m=application 0 DTLS/SCTP 5000\r\n":r+="m=application 0 "+e.protocol+" webrtc-datachannel\r\n":"audio"===e.kind?r+="m=audio 0 UDP/TLS/RTP/SAVPF 0\r\na=rtpmap:0 PCMU/8000\r\n":"video"===e.kind&&(r+="m=video 0 UDP/TLS/RTP/SAVPF 120\r\na=rtpmap:120 VP8/90000\r\n"),void(r+="c=IN IP4 0.0.0.0\r\na=inactive\r\na=mid:"+e.mid+"\r\n");var a;if(e.stream)"audio"===e.kind?a=e.stream.getAudioTracks()[0]:"video"===e.kind&&(a=e.stream.getVideoTracks()[0]),a&&t>=15019&&"video"===e.kind&&!e.sendEncodingParameters[0].rtx&&(e.sendEncodingParameters[0].rtx={ssrc:e.sendEncodingParameters[0].ssrc+1});var s=le(e.localCapabilities,e.remoteCapabilities);!s.codecs.filter((function(e){return"rtx"===e.name.toLowerCase()})).length&&e.sendEncodingParameters[0].rtx&&delete e.sendEncodingParameters[0].rtx,r+=de(e,s,"answer",e.stream,n._dtlsRole),e.rtcpParameters&&e.rtcpParameters.reducedSize&&(r+="a=rtcp-rsize\r\n")}}));var o=new e.RTCSessionDescription({type:"answer",sdp:r});return Promise.resolve(o)},i.prototype.addIceCandidate=function(e){var t,n=this;return e&&void 0===e.sdpMLineIndex&&!e.sdpMid?Promise.reject(new TypeError("sdpMLineIndex or sdpMid required")):new Promise((function(r,i){if(!n._remoteDescription)return i(ue("InvalidStateError","Can not add ICE candidate without a remote description"));if(e&&""!==e.candidate){var o=e.sdpMLineIndex;if(e.sdpMid)for(var a=0;a<n.transceivers.length;a++)if(n.transceivers[a].mid===e.sdpMid){o=a;break}var s=n.transceivers[o];if(!s)return i(ue("OperationError","Can not add ICE candidate"));if(s.rejected)return r();var c=Object.keys(e.candidate).length>0?ce.parseCandidate(e.candidate):{};if("tcp"===c.protocol&&(0===c.port||9===c.port))return r();if(c.component&&1!==c.component)return r();if((0===o||o>0&&s.iceTransport!==n.transceivers[0].iceTransport)&&!pe(s.iceTransport,c))return i(ue("OperationError","Can not add ICE candidate"));var d=e.candidate.trim();0===d.indexOf("a=")&&(d=d.substr(2)),(t=ce.getMediaSections(n._remoteDescription.sdp))[o]+="a="+(c.type?d:"end-of-candidates")+"\r\n",n._remoteDescription.sdp=ce.getDescription(n._remoteDescription.sdp)+t.join("")}else for(var l=0;l<n.transceivers.length&&(n.transceivers[l].rejected||(n.transceivers[l].iceTransport.addRemoteCandidate({}),(t=ce.getMediaSections(n._remoteDescription.sdp))[l]+="a=end-of-candidates\r\n",n._remoteDescription.sdp=ce.getDescription(n._remoteDescription.sdp)+t.join(""),!n.usingBundle));l++);r()}))},i.prototype.getStats=function(t){if(t&&t instanceof e.MediaStreamTrack){var n=null;if(this.transceivers.forEach((function(e){e.rtpSender&&e.rtpSender.track===t?n=e.rtpSender:e.rtpReceiver&&e.rtpReceiver.track===t&&(n=e.rtpReceiver)})),!n)throw ue("InvalidAccessError","Invalid selector.");return n.getStats()}var r=[];return this.transceivers.forEach((function(e){["rtpSender","rtpReceiver","iceGatherer","iceTransport","dtlsTransport"].forEach((function(t){e[t]&&r.push(e[t].getStats())}))})),Promise.all(r).then((function(e){var t=new Map;return e.forEach((function(e){e.forEach((function(e){t.set(e.id,e)}))})),t}))};["RTCRtpSender","RTCRtpReceiver","RTCIceGatherer","RTCIceTransport","RTCDtlsTransport"].forEach((function(t){var n=e[t];if(n&&n.prototype&&n.prototype.getStats){var r=n.prototype.getStats;n.prototype.getStats=function(){return r.apply(this).then((function(e){var t=new Map;return Object.keys(e).forEach((function(n){var r;e[n].type={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[(r=e[n]).type]||r.type,t.set(n,e[n])})),t}))}}}));var o=["createOffer","createAnswer"];return o.forEach((function(e){var t=i.prototype[e];i.prototype[e]=function(){var e=arguments;return"function"==typeof e[0]||"function"==typeof e[1]?t.apply(this,[arguments[2]]).then((function(t){"function"==typeof e[0]&&e[0].apply(null,[t])}),(function(t){"function"==typeof e[1]&&e[1].apply(null,[t])})):t.apply(this,arguments)}})),(o=["setLocalDescription","setRemoteDescription","addIceCandidate"]).forEach((function(e){var t=i.prototype[e];i.prototype[e]=function(){var e=arguments;return"function"==typeof e[1]||"function"==typeof e[2]?t.apply(this,arguments).then((function(){"function"==typeof e[1]&&e[1].apply(null)}),(function(t){"function"==typeof e[2]&&e[2].apply(null,[t])})):t.apply(this,arguments)}})),["getStats"].forEach((function(e){var t=i.prototype[e];i.prototype[e]=function(){var e=arguments;return"function"==typeof e[1]?t.apply(this,arguments).then((function(){"function"==typeof e[1]&&e[1].apply(null)})):t.apply(this,arguments)}})),i};function fe(e){const t=e&&e.navigator,n=t.mediaDevices.getUserMedia.bind(t.mediaDevices);t.mediaDevices.getUserMedia=function(e){return n(e).catch(e=>Promise.reject(function(e){return{name:{PermissionDeniedError:"NotAllowedError"}[e.name]||e.name,message:e.message,constraint:e.constraint,toString(){return this.name}}}(e)))}}function ve(e){"getDisplayMedia"in e.navigator&&e.navigator.mediaDevices&&(e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||(e.navigator.mediaDevices.getDisplayMedia=e.navigator.getDisplayMedia.bind(e.navigator.mediaDevices)))}function ge(e){const t=H(e);if(e.RTCIceGatherer&&(e.RTCIceCandidate||(e.RTCIceCandidate=function(e){return e}),e.RTCSessionDescription||(e.RTCSessionDescription=function(e){return e}),t.version<15025)){const t=Object.getOwnPropertyDescriptor(e.MediaStreamTrack.prototype,"enabled");Object.defineProperty(e.MediaStreamTrack.prototype,"enabled",{set(e){t.set.call(this,e);const n=new Event("enabled");n.enabled=e,this.dispatchEvent(n)}})}!e.RTCRtpSender||"dtmf"in e.RTCRtpSender.prototype||Object.defineProperty(e.RTCRtpSender.prototype,"dtmf",{get(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=new e.RTCDtmfSender(this):"video"===this.track.kind&&(this._dtmf=null)),this._dtmf}}),e.RTCDtmfSender&&!e.RTCDTMFSender&&(e.RTCDTMFSender=e.RTCDtmfSender);const n=me(e,t.version);e.RTCPeerConnection=function(e){return e&&e.iceServers&&(e.iceServers=function(e,t){let n=!1;return(e=JSON.parse(JSON.stringify(e))).filter(e=>{if(e&&(e.urls||e.url)){var t=e.urls||e.url;e.url&&!e.urls&&z("RTCIceServer.url","RTCIceServer.urls");const r="string"==typeof t;return r&&(t=[t]),t=t.filter(e=>{if(0===e.indexOf("stun:"))return!1;const t=e.startsWith("turn")&&!e.startsWith("turn:[")&&e.includes("transport=udp");return t&&!n?(n=!0,!0):t&&!n}),delete e.url,e.urls=r?t[0]:t,!!t.length}})}(e.iceServers,t.version),q("ICE servers after filtering:",e.iceServers)),new n(e)},e.RTCPeerConnection.prototype=n.prototype}function ye(e){!e.RTCRtpSender||"replaceTrack"in e.RTCRtpSender.prototype||(e.RTCRtpSender.prototype.replaceTrack=e.RTCRtpSender.prototype.setTrack)}var Ce=Object.freeze({__proto__:null,shimPeerConnection:ge,shimReplaceTrack:ye,shimGetUserMedia:fe,shimGetDisplayMedia:ve});function Se(e){const t=H(e),n=e&&e.navigator,r=e&&e.MediaStreamTrack;if(n.getUserMedia=function(e,t,r){z("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),n.mediaDevices.getUserMedia(e).then(t,r)},!(t.version>55&&"autoGainControl"in n.mediaDevices.getSupportedConstraints())){const e=function(e,t,n){t in e&&!(n in e)&&(e[n]=e[t],delete e[t])},t=n.mediaDevices.getUserMedia.bind(n.mediaDevices);if(n.mediaDevices.getUserMedia=function(n){return"object"==typeof n&&"object"==typeof n.audio&&(n=JSON.parse(JSON.stringify(n)),e(n.audio,"autoGainControl","mozAutoGainControl"),e(n.audio,"noiseSuppression","mozNoiseSuppression")),t(n)},r&&r.prototype.getSettings){const t=r.prototype.getSettings;r.prototype.getSettings=function(){const n=t.apply(this,arguments);return e(n,"mozAutoGainControl","autoGainControl"),e(n,"mozNoiseSuppression","noiseSuppression"),n}}if(r&&r.prototype.applyConstraints){const t=r.prototype.applyConstraints;r.prototype.applyConstraints=function(n){return"audio"===this.kind&&"object"==typeof n&&(n=JSON.parse(JSON.stringify(n)),e(n,"autoGainControl","mozAutoGainControl"),e(n,"noiseSuppression","mozNoiseSuppression")),t.apply(this,[n])}}}}function Re(e){"object"==typeof e&&e.RTCTrackEvent&&"receiver"in e.RTCTrackEvent.prototype&&!("transceiver"in e.RTCTrackEvent.prototype)&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Ee(e){const t=H(e);if("object"!=typeof e||!e.RTCPeerConnection&&!e.mozRTCPeerConnection)return;!e.RTCPeerConnection&&e.mozRTCPeerConnection&&(e.RTCPeerConnection=e.mozRTCPeerConnection),["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(t){const n=e.RTCPeerConnection.prototype[t];e.RTCPeerConnection.prototype[t]=function(){return arguments[0]=new("addIceCandidate"===t?e.RTCIceCandidate:e.RTCSessionDescription)(arguments[0]),n.apply(this,arguments)}}));const n=e.RTCPeerConnection.prototype.addIceCandidate;e.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?n.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())};const r={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},i=e.RTCPeerConnection.prototype.getStats;e.RTCPeerConnection.prototype.getStats=function(e,n,o){return i.apply(this,[e||null]).then(e=>{if(t.version<53&&!n)try{e.forEach(e=>{e.type=r[e.type]||e.type})}catch(t){if("TypeError"!==t.name)throw t;e.forEach((t,n)=>{e.set(n,Object.assign({},t,{type:r[t.type]||t.type}))})}return e}).then(n,o)}}function Te(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpSender.prototype)return;const t=e.RTCPeerConnection.prototype.getSenders;t&&(e.RTCPeerConnection.prototype.getSenders=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e});const n=e.RTCPeerConnection.prototype.addTrack;n&&(e.RTCPeerConnection.prototype.addTrack=function(){const e=n.apply(this,arguments);return e._pc=this,e}),e.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function be(e){if("object"!=typeof e||!e.RTCPeerConnection||!e.RTCRtpSender)return;if(e.RTCRtpSender&&"getStats"in e.RTCRtpReceiver.prototype)return;const t=e.RTCPeerConnection.prototype.getReceivers;t&&(e.RTCPeerConnection.prototype.getReceivers=function(){const e=t.apply(this,[]);return e.forEach(e=>e._pc=this),e}),W(e,"track",e=>(e.receiver._pc=e.srcElement,e)),e.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function xe(e){!e.RTCPeerConnection||"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){z("removeStream","removeTrack"),this.getSenders().forEach(t=>{t.track&&e.getTracks().includes(t.track)&&this.removeTrack(t)})})}function ke(e){e.DataChannel&&!e.RTCDataChannel&&(e.RTCDataChannel=e.DataChannel)}var Pe=Object.freeze({__proto__:null,shimOnTrack:Re,shimPeerConnection:Ee,shimSenderGetStats:Te,shimReceiverGetStats:be,shimRemoveStream:xe,shimRTCDataChannel:ke,shimGetUserMedia:Se,shimGetDisplayMedia:function(e,t){e.navigator.mediaDevices&&"getDisplayMedia"in e.navigator.mediaDevices||e.navigator.mediaDevices&&(e.navigator.mediaDevices.getDisplayMedia=function(n){if(!n||!n.video){const e=new DOMException("getDisplayMedia without video constraints is undefined");return e.name="NotFoundError",e.code=8,Promise.reject(e)}return!0===n.video?n.video={mediaSource:t}:n.video.mediaSource=t,e.navigator.mediaDevices.getUserMedia(n)})}});function we(e){if("object"==typeof e&&e.RTCPeerConnection){if("getLocalStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in e.RTCPeerConnection.prototype)){const t=e.RTCPeerConnection.prototype.addTrack;e.RTCPeerConnection.prototype.addStream=function(e){this._localStreams||(this._localStreams=[]),this._localStreams.includes(e)||this._localStreams.push(e),e.getTracks().forEach(n=>t.call(this,n,e))},e.RTCPeerConnection.prototype.addTrack=function(e,n){return n&&(this._localStreams?this._localStreams.includes(n)||this._localStreams.push(n):this._localStreams=[n]),t.call(this,e,n)}}"removeStream"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.removeStream=function(e){this._localStreams||(this._localStreams=[]);const t=this._localStreams.indexOf(e);if(-1===t)return;this._localStreams.splice(t,1);const n=e.getTracks();this.getSenders().forEach(e=>{n.includes(e.track)&&this.removeTrack(e)})})}}function Me(e){if("object"==typeof e&&e.RTCPeerConnection&&("getRemoteStreams"in e.RTCPeerConnection.prototype||(e.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in e.RTCPeerConnection.prototype))){Object.defineProperty(e.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(e){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=e),this.addEventListener("track",this._onaddstreampoly=e=>{e.streams.forEach(e=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(e))return;this._remoteStreams.push(e);const t=new Event("addstream");t.stream=e,this.dispatchEvent(t)})})}});const t=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){const e=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(t){t.streams.forEach(t=>{if(e._remoteStreams||(e._remoteStreams=[]),e._remoteStreams.indexOf(t)>=0)return;e._remoteStreams.push(t);const n=new Event("addstream");n.stream=t,e.dispatchEvent(n)})}),t.apply(e,arguments)}}}function Le(e){if("object"!=typeof e||!e.RTCPeerConnection)return;const t=e.RTCPeerConnection.prototype,n=t.createOffer,r=t.createAnswer,i=t.setLocalDescription,o=t.setRemoteDescription,a=t.addIceCandidate;t.createOffer=function(e,t){const r=arguments.length>=2?arguments[2]:arguments[0],i=n.apply(this,[r]);return t?(i.then(e,t),Promise.resolve()):i},t.createAnswer=function(e,t){const n=arguments.length>=2?arguments[2]:arguments[0],i=r.apply(this,[n]);return t?(i.then(e,t),Promise.resolve()):i};let s=function(e,t,n){const r=i.apply(this,[e]);return n?(r.then(t,n),Promise.resolve()):r};t.setLocalDescription=s,s=function(e,t,n){const r=o.apply(this,[e]);return n?(r.then(t,n),Promise.resolve()):r},t.setRemoteDescription=s,s=function(e,t,n){const r=a.apply(this,[e]);return n?(r.then(t,n),Promise.resolve()):r},t.addIceCandidate=s}function Oe(e){const t=e&&e.navigator;if(t.mediaDevices&&t.mediaDevices.getUserMedia){const e=t.mediaDevices,n=e.getUserMedia.bind(e);t.mediaDevices.getUserMedia=e=>n(Ie(e))}!t.getUserMedia&&t.mediaDevices&&t.mediaDevices.getUserMedia&&(t.getUserMedia=function(e,n,r){t.mediaDevices.getUserMedia(e).then(n,r)}.bind(t))}function Ie(e){return e&&void 0!==e.video?Object.assign({},e,{video:K(e.video)}):e}function _e(e){const t=e.RTCPeerConnection;e.RTCPeerConnection=function(e,n){if(e&&e.iceServers){const t=[];for(let n=0;n<e.iceServers.length;n++){let r=e.iceServers[n];!r.hasOwnProperty("urls")&&r.hasOwnProperty("url")?(z("RTCIceServer.url","RTCIceServer.urls"),r=JSON.parse(JSON.stringify(r)),r.urls=r.url,delete r.url,t.push(r)):t.push(e.iceServers[n])}e.iceServers=t}return new t(e,n)},e.RTCPeerConnection.prototype=t.prototype,"generateCertificate"in e.RTCPeerConnection&&Object.defineProperty(e.RTCPeerConnection,"generateCertificate",{get:()=>t.generateCertificate})}function De(e){"object"==typeof e&&e.RTCPeerConnection&&"receiver"in e.RTCTrackEvent.prototype&&!e.RTCTransceiver&&Object.defineProperty(e.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Ae(e){const t=e.RTCPeerConnection.prototype.createOffer;e.RTCPeerConnection.prototype.createOffer=function(e){if(e){void 0!==e.offerToReceiveAudio&&(e.offerToReceiveAudio=!!e.offerToReceiveAudio);const t=this.getTransceivers().find(e=>e.sender.track&&"audio"===e.sender.track.kind);!1===e.offerToReceiveAudio&&t?"sendrecv"===t.direction?t.setDirection?t.setDirection("sendonly"):t.direction="sendonly":"recvonly"===t.direction&&(t.setDirection?t.setDirection("inactive"):t.direction="inactive"):!0!==e.offerToReceiveAudio||t||this.addTransceiver("audio"),void 0!==e.offerToReceiveVideo&&(e.offerToReceiveVideo=!!e.offerToReceiveVideo);const n=this.getTransceivers().find(e=>e.sender.track&&"video"===e.sender.track.kind);!1===e.offerToReceiveVideo&&n?"sendrecv"===n.direction?n.setDirection?n.setDirection("sendonly"):n.direction="sendonly":"recvonly"===n.direction&&(n.setDirection?n.setDirection("inactive"):n.direction="inactive"):!0!==e.offerToReceiveVideo||n||this.addTransceiver("video")}return t.apply(this,arguments)}}var je=Object.freeze({__proto__:null,shimLocalStreamsAPI:we,shimRemoteStreamsAPI:Me,shimCallbacksAPI:Le,shimGetUserMedia:Oe,shimConstraints:Ie,shimRTCIceServerUrls:_e,shimTrackEventTransceiver:De,shimCreateOfferLegacy:Ae});function Fe(e){if(!e.RTCIceCandidate||e.RTCIceCandidate&&"foundation"in e.RTCIceCandidate.prototype)return;const t=e.RTCIceCandidate;e.RTCIceCandidate=function(e){if("object"==typeof e&&e.candidate&&0===e.candidate.indexOf("a=")&&((e=JSON.parse(JSON.stringify(e))).candidate=e.candidate.substr(2)),e.candidate&&e.candidate.length){const n=new t(e),r=ce.parseCandidate(e.candidate),i=Object.assign(n,r);return i.toJSON=function(){return{candidate:i.candidate,sdpMid:i.sdpMid,sdpMLineIndex:i.sdpMLineIndex,usernameFragment:i.usernameFragment}},i}return new t(e)},e.RTCIceCandidate.prototype=t.prototype,W(e,"icecandidate",t=>(t.candidate&&Object.defineProperty(t,"candidate",{value:new e.RTCIceCandidate(t.candidate),writable:"false"}),t))}function Ne(e){if(e.RTCSctpTransport||!e.RTCPeerConnection)return;const t=H(e);"sctp"in e.RTCPeerConnection.prototype||Object.defineProperty(e.RTCPeerConnection.prototype,"sctp",{get(){return void 0===this._sctp?null:this._sctp}});const n=function(e){const t=ce.splitSections(e.sdp);return t.shift(),t.some(e=>{const t=ce.parseMLine(e);return t&&"application"===t.kind&&-1!==t.protocol.indexOf("SCTP")})},r=function(e){const t=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(null===t||t.length<2)return-1;const n=parseInt(t[1],10);return n!=n?-1:n},i=function(e){let n=65536;return"firefox"===t.browser&&(n=t.version<57?-1===e?16384:2147483637:t.version<60?57===t.version?65535:65536:2147483637),n},o=function(e,n){let r=65536;"firefox"===t.browser&&57===t.version&&(r=65535);const i=ce.matchPrefix(e.sdp,"a=max-message-size:");return i.length>0?r=parseInt(i[0].substr(19),10):"firefox"===t.browser&&-1!==n&&(r=2147483637),r},a=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,n(arguments[0])){const e=r(arguments[0]),t=i(e),n=o(arguments[0],e);let a;a=0===t&&0===n?Number.POSITIVE_INFINITY:0===t||0===n?Math.max(t,n):Math.min(t,n);const s={};Object.defineProperty(s,"maxMessageSize",{get:()=>a}),this._sctp=s}return a.apply(this,arguments)}}function Ve(e){if(!(e.RTCPeerConnection&&"createDataChannel"in e.RTCPeerConnection.prototype))return;function t(e,t){const n=e.send;e.send=function(){const r=arguments[0],i=r.length||r.size||r.byteLength;if("open"===e.readyState&&t.sctp&&i>t.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+t.sctp.maxMessageSize+" bytes)");return n.apply(e,arguments)}}const n=e.RTCPeerConnection.prototype.createDataChannel;e.RTCPeerConnection.prototype.createDataChannel=function(){const e=n.apply(this,arguments);return t(e,this),e},W(e,"datachannel",e=>(t(e.channel,e.target),e))}function Be(e){if(!e.RTCPeerConnection||"connectionState"in e.RTCPeerConnection.prototype)return;const t=e.RTCPeerConnection.prototype;Object.defineProperty(t,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(t,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(e){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),e&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=e)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(e=>{const n=t[e];t[e]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=e=>{const t=e.target;if(t._lastConnectionState!==t.connectionState){t._lastConnectionState=t.connectionState;const n=new Event("connectionstatechange",e);t.dispatchEvent(n)}return e},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),n.apply(this,arguments)}})}function Ge(e){if(!e.RTCPeerConnection)return;const t=H(e);if("chrome"===t.browser&&t.version>=71)return;const n=e.RTCPeerConnection.prototype.setRemoteDescription;e.RTCPeerConnection.prototype.setRemoteDescription=function(e){return e&&e.sdp&&-1!==e.sdp.indexOf("\na=extmap-allow-mixed")&&(e.sdp=e.sdp.split("\n").filter(e=>"a=extmap-allow-mixed"!==e.trim()).join("\n")),n.apply(this,arguments)}}var Ue=Object.freeze({__proto__:null,shimRTCIceCandidate:Fe,shimMaxMessageSize:Ne,shimSendThrowTypeError:Ve,shimConnectionState:Be,removeAllowExtmapMixed:Ge});!function({window:e}={},t={shimChrome:!0,shimFirefox:!0,shimEdge:!0,shimSafari:!0}){const n=q,r=H(e),i={browserDetails:r,commonShim:Ue,extractVersion:U,disableLog:J,disableWarnings:$};switch(r.browser){case"chrome":if(!se||!oe||!t.shimChrome)return n("Chrome shim is not included in this adapter release."),i;n("adapter.js shimming chrome."),i.browserShim=se,Q(e),Y(e),oe(e),ee(e),ie(e),te(e),ne(e),ae(e),Fe(e),Be(e),Ne(e),Ve(e),Ge(e);break;case"firefox":if(!Pe||!Ee||!t.shimFirefox)return n("Firefox shim is not included in this adapter release."),i;n("adapter.js shimming firefox."),i.browserShim=Pe,Se(e),Ee(e),Re(e),xe(e),Te(e),be(e),ke(e),Fe(e),Be(e),Ne(e),Ve(e);break;case"edge":if(!Ce||!ge||!t.shimEdge)return n("MS edge shim is not included in this adapter release."),i;n("adapter.js shimming edge."),i.browserShim=Ce,fe(e),ve(e),ge(e),ye(e),Ne(e),Ve(e);break;case"safari":if(!je||!t.shimSafari)return n("Safari shim is not included in this adapter release."),i;n("adapter.js shimming safari."),i.browserShim=je,_e(e),Ae(e),Le(e),we(e),Me(e),De(e),Oe(e),Fe(e),Ne(e),Ve(e),Ge(e);break;default:n("Unsupported browser!")}}({window:window});export default class{constructor({config:e,listener:t}){this.version="2.5.18",this.context=new u,this.context.startTime=new Date,this.context.sdkVersion=this.version,this.config=c(p,e),this.context.logServer=e.logServer&&(e.logServer.url||e.logServer.hasOwnProperty("logSending"))?{...p.logServer,...e.logServer}:p.logServer,this.context.eventManager=function(){const e=["onInit","onConnectChannel","onCreateChannel","onComplete","onConnect","onDisplayUserMedia","onAddLocalStream","onAddRemoteStream","onStateChange","onDisconnectChannel","onMessage","onError","onStat","onSearch","onClose","onRoomEvent","onLog","onJoin","onCreate","onRecordEvent","onReconnect","ack"],t=new Map(e.map(e=>[e]));return Object.freeze({addEventListener:function({type:n,listenerItem:r}){if("function"!=typeof r)throw new Error("EventManager:listenerMustBeAFunction");if(!e.includes(n))throw new Error("EventManager:UnmatchedEvent");t.set(n,r)},hasEventListener:function(n){if(e.includes(n))return void 0!==t.get(n);throw new Error("EventManager:UnmatchedEvent")},removeEventListener:function(n){if(!e.includes(n)||!t.has(n))throw new Error("EventManager:UnmatchedEventOrDidNotContainAnylistener");t.set(n,void 0)},getEventListeners:function(){return t},dispatchEvent:function(n,...r){if(e.includes(n))return void 0===t.get(n)?void 0:setTimeout(()=>{t.get(n)(...r)},0);throw new Error("EventManager:UnmatchedEvent")}})}(),t&&Object.keys(t).forEach(e=>{const n=t[e];this.context.eventManager.addEventListener({type:e,listenerItem:n})}),this.config.view.localStream=e.view.localStream||void 0,this.context.config=this.config,this.context.sdpSemantics=this.config.rtc&&this.config.rtc.sdpSemantics?this.config.rtc.sdpSemantics:p.rtc.sdpSemantics,this.context.simulcast=this.config.rtc&&this.config.rtc.simulcast?this.config.rtc.simulcast:p.rtc.simulcast,this.context.logLevel=this.config.dev&&this.config.dev.logLevel?this.config.dev.logLevel:"INFO",f.MediaDeviceCheck(this.context,this.config),this.media=new g(this.context),this.context.mediaManager=this.media,this.uri=p.appServer.url,this.key=this.config.credential.key,this.serviceId=this.config.credential.serviceId,this.context.key=this.key,this.context.serviceId=this.serviceId,this.context.state="INIT",m.init(this.context),this.config.rtc.selectiveCandidate&&this.config.rtc.selectiveCandidate.serverUrls&&(this.config.rtc.iceServers=c([],this.config.rtc.selectiveCandidate.serverUrls)),this.config.media||(this.config.media={audio:!0,video:!0,record:!1}),this.config.media.record&&(this.context.useRecord=this.config.media.record,this.config.media.recordUrl?this.context.recordUrl=this.config.media.recordUrl:this.context.recordUrl="https://demo.remotemonster.com/rest/record"),this.config.media.video.codec&&(this.context.videoCodec=this.config.media.video.codec),this.config.media.audio.codec&&(this.context.audioCodec=this.config.media.audio.codec),!1===this.config.media.video&&(this.context.useVideo=!1),!1===this.config.media.audio&&(this.context.useAudio=!1),this.config.media.video.maxBandwidth&&(this.context.videoBandwidth=this.config.media.video.maxBandwidth),this.config.media.audio.maxBandwidth&&(this.context.audioBandwidth=this.config.media.audio.maxBandwidth),this.config.credential.resturl&&(this.config.credential.resturl=this.config.credential.resturl.replace("/init",""),p.appServer.url=this.config.credential.resturl,this.uri=p.appServer.url),this.config.credential.wsurl&&(this.config.signalingServer.url=this.config.credential.wsurl)}async init(){m.d("init is called");const e=this,t=this.context,n=this.config;this.context.env={os:h.os.family,osVersion:h.os.version||"0",device:h.name,deviceVersion:h.version||"0",networkType:Navigator.connection,sdkVersion:e.version};let r={credential:{key:e.key,serviceId:e.serviceId},env:this.context.env};e.config.sdk&&e.config.sdk.country&&(r.env.country=e.config.sdk.country),e.config.credential.token&&(r.credential.token=e.config.credential.token),e.config.media.roomid&&(r.id=e.config.media.roomid);var i={method:"POST",headers:{Accept:"application/json, text/plain, */*","Content-Type":"application/json"},body:JSON.stringify(r)};try{var o=await fetch(this.uri+"/init",i),a=await o.json();switch(o.status){case 401:return this.context.eventManager.hasEventListener("onError")&&this.context.eventManager.dispatchEvent("onError","4204",a.Error),!1}}catch(e){return t.eventManager.hasEventListener("onError")&&(t.eventManager.dispatchEvent("onError","WebSocketFailedError",e),t.eventManager.dispatchEvent("onError","4201","initFailedError",e)),m.e("Init: failed:",e),m.errorEvt(t,"1004","auth init failed:"+e),!1}m.d("-> Message:",a),Object.keys(a).forEach(n=>{switch(n){case"iceServers":e.config.rtc.selectiveCandidate&&(!e.config.rtc.selectiveCandidate||"default"!==e.config.rtc.selectiveCandidate.mode&&e.config.rtc.selectiveCandidate.serverUrls)||a[n].forEach(t=>e.config.rtc.iceServers.push(t));break;case"token":t.token=a[n];break;case"key":t.channel.id=a[n];break;case"name":t.channel.name=a[n];break;case"sigurl":e.config.credential.wsurl||(e.config.signalingServer.url=a[n])}});var s={topic:"log",messages:{log:"Peer Id is created : "+t.token,logLevel:"info",os:h.os.family,osVersion:h.os.version||"0",device:h.name,deviceVersion:h.version||"0",networkType:Navigator.connection,sdkVersion:this.version,svcId:t.serviceId,pId:t.token,config:JSON.stringify(t.config),status:"INIT"}};m.evt(JSON.stringify(s)),t.signalingConnection=new N({url:this.config.signalingServer.url,context:t}),t.signalingConnection.connect(),t.signalingConnection.on("reconnect",()=>{this.onReconnectSignalConnection()}),t.signalingConnection.on("disconnect",()=>{this.onDisconnectSignalConnection(),m.errorEvt(t,"1004","socket timeout")}),window.addEventListener("offline",()=>{m.i("Browser: offline"),this.context.signalingConnection.onOffline()},!1),"music"===n.rtc.audioType?n.opt={mandatory:{googHighpassFilter:!1,googEchoCancellation:!1,googEchoCancellation2:!1,googAutoGainControl:!1,googAutoGainControl2:!1,googNoiseSuppression:!1,googNoiseSuppression2:!1,googTypingNoiseDetection:!1,echoCancellation:!1},optional:[{googCpuOveruseDetection:!1}]}:n.opt={optional:[{googCpuOveruseDetection:!1}]};const c={...p.rtc,...n.rtc};t.peerConnection=new RTCPeerConnection(c,n.opt),t.hasAddTrack=void 0!==t.peerConnection.addTrack,V({context:t,media:e.media,config:n}),E({context:t,media:e.media,config:n}),m.i("config",c),n.view&&void 0!==n.view.local&&(t.config.rtc.localVideo=document.querySelector(`${n.view.local}`)),n.view&&void 0!==n.view.remote&&(t.remoteVideo=document.querySelector(`${n.view.remote}`)),n.media.recvonly&&(t.remoteVideo=document.querySelector(`${n.view.remote}`));for(let e=5;e<=11&&!t.signalingConnection.isOpened();e++){const t=Math.pow(2,e);m.v("wating for init %i",e),await this.wait(t)}try{t.devices=await navigator.mediaDevices.enumerateDevices(),t.currentVideoDeviceId=0}catch(e){console.log(e),m.errorEvt(t,"1007","failed to get media devices: "+e)}return!0}async connectCall(e){m.d("connect is called"),await this.connectChannel(e)}async connectChannel(e){return m.d("createChannel is called"),this.config.rtc.audioType="voice",this.context.channel.type="P2P",this.context.channel.id=e,this.config.credential.key&&this.config.credential.serviceId?await this.init()?(m.qualityLog({type:"quality.start",config:this.context.config}),void this.context.signalingConnection.connectChannel(e)):void 0:(this.context.eventManager.hasEventListener("onError")&&this.context.eventManager.dispatchEvent("onError","4101","undefinedServiceId Or undefinedServiceKey"),void(this.context.eventManager.hasEventListener("onClose")&&this.context.eventManager.dispatchEvent("onClose",{message:"undefinedServiceId Or undefinedServiceKey",closeType:"UNKNOWN"})))}async createCast(e){m.d("createCast is called"),this.context.channel.type="BROADCAST",this.config.rtc.audioType||(this.config.rtc.audioType="music"),this.context.channel.id=e,await this.init(),m.qualityLog({type:"quality.start",config:this.context.config}),this.context.signalingConnection.createBroadcastChannel(e)}async createRoom(e){m.d(`Remon.js:createRoom(${e})`),this.context.channel.type="ROOM",await this.init(),m.qualityLog({type:"quality.start",config:this.context.config}),this.context.signalingConnection.createConferenceRoom(e)}async joinCast(e){m.d("joinCast is called"),this.config.rtc.audioType="music",this.context.channel.type="VIEWER",this.context.channel.id=e,this.config.media.recvonly=!0,await this.init(),m.qualityLog({type:"quality.start",config:this.context.config}),this.context.signalingConnection.createViewerChannel(e)}getHealth(){return this.context.health.result}getState(){return this.context.state}getVersion(){return this.version}getChannelId(){return this.context.channel.id}pauseLocalVideo(e){m.d("pauseLocalVideo is called"),this.media.mediaStreamTrackSwitch(this.context.config.rtc.localStream).type("Video").enabled(!!e)}pauseRemoteVideo(e){m.d("pauseRemoteVideo is called"),this.media.mediaStreamTrackSwitch(this.context.remoteStream).type("Video").enabled(!!e)}switchCamera(e){m.d("cameraSwitch is called");let t=[];this.context.devices.map(e=>{"videoinput"===e.kind&&t.push(e)}),this.context.currentVideoDeviceId+1===t.length?this.context.currentVideoDeviceId=0:this.context.currentVideoDeviceId++,this.media.setUserDevices(null,t[this.context.currentVideoDeviceId].deviceId)}setVideoDevice(e){this.media.setUserDevices(null,e)}setAudioDevice(e){this.media.setUserDevices(e,null)}muteLocalAudio(e){this.context.audioTransceiver.sender.track.enabled=!e}async captureScreen(e=640,t=480,n=30,r=!0){this.media.captureScreen(e,t,n,r)}stopCaptureScreen(){this.media.stopCaptureScreen()}muteRemoteAudio(e){this.media.mediaStreamTrackSwitch(this.context.remoteStream).type("Audio").enabled(!!e)}async fetchCalls(e){return await this.search(e)}async fetchCasts(){return await this.liveRooms()}async fetchRooms(e){return(await this.searchRoom(e)).filter(e=>e.id.indexOf(this.context.token)<0)}setVideoQuality(e){this.context.signalingConnection.setSimulcastPriority(e)}reduceVideoQuality(){let e=this.context.currentSimulcast;if("HIGH"===e)e="MIDIUM";else{if("MIDIUM"!==e)return;e="LOW"}this.setVideoQuality(e)}search(e){m.d("search call by"+e);const t={method:"GET",headers:{"Content-Type":"application/json"}};return new Promise((e,n)=>{fetch(this.uri+"/call/"+this.config.credential.serviceId,t).then(t=>{t.json().then(t=>{this.context.eventManager.hasEventListener("onSearch")&&this.context.eventManager.dispatchEvent("onSearch",t),e(t)}).catch(e=>{n(e),m.errorEvt(this.context,"1008","search is failed:"+e)})})})}searchRoom(e){m.d(`Room.js:searchRoom(${e})`);const t={method:"GET",headers:{"Content-Type":"application/json"}};return new Promise((n,r)=>{fetch(this.uri+"/rooms/"+this.config.credential.serviceId+"/"+e,t).then(e=>{e.json().then(e=>{n(e)}).catch(e=>{r(e)})})})}liveRooms(){const e={method:"GET",headers:{"Content-Type":"application/json"}};return new Promise((t,n)=>{fetch(this.uri+"/room/"+this.config.credential.serviceId,e).then(e=>{e.json().then(e=>{t(e)}).catch(e=>{n(e),m.errorEvt(this.context,"1008","search is failed:"+e)})})})}sendMessage(e){m.g("Signaling: Send user message");const t=this.context.signalingConnection.createMessage({command:"message",body:e,code:""});m.d("Message ->:",t),this.context.signalingConnection.send(JSON.stringify(t))}onReconnectSignalConnection(){m.i("event: onReconnectSignalConnection"),this.context.signalingConnection.reconnectChannel()}onDisconnectSignalConnection(){m.i("event: onDisconnectSignalConnection"),this.context.eventManager.hasEventListener("onStateChange")&&this.context.eventManager.dispatchEvent("onStateChange","CLOSE"),this.close("UNKNOWN")}async close(e){if(m.i("Remon.close: "+this.context.channel.id),this.context.mixer&&(this.context.mixer.stopCheck(),this.context.mixer.mixerDelete(),this.context.mixer=null),this.context.useRecord&&this.context.remoteRecorder&&(this.context.remoteRecorder.stop(),this.context.remoteRecorder=null),this.context.useRecord&&this.context.localRecorder&&(this.context.localRecorder.stop(),this.context.localRecorder=null,this.context.useRecord=!1),this.context.remoteVideo&&this.context.remoteVideo.srcObject&&(this.context.remoteVideo.srcObject.getTracks().forEach(e=>e.stop()),this.context.remoteVideo.srcObject=null),this.context.config.rtc.localVideo&&this.context.config.rtc.localVideo.srcObject&&(this.context.config.rtc.localVideo.srcObject.getTracks().forEach(e=>e.stop()),this.context.config.rtc.localVideo.srcObject=void 0),this.context.health&&this.context.health.stop(),this.context.signalingConnection&&this.context.peerConnection){this.context.hasAddTrack?this.context.peerConnection.ontrack=null:this.context.peerConnection.onaddstream=null,this.context.peerConnection.onremovestream=null,this.context.peerConnection.onicecandidate=null,this.context.peerConnection.oniceconnectionstatechange=null,this.context.peerConnection.onsignalingstatechange=null,this.context.peerConnection.onicegatheringstatechange=null,this.context.peerConnection.onnegotiationneeded=null,this.context.qualityChecker||(this.context.qualityChecker=new y(this.context),await this.context.qualityChecker.check()),"closed"!==this.context.peerConnection.signalingState&&this.context.peerConnection.close(),this.context.peerConnection=null,this.context.signalingConnection.close(),e?this.context.eventManager.dispatchEvent("onClose",{closeType:e}):this.context.eventManager.dispatchEvent("onClose",{closeType:"MINE"});var t={topic:"log",messages:{log:"remon is closed",logLevel:"info",sdkVersion:this.version,svcId:this.context.serviceId,pId:this.context.token,chId:this.context.channel.id,status:"CLOSE"}};m.evt(JSON.stringify(t))}}async mixerUpdate(e){if(this.context.mixer){e.forEach((e,t,n)=>{"remon"==e.type&&(e.remon={serviceId:this.context.serviceId,key:this.context.key,chid:this.context.channel.id})});let t={cmd:"replace",sources:e};this.context.mixer.mixerUpdate(t)}}wait(e){return new Promise(t=>{setTimeout(()=>{t()},e)})}}