@vkontakte/calls-sdk 2.6.2-beta.25 → 2.6.2-beta.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/calls-sdk.cjs.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
- * @vkontakte/calls-sdk v2.6.2-beta.25
3
- * Mon, 12 Dec 2022 14:37:23 GMT
2
+ * @vkontakte/calls-sdk v2.6.2-beta.26
3
+ * Tue, 13 Dec 2022 07:49:36 GMT
4
4
  * https://st.mycdn.me/static/callssdk/2-6-2/doc/
5
5
  */
6
6
 
@@ -8,5 +8,5 @@ var za=Object.create;var kt=Object.defineProperty,Qa=Object.defineProperties,Xa=
8
8
  `;if(!I&&!R&&!A&&!J&&!w&&!m)return g;function he(q){let _e=["a=rtcp-fb:111 nack","a=rtcp-fb:111 nack pli"],Ie="a=rtcp-fb:111",Q=q.findIndex(z=>z.startsWith(Ie));return~Q&&(q[Q]=q[Q]+ge+_e.join(ge)),q}function He(q,_e,Ie){let Q=q.split(" "),z=Q.slice(0,3),se;for(se=3;se<Q.length;se++)Ie.includes(Q[se])&&z.push(Q[se]);for(se=3;se<Q.length;se++)!Ie.includes(Q[se])&&!_e.includes(Q[se])&&z.push(Q[se]);return z.join(" ")}function xe(q,_e){let Ie=new RegExp("a=rtpmap:(\\d+) ([a-zA-Z0-9-]+)\\/\\d+"),Q,z=[];for(Q=0;Q<q.length;++Q){let se=q[Q].match(Ie);se&&se.length===3&&se[2]===_e&&z.push(se[1])}return z}function L(q,_e,Ie,Q){let z,se="m="+_e;for(z=0;z<q.length;++z)if(q[z].startsWith(se)){q[z]=He(q[z],Ie,Q);break}}function Le(q,_e){let Ie=new RegExp(Ui+"(\\d+)");for(let Q=0;Q<q.length;++Q){let z=q[Q].match(Ie);if(z&&z.length===2&&_e.includes(z[1])){let se=q[Q].trim()===Ui+z[1]?" ":";";q[Q]+=se+gn}}}function Ge(q){let _e=xe(q,"H264");if(R){let Ie=_e.slice(0),Q=new RegExp(Ui+"(\\d+) apt=(\\d+)"),z;for(z=0;z<q.length;++z){let Je=q[z].match(Q);Je&&Je.length===3&&Ie.includes(Je[2])&&Ie.push(Je[1])}let se=new RegExp("a=(rtpmap|rtcp-fb|fmtp):(\\d+) .*");for(z=q.length;z--;){let Je=q[z].match(se);Je&&Je.length===3&&Ie.includes(Je[2])&&q.splice(z,1)}L(q,"video",Ie,[])}else I&&L(q,"video",[],_e),m&&Le(q,_e)}function Ne(q){let _e=xe(q,"VP9");A&&L(q,"video",[],_e)}function At(q){let _e=xe(q,"red");_e.length>0&&L(q,"audio",[],_e)}let mt=g.split(M);return(R||I||m)&&Ge(mt),A&&Ne(mt),J&&At(mt),w&&he(mt),mt.join(ge)}Ci.patchSDP=a;function e(g){return g?`${g.type||"WEB_SOCKET"}_${g.id}`:"_"}Ci.getPeerIdString=e;function t(g,I){return g&&g.id===I.id&&(g.type||"WEB_SOCKET")===(I.type||"WEB_SOCKET")}Ci.comparePeerId=t;function i(g){return o(this,null,function*(){return!g||!g.getStats?Promise.resolve(null):g.getStats(null).then(I=>{let R=null,A=null;if(I.forEach(m=>{m.type==="transport"&&m.selectedCandidatePairId?A=I.get(m.selectedCandidatePairId):m.type==="candidate-pair"&&m.state==="succeeded"&&!A&&(!m.hasOwnProperty("selected")||m.selected)&&(A=m)}),A&&A.localCandidateId){let m=I.get(A.localCandidateId);m&&(R={type:m.candidateType,ip:m.ip||m.ipAddress,port:m.port||m.portNumber})}return R}).catch(()=>null)})}Ci.getPeerConnectionHostInfo=i;let r=/^[0-9]+$/,n=/^([gu])([0-9]+)$/;function s(g,I){let R=String(g);return n.test(R)?(c.warn(`Already composite id [${g}] type supplied [${I}]`),R):I===X.GROUP?"g"+R:I===X.USER?"u"+R:(c.warn(`Unknown type [${I}] for id [${g}]`),R.match(r)?"u"+R:R)}Ci.composeUserId=s;function p(g,I,R){let A=s(g,I);return l(A,R)}Ci.composeParticipantId=p;function l(g,I){return I?g+Et+Zt+I:g}Ci.compose=l;function u(g){return p(g.id,g.idType||X.USER,g.deviceIdx||0)}Ci.composeId=u;function P(g){return g.participant?u(g.participant):p(g.participantId,g.participantType||X.USER,g.deviceIdx||0)}Ci.composeMessageId=P;function C(g){let I=String(g),R=I.match(n);return R?{id:Number(R[2]),type:R[1]==="g"?X.GROUP:X.USER}:(c.warn(`Unsupported compositeId [${g}]`),{id:Number(I),type:X.USER})}Ci.decomposeId=C;function O(g){let I=g.split(Et+Zt);return{compositeUserId:I[0],deviceIdx:I.length>1?parseInt(I[1],10):0}}Ci.decomposeParticipantId=O;function x(){var J,M;let g=(M=(J=window.crypto)==null?void 0:J.randomUUID)==null?void 0:M.call(J);if(g)return g;let I="0123456789abcdefghijklmnopqrstuvwxyz".split(""),R=new Array(36),A=0,m,w;for(w=0;w<36;w++)w===8||w===13||w===18||w===23?R[w]="-":w===14?R[w]="4":(A<=2&&(A=33554432+Math.random()*16777216|0),m=A&15,A=A>>4,R[w]=I[w===19?m&3|8:m]);return R.join("")}Ci.uuid=x;function H(g,I){let R;function A(){let m=this,w=arguments;R&&window.clearTimeout(R),R=window.setTimeout(()=>{g.apply(m,w)},I)}return A}Ci.throttle=H;function re(g){if(!window.BigInt)return null;let I="",R=g.split(`
9
9
  `);for(let w of R)if(w.startsWith("a=fingerprint")){let J=w.split(" ");if(J.length===2){I=J[1];break}}if(!I)return BigInt(-1);let A=I.split(":"),m=BigInt(0);for(let w=Math.min(7,A.length-1);w>=0;w--){let J=BigInt(parseInt(A[w],16));m<<=BigInt(8),m|=J}return BigInt.asIntN(64,m)}Ci.sdpFingerprint=re;function Se(g){return o(this,null,function*(){return new Promise(I=>window.setTimeout(I,g))})}Ci.delay=Se;function pe(g,I,R){let A=[];return g.getSenders().forEach(m=>$e(I,m,m.track,R,A)),A}Ci.applySettings=pe;function $e(g,I,R,A,m){var w;if(g&&R&&R.kind===ce.video){let J=R.getSettings();if(J){let M=g.maxBitrateK?g.maxBitrateK*1024:null,ge=J.width,he=J.height,He=ge&&he&&g.maxDimension?Math.max(1,Math.max(ge,he)/g.maxDimension):null,xe=g.maxFramerate?g.maxFramerate:null;if(ge&&he&&g.maxDimension&&g.maxDimension>Math.max(ge,he)){let Ne=Math.round(ge*he/256),At=(Math.round(Ne*_n/1e4)+1)*1e4;M=M===null?At:Math.min(At,M)}let L=g.degradationPreference?g.degradationPreference:"balanced",Le=A[R.id];if(Le&&Le.bitrate===M&&Le.scaleResolutionDownBy===He&&Le.maxFramerate===xe&&Le.degradationPreference===L){m[R.id]=Le;return}m[R.id]={bitrate:M,scaleResolutionDownBy:He,maxFramerate:xe,degradationPreference:L};let Ge=I.getParameters();Ge.encodings||(Ge.encodings=[{}]),Ge.encodings.forEach(Ne=>{M?Ne.maxBitrate=M:delete Ne.maxBitrate,He?Ne.scaleResolutionDownBy=He:delete Ne.scaleResolutionDownBy,xe?Ne.maxFramerate=xe:delete Ne.maxFramerate}),Ge.degradationPreference=L,(w=I.setParameters)==null||w.call(I,Ge)}}}Ci.applyVideoTrackSettings=$e;function le(g,I){Array.isArray(I)||(I=[I]);for(let R of I)if(g.includes(R))return!0;return!1}Ci.includesOneOf=le;function be(g){var I;return Object.entries(((I=g.participantState)==null?void 0:I.state)||{}).reduce((R,[A,m])=>(g.participantState&&(R[A]={ts:g.participantState.stateUpdateTs[A],state:m}),R),{})}Ci.mapParticipantState=be;function Me(g){let I=g.map(R=>({uid:R.externalId,mediaSettings:R.mediaSettings,status:R.status,muteStates:R.muteStates,unmuteOptions:R.unmuteOptions,participantState:R.participantState,markers:R.markers,movieShareInfos:R.movieShareInfos}));return d.filterObservers?I.filter(R=>!R.uid.observer):I}Ci.mapSharedParticipants=Me;function Xe(g,I){let R=Object.keys(g),A=Object.keys(I);if(R.length!==A.length)return!1;for(let m of R)if(!A.hasOwnProperty(m)||g[m].state!==I[m].state||g[m].ts!==I[m].ts)return!1;return!0}Ci.isEqualParticipantState=Xe;function hr(g,I){let R=Object.keys(g),A=Object.keys(I);if(R.length!==A.length)return!1;for(let m of R)if(!I.hasOwnProperty(m)||g[m]!==I[m])return!1;return!0}Ci.isObjectsEquals=hr;function Z(g,I){if(g.length!==I.length)return!1;for(let R of g)if(I.indexOf(R)<0)return!1;return!0}Ci.isArraysEquals=Z;function _r(g){return!Object.keys(g).length}Ci.isEmptyObject=_r;function gr(g,I){if(!g&&!I)return 0;if(!g||!I)return g?-1:1;return A(I.rank,g.rank)||A(g.ts,I.ts)||R(g,I);function R(m,w){let J={[X.USER]:0,[X.GROUP]:1},{compositeUserId:M,deviceIdx:ge}=O(m.id),{compositeUserId:he,deviceIdx:He}=O(w.id),{id:xe,type:L}=C(M),{id:Le,type:Ge}=C(he);return A(J[L],J[Ge])||A(xe,Le)||A(ge,He)}function A(m,w){return m<w?-1:m===w?0:1}}Ci.participantMarkerCompare=gr;function fr(g,I){let R=Object.entries(g).filter(([,A])=>Array.isArray(I)?!I.includes(A):A!==I);return Object.fromEntries(R)}Ci.objectFilterOutValues=fr;function $(g,I,R){let A=R;for(let m in g)!g.hasOwnProperty(m)||(A=I(A,g[m],m));return A}Ci.objectReduce=$,Ci.setImmediate=(()=>{let g=1,I={},R=null;return typeof MessageChannel!="undefined"&&(R=new MessageChannel,R.port1.onmessage=A=>{let m=A.data;I[m]&&(I[m](),delete I[m])}),function(A){if(R&&document.visibilityState==="hidden"){let w=g;return g=g>=Number.MAX_SAFE_INTEGER?1:g+1,I[w]=A,R.port2.postMessage(w),()=>{I[w]&&delete I[w]}}let m=setTimeout(A,0);return()=>clearTimeout(m)}})()})(Bi||(Bi={}));var v=Bi;var nt=null,Vi=null,ei=[],ti=[],Fi=[],xt=null,Lt=null,Hi=null,Gi=!1,Wi=!1,ii,It,ri,ia=!1,ra=!1,ji=null,Ki="",ai=[],qi=null,aa=navigator.appVersion,fn=navigator.appName,De=navigator.userAgent,$i=(r=>(r.USER="user",r.ENVIRONMENT="environment",r.LEFT="left",r.RIGHT="right",r))($i||{}),Nt=class{constructor(e,t=!1,i=d.videoMaxWidth,r=d.videoMaxHeight){let n=!1;if(e){n={noiseSuppression:d.noiseSuppression,echoCancellation:!0,autoGainControl:!0};let p;Lt&&(p=Lt.deviceId),typeof e=="string"&&(p=e),p&&(n.deviceId={ideal:p})}let s=!1;if(t){s={width:{min:d.videoMinWidth,max:i,ideal:i},height:{min:d.videoMinHeight,max:r,ideal:r},aspectRatio:{ideal:d.videoAspectRatio},frameRate:{ideal:d.videoFrameRate}};let p;xt&&(p=xt.deviceId),typeof t=="string"&&(p=t),p&&(s.deviceId={ideal:p}),d.videoFacingMode&&(s.facingMode={ideal:d.videoFacingMode})}this.audio=n,this.video=s,this.needVideo=!!s}getNative(){return Object.assign({},{audio:this.audio,video:this.video})}simplify(){return typeof this.video=="object"&&(this.video.width||this.video.height?(delete this.video.width,delete this.video.height):this.video.aspectRatio?delete this.video.aspectRatio:this.video.frameRate?delete this.video.frameRate:(this.video.deviceId||this.video.facingMode)&&(delete this.video.deviceId,delete this.video.facingMode)),typeof this.audio=="object"&&(this.audio.echoCancellation||this.audio.autoGainControl||this.audio.noiseSuppression?(delete this.audio.echoCancellation,delete this.audio.autoGainControl,delete this.audio.noiseSuppression):this.audio.deviceId&&delete this.audio.deviceId),this.video===!0&&this.audio===!0?this.video=!1:this.video===!1&&this.audio===!0?(this.audio=!1,this.video=this.needVideo):this.video===!0&&this.audio===!1&&(this.video=!1),this.video&&!Object.keys(this.video).length&&(this.video=!0),this.audio&&!Object.keys(this.audio).length&&(this.audio=!0),this}canSimplify(){let e=typeof this.video=="object"&&(this.video.width||this.video.height||this.video.aspectRatio||this.video.frameRate||this.video.facingMode||this.video.deviceId)||this.video;return!!(typeof this.audio=="object"&&(this.audio.deviceId||this.audio.noiseSuppression||this.audio.echoCancellation||this.audio.autoGainControl)||this.audio||e)}isVideo(){return!!this.video}isAudio(){return!!this.audio}},na=class extends Nt{constructor(e,t,i){super(i,!0);typeof this.video=="object"?(delete this.video.deviceId,delete this.video.aspectRatio,delete this.video.frameRate,delete this.video.facingMode):this.video={},this.video.cursor="motion",this.video.width=e,this.video.height=t,this.video.frameRate=d.screenFrameRate,ze.browserName()==="Safari"&&Number(ze.browserVersion())===16&&(delete this.video.width,delete this.video.height)}};function Sn(){return o(this,null,function*(){nt=null,yield ni()})}function vn(){nt=null,ni().then(()=>f.onDeviceChange())}function ni(){return o(this,null,function*(){return nt||(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices?[]:(!Vi&&navigator.mediaDevices.addEventListener&&(Vi=v.throttle(vn,1e3),navigator.mediaDevices.addEventListener("devicechange",Vi)),nt=navigator.mediaDevices.enumerateDevices().then(a=>{ei=a.filter(r=>r.kind==="videoinput"?(r.label&&(Gi=!0),!0):!1),ti=a.filter(r=>r.kind==="audioinput"?(r.label?Wi=!0:ze.isMobile()&&ze.browserName()==="Firefox"&&(Wi=Gi),!0):!1),Fi=a.filter(r=>r.kind==="audiooutput");let e=Ze.get("videoinput"),t=Ze.get("audioinput"),i=Ze.get("audiooutput");return xt=ei.find(r=>r.deviceId===e)||null,Lt=ti.find(r=>r.deviceId===t)||null,Hi=Fi.find(r=>r.deviceId===i)||null,nt=Promise.resolve(a),a}).catch(()=>(nt=null,[]))))})}function En(){return o(this,null,function*(){return ze.isBrowserSupported()?new Promise(a=>{new window.RTCPeerConnection().createOffer({offerToReceiveVideo:!0}).then(t=>{/^a=rtpmap:\d+ VP8\/\d+$/m.test(t.sdp)&&(ia=!0),/^a=mid:0$/m.test(t.sdp)&&(ra=!0),a()}).catch(a)}):Promise.resolve()})}function si(a,e){return o(this,null,function*(){c.debug("Try to get media",a.getNative());let t=ze.hasPermissions(a.isVideo());!t&&!e&&f.onPermissionsRequested();try{let i=yield navigator.mediaDevices.getUserMedia(a.getNative());return t||(yield Sn()),i}catch(i){switch(i.name){case"PermissionDeniedError":case"PermissionDismissedError":case"NotAllowedError":case"SecurityError":case"DOMException":e=a.isVideo()?ae.CAMERA_PERMISSION:ae.MIC_PERMISSION;break;case"OverconstrainedError":case"TypeError":case"NotFoundError":break;case"AbortError":case"NotReadableError":e=a.isVideo()?ae.CAMERA_ACCESS:ae.MIC_ACCESS;break}if(a.canSimplify())return si(a.simplify(),e);let r=e||ae.UNKNOWN;throw f.onPermissionsError(r),r}})}function In(a){return o(this,null,function*(){c.debug("Try to get screen",a.getNative());try{let e=yield navigator.mediaDevices.getDisplayMedia(a.getNative()),t=e==null?void 0:e.getVideoTracks()[0];return t&&(c.debug("Got display media track",t.id),t.contentHint="text"),e}catch(e){switch(e.name){case"PermissionDeniedError":case"NotAllowedError":case"SecurityError":throw ae.SCREEN_PERMISSION;default:throw ae.SCREEN_ACCESS}}})}function oi(){return ai.length||(ai=(()=>{let a,e=!1,t=0,i="0",r=De.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];if(/trident/i.test(r[1]))return a=/\brv[ :]+(\d+)/g.exec(De),["IE",a&&a[1]||"Unknown",e,t,i];if(r[1]==="Safari"){if(a=De.match(/\bEdge\/(\d+)/),a)return["Edge",a[1]||"Unknown",e,t,i];if(a=De.match(/\bCriOS\/(\d+)/),a)return["Chrome",a[1],!0,Number(a[1]),i];if(a=De.match(/\bFxiOS\/(\d+)/),a)return["Firefox",a[1],!1,t,i];if(a=De.match(/\bYaBrowser\/(\d+)/),a)return["Yandex",a[1],!1,t,i];if(a=De.match(/\bOPT\/(\d+)/),a)return["Opera",a[1],!1,t,i]}if(r[1]==="Chrome"){if(e=!0,t=Number(r[2]),a=De.match(/\bOPR\/(\d+)/),a)return["Opera",a[1]||"Unknown",e,t,i];if(a=De.match(/\bYaBrowser\/(\d+)/),a)return["Yandex",a[1]||"Unknown",e,t,i];if(a=De.match(/\bSferum\/((\d+)(?:\.\d+)*)/),a)return["Sferum",a[1]||"Unknown",e,t,i];if(a=De.match(/\bEdge?\/(\d+)/),a)return["Edge",a[1]||"Unknown",e,t,i];if(typeof window.opr!="undefined"&&/^(.+\.)?ok.ru$/.test(window.location.host))return["Opera","Hidden",e,t,i]}return a=De.match(/version\/(\d+)(?:(?:\.)(\d+))?/i),a&&a[2]!==void 0&&(i=a[2]),[r[2]?r[1]:fn,a&&a[1]||r[2]||aa,e,t,i]})()),ai}var ze;(A=>{function a(){return o(this,null,function*(){let m=()=>{pe(),document.removeEventListener("click",m),document.removeEventListener("touchstart",m)};return document.addEventListener("click",m),document.addEventListener("touchstart",m),yield En(),ni()})}A.init=a;function e(){return ei}A.getCameras=e;function t(){return ti}A.getMicrophones=t;function i(){return Fi}A.getOutput=i;function r(){return ei.length>0}A.hasCamera=r;function n(){return ti.length>0}A.hasMicrophone=n;function s(){return xt}A.getSavedCamera=s;function p(){return Lt}A.getSavedMicrophone=p;function l(){return Hi}A.getSavedOutput=l;function u(){return Gi}A.hasCameraPermission=u;function P(){return Wi}A.hasMicrophonePermission=P;function C(m=!1){return P()?r()&&m?u():!0:!1}A.hasPermissions=C;function O(m=!1,w=!0,J=!0){return o(this,null,function*(){let M=n()&&w,ge=r()&&m,he;if(!M&&!ge)he=new MediaStream;else try{he=yield si(new Nt(M,ge))}catch(He){he=new MediaStream}return!he.getVideoTracks().length&&J&&he.addTrack($e()),!he.getAudioTracks().length&&J&&he.addTrack(pe()),he})}A.getUserMedia=O;function x(m){return o(this,null,function*(){return In(new na(window.screen.width,window.screen.height,m))})}A.getScreenMedia=x;function H(m,w=!1){return o(this,null,function*(){let J=w?d.videoEffectMaxWidth:d.videoMaxWidth,M=w?d.videoEffectMaxHeight:d.videoMaxHeight;return si(new Nt(!1,m||!0,J,M))})}A.getUserVideo=H;function re(m){return o(this,null,function*(){return si(new Nt(m||!0,!1))})}A.getUserAudio=re;function Se(m,w){return o(this,null,function*(){let M=(yield ni()).find(ge=>ge.kind===m&&ge.deviceId===w);return M?(m==="videoinput"?xt=M:m==="audioinput"?Lt=M:m==="audiooutput"&&(Hi=M),Ze.set(m,w),M):null})}A.saveDeviceId=Se;function pe(){if(!ri||ri.readyState==="ended"){let m=g(),w=m.createMediaStreamDestination(),J=m.createGain();J.gain.value=1e-5,J.connect(w),J.connect(m.destination);let M=m.createOscillator();M.type="sine",M.frequency.value=0,M.connect(J),M.start(),ri=w.stream.getAudioTracks()[0]}return Object.assign(ri.clone(),{enabled:!1})}A.getSilentMediaTrack=pe;function $e(m=d.videoMinWidth,w=d.videoMinHeight){return It||(It=document.createElement("canvas"),It.getContext("2d")),It.width=m,It.height=w,(!ii||ii.readyState==="ended")&&(ii=It.captureStream(d.videoFrameRate).getVideoTracks()[0]),Object.assign(ii.clone(),{enabled:!1})}A.getBlackMediaTrack=$e;function le(){if($()==="Edge"&&Number(Ti())<70)return!1;try{let m=window;return navigator.mediaDevices&&navigator.mediaDevices.getUserMedia&&m.RTCPeerConnection&&m.RTCIceCandidate&&m.RTCSessionDescription&&m.HTMLCanvasElement&&m.HTMLCanvasElement.prototype.captureStream&&m.RTCRtpSender&&m.RTCRtpSender.prototype.replaceTrack&&m.RTCRtpSender.prototype.getParameters&&navigator.sendBeacon&&!0||!1}catch(m){return!1}}A.isBrowserSupported=le;function be(){return!!navigator.mediaDevices.getDisplayMedia}A.isScreenCapturingSupported=be;function Me(){return ia}A.canVP8=Me;function Xe(){return ra}A.isUnifiedPlan=Xe;function hr(){let m=A.browserName()==="Safari"&&A.browserVersion()==="15"&&A.browserSubVersion()==="1",w=A.browserName()==="Opera"&&A.os()==="Windows";return m||w}A.isBrokenH264=hr;function Z(){return!(A.baseChromeVersion()&&A.isMobile())}A.canPreferH264=Z;function _r(){var m;return((m=window.RTCRtpTransceiver)==null?void 0:m.prototype)&&"setCodecPreferences"in window.RTCRtpTransceiver.prototype}A.canPreferRed=_r;function gr(){return Ki||(Ki=(()=>{let m={Windows:/Win/,Android:/Android/,OpenBSD:/OpenBSD/,SunOS:/SunOS/,Linux:/(Linux|X11)/,iPad:/(iPad)/,iPhone:/(iPhone)/,iPod:/(iPod)/,MacOS:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh|Mac OS X)/,QNX:/QNX/,UNIX:/UNIX/,BeOS:/BeOS/,OS2:/OS\/2/,Bot:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/};for(let w in m)if(m.hasOwnProperty(w)&&m[w].test(De))return w;return"Unknown"})()),Ki}A.os=gr;function fr(){return ji===null&&(ji=/Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(aa)),ji}A.isMobile=fr;function $(){return oi()[0]}A.browserName=$;function Ti(){return oi()[1]}A.browserVersion=Ti;function Ci(){return oi()[3]}A.baseChromeVersion=Ci;function g(){return qi||(qi=new(window.AudioContext||window.webkitAudioContext)),qi}A.getAudioContext=g;function I(){return oi()[4]}A.browserSubVersion=I;function R(){return A.baseChromeVersion()>0&&!A.isMobile()}A.isAudioShareSupported=R})(ze||(ze={}));var y=ze;var Qe=class extends Ke{init(e){return o(this,null,function*(){c.debug("WebCodecsDecoder started"),yield this._createWorker('var exports=(()=>{var i=Object.defineProperty;var E=a=>i(a,"__esModule",{value:!0});var g=(a,e)=>{E(a);for(var t in e)i(a,t,{get:e[t],enumerable:!0})};var V={};g(V,{default:()=>D});var n=(t=>(t.VP9="vp09.00.50.08",t.VP8="vp8",t))(n||{}),o=(r=>(r.INIT="init",r.READY="ready",r.FRAME="frame",r.ERROR="error",r.DEBUG="debug",r.LOG_ERROR="log_error",r))(o||{});var D=a=>{let e=null,t=!0;function p(){self.postMessage({type:o.READY})}function f(d,r,s,l=!1){if(!e||t!==s){if(!l){self.postMessage({type:o.DEBUG,message:"WebCodecsDecoder dropped frame - waiting for keyframe"});return}t=s,e?self.postMessage({type:o.DEBUG,message:`WebCodecsDecoder codec changed to ${s?"VP9":"VP8"}`}):(self.postMessage({type:o.DEBUG,message:`WebCodecsDecoder codec ${s?"VP9":"VP8"}`}),e=new VideoDecoder({output:c=>{let m=a?[c]:[];self.postMessage({type:o.FRAME,data:c},m),c.close()},error:c=>{e&&e.state!=="closed"&&e.close(),e=null,self.postMessage({type:o.FRAME,error:"WebCodecsDecoder failed, reinitialize"})}})),e.configure({codec:s?n.VP9:n.VP8})}let u=new EncodedVideoChunk({type:l?"key":"delta",timestamp:d,data:r});e.decode(u)}self.onmessage=d=>{switch(d.data.type){case o.INIT:p();break;case o.FRAME:f(d.data.timestamp,d.data.data,d.data.isVP9,d.data.keyFrame);break}}};return V;})();\n',t=>{t.error?c.warn("WebCodecsDecoder",t.error):e(t.data)},[y.baseChromeVersion()>=92])})}decodeFrame(e,t,i,r=!1){this._sendToWorker(Ce.FRAME,{timestamp:e,data:t.buffer,isVP9:i,keyFrame:r},[t.buffer])}destroy(){this._removeWorker(),c.debug("WebCodecsDecoder destroyed")}static isBrowserSupported(){return"VideoDecoder"in window&&"Worker"in window&&"VideoFrame"in window}};var sa=it(require("bit-buffer"));var Tn=65536,st=class{constructor(e,t){this._chunks=[];this._participantId=e,this._onStream=t}appendChunk(e){let t=this._chunks.length;if(e.start)t&&(c.warn("[FrameBuilder] Cleanup buffer",Array.prototype.slice.call(this._chunks)),this._chunks=[]);else if(!t||(this._chunks[t-1].sequence+1)%Tn!==e.sequence){c.warn("[FrameBuilder] Got incorrect chunk");return}if(this._chunks.push(e),e.end){let i=this._processFrameData(),{width:r,height:n}=st.getFrameSize(i);this._processFrame({timestamp:e.timestamp,frameData:i,isVP9:e.isVP9,keyframe:e.keyframe,width:r,height:n})}}destroy(){this._chunks=[]}_processFrameData(){let e=this._chunks;this._chunks=[];let t=e.reduce((n,s)=>n+s.data.byteLength,0),i=new Uint8Array(t),r=0;for(let n of e)i.set(new Uint8Array(n.data),r),r+=n.data.byteLength;return i}static getFrameSize(e){let t={width:0,height:0},i=new sa.BitStream(e.buffer);i.bigEndian=!0,i.index+=2;let r=i.readBits(1),s=i.readBits(1)<<1|r;return s===3&&i.index++,i.readBits(1)===1||i.readBits(1)!==0||(i.index++,i.index++,i.index+=24,s>=2&&i.index++,i.readBits(3)!==7?(i.index++,(s===1||s===3)&&(i.index+=3)):(s===1||s===3)&&i.index++,t.width=i.readBits(16)+1,t.height=i.readBits(16)+1),t}static isBrowserSupported(){throw new Error("Method `isBrowserSupported` is not implemented")}};var Tt=class{constructor(e){this._onStream=e}drawFrame(e){return o(this,null,function*(){throw new Error("Method `drawFrame` is not supported by this implementation")})}drawImage(e){throw new Error("Method `drawImage` is not supported by this implementation")}static isBrowserSupported(){throw new Error("Method `isBrowserSupported` is not implemented")}};var Ut=class extends Tt{constructor(e){super(e);this._canvas=null;this._canvasContext=null;this._stream=null;this._track=null;c.debug("CanvasRenderer started"),this._useImageBitmap="ImageBitmap"in window}_createStream(e,t){this._canvas||(this._canvas=document.createElement("canvas"),this._canvas.width=e,this._canvas.height=t,this._canvas.style.pointerEvents="none",this._canvas.style.visibility="hidden",this._canvas.style.position="absolute",this._canvas.style.width="160px",this._canvas.style.height="90px",this._canvas.style.bottom="0",this._canvas.style.right="0",this._canvas.style.zIndex="5000",document.body.appendChild(this._canvas),this._useImageBitmap?this._canvasContext=this._canvas.getContext("bitmaprenderer"):this._canvasContext=this._canvas.getContext("2d"),this._stream=this._canvas.captureStream(0),this._track=this._stream.getVideoTracks()[0],this._track.contentHint="text")}_removeStream(){this._stream&&(this._stream.getTracks().forEach(e=>e.stop()),this._stream=null,this._track=null),this._canvasContext=null;try{this._canvas&&document.body.removeChild(this._canvas)}catch(e){}this._canvas=null}_requestCanvasFrame(){this._track&&this._track.requestFrame?this._track.requestFrame():this._stream&&this._stream.requestFrame&&this._stream.requestFrame()}drawFrame(e){return o(this,null,function*(){let t="createImageBitmap"in e?yield e.createImageBitmap():yield createImageBitmap(e);this.drawImage(t),t.close()})}drawImage(e){this._track||(this._createStream(e.width,e.height),this._onStream(this._stream));let t=this._canvas;if(t.width=e.width,t.height=e.height,e instanceof ImageData){let i=this._canvasContext;i.clearRect(0,0,t.width,t.height),i.putImageData(e,0,0)}else this._canvasContext.transferFromImageBitmap(e);this._requestCanvasFrame()}destroy(){this._removeStream(),c.debug("CanvasRenderer destroyed")}static isBrowserSupported(){return("CanvasCaptureMediaStream"in window||"CanvasCaptureMediaStreamTrack"in window)&&!(y.browserName()==="Safari"&&Number(y.browserVersion())===15)}};var Ct=class extends Tt{constructor(e){super(e);c.debug("TrackGeneratorRenderer started"),this._generator=new MediaStreamTrackGenerator({kind:ce.video}),this._writer=this._generator.writable.getWriter(),this._stream=new MediaStream([this._generator]),this._onStream(this._stream)}drawFrame(e){return o(this,null,function*(){yield this._writer.write(e)})}destroy(){this._writer.releaseLock(),this._generator.writable.close().then(()=>this._generator.stop()),c.debug("TrackGeneratorRenderer destroyed")}static isBrowserSupported(){return"VideoFrame"in window&&"MediaStreamTrackGenerator"in window&&Qe.isBrowserSupported()}};var Bt=class extends st{constructor(e,t){super(e,t);this._decoderReady=!1;this._decoderQueue=[];c.debug(`StreamBuilder started for participant [${e}]`),Ct.isBrowserSupported()?this._renderer=new Ct(t):this._renderer=new Ut(t),Qe.isBrowserSupported()?this._decoder=new Qe:this._decoder=new St;let i=r=>o(this,null,function*(){"VideoFrame"in window&&r instanceof VideoFrame?yield this._renderer.drawFrame(r):this._renderer.drawImage(r)});this._decoder.init(i).then(()=>{this._decoderReady=!0,this._decodeQueue()})}_processFrame(e){!this._decoderReady||this._decoderQueue.length?(this._decoderQueue.push(e),this._decodeQueue()):this._decoder.decodeFrame(e.timestamp,e.frameData,e.isVP9,e.keyframe)}_decodeQueue(){if(!this._decoderReady)return;let e=this._decoderQueue;this._decoderQueue=[],e.forEach(t=>{this._decoder.decodeFrame(t.timestamp,t.frameData,t.isVP9,t.keyframe)})}destroy(){super.destroy(),this._decoder.destroy(),this._renderer.destroy(),c.debug(`StreamBuilder destroyed for participant ${this._participantId}`)}static isBrowserSupported(){return Ut.isBrowserSupported()||Ct.isBrowserSupported()}};var ci=1,Cn=1,oa=0,di=11,ca=1,da=2,pa=4,la=8;function ua(a,e,t,i,r,n,s){let p=0;e&&(p|=ca),t&&(p|=da),i&&(p|=pa),s||(p|=la);let l=new ArrayBuffer(di),u=new DataView(l);if(u.setUint8(0,ci),u.setUint16(1,r),u.setUint32(3,a),u.setUint8(7,n?1:0),u.setUint16(8,oa),u.setUint8(10,p),!s)return l;let P=new Uint8Array(l.byteLength+s.byteLength);return P.set(new Uint8Array(l),0),P.set(new Uint8Array(s),l.byteLength),P.buffer}function ma(a){let e=new DataView(a),t=e.getUint8(0),i=e.getUint16(1),r=e.getUint32(3),n=e.getUint8(7)===1,s=e.getUint16(8),p=e.getUint8(10),l=!!(p&ca),u=!!(p&da),P=!!(p&pa),C=!!(p&la);if(t!==ci)throw new Error(`Unexpected protocol version. Got ${t}, expected ${ci}`);return{timestamp:r,start:l,end:u,keyframe:P,sequence:i,isVP9:n,ssrc:s,eos:C,data:a.slice(di)}}function ha(a){if(!a||!a.byteLength||a.byteLength!==4)return!1;let e=new DataView(a);return!(e.getUint8(0)!==ci||e.getUint8(1)!==Cn||e.getUint16(2)!==oa)}var T=it(require("simple-ebml-builder"));var yn=Ir(2,15)-1,Ji=1,Rn=5,Pn=5;var pi=class{constructor(e){this._queue=[];this._clearBufferTill=0;this._mediaSource=new MediaSource,this._codec=e;let t=()=>{this._mediaSource.removeEventListener("sourceopen",t),this._initBuffer(),this._handleQueue()};this._mediaSource.addEventListener("sourceopen",t,!1)}_handleQueue(){if(!this._sourceBuffer||this._sourceBuffer.updating||!this._queue.length)return;if(this._clearBufferTill&&this._sourceBuffer.buffered.length){let i=this._sourceBuffer.buffered.start(0);i<this._clearBufferTill&&(this._sourceBuffer.remove(i,this._clearBufferTill),c.debug(`[WebmBuilder] SourceBuffer cleanup from ${i} to ${this._clearBufferTill}`)),this._clearBufferTill=0;return}let e=this._queue;this._queue=[];let t=pi._buildQueue(e);this._sourceBuffer.appendBuffer(t)}static _buildQueue(e){if(e.length){if(e.length===1)return T.build(e[0])}else return new Uint8Array;let t=e.reduce((n,s)=>n+s.countSize(),0),i=new Uint8Array(t),r=0;for(let n of e){let s=T.build(n);i.set(s,r),r+=s.byteLength}return i}_initBuffer(){this._sourceBuffer=this._mediaSource.addSourceBuffer(`video/webm; codecs="${this._codec}"`),this._sourceBuffer.mode="sequence",this._sourceBuffer.addEventListener("updateend",()=>this._handleQueue())}changeType(e){var t;return this._codec=e,(t=this._sourceBuffer)==null?void 0:t.changeType(e)}append(e,t=!1){this._queue.push(e),t&&this._handleQueue()}cleanup(){var n,s,p;((n=this._mediaSource)==null?void 0:n.readyState)==="open"&&((s=this._sourceBuffer)==null||s.abort());let e=(p=this._sourceBuffer)==null?void 0:p.buffered,t=e==null?void 0:e.length;if(!t)return;let i=e.start(0),r=Math.max(0,e.end(t-1)-Rn);r-i>Pn&&(this._clearBufferTill=r)}destroy(){this._queue=[],this._mediaSource.readyState==="open"&&(this._sourceBuffer.abort(),this._mediaSource.endOfStream()),this._sourceBuffer=null,this._clearBufferTill=0}get codec(){return this._codec}get mediaSource(){return this._mediaSource}get buffered(){var e;return(e=this._sourceBuffer)==null?void 0:e.buffered}},Ve=class extends st{constructor(e,t){super(e,t);this._video=null;this._stream=null;this._earliestTimestamp=0;this._clusterStartTime=0;this._lastFrameTimestamp=0;c.debug(`[WebmBuilder] started for participant [${e}]`)}static _intToU16BE(e){return new Uint8Array([e>>8,e])}static _genWebmHeader(){return T.element(T.ID.EBML,[T.element(T.ID.EBMLVersion,T.number(1)),T.element(T.ID.EBMLReadVersion,T.number(1)),T.element(T.ID.EBMLMaxIDLength,T.number(4)),T.element(T.ID.EBMLMaxSizeLength,T.number(8)),T.element(T.ID.DocType,T.string("webm")),T.element(T.ID.DocTypeVersion,T.number(2)),T.element(T.ID.DocTypeReadVersion,T.number(2))])}static _genSegmentHeader(e,t,i){let r=T.element(T.ID.Info,[T.element(T.ID.TimecodeScale,T.number(1e6)),T.element(T.ID.MuxingApp,T.string("vk-webm-builder")),T.element(T.ID.WritingApp,T.string("vk-webm-builder"))]),n=[T.element(T.ID.PixelWidth,T.number(e)),T.element(T.ID.PixelHeight,T.number(t))],s=T.element(T.ID.Tracks,T.element(T.ID.TrackEntry,[T.element(T.ID.TrackNumber,T.number(Ji)),T.element(T.ID.TrackUID,T.number(Ji)),T.element(T.ID.TrackType,T.number(1)),T.element(T.ID.FlagLacing,T.number(0)),T.element(T.ID.DefaultDuration,T.number(1e9)),T.element(T.ID.CodecID,T.string(`V_${i.toUpperCase()}`)),T.element(T.ID.Video,n)]));return T.unknownSizeElement(T.ID.Segment,[r,s])}static _genClusterHeader(e){return T.unknownSizeElement(T.ID.Cluster,[T.element(T.ID.Timecode,T.number(Math.round(e)))])}_createVideo(e){this._mediaBuffer=new pi(e),this._video=document.createElement("video"),this._video.autoplay=!0,this._video.controls=!1,this._video.muted=!0,this._video.style.pointerEvents="none",this._video.style.visibility="hidden",this._video.style.position="absolute",this._video.style.width="160px",this._video.style.height="90px",this._video.style.bottom="0",this._video.style.right="0",this._video.style.zIndex="5000",this._video.src=URL.createObjectURL(this._mediaBuffer.mediaSource),document.body.appendChild(this._video);let t=()=>{if(this._video.src){c.warn(`[WebmBuilder] Video paused for participant [${this._participantId}], try to play again`);let i=this._video.seekable;i.length&&(this._video.currentTime=i.end(i.length-1)-.1),this._video.play().catch(()=>{})}};this._video.onpause=t,this._video.onwaiting=t,this._video.onstalled=t,this._video.onerror=()=>c.warn(`[WebmBuilder] Video Error for participant [${this._participantId}]`,this._video.error),this._stream=this._video.captureStream(),this._onStream(this._stream)}_processFrame(e){let t=e.isVP9?"vp9":"vp8";this._mediaBuffer?this._mediaBuffer.codec!==t&&this._mediaBuffer.changeType(t):this._createVideo(t);let i=e.timestamp;if(i<=this._lastFrameTimestamp&&(i=this._lastFrameTimestamp+10,c.debug(`[WebmBuilder] Fixup timestamp for participant [${this._participantId}]`)),this._lastFrameTimestamp=i,this._earliestTimestamp)i-=this._earliestTimestamp;else{if(!e.keyframe)return;this._earliestTimestamp=i,i=0}if(e.keyframe){this._clusterStartTime=i,this._mediaBuffer.cleanup(),c.debug(`[WebmBuilder] Segment header for participant [${this._participantId}]`);let s=Ve._genWebmHeader();this._mediaBuffer.append(s);let p=Ve._genSegmentHeader(e.width,e.height,t);this._mediaBuffer.append(p)}let r=Math.round(i-this._clusterStartTime);if(r>yn&&(this._clusterStartTime=i,r=0),r===0){c.debug(`[WebmBuilder] Cluster header for participant [${this._participantId}]`);let s=Ve._genClusterHeader(this._clusterStartTime);this._mediaBuffer.append(s)}let n=T.element(T.ID.SimpleBlock,[T.vintEncodedNumber(Ji),T.bytes(Ve._intToU16BE(r)),T.number((e.keyframe?1:0)<<7),T.bytes(e.frameData)]);this._mediaBuffer.append(n,!0)}destroy(){super.destroy(),this._video&&(this._video.onpause=null,this._video.onwaiting=null,this._video.onstalled=null,this._video.onerror=null,this._video.pause(),this._video.src="",document.body.removeChild(this._video)),this._mediaBuffer&&(this._mediaBuffer.destroy(),this._mediaBuffer=null),this._stream&&(this._stream.getTracks().forEach(e=>e.stop()),this._stream=null),c.debug(`[WebmBuilder] destroyed for participant [${this._participantId}]`)}static isBrowserSupported(){var e,t,i;return"captureStream"in((e=window.HTMLVideoElement)==null?void 0:e.prototype)&&((t=window.MediaSource)==null?void 0:t.isTypeSupported('video/webm; codecs="vp8"'))&&((i=window.MediaSource)==null?void 0:i.isTypeSupported('video/webm; codecs="vp9"'))}};var yt=class{constructor(e,t,i,r){this._participantIdRegistry=null;this._streamBuilders={};this._onStream=()=>{};this._onEos=()=>{};c.debug("ScreenCaptureReceiver started"),this._datachannel=e,this._participantIdRegistry=t,this._onStream=i,this._onEos=r,this._datachannel.onmessage=n=>this._onDataChannelMessage(n.data)}_onDataChannelMessage(e){var n,s;let t=ma(e),i=(s=(n=this._participantIdRegistry)==null?void 0:n.getStreamDescription(t.ssrc))==null?void 0:s.participantId;if(!i){c.warn(`Participant id for ssrc ${t.ssrc} not found in registry`);return}if(t.eos){this.close(i),this._onEos(i);return}let r=this._streamBuilders[i];if(!r){let p=l=>this._onStream(i,l);d.screenShareWebmBuilder&&Ve.isBrowserSupported()?r=new Ve(i,p):r=new Bt(i,p),this._streamBuilders[i]=r}r.appendChunk(t)}close(e){let t=this._streamBuilders[e];t&&(t.destroy(),delete this._streamBuilders[e])}destroy(){this._datachannel.onbufferedamountlow=null,this._datachannel.onmessage=null,this._onStream=()=>{},Object.values(this._streamBuilders).forEach(e=>e.destroy()),this._streamBuilders={},this._participantIdRegistry=null,c.debug("ScreenCaptureReceiver destroyed")}static isBrowserSupported(){return(Qe.isBrowserSupported()||St.isBrowserSupported())&&(Bt.isBrowserSupported()||Ve.isBrowserSupported())}};var Yi=it(require("@vkontakte/libvpx"));var bn=1e3,Vt=class extends Ke{constructor(e,t){super();this._video=null;this._imageCapture=null;this._canvas=null;this._canvasCtx=null;this._stream=null;this._track=null;this._frameReadTimeout=0;this._lastFrame=null;this._sourceTrack=e,this._onFrame=t,this._useImageCapture="ImageCapture"in window&&"ImageBitmap"in window,(e.readyState!=="live"||!e.enabled||e.muted)&&(this._useImageCapture=!1)}_createDom(){this._canvas||(this._canvas=document.createElement("canvas"),this._canvas.style.pointerEvents="none",this._canvas.style.visibility="hidden",this._canvas.style.position="absolute",this._canvas.style.width="160px",this._canvas.style.height="90px",this._canvas.style.bottom="0",this._canvas.style.right="160px",this._canvas.style.zIndex="5000",this._canvasCtx=this._canvas.getContext("2d"),document.body.appendChild(this._canvas)),!this._video&&!this._useImageCapture&&(this._video=document.createElement("video"),this._video.controls=!1,this._video.autoplay=!1,this._video.preload="auto",this._video.muted=!0,this._video.style.pointerEvents="none",this._video.style.visibility="hidden",this._video.style.position="absolute",this._video.style.width="160px",this._video.style.height="90px",this._video.style.bottom="0",this._video.style.right="0",this._video.style.zIndex="5000",document.body.appendChild(this._video))}_removeDom(){try{this._canvas&&document.body.removeChild(this._canvas),this._video&&document.body.removeChild(this._video)}catch(e){}this._canvasCtx=null,this._canvas=null,this._video=null}_createStream(e){return o(this,null,function*(){if(!this._canvas)throw new Error("Canvas not found");if(!this._video&&!this._useImageCapture)throw new Error("Video element not found");return this._stream=this._canvas.captureStream(0),this._track=this._stream.getVideoTracks()[0],new Promise((t,i)=>{if(this._useImageCapture)this._imageCapture=new ImageCapture(e),t();else{let r=this._video;r.srcObject=new MediaStream([e]),r.onloadeddata=p=>t(),r.onerror=()=>i(new Error("Video element error"));let n=r.play(),s=()=>i(new Error("Autoplay is disabled"));n?n.catch(s):s()}})})}_removeStream(){var e;window.clearTimeout(this._frameReadTimeout),(e=this._lastFrame)==null||e.close(),this._stream&&(this._stream.getTracks().forEach(t=>t.stop()),this._stream=null,this._track=null),this._video&&(this._video.pause(),this._video.srcObject=null),this._imageCapture&&(this._imageCapture=null)}_drawFrameVideo(){if(!this._canvas||!this._canvasCtx||!this._video||!this._track)throw new Error("Fatal error");this._video.paused&&this._video.play();let e=this._video.videoWidth,t=this._video.videoHeight;return this._canvas.width=this._video.width=e,this._canvas.height=this._video.height=t,this._canvasCtx.clearRect(0,0,e,t),this._canvasCtx.drawImage(this._video,0,0,e,t),this._requestCanvasFrame(),this._canvasCtx.getImageData(0,0,e,t)}_getFrameBitmap(){return o(this,null,function*(){if(!this._imageCapture)throw new Error("Destroyed");return this._imageCapture.grabFrame()})}_drawFrameData(e){var r;if(!this._canvas||!this._canvasCtx||!this._track)throw new Error("Destroyed");let t=e.width,i=e.height;return this._canvas.width=t,this._canvas.height=i,this._canvasCtx.clearRect(0,0,t,i),this._canvasCtx.drawImage(e,0,0,t,i),this._requestCanvasFrame(),(r=this._canvasCtx)==null?void 0:r.getImageData(0,0,t,i)}_requestCanvasFrame(){this._track&&this._track.requestFrame?this._track.requestFrame():this._stream&&this._stream.requestFrame&&this._stream.requestFrame()}init(){return o(this,null,function*(){this._createDom();let e=this._sourceTrack.getSettings().width,t=this._sourceTrack.getSettings().height;c.debug(`LibVPxEncoder started ${e}x${t}, codec ${this.isVP9()?"VP9":"VP8"}`),yield this._createStream(this._sourceTrack),yield this._createWorker(`var exports=(()=>{var u=Object.defineProperty;var b=o=>u(o,"__esModule",{value:!0});var g=(o,n)=>{b(o);for(var t in n)u(o,t,{get:n[t],enumerable:!0})};var y={};g(y,{default:()=>R});var e=(r=>(r.INIT="init",r.READY="ready",r.FRAME="frame",r.ERROR="error",r.DEBUG="debug",r.LOG_ERROR="log_error",r))(e||{});var R=(o,n)=>{let t;function m(a,r){return o({locateFile:n}).then(s=>{if(t=new s.VpxEncoder,t.debug(r),!t.init(a?s.VpxType.VP9:s.VpxType.VP8))throw self.postMessage({type:e.LOG_ERROR,message:"encoder-init-fail-libvpx"}),new Error("LibVPxEncoder failed to create");t.setMaxQuantizer(10),t.setTargetBitrate(1024)})}function E(a,r,s,i){let c=t.allocateImage(a,r);if(!c){self.postMessage({type:e.FRAME,error:"No buffer data"});return}c.set(new Uint8Array(s));let f=Math.round(performance.now()),l=150;if(!t.encode(f,l,i)){self.postMessage({type:e.FRAME,error:"Encode failed"});return}let p=t.readFrame();if(!p){self.postMessage({type:e.FRAME,error:"No encoded data"});return}t.readFrame()&&(self.postMessage({type:e.DEBUG,message:"LibVPxEncoder dropped frame"}),self.postMessage({type:e.LOG_ERROR,message:"LibVPxEncoder-drop"}));let d=new Uint8Array(p.byteLength);d.set(p),self.postMessage({type:e.FRAME,frameType:i?"key":"delta",timestamp:f,duration:l,data:d.buffer},[d.buffer])}self.onmessage=a=>{switch(a.data.type){case e.INIT:m(a.data.isVP9,a.data.debug).then(()=>self.postMessage({type:e.READY})).catch(r=>self.postMessage({type:e.ERROR,error:String(r)}));break;case e.FRAME:E(a.data.width,a.data.height,a.data.imageData,a.data.keyFrame);break}}};return y;})();
10
10
  `,i=>{var r;i.error?this._onFrame(null,i.error):this._onFrame({type:i.frameType,timestamp:i.timestamp,duration:i.duration,data:i.data,byteLength:(r=i.data)==null?void 0:r.byteLength})},[Yi.default,Yi.default.getUrl],{isVP9:this.isVP9(),debug:c.enabled()})})}_encode(e,t){let i=e.data.buffer;this._sendToWorker(Ce.FRAME,{width:e.width,height:e.height,imageData:i,keyFrame:t},[i])}_requestFrameVideo(e){let t=this._drawFrameVideo();this._encode(t,e)}_requestFrameBitmap(e){this._frameReadTimeout=window.setTimeout(()=>{if(this._lastFrame){let t=this._drawFrameData(this._lastFrame);this._encode(t,e)}else this._onFrame(null)},bn),this._getFrameBitmap().then(t=>{var r;window.clearTimeout(this._frameReadTimeout),(r=this._lastFrame)==null||r.close(),this._lastFrame=t;let i=this._drawFrameData(t);this._encode(i,e)}).catch(()=>{})}requestFrame(e=!1){this._useImageCapture?this._requestFrameBitmap(e):this._requestFrameVideo(e)}isVP9(){return!1}destroy(){this._removeWorker(),this._removeStream(),this._removeDom(),c.debug("LibVPxEncoder destroyed")}static isBrowserSupported(){return"WebAssembly"in window&&"Worker"in window&&("CanvasCaptureMediaStream"in window||"CanvasCaptureMediaStreamTrack"in window)}};var Rt=class extends Ke{constructor(e,t){super();this._sourceTrack=e,this._onFrame=t,this._trackProcessor=new MediaStreamTrackProcessor(e)}init(){return o(this,null,function*(){let e=this._sourceTrack.getSettings().width,t=this._sourceTrack.getSettings().height,i=this._trackProcessor.readable;c.debug(`WebCodecsEncoder started ${e}x${t}, codec ${this.isVP9()?"VP9":"VP8"}`),yield this._createWorker(`var exports=(()=>{var E=Object.defineProperty;var g=i=>E(i,"__esModule",{value:!0});var F=(i,l)=>{g(i);for(var r in l)E(i,r,{get:l[r],enumerable:!0})};var A={};F(A,{default:()=>h});var n=(r=>(r.VP9="vp09.00.50.08",r.VP8="vp8",r))(n||{}),d=(t=>(t.INIT="init",t.READY="ready",t.FRAME="frame",t.ERROR="error",t.DEBUG="debug",t.LOG_ERROR="log_error",t))(d||{});var h=()=>{let i=1e3,l,r,c,s,f,t,a=null,p=0,u=!1;function V(e){l=e.readable,r=l.getReader(),c=e.width,s=e.height,f=e.isVP9,t=e.framerate,m.configure({framerate:t,codec:f?n.VP9:n.VP8,width:c,height:s,latencyMode:"realtime"}),self.postMessage({type:d.READY})}function y(e){p=self.setTimeout(()=>{a&&b(a,e)},i),!u&&(u=!0,r.read().finally(()=>{u=!1,self.clearTimeout(p)}).then(({done:o,value:R})=>{if(a==null||a.close(),a=null,!(o||!R)){if(!m){r.releaseLock(),l.cancel();return}a=R,b(R,e)}}))}function b(e,o){(e.codedWidth!==c||e.codedHeight!==s)&&(c=e.codedWidth,s=e.codedHeight,m.configure({framerate:t,codec:f?n.VP9:n.VP8,width:c,height:s,latencyMode:"realtime"})),m.encode(e,{keyFrame:o})}let m=new VideoEncoder({output:e=>{let o;e.data?o=e.data:(o=new ArrayBuffer(e.byteLength),e.copyTo(o)),self.postMessage({type:d.FRAME,frameType:e.type,timestamp:e.timestamp,duration:e.duration,data:o},[o])},error:e=>{self.postMessage({type:d.FRAME,error:String(e)})}});self.onmessage=e=>{switch(e.data.type){case d.INIT:V(e.data);break;case d.FRAME:y(e.data.keyFrame);break}}};return A;})();
11
- `,r=>{var n;r.error?this._onFrame(null,r.error):this._onFrame({type:r.frameType,timestamp:r.timestamp,duration:r.duration,data:r.data,byteLength:(n=r.data)==null?void 0:n.byteLength})},[],{readable:i,width:e,height:t,isVP9:this.isVP9(),framerate:d.screenFrameRate},[i])})}requestFrame(e=!1){this._sendToWorker(Ce.FRAME,{keyFrame:e})}isVP9(){return!0}destroy(){this._removeWorker(),c.debug("WebCodecsEncoder destroyed")}static isBrowserSupported(){return"VideoEncoder"in window&&"Worker"in window&&"EncodedVideoChunk"in window&&"MediaStreamTrackProcessor"in window}};var Mn=65536,zi=0,Pt=class{constructor(e,t){this._destroyed=!1;this._needKeyframe=!0;c.debug("ScreenCaptureSender started"),this.DATA_SIZE=d.consumerScreenDataChannelPacketSize-di,this._datachannel=t;let i=(r,n)=>{if(!this._destroyed){if(!r){c.warn("requestFrame failed, keyFrame: "+this._needKeyframe,n),this._needKeyframe=!0,this._requestFrame();return}this._send(r).catch(s=>{c.warn("sendFrame failed",s),this._needKeyframe=!0}).finally(()=>this._requestFrame())}};Rt.isBrowserSupported()?this._encoder=new Rt(e,i):this._encoder=new Vt(e,i),this._datachannel.onmessage=r=>{ha(r.data)&&(c.debug(`[${this._datachannel.label}] Requested keyframe`),this._needKeyframe=!0)},this._encoder.init().then(()=>this._requestFrame()).catch(r=>c.warn("ScreenCaptureSender init failed",r))}_requestFrame(){this._destroyed||(this._encoder.requestFrame(this._needKeyframe),this._needKeyframe=!1)}_wrapHeader(e,t,i,r,n){let s=ua(e,t,i,r,zi,this._encoder.isVP9(),n);return zi=(zi+1)%Mn,s}_stopPacket(){return this._wrapHeader(Date.now(),!1,!1,!1,null)}_send(e){return o(this,null,function*(){return new Promise((t,i)=>{this._sendChunk(e,0,t,i)})})}_sendChunk(e,t,i,r){if(!this._datachannel||this._datachannel.readyState!=="open"){r();return}let n=e.data.slice(t,t+this.DATA_SIZE),s=e.data.byteLength<=t+n.byteLength,p=this._wrapHeader(e.timestamp,!t,s,e.type==="key",n);this._datachannel.onbufferedamountlow=s?()=>{this._datachannel.bufferedAmount<=this._datachannel.bufferedAmountLowThreshold&&i()}:null;try{this._datachannel.send(p)}catch(l){c.warn("Error send data to DataChannel",l),r();return}s||v.setImmediate(()=>this._sendChunk(e,t+this.DATA_SIZE,i,r))}destroy(){this._datachannel.onbufferedamountlow=null,this._datachannel.onmessage=null,this._datachannel.readyState==="open"&&this._datachannel.send(this._stopPacket()),this._destroyed=!0,this._encoder.destroy(),c.debug("ScreenCaptureSender destroyed")}static isBrowserSupported(){return Rt.isBrowserSupported()||Vt.isBrowserSupported()}};var ie=class{static get sessionKey(){return ie._sessionKey}static set sessionKey(e){ie._sessionKey=e}static get sessionSecretKey(){return ie._sessionSecretKey}static set sessionSecretKey(e){ie._sessionSecretKey=e}static get accessToken(){return ie._accessToken}static set accessToken(e){ie._accessToken=e}static isEmpty(){return!ie._sessionKey||!ie._sessionSecretKey}};var S=class{static set(e){e.hasOwnProperty("voiceParams")&&(Object.assign(S._params.voiceParams,e.voiceParams),delete e.voiceParams),e.hasOwnProperty("specListenerParams")&&(Object.assign(S._params.specListenerParams,e.specListenerParams),delete e.specListenerParams),e.hasOwnProperty("unifiedPlanBrowsers")&&(Object.assign(S._params.unifiedPlanBrowsers,e.unifiedPlanBrowsers),delete e.unifiedPlanBrowsers),e.hasOwnProperty("apiAuth")&&(ie.accessToken=e.apiAuth.accessToken,ie.sessionKey=e.apiAuth.sessionKey,ie.sessionSecretKey=e.apiAuth.sessionSecretKey),Object.assign(S._params,v.objectFilterOutValues(e,void 0))}static get(e){return S._params[e]}static get appName(){return"ok.calls.sdk.js"}static get appVersion(){return 1.1}static get sdkVersion(){return"2.6.2-beta.25"}static get debug(){return undefined}static get protocolVersion(){return S._params.joinFromMultipleDevices?6:5}static get platform(){return S._params.platform}static set platform(e){S._params.platform=e}static get clientType(){return S._params.clientType}static set clientType(e){S._params.clientType=e}static get externalUserType(){return S._params.externalUserType}static set externalUserType(e){S._params.externalUserType=e}static get device(){return S._params.device}static get apiKey(){return S._params.apiKey}static get apiEnv(){return S._params.apiEnv}static get apiEndpoint(){switch(S.apiEnv){case"AUTO":case"PROD":return"https://api.mycdn.me";case"PROD_OK":return"https://api.ok.ru";case"TEST":return"https://apitest.ok.ru/api";case"VIDEOTEST":return"https://videotestapi.ok.ru/api";default:return S._params.apiEnv}}static get authToken(){return S._params.authToken}static set authToken(e){S._params.authToken=e}static get anonymToken(){return S._params.anonymToken}static set anonymToken(e){S._params.anonymToken=e}static get domain(){return S._params.domain}static get externalDomain(){return S._params.externalDomain}static get iceServers(){return S._params.iceServers}static set iceServers(e){S._params.iceServers=e}static get wssBase(){return S._params.wssBase}static set wssBase(e){S._params.wssBase=e}static get wssToken(){return S._params.wssToken}static set wssToken(e){S._params.wssToken=e}static get signalingReconnectDelay(){return S._params.signalingReconnectDelay}static get signalingReconnectMaxDelay(){return S._params.signalingReconnectMaxDelay}static get signalingReconnectMaxCount(){return S._params.signalingReconnectMaxCount}static get waitConnectionDelay(){return S._params.waitConnectionDelay}static get waitResponseDelay(){return S._params.waitResponseDelay}static get waitMessageDelay(){return S._params.waitMessageDelay}static get waitAnotherTabDelay(){return S._params.waitAnotherTabDelay}static get debugLog(){return S._params.debugLog}static get forceRelayPolicy(){return S._params.forceRelayPolicy}static set forceRelayPolicy(e){S._params.forceRelayPolicy=e}static get videoMinWidth(){return S._params.videoMinWidth}static get videoMaxWidth(){return S._params.videoMaxWidth}static set videoMaxWidth(e){S._params.videoMaxWidth=e}static get videoMinHeight(){return S._params.videoMinHeight}static get videoMaxHeight(){return S._params.videoMaxHeight}static set videoMaxHeight(e){S._params.videoMaxHeight=e}static get videoAspectRatio(){return S._params.videoAspectRatio}static get videoFrameRate(){return S._params.videoFrameRate}static get videoFacingMode(){return S._params.videoFacingMode}static get screenFrameRate(){return S._params.screenFrameRate}static get videoEffects(){return S._params.videoEffects}static set videoEffects(e){S._params.videoEffects=e}static get videoEffectMaxWidth(){return S._params.videoEffectMaxWidth}static set videoEffectMaxWidth(e){S._params.videoEffectMaxWidth=e}static get videoEffectMaxHeight(){return S._params.videoEffectMaxHeight}static set videoEffectMaxHeight(e){S._params.videoEffectMaxHeight=e}static get voiceParams(){return S._params.voiceParams}static get specListenerParams(){return S._params.specListenerParams}static get iceRestartWaitTime(){return S._params.iceRestartWaitTime}static get transportConnectionWaitTime(){return S._params.transportConnectionWaitTime}static get statisticsInterval(){return S._params.statisticsInterval}static set statisticsInterval(e){S._params.statisticsInterval=e}static get networkStatisticsInterval(){return S._params.networkStatisticsInterval}static get perfStatReportEnabled(){return S._params.perfStatReportEnabled}static get callStatReportEnabled(){return S._params.callStatReportEnabled}static get producerNotificationDataChannel(){return S._params.producerNotificationDataChannel}static get producerCommandDataChannel(){return S._params.producerCommandDataChannel}static get consumerScreenDataChannel(){return S._params.consumerScreenDataChannel&&Pt.isBrowserSupported()}static get producerScreenDataChannel(){return S._params.producerScreenDataChannel&&S.producerNotificationDataChannel&&yt.isBrowserSupported()}static get consumerScreenDataChannelPacketSize(){return S._params.consumerScreenDataChannelPacketSize}static get screenShareWebmBuilder(){return S._params.screenShareWebmBuilder}static get noiseSuppression(){return S._params.noiseSuppression}static set noiseSuppression(e){S._params.noiseSuppression=e}static get preferH264(){return S._params.preferH264}static get preferVP9(){return S._params.preferVP9}static get audioNack(){return S._params.audioNack}static get consumerScreenTrack(){return S._params.consumerScreenTrack&&S.consumerScreenDataChannel}static get producerScreenTrack(){return S._params.producerScreenTrack}static isUnifiedPlanSupported(e,t){let i=S._params.unifiedPlanBrowsers;return i.hasOwnProperty(e)?t>=i[e]:!1}static get movieShare(){return S._params.movieShare&&S.videoTracksCount>0}static get videoTracksCount(){return S.producerNotificationDataChannel?S._params.videoTracksCount:0}static get breakVideoPayloadTypes(){return S._params.breakVideoPayloadTypes}static get filteredMessages(){return S._params.filteredMessages}static get useParticipantListChunk(){return S._params.useParticipantListChunk&&S._params.videoTracksCount>0}static get participantListChunkInitIndex(){var e;return(e=S._params.participantListChunkInitIndex)!=null?e:0}static get participantListChunkInitCount(){var e;return(e=S._params.participantListChunkInitCount)!=null?e:null}static get serverAudioRed(){return S._params.serverAudioRed&&y.canPreferRed()}static get p2pAudioRed(){return S._params.p2pAudioRed&&y.canPreferRed()}static get h264spsPpsIdrInKeyframe(){return S._params.h264spsPpsIdrInKeyframe}static get batchParticipantsOnStart(){return S._params.batchParticipantsOnStart}static get filterObservers(){return S._params.filterObservers}static get muteMode(){return S._params.muteMode}static get preserveAudioTracks(){return S._params.preserveAudioTracks}static get audioShareCapabilityEnabled(){return y.isAudioShareSupported()&&S._params.audioShareCapabilityEnabled}},d=S;d._params={platform:"WEB",clientType:"PORTAL",externalUserType:"",device:"browser",apiKey:"",authToken:"",anonymToken:"",apiEnv:"AUTO",domain:"",externalDomain:"",iceServers:[],wssBase:"",wssToken:"",signalingReconnectDelay:1e3,signalingReconnectMaxDelay:5e3,signalingReconnectMaxCount:20,waitConnectionDelay:1e4,waitResponseDelay:1e4,waitMessageDelay:15e3,waitAnotherTabDelay:200,debugLog:!1,forceRelayPolicy:!1,videoMinWidth:428,videoMinHeight:240,videoMaxWidth:1280,videoMaxHeight:720,videoAspectRatio:16/9,videoFrameRate:25,screenFrameRate:15,videoEffects:null,videoEffectMaxWidth:640,videoEffectMaxHeight:360,iceRestartWaitTime:2e4,transportConnectionWaitTime:5e3,statisticsInterval:5e3,networkStatisticsInterval:2e4,perfStatReportEnabled:!0,callStatReportEnabled:!1,voiceParams:{smoothing:.8,minFreq:200,maxFreq:5e3,interval:500,threshold:.35,speakerLevelMultiplier:1.8},specListenerParams:{connectionTimeout:1e4,volumeTimeout:1e4},unifiedPlanBrowsers:{Firefox:10,Chrome:76,Safari:12},producerNotificationDataChannel:!0,producerCommandDataChannel:!0,consumerScreenDataChannel:!0,producerScreenDataChannel:!0,consumerScreenDataChannelPacketSize:16*1024,screenShareWebmBuilder:!1,noiseSuppression:!0,preferH264:!1,preferVP9:!0,audioNack:!0,consumerScreenTrack:!0,producerScreenTrack:!0,videoTracksCount:0,movieShare:!1,filteredMessages:!0,useParticipantListChunk:!1,participantListChunkInitIndex:0,participantListChunkInitCount:null,serverAudioRed:!1,p2pAudioRed:!1,h264spsPpsIdrInKeyframe:!1,breakVideoPayloadTypes:!1,batchParticipantsOnStart:!0,joinFromMultipleDevices:!0,filterObservers:!1,muteMode:!1,preserveAudioTracks:!1,audioShareCapabilityEnabled:!1};var Y=(l=>(l.WAITING_HALL="WAITING_HALL",l.WAITING="WAITING",l.CONNECTING="CONNECTING",l.CONNECTED="CONNECTED",l.RECONNECT="RECONNECT",l.ERROR="ERROR",l.HANGUP="HANGUP",l.PERMISSIONS="PERMISSIONS",l))(Y||{});function K(a,...e){let t=d.get(a);t&&setTimeout(t,0,...e)}function de(a,e,...t){if(d.filterObservers){if(Array.isArray(e)){if(e=e.filter(i=>!i.observer),!e.length)return}else if(e.observer)return}K(a,e,...t)}function Re(a){return Object.assign({},a)}function ot(a){return a.slice()}var Qi;(fo=>{function a(_,b){K("onLocalStream",_,Re(b))}fo.onLocalStream=a;function e(_,b){K("onScreenStream",_,Re(b))}fo.onScreenStream=e;function t(_,b){K("onLocalStreamUpdate",Re(_),b)}fo.onLocalStreamUpdate=t;function i(_){K("onLocalStatus",_)}fo.onLocalStatus=i;function r(_,b){de("onRemoteStream",_,b)}fo.onRemoteStream=r;function n(_,b){de("onRemoteLive",_,b)}fo.onRemoteLive=n;function s(_,b){de("onLocalLive",_,b)}fo.onLocalLive=s;function p(_,b){de("onRemoteLiveUpdate",_,b)}fo.onRemoteLiveUpdate=p;function l(_,b){de("onLocalLiveUpdate",_,b)}fo.onLocalLiveUpdate=l;function u(_,b){de("onRemoteScreenStream",_,b)}fo.onRemoteScreenStream=u;function P(_,b,te,Dt){de("onConversation",_,Re(b),Re(te),Dt)}fo.onConversation=P;function C(_){_&&K("onConversationParticipantListChunk",_)}fo.onConversationParticipantListChunk=C;function O(_,b,te){de("onRemoteMediaSettings",_,Re(b),te)}fo.onRemoteMediaSettings=O;function x(_,b){de("onLocalMediaSettings",_,Re(b))}fo.onLocalMediaSettings=x;function H(_,b){de("onRemoteSharedMovieInfo",_,Re(b))}fo.onRemoteSharedMovieInfo=H;function re(_,b){de("onRemoteSharedMovieStoppedInfo",_,Re(b))}fo.onRemoteSharedMovieStoppedInfo=re;function Se(_,b){de("onLocalSharedMovieInfo",_,Re(b))}fo.onLocalSharedMovieInfo=Se;function pe(_,b){de("onLocalSharedMovieStoppedInfo",_,Re(b))}fo.onLocalSharedMovieStoppedInfo=pe;function $e(_,b){de("onParticipantAdded",_,b)}fo.onParticipantAdded=$e;function le(_,b){de("onParticipantJoined",_,b)}fo.onParticipantJoined=le;function be(_,b,te){de("onRemoteParticipantState",_,Re(b),te)}fo.onRemoteParticipantState=be;function Me(_,b,te=null){de("onRemoteStatus",_,b,te)}fo.onRemoteStatus=Me;function Xe(_,b,te=null){de("onParticipantStatus",_,b,te)}fo.onParticipantStatus=Xe;function hr(){K("onPermissionsRequested")}fo.onPermissionsRequested=hr;function Z(_){K("onPermissionsError",_)}fo.onPermissionsError=Z;function _r(_,b){de("onRemoteRemoved",_,b)}fo.onRemoteRemoved=_r;function gr(_,b,te){K("onCallState",_,b,Re(te))}fo.onCallState=gr;function fr(_,b){K("onDeviceSwitched",_,b)}fo.onDeviceSwitched=fr;function $(_,b,te,Dt=!1,yi=!1,Ri=null,$a=null,Ja,Sr){let Ya=Sr?ot(Sr):void 0;K("onMuteStates",Re(_),ot(b),ot(te),Dt,yi,Ri,$a,Ja,Ya)}fo.onMuteStates=$;function Ti(_,b){de("onRolesChanged",_,ot(b))}fo.onRolesChanged=Ti;function Ci(_){K("onLocalRolesChanged",ot(_))}fo.onLocalRolesChanged=Ci;function g(_,b,te){de("onPinnedParticipant",_,b,te)}fo.onPinnedParticipant=g;function I(_){K("onLocalPin",_)}fo.onLocalPin=I;function R(_){K("onOptionsChanged",ot(_))}fo.onOptionsChanged=R;function A(){K("onCallAccepted")}fo.onCallAccepted=A;function m(){K("onRateNeeded")}fo.onRateNeeded=m;function w(_){de("onSpeakerChanged",_)}fo.onSpeakerChanged=w;function J(_){K("onVolumesDetected",ot(_))}fo.onVolumesDetected=J;function M(_,b){K("onLocalVolume",_,b)}fo.onLocalVolume=M;function ge(_,b){K("onJoinStatus",_,b)}fo.onJoinStatus=ge;function he(_,b){K("onHangup",_,b)}fo.onHangup=he;function He(_){K("onMultipartyChatCreated",Re(_))}fo.onMultipartyChatCreated=He;function xe(){K("onDeviceChange")}fo.onDeviceChange=xe;function L(_){K("onFingerprintChange",_)}fo.onFingerprintChange=L;function Le(){K("onTokenExpired")}fo.onTokenExpired=Le;function Ge(_,b,te=!1){K("onChatMessage",_,b,te)}fo.onChatMessage=Ge;function Ne(_,b,te=!1){K("onCustomData",_,b,te)}fo.onCustomData=Ne;function At(_,b,te,Dt,yi,Ri){K("onRecordStarted",_,b,te,Dt,yi,Ri)}fo.onRecordStarted=At;function mt(){K("onRecordStopped")}fo.onRecordStopped=mt;function q(_){K("onLocalNetworkStatusChanged",_)}fo.onLocalNetworkStatusChanged=q;function _e(_){K("onNetworkStatusChanged",_)}fo.onNetworkStatusChanged=_e;function Ie(_,...b){K("onDebugMessage",_,...b)}fo.onDebugMessage=Ie;function Q(_,b){let te=Object.assign({},_,{memory:b});K("onStatistics",te)}fo.onStatistics=Q;function z(){K("onAutoplayError")}fo.onAutoplayError=z;function se(_,b,te){K("onChatRoomUpdated",_,b,te)}fo.onChatRoomUpdated=se;function Je(_){K("onRemoteMixedAudioStream",_)}fo.onRemoteMixedAudioStream=Je;function ho(_){K("onJoinLinkChanged",_)}fo.onJoinLinkChanged=ho;function _o(_){K("onFeedback",_)}fo.onFeedback=_o;function go(_){K("onFeaturesPerRoleChanged",_)}fo.onFeaturesPerRoleChanged=go})(Qi||(Qi={}));var f=Qi;var Xi=(r=>(r.DEBUG="DEBUG",r.LOG="LOG",r.WARN="WARN",r.ERROR="ERROR",r))(Xi||{}),Zi;(le=>{let a="📞",e=(be,...Me)=>{f.onDebugMessage(be,...Me)},t=!1,i=(be,Me)=>(...Xe)=>{be(...Xe),Qr(Me,Xe)},r=console.debug.bind(console,a),n=console.log.bind(console,a),s=console.warn.bind(console,a),p=console.error.bind(console,a),l=e.bind(null,"DEBUG"),u=e.bind(null,"LOG"),P=e.bind(null,"WARN"),C=e.bind(null,"ERROR");le.debug=l,le.log=u,le.warn=P,le.error=C;function Se(){return t}le.enabled=Se;function pe(be){t=be,d.debugLog&&Di(),be?(le.debug=d.debugLog?i(r,"DEBUG"):r,le.log=d.debugLog?i(n,"LOG"):n,le.warn=d.debugLog?i(s,"WARN"):s,le.error=d.debugLog?i(p,"ERROR"):p):(le.debug=d.debugLog?i(l,"DEBUG"):l,le.log=d.debugLog?i(u,"LOG"):u,le.warn=d.debugLog?i(P,"WARN"):P,le.error=d.debugLog?i(C,"ERROR"):C)}le.toggle=pe;function $e(be,...Me){switch(be){case"DEBUG":le.debug(...Me);break;case"LOG":le.log(...Me);break;case"WARN":le.warn(...Me);break;case"ERROR":le.error(...Me);break}}le.send=$e})(Zi||(Zi={}));var c=Zi;var ct=(i=>(i.USER="USER",i.ANONYM="ANONYM",i.GROUP="GROUP",i))(ct||{}),Ee;(p=>{function a(l){return l.length?typeof l[0]=="object"?l:l.map(u=>e(u)):[]}p.fromIds=a;function e(l,u="USER"){return{id:l,type:u}}p.fromId=e;function t(l){return{id:l.id,type:l.type==="ANONYM"?"ANONYM":"USER"}}p.fromSignaling=t;function i(l){return`{"id":"${l.id}","type":"${l.type}"}`}p.toString=i;function r(l,u="USER"){return i(e(l,u))}p.fromIdToString=r;function n(l){try{return JSON.parse(l)}catch(u){throw new Error(`Failed to parse ExternalId from string '${l}'`)}}p.fromString=n;function s(l,u){return l.id===u.id&&l.type===u.type}p.compare=s})(Ee||(Ee={}));var fe;(r=>{function a(n,s="USER",p=0){return{id:n,type:s,deviceIdx:p}}r.fromId=a;function e(n){return`{"id":"${n.id}","type":"${n.type}","deviceIdx":"${n.deviceIdx}"}`}r.toString=e;function t(n,s){return Object.assign({deviceIdx:s},Ee.fromSignaling(n))}r.fromSignaling=t;function i(n){return n&&typeof n=="object"?n.deviceIdx:0}r.getDeviceIdx=i})(fe||(fe={}));var An="kf";function Ft(a){return a.stopStream}function er(a){return a.keyFrameRequested}function _a(a){if(Ft(a))return"ss";if(er(a))return An;let e="";return a.priority!==void 0&&(e+="p="+a.priority),a.width!==void 0&&a.height!==void 0&&(e!==""&&(e+=":"),e+="sz="+Math.round(a.width)+"x"+Math.round(a.height)),a.fit!==void 0&&(e!==""&&(e+=":"),e+="fit="+a.fit),e}var Pe=(n=>(n.CAMERA="CAMERA",n.SCREEN="SCREEN",n.STREAM="STREAM",n.MOVIE="MOVIE",n.AUDIOSHARE="AUDIOSHARE",n))(Pe||{}),ga="s",fa="m";function qe(a){return a.participantId+(a.mediaType?Et+ga+a.mediaType:"")+(a.streamName?Et+fa+a.streamName:"")}function Ht(a){let e=a.split(Et),t=e.shift();if(!t)throw new Error("Illegal stream description: "+a);let i=null,r,n=0;for(let p of e)switch(p.charAt(0)){case ga:i=Dn(p.slice(1));break;case fa:r=p.slice(1);break;case Zt:n=Number.parseInt(p.slice(1),10);break;default:throw new Error("Unexpected parameter type "+p.charAt(0)+" in stream description "+a)}return{participantId:v.compose(t,n),mediaType:i,streamName:r}}function Dn(a){for(let e of Object.keys(Pe))if(e===a)return Pe[e];return null}function tr(a,e){return a===null||e===null?a===null&&e===null:!(a.maxDimension!==e.maxDimension||a.maxBitrateK!==e.maxBitrateK||a.maxFramerate!==e.maxFramerate||a.degradationPreference!==e.degradationPreference)}function li(a,e){return!(!tr(a.camera,e.camera)||!tr(a.screenSharing,e.screenSharing))}function ir(a,e){return{camera:Object.assign({},a.camera,e.camera),screenSharing:Object.assign({},a.screenSharing,e.screenSharing)}}function Sa(a){try{return btoa(JSON.stringify(a))}catch(e){c.warn("WaitingParticipant: failed convert to string",a,e)}return null}function va(a){try{return JSON.parse(atob(a))}catch(e){c.warn("WaitingParticipant: failed convert from string",a,e)}return null}var bt=(a,e)=>v.objectReduce(a,(t,i,r)=>(i===e&&t.push(r),t),[]);var Gt=class{constructor(e){this._fixNoPacketsApplied=!1;this._fixNoPacketsChecked=!1;this._fixTooManyPacketsApplied=!1;this._fixTooManyPacketsSucceeded=!1;this._fixTooManyPacketsFailed=!1;this._mediaSource=e}_fixAudioDeviceNoPackets(e){if(!(this._fixNoPacketsApplied&&this._fixNoPacketsChecked)){if(this._fixNoPacketsApplied&&!this._fixNoPacketsChecked){this._fixNoPacketsChecked=!0,h.log(E.ERROR,`audio_device_recover_${e.bandwidth?"success":"fail"}`);return}!this._fixNoPacketsApplied&&!e.bandwidth&&(this._fixNoPacketsApplied=!0,h.log(E.ERROR,"audio_device_recover"),this._mediaSource.toggleAudio(!0))}}_fixAudioDeviceTooManyPackets(e){if(this._fixTooManyPacketsSucceeded||this._fixTooManyPacketsFailed)return;let t=75,i=Date.now();if(!this._lastPacketsSentTime)e.packetsSent>0&&(this._lastPacketsSentTime=i,this._lastPacketsSent=e.packetsSent);else if(i-this._lastPacketsSentTime>500){let r=(e.packetsSent-this._lastPacketsSent)*1e3/(i-this._lastPacketsSentTime);this._lastPacketsSentTime=i,this._lastPacketsSent=e.packetsSent,this._fixTooManyPacketsApplied?r>t?(c.log("Failed to fix RV"),h.log(E.ERROR,"audio_device_recover_rv_fail"),this._fixTooManyPacketsFailed=!0):i-this._fixTooManyPacketsTime>6e4&&(c.log("Fixed RV"),h.log(E.ERROR,"audio_device_recover_rv_success"),this._fixTooManyPacketsSucceeded=!0):r>t&&(this._fixTooManyPacketsApplied=!0,c.log("Trying to fix RV"),this._mediaSource.toggleAudio(!0),this._fixTooManyPacketsTime=i)}}fix(e){if(!this._mediaSource)return;let t=e.find(i=>i.kind===ce.audio);!t||(this._fixAudioDeviceNoPackets(t),this._fixAudioDeviceTooManyPackets(t))}};var ui=class{constructor(){this._output=null;this._volume=1;this._features={setSinkId:!!Audio.prototype.setSinkId}}add(e){this.destroy(),this._output={},this._output.audioTrack=e,this._initAudioElement()}remove(e){!this._output||this._output.audioTrack!==e||this.destroy()}get volume(){return this._volume}set volume(e){this._volume=Math.max(0,Math.min(1,e)),this._output&&this._output.audioElement&&(this._output.audioElement.volume=this._volume)}_initAudioElement(){var s;if(d.muteMode||!((s=this._output)==null?void 0:s.audioTrack))return;let e=y.browserName()!=="Safari"||y.isMobile(),t=document.createElement(e?"audio":"video");t.muted=!1,t.volume=this._volume,t.preload="auto";let i=()=>{c.warn("Error on play audio"),f.onAutoplayError()},r=p=>{t.srcObject=new MediaStream([p]),t.load();let l=t.play();l?l.catch(i):i()},n=()=>{var l;c.debug("Recover audio playback");let p=(l=this._output)==null?void 0:l.audioTrack;p?r(p):c.warn("Broken audio track")};t.onpause=n,t.onstalled=n,t.onerror=n,r(this._output.audioTrack),this._output.audioElement=t}_stopAudioElement(){var e,t,i;((e=this._output)==null?void 0:e.audioElement)&&(this._output.audioElement.pause(),this._output.audioElement.srcObject=null),(i=(t=this._output)==null?void 0:t.audioTrack)==null||i.stop()}destroy(){!this._output||(this._stopAudioElement(),this._output=null)}changeOutput(){return o(this,null,function*(){var e,t,i;try{if(!this._features.setSinkId)throw new Error('Feature "setSinkId" is not supported');if(!((e=this._output)==null?void 0:e.audioElement))throw new Error("Audio Element is not initialized");let r=y.getSavedOutput();r&&(yield(i=(t=this._output.audioElement).setSinkId)==null?void 0:i.call(t,r.deviceId))}catch(r){throw h.log(E.ERROR,"change_output"),c.error("Output change failed",r),r}})}};var kn=90,On=3,mi=class extends ee{constructor(){super(...arguments);this._lastMemoryStat={percent:0,bytes:0}}onRemoteDataStats(e,t){this._calcMemory(),e.inbound.rtps.map(i=>{let r=typeof i.userId=="string"&&t[i.userId]||null;i.userId=r==null?void 0:r.externalId}),f.onStatistics(e,this._lastMemoryStat)}_calcMemory(){var r;let e=(r=window==null?void 0:window.performance)==null?void 0:r.memory;if(!e||!e.usedJSHeapSize||!e.jsHeapSizeLimit)return;let t=Number((100*e.usedJSHeapSize/e.jsHeapSizeLimit).toFixed(2)),i=Number((e.usedJSHeapSize/1024/1024).toFixed(1));t>kn?c.warn(`High memory usage: ${t}% (${i} MiB)`):(!this._lastMemoryStat.percent||Math.abs(t-this._lastMemoryStat.percent)>=On)&&(c.debug(`Memory usage: ${t}% (${i} MiB)`),this._lastMemoryStat.percent=t,this._lastMemoryStat.bytes=e.usedJSHeapSize)}};var wn=44100,Wt=class{constructor(e,t){this._analyser=null;this._gainNode=null;this._fftBins=null;this._mediaStreamSource=null;this._lastSmoothedLevel=0;this._trackId=e,this._stream=t;try{let i=y.getAudioContext();this._gainNode=i.createGain(),this._gainNode.gain.value=1e-5,this._gainNode.connect(i.destination),this._analyser=i.createAnalyser(),this._analyser.fftSize=1024,this._analyser.smoothingTimeConstant=0,this._analyser.connect(this._gainNode),this._fftBins=new Uint8Array(this._analyser.frequencyBinCount),this._mediaStreamSource=i.createMediaStreamSource(t),this._mediaStreamSource.connect(this._analyser)}catch(i){}}get stream(){return this._stream}get trackId(){return this._trackId}_getBins(){if(!this._fftBins||!this._analyser)return new Uint8Array;this._analyser.getByteFrequencyData(this._fftBins);let e=wn/this._fftBins.length,t=Math.ceil(d.voiceParams.minFreq/e),i=Math.floor(d.voiceParams.maxFreq/e);return this._fftBins.subarray(t,i)}getLevel(){let e=this._getBins(),i=e.reduce((n,s)=>n+s,0)/e.length/255,r=this._lastSmoothedLevel*d.voiceParams.smoothing+i*(1-d.voiceParams.smoothing);return this._lastSmoothedLevel=r,{real:i,smoothed:r}}destroy(){this._mediaStreamSource&&(this._mediaStreamSource.disconnect(),this._mediaStreamSource=null),this._gainNode&&(this._gainNode.disconnect(),this._gainNode=null),this._analyser&&(this._analyser.disconnect(),this._analyser=null,this._fftBins=null,this._lastSmoothedLevel=0)}};var hi=class extends ee{constructor(e){super();this._detector=null;this._track=null;this._interval=null;let t=()=>{this._detector&&f.onLocalVolume(this._detector.getLevel().real,e.getMediaSettings().isAudioEnabled),this._interval=window.setTimeout(t,d.voiceParams.interval)};this._interval=window.setTimeout(t,d.voiceParams.interval);let i=()=>{let r=e.getStream();r&&this.init(r)};this.subscribe(e,Ae.SOURCE_CHANGED,r=>{r.kind===ce.audio&&r.mediaSettings.isAudioEnabled&&i()}),i()}init(e){this._stopDetector();let t=e.getAudioTracks();t.length&&(this._track=t[0].clone(),this._detector=new Wt("local",new MediaStream([this._track])))}_stopDetector(){this._detector&&(this._detector.destroy(),this._detector=null),this._track&&(this._track.stop(),this._track=null)}destroy(){this.unsubscribe(),this._interval&&(window.clearTimeout(this._interval),this._interval=null),this._stopDetector()}};var Ea="videochat-epi",xn=5e3,Ln=3e4,dt=class extends ee{constructor(e,t,i=!1){super();this._previousTimestamp=0;this._previousCallStatReportTimestamp=0;this._previousCallStatReport={nack_sent:0,nack_received:0,pli_sent:0,pli_received:0,fir_sent:0,fir_received:0,frames_dropped:0,jitter_video:0,jitter_audio:0,interframe_delay_variance:0,total_audio_samples_received:0,concealed_audio_samples:0,inserted_audio_samples_for_deceleration:0,removed_audio_samples_for_acceleration:0,silent_concealed_audio_samples:0,audio_concealment_events:0,total_audio_energy:0};this._signaling=t,this._directTopology=i,this.subscribe(e,F.REMOTE_DATA_STATS,this._handleStats.bind(this))}destroy(){this.unsubscribe()}static getEstimatedPerformanceIndex(){try{let e=parseInt(localStorage.getItem(Ea)||"",10);return isNaN(e)?0:e}catch(e){return 0}}_handleStats(e){return o(this,null,function*(){if(!e.inbound||!e.inbound.rtps)return;let t=Date.now();!this._directTopology&&d.perfStatReportEnabled&&this._previousTimestamp+xn<=t&&(yield this.reportPerfStats(e),this._previousTimestamp=t),d.callStatReportEnabled&&this._previousCallStatReportTimestamp+Ln<=t&&(this._reportCallStats(e),this._previousCallStatReportTimestamp=t)})}reportPerfStats(e){return o(this,null,function*(){let t=e.inbound.rtps.reduce((i,r)=>(r.kind==="video"&&(i.framesDecoded+=r.framesDecoded||0,i.framesReceived+=r.framesReceived||0),i),{framesDecoded:0,framesReceived:0});if(t.framesDecoded)try{let i=yield this._signaling.reportPerfStat(t);localStorage.setItem(Ea,i.estimatedPerformanceIndex)}catch(i){}})}_reportCallStats(e){let t={nack_received:0,pli_received:0,fir_received:0,frames_dropped:0,jitter_video:0,jitter_audio:0,interframe_delay_variance:0,nack_sent:0,pli_sent:0,fir_sent:0,total_audio_samples_received:0,concealed_audio_samples:0,silent_concealed_audio_samples:0,inserted_audio_samples_for_deceleration:0,removed_audio_samples_for_acceleration:0,audio_concealment_events:0,total_audio_energy:0,inbound_video_count:0,inbound_audio_count:0};e.inbound.rtps.reduce((r,n)=>(n.kind==="video"?(n.framesReceived&&(r.jitter_video=r.jitter_video*r.inbound_video_count/(r.inbound_video_count+1)+n.jitter*1e3/(r.inbound_video_count+1),r.interframe_delay_variance=r.interframe_delay_variance*r.inbound_video_count/(r.inbound_video_count+1)+n.interframeDelayVariance*1e6/(r.inbound_video_count+1),r.inbound_video_count++),r.frames_dropped+=n.framesDropped,r.nack_sent+=n.nackCount,r.pli_sent+=n.pliCount,r.fir_sent+=n.firCount):(n.totalSamplesReceived&&(r.jitter_audio=r.jitter_audio*r.inbound_audio_count/(r.inbound_audio_count+1)+n.jitter*1e3/(r.inbound_audio_count+1),r.total_audio_energy=r.total_audio_energy*r.inbound_audio_count/(r.inbound_audio_count+1)+n.totalAudioEnergy/(r.inbound_audio_count+1),r.inbound_audio_count++),r.total_audio_samples_received+=n.totalSamplesReceived,r.inserted_audio_samples_for_deceleration+=n.insertedSamplesForDeceleration,r.removed_audio_samples_for_acceleration+=n.removedSamplesForAcceleration,r.concealed_audio_samples+=n.concealedSamples,r.silent_concealed_audio_samples+=n.silentConcealedSamples,r.audio_concealment_events+=n.concealmentEvents),r),t),e.outbound.rtps.reduce((r,n)=>(n.kind==="video"&&(r.nack_received+=n.nackCount,r.pli_received+=n.pliCount,r.fir_received+=n.firCount),r),t);let i={call_topology:this._directTopology?"D":"S",nack_sent:t.nack_sent-this._previousCallStatReport.nack_sent,nack_received:t.nack_received-this._previousCallStatReport.nack_received,pli_sent:t.pli_sent-this._previousCallStatReport.pli_sent,pli_received:t.pli_received-this._previousCallStatReport.pli_received,fir_sent:t.fir_sent-this._previousCallStatReport.fir_sent,fir_received:t.fir_received-this._previousCallStatReport.fir_received,frames_dropped:t.frames_dropped-this._previousCallStatReport.frames_dropped};if(t.jitter_video&&(i.jitter_video=t.jitter_video),t.jitter_audio&&(i.jitter_audio=t.jitter_audio),t.interframe_delay_variance&&(i.interframe_delay_variance=t.interframe_delay_variance),t.total_audio_samples_received){let r=t.total_audio_samples_received-this._previousCallStatReport.total_audio_samples_received,n=t.inserted_audio_samples_for_deceleration-this._previousCallStatReport.inserted_audio_samples_for_deceleration,s=t.removed_audio_samples_for_acceleration-this._previousCallStatReport.removed_audio_samples_for_acceleration,p=t.concealed_audio_samples-this._previousCallStatReport.concealed_audio_samples,l=t.silent_concealed_audio_samples-this._previousCallStatReport.silent_concealed_audio_samples,u=t.audio_concealment_events-this._previousCallStatReport.audio_concealment_events;i.inserted_audio_samples_for_deceleration=n/r*1e3,i.removed_audio_samples_for_acceleration=s/r*1e3,i.concealed_audio_samples=p/r*1e3,i.concealed_silent_audio_samples=l/r*1e3,i.concealment_audio_avg_size=p/u,i.total_audio_energy=t.total_audio_energy}h.logCustom("callStat",i),c.log("Sent call stats",i),this._previousCallStatReport=t}};var Nn=1e3;function me(a,e,t=0){return e in a&&a[e]?a[e]:t}function Ia(...a){return e=>{for(let t of a)if(t(e))return!0;return!1}}function et(a,e){return t=>t[a]===e}function Un(a){return(e,t)=>e[a]-t[a]}function _i(a,e){return e.reduce((t,i)=>(t[i[a]]=i,t),{})}function Bn(a){let e={},t=[];for(let i of a)e[i.id]||(e[i.id]=!0,t.push(i));return t}function Vn(a){return a!==null&&typeof a=="object"&&!Array.isArray(a)}function rr(a){return Object.keys(a).filter(e=>a[e]!==void 0).map(e=>[e,a[e]]).reduce((e,t)=>(e[t[0]]=Vn(t[1])?rr(t[1]):t[1],e),{})}function Fn(a){let e=[];for(let t of a)t.forEach(i=>e.push(i));return e}function Hn(a){return o(this,null,function*(){let e=[];return RTCRtpReceiver.prototype.getStats?(e.push(...a.getReceivers().map(t=>t.getStats())),e.push(...a.getSenders().map(t=>t.getStats()))):e.push(a.getStats()),Promise.all(e).then(Fn).then(Bn)})}function Gn(a){let e=a.filter(et("type","candidate-pair")).sort(Un("priority")).find(Ia(et("nominated",!0),et("selected",!0)));if(!e)return{totalRoundTripTime:0,currentRoundTripTime:0,bytesSent:0,bytesReceived:0};let t={totalRoundTripTime:e.totalRoundTripTime||0,currentRoundTripTime:e.currentRoundTripTime||0,bytesSent:e.bytesSent,bytesReceived:e.bytesReceived},i=a.find(et("id",e.remoteCandidateId));i&&(t=Object.assign({},t,{remote:{type:i.candidateType,address:i.ip||i.address,port:i.port,protocol:i.protocol}}));let r=a.find(et("id",e.localCandidateId));return r&&(t=Object.assign({},t,{local:{type:r.candidateType,address:r.ip||r.address,port:r.port,protocol:r.protocol,relayProtocol:r.relayProtocol,networkType:r.networkType}})),rr(t)}function Wn(a,e){let t=_i("id",a),i=a.filter(Ia(et("type","inbound-rtp"),et("type","outbound-rtp")));y.browserName()==="Firefox"&&(i=Object.values(i.reduce((n,s)=>{if(!n[s.ssrc])n[s.ssrc]=s;else{let p=Object.assign({},n[s.ssrc],s),l=n[s.ssrc].isRemote?s:n[s.ssrc];p.id=l.id,p.type=l.type,delete p.isRemote,delete p.remoteId,n[p.ssrc]=p}return n},{})));let r={};if(y.browserName()==="Safari"){let n=a.filter(et("type","track"));r=_i("trackIdentifier",n)}return i.map(n=>{let s=Number(n.ssrc),p=n.mediaType||n.kind,l=n.trackId,u=n.type,P=n.codecId;if(y.browserName()==="Safari"){let O=/^.+_([\d]+)$/.exec(n.id);if(O&&(s=parseInt(O[1],10)),p=n.id.indexOf("Audio")>0?"audio":"video",e[s]){let x=p+"-"+e[s];r[x]&&(l=r[x].id)}}if(!u||!s||!p)return null;let C={ssrc:s,type:u,kind:p,bytesReceived:me(n,"bytesReceived"),bytesSent:me(n,"bytesSent"),jitter:me(n,"jitter"),packetsLost:me(n,"packetsLost"),packetsReceived:me(n,"packetsReceived"),packetsSent:me(n,"packetsSent"),fractionLost:me(n,"fractionLost"),pliCount:me(n,"pliCount"),firCount:me(n,"firCount"),nackCount:me(n,"nackCount"),userId:e[s]};if(p==="video"){let O=me(n,"framesDecoded"),x=me(n,"totalInterFrameDelay"),H=me(n,"totalSquaredInterFrameDelay");C.interframeDelayVariance=(H-x*x/O)/O}if(p==="audio"&&(C.totalSamplesReceived=me(n,"totalSamplesReceived"),C.concealedSamples=me(n,"concealedSamples"),C.insertedSamplesForDeceleration=me(n,"insertedSamplesForDeceleration"),C.removedSamplesForAcceleration=me(n,"removedSamplesForAcceleration"),C.silentConcealedSamples=me(n,"silentConcealedSamples"),C.concealmentEvents=me(n,"concealmentEvents"),C.totalAudioEnergy=me(n,"totalAudioEnergy")),P&&t[P]){let O=t[P];C.clockRate=O.clockRate,C.mimeType=O.mimeType}if(l&&t[l]){let O=t[l];C.frameHeight=O.frameHeight,C.frameWidth=O.frameWidth,C.framesDecoded=O.framesDecoded,C.framesReceived=O.framesReceived,C.framesDropped=O.framesDropped}return rr(C)}).filter(n=>!!n)}function jn(a,e){if(!e||!e.rtps||!a.rtps)return a;let t=_i("ssrc",a.rtps),i=_i("ssrc",e.rtps),r=(a.timestamp-e.timestamp)/1e3;return!t||!i||Object.keys(t).forEach(n=>{let s=t[n],p=i[n];if(!(!s||!p)){if(s.bytesReceived&&s.bytesReceived>p.bytesReceived&&(s.bandwidth=Math.round((s.bytesReceived-p.bytesReceived)/r)),s.bytesSent&&s.bytesSent>p.bytesSent&&(s.bandwidth=Math.round((s.bytesSent-p.bytesSent)/r)),s.packetsReceived)if(s.packetsReceived>p.packetsReceived||s.packetsLost>p.packetsLost){let l=s.packetsLost-p.packetsLost,u=s.packetsReceived-p.packetsReceived;s.packetLoss=parseFloat((100*l/(l+u)).toFixed(2))}else s.packetLoss=0;s.framesDropped&&p.framesDropped&&s.framesDropped>p.framesDropped&&(s.framesDroppedDelta=parseFloat(((s.framesDropped-p.framesDropped)/r).toFixed(0)))}}),a}function jt(i,r){return o(this,arguments,function*(a,e,t={}){let n=yield Hn(a),s={timestamp:Date.now(),transport:Gn(n),rtps:Wn(n,t)};return e?jn(s,e):(yield v.delay(Nn),jt(a,s,t))})}var gi=.8,pt=class extends ee{constructor(e,t,i,r,n){super();this._remoteSDP={};this._remoteCandidates={};this._state=B.IDLE;this._isOpen=!1;this._remotePeerId=null;this._statInterval=null;this._settingsInterval=null;this._failedOnCreate=null;this._remoteStream=null;this._iceRestartTimeout=null;this._reconnectionTimeout=null;this._reconnectionPrevented=!1;this._fingerprint=null;this._neverConnected=!0;this._prevConsumerSettings={};this._lastNetworkStat={rtt:0,loss:0,date:0};this._remoteNetworkStat={rtt:0,loss:0};this._networkLimits={badNet:{loss:3,rtt:1e3},goodNet:{loss:.5,rtt:600}};if(this._signaling=i,this._mediaSource=r,this._participantId=e,this._isMaster=t,this._serverSettings=n,this._perfStatReporter=new dt(this,i,!0),this.subscribe(this._signaling,Te.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._mediaSource,Ae.TRACK_REPLACED,this._onReplacedTrack.bind(this)),this.subscribe(this._mediaSource,Ae.SOURCE_CHANGED,this._applySettings.bind(this)),this._pc=new RTCPeerConnection({iceServers:d.iceServers,iceTransportPolicy:d.forceRelayPolicy?"relay":"all"},{optional:[{googSuspendBelowMinBitrate:!1}]}),this._pc.onicecandidate=this._handleIceCandidate.bind(this),this._pc.ontrack=this._onAddTrack.bind(this),this._pc.oniceconnectionstatechange=this._onIceConnectionStateChange.bind(this),this._pc.onconnectionstatechange=this._onConnectionStateChange.bind(this),this._pc.onsignalingstatechange=this._onSignalingStateChange.bind(this),this._prevConsumerSettings={},this._isMaster){try{this._mediaSource.addTrackToPeerConnection(this._pc,!1,!0,d.p2pAudioRed),this._applySettings()}catch(s){h.log(E.ERROR,"addTrack-direct"),c.error("Unable to add media source tracks",s,{participantId:this._participantId}),this._failedOnCreate=s;return}this._createOffer(!1).catch(s=>{this._state===B.IDLE?this._failedOnCreate=s:this.close(s)})}this._startSettingsInterval(),this._startStatInterval()}getState(){return this._state}updateStatisticsInterval(){this._stopStatInterval();let e=this.getState();e!==B.IDLE&&e!==B.CLOSED&&e!==B.FAILED&&this._startStatInterval()}open(e=null){return o(this,null,function*(){if(this._isOpen){c.warn("DirectTransport: Already opened",{participantId:this._participantId});return}if(this._failedOnCreate){this.close(this._failedOnCreate);return}if(c.debug("DirectTransport: Open transport",{participantId:this._participantId}),this._isOpen=!0,this._remotePeerId=e,!this._isMaster)try{this._mediaSource.addTrackToPeerConnection(this._pc,!1,!0,d.p2pAudioRed),this._applySettings()}catch(i){h.log(E.ERROR,"addTrack-direct"),c.error("DirectTransport: Unable to add media source tracks",i,{participantId:this._participantId}),this.close(i);return}this._setState(B.OPENED);let t=e;if(!e){let i=Object.keys(this._remoteSDP);t=i[i.length-1]}if(t&&this._remoteSDP[t])try{yield this._setRemoteDescription(t,this._remoteSDP[t])}catch(i){this.close();return}this._remoteSDP={},this._remoteCandidates={}})}updateSettings(e){li(e,this._serverSettings)||(this._serverSettings=e,this._applySettings())}preventRestart(){this._reconnectionPrevented=!0}allowRestart(){this._reconnectionPrevented=!1}close(e){this._isOpen=!1,this._stopReconnection(),this._remoteStream&&(this._remoteStream.getTracks().forEach(t=>{t.stop(),this._triggerEvent(F.REMOTE_TRACK_REMOVED,this._remoteStream,t)}),this._remoteStream=null),this._stopStatInterval(),this._stopSettingsInterval(),this._pc&&(this._pc.onicecandidate=null,this._pc.ontrack=null,this._pc.oniceconnectionstatechange=null,this._pc.onconnectionstatechange=null,this._pc.onsignalingstatechange=null,this._pc.close()),this.unsubscribe(),e?(c.error("DirectTransport: Closed",e,{participantId:this._participantId}),this._setState(B.FAILED)):(c.debug("DirectTransport: Closed",{participantId:this._participantId}),this._setState(B.CLOSED)),this._triggerEvent(F.PEER_CONNECTION_CLOSED)}_setState(e){this._state!==e&&(c.debug(`DirectTransport: State changed to ${e}`,{participantId:this._participantId}),this._state=e,this._triggerEvent(F.STATE_CHANGED,e))}_onSignalingNotification(e){var t,i,r,n;switch(e.notification){case k.TRANSMITTED_DATA:this._handleTransmittedData(e);break;case k.SETTINGS_UPDATE:Object.assign(this._networkLimits.badNet,((t=e.settings)==null?void 0:t.badNet)||{}),Object.assign(this._networkLimits.goodNet,((i=e.settings)==null?void 0:i.goodNet)||{});break;case k.CUSTOM_DATA:e.data.hasOwnProperty("sdk")&&(this._remoteNetworkStat.rtt=((r=e.data.sdk)==null?void 0:r.rtt)||0,this._remoteNetworkStat.loss=((n=e.data.sdk)==null?void 0:n.loss)||0);break}}_handleTransmittedData(e){let t=e.data,i=v.getPeerIdString(e.peerId);v.composeMessageId(e)===this._participantId&&(t.candidate&&t.candidate.candidate?this._addIceCandidate(i,t.candidate).catch(this.close.bind(this)):t.sdp&&this._setRemoteDescription(i,t.sdp).catch(this.close.bind(this)))}_addIceCandidate(e,t){return o(this,null,function*(){if(this._isOpen&&(!this._remotePeerId||this._remotePeerId===e)&&this._pc&&this._pc.remoteDescription){c.debug("Add remote ice candidate",{participantId:this._participantId,candidate:t});try{yield this._pc.addIceCandidate(new RTCIceCandidate(t))}catch(i){throw h.log(E.ERROR,"addIceCandidate-direct"),c.error("Unable to add remote ice candidate",i,{participantId:this._participantId,candidate:t}),i}}else c.debug("Cache remote ice candidate",{participantId:this._participantId,candidate:t}),this._remoteCandidates[e]=this._remoteCandidates[e]||[],this._remoteCandidates[e].push(t)})}_setRemoteCandidates(e){return o(this,null,function*(){if(!this._remoteCandidates[e]){c.log(`No cached candidates found for peer ${e}`);return}let t=this._remoteCandidates[e];this._remoteCandidates[e]=[];for(let i of t)try{yield this._addIceCandidate(e,i)}catch(r){}})}_setRemoteDescription(e,t){return o(this,null,function*(){if(this._isOpen&&(!this._remotePeerId||this._remotePeerId===e)&&this._pc){c.debug("Add remote description",{participantId:this._participantId,sdp:t}),this._calcFingerprint(t.sdp);try{yield this._pc.setRemoteDescription(new RTCSessionDescription(t)),yield this._setRemoteCandidates(e)}catch(i){throw h.log(E.ERROR,"setRemoteDescription-direct"),c.error("Unable to set remote description",i,{participantId:this._participantId,sdp:t}),i}}else this._remoteSDP[e]=t})}_onAddTrack(e){c.debug("Added remote track",{participantId:this._participantId,kind:e.track.kind}),this._remoteStream?this._remoteStream.addTrack(e.track):(this._remoteStream=new MediaStream([e.track]),this._remoteStream.onremovetrack=t=>{this._triggerEvent(F.REMOTE_TRACK_REMOVED,this._remoteStream,t.track)}),this._triggerEvent(F.REMOTE_TRACK_ADDED,this._remoteStream,e.track)}_handleIceCandidate(e){return o(this,null,function*(){e.candidate&&this._signaling.ready&&(c.debug("Local ice candidate",{participantId:this._participantId,candidate:e.candidate}),yield this._signaling.sendCandidate(this._participantId,e.candidate))})}_onSignalingStateChange(){switch(c.debug(`DirectTransport: Signaling state changed to ${this._pc.signalingState}`,{participantId:this._participantId}),this._pc.signalingState){case"have-local-offer":let e=this._pc.localDescription;e?this._signaling.sendSdp(this._participantId,e).catch(this.close.bind(this)):this.close(new Error);break;case"have-remote-offer":this._createAnswer().catch(this.close.bind(this)).then(t=>o(this,null,function*(){return this._signaling.sendSdp(this._participantId,t)})).catch(this.close.bind(this));break}}_onIceConnectionStateChange(){switch(c.debug(`DirectTransport: Ice Connection state changed to ${this._pc.iceConnectionState}`,{participantId:this._participantId}),this._pc.iceConnectionState){case"checking":let e=this.getState();e===B.IDLE||e===B.OPENED?this._setState(B.CONNECTING):this._setState(B.RECONNECTING);break}}_onConnectionStateChange(){switch(c.debug(`DirectTransport: Connection state changed to ${this._pc.connectionState}`,{participantId:this._participantId}),h.log(E.ICE_CONNECTION_STATE,this._pc.connectionState),this._pc.connectionState){case"connected":this._neverConnected=!1,this._setState(B.CONNECTED),this._stopReconnection(),v.getPeerConnectionHostInfo(this._pc).then(e=>{e&&h.log(E.ICE_CONNECTION_TYPE,e.type)});break;case"failed":case"disconnected":this._reconnectionPrevented?this.close(new Error(`Ice connection ${this._pc.connectionState}`)):(this._setState(B.RECONNECTING),this._startReconnection());break;case"closed":this.close(new Error("Ice connection closed"));break}}_startReconnection(){this._reconnectionTimeout||this._iceRestartTimeout||(c.log("Waiting for reconnection...",{participantId:this._participantId}),this._reconnectionTimeout=window.setTimeout(()=>{this._reconnectionTimeout=null,this._neverConnected?this._requestTopologySwitch():this._startIceRestart()},d.transportConnectionWaitTime))}_requestTopologySwitch(){this._isMaster&&this._signaling.ready&&(c.log("Switch topology DIRECT to SERVER",{participantId:this._participantId}),this._signaling.switchTopology(ne.SERVER))}_stopReconnection(){this._reconnectionTimeout&&(clearTimeout(this._reconnectionTimeout),this._reconnectionTimeout=null),this._iceRestartTimeout&&(clearTimeout(this._iceRestartTimeout),this._iceRestartTimeout=null)}_startIceRestart(){this._isMaster?(h.log(E.ICE_RESTART),c.log("Ice restart",{participantId:this._participantId}),this._createOffer(!0).catch(this.close.bind(this))):c.debug("Waiting for ice restart...",{participantId:this._participantId}),this._iceRestartTimeout=window.setTimeout(()=>{this._iceRestartTimeout=null,c.error("Ice restart failed",{participantId:this._participantId}),h.log(E.ERROR,"iceRestart-direct"),this._requestTopologySwitch()},d.iceRestartWaitTime)}_createOffer(e){return o(this,null,function*(){let t={iceRestart:e,offerToReceiveAudio:!0,offerToReceiveVideo:!0};return c.debug("Create offer",{participantId:this._participantId,options:t}),this._pc.createOffer(t).catch(i=>{throw c.error("Unable to create offer",i,{participantId:this._participantId}),h.log(E.ERROR,"createOffer-direct"),i}).then(i=>o(this,null,function*(){return c.debug("Created offer",{participantId:this._participantId,offer:i}),i=pt._patchDescription(i),c.debug("Set local description",{participantId:this._participantId,offer:i}),this._calcFingerprint(i.sdp),this._pc.setLocalDescription(i).then(()=>this._pc.localDescription)})).catch(i=>{throw c.error("Unable to set local description",i,{participantId:this._participantId}),h.log(E.ERROR,"setLocalDescription-direct"),i})})}_createAnswer(){return o(this,null,function*(){return c.debug("Create answer",{participantId:this._participantId}),this._pc.createAnswer().catch(e=>{throw c.error("Unable to create answer",e,{participantId:this._participantId}),h.log(E.ERROR,"createAnswer-direct"),e}).then(e=>o(this,null,function*(){return c.debug("Created answer",{participantId:this._participantId,answer:e}),e=pt._patchDescription(e),c.debug("Set local description",{participantId:this._participantId,answer:e}),this._calcFingerprint(e.sdp),this._pc.setLocalDescription(e)})).then(()=>this._pc.localDescription).catch(e=>{throw c.error("Unable to set local description",e,{participantId:this._participantId}),h.log(E.ERROR,"setLocalDescription-direct"),e})})}static _patchDescription(e){let t=!!y.baseChromeVersion();return e.sdp=v.patchSDP(e.sdp,d.preferH264&&y.canPreferH264(),y.isBrokenH264(),d.preferVP9,d.h264spsPpsIdrInKeyframe,t&&d.audioNack,d.p2pAudioRed),e}_onReplacedTrack(e){this._pc&&(this._pc.getSenders().forEach(t=>{t.track&&t.track.kind===e.kind&&t.track.contentHint===e.contentHint&&(t.track.enabled=e.enabled,t.replaceTrack(e).catch(i=>{c.error("DirectTransport: Unable to replace track",i,{participantId:this._participantId}),h.log(E.ERROR,"replaceTrack-direct")}))}),this._applySettings())}_startStatInterval(){if(this._statInterval)return;let e=()=>{if(!this._pc){this._stopStatInterval();return}jt(this._pc,this._lastStat).then(t=>{this._lastStat=t;let i={inbound:{topology:ne.DIRECT,transport:t.transport,rtps:t.rtps.filter(r=>r.type==="inbound-rtp"?(r.userId=this._participantId,!0):!1)},outbound:{topology:ne.DIRECT,transport:t.transport,rtps:t.rtps.filter(r=>r.type==="outbound-rtp")}};this._checkBadNetwork(i),this._triggerEvent(F.REMOTE_DATA_STATS,i),this._statInterval=window.setTimeout(e,d.statisticsInterval)})};this._statInterval=window.setTimeout(e,d.statisticsInterval)}_stopStatInterval(){this._statInterval&&(window.clearTimeout(this._statInterval),this._statInterval=null)}_checkBadNetwork(e){if(!this._signaling.ready)return;let t=pe=>pe.rtt<=this._networkLimits.goodNet.rtt&&pe.loss<=this._networkLimits.goodNet.loss,i=pe=>pe.rtt>=this._networkLimits.badNet.rtt||pe.loss>=this._networkLimits.badNet.loss,r=Math.round(e.outbound.transport.currentRoundTripTime*1e3)||0,n=e.inbound.rtps.reduce((pe,$e)=>Math.max(pe,$e.packetLoss||0),0),s={rtt:this._lastNetworkStat.rtt*(1-gi)+r*gi,loss:this._lastNetworkStat.loss*(1-gi)+n*gi},p=i(s),l=t(s),u=i(this._remoteNetworkStat),P=t(this._remoteNetworkStat),C=i(this._lastNetworkStat),O=t(this._lastNetworkStat),re=p||u?.2:l&&P?1:0,Se=Date.now();if((C!==p||O!==l||Se-this._lastNetworkStat.date>d.networkStatisticsInterval)&&(this._lastNetworkStat.date=Date.now(),this._signaling.customData({sdk:Object.assign({type:"bad-net"},s)},null).catch(pe=>{c.warn("Unable to send [bad-net]",pe)})),re){let pe={};pe[this._participantId]=pe[""]=re,this._triggerEvent(F.NETWORK_STATUS,pe)}this._lastNetworkStat.rtt=s.rtt,this._lastNetworkStat.loss=s.loss}_startSettingsInterval(){let e=2e3;if(this._settingsInterval)return;let t=()=>{if(!this._pc){this._stopSettingsInterval();return}this._applySettings(),this._settingsInterval=window.setTimeout(t,e)};this._settingsInterval=window.setTimeout(t,e)}_stopSettingsInterval(){this._settingsInterval&&(window.clearTimeout(this._settingsInterval),this._settingsInterval=null)}_calcFingerprint(e){let t=v.sdpFingerprint(e);if(t===null){c.warn("Fingerprint calculation is unsupported");return}this._fingerprint===null?this._fingerprint=t:(f.onFingerprintChange((this._fingerprint^t).toString()),this._fingerprint=null)}_applySettings(){var t;let e=this._mediaSource.getMediaSettings().isScreenSharingEnabled?this._serverSettings.screenSharing:this._serverSettings.camera;e&&((t=this._pc)==null?void 0:t.connectionState)==="connected"&&(this._prevConsumerSettings=v.applySettings(this._pc,e,this._prevConsumerSettings))}};var Ta=(r=>(r.producerNotification="producerNotification",r.producerCommand="producerCommand",r.consumerScreenShare="consumerScreenShare",r.producerScreenShare="producerScreenShare",r))(Ta||{}),Kt=Ta;var tt=it(require("messagepack"));var ar=class{constructor(){this.streamDescriptionByCompactId=new Map;this.compactIdByStreamDescription=new Map}getStreamDescription(e){return this.streamDescriptionByCompactId.get(e)}getCompactId(e){return this.compactIdByStreamDescription.get(e)}handleMessage(e){var n,s;let t=new Uint8Array(e),i=t[0],r=t.subarray(1);switch(i){case 1:let p=(0,tt.decode)(r);return Object.entries(p).forEach(([H,re])=>{let Se=Ht(H);this.streamDescriptionByCompactId.set(re,Se),this.compactIdByStreamDescription.set(H,re)}),null;case 2:case 4:let l=(0,tt.decode)(r),u=[];for(let H of l){let re=this.getStreamDescription(H);re&&u.push(re.participantId)}return i===2?{type:"notification",notification:k.AUDIO_ACTIVITY,activeParticipants:u}:{type:"notification",notification:k.STALLED_ACTIVITY,stalledParticipants:u};case 3:let P=(0,tt.decode)(r);return{type:"notification",notification:k.SPEAKER_CHANGED,speaker:(n=this.getStreamDescription(P))==null?void 0:n.participantId};case 5:let C=(0,tt.decode)(r);return{type:"notification",notification:k.VIDEO_QUALITY_UPDATE,quality:{maxBitrate:C[0],maxDimension:C[1]}};case 6:let O=(0,tt.decode)(r),x={};for(let[H,re]of Object.entries(O)){let Se=(s=this.getStreamDescription(Number(H)))==null?void 0:s.participantId;Se&&(x[Se]=re/100)}return{type:"notification",notification:k.NETWORK_STATUS,statuses:x};case 7:return this._createParticipantSourcesUpdateNotification(r);case 8:{let re=(0,tt.decode)(r).map(Se=>{var Xe;let[pe,$e,le,be,Me]=Se;return{participantId:(Xe=this.getStreamDescription(pe))==null?void 0:Xe.participantId,gain:$e,pause:le,offset:be,mute:Me}});return{type:"notification",notification:k.MOVIE_UPDATE_NOTIFICATION,data:re}}default:return c.debug("unsupported message type: "+i),null}}_createParticipantSourcesUpdateNotification(e){let t=(0,tt.decode)(e),i=[];for(let[r,n]of Object.entries(t)){let s=n[0],p=n[1],l=n[2],u;if(s!==null){if(u=this.getStreamDescription(s),!u){c.error(`could not uncompress participant ID ${s}`);continue}}else u=null;if(l===null){c.error("unexpected null sequenceNumber",r,n);continue}let P=Be.PARTICIPANT_AGNOSTIC_TRACK_PREFIX+"-"+r,C=p?p>>>0:null;i.push({participantStreamDescription:u,streamId:P,rtpTimestamp:C,sequenceNumber:l})}return{type:"notification",notification:k.PARTICIPANT_SOURCES_UPDATE,participantUpdateInfos:i}}};var Kn=90,qn=4294967295,Oe=class extends ee{constructor(e,t,i){super();this._pc=null;this._producerNotification=null;this._producerCommand=null;this._producerScreen=null;this._consumerScreen=null;this._isOpen=!1;this._observer=!1;this._reconnectionPrevented=!1;this._state=B.IDLE;this._statInterval=null;this._settingsInterval=null;this._statBytes={};this._ssrcMap={};this._producerOfferIsProcessing=!1;this._producerNextOffer=null;this._prevConsumerSettings={};this._captureSender=null;this._captureReceiver=null;this._participantIdRegistry=null;this._disabledSenders=new Set;this._rtpReceiversByStreamId={};this._producerSessionId="";this._newAudioShareTrack=null;this._signaling=e,this._mediaSource=t,this._newAudioShareTrack=t.getAudioShareTrack(),this.subscribe(this._signaling,Te.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._mediaSource,Ae.TRACK_REPLACED,this._onReplacedTrack.bind(this)),this.subscribe(this._mediaSource,Ae.SOURCE_CHANGED,this._applyConsumerSettings.bind(this)),this.subscribe(this._mediaSource,Ae.SCREEN_STATUS,this._onScreenSharingStatus.bind(this)),this._perfStatReporter=new dt(this,e),this._serverSettings=i,c.debug("ServerTransport: Created")}getState(){return this._state||B.IDLE}updateStatisticsInterval(){this._stopStatInterval();let e=this.getState();e!==B.IDLE&&e!==B.CLOSED&&e!==B.FAILED&&this._startStatInterval()}open(e=!1){if(this._isOpen){c.log("ServerTransport: Already opened connections");return}this._isOpen=!0,this._observer=e,this._openConnection()}close(e){this._isOpen=!1,this._closeConnection(),this.unsubscribe(),e?(c.error("ServerTransport: Closed",e),this._setState(B.FAILED)):(c.debug("ServerTransport: Closed"),this._setState(B.CLOSED))}removeParticipant(e){var t;(t=this._captureReceiver)==null||t.close(e)}preventRestart(){this._reconnectionPrevented=!0}allowRestart(){this._reconnectionPrevented=!1}updateSettings(e){li(e,this._serverSettings)||(this._serverSettings=e,this._applyConsumerSettings())}_closeConnection(){this._stopStatInterval(),this._stopSettingsInterval(),this._removeCaptureSender(),this._removeCaptureReceiver(),this._pc&&(this._rtpReceiversByStreamId={},this._disabledSenders.forEach(e=>{var t;return(t=e.track)==null?void 0:t.stop()}),this._disabledSenders.clear(),this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.onsignalingstatechange=null,this._participantIdRegistry=null,Oe._closeDataChannel(this._producerNotification),Oe._closeDataChannel(this._producerCommand),Oe._closeDataChannel(this._producerScreen),Oe._closeDataChannel(this._consumerScreen),this._pc.close(),this._pc=null,this._producerOfferIsProcessing=!1,this._producerNextOffer=null),this._triggerEvent(F.PEER_CONNECTION_CLOSED)}static _closeDataChannel(e){e&&(e.onopen=null,e.onmessage=null,e.onerror=null,e.close())}_createDataChannel(e,t,i){c.debug(`[${t}] data channel opening`);let r=e.createDataChannel(t,{ordered:!0});r.onopen=()=>{let n=r.readyState;n==="open"?(c.debug(`[${t}] data channel opened`),r.onerror=s=>{c.error(`[${t}] data channel error`,s)},i(r)):c.error(`[${t}] data channel open failed, state [${n}]`)}}_openConnection(e=!1){c.debug("ServerTransport: Open single connection");let t={};y.baseChromeVersion()&&(t.sdpSemantics=Oe._isUnifiedPlanSupported()?"unified-plan":"plan-b"),this._pc=new RTCPeerConnection(t,{optional:[{googSuspendBelowMinBitrate:!1}]}),this._pc.ontrack=this._onAddTrack.bind(this,this._pc),this._pc.onconnectionstatechange=v.throttle(i=>{this._pc&&this._onConnectionStateChange(this._pc,i)},500),this._pc.onsignalingstatechange=Oe._onSignalingStateChange.bind(this,this._pc),d.producerNotificationDataChannel&&this._createDataChannel(this._pc,Kt.producerNotification,i=>{this._producerNotification=i,this._producerNotification.binaryType="arraybuffer",this._participantIdRegistry=new ar,this._signaling.setParticipantIdRegistry(this._participantIdRegistry),this._signaling.setProducerNotificationDataChannel(i)}),d.producerCommandDataChannel&&(this._signaling.useCommandDataChannel(!0),this._createDataChannel(this._pc,Kt.producerCommand,i=>{this._producerCommand=i,this._signaling.setProducerCommandDataChannel(i)})),d.producerScreenDataChannel&&this._createDataChannel(this._pc,Kt.producerScreenShare,i=>{this._producerScreen=i,this._producerScreen.binaryType="arraybuffer",this._createCaptureReceiver()});try{this._mediaSource.addTrackToPeerConnection(this._pc,this._observer,!1,d.serverAudioRed),this._prevConsumerSettings={},this._applyConsumerSettings()}catch(i){c.error("ServerTransport: Unable to add media source tracks",i),h.log(E.ERROR,"addTrack-single"),this.close(i);return}d.consumerScreenDataChannel&&this._createDataChannel(this._pc,Kt.consumerScreenShare,i=>{this._consumerScreen=i,this._consumerScreen.binaryType="arraybuffer";let r=this._mediaSource.getScreenTrack();r&&this._createCaptureSender(r)}),e||this._allocateConsumer(),this._setState(B.OPENED),this._startStatInterval(),this._startSettingsInterval()}_reconnect(){this.getState()!==B.OPENED&&(this._setState(B.RECONNECTING),this._closeConnection(),this._openConnection(!0))}_signalActiveParticipants(e){this._triggerEvent(F.SIGNALLED_ACTIVE_PARTICIPANTS,e)}_signalStalledParticipants(e){this._triggerEvent(F.SIGNALLED_STALLED_PARTICIPANTS,e)}_signalSpeakerChanged(e){this._triggerEvent(F.SIGNALLED_SPEAKER_CHANGED,e)}_signalNetworkStatus(e){this._triggerEvent(F.NETWORK_STATUS,e)}_updateSSRCMap(e){e&&e.sdp.split(`
12
- `).forEach(t=>{let i=`a=ssrc:([0-9]+) label:(audio|video)-((?:[ug]?[\\d]+)|(?:mix)|(?:${Be.PARTICIPANT_AGNOSTIC_TRACK_PREFIX}-[0-9]+))`,r=new RegExp(i).exec(t);r&&(this._ssrcMap[r[1]]=r[3])})}_createCaptureSender(e){!e||!d.consumerScreenDataChannel||!this._consumerScreen||!this._mediaSource.getMediaSettings().isScreenSharingEnabled||(this._captureSender&&this._removeCaptureSender(),this._captureSender=new Pt(e,this._consumerScreen))}_removeCaptureSender(){var e;(e=this._captureSender)==null||e.destroy(),this._captureSender=null}_createCaptureReceiver(){!d.producerScreenDataChannel||!this._producerScreen||!this._participantIdRegistry||(this._captureReceiver&&this._removeCaptureReceiver(),this._captureReceiver=new yt(this._producerScreen,this._participantIdRegistry,(e,t)=>{this._triggerEvent(F.REMOTE_STREAM_SECOND,e,t)},e=>{this._triggerEvent(F.REMOTE_STREAM_SECOND,e,null)}))}_removeCaptureReceiver(){var e;(e=this._captureReceiver)==null||e.destroy(),this._captureReceiver=null}_applyConsumerSettings(){let e=this._mediaSource.getMediaSettings().isScreenSharingEnabled&&!d.consumerScreenDataChannel?this._serverSettings.screenSharing:this._serverSettings.camera;if(e&&this._pc){let t=[];this._pc.getSenders().forEach(i=>{if(!i.track||i.track.kind!==ce.video)return;let r=!this._disabledSenders.has(i),n=e.maxDimension!==0;if(r&&!n){c.log("Disabling video upload"),this._disabledSenders.add(i),i.replaceTrack(y.getBlackMediaTrack()).catch(p=>{c.error("Could not disable video upload",p)});return}let s=this._mediaSource.getSendVideoTrack();if(!r&&n&&s){c.log("Enabling video upload"),this._disabledSenders.delete(i);let p=i.track;p.enabled=s.enabled,i.replaceTrack(s).then(()=>p.stop()).catch(l=>{c.error("Could not enable video upload",l)})}v.applyVideoTrackSettings(e,i,s!=null?s:i.track,this._prevConsumerSettings,t)}),this._prevConsumerSettings=t}}_onScreenSharingStatus(e){e.track?this._createCaptureSender(e.track):this._removeCaptureSender()}_setState(e){this._state!==e&&(this._state=e,this._triggerEvent(F.STATE_CHANGED,e))}_startStatInterval(){if(this._statInterval)return;let e=()=>{if(!this._pc){this._stopStatInterval();return}this._collectStat().then(t=>{this._reportStats(t),this._detectStaleTracks(t)}).catch(()=>{}),this._statInterval=window.setTimeout(e,d.statisticsInterval)};this._statInterval=window.setTimeout(e,d.statisticsInterval)}_stopStatInterval(){this._statInterval&&(window.clearTimeout(this._statInterval),this._statInterval=null),this._statBytes={}}_startSettingsInterval(){let e=2e3;if(this._settingsInterval)return;let t=()=>{if(!this._pc){this._stopSettingsInterval();return}this._applyConsumerSettings(),this._settingsInterval=window.setTimeout(t,e)};this._settingsInterval=window.setTimeout(t,e)}_stopSettingsInterval(){this._settingsInterval&&(window.clearTimeout(this._settingsInterval),this._settingsInterval=null)}_collectStat(){return o(this,null,function*(){if(!this._pc)return Promise.reject();let e=yield jt(this._pc,this._lastStat,this._ssrcMap);return this._lastStat=e,e})}_reportStats(e){this._triggerEvent(F.REMOTE_DATA_STATS,{inbound:{topology:ne.SERVER,transport:e.transport,rtps:e.rtps.filter(t=>t.type==="inbound-rtp")},outbound:{topology:ne.SERVER,transport:e.transport,rtps:e.rtps.filter(t=>t.type==="outbound-rtp")}})}_detectStaleTracks(e){let t=e.rtps.find(s=>s.type==="inbound-rtp"&&s.kind==="audio"&&this._ssrcMap[s.ssrc]==="mix");if(!t)return;let i=Be.AUDIO_MIX,r=this._statBytes[i],n=!1;if(r){let s=t.bytesReceived-r.bytesReceived;s>=0&&s<=5&&(n=!0),r.stalled!==n&&this._triggerEvent(F.REMOTE_ALL_STALL,n)}this._statBytes[i]={bytesReceived:t.bytesReceived,stalled:n}}_allocateConsumer(){if(!this._signaling.ready)return;let e={estimatedPerformanceIndex:dt.getEstimatedPerformanceIndex(),audioMix:!0,consumerUpdate:!0,producerNotificationDataChannelVersion:d.producerNotificationDataChannel?7:0,producerCommandDataChannelVersion:d.producerCommandDataChannel?3:0,consumerScreenDataChannelVersion:d.consumerScreenDataChannel?1:0,producerScreenDataChannelVersion:d.producerScreenDataChannel?1:0,onDemandTracks:!0,unifiedPlan:Oe._isUnifiedPlanSupported(),singleSession:!0,videoTracksCount:d.videoTracksCount,red:d.serverAudioRed,audioShare:d.audioShareCapabilityEnabled};this._signaling.allocateConsumer(null,e)}_acceptProducer(e){return o(this,null,function*(){if(this._producerOfferIsProcessing){this._producerNextOffer=e,c.debug("[single] wait until other remote offer is processed");return}this._producerOfferIsProcessing=!0;let t=new RTCSessionDescription({type:"offer",sdp:e});if(c.debug("[single] set remote offer",{offer:t}),!this._pc)throw new Error("Interrupt allocation");this._pc.setRemoteDescription(t).catch(i=>{throw c.error("[single] unable to set remote offer",i),h.log(E.ERROR,"setRemoteDescription-single"),i}).then(()=>o(this,null,function*(){if(c.debug("[single] create local answer"),!this._pc)throw new Error("Interrupt allocation");return this.handleTracks(),this._pc.createAnswer()})).catch(i=>{throw c.error("[single] unable to create answer",i),h.log(E.ERROR,"createAnswer-single"),i}).then(i=>(i.sdp=v.patchSDP(i.sdp,!1,y.isBrokenH264(),!1,d.h264spsPpsIdrInKeyframe),i)).then(i=>o(this,null,function*(){if(c.debug("[single] set local answer",{answer:i}),!this._pc)throw new Error("Interrupt allocation");return yield this._pc.setLocalDescription(i),i})).catch(i=>{throw c.error("[single] unable to set local answer",i),h.log(E.ERROR,"setLocalDescription-single"),i}).then(i=>o(this,null,function*(){c.debug("[single] transmit local answer",{answer:i}),this._updateSSRCMap(t),yield this._signaling.acceptProducer(i,Object.keys(this._ssrcMap)),c.debug("[single] remote offer has been processed")})).catch(i=>{c.warn("[single] unable to send local answer",i),h.log(E.ERROR,"acceptProducer")}).then(()=>o(this,null,function*(){if(this._producerOfferIsProcessing=!1,this._producerNextOffer){c.debug("[single] there is other unprocessed remote offer, process it");let i=this._producerNextOffer;return this._producerNextOffer=null,this._acceptProducer(i)}})).catch(i=>this.close(i))})}handleTracks(){this._newAudioShareTrack&&(this._pc.getTransceivers().forEach(e=>{e.mid.endsWith("s")&&(e.sender.track!==null&&c.warn("Unexpected track assigned to audioshare"),e.direction="sendonly",e.sender.replaceTrack(this._newAudioShareTrack).catch(t=>{c.error("ServerTransport: Unable to replace track",t),h.log(E.ERROR,"replaceTrack-single")}),this._newAudioShareTrack=null)}),this._newAudioShareTrack&&c.warn("Cannot find audioshare transceiver"))}_onSignalingNotification(e){return o(this,null,function*(){if(!!this._isOpen)switch(e.notification){case k.PRODUCER_UPDATED:yield this._onProducerUpdated(e);break;case k.REALLOC_CON:this._reconnect();break;case k.AUDIO_ACTIVITY:this._signalActiveParticipants(e.activeParticipants);break;case k.SPEAKER_CHANGED:this._signalSpeakerChanged(e.speaker);break;case k.STALLED_ACTIVITY:this._signalStalledParticipants(e.stalledParticipants);break;case k.NETWORK_STATUS:this._signalNetworkStatus(e.statuses);break}})}_onProducerUpdated(e){return o(this,null,function*(){this._producerSessionId&&this._producerSessionId!==e.sessionId&&this._reconnect(),d.breakVideoPayloadTypes&&(c.log("test mode enabled, video switched off"),this._signaling.requestTestMode("breakVideoPayloadTypes",null)),this._producerSessionId=e.sessionId,yield this._acceptProducer(e.description)})}_onAddTrack(e,t){c.debug("[single] remote track (added)",{track:t.track});let i=t.streams[0];i?(i.onremovetrack||(i.onremovetrack=n=>{this._triggerEvent(F.REMOTE_TRACK_REMOVED,i.id,i,n.track)}),i.getTracks().find(n=>n.id===t.track.id)||i.addTrack(t.track),this._rtpReceiversByStreamId[i.id]=t.receiver,this._triggerEvent(F.REMOTE_TRACK_ADDED,i.id,i,t.track)):c.error("[single] unable to get media stream from track event")}static _onSignalingStateChange(e,t){c.debug("[single] signaling state changed",{state:e.signalingState},t)}_onConnectionStateChange(e,t){switch(c.debug("[single] connection state changed",{state:e.connectionState},t),h.log(E.ICE_CONNECTION_STATE,e.connectionState),e.connectionState){case"failed":this._reconnectionPrevented?this.close(new Error("Ice connection failed")):this._reconnect();break;case"connecting":let i=this.getState();i===B.IDLE||i===B.OPENED?this._setState(B.CONNECTING):e.iceConnectionState==="checking"&&this._setState(B.RECONNECTING);break;case"disconnected":this._reconnectionPrevented?this.close(new Error("Ice connection disconnected")):this._setState(B.RECONNECTING);break;case"connected":this._setState(B.CONNECTED),v.getPeerConnectionHostInfo(e).then(r=>{r&&h.log(E.ICE_CONNECTION_TYPE,r.type)});break}}_onReplacedTrack(e,t){if(this._pc){d.consumerScreenDataChannel&&t&&(e=t);let i=!1;this._pc.getSenders().forEach(r=>{r.track&&r.track.kind===e.kind&&!this._disabledSenders.has(r)&&r.track.contentHint===e.contentHint&&(r.track.enabled=e.enabled,r.replaceTrack(e).catch(n=>{c.error("ServerTransport: Unable to replace track",n),h.log(E.ERROR,"replaceTrack-single")}),i=!0)}),!i&&e.kind===ce.audio&&e.contentHint==="music"&&(this._newAudioShareTrack=e)}this._applyConsumerSettings()}static _isUnifiedPlanSupported(){let e=y.baseChromeVersion();return e?d.isUnifiedPlanSupported("Chrome",e):d.isUnifiedPlanSupported(y.browserName(),Number(y.browserVersion()))}getStreamWaitingTimeMs(e,t){if(!this._pc)return h.log(E.PAT_WAITING_TIME_ERROR,"noConnection"),c.error("Cannot get stream waiting time, peer connection is not initialized"),0;let i=this._rtpReceiversByStreamId[e];if(!i)return h.log(E.PAT_WAITING_TIME_ERROR,"noReceiver"),c.error(`Cannot get stream waiting time, cannot find RTP receiver by stream ID: ${e}`),0;let r=i.getSynchronizationSources();if(!r||!r.length)return c.log(`Cannot get stream waiting time, ${e} receiver has no synchronization sources`),0;let s=r[0].rtpTimestamp;if(!Number.isInteger(s))return h.log(E.PAT_WAITING_TIME_ERROR,"timestampNotInteger"),c.error(`Cannot get stream waiting time, ${e} receiver's RTP timestamp is not an integer: ${s}`),0;let p=t-s&qn,l=Math.ceil(p/Kn);return Math.min(100,Math.max(0,l))}};var F=(x=>(x.REMOTE_TRACK_ADDED="REMOTE_TRACK_ADDED",x.REMOTE_TRACK_REMOVED="REMOTE_TRACK_REMOVED",x.REMOTE_STREAM_SECOND="REMOTE_STREAM_SECOND",x.REMOTE_ALL_STALL="REMOTE_ALL_STALL",x.REMOTE_DATA_STATS="REMOTE_DATA_STATS",x.STATE_CHANGED="STATE_CHANGED",x.LOCAL_STATE_CHANGED="LOCAL_STATE_CHANGED",x.SIGNALLED_ACTIVE_PARTICIPANTS="SIGNALLED_ACTIVE_PARTICIPANTS",x.SIGNALLED_SPEAKER_CHANGED="SIGNALLED_SPEAKER_CHANGED",x.SIGNALLED_STALLED_PARTICIPANTS="SIGNALLED_STALLED_PARTICIPANTS",x.TOPOLOGY_CHANGED="TOPOLOGY_CHANGED",x.NETWORK_STATUS="NETWORK_STATUS",x.PEER_CONNECTION_CLOSED="PEER_CONNECTION_CLOSED",x))(F||{}),B=(p=>(p.IDLE="IDLE",p.OPENED="OPENED",p.CONNECTING="CONNECTING",p.RECONNECTING="RECONNECTING",p.CONNECTED="CONNECTED",p.CLOSED="CLOSED",p.FAILED="FAILED",p))(B||{}),ne=(t=>(t.DIRECT="DIRECT",t.SERVER="SERVER",t))(ne||{}),nr=class extends ee{constructor(e,t,i,r){super();this._allocated=[];this._opened=[];this._directTransport=null;this._serverTransport=null;this._dtListeners=[];this._stListeners=[];this._states={};this._localState="IDLE";this._signaling=t,this._mediaSource=i,this._topology=e,this._serverSettings=r,this.subscribe(this._signaling,Te.NOTIFICATION,this._onSignalingNotification.bind(this)),e==="SERVER"&&(this._serverTransport=this._createServerTransport())}updateSettings(e){c.log("Update transport settings",e),this._serverSettings=e,this._directTransport&&this._directTransport.updateSettings(e),this._serverTransport&&this._serverTransport.updateSettings(e)}updateStatisticsInterval(){this._directTransport&&this._directTransport.updateStatisticsInterval(),this._serverTransport&&this._serverTransport.updateStatisticsInterval()}allocate(e,t=!1){if(this._allocated.indexOf(e)!==-1){c.warn(`The participant [${e}] has already had allocated transport`);return}this._allocated.push(e),this._topology==="DIRECT"&&!this._directTransport&&(this._directTransport=this._createDirectTransport(e,t)),this._topology==="SERVER"&&!this._serverTransport&&(this._serverTransport=this._createServerTransport())}open(e,t=null,i=!1,r=!1){let n=r;for(let s of e){if(this._opened.indexOf(s)!==-1){c.warn(`The participant [${s}] has already had opened transport`);continue}if(this._allocated.indexOf(s)===-1){c.warn(`The participant [${s}] has no allocated transport`);continue}this._opened.push(s),n=!0}!n||(this._topology==="DIRECT"&&this._directTransport&&this._directTransport.open(t),this._topology==="SERVER"&&this._serverTransport&&(this._serverTransport.open(i),this._setStates(e,this._serverTransport.getState()),this._setLocalState(this._serverTransport.getState())),c.debug("The transport has been opened",e))}close(e){var r;let t=this._allocated.indexOf(e),i=this._opened.indexOf(e);t<0&&c.warn(`The participant [${e}] transport has already deallocated`),this._topology==="DIRECT"&&this._directTransport&&(this._directTransport.close(),this._directTransport=null),this._topology==="SERVER"&&((r=this._serverTransport)==null||r.removeParticipant(e),this._setState(e,"CLOSED")),i>=0&&this._opened.splice(i,1),t>=0&&this._allocated.splice(t,1)}destroy(){this.unsubscribe(),this._dtListeners&&this._dtListeners.forEach(e=>{e.dispose()}),this._stListeners&&this._stListeners.forEach(e=>{e.dispose()}),this._directTransport&&(this._directTransport.close(),this._directTransport=null),this._serverTransport&&(this._serverTransport.close(),this._serverTransport=null),this._allocated=[],this._opened=[]}getTopology(){return this._topology}isAllocated(e){return this._allocated.indexOf(e)>=0}allocated(){return this._allocated.slice()}opened(){return this._opened.slice()}getState(){var e,t;return this._topology==="SERVER"?(e=this._serverTransport)==null?void 0:e.getState():(t=this._directTransport)==null?void 0:t.getState()}_setStates(e,t){let i=e.filter(r=>this._states[r]!==t?(this._states[r]=t,!0):!1);i.length&&this._triggerEvent("STATE_CHANGED",i,t)}_setState(e,t){this._states[e]!==t&&(this._states[e]=t,this._triggerEvent("STATE_CHANGED",[e],t))}_setLocalState(e){this._localState!==e&&(this._localState=e,this._triggerEvent("LOCAL_STATE_CHANGED",e))}_onSignalingNotification(e){if(e.notification===k.TOPOLOGY_CHANGED)return this._onTopologyChanged(e)}_onTopologyChanged(e){var t;if(e.topology!==this._topology){if(c.log(`Topology changed ${this._topology} -> ${e.topology}`),h.log(E.TOPOLOGY_CHANGE_REQUESTED,e.topology),this._topology=e.topology,this._topology==="SERVER"&&(this._serverTransport?this._serverTransport.allowRestart():(this._serverTransport=this._createServerTransport(),this._opened.length>0&&((t=this._directTransport)==null||t.preventRestart(),this._serverTransport.open()))),this._topology==="DIRECT"){let i=e.offerTo||[],r=e.offerToTypes||[],n=e.offerToDeviceIdxs||[],s=i.length&&r.length?v.composeParticipantId(i[0],r[0],n[0]):null;if(this._serverTransport&&this._serverTransport.preventRestart(),!this._allocated||this._allocated.length===0){c.error("Topology changed to DIRECT, but the list of allocated participants is empty");return}this._allocated.length>1&&c.warn("Topology changed to DIRECT, but the allocated participants count more then one");let p=this._allocated[0];if(this._directTransport)this._directTransport.allowRestart();else{let l=s===p;this._directTransport=this._createDirectTransport(p,l)}this._opened.indexOf(p)>=0&&this._directTransport.open()}this._triggerEvent("TOPOLOGY_CHANGED",this._topology)}}_createDirectTransport(e,t=!1){let i=new pt(e,t,this._signaling,this._mediaSource,this._serverSettings);return this._dtListeners&&this._dtListeners.length>0&&c.warn(`The list of direct listeners for the participant [${e}] is not empty`),this._dtListeners=[],this._dtListeners.push(i.addEventListener("REMOTE_TRACK_ADDED",this._onDirectRemoteTrackAdded.bind(this,e)),i.addEventListener("REMOTE_TRACK_REMOVED",this._onDirectRemoteTrackRemoved.bind(this,e)),i.addEventListener("REMOTE_DATA_STATS",this._onDirectRemoteDataStats.bind(this)),i.addEventListener("STATE_CHANGED",this._onDirectTransportChanged.bind(this,e)),i.addEventListener("NETWORK_STATUS",this._onTransportNetworkStatus.bind(this)),i.addEventListener("PEER_CONNECTION_CLOSED",this._onPeerConnectionClosed.bind(this,"DIRECT"))),i}_createServerTransport(){let e=new Oe(this._signaling,this._mediaSource,this._serverSettings);return this._stListeners&&this._stListeners.length>0&&c.warn("The list of server transport listeners is not empty"),this._stListeners=[],this._stListeners.push(e.addEventListener("REMOTE_TRACK_ADDED",this._onServerRemoteTrackAdded.bind(this)),e.addEventListener("REMOTE_TRACK_REMOVED",this._onServerRemoteTrackRemoved.bind(this)),e.addEventListener("REMOTE_ALL_STALL",this._onServerRemoteAllStall.bind(this)),e.addEventListener("REMOTE_DATA_STATS",this._onServerRemoteDataStats.bind(this)),e.addEventListener("STATE_CHANGED",this._onServerTransportChanged.bind(this)),e.addEventListener("SIGNALLED_ACTIVE_PARTICIPANTS",this._onTransportActiveParticipants.bind(this)),e.addEventListener("SIGNALLED_SPEAKER_CHANGED",this._onTransportSpeakerChanged.bind(this)),e.addEventListener("SIGNALLED_STALLED_PARTICIPANTS",this._onTransportStalledParticipants.bind(this)),e.addEventListener("NETWORK_STATUS",this._onTransportNetworkStatus.bind(this)),e.addEventListener("REMOTE_STREAM_SECOND",this._onRemoteStreamSecond.bind(this)),e.addEventListener("PEER_CONNECTION_CLOSED",this._onPeerConnectionClosed.bind(this,"SERVER"))),e}_releaseDirectTransport(e){this._directTransport&&(e&&this._directTransport.close(),this._directTransport=null),this._dtListeners&&(this._dtListeners.forEach(t=>{t.dispose()}),this._dtListeners=[])}_releaseServerTransport(e){this._serverTransport&&(e&&this._serverTransport.close(),this._serverTransport=null),this._stListeners&&(this._stListeners.forEach(t=>{t.dispose()}),this._stListeners=[])}_setLocalNoiseSuppression(e){var t;d.noiseSuppression!==e&&(d.noiseSuppression=e,(t=this._mediaSource)==null||t.updateNoiseSuppression())}_onDirectTransportChanged(e,t){if(t==="CONNECTED"&&this._topology==="DIRECT"&&this._releaseServerTransport(!0),(t==="CLOSED"||t==="FAILED")&&(this._releaseDirectTransport(!1),this._topology==="DIRECT")){let i=this._opened.indexOf(e);i>=0&&this._opened.splice(i,1);let r=this._allocated.indexOf(e);r>=0&&this._allocated.splice(r,1)}this._topology==="DIRECT"&&(this._setState(e,t),this._setLocalState(t))}_onServerTransportChanged(e){let t=this._opened.slice();e==="CONNECTED"&&this._topology==="SERVER"&&this._releaseDirectTransport(!0),(e==="CLOSED"||e==="FAILED")&&(this._releaseServerTransport(!1),this._topology==="SERVER"&&(this._allocated=[],this._opened=[])),this._topology==="SERVER"&&(this._setStates(t,e),this._setLocalState(e))}_onTransportActiveParticipants(e){this._topology==="SERVER"&&this._triggerEvent("SIGNALLED_ACTIVE_PARTICIPANTS",e)}_onTransportStalledParticipants(e){this._topology==="SERVER"&&this._triggerEvent("SIGNALLED_STALLED_PARTICIPANTS",e)}_onTransportSpeakerChanged(e){this._topology==="SERVER"&&this._triggerEvent("SIGNALLED_SPEAKER_CHANGED",e)}_onTransportNetworkStatus(e){this._triggerEvent("NETWORK_STATUS",e)}_onRemoteStreamSecond(e,t){this._triggerEvent("REMOTE_STREAM_SECOND",e,t)}_onPeerConnectionClosed(e){this._triggerEvent("PEER_CONNECTION_CLOSED",e)}_onServerRemoteAllStall(e){this._topology==="SERVER"&&this._triggerEvent("REMOTE_ALL_STALL",e)}_onServerRemoteDataStats(e){this._triggerEvent("REMOTE_DATA_STATS",e)}_onDirectRemoteTrackAdded(e,t,i){this._triggerEvent("REMOTE_TRACK_ADDED",e,t,i)}_onDirectRemoteTrackRemoved(e,t,i){this._triggerEvent("REMOTE_TRACK_REMOVED",e,t,i)}_onDirectRemoteDataStats(e){this._triggerEvent("REMOTE_DATA_STATS",e)}_onServerRemoteTrackAdded(e,t,i){this._triggerEvent("REMOTE_TRACK_ADDED",e,t,i)}_onServerRemoteTrackRemoved(e,t,i){this._triggerEvent("REMOTE_TRACK_REMOVED",e,t,i)}getStreamWaitingTimeMs(e,t){return this._topology!=="SERVER"?(h.log(E.PAT_WAITING_TIME_ERROR,"wrongTopology"),c.error(`Cannot get stream waiting time, incorrect topology: ${this._topology}`),0):this._serverTransport?this._serverTransport.getStreamWaitingTimeMs(e,t):(h.log(E.PAT_WAITING_TIME_ERROR,"noTransport"),c.error("Cannot get stream waiting time, server transport is not initialized"),0)}};var lt=(e=>(e.VOLUMES_DETECTED="VOLUMES_DETECTED",e))(lt||{}),sr=class extends ee{constructor(e){super();this._detector=null;this._interval=null;this.subscribe(e,F.REMOTE_TRACK_ADDED,this._onRemoteTrackAdded.bind(this)),this.subscribe(e,F.REMOTE_TRACK_REMOVED,this._onRemoteTrackRemoved.bind(this)),this.subscribe(e,F.SIGNALLED_ACTIVE_PARTICIPANTS,this._onSignalledActiveParticipants.bind(this)),this.subscribe(e,F.TOPOLOGY_CHANGED,this._onTopologyChanged.bind(this))}destroy(){var e;this._interval&&(window.clearTimeout(this._interval),this._interval=null),this.unsubscribe(),(e=this._detector)==null||e.destroy(),this._detector=null}_onRemoteTrackAdded(e,t,i){var r;if(i.kind===ce.audio&&((r=this._detector)==null||r.destroy(),this._detector=new Wt(e,t),!this._interval)){let n=()=>{this._collectVolumes(),this._interval=window.setTimeout(n,d.voiceParams.interval)};this._interval=window.setTimeout(n,d.voiceParams.interval)}}_onRemoteTrackRemoved(e,t,i){i.kind===ce.audio&&(!this._detector||this._detector.stream!==t||(this._detector.destroy(),this._detector=null))}_collectVolumes(){if(!this._detector)return;let e={},t=this._detector.trackId,i=this._detector.getLevel();if(t===Be.AUDIO_MIX){if(this._activeParticipants)for(let r of this._activeParticipants)e[r]=i}else e[t]=i;this._triggerEvent("VOLUMES_DETECTED",e)}_onSignalledActiveParticipants(e){this._activeParticipants=e}_onTopologyChanged(e){e===ne.DIRECT&&(this._activeParticipants=null)}};var or=(e=>(e.SPEAKER_CHANGED="SPEAKER_CHANGED",e))(or||{}),cr=class extends ee{constructor(e,t,i){super();this._speakerId=null;this._serverSideSpeakerDetection=!1;this._serverSideSpeakerDetection=i===ne.SERVER,this.subscribe(e,lt.VOLUMES_DETECTED,this._onVolumesDetected.bind(this)),this.subscribe(t,F.SIGNALLED_SPEAKER_CHANGED,this._onServerSpeakerChanged.bind(this)),this.subscribe(t,F.TOPOLOGY_CHANGED,this._onTopologyChanged.bind(this))}destroy(){this.unsubscribe()}_onVolumesDetected(e){if(this._serverSideSpeakerDetection)return;let t=0,i=null;if(Object.keys(e).forEach(r=>{let n=e[r].smoothed;n>t&&n>d.voiceParams.threshold&&(t=n,i=r)}),i&&i!==this._speakerId){let r=this._speakerId&&e.hasOwnProperty(this._speakerId)?e[this._speakerId].smoothed:0;t>r*d.voiceParams.speakerLevelMultiplier&&(this._speakerId=i,this._triggerEvent("SPEAKER_CHANGED",i))}}_onServerSpeakerChanged(e){this._serverSideSpeakerDetection&&this._triggerEvent("SPEAKER_CHANGED",e)}_onTopologyChanged(e){this._serverSideSpeakerDetection=e===ne.SERVER}};var fi=class extends ee{constructor(e,t,i){super();this._states={};this._volumes={};this._participants={};this._connectionTimeout=0;this._volumeTimeout=0;this._transport=e,this._participants=i,this.subscribe(e,F.STATE_CHANGED,this._onTransportStateChanged.bind(this)),this.subscribe(t,lt.VOLUMES_DETECTED,this._onVolumesDetected.bind(this))}destroy(){this.unsubscribe(),this._connectionTimeout&&window.clearTimeout(this._connectionTimeout),this._volumeTimeout&&window.clearTimeout(this._volumeTimeout)}onChangeRemoteMediaSettings(e,t){t.isAudioEnabled||(this._volumes[e]=1),t.isAudioEnabled&&(this._volumes[e]=0)}_onTransportStateChanged(e,t){e.forEach(i=>this._states[i]=t),t===B.OPENED&&(this._connectionTimeout||(this._connectionTimeout=window.setTimeout(this._onConnectionTimeout.bind(this),d.specListenerParams.connectionTimeout)),this._volumeTimeout||(this._volumeTimeout=window.setTimeout(this._onVolumeTimeout.bind(this),d.specListenerParams.volumeTimeout))),t===B.FAILED&&this._connectionTimeout&&(c.warn("Transport failed, send callSpecError"),h.log(E.CALL_SPEC_ERROR,`${this._transport.getTopology()}_CONNECTION_TIMEOUT`))}_onVolumesDetected(e){Object.keys(e).forEach(t=>{this._volumes[t]=Math.max(e[t].real,this._volumes[t]||0)})}_onConnectionTimeout(){let e=i=>i!==B.CONNECTED;(()=>Object.values(this._states).filter(e).length>0)()&&(c.warn("There is not connected transport, send callSpecError"),h.log(E.CALL_SPEC_ERROR,`${this._transport.getTopology()}_CONNECTION_TIMEOUT`)),this._connectionTimeout=0}_onVolumeTimeout(){let e=[];Object.keys(this._volumes).forEach(t=>{if(this._volumes[t]>0)return;let i="UNKNOWN",r=this._participants[t];r&&r.platform&&(i=r.platform),e.indexOf(i)<0&&(e.push(i),h.log(E.CALL_SPEC_ERROR,`${this._transport.getTopology()}_VOLUME_TIMEOUT_${i}`))}),e.length&&c.warn("There is silent participant, send callSpecError"),this._volumeTimeout=0}};var $n=1e3,Jn=1e4;var Yn=15,j=class extends ee{constructor(e,t,i){super();this._mediaSource=null;this._conversation=null;this._myLastRequestedLayouts={};this._state="IDLE";this._participantState=W.CALLED;this._participants={};this._transport=null;this._debugInfo=null;this._volumesDetector=null;this._speakerDetector=null;this._localVolumeDetector=null;this._specListener=null;this._activeSpeakerId=null;this._lastSignalledActiveSpeakerId=null;this._serverSettings={camera:null,screenSharing:null};this._lastStalled={};this._remoteAllStalled=!1;this._audioFix=null;this._streamByStreamId=new Map;this._streamIdByStreamDescription=new Map;this._streamWaitTimerByStreamDescription=new Map;this._sequenceNumberByStreamDescription=new Map;this._cooldownTimestampByStreamDescription=new Map;this._cooldownQueueCleanupTimer=null;h.create(e,i),this._api=e,this._signaling=t,this._onUnload=()=>{this._conversation&&this._api&&this._api.hangupConversation(this._conversation.id),h.destroy()},window.addEventListener("unload",this._onUnload),this._audioOutput=new ui,d.videoTracksCount>0&&(this._cooldownQueueCleanupTimer=window.setInterval(this._cleanupCooldownQueue.bind(this),$n))}static current(){return j._current}static hangupAfterInit(){j._activationMutex&&!j._current&&(j._delayedHangup=!0)}static id(){var e,t;return((t=(e=j._current)==null?void 0:e._conversation)==null?void 0:t.id)||null}onStart(e,t,i,r="",n=!1,s=!1,p){return o(this,null,function*(){if(j._activationMutex)throw h.log(E.ERROR,"startCall"),c.warn("Conversation: there is already running activation"),new N(D.FAILED);j._activationMutex=!0;try{this._mediaSource=this._createMediaSource(),yield this._mediaSource.request(i);let l=this._mediaSource.getMediaSettings();t===We.CHAT||e.length>1?this._logWithMediaSettings(E.OUTGOING_MULTIPARTY_CALL,l):this._logWithMediaSettings(E.OUTGOING_CALL,l);let u=yield this._startConversation(e,t,Ye.OUTGOING,i,r,n,s,p);if(!this._conversation)throw new N(D.UNKNOWN_ERROR);if(this._participantState=W.ACCEPTED,this._signaling.changeMediaSettings(l),yield this._processConnection(u),this._allocateTransport(),this._createSpeakerDetector(),this._createSpecListener(),this._signaling.readyToSend(),j._delayedHangup)throw new N(D.CANCELED);c.debug("Outgoing call",{opponentIds:e,opponentType:t,mediaOptions:i});let P=Object.values(this._participants),C;return d.batchParticipantsOnStart&&(C=v.mapSharedParticipants(P)),yield this._processConnectionSharedMovieInfo(u),f.onLocalStream(this._mediaSource.getStream(),this._mediaSource.getMediaSettings()),f.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._conversation.muteStates,C),this._onConversationParticipantListChunk(u),f.onLocalStatus(Y.WAITING),this._toggleJoinAvailability(),this._changeFeatureSet(),this._changeNeedRate(),j._current=this,this._conversation.concurrent?yield this._acceptConcurrent():d.batchParticipantsOnStart||this._setParticipantsStatus(P,Y.WAITING),this._conversation}catch(l){throw this._close(l,"Unable to start conversation"),l}finally{j._activationMutex=!1}})}onJoin(e){return o(this,null,function*(){var t;if(j._activationMutex)throw h.log(E.ERROR,"joinCall"),c.warn("Conversation: there is already running activation"),new N(D.FAILED);j._activationMutex=!0,this._state="PROCESSING";try{let i=!!((t=e.observedIds)==null?void 0:t.length);this._mediaSource=this._createMediaSource(),yield this._mediaSource.request(e.mediaOptions,!i);let r=this._mediaSource.getMediaSettings();this._logWithMediaSettings(E.JOIN_CONVERSATION,r);let n=yield this._joinConversation(e);if(!this._conversation)throw new N(D.UNKNOWN_ERROR);return this._conversation.observer=i,f.onLocalStream(this._mediaSource.getStream(),r),this._conversation.waitingHall?(c.log("In waiting hall"),j._current=this,j._activationMutex=!1,this._signaling.readyToSend(),f.onLocalStatus(Y.WAITING_HALL),this._conversation):this._onJoinPart2(n)}catch(i){throw j._activationMutex=!1,this._close(i,"Unable to join conversation"),i}})}_onJoinPart2(e){return o(this,null,function*(){c.debug("Join conversation part 2"),j._activationMutex=!0;try{if(this._participantState=W.ACCEPTED,!this._conversation||!this._mediaSource)throw new N(D.UNKNOWN_ERROR);if(this._conversation.observer||this._signaling.changeMediaSettings(this._mediaSource.getMediaSettings()),yield this._processConnection(e),this._allocateTransport(),this._createSpeakerDetector(),this._createSpecListener(),this._signaling.readyToSend(),j._delayedHangup)throw new N(D.CANCELED);let t=Object.values(this._participants),i;return d.batchParticipantsOnStart&&(i=v.mapSharedParticipants(t)),yield this._processConnectionSharedMovieInfo(e),f.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._conversation.muteStates,i),this._onConversationParticipantListChunk(e),f.onLocalStatus(Y.WAITING),this._toggleJoinAvailability(),this._changeNeedRate(),this._state="ACTIVE",this._changeFeatureSet(),j._current=this,d.batchParticipantsOnStart||this._setParticipantsStatus(t,Y.WAITING),this._openTransport(t,!1),this._conversation}catch(t){throw this._close(t,"Unable to join conversation"),t}finally{j._activationMutex=!1}})}onPush(r){return o(this,arguments,function*(e,t=X.USER,i){if(j._activationMutex)throw c.warn("Conversation: there is already running activation"),new N(D.REJECTED);j._activationMutex=!0;try{let n=yield this._prepareConversation(e,t,i);if(this._mediaSource=this._createMediaSource(),!this._conversation)throw new N(D.UNKNOWN_ERROR);if(!n.conversation.participants.find(p=>{var l;return p.state===W.CALLED&&p.id===((l=this._conversation)==null?void 0:l.userId)}))throw c.log("Push rejected (there is an active call)"),h.log(E.PUSH,"rejected"),new N(D.REJECTED);if(yield this._processConnection(n),this._allocateTransport(),this._createSpeakerDetector(),this._createSpecListener(),this._signaling.readyToSend(),h.log(E.PUSH,"accepted"),j._current=this,j._delayedHangup)throw new N(D.CANCELED);j._activationMutex=!1}catch(n){throw j._activationMutex=!1,this._close(n,"Unable to handle inbound call push"),n}})}_isInWaitingHall(e){if(!e.conversation||(e.conversation.options||[]).indexOf(Qt.WAITING_HALL)<0)return!1;let t=(e.conversation.participants||[]).find(i=>v.comparePeerId(i.peerId,e.peerId));return t&&t.restricted||!1}_acceptConcurrent(){return o(this,null,function*(){if(!this._mediaSource||!this._conversation)throw new N(D.UNKNOWN_ERROR);this._state="PROCESSING";let e=this._mediaSource.getMediaSettings();this._logWithMediaSettings(E.ACCEPT_CONCURRENT,e),c.debug("Concurrent call",{conversationId:this._conversation.id});try{yield this._signaling.acceptCall(this._mediaSource.getMediaSettings()),f.onCallAccepted(),this._state="ACTIVE",this._participantState=W.ACCEPTED,this._changeFeatureSet(),this._openTransport(Object.values(this._participants),!0)}catch(t){this._close(t,"Unable to accept concurrent call")}})}accept(e){return o(this,null,function*(){var t;if(this._state!=="IDLE")throw h.log(E.ERROR,"acceptIncoming"),c.error("Unable to accept a call - invalid state"),new Error("Unable to accept a call - invalid state");if(!this._mediaSource||!this._conversation)throw new N(D.UNKNOWN_ERROR);this._state="PROCESSING",c.debug("Accept incoming call",e);try{yield this._mediaSource.request(e);let i=this._mediaSource.getMediaSettings();this._logWithMediaSettings(E.ACCEPT_INCOMING,i),this._signaling.changeMediaSettings(i),yield this._signaling.acceptCall(i),this._participantState=W.ACCEPTED;let r=Object.values(this._participants),n;if(d.batchParticipantsOnStart&&(n=v.mapSharedParticipants(r)),f.onCallAccepted(),f.onLocalStream(this._mediaSource.getStream(),i),f.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._conversation.muteStates,n),d.useParticipantListChunk){let l=yield this._getInitialParticiapntListChunk();(t=l==null?void 0:l.participants)==null||t.forEach(u=>{let P=v.composeId(u),C=this._participants[P];C&&(C.movieShareInfos=u.movieShareInfos)}),this._onConversationParticipantListChunk({participants:l})}f.onLocalStatus(Y.WAITING),this._toggleJoinAvailability(),this._changeNeedRate();let s=bt(this._conversation.muteStates,ke.MUTE),p=bt(this._conversation.muteStates,ke.MUTE_PERMANENT);for(let l of[s,p])l.length&&(yield this._processMuteState({mediaOptions:l,stateUpdated:!0}));return this._state="ACTIVE",this._changeFeatureSet(),d.batchParticipantsOnStart||this._setParticipantsStatus(r,Y.WAITING),this._openTransport(r,!0),this._conversation}catch(i){throw this._close(i,"Unable to accept call"),i}})}decline(){return o(this,null,function*(){var e;if(this._state!=="IDLE")throw h.log(E.ERROR,"declineIncoming"),c.error("Unable to decline a call - invalid state"),new Error("Unable to decline a call - invalid state");this._state="PROCESSING",c.debug("Decline incoming call"),this._logWithMediaSettings(E.DECLINE_INCOMING,(e=this._mediaSource)==null?void 0:e.getMediaSettings()),this._participantState=W.HUNGUP,this._signaling.ready&&(yield this._signaling.hangup(D.REJECTED)),this._close(new N(D.REJECTED))})}hangup(){return o(this,null,function*(){c.debug("Hangup");let e=this._state==="ACTIVE"?D.HUNGUP:D.CANCELED;h.log(E.HANGUP,e),this._signaling.ready?(yield this._signaling.hangup(e),this._close(new N(e))):f.onHangup(new N(D.HUNGUP),this._conversation&&this._conversation.id)})}addParticipant(e,t){return o(this,null,function*(){if(!this._signaling.ready){this._close(new N(D.UNKNOWN_ERROR),"Unable to add participant");return}let i=yield this._signaling.addParticipant(e,t),r=null;i.type==="error"&&(i.error==="call-unfeasible"?r=i.status:r=D.UNKNOWN_ERROR);let n=i.participant;yield this._onAddParticipant(v.composeId(n),n,r)})}removeParticipant(e,t=!1){return o(this,null,function*(){this._signaling.ready&&(yield this._signaling.removeParticipant(e,t),this._onRemoveParticipant(e))})}setVolume(e){this._audioOutput.volume=e}updateStatisticsInterval(){this._transport&&this._transport.updateStatisticsInterval()}_openTransport(e,t){var r;if(!this._transport)return;let i=[];for(let n of e)(n.state===W.CALLED||n.state===W.ACCEPTED)&&(this._transport.isAllocated(n.id)||this._transport.allocate(n.id,t)),n.state===W.ACCEPTED&&i.push(n.id);i.length&&this._transport.open(i,null,!!((r=this._conversation)==null?void 0:r.observer))}_close(e,t){t&&c.error(t,e),c.debug("Close conversation",e),e.error?this._signaling.ready&&this._signaling.hangup(D.FAILED):h.log(E.ERROR,e.hangup),j._activationMutex=!1;let i=this._conversation&&this._conversation.id;if([D.CANCELED,D.NOT_FRIENDS,D.CALLEE_IS_OFFLINE,D.CALLER_IS_BLOCKED,D.CALLER_IS_REJECTED].indexOf(e.hangup)!==-1||e.hangup===D.REJECTED&&!e.remote){f.onHangup(e,i),this.destroy();return}if(e.hangup===D.HUNGUP&&(!e.remote||this._participantState===W.CALLED)){f.onHangup(e,i),this.destroy();return}if(e.hangup===D.MISSED&&!e.remote){f.onHangup(e,i),this.destroy();return}if(e.hangup===D.SOCKET_CLOSED&&j._current&&!this._conversation){this._cleanupSignaling(),this._cleanupMediaSource();return}if(e.hangup===D.BUSY&&!e.remote){this._cleanupSignaling(),this._cleanupMediaSource();return}this._state="CLOSE",this._participantState=W.HUNGUP,this._changeFeatureSet(),this._cleanupMediaSource(),this._cleanupParticipants(),this._cleanupParticipantAgnosticStreams(),this._cleanupTransport(),this._cleanupSpeakerDetector(),this._cleanupSpecListener(),this._cleanupSignaling(),this._api.cleanup(),h.destroy(),this._conversation=null,this._myLastRequestedLayouts={},j._current=null,j._delayedHangup=!1,f.onHangup(e||new N(D.UNKNOWN_ERROR),i),this._cooldownQueueCleanupTimer!==null&&(window.clearInterval(this._cooldownQueueCleanupTimer),this._cooldownQueueCleanupTimer=null)}destroy(){let e=this._conversation&&this._conversation.id;c.debug("Destroy conversation",{conversationId:e}),this._cleanupMediaSource(),this._cleanupParticipants(),this._cleanupParticipantAgnosticStreams(),this._cleanupTransport(),this._cleanupSpeakerDetector(),this._cleanupSpecListener(),this._cleanupSignaling(),this._api.cleanup(),this._cleanupListeners(),h.destroy(),this._conversation=null,this._myLastRequestedLayouts={},j._current=null,j._delayedHangup=!1,this._cooldownQueueCleanupTimer!==null&&(window.clearInterval(this._cooldownQueueCleanupTimer),this._cooldownQueueCleanupTimer=null)}_getConversationParams(e){return o(this,null,function*(){let t=yield this._api.getConversationParams(e);c.debug("Api.getConversationParams",t);let i=[],{turn_server:r,stun_server:n}=t;if(n&&i.push(n),r){let s=r.urls.filter((p,l,u)=>u.indexOf(p)===l);s.push(`${s[s.length-1]}?transport=tcp`),i.push({urls:s,username:r.username,credential:r.credential})}return d.iceServers=i,d.wssBase=t.endpoint,d.wssToken=t.token,t.client_type&&(d.clientType=t.client_type),d.externalUserType=t.external_user_type,t})}_addGeoParamsToEndpoint(e,t){return t.isp_as_no&&(e+=`&ispAsNo=${t.isp_as_no}`),t.isp_as_org&&(e+=`&ispAsOrg=${t.isp_as_org}`),t.loc_cc&&(e+=`&locCc=${t.loc_cc}`),t.loc_reg&&(e+=`&locReg=${t.loc_reg}`),e}_startConversation(e,t,i,r,n="",s=!1,p=!1,l){return o(this,null,function*(){let u=v.uuid();c.debug("Conversation: start",{conversationId:u,opponentIds:e,opponentType:t,direction:i});let P=r.includes(oe.VIDEO),C=yield this._api.startConversation(u,e,t,P,n,s,p,{onlyAdminCanShareMovie:l});c.debug("Api.startConversation",C);let O=yield this._getConversationParams(C.id);C.endpoint=this._addGeoParamsToEndpoint(C.endpoint,O);let x=yield this._connectSignaling(je.START,C);return yield this._setConversation(C,x,i),x})}_joinConversation(e){return o(this,null,function*(){let{conversationId:t,mediaOptions:i,chatId:r,joinLink:n,observedIds:s,payload:p}=e;c.debug("Conversation: join",{conversationId:t,joinLink:n,observedIds:s});let l=i.includes(oe.VIDEO),u;if(t)u=yield this._api.joinConversation(t,l,r);else if(n)u=yield this._api.joinConversationByLink(n,l,s,p);else throw new N(D.UNKNOWN_ERROR);c.debug("Api.joinConversation",u),yield this._getConversationParams(u.id);let P=yield this._connectSignaling(je.JOIN,u);return yield this._setConversation(u,P,Ye.JOINING),P})}_prepareConversation(r){return o(this,arguments,function*(e,t=X.USER,i){c.debug("Conversation: push",{conversationId:e,type:t,peerId:i});let n=this._api.getUserId();if(!n)throw new N(D.UNKNOWN_ERROR);let s=yield this._getConversationParams(e),p=s.device_idx||0,l=`${d.wssBase}?userId=${n}&entityType=${t}&deviceIdx=${p}&conversationId=${e}&token=${d.wssToken}`;l=this._addGeoParamsToEndpoint(l,s);let u={id:e,peerId:i,endpoint:l,is_concurrent:!1,p2p_forbidden:!1,device_idx:p},P=yield this._connectSignaling(je.ACCEPT,u);return j._current&&(j._current._participantState===W.ACCEPTED||j._current._participantState===W.CALLED)?(c.log("Push rejected (busy)"),h.log(E.PUSH,"busy"),this._signaling.ready&&this._signaling.hangup(D.BUSY),Promise.reject({hangup:D.BUSY})):(j._current&&(j._current.destroy(),j._current=null),yield this._setConversation(u,P,Ye.INCOMING,t),P)})}_createParticipant(e){return o(this,null,function*(){var i;let t=Object.assign({id:null,externalId:null,mediaSettings:ve(),participantState:{},state:W.CALLED,status:null,remoteStream:null,mediaSource:null,platform:null,clientType:null,roles:[],networkRating:1,lastRequestedLayouts:{},muteStates:{},unmuteOptions:[],observedIds:[]},e);if(e.externalId){let r=v.decomposeParticipantId(t.id).compositeUserId;this._api.cacheExternalId(r,e.externalId)}else t.externalId=yield this._getParticipantId(t.id);return((i=t.observedIds)==null?void 0:i.length)&&(t.externalId.observer=!0),this._setParticipantMarkers(t,t.markers),t})}_getParticipantId(e){return o(this,null,function*(){try{let t=v.decomposeParticipantId(e),i=yield this._api.userId(t.compositeUserId);return Object.assign({deviceIdx:t.deviceIdx},i)}catch(t){throw this._close(new N(D.NETWORK_ERROR),t),t}})}_setConversation(n,s,p){return o(this,arguments,function*(e,t,i,r=X.USER){yield this._prepareParticipants(t.conversation.participants);let l=this._api.getUserId(),u=e.device_idx||0;if(!l){let O=(t.conversation.participants||[]).find(x=>v.comparePeerId(x.peerId,t.peerId));if(!O)throw new N(D.UNKNOWN_ERROR);l=Number(O.id),O.idType&&(r=O.idType),O.deviceIdx&&(u=O.deviceIdx),this._api.setUserId(l)}let P=v.composeParticipantId(l,r,u),C=yield this._getParticipantId(P);this._conversation={userId:l,compositeUserId:P,externalId:C,acceptTime:t.conversation.acceptTime,features:t.conversation.features||[],featuresPerRole:t.conversation.featuresPerRole,id:t.conversation.id||e.id,participantsLimit:t.conversation.participantsLimit||30,topology:t.conversation.topology||ne.DIRECT,direction:i,concurrent:t.isConcurrent||e.is_concurrent||!1,needRate:!1,chatId:t.conversation.multichatId,roles:[],recordInfo:null,joinLink:e.join_link,pinnedParticipantId:null,mediaModifiers:t.mediaModifiers,options:[],muteStates:{},unmuteOptions:[],networkRating:1,waitingHall:this._isInWaitingHall(t),observer:!1},this._signaling.setConversationId(e.id),e.p2p_forbidden&&(d.forceRelayPolicy=e.p2p_forbidden),h.log(E.RELAY_POLICY,d.forceRelayPolicy?"1":"0"),this._changeFeatureSet(),this._logDevices()})}_updateConversation(e){if(!this._conversation)throw new N(D.UNKNOWN_ERROR);this._conversation.acceptTime=e.conversation.acceptTime,this._conversation.features=e.conversation.features||[],this._conversation.featuresPerRole=e.conversation.featuresPerRole,this._conversation.participantsLimit=e.conversation.participantsLimit||30,this._conversation.topology=e.conversation.topology||ne.DIRECT,this._conversation.concurrent=e.isConcurrent||!1,this._conversation.chatId=e.conversation.multichatId,this._conversation.mediaModifiers=e.mediaModifiers,this._conversation.waitingHall=!1}_createMediaSource(){let e=new Ni;return this.subscribe(e,Ae.SOURCE_CHANGED,this._onLocalMediaStreamChanged.bind(this)),this.subscribe(e,Ae.SCREEN_STATUS,this._onScreenSharingStatus.bind(this)),this._audioFix=new Gt(e),e}_connectSignaling(e,t){return o(this,null,function*(){return this._signaling.setEndpoint(t.endpoint),this.subscribe(this._signaling,Te.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._signaling,Te.FAILED,this._onSignalingFailed.bind(this)),this.subscribe(this._signaling,Te.RECONNECT,this._onSignalingReconnect.bind(this)),this._signaling.connect(e,t)})}_processConnection(e){return o(this,null,function*(){yield this._registerConnectionParticipants(e),this._processConnectionData(e)})}_prepareParticipants(e){return o(this,null,function*(){let t=e.map(i=>i.id);t.length&&(yield this._api.prepareUserIds(t))})}_onConversationParticipantListChunk(e){let t=e.participants;t&&f.onConversationParticipantListChunk(this._participantListChunkToExternalChunk(this._createParticipantListChunk(t)))}_createParticipantListChunk(e){return Ue(Ue({},{participants:[],countBefore:0,countAfter:0,markerFound:!1}),e)}_participantListChunkToExternalChunk(e){let t=v.mapSharedParticipants(e.participants.map(i=>{let r=v.composeId(i);return this._participants[r]}));return ht(Ue({},e),{participants:t})}_registerConnectionParticipants(e){return o(this,null,function*(){var t,i;yield this._registerParticipants(e.conversation.participants),((t=e.participants)==null?void 0:t.participants)&&(yield this._registerParticipants((i=e.participants)==null?void 0:i.participants))})}_registerParticipants(e){return o(this,null,function*(){if(!!this._conversation)for(let t of e){let i=v.composeId(t);if(this._isMe(i)){this._conversation.roles=t.roles||[],this._conversation.roles.length&&(c.debug(`Local roles changed: ${t.roles}`),f.onLocalRolesChanged(this._conversation.roles)),yield this._registerParticipantLocalMuteState(t);continue}if(t.state===W.HUNGUP||t.state===W.REJECTED){this._participants[t.id]&&this._removeParticipant(this._participants[t.id],D.HUNGUP);continue}this._registerParticipantInCache(yield this._createParticipant({id:i,externalId:t.externalId&&fe.fromSignaling(t.externalId,t.deviceIdx||0),mediaSettings:ve(t.mediaSettings),participantState:v.mapParticipantState(t),state:t.state,roles:t.roles||[],status:d.batchParticipantsOnStart?Y.WAITING:null,muteStates:t.muteStates||{},unmuteOptions:t.unmuteOptions||[],observedIds:t.observedIds||[],markers:this._denormalizeMarkers(i,t.markers),movieShareInfos:t.movieShareInfos})),t.roles&&t.roles.length&&(c.debug(`Roles for participant [${i}] changed: ${t.roles}`),f.onRolesChanged(this._participants[i].externalId,t.roles))}})}_registerParticipantLocalMuteState(e){return o(this,null,function*(){if(!e.muteStates)return Promise.resolve();let t=bt(e.muteStates,ke.MUTE),i=bt(e.muteStates,ke.MUTE_PERMANENT);for(let r of[t,i])!r.length||(yield this._onMuteParticipant({muteStates:e.muteStates,unmuteOptions:e.unmuteOptions,mediaOptions:r,stateUpdated:!0}))})}_getStatusByTransportState(e){let t;return e===B.CONNECTED?t=Y.CONNECTED:e===B.CONNECTING||e===B.OPENED?t=Y.CONNECTING:e===B.RECONNECTING&&(t=Y.RECONNECT),t}_registerParticipantInCache(e){return this._participants[e.id]=e}_getExistedParticipantByIdOrCreate(e){return o(this,null,function*(){return this._participants[e]||this._createParticipant({id:e})})}_getExternalIdByParticipantId(e){return o(this,null,function*(){var t;return d.useParticipantListChunk?(yield this._getExistedParticipantByIdOrCreate(e)).externalId:(t=this._participants[e])==null?void 0:t.externalId})}_registerParticipantAndSetMarkersIfChunkEnabled(e,t){return o(this,null,function*(){if(d.useParticipantListChunk){let i=this._registerParticipantInCache(yield this._getExistedParticipantByIdOrCreate(e));return this._setParticipantMarkers(i,t),i}return this._participants[e]})}_warnParticipantNotInConversation(e){c.warn(`Participant [${e}] isn't in conversation`)}_setParticipantMarkers(e,t){return e.markers=this._denormalizeMarkers(e.id,t),e}_denormalizeMarkers(e,t){if(!t)return null;let i=Object.values(t).find(r=>"ts"in r&&"rank"in r);return Object.entries(t).reduce((r,[n,s])=>(r[n]=ht(Ue(Ue({},i),s),{id:e}),r),{})}_processConnectionData(e){return o(this,null,function*(){v.isEmptyObject(this._conversation.muteStates)&&e.conversation.muteStates&&this._onMuteParticipant({muteStates:e.conversation.muteStates,unmuteOptions:e.unmuteOptions,mediaOptions:Object.keys(e.conversation.muteStates),muteAll:!0,stateUpdated:!0}),e.conversation.pinnedParticipantId&&(yield this._onPinParticipant(e.conversation.pinnedParticipantId)),this._onRecordInfo(e.conversation.recordInfo),this._onOptionsChanged(e.conversation.options),e.chatRoom&&e.chatRoom.totalCount&&this._onChatRoomUpdated(Yt.ATTENDEE,e.chatRoom.totalCount,e.chatRoom.firstParticipants)})}_allocateTransport(){if(!this._conversation||!this._mediaSource)return;this._transport=new nr(this._conversation.topology,this._signaling,this._mediaSource,this._serverSettings),this._debugInfo=new mi,this.subscribe(this._transport,F.STATE_CHANGED,this._onTransportStateChanged.bind(this)),this.subscribe(this._transport,F.LOCAL_STATE_CHANGED,this._onTransportLocalStateChanged.bind(this)),this.subscribe(this._transport,F.REMOTE_TRACK_ADDED,this._onRemoteTrackAdded.bind(this)),this.subscribe(this._transport,F.REMOTE_TRACK_REMOVED,this._onRemoteTrackRemoved.bind(this)),this.subscribe(this._transport,F.REMOTE_ALL_STALL,this._onRemoteAllStall.bind(this)),this.subscribe(this._transport,F.REMOTE_DATA_STATS,this._onRemoteDataStats.bind(this)),this.subscribe(this._transport,F.SIGNALLED_STALLED_PARTICIPANTS,this._onRemoteSignalledStall.bind(this)),this.subscribe(this._transport,F.TOPOLOGY_CHANGED,this._onTopologyChanged.bind(this)),this.subscribe(this._transport,F.NETWORK_STATUS,this._onNetworkStatus.bind(this)),this.subscribe(this._transport,F.REMOTE_STREAM_SECOND,this._onRemoteStreamSecond.bind(this)),this.subscribe(this._transport,F.PEER_CONNECTION_CLOSED,this._onPeerConnectionClosed.bind(this));let e=this._conversation.direction===Ye.OUTGOING&&!this._conversation.concurrent;for(let t of Object.values(this._participants))(t.state===W.ACCEPTED||t.state===W.CALLED)&&this._transport.allocate(t.id,e)}_createSpeakerDetector(){this._transport&&(this._volumesDetector=new sr(this._transport),this.subscribe(this._volumesDetector,lt.VOLUMES_DETECTED,this._onVolumesDetected.bind(this)),this._speakerDetector=new cr(this._volumesDetector,this._transport,this._conversation.topology),this.subscribe(this._speakerDetector,or.SPEAKER_CHANGED,this._onSpeakerChanged.bind(this)),this._localVolumeDetector=new hi(this._mediaSource))}_createSpecListener(){this._transport&&this._volumesDetector&&(this._specListener=new fi(this._transport,this._volumesDetector,this._participants))}_logDevices(){let e=y.getCameras().length,t=y.getMicrophones().length;c.debug("Cameras: "+e+(y.hasCameraPermission()?"✔":"✖")+", Microphones: "+t+(y.hasMicrophonePermission()?"✔":"✖")),h.log(E.DEVICES,`${e}_${t}`)}_logWithMediaSettings(e,t){h.log(e,[(t==null?void 0:t.isAudioEnabled)&&"audio",(t==null?void 0:t.isVideoEnabled)&&"video"].filter(Boolean).join("_"))}_removeParticipant(e,t){var i;e.state===W.CALLED||e.state===W.ACCEPTED||this._state==="CLOSE"||(e.id===this._lastSignalledActiveSpeakerId&&(this._lastSignalledActiveSpeakerId=null),!!this._participants[e.id]&&(t===D.HUNGUP?this._setParticipantsStatus([e],Y.HANGUP):this._setParticipantsStatus([e],Y.ERROR,t),(i=e.mediaSource)==null||i.disconnect(),this._conversation&&this._conversation.pinnedParticipantId===e.id&&(this._conversation.pinnedParticipantId=null),this.updateDisplayLayout([{uid:e.externalId,mediaType:Pe.CAMERA,stopStream:!0}]),delete this._participants[e.id],f.onRemoteRemoved(e.externalId,e.markers)))}_cleanupListeners(){this.unsubscribe(),window.removeEventListener("unload",this._onUnload)}_cleanupMediaSource(){this._mediaSource&&(this._mediaSource.destroy(),this._mediaSource=null)}_cleanupParticipants(){Object.values(this._participants).forEach(e=>{var t,i,r;(t=e.remoteStream)==null||t.getTracks().forEach(n=>n.stop()),(i=e.secondStream)==null||i.getTracks().forEach(n=>n.stop()),(r=e.mediaSource)==null||r.disconnect()}),this._participants={},this._audioOutput&&this._audioOutput.destroy()}_cleanupParticipantAgnosticStreams(){c.debug("cleaning up participant-agnostic streams"),this._streamByStreamId.forEach(e=>{e.getTracks().forEach(t=>{t.stop()})}),this._streamByStreamId=new Map,this._streamWaitTimerByStreamDescription.forEach(e=>{window.clearTimeout(e)}),this._streamWaitTimerByStreamDescription=new Map,this._streamIdByStreamDescription=new Map,this._sequenceNumberByStreamDescription=new Map,this._cooldownTimestampByStreamDescription=new Map}_cleanupTransport(){this._transport&&(this._transport.destroy(),this._transport=null),this._debugInfo&&(this._debugInfo=null)}_cleanupSpeakerDetector(){this._speakerDetector&&(this._speakerDetector.destroy(),this._speakerDetector=null),this._volumesDetector&&(this._volumesDetector.destroy(),this._volumesDetector=null),this._localVolumeDetector&&(this._localVolumeDetector.destroy(),this._localVolumeDetector=null)}_cleanupSpecListener(){this._specListener&&(this._specListener.destroy(),this._specListener=null)}_cleanupSignaling(){this._signaling.close(),this._signaling.cleanup()}_onAddParticipant(e,t,i){return o(this,null,function*(){c.debug(`Add new participant [${e}]`);let r=this._participants[e];if(r&&(r.state===W.ACCEPTED||r.state===W.CALLED)){c.warn(`Participant [${r.id}:${r.state}] is already in conversation`);return}r||(r=this._registerParticipantInCache(yield this._createParticipant({id:e,externalId:t.externalId&&fe.fromSignaling(t.externalId,t.deviceIdx||0),mediaSettings:ve(t.mediaSettings),state:t.state,roles:t.roles||[],muteStates:t.muteStates||{},unmuteOptions:t.unmuteOptions||[],observedIds:t.observedIds||[]}))),this._setParticipantsStatus([r],Y.WAITING),i?(r.state=W.HUNGUP,this._removeParticipant(r,i)):this._transport&&(r.state=W.CALLED,this._transport.allocate(r.id,!0),h.log(E.ADD_PARTICIPANT),this._invokeRolesChangedCallbackIfNeeded(r))})}_onRemoveParticipant(e){c.debug(`Remove participant [${e}]`);let t=[];for(let i=0;i<=Yn;i++){let r=v.compose(e,i),n=this._participants[r];n&&t.push(n)}if(!t.length){this._warnParticipantNotInConversation(e);return}if(this._transport)for(let i of t)this._transport.close(i.id);h.log(E.REMOVE_PARTICIPANT)}changeDevice(e){return o(this,null,function*(){return e==="audiooutput"?this._audioOutput.changeOutput():this._mediaSource?(e==="audioinput"&&(this._audioFix=new Gt(this._mediaSource)),this._mediaSource.changeDevice(e)):Promise.reject(ae.UNKNOWN)})}toggleScreenCapturing(e,t){return o(this,null,function*(){return this._mediaSource?this._mediaSource.toggleScreenCapturing(e,t):Promise.reject(ae.UNKNOWN)})}setVideoStream(e,t=!1){return o(this,null,function*(){if(this._mediaSource)return this._mediaSource.setVideoStream(e,t)})}setAudioStream(e){return o(this,null,function*(){if(this._mediaSource)return this._mediaSource.setAudioStream(e)})}toggleLocalVideo(e){return o(this,null,function*(){if(this._mediaSource)return h.log(E.MEDIA_STATUS,e?"video_1":"video_0"),this._mediaSource.toggleVideo(e)})}toggleLocalAudio(e){return o(this,null,function*(){if(this._mediaSource)return h.log(E.MEDIA_STATUS,e?"audio_1":"audio_0"),this._mediaSource.toggleAudio(e)})}changePriorities(e){return o(this,null,function*(){if(e.length<2||!this._signaling.ready)return;let t={},i={};for(let r of e){let n=typeof r.uid=="object"?r.uid:fe.fromId(r.uid),s=fe.toString(n);i[s]=r.priority}for(let r of Object.values(this._participants)){let n=fe.toString(r.externalId);i.hasOwnProperty(n)&&(t[r.id]=i[n])}yield this._signaling.changePriorities(t)})}changeParticipantState(e){return o(this,null,function*(){for(let[t,i]of Object.entries(e))if(t.length>5||i.length>5)throw new Error("key/value max length is 5 chars, mappings with empty values (null or empty string) are discarded");yield this._signaling.changeParticipantState(e)})}requestKeyFrame(e){return o(this,null,function*(){let t={};return t[qe(e)]={keyFrameRequested:!0},this._signaling.updateDisplayLayout(t)})}requestTestMode(e,t){return o(this,null,function*(){return this._signaling.requestTestMode(e,t)})}updateDisplayLayout(e){return o(this,null,function*(){if(e.length<1||!this._signaling.ready)return;c.log(`Update display layout [${this._signaling.getNextCommandSequenceNumber()}]`,e);let t={};for(let r of e){let n=typeof r.uid=="object"?r.uid:fe.fromId(r.uid),s=this._api.getCachedOkIdByExternalId(n);if(!s){let P=fe.toString(n);c.log(`Unknown participant external ID ${P}`);continue}let p=v.compose(s,n.deviceIdx),l=qe({participantId:p,mediaType:r.mediaType,streamName:r.streamName}),u=this._participants[p];u?u.lastRequestedLayouts[l]=r:this._isMe(p)&&(this._myLastRequestedLayouts[l]=r),Ft(r)?(this._isMe(p)&&delete this._myLastRequestedLayouts[l],this._streamIdByStreamDescription.has(l)&&!this._cooldownTimestampByStreamDescription.has(l)&&this._cooldownTimestampByStreamDescription.set(l,Date.now())):(this._cooldownTimestampByStreamDescription.delete(l),!this._streamIdByStreamDescription.has(l)&&d.videoTracksCount>0&&this._streamIdByStreamDescription.set(l,null),t[l]=r)}let i=this._cooldownTimestampByStreamDescription.keys();for(;this._streamIdByStreamDescription.size>d.videoTracksCount;){let r=i.next();if(r.done){c.error("Cannot accommodate all streaming requests: tracks available "+d.videoTracksCount+"; requested streams: "+Array.from(this._streamIdByStreamDescription.keys()));break}this._stopStreaming(r.value),t[r.value]={stopStream:!0}}yield this._sendUpdateDisplayLayout(t)})}feedback(e){return this._signaling.feedback(e)}_stopStreaming(e){if(this._cooldownTimestampByStreamDescription.delete(e),this._sequenceNumberByStreamDescription.set(e,this._signaling.getNextCommandSequenceNumber()),this._streamWaitTimerByStreamDescription.has(e)&&(c.log("Client asked to stop streaming before stream became available",e),window.clearTimeout(this._streamWaitTimerByStreamDescription.get(e)),this._streamWaitTimerByStreamDescription.delete(e)),this._streamIdByStreamDescription.get(e)){let i=Ht(e),r=this._participants[i.participantId],{externalId:n}=this._conversation,s=this._isMe(i.participantId);if(r){if(i.streamName&&(i.mediaType===Pe.STREAM||i.mediaType===Pe.MOVIE)){let p={stream:null,streamName:i.streamName,mediaType:i.mediaType};s?f.onLocalLive(n,p):f.onRemoteLive(r.externalId,p)}else s||f.onRemoteStream(r.externalId,null);h.log(E.PAT_DEALLOCATED)}else c.log(`Cannot find participant to stop streaming: ${i.participantId}`)}this._streamIdByStreamDescription.delete(e)}_sendUpdateDisplayLayout(e){return o(this,null,function*(){if(Object.keys(e).length===0)return;let t=yield this._signaling.updateDisplayLayout(e);if(!t)return;let i=[];for(let[r,n]of Object.entries(t.errorCodeByParticipantId||{})){let s=Ht(r),p=this._participants[s.participantId];if(p){let l;typeof n!="number"?(c.warn(`Unexpected error code ${n} received for participant ${s.participantId}`),l=Gr.UNKNOWN_ERROR):l=Wr(n),i.push({externalId:p.externalId,errorReason:l})}}if(i&&i.length)throw new Si("Could not allocate one or more participants",i)})}_cleanupCooldownQueue(){let e={},t=this._cooldownTimestampByStreamDescription.entries();do{let i=t.next();if(i.done)break;let r=i.value;if(r[1]+Jn>Date.now())break;let s=r[0];this._stopStreaming(s),e[s]={stopStream:!0}}while(!0);this._sendUpdateDisplayLayout(e)}_onParticipantSourcesUpdate(e){if(this._conversation){c.log("Received participant sources update notification",e);for(let t of e)this._waitForStreamIfNeeded(t)}}_onParticipantPromoted(e){return o(this,null,function*(){c.log("Promoted in waiting hall",!e.demote),e.demote?(c.log("Kicked from waiting hall"),this._close(new N(D.REMOVED))):(this._updateConversation(e),yield this._onJoinPart2(e))})}_onChatRoomUpdated(r){return o(this,arguments,function*(e,t=0,i=[]){c.log(`Chat room updated: ${e}`);let n=[],s=[];i.length&&(i.forEach(p=>{if(p.externalId){let l=Ee.fromSignaling(p.externalId);n.push(l),this._api.cacheExternalId(p.id.id,l)}else s.push(v.decomposeId(p.id.id).id)}),s.length&&!n.length&&(n=yield this._api.getExternalIdsByOkIds(s))),f.onChatRoomUpdated(e,t,n)})}_onSharedMovieUpdate(e){return o(this,null,function*(){let{externalId:t}=this._conversation,{data:i}=e;for(let r of i)if(this._isMe(r.participantId))f.onLocalLiveUpdate(t,r);else{let s=yield this._getExternalIdByParticipantId(r.participantId);s&&f.onRemoteLiveUpdate(s,r)}})}_onSharedMovieInfoStarted(e){return o(this,null,function*(){c.log(`Shared movie started data received: ${e.notification}`),yield this._processSharedMovieInfo(e.movieShareInfo)})}_processSharedMovieInfo(e){return o(this,null,function*(){var r;if(!e)return;let{externalId:t}=this._conversation;if(this._isMe(e.initiatorId))f.onLocalSharedMovieInfo(t,e);else{let n=yield this._getExternalIdByParticipantId(e.initiatorId);n&&f.onRemoteSharedMovieInfo(n,e)}this._transport.getTopology()===ne.SERVER&&this._transport.getState()===B.IDLE&&this._participantState!==W.CALLED&&this._transport.open(this._transport.allocated(),null,!!((r=this._conversation)==null?void 0:r.observer),!0)})}_processConnectionSharedMovieInfo(e){return o(this,null,function*(){let t=e.conversation.participants.find(i=>this._isMe(v.composeId(i)));t&&t.movieShareInfos&&(yield Promise.all(t.movieShareInfos.map(i=>this._processSharedMovieInfo(i))))})}_onSharedMovieInfoStopped(e){return o(this,null,function*(){c.log(`Shared movie stopped data received: ${e.notification}`);let{externalId:t}=this._conversation,{initiatorId:i,movieId:r,source:n}=e,s={initiatorId:i,movieId:r,source:n};if(this._isMe(i))f.onLocalSharedMovieStoppedInfo(t,s);else{let l=yield this._getExternalIdByParticipantId(i);l&&f.onRemoteSharedMovieStoppedInfo(l,s)}})}_onFeaturesPerRoleChanged(e){c.log(`Features per role changed: ${e.notification}`),f.onFeaturesPerRoleChanged(e.featuresPerRole)}_waitForStreamIfNeeded(e){var p,l;let t=this._matchStreamDescription(e.participantStreamDescription);if(!t||d.producerScreenDataChannel&&t.mediaType===Pe.SCREEN)return;let i=qe(t),r=this._sequenceNumberByStreamDescription.get(i);if(r&&r>e.sequenceNumber){c.warn(`Participant ${t.participantId} received outdated PAT response: sequence number ${e.sequenceNumber}; last sent sequence number for given participant is ${r}`),h.log(E.PAT_OUTDATED_RESPONSE);return}let n=e.streamId,s=e.rtpTimestamp?this._getWaitingTime(n,e.rtpTimestamp):0;if(s<=0){this._streamWaitTimerByStreamDescription.delete(i);let u=t.participantId,P=this._participants[u],{externalId:C}=this._conversation,O=this._isMe(u);if(!P&&!O){h.log(E.PAT_ERROR,"participantMissing"),c.error(`Could not find participant by ID: ${u}`);return}let x=O?C:P.externalId,H=this._streamByStreamId.get(n);if(!H){h.log(E.PAT_ERROR,"streamNotFound"),c.error(`Could not find stream by ID: ${n}`);return}h.log(E.PAT_ALLOCATED),this._streamIdByStreamDescription.set(i,n);let re=(p=e.participantStreamDescription)==null?void 0:p.mediaType;if(re===Pe.STREAM||re===Pe.MOVIE){if((l=e.participantStreamDescription)==null?void 0:l.streamName){let Se={streamName:e.participantStreamDescription.streamName,stream:H,mediaType:re};O?f.onLocalLive(x,Se):f.onRemoteLive(x,Se)}}else if(d.producerScreenTrack&&re===Pe.SCREEN)f.onRemoteScreenStream(P.externalId,H);else if(!O){let Se=(d.producerScreenTrack?null:P.secondStream)||H;f.onRemoteStream(P.externalId,Se)}}else{c.debug(`Waiting for ${s} until stream ${n} for ${i} is switched`);let u=window.setTimeout(this._waitForStreamIfNeeded.bind(this,e),s);this._streamWaitTimerByStreamDescription.set(i,u)}}_matchStreamDescription(e){if(!e)return null;if(this._streamIdByStreamDescription.has(qe(e)))return e;let t=e.participantId;if(e.mediaType){let i={participantId:t,mediaType:null};if(this._streamIdByStreamDescription.has(qe(i)))return i}else{let i={participantId:t,mediaType:Pe.CAMERA};if(this._streamIdByStreamDescription.has(qe(i)))return i;let r={participantId:t,mediaType:Pe.SCREEN};if(this._streamIdByStreamDescription.has(qe(r)))return r}return c.error("Received unrequested allocation",e),null}_getWaitingTime(e,t){if(this._transport)return this._transport.getStreamWaitingTimeMs(e,t);throw new Error("transport is not initialized")}_isCallAdmin(){return this._conversation?v.includesOneOf(this._conversation.roles,[rt.ADMIN,rt.CREATOR]):!1}_checkAdminRole(){if(!!this._conversation&&!v.includesOneOf(this._conversation.roles,[rt.ADMIN,rt.CREATOR]))throw new Error("You don't have the required permission")}grantRoles(e,t,i){return o(this,null,function*(){this._checkAdminRole(),yield this._signaling.grantRoles(e,t,i)})}muteParticipant(){return o(this,arguments,function*(e=null,t,i=[]){this._checkAdminRole(),yield this._signaling.muteParticipant(e,t,i)})}enableFeatureForRoles(e,t){return o(this,null,function*(){yield this._signaling.enableFeatureForRoles(e,t)})}pinParticipant(e,t){return o(this,null,function*(){this._checkAdminRole(),yield this._signaling.pinParticipant(e,t)})}updateMediaModifiers(e){return o(this,null,function*(){this._signaling.ready&&this._conversation&&(this._conversation.mediaModifiers=e,yield this._signaling.updateMediaModifiers(e))})}changeOptions(e){return o(this,null,function*(){if(this._signaling.ready&&this._conversation){this._checkAdminRole(),yield this._signaling.changeOptions(e);let t=Dr(this._conversation.options,e);this._onOptionsChanged(t)}})}getWaitingHall(e,t,i){return o(this,null,function*(){if(!this._signaling)return Promise.reject();let r=null;e&&(r=va(e));let n=yield this._signaling.getWaitingHall(r,t,i);if(n.error)return Promise.reject(n.message);let s=n.participants||[],p=[],l=[],u=null;return s.length&&(s.forEach(P=>{if(P.externalId){let C=Ee.fromSignaling(P.externalId);p.push(C),this._api.cacheExternalId(P.id.id,C)}else l.push(v.decomposeId(P.id.id).id)}),l.length&&!p.length&&(p=yield this._api.getExternalIdsByOkIds(l)),n.hasMore&&(u=Sa(s[s.length-1].id))),{participants:p,pageMarker:u,totalCount:n.totalCount||0}})}promoteParticipant(e,t){return o(this,null,function*(){this._signaling&&(yield this._signaling.promoteParticipant(e,t))})}chatMessage(e,t=null){return o(this,null,function*(){this._signaling.ready&&(yield this._signaling.chatMessage(e,t))})}chatHistory(e){return o(this,null,function*(){if(this._signaling.ready){let t=yield this._signaling.chatHistory(e);for(let i=t.messages.length-1;i>=0;i--){let r=t.messages[i];yield this._onChatMessage(r)}}})}customData(e,t=null){return o(this,null,function*(){this._signaling.ready&&(yield this._signaling.customData(e,t))})}createJoinLink(){return o(this,null,function*(){if(this._conversation){let t=(yield this._api.createJoinLink(this._conversation.id)).join_link;if(t)return this._conversation.joinLink=t,t}return Promise.reject()})}removeJoinLink(){return o(this,null,function*(){if(this._conversation&&(yield this._api.removeJoinLink(this._conversation.id)).success){delete this._conversation.joinLink;return}return Promise.reject()})}addMovie(r){return o(this,arguments,function*({movieId:e,gain:t,metadata:i}){let n={movieId:e};(t||t===0)&&(n.gain=t),i&&(n.metadata=i);let s=yield this._signaling.addMovie(n);if(s.error)throw new Error(s.error);return{movieId:s.movieId,streamType:s.streamType}})}updateMovie(e){return o(this,null,function*(){let t=yield this._signaling.updateMovie(e);if(t.error)throw new Error(t.error)})}removeMovie(e){return o(this,null,function*(){let t={movieId:e},i=yield this._signaling.removeMovie(t);if(i.error)throw new Error(i.error)})}startStream(e=!1,t=null,i=null,r="DIRECT_LINK",n=null){return o(this,null,function*(){let s={movieId:i,name:t,privacy:r,groupId:n,streamMovie:!e},p=yield this._signaling.startStream(s);return p.error?Promise.reject(p.message):p})}stopStream(){return o(this,null,function*(){let e=yield this._signaling.stopStream();return e.error?Promise.reject():e})}recordSetRole(e,t){return o(this,null,function*(){let i=yield this._signaling.recordSetRole(e,t);if(i.error)throw new Error(i.error)})}getStreamInfo(){return o(this,null,function*(){let e=yield this._signaling.getRecordStatus();return{movieId:e.recordMovieId,preview:e.recordMoviePreviewUrl}})}setLocalResolution(e,t,i){return o(this,null,function*(){var r;if(e<d.videoMinWidth||t<d.videoMinHeight)throw new Error("Sizes received are less than the `videoMinWidth` or `videoMinHeight`");if(i==null?void 0:i.effect){if(i.effect.width<d.videoMinWidth||i.effect.height<d.videoMinHeight)throw new Error("Sizes of effect received are less than the `videoMinWidth` or `videoMinHeight`");d.videoEffectMaxHeight=i.effect.height,d.videoEffectMaxWidth=i.effect.width}return d.videoMaxWidth=e,d.videoMaxHeight=t,(r=this._mediaSource)==null?void 0:r.setResolution(e,t)})}videoEffect(e){return o(this,null,function*(){var t;return(t=this._mediaSource)==null?void 0:t.videoEffect(e)})}getParticipants(e){return o(this,null,function*(){let t=e.externalIds.map(s=>({id:s.id,type:d.externalUserType})),i=yield this._signaling.getParticipants(t);if(i.error)throw new Error(i.error);let r=i.participants,n=this._transport.getState();return Promise.all(r.map(s=>o(this,null,function*(){var l;let p=v.composeId(s);return this._createParticipant({id:p,externalId:s.externalId&&fe.fromSignaling(s.externalId,s.deviceIdx||0),mediaSettings:ve(s.mediaSettings),participantState:v.mapParticipantState(s),state:s.state,roles:s.roles||[],status:(l=this._getStatusByTransportState(n))!=null?l:Y.WAITING,muteStates:s.muteStates||{},unmuteOptions:s.unmuteOptions||[],observedIds:s.observedIds||[],markers:this._denormalizeMarkers(p,s.markers)})}))).then(v.mapSharedParticipants)})}getParticipantListChunk(e){return o(this,null,function*(){var p;c.log("Request participant list chunk",e);let t=yield this._signaling.getParticipantListChunk(e);if(t.error)throw new Error(t.error);let i=this._createParticipantListChunk(t.chunk),r=i.participants.filter(l=>{let u=v.composeId(l);return!this._participants[u]});yield this._registerParticipants(r);let n=(p=this._transport)==null?void 0:p.getState();return i.participants.forEach(l=>{var C;let u=v.composeId(l),P=this._participants[u];P.status=(C=this._getStatusByTransportState(n))!=null?C:Y.WAITING,Object.assign(P.muteStates,l.muteStates),Object.assign(P.unmuteOptions,l.unmuteOptions)}),this._participantListChunkToExternalChunk(i)})}_getInitialParticiapntListChunk(){return o(this,null,function*(){let e=d.participantListChunkInitIndex,t=d.participantListChunkInitCount,i="GRID",r=yield this._signaling.getParticipantListChunk({listType:i,fromIdx:e,count:t});return c.debug("Get initial participant list chunk",r.chunk),r.chunk})}_onLocalMediaStreamChanged(e){return o(this,null,function*(){var t,i;!this._conversation||(c.debug("Local media stream changed",e.mediaSettings),f.onLocalStreamUpdate(e.mediaSettings,e.kind),this._signaling.ready&&!((t=this._conversation)==null?void 0:t.waitingHall)&&!((i=this._conversation)==null?void 0:i.observer)&&(yield this._signaling.changeMediaSettings(e.mediaSettings)))})}_onScreenSharingStatus(e){return o(this,null,function*(){var t,i;if(c.log("Screen sharing changed",e.track,e.mediaSettings),d.consumerScreenTrack){let r=e.track?new MediaStream([e.track]):null;f.onScreenStream(r,e.mediaSettings),this._signaling.ready&&!((t=this._conversation)==null?void 0:t.waitingHall)&&!((i=this._conversation)==null?void 0:i.observer)&&(yield this._signaling.changeMediaSettings(e.mediaSettings))}})}_changeRemoteMediaSettings(e,t){c.debug(`Remote media settings changed [${e}]`,t);let{externalId:i}=this._conversation;if(this._isMe(e)){f.onLocalMediaSettings(i,t);return}let n=this._participants[e];if(!n){this._warnParticipantNotInConversation(e);return}n.mediaSettings=t,this._state==="ACTIVE"&&f.onRemoteMediaSettings(n.externalId,t,n.markers),this._specListener&&this._specListener.onChangeRemoteMediaSettings(e,t)}_changeRemoteParticipantState(e,t){c.debug(`Remote participant state changed [${e}]`,t);let i=this._participants[e];if(!i){this._warnParticipantNotInConversation(e);return}i.participantState=t||{},this._state==="ACTIVE"&&f.onRemoteParticipantState(i.externalId,i.participantState,i.markers)}_invokeRolesChangedCallbackIfNeeded(e){this._state==="ACTIVE"&&e.roles&&e.roles.length&&(c.debug(`Roles for participant [${e.id}] changed: ${e.roles}`),f.onRolesChanged(e.externalId,e.roles))}_onSignalingNotification(e){switch(e.notification){case k.ACCEPTED_CALL:return this._onAcceptedCall(e);case k.HUNGUP:return this._onHungup(e);case k.PARTICIPANT_ADDED:return this._onAddedParticipant(e);case k.PARTICIPANT_JOINED:return this._onJoinedParticipant(e);case k.CLOSED_CONVERSATION:return this._onClosedConversation(e);case k.MEDIA_SETTINGS_CHANGED:return this._onMediaSettingsChanged(e);case k.PARTICIPANT_STATE_CHANGED:return this._onParticipantStateChanged(e);case k.RATE_CALL_DATA:return this._onNeedRate();case k.FEATURE_SET_CHANGED:return this._onFeatureSetChanged(e);case k.MULTIPARTY_CHAT_CREATED:return this._onMultipartyChatCreated(e);case k.FORCE_MEDIA_SETTINGS_CHANGE:return this._onForceMediaSettingsChange(e);case k.SETTINGS_UPDATE:return this._onSettingsUpdate(e);case k.VIDEO_QUALITY_UPDATE:return this._onVideoQualityUpdate(e);case k.REGISTERED_PEER:return this._onPeerRegistered(e);case k.SWITCH_MICRO:return this._onMicSwitched(e);case k.CHAT_MESSAGE:return this._onChatMessage(e);case k.CUSTOM_DATA:return this._onCustomData(e);case k.RECORD_STARTED:return this._onRecordInfo(e.recordInfo);case k.RECORD_STOPPED:return this._onRecordInfo(null);case k.ROLES_CHANGED:return this._onRolesChanged(e.participantId,e.roles||[]);case k.MUTE_PARTICIPANT:return this._onMuteParticipant(e);case k.PIN_PARTICIPANT:return this._onPinParticipant(e.participantId,e.unpin,e.markers);case k.OPTIONS_CHANGED:return this._onOptionsChanged(e.options||[]);case k.PARTICIPANT_SOURCES_UPDATE:return this._onParticipantSourcesUpdate(e.participantUpdateInfos);case k.PROMOTE_PARTICIPANT:return this._onParticipantPromoted(e);case k.CHAT_ROOM_UPDATED:return this._onChatRoomUpdated(e.eventType,e.totalCount,e.firstParticipants);case k.JOIN_LINK_CHANGED:return this._onJoinLinkChanged(e);case k.FEEDBACK:return this._onFeedback(e);case k.MOVIE_UPDATE_NOTIFICATION:return this._onSharedMovieUpdate(e);case k.MOVIE_SHARE_STARTED:return this._onSharedMovieInfoStarted(e);case k.MOVIE_SHARE_STOPPED:return this._onSharedMovieInfoStopped(e);case k.FEATURES_PER_ROLE_CHANGED:return this._onFeaturesPerRoleChanged(e)}}_onSignalingReconnect(e){return o(this,null,function*(){if(!this._conversation)return;e.conversation.acceptTime&&(this._conversation.acceptTime=e.conversation.acceptTime),e.conversation.participantsLimit&&(this._conversation.participantsLimit=e.conversation.participantsLimit),e.conversation.features&&(this._conversation.features=e.conversation.features,this._conversation.featuresPerRole=e.conversation.featuresPerRole,this._changeFeatureSet()),e.conversation.pinnedParticipantId!==this._conversation.pinnedParticipantId&&(e.conversation.pinnedParticipantId?yield this._onPinParticipant(e.conversation.pinnedParticipantId,!1):this._conversation.pinnedParticipantId&&(yield this._onPinParticipant(this._conversation.pinnedParticipantId,!0))),e.conversation.state;let t=null;if(e.conversation.participants){let i=Object.keys(this._participants),r=[];for(let n of e.conversation.participants){let s=v.composeId(n),p=n.roles||[];if(this._isMe(s)){t=ve(n.mediaSettings),Ot(this._conversation.roles,p)||this._onRolesChanged(s,p);continue}r.push(s);let l=this._participants[s];if(!l)yield this._onJoinedParticipant({participantId:n.id,participant:n,mediaSettings:n.mediaSettings});else{let u=ve(n.mediaSettings);Xr(u,l.mediaSettings)||this._changeRemoteMediaSettings(s,u);let P=v.mapParticipantState(n),C=l.participantState;v.isEqualParticipantState(P,C)||this._changeRemoteParticipantState(s,P),Ot(p,l.roles)||this._onRolesChanged(l.id,p)}}for(let n of i)r.indexOf(n)<0&&this._removeParticipant(this._participants[n],D.HUNGUP)}this._onMuteParticipant({muteStates:e.conversation.muteStates,unmuteOptions:e.unmuteOptions,mediaOptions:[]},t),this._onRecordInfo(e.conversation.recordInfo),this._onOptionsChanged(e.conversation.options)})}_onSignalingFailed(e){c.error("Signaling failed",e),this._close(e)}_onAcceptedCall(e){return o(this,null,function*(){let t=v.composeMessageId(e),i=v.getPeerIdString(e.peerId);if(c.debug(`Participant accepted call [${t}]`),this._conversation&&this._isMe(t)){this._close(new N(D.MISSED),"Call accepted on other device");return}let r=this._participants[t];r||(r=this._registerParticipantInCache(yield this._createParticipant({id:t,mediaSettings:ve(e.mediaSettings)}))),r.state=W.ACCEPTED,r.mediaSettings=ve(e.mediaSettings),this._logWithMediaSettings(E.ACCEPTED_OUTGOING,r.mediaSettings),this._conversation&&this._conversation.direction===Ye.OUTGOING&&(this._state==="IDLE"||this._state==="PROCESSING")&&(this._state="ACTIVE",this._changeFeatureSet()),this._state==="ACTIVE"&&this._transport&&this._transport.open([r.id],i),this._changeRemoteMediaSettings(t,r.mediaSettings),this._changeRemoteParticipantState(t)})}_onHungup(e){return o(this,null,function*(){c.debug(`Participant hungup [${e.participantId}]`,{reason:e.reason});let t=v.composeMessageId(e);if(this._conversation&&this._isMe(t)){this._close(new N(e.reason,{remote:!0}));return}yield this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers);let i=this._participants[t];if(!i){this._warnParticipantNotInConversation(t);return}this._transport&&this._transport.close(t),i.state=e.reason===D.REJECTED?W.REJECTED:W.HUNGUP,this._state!=="CLOSE"&&this._removeParticipant(i,D.HUNGUP)})}_onAddedParticipant(e){return o(this,null,function*(){var r,n;c.debug(`Participant added [${e.participantId}]`);let t=v.composeMessageId(e),i=this._participants[t];if(i&&i.state!==W.HUNGUP&&i.state!==W.REJECTED){c.debug(`Participant [${t}] is already in conversation and is active`);return}i||(i=this._registerParticipantInCache(yield this._createParticipant({id:t,externalId:e.participant.externalId&&fe.fromSignaling(e.participant.externalId,e.participant.deviceIdx||0),mediaSettings:ve(e.participant.mediaSettings),state:e.participant.state,participantState:v.mapParticipantState(e.participant),roles:e.participant.roles||[],muteStates:e.participant.muteStates||{},unmuteOptions:e.participant.unmuteOptions||[],observedIds:e.participant.observedIds||[]}))),i.state=W.CALLED,i.mediaSettings=ve((r=e.participant)==null?void 0:r.mediaSettings),i.participantState=v.mapParticipantState(e.participant),i.roles=((n=e.participant)==null?void 0:n.roles)||[],this._setParticipantsStatus([i],Y.WAITING),this._state==="ACTIVE"&&this._transport&&this._transport.allocate(i.id,!0),f.onParticipantAdded(i.externalId,i.markers),this._changeRemoteMediaSettings(t,i.mediaSettings),this._changeRemoteParticipantState(t,i.participantState),this._invokeRolesChangedCallbackIfNeeded(i)})}_onJoinedParticipant(e){return o(this,null,function*(){var r,n;c.debug(`Participant joined [${e.participantId}]`);let t=v.composeMessageId(e),i=this._participants[t];if(i&&i.state===W.ACCEPTED){c.warn(`Participant [${t}] is already in conversation and is active`);return}i||(i=this._registerParticipantInCache(yield this._createParticipant({id:t,externalId:e.participant.externalId&&fe.fromSignaling(e.participant.externalId,e.participant.deviceIdx||0),mediaSettings:ve(e.participant.mediaSettings),state:e.participant.state,participantState:v.mapParticipantState(e.participant),roles:e.participant.roles||[],muteStates:e.participant.muteStates||{},unmuteOptions:e.participant.unmuteOptions||[],observedIds:e.participant.observedIds||[],markers:this._denormalizeMarkers(t,e.participant.markers)}))),this._conversation&&this._conversation.direction===Ye.OUTGOING&&(this._state==="IDLE"||this._state==="PROCESSING")&&(this._state="ACTIVE",this._changeFeatureSet()),i.state=W.ACCEPTED,i.mediaSettings=ve(e.mediaSettings),i.participantState=v.mapParticipantState(e.participant),i.roles=e.participant.roles||[],((r=this._transport)==null?void 0:r.isAllocated(i.id))?this._setParticipantsStatus([i],Y.CONNECTED):this._setParticipantsStatus([i],Y.WAITING),this._state==="ACTIVE"&&this._transport&&(this._transport.isAllocated(i.id)||this._transport.allocate(i.id,!0),this._transport.open([i.id],null,!!((n=this._conversation)==null?void 0:n.observer))),f.onParticipantJoined(i.externalId,i.markers),this._changeRemoteMediaSettings(t,i.mediaSettings),this._changeRemoteParticipantState(t,i.participantState),this._invokeRolesChangedCallbackIfNeeded(i),f.onMuteStates(i.muteStates,i.unmuteOptions,Object.keys(i.muteStates),!1,!1,i.externalId,void 0,!0)})}_onClosedConversation(e){this._toggleJoinAvailability(),this._close(new N(e.reason,{remote:!0}))}_onMediaSettingsChanged(e){return o(this,null,function*(){let t=v.composeMessageId(e);yield this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers),this._changeRemoteMediaSettings(t,ve(e.mediaSettings))})}_onParticipantStateChanged(e){return o(this,null,function*(){let t=v.composeMessageId(e);yield this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers),this._changeRemoteParticipantState(t,v.mapParticipantState(e))})}_onNeedRate(){this._conversation&&(this._conversation.needRate=!0,this._changeNeedRate())}_onFeatureSetChanged(e){this._conversation&&(this._conversation.features=e.features,this._conversation.featuresPerRole=e.featuresPerRole,this._changeFeatureSet())}_onMultipartyChatCreated(e){this._conversation&&(this._conversation.chatId=e.chatId,this._toggleJoinAvailability(),f.onMultipartyChatCreated(this._conversation))}_onForceMediaSettingsChange(e){return o(this,null,function*(){if(!this._mediaSource)return;let t=this._mediaSource.getMediaSettings(),i=ve(e.mediaSettings);t.isAudioEnabled!==i.isAudioEnabled&&(yield this._mediaSource.toggleAudio(i.isAudioEnabled)),t.isVideoEnabled!==i.isVideoEnabled&&(yield this._mediaSource.toggleVideo(i.isVideoEnabled)),d.consumerScreenTrack&&t.isScreenSharingEnabled!==i.isScreenSharingEnabled&&(yield this._mediaSource.toggleScreenCapturing(i.isScreenSharingEnabled,i.isAudioSharingEnabled))})}_onSettingsUpdate(e){c.debug("Got settings update notification",e);let t={camera:e.camera,screenSharing:e.screenSharing};this._serverSettings=ir(this._serverSettings,t),this._transport&&this._transport.updateSettings(this._serverSettings)}_onVideoQualityUpdate(e){c.debug("Got video quality update notification",e);let t=Math.round(e.quality.maxBitrate/1024),i=e.quality.maxDimension,r={camera:Object.assign({},this._serverSettings.camera,{maxBitrateK:t,maxDimension:i}),screenSharing:null};this._serverSettings=ir(this._serverSettings,r),this._transport&&this._transport.updateSettings(this._serverSettings)}_onPeerRegistered(e){let t=v.composeMessageId(e);this._participants[t]&&(this._participants[t].clientType=e.clientType,this._participants[t].platform=e.platform)}_onMicSwitched(e){return o(this,null,function*(){f.onDeviceSwitched(oe.AUDIO,!e.mute),yield this.toggleLocalAudio(!e.mute)})}_onChatMessage(e){return o(this,null,function*(){let t=v.composeMessageId(e),i;this._participants[t]?i=this._participants[t].externalId:i=yield this._getParticipantId(t),f.onChatMessage(e.message,i,e.direct)})}_onCustomData(e){return o(this,null,function*(){if(e.data.hasOwnProperty("sdk"))return;let t=v.composeMessageId(e),i;this._participants[t]?i=this._participants[t].externalId:i=yield this._getParticipantId(t),f.onCustomData(e.data,i,e.direct)})}_onRecordInfo(e){return o(this,null,function*(){var i;if(!this._conversation)return;let t=!1;if(!this._conversation.recordInfo!=!e?t=!0:this._conversation.recordInfo&&e&&(t=this._conversation.recordInfo.recordMovieId!==e.recordMovieId),t)if(e){let r=yield this._getParticipantId(e.initiator);f.onRecordStarted(r,e.recordMovieId,e.recordStartTime,e.recordType,e.recordExternalMovieId,e.recordExternalOwnerId)}else f.onRecordStopped();this._conversation.recordInfo=e,e&&this._transport.getTopology()===ne.SERVER&&this._participantState!==W.CALLED&&this._transport.open(this._transport.allocated(),null,!!((i=this._conversation)==null?void 0:i.observer),!0)})}_onRolesChanged(e,t){if(this._conversation&&this._isMe(e)&&!Ot(this._conversation.roles,t)){c.debug(`Local roles changed: ${t}`),this._conversation.roles=t,f.onLocalRolesChanged(t),this._processMuteState({mediaOptions:bt(this._conversation.muteStates,ke.MUTE_PERMANENT),stateUpdated:!0});return}let i=this._participants[e];i&&!Ot(i.roles,t)&&(c.debug(`Roles for participant [${e}] changed: ${t}`),i.roles=t,f.onRolesChanged(i.externalId,t))}_onMuteParticipant(e,t=null){return o(this,null,function*(){if(!this._conversation)return;let i=e.muteStates||{},r=e.unmuteOptions||[],n=e.mediaOptions||[],s=e.adminId?this._participants[e.adminId]:null;if(e.participantId&&!this._isMe(e.participantId)){if(!this._isCallAdmin()){c.warn(`Not admin got mute states for participant [${e.participantId}]`);return}let p=this._participants[e.participantId];p&&(c.debug(`Mute states for participant [${e.participantId}] changed`,i),f.onMuteStates(i,r,n,e.muteAll,e.unmute,p.externalId,s==null?void 0:s.externalId,e.stateUpdated,e.requestedMedia));return}if(!(v.isObjectsEquals(this._conversation.muteStates,i)&&v.isArraysEquals(this._conversation.unmuteOptions,r)&&!n.length)){if(this._conversation.muteStates=i,this._conversation.unmuteOptions=r,this._isMe(e.adminId)){e.muteAll&&f.onMuteStates(i,r,n,e.muteAll,e.unmute,null,this._conversation.externalId,e.stateUpdated,e.requestedMedia);return}yield this._processMuteState({mediaOptions:n,muteAll:e.muteAll,unmute:e.unmute,serverSettings:t,admin:s,stateUpdated:e.stateUpdated,requestedMedia:e.requestedMedia})}})}_processMuteState(l){return o(this,arguments,function*({mediaOptions:e=[],muteAll:t=!1,unmute:i=!1,serverSettings:r=null,admin:n=null,stateUpdated:s,requestedMedia:p}){if(!this._conversation||!this._mediaSource||this._participantState!==W.ACCEPTED)return;let u=Object.assign({},this._conversation.muteStates),P=this._conversation.unmuteOptions,C=this._mediaSource.getMediaSettings(),O=Object.entries(u);for(let[x,H]of O)if(!(H!==ke.MUTE&&H!==ke.MUTE_PERMANENT)&&(this._isCallAdmin()&&H===ke.MUTE_PERMANENT&&!t&&(u[x]=ke.MUTE),!(!e.includes(x)||i)))switch(x){case oe.VIDEO:C.isVideoEnabled&&!(r==null?void 0:r.isVideoEnabled)&&(f.onDeviceSwitched(oe.VIDEO,!1),yield this.toggleLocalVideo(!1));break;case oe.AUDIO:C.isAudioEnabled&&!(r==null?void 0:r.isAudioEnabled)&&(f.onDeviceSwitched(oe.AUDIO,!1),yield this.toggleLocalAudio(!1));break;case oe.SCREEN_SHARING:C.isScreenSharingEnabled&&!(r==null?void 0:r.isScreenSharingEnabled)&&(f.onDeviceSwitched(oe.SCREEN_SHARING,!1),yield this.toggleScreenCapturing(!1,!1));break;case oe.AUDIO_SHARING:C.isAudioSharingEnabled&&!(r==null?void 0:r.isAudioSharingEnabled)&&(f.onDeviceSwitched(oe.AUDIO_SHARING,!1),yield this.toggleScreenCapturing(C.isScreenSharingEnabled,!1));break}f.onMuteStates(u,P,e,t,i,null,n==null?void 0:n.externalId,s,p)})}_onPinParticipant(e,t=!1,i){return o(this,null,function*(){if(!this._conversation)return;let r=this._conversation.pinnedParticipantId;if(r&&r!==e)if(this._isMe(r))f.onLocalPin(!0);else{let n=yield this._getExternalIdByParticipantId(r);n&&f.onPinnedParticipant(n,!0,this._denormalizeMarkers(e,i))}if(this._isMe(e))f.onLocalPin(t);else{let n=yield this._getExternalIdByParticipantId(e);n&&f.onPinnedParticipant(n,t,this._denormalizeMarkers(e,i))}this._conversation.pinnedParticipantId=t?null:e})}_onOptionsChanged(e){this._conversation&&!Ar(this._conversation.options,e)&&(this._conversation.options=e,f.onOptionsChanged(e))}_onNetworkStatus(e){if(this._conversation){let t=[];for(let[i,r]of Object.entries(e)){let n;if(this._isMe(i)||i==="")n=this._conversation.networkRating;else if(this._participants[i])n=this._participants[i].networkRating;else continue;if(n!==r)if(this._isMe(i)||i==="")this._conversation.networkRating=r,f.onLocalNetworkStatusChanged(r);else{let s=this._participants[i];s.networkRating=r,t.push({uid:s.externalId,rating:r})}}if(t.length===0)return;c.log("Received network status update: ",e),f.onNetworkStatusChanged(t)}}_onRemoteStreamSecond(e,t){let i=this._participants[e];if(!!i){if(d.producerScreenTrack){f.onRemoteScreenStream(i.externalId,t);return}if(i.secondStream=t,d.videoTracksCount>0){let r=e;if(!this._streamIdByStreamDescription.has(r)){c.error("Received remote stream notification for a participant that has no track associated with it",r);return}let n=this._streamIdByStreamDescription.get(r);if(!n||this._streamWaitTimerByStreamDescription.has(r)){c.log("Delaying secondary stream start/stop until main stream becomes available",r);return}let s=this._streamByStreamId.get(n);if(!s){h.log(E.PAT_ERROR,"streamNotFound"),c.error(`Could not find stream by ID: ${n}`);return}f.onRemoteStream(i.externalId,i.secondStream||s)}else{let r=t||i.remoteStream;r&&f.onRemoteStream(i.externalId,r)}}}_onPeerConnectionClosed(e){e===ne.SERVER&&this._cleanupParticipantAgnosticStreams()}_changeFeatureSet(){if(this._conversation){let e=this._state==="ACTIVE",t=this._conversation.features.includes(zt.ADD_PARTICIPANT);f.onCallState(e,t,this._conversation)}}_changeNeedRate(){this._conversation&&this._conversation.needRate&&f.onRateNeeded()}_onVolumesDetected(e){let t=[];for(let[i,r]of Object.entries(e)){let n=this._participants[i];n&&n.externalId&&t.push({uid:n.externalId,volume:r.real})}f.onVolumesDetected(t)}_onSpeakerChanged(e){this._activeSpeakerId=e,this._participants[e]&&this._lastSignalledActiveSpeakerId!==e&&(f.onSpeakerChanged(this._participants[e].externalId),this._lastSignalledActiveSpeakerId=e)}_onTransportStateChanged(e,t){return o(this,null,function*(){c.debug(`Transport state has changed: ${t}`,e);let i=this._getStatusByTransportState(t);if(!i)return;let r=e.reduce((n,s)=>{if(s in this._participants){let p=this._participants[s];n.push(p),t===B.CONNECTED&&(p.remoteStream||(p.mediaSettings&&this._changeRemoteMediaSettings(s,p.mediaSettings),this._changeRemoteParticipantState(s,p.participantState)),this._updateDisplayLayoutFromCache(s))}else this._warnParticipantNotInConversation(s);return n},[]);!r.length||this._setParticipantsStatus(r,i)})}_onTransportLocalStateChanged(e){return o(this,null,function*(){var t;if(c.debug(`Local transport state has changed: ${e}`),e===B.CONNECTED&&(f.onLocalStatus(Y.CONNECTED),((t=this._transport)==null?void 0:t.getTopology())===ne.SERVER)){let i=Object.values(this._myLastRequestedLayouts);yield this.updateDisplayLayout(i)}e===B.CONNECTING&&f.onLocalStatus(Y.CONNECTING),e===B.RECONNECTING&&f.onLocalStatus(Y.RECONNECT),e===B.FAILED&&this._transport&&this._transport.allocated().length===0&&(this._signaling.ready&&(yield this._signaling.hangup(D.FAILED)),this._close(new N(D.FAILED),"Transport failed"))})}_onRemoteTrackAdded(e,t,i){return o(this,null,function*(){if(e.endsWith(Be.AUDIO_MIX))c.debug("Remote audio mix track added"),this._audioOutput.add(i),f.onRemoteMixedAudioStream(t);else if(e.startsWith(Be.PARTICIPANT_AGNOSTIC_TRACK_PREFIX))c.debug(`Participant-agnostic track added: ${e}`),this._streamByStreamId.set(e,t);else{c.debug(`Remote track added on the participant [${e}]`,{kind:i.kind});let r=this._participants[e];if(r||(c.warn(`Conversation: track added before participant [${e}]`),r=this._registerParticipantInCache(yield this._createParticipant({id:e})),this._setParticipantsStatus([r],Y.WAITING),this._activeSpeakerId===e&&this._lastSignalledActiveSpeakerId!==e&&(f.onSpeakerChanged(r.externalId),this._lastSignalledActiveSpeakerId=e)),this._transport&&!this._transport.isAllocated(r.id)&&this._transport.allocate(r.id,!1),i.kind===ce.audio&&(this._audioOutput.add(i),d.preserveAudioTracks||t.removeTrack(i)),r.remoteStream!==t){if(r.remoteStream=t,r.secondStream)return;f.onRemoteStream(r.externalId,t)}r.mediaSettings&&this._changeRemoteMediaSettings(e,r.mediaSettings),d.batchParticipantsOnStart||this._changeRemoteParticipantState(e,r.participantState)}})}_onRemoteTrackRemoved(e,t,i){switch(c.debug(`[${e}] remote track (removed)`,{track:i}),i.kind){case ce.audio:this._removeAudioTrack(e,t,i);break;case ce.video:case ce.screen:this._removeVideoTrack(e,t,i);break}}_removeAudioTrack(e,t,i){if(e!==Be.AUDIO_MIX){let r=this._participants[e];if(!r||r.remoteStream&&r.remoteStream!==t)return}this._audioOutput.remove(i)}_removeVideoTrack(e,t,i){}_onTopologyChanged(e){e===ne.DIRECT&&(this._onRemoteSignalledStall([]),this._onRemoteAllStall(!1)),this._conversation&&(this._conversation.topology=e,this._changeFeatureSet())}_onRemoteAllStall(e){if(this._remoteAllStalled===e)return;this._remoteAllStalled=e;let t=[],i=[];for(let r in this._participants)if(this._participants.hasOwnProperty(r)){let n=this._participants[r];e||this._lastStalled[r]?t.push(n):i.push(n)}t.length&&this._setParticipantsStatus(t,Y.RECONNECT),i.length&&this._setParticipantsStatus(i,Y.CONNECTED)}_onRemoteSignalledStall(e){let t={},i=[],r=[];e.forEach(n=>{if(t[n]=!0,!this._lastStalled[n]){let s=this._participants[n];s&&!this._remoteAllStalled&&i.push(s)}delete this._lastStalled[n]}),Object.keys(this._lastStalled).forEach(n=>{let s=this._participants[n];s&&!this._remoteAllStalled&&r.push(s)}),i.length&&this._setParticipantsStatus(i,Y.RECONNECT),r.length&&this._setParticipantsStatus(r,Y.CONNECTED),this._lastStalled=t}_onRemoteDataStats(e){this._debugInfo&&this._debugInfo.onRemoteDataStats(e,this._participants),this._fixAudioDevice(e.outbound.rtps)}_fixAudioDevice(e){var t;!y.hasMicrophone()||!this._audioFix||!((t=this._mediaSource)==null?void 0:t.getMediaSettings().isAudioEnabled)||this._audioFix.fix(e)}_toggleJoinAvailability(){let e=this._conversation&&this._conversation.chatId,t=e&&this._state!=="CLOSE"||!1;e&&(c.debug("Toggle join availability",{available:t,chatId:e}),f.onJoinStatus(t,e))}_updateDisplayLayoutFromCache(e){return o(this,null,function*(){var i;if(((i=this._transport)==null?void 0:i.getTopology())!==ne.SERVER)return;let t=this._participants[e];t&&t.lastRequestedLayouts&&Object.keys(t.lastRequestedLayouts).length&&(yield this.updateDisplayLayout(Object.values(t.lastRequestedLayouts)))})}_setParticipantsStatus(e,t,i=null){if(!e.length)return;let r=e.reduce((n,s)=>(s.status!==t&&(s.status=t,d.batchParticipantsOnStart?n.push(s.externalId):f.onParticipantStatus(s.externalId,t,i)),n),[]);!r.length||d.batchParticipantsOnStart&&f.onRemoteStatus(r,t,i)}_onJoinLinkChanged(e){f.onJoinLinkChanged(e.joinLink)}_onFeedback(e){return o(this,null,function*(){let t=n=>o(this,null,function*(){return(yield this._registerParticipantAndSetMarkersIfChunkEnabled(n)).externalId}),i=e.feedback.map(n=>o(this,null,function*(){let s=n.items.map(l=>o(this,null,function*(){if(l.participantId===this._conversation.compositeUserId)return Promise.resolve(ht(Ue({},l),{participantId:this._conversation.externalId}));let u=yield t(l.participantId);return ht(Ue({},l),{participantId:u})})),p=yield Promise.all(s);return ht(Ue({},n),{items:p})})),r=yield Promise.all(i);f.onFeedback(r)})}_isMe(e){var t;return e===((t=this._conversation)==null?void 0:t.compositeUserId)}},V=j;V._delayedHangup=!1;var Si=class extends Error{constructor(e,t){super(e);Object.setPrototypeOf(this,Si.prototype),this.participantErrors=t}};var qt,vi=null;function zn(){return o(this,null,function*(){var a;if(d.apiEnv!=="AUTO")return d.apiEndpoint;try{let e=atob("aHR0cHM6Ly9kbnMuZ29vZ2xlL3Jlc29sdmU/bmFtZT12aWRlby5fZW5kcG9pbnQub2sucnUmdHlwZT1UWFQ="),i=yield(yield fetch(e,{method:"GET",mode:"cors",cache:"no-cache"})).json(),r=(a=i==null?void 0:i.Answer[0])==null?void 0:a.data;if(!r)throw new Error("Wrong DNS response");return c.debug("Resolved API endpoint",r),r}catch(e){return c.warn("Failed to resolve API endpoint using DNS, default is used",e),d.apiEndpoint}})}function Ca(){return qt?Promise.resolve(qt):vi||(vi=zn().then(a=>qt=a).finally(()=>vi=null))}function ya(){if(!d.apiKey)throw new N(ae.API,{message:"Required argument apiAppKey not passed"})}function dr(i){return o(this,arguments,function*(a,e={},t=!1){if(!window.Blob||!window.navigator.sendBeacon)return;yield Ca();let r=Pa(a,e,t),n=new window.Blob([r],{type:"application/x-www-form-urlencoded"});window.navigator.sendBeacon(`${qt}/fb.do`,n)})}function Ra(i){return o(this,arguments,function*(a,e={},t=!1){yield Ca();let r=Pa(a,e,t);return Qn(r)})}function Qn(a){return o(this,null,function*(){return new Promise((e,t)=>{let i=new XMLHttpRequest;i.open("POST",`${qt}/fb.do`,!0),i.setRequestHeader("Content-type","application/x-www-form-urlencoded"),i.onreadystatechange=()=>{if(i.readyState!==XMLHttpRequest.DONE)return;let r;try{r=JSON.parse(i.responseText)}catch(n){r={result:i.responseText}}i.status!==200||r.hasOwnProperty("error_msg")?t(r):e(r)},i.send(a)})})}function Pa(a,e={},t=!1){e.method=a,e.format="JSON",e.application_key||(e.application_key=d.apiKey),t||(ie.sessionKey?e.session_key=ie.sessionKey:ie.accessToken&&(e.access_token=ie.accessToken));for(let[r,n]of Object.entries(e))typeof n=="object"&&(e[r]=JSON.stringify(n));let i="";for(let[r,n]of Object.entries(e))i&&(i+="&"),i+=`${r}=${encodeURIComponent(n)}`;return i}var Zn=10,es=700,ts=3e3,$t=class extends _t{constructor(){super(...arguments);this._userId=null;this._externalUidsCache={}}_callUnsafe(r){return o(this,arguments,function*(e,t={},i=!1){let n=s=>o(this,null,function*(){try{return yield Ra(e,t,i)}catch(p){if(!p.hasOwnProperty("error_msg")&&(s++,c.debug(`${e} network error, attempt ${s}...`),s<Zn))return yield v.delay(Math.min(s*es,ts)),n(s);throw c.warn(e,"error",p),p}});return n(0)})}_call(r){return o(this,arguments,function*(e,t={},i=!1){try{return yield this._callUnsafe(e,t,i)}catch(n){c.warn("Api call error",n);let s=ae.API;switch(n.error_code){case 102:case 103:case 104:return yield this.authorize(),this._callUnsafe(e,t,i);case 1101:s=D.SERVICE_DISABLED;break;case 1102:s=D.CALLEE_IS_OFFLINE;break;case 1103:s=D.NOT_FRIENDS;break;case 1104:case 1106:s=D.EXTERNAL_API_ERROR;break;case 1113:s=D.CALLER_IS_REJECTED;break}throw new N(s,{message:n.error_msg,code:n.error_code})}})}userId(e){return o(this,null,function*(){let t=v.decomposeId(e).id;return ie.isEmpty()?Ee.fromId(String(t)):(this._externalUidsCache.hasOwnProperty(t)||Object.assign(this._externalUidsCache,yield this._getExternalIdsByOkIds([t])),Ee.fromString(this._externalUidsCache[t]))})}prepareUserIds(e){return o(this,null,function*(){ie.isEmpty()||Object.assign(this._externalUidsCache,yield this._getExternalIdsByOkIds(e))})}authorize(){return o(this,null,function*(){if(!this._uuid){let t=Ze.get("uuid");t||(t=v.uuid(),Ze.set("uuid",t)),this._uuid=String(t)}let e={session_data:{version:2,device_id:this._uuid,client_version:d.appVersion,client_type:"SDK_JS"}};return d.authToken&&(e.session_data.auth_token=d.authToken,e.session_data.version=3),this._callUnsafe("auth.anonymLogin",e,!0).then(t=>{t.uid&&(this._userId=Number(t.uid)),ie.sessionKey=t.session_key,ie.sessionSecretKey=t.session_secret_key}).catch(t=>{throw t.error_code===401&&f.onTokenExpired(),new N(ae.AUTH,{message:t.error_msg,code:t.error_code})})})}log(e){let t={collector:"ok.mobile.apps.video",data:JSON.stringify({application:`${d.appName}:${d.sdkVersion}`,platform:d.platform,items:e})};dr("log.externalLog",t)}init(){ya()}joinConversation(e,t=!1,i){return o(this,null,function*(){let r={conversationId:e,isVideo:t,protocolVersion:d.protocolVersion};return i&&(r.chatId=i),this._call("vchat.joinConversation",r)})}createConversation(n){return o(this,arguments,function*(e,t="",i=!1,{onlyAdminCanShareMovie:r}={}){let s=this._preareStartConversationData({conversationId:e,isVideo:!1,joiningAllowed:!0,payload:t,requireAuthToJoin:i,onlyAdminCanShareMovie:r});return this._startConversation(s)})}startConversation(u,P,C){return o(this,arguments,function*(e,t,i,r=!1,n="",s=!1,p=!1,{onlyAdminCanShareMovie:l}={}){let O=this._preareStartConversationData({conversationId:e,isVideo:r,joiningAllowed:s,payload:n,requireAuthToJoin:p,onlyAdminCanShareMovie:l});if(t&&t.length)switch(i){case We.USER:O.uids=t.join(",");break;case We.GROUP:O.gid=t[0];break;case We.CHAT:O.chatId=t[0];break}return this._startConversation(O)})}_preareStartConversationData({conversationId:e,isVideo:t,payload:i="",joiningAllowed:r=!1,requireAuthToJoin:n=!1,onlyAdminCanShareMovie:s}){let p={conversationId:e,isVideo:t,protocolVersion:d.protocolVersion};return r&&(p.createJoinLink=!0),i&&(p.payload=i),d.domain&&(p.domainId=d.domain),d.externalDomain&&(p.externalDomain=d.externalDomain),n&&(p.requireAuthToJoin=!0),s!==void 0&&(p.onlyAdminCanShareMovie=s),p}_startConversation(e){return o(this,null,function*(){return this._call("vchat.startConversation",e)})}createJoinLink(e){return o(this,null,function*(){return this._call("vchat.createJoinLink",{conversationId:e})})}removeJoinLink(e){return o(this,null,function*(){return this._call("vchat.removeJoinLink",{conversationId:e})})}getAnonymTokenByLink(e,t){return o(this,null,function*(){let i={joinLink:e};t&&(i.anonymName=t);let r=yield this._call("vchat.getAnonymTokenByLink",i);return this._userId=Number(r.uid),r.token})}joinConversationByLink(e,t=!1,i,r){return o(this,null,function*(){let n={joinLink:e,isVideo:t,protocolVersion:d.protocolVersion};return(i==null?void 0:i.length)&&(n.observedIds=i.join(",")),d.anonymToken&&(n.anonymToken=d.anonymToken),r&&(n.payload=r),this._call("vchat.joinConversationByLink",n)})}getOkIdsByExternalIds(e){return o(this,null,function*(){let t=Ee.fromIds(e),i=[],r={methods:[]},n=[],s=Object.keys(this._externalUidsCache),p=Object.values(this._externalUidsCache);for(let u of t){let P=Ee.toString(u),C=p.indexOf(P);C>-1?i.push(Number(s[C])):(n.push(P),r.methods.push({"vchat.getOkIdByExternalId":{params:{externalId:u.id,anonym:u.type===ct.ANONYM},onError:"SKIP"}}))}return r.methods.length&&(yield this._call("batch.executeV2",r)).forEach((u,P)=>{if(u.ok){let C=Number(u.ok.ok_id);this._externalUidsCache[C]=n[P],i.push(C)}}),i})}getExternalIdsByOkIds(e){return o(this,null,function*(){let t=[],i=[];for(let n of e)this._externalUidsCache.hasOwnProperty(n)?t.push(Ee.fromString(this._externalUidsCache[n])):i.push(n);if(!i.length)return t;let r=yield this._getExternalIdsByOkIds(i);Object.assign(this._externalUidsCache,r);for(let n of i)r.hasOwnProperty(n)&&t.push(Ee.fromString(r[n]));return t})}getCachedOkIdByExternalId(e){let t=Object.keys(this._externalUidsCache),i=Object.values(this._externalUidsCache),r=Ee.toString(e),n=i.indexOf(r);return n>-1?v.composeUserId(t[n],X.USER):null}cacheExternalId(e,t){let i=v.decomposeId(e).id;this._externalUidsCache[i]=Ee.toString(t)}getConversationParams(e){return o(this,null,function*(){let t={};return d.anonymToken&&(t.anonymToken=d.anonymToken),e&&(t.conversationId=e),this._call("vchat.getConversationParams",t)})}getUserId(){return this._userId}setUserId(e){this._userId=e}hangupConversation(e){let t={conversationId:e,reason:D.HUNGUP};d.anonymToken&&(t.anonymToken=d.anonymToken),dr("vchat.hangupConversation",t)}removeHistoryRecords(e){return o(this,null,function*(){yield this._call("vchat.removeHistoryRecords",{recordIds:e.join(",")})})}cleanup(){}_getExternalIdsByOkIds(e){return o(this,null,function*(){let t={};try{let i=yield this._call("vchat.getExternalIdsByOkIds",{uids:e.join(",")});if(i.external_ids)for(let[r,n]of Object.entries(i.external_ids))t[r]=Ee.fromIdToString(n,ct.USER);if(i.anonym_ids)for(let[r,n]of Object.entries(i.anonym_ids))t[r]=Ee.fromIdToString(n,ct.ANONYM);return t}catch(i){return t}})}};var G=it(require("messagepack"));var ba=(M=>(M.RECOVER="recover",M.ACCEPT_CALL="accept-call",M.ADD_PARTICIPANT="add-participant",M.REMOVE_PARTICIPANT="remove-participant",M.HANGUP="hangup",M.TRANSMIT_DATA="transmit-data",M.ACCEPT_PRODUCER="accept-producer",M.ALLOCATE_CONSUMER="allocate-consumer",M.CHANGE_MEDIA_SETTINGS="change-media-settings",M.CHANGE_PARTICIPANT_STATE="change-participant-state",M.CHANGE_STREAM_PRIORITIES="change-streams-priorities",M.UPDATE_DISPLAY_LAYOUT="update-display-layout",M.REPORT_PERF_STAT="report-perf-stat",M.RECORD_START="record-start",M.RECORD_STOP="record-stop",M.RECORD_SET_ROLE="record-set-role",M.RECORD_GET_STATUS="record-get-status",M.SWITCH_MICRO="switch-micro",M.SWITCH_TOPOLOGY="switch-topology",M.REQUEST_REALLOC="request-realloc",M.CHAT_MESSAGE="chat-message",M.CHAT_HISTORY="chat-history",M.CUSTOM_DATA="custom-data",M.GRANT_ROLES="grant-roles",M.MUTE_PARTICIPANT="mute-participant",M.ENABLE_FEATURE_FOR_ROLES="enable-feature-for-roles",M.PIN_PARTICIPANT="pin-participant",M.UPDATE_MEDIA_MODIFIERS="update-media-modifiers",M.CHANGE_OPTIONS="change-options",M.GET_WAITING_HALL="get-waiting-hall",M.GET_PARTICIPANT_LIST_CHUNK="get-participant-list-chunk",M.GET_PARTICIPANTS="get-participants",M.PROMOTE_PARTICIPANT="promote-participant",M.REQUEST_TEST_MODE="request-test-mode",M.ADD_MOVIE="add-movie",M.UPDATE_MOVIE="update-movie",M.REMOVE_MOVIE="remove-movie",M.FEEDBACK="feedback",M))(ba||{}),U=ba;function Ei(){let a=new DataView(new ArrayBuffer(64)),e=0;function t(i){if(e+i>a.byteLength){let r=new Uint8Array(Math.max(e+i,a.byteLength+64));r.set(new Uint8Array(a.buffer.slice(0,e))),a=new DataView(r.buffer)}}return{put(i){if(t(i.byteLength),is(i)){let r=i.buffer;new Uint8Array(a.buffer).set(new Uint8Array(r),e)}else new Uint8Array(a.buffer).set(new Uint8Array(i),e);e+=i.byteLength},putI8(i){t(1),a.setInt8(e,i),++e},putI16(i){t(2),a.setInt16(e,i),e+=2},putI32(i){t(4),a.setInt32(e,i),e+=4},putI64(i){t(8);let r=i<0;r&&(i=-i);let n=i/4294967296|0,s=i%4294967296|0;r&&(s=~s+1|0,n=s===0?~n+1|0:~n),a.setUint32(e,n),a.setUint32(e+4,s),e+=8},putUi8(i){t(1),a.setUint8(e,i),++e},putUi16(i){t(2),a.setUint16(e,i),e+=2},putUi32(i){t(4),a.setUint32(e,i),e+=4},putUi64(i){t(8),a.setUint32(e,i/4294967296|0),a.setUint32(e+4,i%4294967296),e+=8},putF(i){t(8),a.setFloat64(e,i),e+=8},ui8array(){return new Uint8Array(a.buffer.slice(0,e))}}}function is(a){return a.buffer!==void 0}function Ii(a){let e=ArrayBuffer.isView(a)?new DataView(a.buffer,a.byteOffset,a.byteLength):new DataView(a),t=0;return{peek(){return e.getUint8(t)},get(i){t+=i;let r=e.byteOffset;return e.buffer.slice(r+t-i,r+t)},getI8(){return e.getInt8(t++)},getI16(){return t+=2,e.getInt16(t-2)},getI32(){return t+=4,e.getInt32(t-4)},getI64(){t+=8;let i=e.getInt32(t-8),r=e.getUint32(t-4);return i*4294967296+r},getUi8(){return e.getUint8(t++)},getUi16(){return t+=2,e.getUint16(t-2)},getUi32(){return t+=4,e.getUint32(t-4)},getUi64(){t+=8;let i=e.getUint32(t-8),r=e.getUint32(t-4);return i*4294967296+r},getF32(){return t+=4,e.getFloat32(t-4)},getF64(){return t+=8,e.getFloat64(t-8)}}}var Ma=0,Aa=1,rs=0,as=1,ns=2,pr=0,ss=0,os=0,cs=1,lr=class{constructor(){this.participantIdRegistry=null}setParticipantIdRegistry(e){this.participantIdRegistry=e}serializeUpdateDisplayLayout(e,t){let i=Ei();G.Int.enc(i,Ma),G.Int.enc(i,pr),G.Int.enc(i,e),G.Nil.enc(i,null);let r=[];for(let n in t)t.hasOwnProperty(n)&&this.writeLayout(t,n,r);return G.Arr.enc(i,r),G.Nil.enc(i,null),i.ui8array()}writeLayout(e,t,i){let r=e[t],n=Ei();if(this.writeStreamDesc(t,n),Ft(r))G.Int.enc(n,as);else if(er(r))G.Int.enc(n,ns);else if(G.Int.enc(n,rs),r.priority!==void 0?G.Int.enc(n,r.priority):G.Nil.enc(n,null),r.width!==void 0&&r.height!==void 0?(G.Int.enc(n,Math.round(r.width)),G.Int.enc(n,Math.round(r.height))):(G.Nil.enc(n,null),G.Nil.enc(n,null)),r.fit!==void 0)switch(r.fit){case"cv":G.Int.enc(n,os);break;case"cn":G.Int.enc(n,cs);break;default:G.Nil.enc(n,null)}else G.Nil.enc(n,null);i.push(n.ui8array())}writeStreamDesc(e,t){if(this.participantIdRegistry){let i=this.participantIdRegistry.getCompactId(e);if(i!==void 0){G.Int.enc(t,i);return}}G.Str.enc(t,e)}serializePerfStatReport(e,t){let i=Ei();return G.Int.enc(i,Aa),G.Int.enc(i,pr),G.Int.enc(i,e),G.Int.enc(i,t.framesDecoded),G.Int.enc(i,t.framesReceived),i.ui8array()}deserializeCommandResponse(e){return o(this,null,function*(){let t;if(e instanceof Blob){let s=yield e.arrayBuffer();t=Ii(s)}else t=Ii(e);let i=G.Int.dec(t),r=G.Int.dec(t);if(r!==pr){c.warn("Unsupported version for command type: "+i+", version "+r);return}if(G.Int.dec(t)!==ss){c.warn("Error code: "+i+"received for command type: "+i+", version "+r);return}switch(i){case Ma:return this.deserializeUpdateDisplayLayoutResponse(t);case Aa:return this.deserializeReportPerfStatResponse(t);default:return c.warn("unsupported command response commandType: "+i),null}})}deserializeUpdateDisplayLayoutResponse(e){let t=G.Int.dec(e),i=G.Arr.dec(e),r={};return i.forEach(n=>{let s=Ii(n),p=G.Any.dec(s);if(typeof p=="string")r[p]=G.Int.dec(s);else{let l=p,u=qe(this.participantIdRegistry.getStreamDescription(l));r[u]=G.Int.dec(s)}}),{type:"response",sequence:t,response:U.UPDATE_DISPLAY_LAYOUT.toString(),errorCodeByParticipantId:r}}deserializeReportPerfStatResponse(e){let t=G.Int.dec(e),i=G.Int.dec(e);return{type:"response",sequence:t,response:U.REPORT_PERF_STAT.toString(),estimatedPerformanceIndex:i}}};var Da="open",ka=[()=>d.producerScreenTrack,()=>d.videoTracksCount>0,()=>!0,()=>d.filteredMessages,()=>d.consumerScreenTrack,()=>!0,()=>d.movieShare,()=>d.useParticipantListChunk],ds=10,we=class extends ft{constructor(){super(...arguments);this.socket=null;this.sequence=1;this.lastStamp=0;this.websocketCommandsQueue=[];this.datachannelCommandsQueue=[];this.incomingCache=[];this.responseHandlers={};this.reconnectCount=0;this.conversationResolve=null;this.conversationReject=null;this.connected=!1;this.listenersReady=!1;this.postfix="&platform="+d.platform+"&appVersion="+d.appVersion+"&version="+d.protocolVersion+"&device="+d.device+"&capabilities="+we._getCapabilityFlags();this.peerId=null;this.conversationId=null;this.reconnectTimer=0;this.connectionMessageWaitTimer=0;this.doctorTimer=0;this.participantIdRegistry=null;this.producerNotificationDataChannel=null;this.producerCommandDataChannel=null;this.producerCommandDataChannelEnabled=!1;this.producerCommandSerializationService=new lr}static _getCapabilityFlags(){let e=0;for(let t=0;t<ka.length;t++)ka[t]()&&(e|=1<<t);return e.toString(16).toUpperCase()}get ready(){return this.socket!==null}setEndpoint(e){this.endpoint=e}setConversationId(e){this.conversationId=e}setParticipantIdRegistry(e){this.participantIdRegistry=e,this.producerCommandSerializationService.setParticipantIdRegistry(e)}setProducerNotificationDataChannel(e){this.producerNotificationDataChannel=e,this.producerNotificationDataChannel.onmessage=t=>{var r;let i=(r=this.participantIdRegistry)==null?void 0:r.handleMessage(t.data);i&&this._handleMessage(i)}}setProducerCommandDataChannel(e){this.producerCommandDataChannel=e,this.producerCommandDataChannel.onmessage=t=>{this.producerCommandSerializationService.deserializeCommandResponse(t.data).then(i=>{i&&this._handleMessage(i)}).catch(i=>{c.warn("Cannot parse message at producerCommandDataChannel",i)})},this._handleCommandsQueue(this.datachannelCommandsQueue)}useCommandDataChannel(e){this.producerCommandDataChannelEnabled=e}cleanup(){this.datachannelCommandsQueue=[]}connect(e){return o(this,null,function*(){return this.postfix+=`&clientType=${d.clientType}`,new Promise((t,i)=>{if(this.socket&&this.socket.readyState<WebSocket.CLOSING){h.log(E.SOCKET_ACTION,"already_opened"),i(Error("Socket already opened"));return}this.conversationResolve=r=>{t(r),this.conversationResolve=null,this.conversationReject=null},this.conversationReject=r=>{i(r),this.conversationResolve=null,this.conversationReject=null},this._connect(e)})})}_send(r){return o(this,arguments,function*(e,t={},i=0){if(t.participantId){let n=v.decomposeParticipantId(t.participantId),s=v.decomposeId(n.compositeUserId);t=Object.assign({},t,{participantId:s.id,participantType:s.type}),n.deviceIdx&&(t.deviceIdx=n.deviceIdx)}return this._sendRaw(e,t,i)})}_sendRaw(r){return o(this,arguments,function*(e,t={},i=0){let n=s=>{var l;if(this._isDataChannelCommand(e))this.datachannelCommandsQueue.push(s),((l=this.producerCommandDataChannel)==null?void 0:l.readyState)===Da&&this._handleCommandsQueue(this.datachannelCommandsQueue);else{if(!this.socket){h.log(E.SOCKET_ACTION,"not_opened"),c.warn("Socket not opened"),s.reject(new Error(`Socket not opened [${e}]`),!0);return}this.socket.readyState>WebSocket.OPEN&&(h.log(E.SOCKET_ACTION,"invalid_state"),c.warn(`Socket is not opened, state ${this.socket.readyState}`)),this.websocketCommandsQueue.push(s),this.socket&&this.socket.readyState===WebSocket.OPEN&&this._handleCommandsQueue(this.websocketCommandsQueue)}};return new Promise((s,p)=>{let l=(P,C=!1)=>{!i||C?p(P):(c.debug("Resending a signaling message",e,u.sequence),i--,n(u))},u={sequence:this.sequence++,name:e,params:t,responseTimer:0,resolve:s,reject:l};n(u)})})}_isDataChannelCommand(e){return this.producerCommandDataChannelEnabled?e===U.UPDATE_DISPLAY_LAYOUT||e===U.REPORT_PERF_STAT:!1}static _isDataChannelResponseRequired(e){return e===U.UPDATE_DISPLAY_LAYOUT||e===U.REPORT_PERF_STAT}getNextCommandSequenceNumber(){return this.sequence}hangup(e){return o(this,null,function*(){return this._send(U.HANGUP,{reason:e}).catch(()=>{})})}sendCandidate(e,t){return o(this,null,function*(){return this._send(U.TRANSMIT_DATA,{participantId:e,data:{candidate:t}})})}requestTestMode(e,t){return o(this,null,function*(){return this._send(U.REQUEST_TEST_MODE,{consumer:e,producer:t})})}sendSdp(e,t){return o(this,null,function*(){return this._send(U.TRANSMIT_DATA,{participantId:e,data:{sdp:t}})})}acceptCall(e){return o(this,null,function*(){return this._send(U.ACCEPT_CALL,{mediaSettings:e})})}changeMediaSettings(e){return o(this,null,function*(){return this._send(U.CHANGE_MEDIA_SETTINGS,{mediaSettings:e},ds)})}changeParticipantState(e){return o(this,null,function*(){return this._send(U.CHANGE_PARTICIPANT_STATE,{participantState:{state:e}})})}addParticipant(e,t){return o(this,null,function*(){return this._send(U.ADD_PARTICIPANT,Ue({participantId:e},t))})}removeParticipant(e,t=!1){return o(this,null,function*(){return this._send(U.REMOVE_PARTICIPANT,{participantId:e,ban:t})})}allocateConsumer(e,t){return o(this,null,function*(){let i={capabilities:t};return e&&(i.description=e.sdp),this._send(U.ALLOCATE_CONSUMER,i)})}acceptProducer(e,t){return o(this,null,function*(){let i={description:e.sdp};return t&&(i.ssrcs=t),this._send(U.ACCEPT_PRODUCER,i)})}changePriorities(e){return o(this,null,function*(){return this._send(U.CHANGE_STREAM_PRIORITIES,{typedPriorities:e}).catch(()=>{})})}updateDisplayLayout(e){return o(this,null,function*(){return this._send(U.UPDATE_DISPLAY_LAYOUT,e)})}addMovie(e){return o(this,null,function*(){return this._send(U.ADD_MOVIE,e)})}updateMovie(e){return o(this,null,function*(){return this._send(U.UPDATE_MOVIE,e)})}removeMovie(e){return o(this,null,function*(){return this._send(U.REMOVE_MOVIE,e)})}startStream(e){return o(this,null,function*(){return this._send(U.RECORD_START,e)})}stopStream(){return o(this,null,function*(){return this._send(U.RECORD_STOP)})}recordSetRole(e,t){return o(this,null,function*(){return this._send(U.RECORD_SET_ROLE,{participantId:e,role:t})})}getRecordStatus(){return o(this,null,function*(){return this._send(U.RECORD_GET_STATUS)})}switchTopology(e,t=!1){return o(this,null,function*(){return this._send(U.SWITCH_TOPOLOGY,{topology:e,force:t})})}requestRealloc(){return o(this,null,function*(){return this._send(U.REQUEST_REALLOC)})}reportPerfStat(e){return o(this,null,function*(){return this._send(U.REPORT_PERF_STAT,e)})}chatMessage(e,t=null){return o(this,null,function*(){return this._send(U.CHAT_MESSAGE,{message:e,participantId:t})})}chatHistory(e){return o(this,null,function*(){return this._send(U.CHAT_HISTORY,{count:e})})}customData(e,t){return o(this,null,function*(){return this._send(U.CUSTOM_DATA,{data:e,participantId:t})})}grantRoles(e,t,i){return o(this,null,function*(){let r={participantId:e,roles:t};return i&&(r.revoke=!0),this._sendRaw(U.GRANT_ROLES,r)})}muteParticipant(e,t,i){return o(this,null,function*(){return this._sendRaw(U.MUTE_PARTICIPANT,{participantId:e,muteStates:t,requestedMedia:i})})}enableFeatureForRoles(e,t){return o(this,null,function*(){return this._sendRaw(U.ENABLE_FEATURE_FOR_ROLES,{feature:e,roles:t})})}pinParticipant(e,t){return o(this,null,function*(){let i={participantId:e};return t&&(i.unpin=!0),this._sendRaw(U.PIN_PARTICIPANT,i)})}updateMediaModifiers(e){return o(this,null,function*(){return this._send(U.UPDATE_MEDIA_MODIFIERS,{mediaModifiers:e})})}changeOptions(e){return o(this,null,function*(){return this._send(U.CHANGE_OPTIONS,{options:e})})}getWaitingHall(e=null,t,i=!1){return o(this,null,function*(){let r={};return e&&(r.fromId=e),t&&(r.count=t),i&&(r.backward=i),this._send(U.GET_WAITING_HALL,r)})}promoteParticipant(e,t=!1){return o(this,null,function*(){let i={participantId:e};return t&&(i.demote=t),this._sendRaw(U.PROMOTE_PARTICIPANT,i)})}feedback(e){return o(this,null,function*(){return this._sendRaw(U.FEEDBACK,{key:e})})}close(){this.socket&&this.socket.readyState<WebSocket.CLOSING&&this._closeSocket(),this._stopWaitConnectionMessage(),this._stopDoctor(),clearTimeout(this.reconnectTimer)}readyToSend(){this.listenersReady=!0,this._handleCachedMessages()}getParticipantListChunk(e){return o(this,null,function*(){return this._send(U.GET_PARTICIPANT_LIST_CHUNK,e)})}getParticipants(e){return o(this,null,function*(){return this._send(U.GET_PARTICIPANTS,{externalIds:e})})}_connect(e){if(this.socket&&this.socket.readyState<WebSocket.CLOSING)return;let t="";e&&(t+=`&tgt=${e}`),e===je.RETRY&&this.lastStamp&&(t+=`&recoverTs=${this.lastStamp}`),t=i(t),c.debug("Connecting to "+this.endpoint+this.postfix+t),this.socket=new WebSocket(this.endpoint+this.postfix+t),this.socket.onopen=this._onOpen.bind(this),this.socket.onmessage=this._onMessage.bind(this),this.socket.onerror=this._onError.bind(this),this.socket.onclose=this._onClose.bind(this),this._startDoctor();function i(r){if(!d.useParticipantListChunk)return r;r+=`&partIdx=${d.participantListChunkInitIndex}`;let s=d.participantListChunkInitCount;return s!==null&&(r+=`&partCount=${s}`),r}}_disconnect(){this.socket&&this.socket.readyState<WebSocket.CLOSING&&(this.socket.onopen=null,this.socket.onmessage=null,this.socket.onerror=null,this.socket.onclose=null,this.socket.close(),this.socket=null),this._stopWaitConnectionMessage(),this._stopDoctor(),clearTimeout(this.reconnectTimer)}_onOpen(){c.debug("Socket opened"),h.log(E.SOCKET_ACTION,"opened"),this._waitConnectionMessage(),this._startDoctor()}_onMessage(e){if(this._startDoctor(),e.data==="ping"){this.socket&&this.socket.readyState===WebSocket.OPEN&&this.socket.send("pong");return}try{this._handleMessage(JSON.parse(e.data))}catch(t){h.log(E.SOCKET_ACTION,"parse_error"),c.error("Unable to parse message",t,e.data)}}_handleMessage(e){var t;e.type==="notification"?e.notification==="connection"?(c.debug("Signaling connected",e),this.connected=!0,this.reconnectCount=0,this.endpoint=e.endpoint,e.peerId&&this.peerId!==e.peerId.id&&(this.postfix+=`&peerId=${e.peerId.id}`,this.peerId=e.peerId.id),this._stopWaitConnectionMessage(),this.conversationResolve?this.conversationResolve(e):(this._triggerEvent(Te.RECONNECT,e),e.conversation.topology&&this._triggerEvent(Te.NOTIFICATION,{type:"notification",notification:k.TOPOLOGY_CHANGED,topology:e.conversation.topology})),this.lastStamp&&this._handleCachedMessages(),(t=e.recoverMessages)==null||t.forEach(i=>this._handleMessage(i)),this._handleCommandsQueue(this.websocketCommandsQueue)):!this.connected||!this.listenersReady?this.incomingCache.push(e):this._triggerEvent(Te.NOTIFICATION,e):e.type==="response"&&this.responseHandlers[e.sequence]?this._handleCommandResponse(!0,e):e.type==="error"&&this.responseHandlers[e.sequence]?(h.log(E.SOCKET_ACTION,`error-${e.error}`),this._handleCommandResponse(!1,e)):e.type==="error"?(h.log(E.SOCKET_ACTION,`error-${e.error}`),e.error==="service-unavailable"?this._reconnect():e.error==="conversation-ended"?this.conversationReject?this.conversationReject(new N(D.SOCKET_CLOSED,{message:`Unable to connect to the signaling: ${e.error}`})):this._triggerEvent(Te.NOTIFICATION,{notification:k.CLOSED_CONVERSATION,reason:e.reason}):this.connected||e.error==="invalid-token"?this._throwError(new Error(`Signaling error: ${e.error}`)):e.sequence||(this.conversationReject&&this.conversationReject(new N(ae.SIGNALING_FAILED,{message:`Unable to connect to the signaling: ${e.error}`})),this._closeSocket())):(h.log(E.SOCKET_ACTION,"unknown_message"),c.warn("Unhandled message",e)),this.lastStamp=e.stamp||this.lastStamp}_handleCachedMessages(){let e=[...this.incomingCache];for(this.incomingCache=[];e.length>0;){let t=e.shift();this._handleMessage(t)}}_throwError(e){this._triggerEvent(Te.FAILED,e)}_onError(e){h.log(E.SOCKET_ACTION,"error"),c.error("Signaling error",e)}_onClose(e){h.log(E.SOCKET_ACTION,"closed"),c.debug("Connection closed",{code:e.code,reason:e.reason}),this.connected=!1,this._stopDoctor(),this.socket&&this.reconnectCount++<we.RECONNECT_MAX_COUNT?this._reconnect():this.socket&&this._closeSocket(new Error("Connection closed"))}_closeSocket(e=null){!this.socket||(this._disconnect(),Object.values(this.responseHandlers).forEach(t=>{window.clearTimeout(t.responseTimer),e&&t.reject(new Error("Connection closed"),!0)}),this.websocketCommandsQueue=[],this.responseHandlers={},this.lastStamp=0,e&&this._throwError(new Error("Connection closed")))}_reconnect(){let e=Math.min(we.RECONNECT_MAX_DELAY,we.RECONNECT_DELAY*Math.pow(2,this.reconnectCount-1));c.log(`Reconnect websocket after ${e}ms (${this.reconnectCount})`),h.log(E.SOCKET_ACTION,"reconnect"),this.reconnectTimer=window.setTimeout(this._connect.bind(this,je.RETRY),e)}_handleCommandResponse(e,t){var r;if(!this.responseHandlers.hasOwnProperty(t.sequence))return;let i=this.responseHandlers[t.sequence];window.clearTimeout(i.responseTimer),e?(delete this.responseHandlers[t.sequence],i.resolve(t)):((r=this.socket)==null?void 0:r.readyState)===WebSocket.OPEN?(delete this.responseHandlers[t.sequence],h.log(E.SOCKET_ACTION,"response-timeout"),i.reject(new Error(t.error||`Response timeout [${i.name}]`))):i.responseTimer=window.setTimeout(()=>this._handleCommandResponse(!1,t),we.WAIT_RESPONSE_DELAY)}_handleCommandsQueue(e){var t,i;for(;e.length>0;){let r=e.shift();if(this._isDataChannelCommand(r.name)){if(((t=this.producerCommandDataChannel)==null?void 0:t.readyState)!==Da){r.reject(new Error(`Invalid data channel state: ${(i=this.producerCommandDataChannel)==null?void 0:i.readyState}`));return}we._isDataChannelResponseRequired(r.name)&&(r.responseTimer=window.setTimeout(()=>this._handleCommandResponse(!1,{command:r.name,sequence:r.sequence}),we.WAIT_RESPONSE_DELAY),this.responseHandlers[r.sequence]=r);let s=this._serializeBinary(r);s!==null&&this.producerCommandDataChannel.send(s)}else{if(!this.socket||this.socket.readyState!==WebSocket.OPEN){r.reject(new Error("Invalid state or socket already closed"));continue}r.responseTimer=window.setTimeout(()=>this._handleCommandResponse(!1,{command:r.name,sequence:r.sequence}),we.WAIT_RESPONSE_DELAY),this.responseHandlers[r.sequence]=r,this.socket.send(this._serializeJson(r))}}}_serializeBinary(e){switch(e.name){case U.UPDATE_DISPLAY_LAYOUT:return this.producerCommandSerializationService.serializeUpdateDisplayLayout(e.sequence,e.params);case U.REPORT_PERF_STAT:return this.producerCommandSerializationService.serializePerfStatReport(e.sequence,e.params)}return c.warn("cannot get binary data for data channel command: "+e.name),null}_serializeJson(e){let t;e.name===U.UPDATE_DISPLAY_LAYOUT?t=this._convertDisplayLayout(e.params):t=e.params;let i=Object.assign({command:e.name,sequence:e.sequence},t);return JSON.stringify(i)}_convertDisplayLayout(e){let t=e,i={};for(let r in t)t.hasOwnProperty(r)&&(i[r]=_a(t[r]));return{layouts:i}}_waitConnectionMessage(){this.connectionMessageWaitTimer=window.setTimeout(()=>{this.conversationReject&&this.conversationReject(new N(ae.SIGNALING_FAILED,{message:"Unable to connect to the signaling: connection timeout"}))},we.WAIT_CONNECTION_DELAY)}_stopWaitConnectionMessage(){window.clearTimeout(this.connectionMessageWaitTimer),this.connectionMessageWaitTimer=0}_startDoctor(){this._stopDoctor(),this.doctorTimer=window.setTimeout(()=>{c.warn("Socket is dead, trying to reconnect"),this._disconnect(),this._connect(je.RETRY)},we.WAIT_MESSAGE_DELAY)}_stopDoctor(){window.clearTimeout(this.doctorTimer),this.doctorTimer=0}},Fe=we;Fe.RECONNECT_DELAY=d.signalingReconnectDelay,Fe.RECONNECT_MAX_DELAY=d.signalingReconnectMaxDelay,Fe.RECONNECT_MAX_COUNT=d.signalingReconnectMaxCount,Fe.WAIT_CONNECTION_DELAY=d.waitConnectionDelay,Fe.WAIT_RESPONSE_DELAY=d.waitResponseDelay,Fe.WAIT_MESSAGE_DELAY=d.waitMessageDelay;var Oa=(t=>(t.KING="KING",t.PAWN="PAWN",t))(Oa||{}),wa=Oa;var ur=class{constructor(e){this._queue=new Array(e).fill(null),this._readCursor=this._writeCursor=this._left=0,this._moveReadCursor=!1}get length(){return this._queue.length}get left(){return this._left}toArray(){return Array.from(this._queue)}add(e){this._moveReadCursor&&(this._readCursor=this.nextCursor(this._readCursor)),this._queue[this._writeCursor]===null&&(this._left+=1),this._queue[this._writeCursor]=e,this._writeCursor=this.nextCursor(this._writeCursor),this._moveReadCursor=this._writeCursor===this._readCursor}nextCursor(e){return(e+1)%this._queue.length}next(){let e=this._queue[this._readCursor];return e&&(this._moveReadCursor=!1,this._queue[this._readCursor]=null,this._readCursor=this.nextCursor(this._readCursor),this._left-=1),e}};var Mt,ue,Jt=null,ps={getCameras:y.getCameras,getMicrophones:y.getMicrophones,getOutput:y.getOutput,hasCamera:y.hasCamera,hasMicrophone:y.hasMicrophone,getSavedCamera:y.getSavedCamera,getSavedMicrophone:y.getSavedMicrophone,getSavedOutput:y.getSavedOutput,hasCameraPermission:y.hasCameraPermission,hasMicrophonePermission:y.hasMicrophonePermission,hasPermissions:y.hasPermissions,getUserMedia:y.getUserMedia,getUserVideo:y.getUserVideo,getUserAudio:y.getUserAudio,saveDeviceId:y.saveDeviceId,isBrowserSupported:y.isBrowserSupported,isScreenCapturingSupported:y.isScreenCapturingSupported,os:y.os,isMobile:y.isMobile,browserName:y.browserName,browserVersion:y.browserVersion,baseChromeVersion:y.baseChromeVersion,getAudioContext:y.getAudioContext};function xa(a){ue=a}function La(a){Mt=a}function ls(a){Jt=a}function us(a){d.videoEffects=a}function ms(a){return o(this,null,function*(){if(d.set(a),y.browserName()==="Sferum"&&(d.platform=`SFERUM:${y.browserVersion()}`),ue||xa(new $t),Mt||La(()=>new Fe),d.debug&&(mr.default.disableLog(!1),c.toggle(!0)),c.log(`Calls SDK ${d.sdkVersion}`,a),yield y.init(),!y.isBrowserSupported())throw new N(ae.UNSUPPORTED);c.log("UserAgent:",navigator.userAgent),c.log("Screen resolution:",`${window.screen.width}x${window.screen.height}`),c.log("Permissions:",`Camera: ${y.hasCameraPermission()}, Mic: ${y.hasMicrophonePermission()}`),ue.init()})}function hs(s){return o(this,arguments,function*(a,e=[oe.AUDIO],t="",i=!1,r=!1,n){let p=[],l=[];if(Array.isArray(a)?p=a.length?a:[]:a&&(p=[a]),p.length&&(l=yield ue.getOkIdsByExternalIds(p),!l.length))throw new N(D.CALLEE_IS_OFFLINE);return Na(l,We.USER,e,t,i,r,n)})}function Na(p){return o(this,arguments,function*(a,e=We.USER,t,i="",r=!1,n=!1,s){if(V.current())throw c.error("There is already active call"),new N(D.FAILED);return new V(ue,Mt(),Jt).onStart(a,e,t,i,r,n,s)})}function _s(a){return o(this,null,function*(){return Ua(a)})}function Ua(i){return o(this,arguments,function*(a,e=X.USER,t){if(a===V.id())throw new Error("Push has already been processed");return new V(ue,Mt(),Jt).onPush(a,e,t)})}function gs(a){return o(this,null,function*(){return a&&(d.authToken=a),ue.authorize()})}function fs(){return o(this,arguments,function*(a=[oe.AUDIO]){return ut().accept(a)})}function Ss(){return o(this,null,function*(){let a=V.current();if(a)return a.decline()})}function vs(t){return o(this,arguments,function*(a,e=[oe.AUDIO]){return Ba(a,e)})}function Ba(a,e,t){return o(this,null,function*(){if(V.current())throw c.error("There is already active call"),new N(D.FAILED);return new V(ue,Mt(),Jt).onJoin({conversationId:a,mediaOptions:e,chatId:t})})}function Es(n){return o(this,arguments,function*(a,e=[oe.AUDIO],t,i,r){if(V.current())throw c.error("There is already active call"),new N(D.FAILED);return t&&(d.anonymToken=t),new V(ue,Mt(),Jt).onJoin({joinLink:a,mediaOptions:e,observedIds:i,payload:r})})}function Is(){return o(this,null,function*(){let a=V.current();if(a)return a.hangup();V.hangupAfterInit()})}function Ts(a,e){return o(this,null,function*(){let t=yield ue.getOkIdsByExternalIds([a]);if(!t.length)throw new Error("User not found");return Va(t[0],e)})}function Va(a,e){return o(this,null,function*(){let t=V.current();t&&(yield t.addParticipant(v.composeUserId(a,X.USER),e))})}function Cs(a,e=!1){return o(this,null,function*(){let t=yield ue.getOkIdsByExternalIds([a]);return Fa(t[0],e)})}function Fa(a,e=!1){return o(this,null,function*(){let t=V.current();t&&(yield t.removeParticipant(v.composeUserId(a,X.USER),e))})}function ys(a,e){return o(this,null,function*(){let t=yield y.saveDeviceId(a,e),i=V.current();return t&&i?i.changeDevice(a):Promise.reject()})}function Rs(a){return o(this,null,function*(){return Ha(a,!1)})}function Ha(a,e){return o(this,null,function*(){if(e){if(!d.audioShareCapabilityEnabled)throw new Error("Audio share capability is disabled");if(!a)throw new Error("Audio share without screen share is not allowed")}let t=V.current();return t?t.toggleScreenCapturing(a,e):Promise.reject()})}function Ps(a,e=!1){return o(this,null,function*(){let t=V.current();t&&(yield t.setVideoStream(a,e))})}function bs(a){return o(this,null,function*(){let e=V.current();e&&(yield e.toggleLocalVideo(a))})}function Ms(a){return o(this,null,function*(){let e=V.current();e&&(yield e.toggleLocalAudio(a))})}function As(a,e,t){return o(this,null,function*(){let i=V.current();if(i)return i.setLocalResolution(a,e,t)})}function Ds(a){return o(this,null,function*(){let e=V.current();e&&(yield e.changePriorities(a))})}function ks(a){return o(this,null,function*(){let e=V.current();e&&(yield e.changeParticipantState(a))})}function Os(a){return o(this,null,function*(){let e=V.current();e&&(yield e.updateDisplayLayout(a))})}function ws(a,e,t=!1){return o(this,null,function*(){let i=yield ue.getOkIdsByExternalIds([a]);return Ga(i[0],e,t)})}function Ga(a,e,t=!1){return o(this,null,function*(){let i=V.current();i&&(yield i.grantRoles(v.composeUserId(a,X.USER),e,t))})}function xs(){return o(this,arguments,function*(a=null,e,t=[]){let i=null;return a&&(i=(yield ue.getOkIdsByExternalIds([a]))[0]),Wa(i,e,t,fe.getDeviceIdx(a))})}function Wa(){return o(this,arguments,function*(a=null,e,t=[],i=0){let r=V.current();if(r){let n=a?v.composeParticipantId(a,X.USER,i):null;yield r.muteParticipant(n,e,t)}})}function Ls(a,e=!1){return o(this,null,function*(){let t=yield ue.getOkIdsByExternalIds([a]);return ja(t[0],e,fe.getDeviceIdx(a))})}function ja(a,e=!1,t=0){return o(this,null,function*(){let i=V.current();i&&(yield i.pinParticipant(v.composeParticipantId(a,X.USER,t),e))})}function Ns(a){return o(this,null,function*(){let e=V.current();e&&(yield e.updateMediaModifiers(a))})}function Us(a){return o(this,null,function*(){let e=V.current();e&&(yield e.changeOptions(a))})}function Bs(a,e=null){return o(this,null,function*(){let t=null;return e&&(t=(yield ue.getOkIdsByExternalIds([e]))[0]),Ka(a,t)})}function Ka(a,e=null){return o(this,null,function*(){let t=V.current();if(t){let i=e?v.composeUserId(e,X.USER):null;yield t.chatMessage(a,i)}})}function Vs(a=10){return o(this,null,function*(){let e=V.current();if(e)return e.chatHistory(a)})}function Fs(a,e=null){return o(this,null,function*(){let t=null;return e&&(t=(yield ue.getOkIdsByExternalIds([e]))[0]),qa(a,t,fe.getDeviceIdx(e))})}function qa(a,e=null,t=0){return o(this,null,function*(){let i=V.current();if(i){let r=e?v.composeParticipantId(e,X.USER,t):null;yield i.customData(a,r)}})}function Hs(){return o(this,arguments,function*(a="",e=!1,{onlyAdminCanShareMovie:t=!1}={}){return(yield ue.createConversation(v.uuid(),a,e,{onlyAdminCanShareMovie:t})).join_link})}function Gs(){return o(this,null,function*(){let a=V.current();return a?a.createJoinLink():Promise.reject()})}function Ws(){return o(this,null,function*(){let a=V.current();return a?a.removeJoinLink():Promise.reject()})}function js(a,e){return o(this,null,function*(){return ue.getAnonymTokenByLink(a,e)})}function Ks(a){let e=V.current();e&&e.setVolume(a)}function qs(a){d.forceRelayPolicy=a}function $s(a=!1,e=null,t=null,i="DIRECT_LINK",r=null){return o(this,null,function*(){let n=V.current();return n?n.startStream(a,e,t,i,r):Promise.reject()})}function Js(){return o(this,null,function*(){let a=V.current();return a?a.stopStream():Promise.reject()})}function Ys(a,e){return o(this,null,function*(){let t=V.current();if(t){let i=yield ue.getOkIdsByExternalIds([a]),r=fe.getDeviceIdx(a);return t.recordSetRole(v.composeParticipantId(i[0],X.USER,r),e)}return Promise.reject()})}function zs(){return o(this,null,function*(){let a=V.current();return a?a.getStreamInfo():Promise.reject()})}function Qs(a){return o(this,null,function*(){let e=V.current();return e?e.addMovie(a):Promise.reject()})}function Xs(a){return o(this,null,function*(){let e=V.current();return e?e.updateMovie(a):Promise.reject()})}function Zs(a){return o(this,null,function*(){let e=V.current();return e?e.removeMovie(a):Promise.reject()})}function eo(a){d.statisticsInterval=a;let e=V.current();if(e)return e.updateStatisticsInterval()}function to(a){mr.default.disableLog(!a),c.toggle(a)}function io(a,...e){!d.debugLog||c.send(a,"[external]",...e)}function ro(a){return o(this,null,function*(){let e=V.current();if(e)return e.videoEffect(a)})}function ao(a){return o(this,null,function*(){let e=V.current();e&&(yield e.setAudioStream(a))})}function no(a=null,e,t=!1){return o(this,null,function*(){return ut().getWaitingHall(a,e,t)})}function so(a,e=!1){return o(this,null,function*(){let t=ut(),i=yield ue.getOkIdsByExternalIds([a]);return t.promoteParticipant(v.composeUserId(i[0],X.USER),e)})}function oo(a){return o(this,null,function*(){return ut().getParticipantListChunk(a)})}function co(a){return o(this,null,function*(){return ut().getParticipants(a)})}function po(a){return o(this,null,function*(){return ut().feedback(a)})}function lo(a,e){return o(this,null,function*(){return ut().enableFeatureForRoles(a,e)})}function ut(){let a=V.current();if(!a)throw new Error("Conversation not found");return a}function uo(a){return o(this,null,function*(){yield ue.removeHistoryRecords(a)})}function mo(){return d.sdkVersion}
11
+ `,r=>{var n;r.error?this._onFrame(null,r.error):this._onFrame({type:r.frameType,timestamp:r.timestamp,duration:r.duration,data:r.data,byteLength:(n=r.data)==null?void 0:n.byteLength})},[],{readable:i,width:e,height:t,isVP9:this.isVP9(),framerate:d.screenFrameRate},[i])})}requestFrame(e=!1){this._sendToWorker(Ce.FRAME,{keyFrame:e})}isVP9(){return!0}destroy(){this._removeWorker(),c.debug("WebCodecsEncoder destroyed")}static isBrowserSupported(){return"VideoEncoder"in window&&"Worker"in window&&"EncodedVideoChunk"in window&&"MediaStreamTrackProcessor"in window}};var Mn=65536,zi=0,Pt=class{constructor(e,t){this._destroyed=!1;this._needKeyframe=!0;c.debug("ScreenCaptureSender started"),this.DATA_SIZE=d.consumerScreenDataChannelPacketSize-di,this._datachannel=t;let i=(r,n)=>{if(!this._destroyed){if(!r){c.warn("requestFrame failed, keyFrame: "+this._needKeyframe,n),this._needKeyframe=!0,this._requestFrame();return}this._send(r).catch(s=>{c.warn("sendFrame failed",s),this._needKeyframe=!0}).finally(()=>this._requestFrame())}};Rt.isBrowserSupported()?this._encoder=new Rt(e,i):this._encoder=new Vt(e,i),this._datachannel.onmessage=r=>{ha(r.data)&&(c.debug(`[${this._datachannel.label}] Requested keyframe`),this._needKeyframe=!0)},this._encoder.init().then(()=>this._requestFrame()).catch(r=>c.warn("ScreenCaptureSender init failed",r))}_requestFrame(){this._destroyed||(this._encoder.requestFrame(this._needKeyframe),this._needKeyframe=!1)}_wrapHeader(e,t,i,r,n){let s=ua(e,t,i,r,zi,this._encoder.isVP9(),n);return zi=(zi+1)%Mn,s}_stopPacket(){return this._wrapHeader(Date.now(),!1,!1,!1,null)}_send(e){return o(this,null,function*(){return new Promise((t,i)=>{this._sendChunk(e,0,t,i)})})}_sendChunk(e,t,i,r){if(!this._datachannel||this._datachannel.readyState!=="open"){r();return}let n=e.data.slice(t,t+this.DATA_SIZE),s=e.data.byteLength<=t+n.byteLength,p=this._wrapHeader(e.timestamp,!t,s,e.type==="key",n);this._datachannel.onbufferedamountlow=s?()=>{this._datachannel.bufferedAmount<=this._datachannel.bufferedAmountLowThreshold&&i()}:null;try{this._datachannel.send(p)}catch(l){c.warn("Error send data to DataChannel",l),r();return}s||v.setImmediate(()=>this._sendChunk(e,t+this.DATA_SIZE,i,r))}destroy(){this._datachannel.onbufferedamountlow=null,this._datachannel.onmessage=null,this._datachannel.readyState==="open"&&this._datachannel.send(this._stopPacket()),this._destroyed=!0,this._encoder.destroy(),c.debug("ScreenCaptureSender destroyed")}static isBrowserSupported(){return Rt.isBrowserSupported()||Vt.isBrowserSupported()}};var ie=class{static get sessionKey(){return ie._sessionKey}static set sessionKey(e){ie._sessionKey=e}static get sessionSecretKey(){return ie._sessionSecretKey}static set sessionSecretKey(e){ie._sessionSecretKey=e}static get accessToken(){return ie._accessToken}static set accessToken(e){ie._accessToken=e}static isEmpty(){return!ie._sessionKey||!ie._sessionSecretKey}};var S=class{static set(e){e.hasOwnProperty("voiceParams")&&(Object.assign(S._params.voiceParams,e.voiceParams),delete e.voiceParams),e.hasOwnProperty("specListenerParams")&&(Object.assign(S._params.specListenerParams,e.specListenerParams),delete e.specListenerParams),e.hasOwnProperty("unifiedPlanBrowsers")&&(Object.assign(S._params.unifiedPlanBrowsers,e.unifiedPlanBrowsers),delete e.unifiedPlanBrowsers),e.hasOwnProperty("apiAuth")&&(ie.accessToken=e.apiAuth.accessToken,ie.sessionKey=e.apiAuth.sessionKey,ie.sessionSecretKey=e.apiAuth.sessionSecretKey),Object.assign(S._params,v.objectFilterOutValues(e,void 0))}static get(e){return S._params[e]}static get appName(){return"ok.calls.sdk.js"}static get appVersion(){return 1.1}static get sdkVersion(){return"2.6.2-beta.26"}static get debug(){return undefined}static get protocolVersion(){return S._params.joinFromMultipleDevices?6:5}static get platform(){return S._params.platform}static set platform(e){S._params.platform=e}static get clientType(){return S._params.clientType}static set clientType(e){S._params.clientType=e}static get externalUserType(){return S._params.externalUserType}static set externalUserType(e){S._params.externalUserType=e}static get device(){return S._params.device}static get apiKey(){return S._params.apiKey}static get apiEnv(){return S._params.apiEnv}static get apiEndpoint(){switch(S.apiEnv){case"AUTO":case"PROD":return"https://api.mycdn.me";case"PROD_OK":return"https://api.ok.ru";case"TEST":return"https://apitest.ok.ru/api";case"VIDEOTEST":return"https://videotestapi.ok.ru/api";default:return S._params.apiEnv}}static get authToken(){return S._params.authToken}static set authToken(e){S._params.authToken=e}static get anonymToken(){return S._params.anonymToken}static set anonymToken(e){S._params.anonymToken=e}static get domain(){return S._params.domain}static get externalDomain(){return S._params.externalDomain}static get iceServers(){return S._params.iceServers}static set iceServers(e){S._params.iceServers=e}static get wssBase(){return S._params.wssBase}static set wssBase(e){S._params.wssBase=e}static get wssToken(){return S._params.wssToken}static set wssToken(e){S._params.wssToken=e}static get signalingReconnectDelay(){return S._params.signalingReconnectDelay}static get signalingReconnectMaxDelay(){return S._params.signalingReconnectMaxDelay}static get signalingReconnectMaxCount(){return S._params.signalingReconnectMaxCount}static get waitConnectionDelay(){return S._params.waitConnectionDelay}static get waitResponseDelay(){return S._params.waitResponseDelay}static get waitMessageDelay(){return S._params.waitMessageDelay}static get waitAnotherTabDelay(){return S._params.waitAnotherTabDelay}static get debugLog(){return S._params.debugLog}static get forceRelayPolicy(){return S._params.forceRelayPolicy}static set forceRelayPolicy(e){S._params.forceRelayPolicy=e}static get videoMinWidth(){return S._params.videoMinWidth}static get videoMaxWidth(){return S._params.videoMaxWidth}static set videoMaxWidth(e){S._params.videoMaxWidth=e}static get videoMinHeight(){return S._params.videoMinHeight}static get videoMaxHeight(){return S._params.videoMaxHeight}static set videoMaxHeight(e){S._params.videoMaxHeight=e}static get videoAspectRatio(){return S._params.videoAspectRatio}static get videoFrameRate(){return S._params.videoFrameRate}static get videoFacingMode(){return S._params.videoFacingMode}static get screenFrameRate(){return S._params.screenFrameRate}static get videoEffects(){return S._params.videoEffects}static set videoEffects(e){S._params.videoEffects=e}static get videoEffectMaxWidth(){return S._params.videoEffectMaxWidth}static set videoEffectMaxWidth(e){S._params.videoEffectMaxWidth=e}static get videoEffectMaxHeight(){return S._params.videoEffectMaxHeight}static set videoEffectMaxHeight(e){S._params.videoEffectMaxHeight=e}static get voiceParams(){return S._params.voiceParams}static get specListenerParams(){return S._params.specListenerParams}static get iceRestartWaitTime(){return S._params.iceRestartWaitTime}static get transportConnectionWaitTime(){return S._params.transportConnectionWaitTime}static get statisticsInterval(){return S._params.statisticsInterval}static set statisticsInterval(e){S._params.statisticsInterval=e}static get networkStatisticsInterval(){return S._params.networkStatisticsInterval}static get perfStatReportEnabled(){return S._params.perfStatReportEnabled}static get callStatReportEnabled(){return S._params.callStatReportEnabled}static get producerNotificationDataChannel(){return S._params.producerNotificationDataChannel}static get producerCommandDataChannel(){return S._params.producerCommandDataChannel}static get consumerScreenDataChannel(){return S._params.consumerScreenDataChannel&&Pt.isBrowserSupported()}static get producerScreenDataChannel(){return S._params.producerScreenDataChannel&&S.producerNotificationDataChannel&&yt.isBrowserSupported()}static get consumerScreenDataChannelPacketSize(){return S._params.consumerScreenDataChannelPacketSize}static get screenShareWebmBuilder(){return S._params.screenShareWebmBuilder}static get noiseSuppression(){return S._params.noiseSuppression}static set noiseSuppression(e){S._params.noiseSuppression=e}static get preferH264(){return S._params.preferH264}static get preferVP9(){return S._params.preferVP9}static get audioNack(){return S._params.audioNack}static get consumerScreenTrack(){return S._params.consumerScreenTrack&&S.consumerScreenDataChannel}static get producerScreenTrack(){return S._params.producerScreenTrack}static isUnifiedPlanSupported(e,t){let i=S._params.unifiedPlanBrowsers;return i.hasOwnProperty(e)?t>=i[e]:!1}static get movieShare(){return S._params.movieShare&&S.videoTracksCount>0}static get videoTracksCount(){return S.producerNotificationDataChannel?S._params.videoTracksCount:0}static get breakVideoPayloadTypes(){return S._params.breakVideoPayloadTypes}static get filteredMessages(){return S._params.filteredMessages}static get useParticipantListChunk(){return S._params.useParticipantListChunk&&S._params.videoTracksCount>0}static get participantListChunkInitIndex(){var e;return(e=S._params.participantListChunkInitIndex)!=null?e:0}static get participantListChunkInitCount(){var e;return(e=S._params.participantListChunkInitCount)!=null?e:null}static get serverAudioRed(){return S._params.serverAudioRed&&y.canPreferRed()}static get p2pAudioRed(){return S._params.p2pAudioRed&&y.canPreferRed()}static get h264spsPpsIdrInKeyframe(){return S._params.h264spsPpsIdrInKeyframe}static get batchParticipantsOnStart(){return S._params.batchParticipantsOnStart}static get filterObservers(){return S._params.filterObservers}static get muteMode(){return S._params.muteMode}static get preserveAudioTracks(){return S._params.preserveAudioTracks}static get audioShareCapabilityEnabled(){return y.isAudioShareSupported()&&S._params.audioShareCapabilityEnabled}},d=S;d._params={platform:"WEB",clientType:"PORTAL",externalUserType:"",device:"browser",apiKey:"",authToken:"",anonymToken:"",apiEnv:"AUTO",domain:"",externalDomain:"",iceServers:[],wssBase:"",wssToken:"",signalingReconnectDelay:1e3,signalingReconnectMaxDelay:5e3,signalingReconnectMaxCount:20,waitConnectionDelay:1e4,waitResponseDelay:1e4,waitMessageDelay:15e3,waitAnotherTabDelay:200,debugLog:!1,forceRelayPolicy:!1,videoMinWidth:428,videoMinHeight:240,videoMaxWidth:1280,videoMaxHeight:720,videoAspectRatio:16/9,videoFrameRate:25,screenFrameRate:15,videoEffects:null,videoEffectMaxWidth:640,videoEffectMaxHeight:360,iceRestartWaitTime:2e4,transportConnectionWaitTime:5e3,statisticsInterval:5e3,networkStatisticsInterval:2e4,perfStatReportEnabled:!0,callStatReportEnabled:!1,voiceParams:{smoothing:.8,minFreq:200,maxFreq:5e3,interval:500,threshold:.35,speakerLevelMultiplier:1.8},specListenerParams:{connectionTimeout:1e4,volumeTimeout:1e4},unifiedPlanBrowsers:{Firefox:10,Chrome:76,Safari:12},producerNotificationDataChannel:!0,producerCommandDataChannel:!0,consumerScreenDataChannel:!0,producerScreenDataChannel:!0,consumerScreenDataChannelPacketSize:16*1024,screenShareWebmBuilder:!1,noiseSuppression:!0,preferH264:!1,preferVP9:!0,audioNack:!0,consumerScreenTrack:!0,producerScreenTrack:!0,videoTracksCount:0,movieShare:!1,filteredMessages:!0,useParticipantListChunk:!1,participantListChunkInitIndex:0,participantListChunkInitCount:null,serverAudioRed:!1,p2pAudioRed:!1,h264spsPpsIdrInKeyframe:!1,breakVideoPayloadTypes:!1,batchParticipantsOnStart:!0,joinFromMultipleDevices:!0,filterObservers:!1,muteMode:!1,preserveAudioTracks:!1,audioShareCapabilityEnabled:!1};var Y=(l=>(l.WAITING_HALL="WAITING_HALL",l.WAITING="WAITING",l.CONNECTING="CONNECTING",l.CONNECTED="CONNECTED",l.RECONNECT="RECONNECT",l.ERROR="ERROR",l.HANGUP="HANGUP",l.PERMISSIONS="PERMISSIONS",l))(Y||{});function K(a,...e){let t=d.get(a);t&&setTimeout(t,0,...e)}function de(a,e,...t){if(d.filterObservers){if(Array.isArray(e)){if(e=e.filter(i=>!i.observer),!e.length)return}else if(e.observer)return}K(a,e,...t)}function Re(a){return Object.assign({},a)}function ot(a){return a.slice()}var Qi;(fo=>{function a(_,b){K("onLocalStream",_,Re(b))}fo.onLocalStream=a;function e(_,b){K("onScreenStream",_,Re(b))}fo.onScreenStream=e;function t(_,b){K("onLocalStreamUpdate",Re(_),b)}fo.onLocalStreamUpdate=t;function i(_){K("onLocalStatus",_)}fo.onLocalStatus=i;function r(_,b){de("onRemoteStream",_,b)}fo.onRemoteStream=r;function n(_,b){de("onRemoteLive",_,b)}fo.onRemoteLive=n;function s(_,b){de("onLocalLive",_,b)}fo.onLocalLive=s;function p(_,b){de("onRemoteLiveUpdate",_,b)}fo.onRemoteLiveUpdate=p;function l(_,b){de("onLocalLiveUpdate",_,b)}fo.onLocalLiveUpdate=l;function u(_,b){de("onRemoteScreenStream",_,b)}fo.onRemoteScreenStream=u;function P(_,b,te,Dt){de("onConversation",_,Re(b),Re(te),Dt)}fo.onConversation=P;function C(_){_&&K("onConversationParticipantListChunk",_)}fo.onConversationParticipantListChunk=C;function O(_,b,te){de("onRemoteMediaSettings",_,Re(b),te)}fo.onRemoteMediaSettings=O;function x(_,b){de("onLocalMediaSettings",_,Re(b))}fo.onLocalMediaSettings=x;function H(_,b){de("onRemoteSharedMovieInfo",_,Re(b))}fo.onRemoteSharedMovieInfo=H;function re(_,b){de("onRemoteSharedMovieStoppedInfo",_,Re(b))}fo.onRemoteSharedMovieStoppedInfo=re;function Se(_,b){de("onLocalSharedMovieInfo",_,Re(b))}fo.onLocalSharedMovieInfo=Se;function pe(_,b){de("onLocalSharedMovieStoppedInfo",_,Re(b))}fo.onLocalSharedMovieStoppedInfo=pe;function $e(_,b){de("onParticipantAdded",_,b)}fo.onParticipantAdded=$e;function le(_,b){de("onParticipantJoined",_,b)}fo.onParticipantJoined=le;function be(_,b,te){de("onRemoteParticipantState",_,Re(b),te)}fo.onRemoteParticipantState=be;function Me(_,b,te=null){de("onRemoteStatus",_,b,te)}fo.onRemoteStatus=Me;function Xe(_,b,te=null){de("onParticipantStatus",_,b,te)}fo.onParticipantStatus=Xe;function hr(){K("onPermissionsRequested")}fo.onPermissionsRequested=hr;function Z(_){K("onPermissionsError",_)}fo.onPermissionsError=Z;function _r(_,b){de("onRemoteRemoved",_,b)}fo.onRemoteRemoved=_r;function gr(_,b,te){K("onCallState",_,b,Re(te))}fo.onCallState=gr;function fr(_,b){K("onDeviceSwitched",_,b)}fo.onDeviceSwitched=fr;function $(_,b,te,Dt=!1,yi=!1,Ri=null,$a=null,Ja,Sr){let Ya=Sr?ot(Sr):void 0;K("onMuteStates",Re(_),ot(b),ot(te),Dt,yi,Ri,$a,Ja,Ya)}fo.onMuteStates=$;function Ti(_,b){de("onRolesChanged",_,ot(b))}fo.onRolesChanged=Ti;function Ci(_){K("onLocalRolesChanged",ot(_))}fo.onLocalRolesChanged=Ci;function g(_,b,te){de("onPinnedParticipant",_,b,te)}fo.onPinnedParticipant=g;function I(_){K("onLocalPin",_)}fo.onLocalPin=I;function R(_){K("onOptionsChanged",ot(_))}fo.onOptionsChanged=R;function A(){K("onCallAccepted")}fo.onCallAccepted=A;function m(){K("onRateNeeded")}fo.onRateNeeded=m;function w(_){de("onSpeakerChanged",_)}fo.onSpeakerChanged=w;function J(_){K("onVolumesDetected",ot(_))}fo.onVolumesDetected=J;function M(_,b){K("onLocalVolume",_,b)}fo.onLocalVolume=M;function ge(_,b){K("onJoinStatus",_,b)}fo.onJoinStatus=ge;function he(_,b){K("onHangup",_,b)}fo.onHangup=he;function He(_){K("onMultipartyChatCreated",Re(_))}fo.onMultipartyChatCreated=He;function xe(){K("onDeviceChange")}fo.onDeviceChange=xe;function L(_){K("onFingerprintChange",_)}fo.onFingerprintChange=L;function Le(){K("onTokenExpired")}fo.onTokenExpired=Le;function Ge(_,b,te=!1){K("onChatMessage",_,b,te)}fo.onChatMessage=Ge;function Ne(_,b,te=!1){K("onCustomData",_,b,te)}fo.onCustomData=Ne;function At(_,b,te,Dt,yi,Ri){K("onRecordStarted",_,b,te,Dt,yi,Ri)}fo.onRecordStarted=At;function mt(){K("onRecordStopped")}fo.onRecordStopped=mt;function q(_){K("onLocalNetworkStatusChanged",_)}fo.onLocalNetworkStatusChanged=q;function _e(_){K("onNetworkStatusChanged",_)}fo.onNetworkStatusChanged=_e;function Ie(_,...b){K("onDebugMessage",_,...b)}fo.onDebugMessage=Ie;function Q(_,b){let te=Object.assign({},_,{memory:b});K("onStatistics",te)}fo.onStatistics=Q;function z(){K("onAutoplayError")}fo.onAutoplayError=z;function se(_,b,te){K("onChatRoomUpdated",_,b,te)}fo.onChatRoomUpdated=se;function Je(_){K("onRemoteMixedAudioStream",_)}fo.onRemoteMixedAudioStream=Je;function ho(_){K("onJoinLinkChanged",_)}fo.onJoinLinkChanged=ho;function _o(_){K("onFeedback",_)}fo.onFeedback=_o;function go(_){K("onFeaturesPerRoleChanged",_)}fo.onFeaturesPerRoleChanged=go})(Qi||(Qi={}));var f=Qi;var Xi=(r=>(r.DEBUG="DEBUG",r.LOG="LOG",r.WARN="WARN",r.ERROR="ERROR",r))(Xi||{}),Zi;(le=>{let a="📞",e=(be,...Me)=>{f.onDebugMessage(be,...Me)},t=!1,i=(be,Me)=>(...Xe)=>{be(...Xe),Qr(Me,Xe)},r=console.debug.bind(console,a),n=console.log.bind(console,a),s=console.warn.bind(console,a),p=console.error.bind(console,a),l=e.bind(null,"DEBUG"),u=e.bind(null,"LOG"),P=e.bind(null,"WARN"),C=e.bind(null,"ERROR");le.debug=l,le.log=u,le.warn=P,le.error=C;function Se(){return t}le.enabled=Se;function pe(be){t=be,d.debugLog&&Di(),be?(le.debug=d.debugLog?i(r,"DEBUG"):r,le.log=d.debugLog?i(n,"LOG"):n,le.warn=d.debugLog?i(s,"WARN"):s,le.error=d.debugLog?i(p,"ERROR"):p):(le.debug=d.debugLog?i(l,"DEBUG"):l,le.log=d.debugLog?i(u,"LOG"):u,le.warn=d.debugLog?i(P,"WARN"):P,le.error=d.debugLog?i(C,"ERROR"):C)}le.toggle=pe;function $e(be,...Me){switch(be){case"DEBUG":le.debug(...Me);break;case"LOG":le.log(...Me);break;case"WARN":le.warn(...Me);break;case"ERROR":le.error(...Me);break}}le.send=$e})(Zi||(Zi={}));var c=Zi;var ct=(i=>(i.USER="USER",i.ANONYM="ANONYM",i.GROUP="GROUP",i))(ct||{}),Ee;(p=>{function a(l){return l.length?typeof l[0]=="object"?l:l.map(u=>e(u)):[]}p.fromIds=a;function e(l,u="USER"){return{id:l,type:u}}p.fromId=e;function t(l){return{id:l.id,type:l.type==="ANONYM"?"ANONYM":"USER"}}p.fromSignaling=t;function i(l){return`{"id":"${l.id}","type":"${l.type}"}`}p.toString=i;function r(l,u="USER"){return i(e(l,u))}p.fromIdToString=r;function n(l){try{return JSON.parse(l)}catch(u){throw new Error(`Failed to parse ExternalId from string '${l}'`)}}p.fromString=n;function s(l,u){return l.id===u.id&&l.type===u.type}p.compare=s})(Ee||(Ee={}));var fe;(r=>{function a(n,s="USER",p=0){return{id:n,type:s,deviceIdx:p}}r.fromId=a;function e(n){return`{"id":"${n.id}","type":"${n.type}","deviceIdx":"${n.deviceIdx}"}`}r.toString=e;function t(n,s){return Object.assign({deviceIdx:s},Ee.fromSignaling(n))}r.fromSignaling=t;function i(n){return n&&typeof n=="object"?n.deviceIdx:0}r.getDeviceIdx=i})(fe||(fe={}));var An="kf";function Ft(a){return a.stopStream}function er(a){return a.keyFrameRequested}function _a(a){if(Ft(a))return"ss";if(er(a))return An;let e="";return a.priority!==void 0&&(e+="p="+a.priority),a.width!==void 0&&a.height!==void 0&&(e!==""&&(e+=":"),e+="sz="+Math.round(a.width)+"x"+Math.round(a.height)),a.fit!==void 0&&(e!==""&&(e+=":"),e+="fit="+a.fit),e}var Pe=(n=>(n.CAMERA="CAMERA",n.SCREEN="SCREEN",n.STREAM="STREAM",n.MOVIE="MOVIE",n.AUDIOSHARE="AUDIOSHARE",n))(Pe||{}),ga="s",fa="m";function qe(a){return a.participantId+(a.mediaType?Et+ga+a.mediaType:"")+(a.streamName?Et+fa+a.streamName:"")}function Ht(a){let e=a.split(Et),t=e.shift();if(!t)throw new Error("Illegal stream description: "+a);let i=null,r,n=0;for(let p of e)switch(p.charAt(0)){case ga:i=Dn(p.slice(1));break;case fa:r=p.slice(1);break;case Zt:n=Number.parseInt(p.slice(1),10);break;default:throw new Error("Unexpected parameter type "+p.charAt(0)+" in stream description "+a)}return{participantId:v.compose(t,n),mediaType:i,streamName:r}}function Dn(a){for(let e of Object.keys(Pe))if(e===a)return Pe[e];return null}function tr(a,e){return a===null||e===null?a===null&&e===null:!(a.maxDimension!==e.maxDimension||a.maxBitrateK!==e.maxBitrateK||a.maxFramerate!==e.maxFramerate||a.degradationPreference!==e.degradationPreference)}function li(a,e){return!(!tr(a.camera,e.camera)||!tr(a.screenSharing,e.screenSharing))}function ir(a,e){return{camera:Object.assign({},a.camera,e.camera),screenSharing:Object.assign({},a.screenSharing,e.screenSharing)}}function Sa(a){try{return btoa(JSON.stringify(a))}catch(e){c.warn("WaitingParticipant: failed convert to string",a,e)}return null}function va(a){try{return JSON.parse(atob(a))}catch(e){c.warn("WaitingParticipant: failed convert from string",a,e)}return null}var bt=(a,e)=>v.objectReduce(a,(t,i,r)=>(i===e&&t.push(r),t),[]);var Gt=class{constructor(e){this._fixNoPacketsApplied=!1;this._fixNoPacketsChecked=!1;this._fixTooManyPacketsApplied=!1;this._fixTooManyPacketsSucceeded=!1;this._fixTooManyPacketsFailed=!1;this._mediaSource=e}_fixAudioDeviceNoPackets(e){if(!(this._fixNoPacketsApplied&&this._fixNoPacketsChecked)){if(this._fixNoPacketsApplied&&!this._fixNoPacketsChecked){this._fixNoPacketsChecked=!0,h.log(E.ERROR,`audio_device_recover_${e.bandwidth?"success":"fail"}`);return}!this._fixNoPacketsApplied&&!e.bandwidth&&(this._fixNoPacketsApplied=!0,h.log(E.ERROR,"audio_device_recover"),this._mediaSource.toggleAudio(!0))}}_fixAudioDeviceTooManyPackets(e){if(this._fixTooManyPacketsSucceeded||this._fixTooManyPacketsFailed)return;let t=75,i=Date.now();if(!this._lastPacketsSentTime)e.packetsSent>0&&(this._lastPacketsSentTime=i,this._lastPacketsSent=e.packetsSent);else if(i-this._lastPacketsSentTime>500){let r=(e.packetsSent-this._lastPacketsSent)*1e3/(i-this._lastPacketsSentTime);this._lastPacketsSentTime=i,this._lastPacketsSent=e.packetsSent,this._fixTooManyPacketsApplied?r>t?(c.log("Failed to fix RV"),h.log(E.ERROR,"audio_device_recover_rv_fail"),this._fixTooManyPacketsFailed=!0):i-this._fixTooManyPacketsTime>6e4&&(c.log("Fixed RV"),h.log(E.ERROR,"audio_device_recover_rv_success"),this._fixTooManyPacketsSucceeded=!0):r>t&&(this._fixTooManyPacketsApplied=!0,c.log("Trying to fix RV"),this._mediaSource.toggleAudio(!0),this._fixTooManyPacketsTime=i)}}fix(e){if(!this._mediaSource)return;let t=e.find(i=>i.kind===ce.audio);!t||(this._fixAudioDeviceNoPackets(t),this._fixAudioDeviceTooManyPackets(t))}};var ui=class{constructor(){this._output=null;this._volume=1;this._features={setSinkId:!!Audio.prototype.setSinkId}}add(e){this.destroy(),this._output={},this._output.audioTrack=e,this._initAudioElement()}remove(e){!this._output||this._output.audioTrack!==e||this.destroy()}get volume(){return this._volume}set volume(e){this._volume=Math.max(0,Math.min(1,e)),this._output&&this._output.audioElement&&(this._output.audioElement.volume=this._volume)}_initAudioElement(){var s;if(d.muteMode||!((s=this._output)==null?void 0:s.audioTrack))return;let e=y.browserName()!=="Safari"||y.isMobile(),t=document.createElement(e?"audio":"video");t.muted=!1,t.volume=this._volume,t.preload="auto";let i=()=>{c.warn("Error on play audio"),f.onAutoplayError()},r=p=>{t.srcObject=new MediaStream([p]),t.load();let l=t.play();l?l.catch(i):i()},n=()=>{var l;c.debug("Recover audio playback");let p=(l=this._output)==null?void 0:l.audioTrack;p?r(p):c.warn("Broken audio track")};t.onpause=n,t.onstalled=n,t.onerror=n,r(this._output.audioTrack),this._output.audioElement=t}_stopAudioElement(){var e,t,i;((e=this._output)==null?void 0:e.audioElement)&&(this._output.audioElement.pause(),this._output.audioElement.srcObject=null),(i=(t=this._output)==null?void 0:t.audioTrack)==null||i.stop()}destroy(){!this._output||(this._stopAudioElement(),this._output=null)}changeOutput(){return o(this,null,function*(){var e,t,i;try{if(!this._features.setSinkId)throw new Error('Feature "setSinkId" is not supported');if(!((e=this._output)==null?void 0:e.audioElement))throw new Error("Audio Element is not initialized");let r=y.getSavedOutput();r&&(yield(i=(t=this._output.audioElement).setSinkId)==null?void 0:i.call(t,r.deviceId))}catch(r){throw h.log(E.ERROR,"change_output"),c.error("Output change failed",r),r}})}};var kn=90,On=3,mi=class extends ee{constructor(){super(...arguments);this._lastMemoryStat={percent:0,bytes:0}}onRemoteDataStats(e,t){this._calcMemory(),e.inbound.rtps.map(i=>{let r=typeof i.userId=="string"&&t[i.userId]||null;i.userId=r==null?void 0:r.externalId}),f.onStatistics(e,this._lastMemoryStat)}_calcMemory(){var r;let e=(r=window==null?void 0:window.performance)==null?void 0:r.memory;if(!e||!e.usedJSHeapSize||!e.jsHeapSizeLimit)return;let t=Number((100*e.usedJSHeapSize/e.jsHeapSizeLimit).toFixed(2)),i=Number((e.usedJSHeapSize/1024/1024).toFixed(1));t>kn?c.warn(`High memory usage: ${t}% (${i} MiB)`):(!this._lastMemoryStat.percent||Math.abs(t-this._lastMemoryStat.percent)>=On)&&(c.debug(`Memory usage: ${t}% (${i} MiB)`),this._lastMemoryStat.percent=t,this._lastMemoryStat.bytes=e.usedJSHeapSize)}};var wn=44100,Wt=class{constructor(e,t){this._analyser=null;this._gainNode=null;this._fftBins=null;this._mediaStreamSource=null;this._lastSmoothedLevel=0;this._trackId=e,this._stream=t;try{let i=y.getAudioContext();this._gainNode=i.createGain(),this._gainNode.gain.value=1e-5,this._gainNode.connect(i.destination),this._analyser=i.createAnalyser(),this._analyser.fftSize=1024,this._analyser.smoothingTimeConstant=0,this._analyser.connect(this._gainNode),this._fftBins=new Uint8Array(this._analyser.frequencyBinCount),this._mediaStreamSource=i.createMediaStreamSource(t),this._mediaStreamSource.connect(this._analyser)}catch(i){}}get stream(){return this._stream}get trackId(){return this._trackId}_getBins(){if(!this._fftBins||!this._analyser)return new Uint8Array;this._analyser.getByteFrequencyData(this._fftBins);let e=wn/this._fftBins.length,t=Math.ceil(d.voiceParams.minFreq/e),i=Math.floor(d.voiceParams.maxFreq/e);return this._fftBins.subarray(t,i)}getLevel(){let e=this._getBins(),i=e.reduce((n,s)=>n+s,0)/e.length/255,r=this._lastSmoothedLevel*d.voiceParams.smoothing+i*(1-d.voiceParams.smoothing);return this._lastSmoothedLevel=r,{real:i,smoothed:r}}destroy(){this._mediaStreamSource&&(this._mediaStreamSource.disconnect(),this._mediaStreamSource=null),this._gainNode&&(this._gainNode.disconnect(),this._gainNode=null),this._analyser&&(this._analyser.disconnect(),this._analyser=null,this._fftBins=null,this._lastSmoothedLevel=0)}};var hi=class extends ee{constructor(e){super();this._detector=null;this._track=null;this._interval=null;let t=()=>{this._detector&&f.onLocalVolume(this._detector.getLevel().real,e.getMediaSettings().isAudioEnabled),this._interval=window.setTimeout(t,d.voiceParams.interval)};this._interval=window.setTimeout(t,d.voiceParams.interval);let i=()=>{let r=e.getStream();r&&this.init(r)};this.subscribe(e,Ae.SOURCE_CHANGED,r=>{r.kind===ce.audio&&r.mediaSettings.isAudioEnabled&&i()}),i()}init(e){this._stopDetector();let t=e.getAudioTracks();t.length&&(this._track=t[0].clone(),this._detector=new Wt("local",new MediaStream([this._track])))}_stopDetector(){this._detector&&(this._detector.destroy(),this._detector=null),this._track&&(this._track.stop(),this._track=null)}destroy(){this.unsubscribe(),this._interval&&(window.clearTimeout(this._interval),this._interval=null),this._stopDetector()}};var Ea="videochat-epi",xn=5e3,Ln=3e4,dt=class extends ee{constructor(e,t,i=!1){super();this._previousTimestamp=0;this._previousCallStatReportTimestamp=0;this._previousCallStatReport={nack_sent:0,nack_received:0,pli_sent:0,pli_received:0,fir_sent:0,fir_received:0,frames_dropped:0,jitter_video:0,jitter_audio:0,interframe_delay_variance:0,total_audio_samples_received:0,concealed_audio_samples:0,inserted_audio_samples_for_deceleration:0,removed_audio_samples_for_acceleration:0,silent_concealed_audio_samples:0,audio_concealment_events:0,total_audio_energy:0};this._signaling=t,this._directTopology=i,this.subscribe(e,F.REMOTE_DATA_STATS,this._handleStats.bind(this))}destroy(){this.unsubscribe()}static getEstimatedPerformanceIndex(){try{let e=parseInt(localStorage.getItem(Ea)||"",10);return isNaN(e)?0:e}catch(e){return 0}}_handleStats(e){return o(this,null,function*(){if(!e.inbound||!e.inbound.rtps)return;let t=Date.now();!this._directTopology&&d.perfStatReportEnabled&&this._previousTimestamp+xn<=t&&(yield this.reportPerfStats(e),this._previousTimestamp=t),d.callStatReportEnabled&&this._previousCallStatReportTimestamp+Ln<=t&&(this._reportCallStats(e),this._previousCallStatReportTimestamp=t)})}reportPerfStats(e){return o(this,null,function*(){let t=e.inbound.rtps.reduce((i,r)=>(r.kind==="video"&&(i.framesDecoded+=r.framesDecoded||0,i.framesReceived+=r.framesReceived||0),i),{framesDecoded:0,framesReceived:0});if(t.framesDecoded)try{let i=yield this._signaling.reportPerfStat(t);localStorage.setItem(Ea,i.estimatedPerformanceIndex)}catch(i){}})}_reportCallStats(e){let t={nack_received:0,pli_received:0,fir_received:0,frames_dropped:0,jitter_video:0,jitter_audio:0,interframe_delay_variance:0,nack_sent:0,pli_sent:0,fir_sent:0,total_audio_samples_received:0,concealed_audio_samples:0,silent_concealed_audio_samples:0,inserted_audio_samples_for_deceleration:0,removed_audio_samples_for_acceleration:0,audio_concealment_events:0,total_audio_energy:0,inbound_video_count:0,inbound_audio_count:0};e.inbound.rtps.reduce((r,n)=>(n.kind==="video"?(n.framesReceived&&(r.jitter_video=r.jitter_video*r.inbound_video_count/(r.inbound_video_count+1)+n.jitter*1e3/(r.inbound_video_count+1),r.interframe_delay_variance=r.interframe_delay_variance*r.inbound_video_count/(r.inbound_video_count+1)+n.interframeDelayVariance*1e6/(r.inbound_video_count+1),r.inbound_video_count++),r.frames_dropped+=n.framesDropped,r.nack_sent+=n.nackCount,r.pli_sent+=n.pliCount,r.fir_sent+=n.firCount):(n.totalSamplesReceived&&(r.jitter_audio=r.jitter_audio*r.inbound_audio_count/(r.inbound_audio_count+1)+n.jitter*1e3/(r.inbound_audio_count+1),r.total_audio_energy=r.total_audio_energy*r.inbound_audio_count/(r.inbound_audio_count+1)+n.totalAudioEnergy/(r.inbound_audio_count+1),r.inbound_audio_count++),r.total_audio_samples_received+=n.totalSamplesReceived,r.inserted_audio_samples_for_deceleration+=n.insertedSamplesForDeceleration,r.removed_audio_samples_for_acceleration+=n.removedSamplesForAcceleration,r.concealed_audio_samples+=n.concealedSamples,r.silent_concealed_audio_samples+=n.silentConcealedSamples,r.audio_concealment_events+=n.concealmentEvents),r),t),e.outbound.rtps.reduce((r,n)=>(n.kind==="video"&&(r.nack_received+=n.nackCount,r.pli_received+=n.pliCount,r.fir_received+=n.firCount),r),t);let i={call_topology:this._directTopology?"D":"S",nack_sent:t.nack_sent-this._previousCallStatReport.nack_sent,nack_received:t.nack_received-this._previousCallStatReport.nack_received,pli_sent:t.pli_sent-this._previousCallStatReport.pli_sent,pli_received:t.pli_received-this._previousCallStatReport.pli_received,fir_sent:t.fir_sent-this._previousCallStatReport.fir_sent,fir_received:t.fir_received-this._previousCallStatReport.fir_received,frames_dropped:t.frames_dropped-this._previousCallStatReport.frames_dropped};if(t.jitter_video&&(i.jitter_video=t.jitter_video),t.jitter_audio&&(i.jitter_audio=t.jitter_audio),t.interframe_delay_variance&&(i.interframe_delay_variance=t.interframe_delay_variance),t.total_audio_samples_received){let r=t.total_audio_samples_received-this._previousCallStatReport.total_audio_samples_received,n=t.inserted_audio_samples_for_deceleration-this._previousCallStatReport.inserted_audio_samples_for_deceleration,s=t.removed_audio_samples_for_acceleration-this._previousCallStatReport.removed_audio_samples_for_acceleration,p=t.concealed_audio_samples-this._previousCallStatReport.concealed_audio_samples,l=t.silent_concealed_audio_samples-this._previousCallStatReport.silent_concealed_audio_samples,u=t.audio_concealment_events-this._previousCallStatReport.audio_concealment_events;i.inserted_audio_samples_for_deceleration=n/r*1e3,i.removed_audio_samples_for_acceleration=s/r*1e3,i.concealed_audio_samples=p/r*1e3,i.concealed_silent_audio_samples=l/r*1e3,i.concealment_audio_avg_size=p/u,i.total_audio_energy=t.total_audio_energy}h.logCustom("callStat",i),c.log("Sent call stats",i),this._previousCallStatReport=t}};var Nn=1e3;function me(a,e,t=0){return e in a&&a[e]?a[e]:t}function Ia(...a){return e=>{for(let t of a)if(t(e))return!0;return!1}}function et(a,e){return t=>t[a]===e}function Un(a){return(e,t)=>e[a]-t[a]}function _i(a,e){return e.reduce((t,i)=>(t[i[a]]=i,t),{})}function Bn(a){let e={},t=[];for(let i of a)e[i.id]||(e[i.id]=!0,t.push(i));return t}function Vn(a){return a!==null&&typeof a=="object"&&!Array.isArray(a)}function rr(a){return Object.keys(a).filter(e=>a[e]!==void 0).map(e=>[e,a[e]]).reduce((e,t)=>(e[t[0]]=Vn(t[1])?rr(t[1]):t[1],e),{})}function Fn(a){let e=[];for(let t of a)t.forEach(i=>e.push(i));return e}function Hn(a){return o(this,null,function*(){let e=[];return RTCRtpReceiver.prototype.getStats?(e.push(...a.getReceivers().map(t=>t.getStats())),e.push(...a.getSenders().map(t=>t.getStats()))):e.push(a.getStats()),Promise.all(e).then(Fn).then(Bn)})}function Gn(a){let e=a.filter(et("type","candidate-pair")).sort(Un("priority")).find(Ia(et("nominated",!0),et("selected",!0)));if(!e)return{totalRoundTripTime:0,currentRoundTripTime:0,bytesSent:0,bytesReceived:0};let t={totalRoundTripTime:e.totalRoundTripTime||0,currentRoundTripTime:e.currentRoundTripTime||0,bytesSent:e.bytesSent,bytesReceived:e.bytesReceived},i=a.find(et("id",e.remoteCandidateId));i&&(t=Object.assign({},t,{remote:{type:i.candidateType,address:i.ip||i.address,port:i.port,protocol:i.protocol}}));let r=a.find(et("id",e.localCandidateId));return r&&(t=Object.assign({},t,{local:{type:r.candidateType,address:r.ip||r.address,port:r.port,protocol:r.protocol,relayProtocol:r.relayProtocol,networkType:r.networkType}})),rr(t)}function Wn(a,e){let t=_i("id",a),i=a.filter(Ia(et("type","inbound-rtp"),et("type","outbound-rtp")));y.browserName()==="Firefox"&&(i=Object.values(i.reduce((n,s)=>{if(!n[s.ssrc])n[s.ssrc]=s;else{let p=Object.assign({},n[s.ssrc],s),l=n[s.ssrc].isRemote?s:n[s.ssrc];p.id=l.id,p.type=l.type,delete p.isRemote,delete p.remoteId,n[p.ssrc]=p}return n},{})));let r={};if(y.browserName()==="Safari"){let n=a.filter(et("type","track"));r=_i("trackIdentifier",n)}return i.map(n=>{let s=Number(n.ssrc),p=n.mediaType||n.kind,l=n.trackId,u=n.type,P=n.codecId;if(y.browserName()==="Safari"){let O=/^.+_([\d]+)$/.exec(n.id);if(O&&(s=parseInt(O[1],10)),p=n.id.indexOf("Audio")>0?"audio":"video",e[s]){let x=p+"-"+e[s];r[x]&&(l=r[x].id)}}if(!u||!s||!p)return null;let C={ssrc:s,type:u,kind:p,bytesReceived:me(n,"bytesReceived"),bytesSent:me(n,"bytesSent"),jitter:me(n,"jitter"),packetsLost:me(n,"packetsLost"),packetsReceived:me(n,"packetsReceived"),packetsSent:me(n,"packetsSent"),fractionLost:me(n,"fractionLost"),pliCount:me(n,"pliCount"),firCount:me(n,"firCount"),nackCount:me(n,"nackCount"),userId:e[s]};if(p==="video"){let O=me(n,"framesDecoded"),x=me(n,"totalInterFrameDelay"),H=me(n,"totalSquaredInterFrameDelay");C.interframeDelayVariance=(H-x*x/O)/O}if(p==="audio"&&(C.totalSamplesReceived=me(n,"totalSamplesReceived"),C.concealedSamples=me(n,"concealedSamples"),C.insertedSamplesForDeceleration=me(n,"insertedSamplesForDeceleration"),C.removedSamplesForAcceleration=me(n,"removedSamplesForAcceleration"),C.silentConcealedSamples=me(n,"silentConcealedSamples"),C.concealmentEvents=me(n,"concealmentEvents"),C.totalAudioEnergy=me(n,"totalAudioEnergy")),P&&t[P]){let O=t[P];C.clockRate=O.clockRate,C.mimeType=O.mimeType}if(l&&t[l]){let O=t[l];C.frameHeight=O.frameHeight,C.frameWidth=O.frameWidth,C.framesDecoded=O.framesDecoded,C.framesReceived=O.framesReceived,C.framesDropped=O.framesDropped}return rr(C)}).filter(n=>!!n)}function jn(a,e){if(!e||!e.rtps||!a.rtps)return a;let t=_i("ssrc",a.rtps),i=_i("ssrc",e.rtps),r=(a.timestamp-e.timestamp)/1e3;return!t||!i||Object.keys(t).forEach(n=>{let s=t[n],p=i[n];if(!(!s||!p)){if(s.bytesReceived&&s.bytesReceived>p.bytesReceived&&(s.bandwidth=Math.round((s.bytesReceived-p.bytesReceived)/r)),s.bytesSent&&s.bytesSent>p.bytesSent&&(s.bandwidth=Math.round((s.bytesSent-p.bytesSent)/r)),s.packetsReceived)if(s.packetsReceived>p.packetsReceived||s.packetsLost>p.packetsLost){let l=s.packetsLost-p.packetsLost,u=s.packetsReceived-p.packetsReceived;s.packetLoss=parseFloat((100*l/(l+u)).toFixed(2))}else s.packetLoss=0;s.framesDropped&&p.framesDropped&&s.framesDropped>p.framesDropped&&(s.framesDroppedDelta=parseFloat(((s.framesDropped-p.framesDropped)/r).toFixed(0)))}}),a}function jt(i,r){return o(this,arguments,function*(a,e,t={}){let n=yield Hn(a),s={timestamp:Date.now(),transport:Gn(n),rtps:Wn(n,t)};return e?jn(s,e):(yield v.delay(Nn),jt(a,s,t))})}var gi=.8,pt=class extends ee{constructor(e,t,i,r,n){super();this._remoteSDP={};this._remoteCandidates={};this._state=B.IDLE;this._isOpen=!1;this._remotePeerId=null;this._statInterval=null;this._settingsInterval=null;this._failedOnCreate=null;this._remoteStream=null;this._iceRestartTimeout=null;this._reconnectionTimeout=null;this._reconnectionPrevented=!1;this._fingerprint=null;this._neverConnected=!0;this._prevConsumerSettings={};this._lastNetworkStat={rtt:0,loss:0,date:0};this._remoteNetworkStat={rtt:0,loss:0};this._networkLimits={badNet:{loss:3,rtt:1e3},goodNet:{loss:.5,rtt:600}};if(this._signaling=i,this._mediaSource=r,this._participantId=e,this._isMaster=t,this._serverSettings=n,this._perfStatReporter=new dt(this,i,!0),this.subscribe(this._signaling,Te.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._mediaSource,Ae.TRACK_REPLACED,this._onReplacedTrack.bind(this)),this.subscribe(this._mediaSource,Ae.SOURCE_CHANGED,this._applySettings.bind(this)),this._pc=new RTCPeerConnection({iceServers:d.iceServers,iceTransportPolicy:d.forceRelayPolicy?"relay":"all"},{optional:[{googSuspendBelowMinBitrate:!1}]}),this._pc.onicecandidate=this._handleIceCandidate.bind(this),this._pc.ontrack=this._onAddTrack.bind(this),this._pc.oniceconnectionstatechange=this._onIceConnectionStateChange.bind(this),this._pc.onconnectionstatechange=this._onConnectionStateChange.bind(this),this._pc.onsignalingstatechange=this._onSignalingStateChange.bind(this),this._prevConsumerSettings={},this._isMaster){try{this._mediaSource.addTrackToPeerConnection(this._pc,!1,!0,d.p2pAudioRed),this._applySettings()}catch(s){h.log(E.ERROR,"addTrack-direct"),c.error("Unable to add media source tracks",s,{participantId:this._participantId}),this._failedOnCreate=s;return}this._createOffer(!1).catch(s=>{this._state===B.IDLE?this._failedOnCreate=s:this.close(s)})}this._startSettingsInterval(),this._startStatInterval()}getState(){return this._state}updateStatisticsInterval(){this._stopStatInterval();let e=this.getState();e!==B.IDLE&&e!==B.CLOSED&&e!==B.FAILED&&this._startStatInterval()}open(e=null){return o(this,null,function*(){if(this._isOpen){c.warn("DirectTransport: Already opened",{participantId:this._participantId});return}if(this._failedOnCreate){this.close(this._failedOnCreate);return}if(c.debug("DirectTransport: Open transport",{participantId:this._participantId}),this._isOpen=!0,this._remotePeerId=e,!this._isMaster)try{this._mediaSource.addTrackToPeerConnection(this._pc,!1,!0,d.p2pAudioRed),this._applySettings()}catch(i){h.log(E.ERROR,"addTrack-direct"),c.error("DirectTransport: Unable to add media source tracks",i,{participantId:this._participantId}),this.close(i);return}this._setState(B.OPENED);let t=e;if(!e){let i=Object.keys(this._remoteSDP);t=i[i.length-1]}if(t&&this._remoteSDP[t])try{yield this._setRemoteDescription(t,this._remoteSDP[t])}catch(i){this.close();return}this._remoteSDP={},this._remoteCandidates={}})}updateSettings(e){li(e,this._serverSettings)||(this._serverSettings=e,this._applySettings())}preventRestart(){this._reconnectionPrevented=!0}allowRestart(){this._reconnectionPrevented=!1}close(e){this._isOpen=!1,this._stopReconnection(),this._remoteStream&&(this._remoteStream.getTracks().forEach(t=>{t.stop(),this._triggerEvent(F.REMOTE_TRACK_REMOVED,this._remoteStream,t)}),this._remoteStream=null),this._stopStatInterval(),this._stopSettingsInterval(),this._pc&&(this._pc.onicecandidate=null,this._pc.ontrack=null,this._pc.oniceconnectionstatechange=null,this._pc.onconnectionstatechange=null,this._pc.onsignalingstatechange=null,this._pc.close()),this.unsubscribe(),e?(c.error("DirectTransport: Closed",e,{participantId:this._participantId}),this._setState(B.FAILED)):(c.debug("DirectTransport: Closed",{participantId:this._participantId}),this._setState(B.CLOSED)),this._triggerEvent(F.PEER_CONNECTION_CLOSED)}_setState(e){this._state!==e&&(c.debug(`DirectTransport: State changed to ${e}`,{participantId:this._participantId}),this._state=e,this._triggerEvent(F.STATE_CHANGED,e))}_onSignalingNotification(e){var t,i,r,n;switch(e.notification){case k.TRANSMITTED_DATA:this._handleTransmittedData(e);break;case k.SETTINGS_UPDATE:Object.assign(this._networkLimits.badNet,((t=e.settings)==null?void 0:t.badNet)||{}),Object.assign(this._networkLimits.goodNet,((i=e.settings)==null?void 0:i.goodNet)||{});break;case k.CUSTOM_DATA:e.data.hasOwnProperty("sdk")&&(this._remoteNetworkStat.rtt=((r=e.data.sdk)==null?void 0:r.rtt)||0,this._remoteNetworkStat.loss=((n=e.data.sdk)==null?void 0:n.loss)||0);break}}_handleTransmittedData(e){let t=e.data,i=v.getPeerIdString(e.peerId);v.composeMessageId(e)===this._participantId&&(t.candidate&&t.candidate.candidate?this._addIceCandidate(i,t.candidate).catch(this.close.bind(this)):t.sdp&&this._setRemoteDescription(i,t.sdp).catch(this.close.bind(this)))}_addIceCandidate(e,t){return o(this,null,function*(){if(this._isOpen&&(!this._remotePeerId||this._remotePeerId===e)&&this._pc&&this._pc.remoteDescription){c.debug("Add remote ice candidate",{participantId:this._participantId,candidate:t});try{yield this._pc.addIceCandidate(new RTCIceCandidate(t))}catch(i){throw h.log(E.ERROR,"addIceCandidate-direct"),c.error("Unable to add remote ice candidate",i,{participantId:this._participantId,candidate:t}),i}}else c.debug("Cache remote ice candidate",{participantId:this._participantId,candidate:t}),this._remoteCandidates[e]=this._remoteCandidates[e]||[],this._remoteCandidates[e].push(t)})}_setRemoteCandidates(e){return o(this,null,function*(){if(!this._remoteCandidates[e]){c.log(`No cached candidates found for peer ${e}`);return}let t=this._remoteCandidates[e];this._remoteCandidates[e]=[];for(let i of t)try{yield this._addIceCandidate(e,i)}catch(r){}})}_setRemoteDescription(e,t){return o(this,null,function*(){if(this._isOpen&&(!this._remotePeerId||this._remotePeerId===e)&&this._pc){c.debug("Add remote description",{participantId:this._participantId,sdp:t}),this._calcFingerprint(t.sdp);try{yield this._pc.setRemoteDescription(new RTCSessionDescription(t)),yield this._setRemoteCandidates(e)}catch(i){throw h.log(E.ERROR,"setRemoteDescription-direct"),c.error("Unable to set remote description",i,{participantId:this._participantId,sdp:t}),i}}else this._remoteSDP[e]=t})}_onAddTrack(e){c.debug("Added remote track",{participantId:this._participantId,kind:e.track.kind}),this._remoteStream?this._remoteStream.addTrack(e.track):(this._remoteStream=new MediaStream([e.track]),this._remoteStream.onremovetrack=t=>{this._triggerEvent(F.REMOTE_TRACK_REMOVED,this._remoteStream,t.track)}),this._triggerEvent(F.REMOTE_TRACK_ADDED,this._remoteStream,e.track)}_handleIceCandidate(e){return o(this,null,function*(){e.candidate&&this._signaling.ready&&(c.debug("Local ice candidate",{participantId:this._participantId,candidate:e.candidate}),yield this._signaling.sendCandidate(this._participantId,e.candidate))})}_onSignalingStateChange(){switch(c.debug(`DirectTransport: Signaling state changed to ${this._pc.signalingState}`,{participantId:this._participantId}),this._pc.signalingState){case"have-local-offer":let e=this._pc.localDescription;e?this._signaling.sendSdp(this._participantId,e).catch(this.close.bind(this)):this.close(new Error);break;case"have-remote-offer":this._createAnswer().catch(this.close.bind(this)).then(t=>o(this,null,function*(){return this._signaling.sendSdp(this._participantId,t)})).catch(this.close.bind(this));break}}_onIceConnectionStateChange(){switch(c.debug(`DirectTransport: Ice Connection state changed to ${this._pc.iceConnectionState}`,{participantId:this._participantId}),this._pc.iceConnectionState){case"checking":let e=this.getState();e===B.IDLE||e===B.OPENED?this._setState(B.CONNECTING):this._setState(B.RECONNECTING);break}}_onConnectionStateChange(){switch(c.debug(`DirectTransport: Connection state changed to ${this._pc.connectionState}`,{participantId:this._participantId}),h.log(E.ICE_CONNECTION_STATE,this._pc.connectionState),this._pc.connectionState){case"connected":this._neverConnected=!1,this._setState(B.CONNECTED),this._stopReconnection(),v.getPeerConnectionHostInfo(this._pc).then(e=>{e&&h.log(E.ICE_CONNECTION_TYPE,e.type)});break;case"failed":case"disconnected":this._reconnectionPrevented?this.close(new Error(`Ice connection ${this._pc.connectionState}`)):(this._setState(B.RECONNECTING),this._startReconnection());break;case"closed":this.close(new Error("Ice connection closed"));break}}_startReconnection(){this._reconnectionTimeout||this._iceRestartTimeout||(c.log("Waiting for reconnection...",{participantId:this._participantId}),this._reconnectionTimeout=window.setTimeout(()=>{this._reconnectionTimeout=null,this._neverConnected?this._requestTopologySwitch():this._startIceRestart()},d.transportConnectionWaitTime))}_requestTopologySwitch(){this._isMaster&&this._signaling.ready&&(c.log("Switch topology DIRECT to SERVER",{participantId:this._participantId}),this._signaling.switchTopology(ne.SERVER))}_stopReconnection(){this._reconnectionTimeout&&(clearTimeout(this._reconnectionTimeout),this._reconnectionTimeout=null),this._iceRestartTimeout&&(clearTimeout(this._iceRestartTimeout),this._iceRestartTimeout=null)}_startIceRestart(){this._isMaster?(h.log(E.ICE_RESTART),c.log("Ice restart",{participantId:this._participantId}),this._createOffer(!0).catch(this.close.bind(this))):c.debug("Waiting for ice restart...",{participantId:this._participantId}),this._iceRestartTimeout=window.setTimeout(()=>{this._iceRestartTimeout=null,c.error("Ice restart failed",{participantId:this._participantId}),h.log(E.ERROR,"iceRestart-direct"),this._requestTopologySwitch()},d.iceRestartWaitTime)}_createOffer(e){return o(this,null,function*(){let t={iceRestart:e,offerToReceiveAudio:!0,offerToReceiveVideo:!0};return c.debug("Create offer",{participantId:this._participantId,options:t}),this._pc.createOffer(t).catch(i=>{throw c.error("Unable to create offer",i,{participantId:this._participantId}),h.log(E.ERROR,"createOffer-direct"),i}).then(i=>o(this,null,function*(){return c.debug("Created offer",{participantId:this._participantId,offer:i}),i=pt._patchDescription(i),c.debug("Set local description",{participantId:this._participantId,offer:i}),this._calcFingerprint(i.sdp),this._pc.setLocalDescription(i).then(()=>this._pc.localDescription)})).catch(i=>{throw c.error("Unable to set local description",i,{participantId:this._participantId}),h.log(E.ERROR,"setLocalDescription-direct"),i})})}_createAnswer(){return o(this,null,function*(){return c.debug("Create answer",{participantId:this._participantId}),this._pc.createAnswer().catch(e=>{throw c.error("Unable to create answer",e,{participantId:this._participantId}),h.log(E.ERROR,"createAnswer-direct"),e}).then(e=>o(this,null,function*(){return c.debug("Created answer",{participantId:this._participantId,answer:e}),e=pt._patchDescription(e),c.debug("Set local description",{participantId:this._participantId,answer:e}),this._calcFingerprint(e.sdp),this._pc.setLocalDescription(e)})).then(()=>this._pc.localDescription).catch(e=>{throw c.error("Unable to set local description",e,{participantId:this._participantId}),h.log(E.ERROR,"setLocalDescription-direct"),e})})}static _patchDescription(e){let t=!!y.baseChromeVersion();return e.sdp=v.patchSDP(e.sdp,d.preferH264&&y.canPreferH264(),y.isBrokenH264(),d.preferVP9,d.h264spsPpsIdrInKeyframe,t&&d.audioNack,d.p2pAudioRed),e}_onReplacedTrack(e){this._pc&&(this._pc.getSenders().forEach(t=>{t.track&&t.track.kind===e.kind&&t.track.contentHint===e.contentHint&&(t.track.enabled=e.enabled,t.replaceTrack(e).catch(i=>{c.error("DirectTransport: Unable to replace track",i,{participantId:this._participantId}),h.log(E.ERROR,"replaceTrack-direct")}))}),this._applySettings())}_startStatInterval(){if(this._statInterval)return;let e=()=>{if(!this._pc){this._stopStatInterval();return}jt(this._pc,this._lastStat).then(t=>{this._lastStat=t;let i={inbound:{topology:ne.DIRECT,transport:t.transport,rtps:t.rtps.filter(r=>r.type==="inbound-rtp"?(r.userId=this._participantId,!0):!1)},outbound:{topology:ne.DIRECT,transport:t.transport,rtps:t.rtps.filter(r=>r.type==="outbound-rtp")}};this._checkBadNetwork(i),this._triggerEvent(F.REMOTE_DATA_STATS,i),this._statInterval=window.setTimeout(e,d.statisticsInterval)})};this._statInterval=window.setTimeout(e,d.statisticsInterval)}_stopStatInterval(){this._statInterval&&(window.clearTimeout(this._statInterval),this._statInterval=null)}_checkBadNetwork(e){if(!this._signaling.ready)return;let t=pe=>pe.rtt<=this._networkLimits.goodNet.rtt&&pe.loss<=this._networkLimits.goodNet.loss,i=pe=>pe.rtt>=this._networkLimits.badNet.rtt||pe.loss>=this._networkLimits.badNet.loss,r=Math.round(e.outbound.transport.currentRoundTripTime*1e3)||0,n=e.inbound.rtps.reduce((pe,$e)=>Math.max(pe,$e.packetLoss||0),0),s={rtt:this._lastNetworkStat.rtt*(1-gi)+r*gi,loss:this._lastNetworkStat.loss*(1-gi)+n*gi},p=i(s),l=t(s),u=i(this._remoteNetworkStat),P=t(this._remoteNetworkStat),C=i(this._lastNetworkStat),O=t(this._lastNetworkStat),re=p||u?.2:l&&P?1:0,Se=Date.now();if((C!==p||O!==l||Se-this._lastNetworkStat.date>d.networkStatisticsInterval)&&(this._lastNetworkStat.date=Date.now(),this._signaling.customData({sdk:Object.assign({type:"bad-net"},s)},null).catch(pe=>{c.warn("Unable to send [bad-net]",pe)})),re){let pe={};pe[this._participantId]=pe[""]=re,this._triggerEvent(F.NETWORK_STATUS,pe)}this._lastNetworkStat.rtt=s.rtt,this._lastNetworkStat.loss=s.loss}_startSettingsInterval(){let e=2e3;if(this._settingsInterval)return;let t=()=>{if(!this._pc){this._stopSettingsInterval();return}this._applySettings(),this._settingsInterval=window.setTimeout(t,e)};this._settingsInterval=window.setTimeout(t,e)}_stopSettingsInterval(){this._settingsInterval&&(window.clearTimeout(this._settingsInterval),this._settingsInterval=null)}_calcFingerprint(e){let t=v.sdpFingerprint(e);if(t===null){c.warn("Fingerprint calculation is unsupported");return}this._fingerprint===null?this._fingerprint=t:(f.onFingerprintChange((this._fingerprint^t).toString()),this._fingerprint=null)}_applySettings(){var t;let e=this._mediaSource.getMediaSettings().isScreenSharingEnabled?this._serverSettings.screenSharing:this._serverSettings.camera;e&&((t=this._pc)==null?void 0:t.connectionState)==="connected"&&(this._prevConsumerSettings=v.applySettings(this._pc,e,this._prevConsumerSettings))}};var Ta=(r=>(r.producerNotification="producerNotification",r.producerCommand="producerCommand",r.consumerScreenShare="consumerScreenShare",r.producerScreenShare="producerScreenShare",r))(Ta||{}),Kt=Ta;var tt=it(require("messagepack"));var ar=class{constructor(){this.streamDescriptionByCompactId=new Map;this.compactIdByStreamDescription=new Map}getStreamDescription(e){return this.streamDescriptionByCompactId.get(e)}getCompactId(e){return this.compactIdByStreamDescription.get(e)}handleMessage(e){var n,s;let t=new Uint8Array(e),i=t[0],r=t.subarray(1);switch(i){case 1:let p=(0,tt.decode)(r);return Object.entries(p).forEach(([H,re])=>{let Se=Ht(H);this.streamDescriptionByCompactId.set(re,Se),this.compactIdByStreamDescription.set(H,re)}),null;case 2:case 4:let l=(0,tt.decode)(r),u=[];for(let H of l){let re=this.getStreamDescription(H);re&&u.push(re.participantId)}return i===2?{type:"notification",notification:k.AUDIO_ACTIVITY,activeParticipants:u}:{type:"notification",notification:k.STALLED_ACTIVITY,stalledParticipants:u};case 3:let P=(0,tt.decode)(r);return{type:"notification",notification:k.SPEAKER_CHANGED,speaker:(n=this.getStreamDescription(P))==null?void 0:n.participantId};case 5:let C=(0,tt.decode)(r);return{type:"notification",notification:k.VIDEO_QUALITY_UPDATE,quality:{maxBitrate:C[0],maxDimension:C[1]}};case 6:let O=(0,tt.decode)(r),x={};for(let[H,re]of Object.entries(O)){let Se=(s=this.getStreamDescription(Number(H)))==null?void 0:s.participantId;Se&&(x[Se]=re/100)}return{type:"notification",notification:k.NETWORK_STATUS,statuses:x};case 7:return this._createParticipantSourcesUpdateNotification(r);case 8:{let re=(0,tt.decode)(r).map(Se=>{var Xe;let[pe,$e,le,be,Me]=Se;return{participantId:(Xe=this.getStreamDescription(pe))==null?void 0:Xe.participantId,gain:$e,pause:le,offset:be,mute:Me}});return{type:"notification",notification:k.MOVIE_UPDATE_NOTIFICATION,data:re}}default:return c.debug("unsupported message type: "+i),null}}_createParticipantSourcesUpdateNotification(e){let t=(0,tt.decode)(e),i=[];for(let[r,n]of Object.entries(t)){let s=n[0],p=n[1],l=n[2],u;if(s!==null){if(u=this.getStreamDescription(s),!u){c.error(`could not uncompress participant ID ${s}`);continue}}else u=null;if(l===null){c.error("unexpected null sequenceNumber",r,n);continue}let P=Be.PARTICIPANT_AGNOSTIC_TRACK_PREFIX+"-"+r,C=p?p>>>0:null;i.push({participantStreamDescription:u,streamId:P,rtpTimestamp:C,sequenceNumber:l})}return{type:"notification",notification:k.PARTICIPANT_SOURCES_UPDATE,participantUpdateInfos:i}}};var Kn=90,qn=4294967295,Oe=class extends ee{constructor(e,t,i){super();this._pc=null;this._producerNotification=null;this._producerCommand=null;this._producerScreen=null;this._consumerScreen=null;this._isOpen=!1;this._observer=!1;this._reconnectionPrevented=!1;this._state=B.IDLE;this._statInterval=null;this._settingsInterval=null;this._statBytes={};this._ssrcMap={};this._producerOfferIsProcessing=!1;this._producerNextOffer=null;this._prevConsumerSettings={};this._captureSender=null;this._captureReceiver=null;this._participantIdRegistry=null;this._disabledSenders=new Set;this._rtpReceiversByStreamId={};this._producerSessionId="";this._newAudioShareTrack=null;this._signaling=e,this._mediaSource=t,this._newAudioShareTrack=t.getAudioShareTrack(),this.subscribe(this._signaling,Te.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._mediaSource,Ae.TRACK_REPLACED,this._onReplacedTrack.bind(this)),this.subscribe(this._mediaSource,Ae.SOURCE_CHANGED,this._applyConsumerSettings.bind(this)),this.subscribe(this._mediaSource,Ae.SCREEN_STATUS,this._onScreenSharingStatus.bind(this)),this._perfStatReporter=new dt(this,e),this._serverSettings=i,c.debug("ServerTransport: Created")}getState(){return this._state||B.IDLE}updateStatisticsInterval(){this._stopStatInterval();let e=this.getState();e!==B.IDLE&&e!==B.CLOSED&&e!==B.FAILED&&this._startStatInterval()}open(e=!1){if(this._isOpen){c.log("ServerTransport: Already opened connections");return}this._isOpen=!0,this._observer=e,this._openConnection()}close(e){this._isOpen=!1,this._closeConnection(),this.unsubscribe(),e?(c.error("ServerTransport: Closed",e),this._setState(B.FAILED)):(c.debug("ServerTransport: Closed"),this._setState(B.CLOSED))}removeParticipant(e){var t;(t=this._captureReceiver)==null||t.close(e)}preventRestart(){this._reconnectionPrevented=!0}allowRestart(){this._reconnectionPrevented=!1}updateSettings(e){li(e,this._serverSettings)||(this._serverSettings=e,this._applyConsumerSettings())}_closeConnection(){this._stopStatInterval(),this._stopSettingsInterval(),this._removeCaptureSender(),this._removeCaptureReceiver(),this._pc&&(this._rtpReceiversByStreamId={},this._disabledSenders.forEach(e=>{var t;return(t=e.track)==null?void 0:t.stop()}),this._disabledSenders.clear(),this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.onsignalingstatechange=null,this._participantIdRegistry=null,Oe._closeDataChannel(this._producerNotification),Oe._closeDataChannel(this._producerCommand),Oe._closeDataChannel(this._producerScreen),Oe._closeDataChannel(this._consumerScreen),this._pc.close(),this._pc=null,this._producerOfferIsProcessing=!1,this._producerNextOffer=null),this._triggerEvent(F.PEER_CONNECTION_CLOSED)}static _closeDataChannel(e){e&&(e.onopen=null,e.onmessage=null,e.onerror=null,e.close())}_createDataChannel(e,t,i){c.debug(`[${t}] data channel opening`);let r=e.createDataChannel(t,{ordered:!0});r.onopen=()=>{let n=r.readyState;n==="open"?(c.debug(`[${t}] data channel opened`),r.onerror=s=>{c.error(`[${t}] data channel error`,s)},i(r)):c.error(`[${t}] data channel open failed, state [${n}]`)}}_openConnection(e=!1){c.debug("ServerTransport: Open single connection");let t={};y.baseChromeVersion()&&(t.sdpSemantics=Oe._isUnifiedPlanSupported()?"unified-plan":"plan-b"),this._pc=new RTCPeerConnection(t,{optional:[{googSuspendBelowMinBitrate:!1}]}),this._pc.ontrack=this._onAddTrack.bind(this,this._pc),this._pc.onconnectionstatechange=v.throttle(i=>{this._pc&&this._onConnectionStateChange(this._pc,i)},500),this._pc.onsignalingstatechange=Oe._onSignalingStateChange.bind(this,this._pc),d.producerNotificationDataChannel&&this._createDataChannel(this._pc,Kt.producerNotification,i=>{this._producerNotification=i,this._producerNotification.binaryType="arraybuffer",this._participantIdRegistry=new ar,this._signaling.setParticipantIdRegistry(this._participantIdRegistry),this._signaling.setProducerNotificationDataChannel(i)}),d.producerCommandDataChannel&&(this._signaling.useCommandDataChannel(!0),this._createDataChannel(this._pc,Kt.producerCommand,i=>{this._producerCommand=i,this._signaling.setProducerCommandDataChannel(i)})),d.producerScreenDataChannel&&this._createDataChannel(this._pc,Kt.producerScreenShare,i=>{this._producerScreen=i,this._producerScreen.binaryType="arraybuffer",this._createCaptureReceiver()});try{this._mediaSource.addTrackToPeerConnection(this._pc,this._observer,!1,d.serverAudioRed),this._prevConsumerSettings={},this._applyConsumerSettings()}catch(i){c.error("ServerTransport: Unable to add media source tracks",i),h.log(E.ERROR,"addTrack-single"),this.close(i);return}d.consumerScreenDataChannel&&this._createDataChannel(this._pc,Kt.consumerScreenShare,i=>{this._consumerScreen=i,this._consumerScreen.binaryType="arraybuffer";let r=this._mediaSource.getScreenTrack();r&&this._createCaptureSender(r)}),e||this._allocateConsumer(),this._setState(B.OPENED),this._startStatInterval(),this._startSettingsInterval()}_reconnect(){this.getState()!==B.OPENED&&(this._setState(B.RECONNECTING),this._closeConnection(),this._openConnection(!0))}_signalActiveParticipants(e){this._triggerEvent(F.SIGNALLED_ACTIVE_PARTICIPANTS,e)}_signalStalledParticipants(e){this._triggerEvent(F.SIGNALLED_STALLED_PARTICIPANTS,e)}_signalSpeakerChanged(e){this._triggerEvent(F.SIGNALLED_SPEAKER_CHANGED,e)}_signalNetworkStatus(e){this._triggerEvent(F.NETWORK_STATUS,e)}_updateSSRCMap(e){e&&e.sdp.split(`
12
+ `).forEach(t=>{let i=`a=ssrc:([0-9]+) label:(audio|video)-((?:[ug]?[\\d]+)|(?:mix)|(?:${Be.PARTICIPANT_AGNOSTIC_TRACK_PREFIX}-[0-9]+))`,r=new RegExp(i).exec(t);r&&(this._ssrcMap[r[1]]=r[3])})}_createCaptureSender(e){!e||!d.consumerScreenDataChannel||!this._consumerScreen||!this._mediaSource.getMediaSettings().isScreenSharingEnabled||(this._captureSender&&this._removeCaptureSender(),this._captureSender=new Pt(e,this._consumerScreen))}_removeCaptureSender(){var e;(e=this._captureSender)==null||e.destroy(),this._captureSender=null}_createCaptureReceiver(){!d.producerScreenDataChannel||!this._producerScreen||!this._participantIdRegistry||(this._captureReceiver&&this._removeCaptureReceiver(),this._captureReceiver=new yt(this._producerScreen,this._participantIdRegistry,(e,t)=>{this._triggerEvent(F.REMOTE_STREAM_SECOND,e,t)},e=>{this._triggerEvent(F.REMOTE_STREAM_SECOND,e,null)}))}_removeCaptureReceiver(){var e;(e=this._captureReceiver)==null||e.destroy(),this._captureReceiver=null}_applyConsumerSettings(){let e=this._mediaSource.getMediaSettings().isScreenSharingEnabled&&!d.consumerScreenDataChannel?this._serverSettings.screenSharing:this._serverSettings.camera;if(e&&this._pc){let t=[];this._pc.getSenders().forEach(i=>{if(!i.track||i.track.kind!==ce.video)return;let r=!this._disabledSenders.has(i),n=e.maxDimension!==0;if(r&&!n){c.log("Disabling video upload"),this._disabledSenders.add(i),i.replaceTrack(y.getBlackMediaTrack()).catch(p=>{c.error("Could not disable video upload",p)});return}let s=this._mediaSource.getSendVideoTrack();if(!r&&n&&s){c.log("Enabling video upload"),this._disabledSenders.delete(i);let p=i.track;p.enabled=s.enabled,i.replaceTrack(s).then(()=>p.stop()).catch(l=>{c.error("Could not enable video upload",l)})}v.applyVideoTrackSettings(e,i,s!=null?s:i.track,this._prevConsumerSettings,t)}),this._prevConsumerSettings=t}}_onScreenSharingStatus(e){e.track?this._createCaptureSender(e.track):this._removeCaptureSender()}_setState(e){this._state!==e&&(this._state=e,this._triggerEvent(F.STATE_CHANGED,e))}_startStatInterval(){if(this._statInterval)return;let e=()=>{if(!this._pc){this._stopStatInterval();return}this._collectStat().then(t=>{this._reportStats(t),this._detectStaleTracks(t)}).catch(()=>{}),this._statInterval=window.setTimeout(e,d.statisticsInterval)};this._statInterval=window.setTimeout(e,d.statisticsInterval)}_stopStatInterval(){this._statInterval&&(window.clearTimeout(this._statInterval),this._statInterval=null),this._statBytes={}}_startSettingsInterval(){let e=2e3;if(this._settingsInterval)return;let t=()=>{if(!this._pc){this._stopSettingsInterval();return}this._applyConsumerSettings(),this._settingsInterval=window.setTimeout(t,e)};this._settingsInterval=window.setTimeout(t,e)}_stopSettingsInterval(){this._settingsInterval&&(window.clearTimeout(this._settingsInterval),this._settingsInterval=null)}_collectStat(){return o(this,null,function*(){if(!this._pc)return Promise.reject();let e=yield jt(this._pc,this._lastStat,this._ssrcMap);return this._lastStat=e,e})}_reportStats(e){this._triggerEvent(F.REMOTE_DATA_STATS,{inbound:{topology:ne.SERVER,transport:e.transport,rtps:e.rtps.filter(t=>t.type==="inbound-rtp")},outbound:{topology:ne.SERVER,transport:e.transport,rtps:e.rtps.filter(t=>t.type==="outbound-rtp")}})}_detectStaleTracks(e){let t=e.rtps.find(s=>s.type==="inbound-rtp"&&s.kind==="audio"&&this._ssrcMap[s.ssrc]==="mix");if(!t)return;let i=Be.AUDIO_MIX,r=this._statBytes[i],n=!1;if(r){let s=t.bytesReceived-r.bytesReceived;s>=0&&s<=5&&(n=!0),r.stalled!==n&&this._triggerEvent(F.REMOTE_ALL_STALL,n)}this._statBytes[i]={bytesReceived:t.bytesReceived,stalled:n}}_allocateConsumer(){if(!this._signaling.ready)return;let e={estimatedPerformanceIndex:dt.getEstimatedPerformanceIndex(),audioMix:!0,consumerUpdate:!0,producerNotificationDataChannelVersion:d.producerNotificationDataChannel?7:0,producerCommandDataChannelVersion:d.producerCommandDataChannel?3:0,consumerScreenDataChannelVersion:d.consumerScreenDataChannel?1:0,producerScreenDataChannelVersion:d.producerScreenDataChannel?1:0,onDemandTracks:!0,unifiedPlan:Oe._isUnifiedPlanSupported(),singleSession:!0,videoTracksCount:d.videoTracksCount,red:d.serverAudioRed,audioShare:d.audioShareCapabilityEnabled};this._signaling.allocateConsumer(null,e)}_acceptProducer(e){return o(this,null,function*(){if(this._producerOfferIsProcessing){this._producerNextOffer=e,c.debug("[single] wait until other remote offer is processed");return}this._producerOfferIsProcessing=!0;let t=new RTCSessionDescription({type:"offer",sdp:e});if(c.debug("[single] set remote offer",{offer:t}),!this._pc)throw new Error("Interrupt allocation");this._pc.setRemoteDescription(t).catch(i=>{throw c.error("[single] unable to set remote offer",i),h.log(E.ERROR,"setRemoteDescription-single"),i}).then(()=>o(this,null,function*(){if(c.debug("[single] create local answer"),!this._pc)throw new Error("Interrupt allocation");return this.handleTracks(),this._pc.createAnswer()})).catch(i=>{throw c.error("[single] unable to create answer",i),h.log(E.ERROR,"createAnswer-single"),i}).then(i=>(i.sdp=v.patchSDP(i.sdp,!1,y.isBrokenH264(),!1,d.h264spsPpsIdrInKeyframe),i)).then(i=>o(this,null,function*(){if(c.debug("[single] set local answer",{answer:i}),!this._pc)throw new Error("Interrupt allocation");return yield this._pc.setLocalDescription(i),i})).catch(i=>{throw c.error("[single] unable to set local answer",i),h.log(E.ERROR,"setLocalDescription-single"),i}).then(i=>o(this,null,function*(){c.debug("[single] transmit local answer",{answer:i}),this._updateSSRCMap(t),yield this._signaling.acceptProducer(i,Object.keys(this._ssrcMap)),c.debug("[single] remote offer has been processed")})).catch(i=>{c.warn("[single] unable to send local answer",i),h.log(E.ERROR,"acceptProducer")}).then(()=>o(this,null,function*(){if(this._producerOfferIsProcessing=!1,this._producerNextOffer){c.debug("[single] there is other unprocessed remote offer, process it");let i=this._producerNextOffer;return this._producerNextOffer=null,this._acceptProducer(i)}})).catch(i=>this.close(i))})}handleTracks(){this._newAudioShareTrack&&(this._pc.getTransceivers().forEach(e=>{e.mid.endsWith("s")&&(e.sender.track!==null&&c.warn("Unexpected track assigned to audioshare"),e.direction="sendonly",e.sender.replaceTrack(this._newAudioShareTrack).catch(t=>{c.error("ServerTransport: Unable to replace track",t),h.log(E.ERROR,"replaceTrack-single")}),this._newAudioShareTrack=null)}),this._newAudioShareTrack&&c.warn("Cannot find audioshare transceiver"))}_onSignalingNotification(e){return o(this,null,function*(){if(!!this._isOpen)switch(e.notification){case k.PRODUCER_UPDATED:yield this._onProducerUpdated(e);break;case k.REALLOC_CON:this._reconnect();break;case k.AUDIO_ACTIVITY:this._signalActiveParticipants(e.activeParticipants);break;case k.SPEAKER_CHANGED:this._signalSpeakerChanged(e.speaker);break;case k.STALLED_ACTIVITY:this._signalStalledParticipants(e.stalledParticipants);break;case k.NETWORK_STATUS:this._signalNetworkStatus(e.statuses);break}})}_onProducerUpdated(e){return o(this,null,function*(){this._producerSessionId&&this._producerSessionId!==e.sessionId&&this._reconnect(),d.breakVideoPayloadTypes&&(c.log("test mode enabled, video switched off"),this._signaling.requestTestMode("breakVideoPayloadTypes",null)),this._producerSessionId=e.sessionId,yield this._acceptProducer(e.description)})}_onAddTrack(e,t){c.debug("[single] remote track (added)",{track:t.track});let i=t.streams[0];i?(i.onremovetrack||(i.onremovetrack=n=>{this._triggerEvent(F.REMOTE_TRACK_REMOVED,i.id,i,n.track)}),i.getTracks().find(n=>n.id===t.track.id)||i.addTrack(t.track),this._rtpReceiversByStreamId[i.id]=t.receiver,this._triggerEvent(F.REMOTE_TRACK_ADDED,i.id,i,t.track)):c.error("[single] unable to get media stream from track event")}static _onSignalingStateChange(e,t){c.debug("[single] signaling state changed",{state:e.signalingState},t)}_onConnectionStateChange(e,t){switch(c.debug("[single] connection state changed",{state:e.connectionState},t),h.log(E.ICE_CONNECTION_STATE,e.connectionState),e.connectionState){case"failed":this._reconnectionPrevented?this.close(new Error("Ice connection failed")):this._reconnect();break;case"connecting":let i=this.getState();i===B.IDLE||i===B.OPENED?this._setState(B.CONNECTING):e.iceConnectionState==="checking"&&this._setState(B.RECONNECTING);break;case"disconnected":this._reconnectionPrevented?this.close(new Error("Ice connection disconnected")):this._setState(B.RECONNECTING);break;case"connected":this._setState(B.CONNECTED),v.getPeerConnectionHostInfo(e).then(r=>{r&&h.log(E.ICE_CONNECTION_TYPE,r.type)});break}}_onReplacedTrack(e,t){if(this._pc){d.consumerScreenDataChannel&&t&&(e=t);let i=!1;this._pc.getSenders().forEach(r=>{r.track&&r.track.kind===e.kind&&!this._disabledSenders.has(r)&&r.track.contentHint===e.contentHint&&(r.track.enabled=e.enabled,r.replaceTrack(e).catch(n=>{c.error("ServerTransport: Unable to replace track",n),h.log(E.ERROR,"replaceTrack-single")}),i=!0)}),!i&&e.kind===ce.audio&&e.contentHint==="music"&&(this._newAudioShareTrack=e)}this._applyConsumerSettings()}static _isUnifiedPlanSupported(){let e=y.baseChromeVersion();return e?d.isUnifiedPlanSupported("Chrome",e):d.isUnifiedPlanSupported(y.browserName(),Number(y.browserVersion()))}getStreamWaitingTimeMs(e,t){if(!this._pc)return h.log(E.PAT_WAITING_TIME_ERROR,"noConnection"),c.error("Cannot get stream waiting time, peer connection is not initialized"),0;let i=this._rtpReceiversByStreamId[e];if(!i)return h.log(E.PAT_WAITING_TIME_ERROR,"noReceiver"),c.error(`Cannot get stream waiting time, cannot find RTP receiver by stream ID: ${e}`),0;let r=i.getSynchronizationSources();if(!r||!r.length)return c.log(`Cannot get stream waiting time, ${e} receiver has no synchronization sources`),0;let s=r[0].rtpTimestamp;if(!Number.isInteger(s))return h.log(E.PAT_WAITING_TIME_ERROR,"timestampNotInteger"),c.error(`Cannot get stream waiting time, ${e} receiver's RTP timestamp is not an integer: ${s}`),0;let p=t-s&qn,l=Math.ceil(p/Kn);return Math.min(100,Math.max(0,l))}};var F=(x=>(x.REMOTE_TRACK_ADDED="REMOTE_TRACK_ADDED",x.REMOTE_TRACK_REMOVED="REMOTE_TRACK_REMOVED",x.REMOTE_STREAM_SECOND="REMOTE_STREAM_SECOND",x.REMOTE_ALL_STALL="REMOTE_ALL_STALL",x.REMOTE_DATA_STATS="REMOTE_DATA_STATS",x.STATE_CHANGED="STATE_CHANGED",x.LOCAL_STATE_CHANGED="LOCAL_STATE_CHANGED",x.SIGNALLED_ACTIVE_PARTICIPANTS="SIGNALLED_ACTIVE_PARTICIPANTS",x.SIGNALLED_SPEAKER_CHANGED="SIGNALLED_SPEAKER_CHANGED",x.SIGNALLED_STALLED_PARTICIPANTS="SIGNALLED_STALLED_PARTICIPANTS",x.TOPOLOGY_CHANGED="TOPOLOGY_CHANGED",x.NETWORK_STATUS="NETWORK_STATUS",x.PEER_CONNECTION_CLOSED="PEER_CONNECTION_CLOSED",x))(F||{}),B=(p=>(p.IDLE="IDLE",p.OPENED="OPENED",p.CONNECTING="CONNECTING",p.RECONNECTING="RECONNECTING",p.CONNECTED="CONNECTED",p.CLOSED="CLOSED",p.FAILED="FAILED",p))(B||{}),ne=(t=>(t.DIRECT="DIRECT",t.SERVER="SERVER",t))(ne||{}),nr=class extends ee{constructor(e,t,i,r){super();this._allocated=[];this._opened=[];this._directTransport=null;this._serverTransport=null;this._dtListeners=[];this._stListeners=[];this._states={};this._localState="IDLE";this._signaling=t,this._mediaSource=i,this._topology=e,this._serverSettings=r,this.subscribe(this._signaling,Te.NOTIFICATION,this._onSignalingNotification.bind(this)),e==="SERVER"&&(this._serverTransport=this._createServerTransport())}updateSettings(e){c.log("Update transport settings",e),this._serverSettings=e,this._directTransport&&this._directTransport.updateSettings(e),this._serverTransport&&this._serverTransport.updateSettings(e)}updateStatisticsInterval(){this._directTransport&&this._directTransport.updateStatisticsInterval(),this._serverTransport&&this._serverTransport.updateStatisticsInterval()}allocate(e,t=!1){if(this._allocated.indexOf(e)!==-1){c.warn(`The participant [${e}] has already had allocated transport`);return}this._allocated.push(e),this._topology==="DIRECT"&&!this._directTransport&&(this._directTransport=this._createDirectTransport(e,t)),this._topology==="SERVER"&&!this._serverTransport&&(this._serverTransport=this._createServerTransport())}open(e,t=null,i=!1,r=!1){let n=r;for(let s of e){if(this._opened.indexOf(s)!==-1){c.warn(`The participant [${s}] has already had opened transport`);continue}if(this._allocated.indexOf(s)===-1){c.warn(`The participant [${s}] has no allocated transport`);continue}this._opened.push(s),n=!0}!n||(this._topology==="DIRECT"&&this._directTransport&&this._directTransport.open(t),this._topology==="SERVER"&&this._serverTransport&&(this._serverTransport.open(i),this._setStates(e,this._serverTransport.getState()),this._setLocalState(this._serverTransport.getState())),c.debug("The transport has been opened",e))}close(e){var r;let t=this._allocated.indexOf(e),i=this._opened.indexOf(e);t<0&&c.warn(`The participant [${e}] transport has already deallocated`),this._topology==="DIRECT"&&this._directTransport&&(this._directTransport.close(),this._directTransport=null),this._topology==="SERVER"&&((r=this._serverTransport)==null||r.removeParticipant(e),this._setState(e,"CLOSED")),i>=0&&this._opened.splice(i,1),t>=0&&this._allocated.splice(t,1)}destroy(){this.unsubscribe(),this._dtListeners&&this._dtListeners.forEach(e=>{e.dispose()}),this._stListeners&&this._stListeners.forEach(e=>{e.dispose()}),this._directTransport&&(this._directTransport.close(),this._directTransport=null),this._serverTransport&&(this._serverTransport.close(),this._serverTransport=null),this._allocated=[],this._opened=[]}getTopology(){return this._topology}isAllocated(e){return this._allocated.indexOf(e)>=0}allocated(){return this._allocated.slice()}opened(){return this._opened.slice()}getState(){var e,t;return this._topology==="SERVER"?(e=this._serverTransport)==null?void 0:e.getState():(t=this._directTransport)==null?void 0:t.getState()}_setStates(e,t){let i=e.filter(r=>this._states[r]!==t?(this._states[r]=t,!0):!1);i.length&&this._triggerEvent("STATE_CHANGED",i,t)}_setState(e,t){this._states[e]!==t&&(this._states[e]=t,this._triggerEvent("STATE_CHANGED",[e],t))}_setLocalState(e){this._localState!==e&&(this._localState=e,this._triggerEvent("LOCAL_STATE_CHANGED",e))}_onSignalingNotification(e){if(e.notification===k.TOPOLOGY_CHANGED)return this._onTopologyChanged(e)}_onTopologyChanged(e){var t;if(e.topology!==this._topology){if(c.log(`Topology changed ${this._topology} -> ${e.topology}`),h.log(E.TOPOLOGY_CHANGE_REQUESTED,e.topology),this._topology=e.topology,this._topology==="SERVER"&&(this._serverTransport?this._serverTransport.allowRestart():(this._serverTransport=this._createServerTransport(),this._opened.length>0&&((t=this._directTransport)==null||t.preventRestart(),this._serverTransport.open()))),this._topology==="DIRECT"){let i=e.offerTo||[],r=e.offerToTypes||[],n=e.offerToDeviceIdxs||[],s=i.length&&r.length?v.composeParticipantId(i[0],r[0],n[0]):null;if(this._serverTransport&&this._serverTransport.preventRestart(),!this._allocated||this._allocated.length===0){c.error("Topology changed to DIRECT, but the list of allocated participants is empty");return}this._allocated.length>1&&c.warn("Topology changed to DIRECT, but the allocated participants count more then one");let p=this._allocated[0];if(this._directTransport)this._directTransport.allowRestart();else{let l=s===p;this._directTransport=this._createDirectTransport(p,l)}this._opened.indexOf(p)>=0&&this._directTransport.open()}this._triggerEvent("TOPOLOGY_CHANGED",this._topology)}}_createDirectTransport(e,t=!1){let i=new pt(e,t,this._signaling,this._mediaSource,this._serverSettings);return this._dtListeners&&this._dtListeners.length>0&&c.warn(`The list of direct listeners for the participant [${e}] is not empty`),this._dtListeners=[],this._dtListeners.push(i.addEventListener("REMOTE_TRACK_ADDED",this._onDirectRemoteTrackAdded.bind(this,e)),i.addEventListener("REMOTE_TRACK_REMOVED",this._onDirectRemoteTrackRemoved.bind(this,e)),i.addEventListener("REMOTE_DATA_STATS",this._onDirectRemoteDataStats.bind(this)),i.addEventListener("STATE_CHANGED",this._onDirectTransportChanged.bind(this,e)),i.addEventListener("NETWORK_STATUS",this._onTransportNetworkStatus.bind(this)),i.addEventListener("PEER_CONNECTION_CLOSED",this._onPeerConnectionClosed.bind(this,"DIRECT"))),i}_createServerTransport(){let e=new Oe(this._signaling,this._mediaSource,this._serverSettings);return this._stListeners&&this._stListeners.length>0&&c.warn("The list of server transport listeners is not empty"),this._stListeners=[],this._stListeners.push(e.addEventListener("REMOTE_TRACK_ADDED",this._onServerRemoteTrackAdded.bind(this)),e.addEventListener("REMOTE_TRACK_REMOVED",this._onServerRemoteTrackRemoved.bind(this)),e.addEventListener("REMOTE_ALL_STALL",this._onServerRemoteAllStall.bind(this)),e.addEventListener("REMOTE_DATA_STATS",this._onServerRemoteDataStats.bind(this)),e.addEventListener("STATE_CHANGED",this._onServerTransportChanged.bind(this)),e.addEventListener("SIGNALLED_ACTIVE_PARTICIPANTS",this._onTransportActiveParticipants.bind(this)),e.addEventListener("SIGNALLED_SPEAKER_CHANGED",this._onTransportSpeakerChanged.bind(this)),e.addEventListener("SIGNALLED_STALLED_PARTICIPANTS",this._onTransportStalledParticipants.bind(this)),e.addEventListener("NETWORK_STATUS",this._onTransportNetworkStatus.bind(this)),e.addEventListener("REMOTE_STREAM_SECOND",this._onRemoteStreamSecond.bind(this)),e.addEventListener("PEER_CONNECTION_CLOSED",this._onPeerConnectionClosed.bind(this,"SERVER"))),e}_releaseDirectTransport(e){this._directTransport&&(e&&this._directTransport.close(),this._directTransport=null),this._dtListeners&&(this._dtListeners.forEach(t=>{t.dispose()}),this._dtListeners=[])}_releaseServerTransport(e){this._serverTransport&&(e&&this._serverTransport.close(),this._serverTransport=null),this._stListeners&&(this._stListeners.forEach(t=>{t.dispose()}),this._stListeners=[])}_setLocalNoiseSuppression(e){var t;d.noiseSuppression!==e&&(d.noiseSuppression=e,(t=this._mediaSource)==null||t.updateNoiseSuppression())}_onDirectTransportChanged(e,t){if(t==="CONNECTED"&&this._topology==="DIRECT"&&this._releaseServerTransport(!0),(t==="CLOSED"||t==="FAILED")&&(this._releaseDirectTransport(!1),this._topology==="DIRECT")){let i=this._opened.indexOf(e);i>=0&&this._opened.splice(i,1);let r=this._allocated.indexOf(e);r>=0&&this._allocated.splice(r,1)}this._topology==="DIRECT"&&(this._setState(e,t),this._setLocalState(t))}_onServerTransportChanged(e){let t=this._opened.slice();e==="CONNECTED"&&this._topology==="SERVER"&&this._releaseDirectTransport(!0),(e==="CLOSED"||e==="FAILED")&&(this._releaseServerTransport(!1),this._topology==="SERVER"&&(this._allocated=[],this._opened=[])),this._topology==="SERVER"&&(this._setStates(t,e),this._setLocalState(e))}_onTransportActiveParticipants(e){this._topology==="SERVER"&&this._triggerEvent("SIGNALLED_ACTIVE_PARTICIPANTS",e)}_onTransportStalledParticipants(e){this._topology==="SERVER"&&this._triggerEvent("SIGNALLED_STALLED_PARTICIPANTS",e)}_onTransportSpeakerChanged(e){this._topology==="SERVER"&&this._triggerEvent("SIGNALLED_SPEAKER_CHANGED",e)}_onTransportNetworkStatus(e){this._triggerEvent("NETWORK_STATUS",e)}_onRemoteStreamSecond(e,t){this._triggerEvent("REMOTE_STREAM_SECOND",e,t)}_onPeerConnectionClosed(e){this._triggerEvent("PEER_CONNECTION_CLOSED",e)}_onServerRemoteAllStall(e){this._topology==="SERVER"&&this._triggerEvent("REMOTE_ALL_STALL",e)}_onServerRemoteDataStats(e){this._triggerEvent("REMOTE_DATA_STATS",e)}_onDirectRemoteTrackAdded(e,t,i){this._triggerEvent("REMOTE_TRACK_ADDED",e,t,i)}_onDirectRemoteTrackRemoved(e,t,i){this._triggerEvent("REMOTE_TRACK_REMOVED",e,t,i)}_onDirectRemoteDataStats(e){this._triggerEvent("REMOTE_DATA_STATS",e)}_onServerRemoteTrackAdded(e,t,i){this._triggerEvent("REMOTE_TRACK_ADDED",e,t,i)}_onServerRemoteTrackRemoved(e,t,i){this._triggerEvent("REMOTE_TRACK_REMOVED",e,t,i)}getStreamWaitingTimeMs(e,t){return this._topology!=="SERVER"?(h.log(E.PAT_WAITING_TIME_ERROR,"wrongTopology"),c.error(`Cannot get stream waiting time, incorrect topology: ${this._topology}`),0):this._serverTransport?this._serverTransport.getStreamWaitingTimeMs(e,t):(h.log(E.PAT_WAITING_TIME_ERROR,"noTransport"),c.error("Cannot get stream waiting time, server transport is not initialized"),0)}};var lt=(e=>(e.VOLUMES_DETECTED="VOLUMES_DETECTED",e))(lt||{}),sr=class extends ee{constructor(e){super();this._detector=null;this._interval=null;this.subscribe(e,F.REMOTE_TRACK_ADDED,this._onRemoteTrackAdded.bind(this)),this.subscribe(e,F.REMOTE_TRACK_REMOVED,this._onRemoteTrackRemoved.bind(this)),this.subscribe(e,F.SIGNALLED_ACTIVE_PARTICIPANTS,this._onSignalledActiveParticipants.bind(this)),this.subscribe(e,F.TOPOLOGY_CHANGED,this._onTopologyChanged.bind(this))}destroy(){var e;this._interval&&(window.clearTimeout(this._interval),this._interval=null),this.unsubscribe(),(e=this._detector)==null||e.destroy(),this._detector=null}_onRemoteTrackAdded(e,t,i){var r;if(i.kind===ce.audio&&((r=this._detector)==null||r.destroy(),this._detector=new Wt(e,t),!this._interval)){let n=()=>{this._collectVolumes(),this._interval=window.setTimeout(n,d.voiceParams.interval)};this._interval=window.setTimeout(n,d.voiceParams.interval)}}_onRemoteTrackRemoved(e,t,i){i.kind===ce.audio&&(!this._detector||this._detector.stream!==t||(this._detector.destroy(),this._detector=null))}_collectVolumes(){if(!this._detector)return;let e={},t=this._detector.trackId,i=this._detector.getLevel();if(t===Be.AUDIO_MIX){if(this._activeParticipants)for(let r of this._activeParticipants)e[r]=i}else e[t]=i;this._triggerEvent("VOLUMES_DETECTED",e)}_onSignalledActiveParticipants(e){this._activeParticipants=e}_onTopologyChanged(e){e===ne.DIRECT&&(this._activeParticipants=null)}};var or=(e=>(e.SPEAKER_CHANGED="SPEAKER_CHANGED",e))(or||{}),cr=class extends ee{constructor(e,t,i){super();this._speakerId=null;this._serverSideSpeakerDetection=!1;this._serverSideSpeakerDetection=i===ne.SERVER,this.subscribe(e,lt.VOLUMES_DETECTED,this._onVolumesDetected.bind(this)),this.subscribe(t,F.SIGNALLED_SPEAKER_CHANGED,this._onServerSpeakerChanged.bind(this)),this.subscribe(t,F.TOPOLOGY_CHANGED,this._onTopologyChanged.bind(this))}destroy(){this.unsubscribe()}_onVolumesDetected(e){if(this._serverSideSpeakerDetection)return;let t=0,i=null;if(Object.keys(e).forEach(r=>{let n=e[r].smoothed;n>t&&n>d.voiceParams.threshold&&(t=n,i=r)}),i&&i!==this._speakerId){let r=this._speakerId&&e.hasOwnProperty(this._speakerId)?e[this._speakerId].smoothed:0;t>r*d.voiceParams.speakerLevelMultiplier&&(this._speakerId=i,this._triggerEvent("SPEAKER_CHANGED",i))}}_onServerSpeakerChanged(e){this._serverSideSpeakerDetection&&this._triggerEvent("SPEAKER_CHANGED",e)}_onTopologyChanged(e){this._serverSideSpeakerDetection=e===ne.SERVER}};var fi=class extends ee{constructor(e,t,i){super();this._states={};this._volumes={};this._participants={};this._connectionTimeout=0;this._volumeTimeout=0;this._transport=e,this._participants=i,this.subscribe(e,F.STATE_CHANGED,this._onTransportStateChanged.bind(this)),this.subscribe(t,lt.VOLUMES_DETECTED,this._onVolumesDetected.bind(this))}destroy(){this.unsubscribe(),this._connectionTimeout&&window.clearTimeout(this._connectionTimeout),this._volumeTimeout&&window.clearTimeout(this._volumeTimeout)}onChangeRemoteMediaSettings(e,t){t.isAudioEnabled||(this._volumes[e]=1),t.isAudioEnabled&&(this._volumes[e]=0)}_onTransportStateChanged(e,t){e.forEach(i=>this._states[i]=t),t===B.OPENED&&(this._connectionTimeout||(this._connectionTimeout=window.setTimeout(this._onConnectionTimeout.bind(this),d.specListenerParams.connectionTimeout)),this._volumeTimeout||(this._volumeTimeout=window.setTimeout(this._onVolumeTimeout.bind(this),d.specListenerParams.volumeTimeout))),t===B.FAILED&&this._connectionTimeout&&(c.warn("Transport failed, send callSpecError"),h.log(E.CALL_SPEC_ERROR,`${this._transport.getTopology()}_CONNECTION_TIMEOUT`))}_onVolumesDetected(e){Object.keys(e).forEach(t=>{this._volumes[t]=Math.max(e[t].real,this._volumes[t]||0)})}_onConnectionTimeout(){let e=i=>i!==B.CONNECTED;(()=>Object.values(this._states).filter(e).length>0)()&&(c.warn("There is not connected transport, send callSpecError"),h.log(E.CALL_SPEC_ERROR,`${this._transport.getTopology()}_CONNECTION_TIMEOUT`)),this._connectionTimeout=0}_onVolumeTimeout(){let e=[];Object.keys(this._volumes).forEach(t=>{if(this._volumes[t]>0)return;let i="UNKNOWN",r=this._participants[t];r&&r.platform&&(i=r.platform),e.indexOf(i)<0&&(e.push(i),h.log(E.CALL_SPEC_ERROR,`${this._transport.getTopology()}_VOLUME_TIMEOUT_${i}`))}),e.length&&c.warn("There is silent participant, send callSpecError"),this._volumeTimeout=0}};var $n=1e3,Jn=1e4;var Yn=15,j=class extends ee{constructor(e,t,i){super();this._mediaSource=null;this._conversation=null;this._myLastRequestedLayouts={};this._state="IDLE";this._participantState=W.CALLED;this._participants={};this._transport=null;this._debugInfo=null;this._volumesDetector=null;this._speakerDetector=null;this._localVolumeDetector=null;this._specListener=null;this._activeSpeakerId=null;this._lastSignalledActiveSpeakerId=null;this._serverSettings={camera:null,screenSharing:null};this._lastStalled={};this._remoteAllStalled=!1;this._audioFix=null;this._streamByStreamId=new Map;this._streamIdByStreamDescription=new Map;this._streamWaitTimerByStreamDescription=new Map;this._sequenceNumberByStreamDescription=new Map;this._cooldownTimestampByStreamDescription=new Map;this._cooldownQueueCleanupTimer=null;h.create(e,i),this._api=e,this._signaling=t,this._onUnload=()=>{this._conversation&&this._api&&this._api.hangupConversation(this._conversation.id),h.destroy()},window.addEventListener("unload",this._onUnload),this._audioOutput=new ui,d.videoTracksCount>0&&(this._cooldownQueueCleanupTimer=window.setInterval(this._cleanupCooldownQueue.bind(this),$n))}static current(){return j._current}static hangupAfterInit(){j._activationMutex&&!j._current&&(j._delayedHangup=!0)}static id(){var e,t;return((t=(e=j._current)==null?void 0:e._conversation)==null?void 0:t.id)||null}onStart(e,t,i,r="",n=!1,s=!1,p){return o(this,null,function*(){if(j._activationMutex)throw h.log(E.ERROR,"startCall"),c.warn("Conversation: there is already running activation"),new N(D.FAILED);j._activationMutex=!0;try{this._mediaSource=this._createMediaSource(),yield this._mediaSource.request(i);let l=this._mediaSource.getMediaSettings();t===We.CHAT||e.length>1?this._logWithMediaSettings(E.OUTGOING_MULTIPARTY_CALL,l):this._logWithMediaSettings(E.OUTGOING_CALL,l);let u=yield this._startConversation(e,t,Ye.OUTGOING,i,r,n,s,p);if(!this._conversation)throw new N(D.UNKNOWN_ERROR);if(this._participantState=W.ACCEPTED,this._signaling.changeMediaSettings(l),yield this._processConnection(u),this._allocateTransport(),this._createSpeakerDetector(),this._createSpecListener(),this._signaling.readyToSend(),j._delayedHangup)throw new N(D.CANCELED);c.debug("Outgoing call",{opponentIds:e,opponentType:t,mediaOptions:i});let P=Object.values(this._participants),C;return d.batchParticipantsOnStart&&(C=v.mapSharedParticipants(P)),yield this._processConnectionSharedMovieInfo(u),f.onLocalStream(this._mediaSource.getStream(),this._mediaSource.getMediaSettings()),f.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._conversation.muteStates,C),this._onConversationParticipantListChunk(u),f.onLocalStatus(Y.WAITING),this._toggleJoinAvailability(),this._changeFeatureSet(),this._changeNeedRate(),j._current=this,this._conversation.concurrent?yield this._acceptConcurrent():d.batchParticipantsOnStart||this._setParticipantsStatus(P,Y.WAITING),this._conversation}catch(l){throw this._close(l,"Unable to start conversation"),l}finally{j._activationMutex=!1}})}onJoin(e){return o(this,null,function*(){var t;if(j._activationMutex)throw h.log(E.ERROR,"joinCall"),c.warn("Conversation: there is already running activation"),new N(D.FAILED);j._activationMutex=!0,this._state="PROCESSING";try{let i=!!((t=e.observedIds)==null?void 0:t.length);this._mediaSource=this._createMediaSource(),yield this._mediaSource.request(e.mediaOptions,!i);let r=this._mediaSource.getMediaSettings();this._logWithMediaSettings(E.JOIN_CONVERSATION,r);let n=yield this._joinConversation(e);if(!this._conversation)throw new N(D.UNKNOWN_ERROR);return this._conversation.observer=i,f.onLocalStream(this._mediaSource.getStream(),r),this._conversation.waitingHall?(c.log("In waiting hall"),j._current=this,j._activationMutex=!1,this._signaling.readyToSend(),f.onLocalStatus(Y.WAITING_HALL),this._conversation):this._onJoinPart2(n)}catch(i){throw j._activationMutex=!1,this._close(i,"Unable to join conversation"),i}})}_onJoinPart2(e){return o(this,null,function*(){c.debug("Join conversation part 2"),j._activationMutex=!0;try{if(this._participantState=W.ACCEPTED,!this._conversation||!this._mediaSource)throw new N(D.UNKNOWN_ERROR);if(this._conversation.observer||this._signaling.changeMediaSettings(this._mediaSource.getMediaSettings()),yield this._processConnection(e),this._allocateTransport(),this._createSpeakerDetector(),this._createSpecListener(),this._signaling.readyToSend(),j._delayedHangup)throw new N(D.CANCELED);let t=Object.values(this._participants),i;return d.batchParticipantsOnStart&&(i=v.mapSharedParticipants(t)),yield this._processConnectionSharedMovieInfo(e),f.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._conversation.muteStates,i),this._onConversationParticipantListChunk(e),f.onLocalStatus(Y.WAITING),this._toggleJoinAvailability(),this._changeNeedRate(),this._state="ACTIVE",this._changeFeatureSet(),j._current=this,d.batchParticipantsOnStart||this._setParticipantsStatus(t,Y.WAITING),this._openTransport(t,!1),this._conversation}catch(t){throw this._close(t,"Unable to join conversation"),t}finally{j._activationMutex=!1}})}onPush(r){return o(this,arguments,function*(e,t=X.USER,i){if(j._activationMutex)throw c.warn("Conversation: there is already running activation"),new N(D.REJECTED);j._activationMutex=!0;try{let n=yield this._prepareConversation(e,t,i);if(this._mediaSource=this._createMediaSource(),!this._conversation)throw new N(D.UNKNOWN_ERROR);if(!n.conversation.participants.find(p=>{var l;return p.state===W.CALLED&&p.id===((l=this._conversation)==null?void 0:l.userId)}))throw c.log("Push rejected (there is an active call)"),h.log(E.PUSH,"rejected"),new N(D.REJECTED);if(yield this._processConnection(n),this._allocateTransport(),this._createSpeakerDetector(),this._createSpecListener(),this._signaling.readyToSend(),h.log(E.PUSH,"accepted"),j._current=this,j._delayedHangup)throw new N(D.CANCELED);j._activationMutex=!1}catch(n){throw j._activationMutex=!1,this._close(n,"Unable to handle inbound call push"),n}})}_isInWaitingHall(e){if(!e.conversation||(e.conversation.options||[]).indexOf(Qt.WAITING_HALL)<0)return!1;let t=(e.conversation.participants||[]).find(i=>v.comparePeerId(i.peerId,e.peerId));return t&&t.restricted||!1}_acceptConcurrent(){return o(this,null,function*(){if(!this._mediaSource||!this._conversation)throw new N(D.UNKNOWN_ERROR);this._state="PROCESSING";let e=this._mediaSource.getMediaSettings();this._logWithMediaSettings(E.ACCEPT_CONCURRENT,e),c.debug("Concurrent call",{conversationId:this._conversation.id});try{yield this._signaling.acceptCall(this._mediaSource.getMediaSettings()),f.onCallAccepted(),this._state="ACTIVE",this._participantState=W.ACCEPTED,this._changeFeatureSet(),this._openTransport(Object.values(this._participants),!0)}catch(t){this._close(t,"Unable to accept concurrent call")}})}accept(e){return o(this,null,function*(){var t;if(this._state!=="IDLE")throw h.log(E.ERROR,"acceptIncoming"),c.error("Unable to accept a call - invalid state"),new Error("Unable to accept a call - invalid state");if(!this._mediaSource||!this._conversation)throw new N(D.UNKNOWN_ERROR);this._state="PROCESSING",c.debug("Accept incoming call",e);try{yield this._mediaSource.request(e);let i=this._mediaSource.getMediaSettings();this._logWithMediaSettings(E.ACCEPT_INCOMING,i),this._signaling.changeMediaSettings(i),yield this._signaling.acceptCall(i),this._participantState=W.ACCEPTED;let r=Object.values(this._participants),n;if(d.batchParticipantsOnStart&&(n=v.mapSharedParticipants(r)),f.onCallAccepted(),f.onLocalStream(this._mediaSource.getStream(),i),f.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._conversation.muteStates,n),d.useParticipantListChunk){let l=yield this._getInitialParticiapntListChunk();(t=l==null?void 0:l.participants)==null||t.forEach(u=>{let P=v.composeId(u),C=this._participants[P];C&&(C.movieShareInfos=u.movieShareInfos)}),this._onConversationParticipantListChunk({participants:l})}f.onLocalStatus(Y.WAITING),this._toggleJoinAvailability(),this._changeNeedRate();let s=bt(this._conversation.muteStates,ke.MUTE),p=bt(this._conversation.muteStates,ke.MUTE_PERMANENT);for(let l of[s,p])l.length&&(yield this._processMuteState({mediaOptions:l,stateUpdated:!0}));return this._state="ACTIVE",this._changeFeatureSet(),d.batchParticipantsOnStart||this._setParticipantsStatus(r,Y.WAITING),this._openTransport(r,!0),this._conversation}catch(i){throw this._close(i,"Unable to accept call"),i}})}decline(){return o(this,null,function*(){var e;if(this._state!=="IDLE")throw h.log(E.ERROR,"declineIncoming"),c.error("Unable to decline a call - invalid state"),new Error("Unable to decline a call - invalid state");this._state="PROCESSING",c.debug("Decline incoming call"),this._logWithMediaSettings(E.DECLINE_INCOMING,(e=this._mediaSource)==null?void 0:e.getMediaSettings()),this._participantState=W.HUNGUP,this._signaling.ready&&(yield this._signaling.hangup(D.REJECTED)),this._close(new N(D.REJECTED))})}hangup(){return o(this,null,function*(){c.debug("Hangup");let e=this._state==="ACTIVE"?D.HUNGUP:D.CANCELED;h.log(E.HANGUP,e),this._signaling.ready?(yield this._signaling.hangup(e),this._close(new N(e))):f.onHangup(new N(D.HUNGUP),this._conversation&&this._conversation.id)})}addParticipant(e,t){return o(this,null,function*(){if(!this._signaling.ready){this._close(new N(D.UNKNOWN_ERROR),"Unable to add participant");return}let i=yield this._signaling.addParticipant(e,t),r=null;i.type==="error"&&(i.error==="call-unfeasible"?r=i.status:r=D.UNKNOWN_ERROR);let n=i.participant;yield this._onAddParticipant(v.composeId(n),n,r)})}removeParticipant(e,t=!1){return o(this,null,function*(){this._signaling.ready&&(yield this._signaling.removeParticipant(e,t),this._onRemoveParticipant(e))})}setVolume(e){this._audioOutput.volume=e}updateStatisticsInterval(){this._transport&&this._transport.updateStatisticsInterval()}_openTransport(e,t){var r;if(!this._transport)return;let i=[];for(let n of e)(n.state===W.CALLED||n.state===W.ACCEPTED)&&(this._transport.isAllocated(n.id)||this._transport.allocate(n.id,t)),n.state===W.ACCEPTED&&i.push(n.id);i.length&&this._transport.open(i,null,!!((r=this._conversation)==null?void 0:r.observer))}_close(e,t){t&&c.error(t,e),c.debug("Close conversation",e),e.error?this._signaling.ready&&this._signaling.hangup(D.FAILED):h.log(E.ERROR,e.hangup),j._activationMutex=!1;let i=this._conversation&&this._conversation.id;if([D.CANCELED,D.NOT_FRIENDS,D.CALLEE_IS_OFFLINE,D.CALLER_IS_BLOCKED,D.CALLER_IS_REJECTED].indexOf(e.hangup)!==-1||e.hangup===D.REJECTED&&!e.remote){f.onHangup(e,i),this.destroy();return}if(e.hangup===D.HUNGUP&&(!e.remote||this._participantState===W.CALLED)){f.onHangup(e,i),this.destroy();return}if(e.hangup===D.MISSED&&!e.remote){f.onHangup(e,i),this.destroy();return}if(e.hangup===D.SOCKET_CLOSED&&j._current&&!this._conversation){this._cleanupSignaling(),this._cleanupMediaSource();return}if(e.hangup===D.BUSY&&!e.remote){this._cleanupSignaling(),this._cleanupMediaSource();return}this._state="CLOSE",this._participantState=W.HUNGUP,this._changeFeatureSet(),this._cleanupMediaSource(),this._cleanupParticipants(),this._cleanupParticipantAgnosticStreams(),this._cleanupTransport(),this._cleanupSpeakerDetector(),this._cleanupSpecListener(),this._cleanupSignaling(),this._api.cleanup(),h.destroy(),this._conversation=null,this._myLastRequestedLayouts={},j._current=null,j._delayedHangup=!1,f.onHangup(e||new N(D.UNKNOWN_ERROR),i),this._cooldownQueueCleanupTimer!==null&&(window.clearInterval(this._cooldownQueueCleanupTimer),this._cooldownQueueCleanupTimer=null)}destroy(){let e=this._conversation&&this._conversation.id;c.debug("Destroy conversation",{conversationId:e}),this._cleanupMediaSource(),this._cleanupParticipants(),this._cleanupParticipantAgnosticStreams(),this._cleanupTransport(),this._cleanupSpeakerDetector(),this._cleanupSpecListener(),this._cleanupSignaling(),this._api.cleanup(),this._cleanupListeners(),h.destroy(),this._conversation=null,this._myLastRequestedLayouts={},j._current=null,j._delayedHangup=!1,this._cooldownQueueCleanupTimer!==null&&(window.clearInterval(this._cooldownQueueCleanupTimer),this._cooldownQueueCleanupTimer=null)}_getConversationParams(e){return o(this,null,function*(){let t=yield this._api.getConversationParams(e);c.debug("Api.getConversationParams",t);let i=[],{turn_server:r,stun_server:n}=t;if(n&&i.push(n),r){let s=r.urls.filter((p,l,u)=>u.indexOf(p)===l);s.push(`${s[s.length-1]}?transport=tcp`),i.push({urls:s,username:r.username,credential:r.credential})}return d.iceServers=i,d.wssBase=t.endpoint,d.wssToken=t.token,t.client_type&&(d.clientType=t.client_type),d.externalUserType=t.external_user_type,t})}_addGeoParamsToEndpoint(e,t){return t.isp_as_no&&(e+=`&ispAsNo=${t.isp_as_no}`),t.isp_as_org&&(e+=`&ispAsOrg=${t.isp_as_org}`),t.loc_cc&&(e+=`&locCc=${t.loc_cc}`),t.loc_reg&&(e+=`&locReg=${t.loc_reg}`),e}_startConversation(e,t,i,r,n="",s=!1,p=!1,l){return o(this,null,function*(){let u=v.uuid();c.debug("Conversation: start",{conversationId:u,opponentIds:e,opponentType:t,direction:i});let P=r.includes(oe.VIDEO),C=yield this._api.startConversation(u,e,t,P,n,s,p,{onlyAdminCanShareMovie:l});c.debug("Api.startConversation",C);let O=yield this._getConversationParams(C.id);C.endpoint=this._addGeoParamsToEndpoint(C.endpoint,O);let x=yield this._connectSignaling(je.START,C);return yield this._setConversation(C,x,i),x})}_joinConversation(e){return o(this,null,function*(){let{conversationId:t,mediaOptions:i,chatId:r,joinLink:n,observedIds:s,payload:p}=e;c.debug("Conversation: join",{conversationId:t,joinLink:n,observedIds:s});let l=i.includes(oe.VIDEO),u;if(t)u=yield this._api.joinConversation(t,l,r);else if(n)u=yield this._api.joinConversationByLink(n,l,s,p);else throw new N(D.UNKNOWN_ERROR);c.debug("Api.joinConversation",u),yield this._getConversationParams(u.id);let P=yield this._connectSignaling(je.JOIN,u);return yield this._setConversation(u,P,Ye.JOINING),P})}_prepareConversation(r){return o(this,arguments,function*(e,t=X.USER,i){c.debug("Conversation: push",{conversationId:e,type:t,peerId:i});let n=this._api.getUserId();if(!n)throw new N(D.UNKNOWN_ERROR);let s=yield this._getConversationParams(e),p=s.device_idx||0,l=`${d.wssBase}?userId=${n}&entityType=${t}&deviceIdx=${p}&conversationId=${e}&token=${d.wssToken}`;l=this._addGeoParamsToEndpoint(l,s);let u={id:e,peerId:i,endpoint:l,is_concurrent:!1,p2p_forbidden:!1,device_idx:p},P=yield this._connectSignaling(je.ACCEPT,u);return j._current&&(j._current._participantState===W.ACCEPTED||j._current._participantState===W.CALLED)?(c.log("Push rejected (busy)"),h.log(E.PUSH,"busy"),this._signaling.ready&&this._signaling.hangup(D.BUSY),Promise.reject({hangup:D.BUSY})):(j._current&&(j._current.destroy(),j._current=null),yield this._setConversation(u,P,Ye.INCOMING,t),P)})}_createParticipant(e){return o(this,null,function*(){var i;let t=Object.assign({id:null,externalId:null,mediaSettings:ve(),participantState:{},state:W.CALLED,status:null,remoteStream:null,mediaSource:null,platform:null,clientType:null,roles:[],networkRating:1,lastRequestedLayouts:{},muteStates:{},unmuteOptions:[],observedIds:[]},e);if(e.externalId){let r=v.decomposeParticipantId(t.id).compositeUserId;this._api.cacheExternalId(r,e.externalId)}else t.externalId=yield this._getParticipantId(t.id);return((i=t.observedIds)==null?void 0:i.length)&&(t.externalId.observer=!0),this._setParticipantMarkers(t,t.markers),t})}_getParticipantId(e){return o(this,null,function*(){try{let t=v.decomposeParticipantId(e),i=yield this._api.userId(t.compositeUserId);return Object.assign({deviceIdx:t.deviceIdx},i)}catch(t){throw this._close(new N(D.NETWORK_ERROR),t),t}})}_setConversation(n,s,p){return o(this,arguments,function*(e,t,i,r=X.USER){yield this._prepareParticipants(t.conversation.participants);let l=this._api.getUserId(),u=e.device_idx||0;if(!l){let O=(t.conversation.participants||[]).find(x=>v.comparePeerId(x.peerId,t.peerId));if(!O)throw new N(D.UNKNOWN_ERROR);l=Number(O.id),O.idType&&(r=O.idType),O.deviceIdx&&(u=O.deviceIdx),this._api.setUserId(l)}let P=v.composeParticipantId(l,r,u),C=yield this._getParticipantId(P);this._conversation={userId:l,compositeUserId:P,externalId:C,acceptTime:t.conversation.acceptTime,features:t.conversation.features||[],featuresPerRole:t.conversation.featuresPerRole,id:t.conversation.id||e.id,participantsLimit:t.conversation.participantsLimit||30,topology:t.conversation.topology||ne.DIRECT,direction:i,concurrent:t.isConcurrent||e.is_concurrent||!1,needRate:!1,chatId:t.conversation.multichatId,roles:[],recordInfo:null,joinLink:e.join_link,pinnedParticipantId:null,mediaModifiers:t.mediaModifiers,options:[],muteStates:{},unmuteOptions:[],networkRating:1,waitingHall:this._isInWaitingHall(t),observer:!1},this._signaling.setConversationId(e.id),e.p2p_forbidden&&(d.forceRelayPolicy=e.p2p_forbidden),h.log(E.RELAY_POLICY,d.forceRelayPolicy?"1":"0"),this._changeFeatureSet(),this._logDevices()})}_updateConversation(e){if(!this._conversation)throw new N(D.UNKNOWN_ERROR);this._conversation.acceptTime=e.conversation.acceptTime,this._conversation.features=e.conversation.features||[],this._conversation.featuresPerRole=e.conversation.featuresPerRole,this._conversation.participantsLimit=e.conversation.participantsLimit||30,this._conversation.topology=e.conversation.topology||ne.DIRECT,this._conversation.concurrent=e.isConcurrent||!1,this._conversation.chatId=e.conversation.multichatId,this._conversation.mediaModifiers=e.mediaModifiers,this._conversation.waitingHall=!1}_createMediaSource(){let e=new Ni;return this.subscribe(e,Ae.SOURCE_CHANGED,this._onLocalMediaStreamChanged.bind(this)),this.subscribe(e,Ae.SCREEN_STATUS,this._onScreenSharingStatus.bind(this)),this._audioFix=new Gt(e),e}_connectSignaling(e,t){return o(this,null,function*(){return this._signaling.setEndpoint(t.endpoint),this.subscribe(this._signaling,Te.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._signaling,Te.FAILED,this._onSignalingFailed.bind(this)),this.subscribe(this._signaling,Te.RECONNECT,this._onSignalingReconnect.bind(this)),this._signaling.connect(e,t)})}_processConnection(e){return o(this,null,function*(){yield this._registerConnectionParticipants(e),this._processConnectionData(e)})}_prepareParticipants(e){return o(this,null,function*(){let t=e.map(i=>i.id);t.length&&(yield this._api.prepareUserIds(t))})}_onConversationParticipantListChunk(e){let t=e.participants;t&&f.onConversationParticipantListChunk(this._participantListChunkToExternalChunk(this._createParticipantListChunk(t)))}_createParticipantListChunk(e){return Ue(Ue({},{participants:[],countBefore:0,countAfter:0,markerFound:!1}),e)}_participantListChunkToExternalChunk(e){let t=v.mapSharedParticipants(e.participants.map(i=>{let r=v.composeId(i);return this._participants[r]}));return ht(Ue({},e),{participants:t})}_registerConnectionParticipants(e){return o(this,null,function*(){var t,i;yield this._registerParticipants(e.conversation.participants),((t=e.participants)==null?void 0:t.participants)&&(yield this._registerParticipants((i=e.participants)==null?void 0:i.participants))})}_registerParticipants(e){return o(this,null,function*(){if(!!this._conversation)for(let t of e){let i=v.composeId(t);if(this._isMe(i)){this._conversation.roles=t.roles||[],this._conversation.roles.length&&(c.debug(`Local roles changed: ${t.roles}`),f.onLocalRolesChanged(this._conversation.roles)),yield this._registerParticipantLocalMuteState(t);continue}if(t.state===W.HUNGUP||t.state===W.REJECTED){this._participants[t.id]&&this._removeParticipant(this._participants[t.id],D.HUNGUP);continue}this._registerParticipantInCache(yield this._createParticipant({id:i,externalId:t.externalId&&fe.fromSignaling(t.externalId,t.deviceIdx||0),mediaSettings:ve(t.mediaSettings),participantState:v.mapParticipantState(t),state:t.state,roles:t.roles||[],status:d.batchParticipantsOnStart?Y.WAITING:null,muteStates:t.muteStates||{},unmuteOptions:t.unmuteOptions||[],observedIds:t.observedIds||[],markers:this._denormalizeMarkers(i,t.markers),movieShareInfos:t.movieShareInfos})),t.roles&&t.roles.length&&(c.debug(`Roles for participant [${i}] changed: ${t.roles}`),f.onRolesChanged(this._participants[i].externalId,t.roles))}})}_registerParticipantLocalMuteState(e){return o(this,null,function*(){if(!e.muteStates)return Promise.resolve();let t=bt(e.muteStates,ke.MUTE),i=bt(e.muteStates,ke.MUTE_PERMANENT);for(let r of[t,i])!r.length||(yield this._onMuteParticipant({muteStates:e.muteStates,unmuteOptions:e.unmuteOptions,mediaOptions:r,stateUpdated:!0}))})}_getStatusByTransportState(e){let t;return e===B.CONNECTED?t=Y.CONNECTED:e===B.CONNECTING||e===B.OPENED?t=Y.CONNECTING:e===B.RECONNECTING&&(t=Y.RECONNECT),t}_registerParticipantInCache(e){return this._participants[e.id]=e}_getExistedParticipantByIdOrCreate(e){return o(this,null,function*(){return this._participants[e]||this._createParticipant({id:e})})}_getExternalIdByParticipantId(e){return o(this,null,function*(){var t;return d.useParticipantListChunk?(yield this._getExistedParticipantByIdOrCreate(e)).externalId:(t=this._participants[e])==null?void 0:t.externalId})}_registerParticipantAndSetMarkersIfChunkEnabled(e,t){return o(this,null,function*(){if(d.useParticipantListChunk){let i=this._registerParticipantInCache(yield this._getExistedParticipantByIdOrCreate(e));return this._setParticipantMarkers(i,t),i}return this._participants[e]})}_warnParticipantNotInConversation(e){c.warn(`Participant [${e}] isn't in conversation`)}_setParticipantMarkers(e,t){return e.markers=this._denormalizeMarkers(e.id,t),e}_denormalizeMarkers(e,t){if(!t)return null;let i=Object.values(t).find(r=>"ts"in r&&"rank"in r);return Object.entries(t).reduce((r,[n,s])=>(r[n]=ht(Ue(Ue({},i),s),{id:e}),r),{})}_processConnectionData(e){return o(this,null,function*(){v.isEmptyObject(this._conversation.muteStates)&&e.conversation.muteStates&&this._onMuteParticipant({muteStates:e.conversation.muteStates,unmuteOptions:e.unmuteOptions,mediaOptions:Object.keys(e.conversation.muteStates),muteAll:!0,stateUpdated:!0}),e.conversation.pinnedParticipantId&&(yield this._onPinParticipant(e.conversation.pinnedParticipantId)),this._onRecordInfo(e.conversation.recordInfo),this._onOptionsChanged(e.conversation.options),e.chatRoom&&e.chatRoom.totalCount&&this._onChatRoomUpdated(Yt.ATTENDEE,e.chatRoom.totalCount,e.chatRoom.firstParticipants)})}_allocateTransport(){if(!this._conversation||!this._mediaSource)return;this._transport=new nr(this._conversation.topology,this._signaling,this._mediaSource,this._serverSettings),this._debugInfo=new mi,this.subscribe(this._transport,F.STATE_CHANGED,this._onTransportStateChanged.bind(this)),this.subscribe(this._transport,F.LOCAL_STATE_CHANGED,this._onTransportLocalStateChanged.bind(this)),this.subscribe(this._transport,F.REMOTE_TRACK_ADDED,this._onRemoteTrackAdded.bind(this)),this.subscribe(this._transport,F.REMOTE_TRACK_REMOVED,this._onRemoteTrackRemoved.bind(this)),this.subscribe(this._transport,F.REMOTE_ALL_STALL,this._onRemoteAllStall.bind(this)),this.subscribe(this._transport,F.REMOTE_DATA_STATS,this._onRemoteDataStats.bind(this)),this.subscribe(this._transport,F.SIGNALLED_STALLED_PARTICIPANTS,this._onRemoteSignalledStall.bind(this)),this.subscribe(this._transport,F.TOPOLOGY_CHANGED,this._onTopologyChanged.bind(this)),this.subscribe(this._transport,F.NETWORK_STATUS,this._onNetworkStatus.bind(this)),this.subscribe(this._transport,F.REMOTE_STREAM_SECOND,this._onRemoteStreamSecond.bind(this)),this.subscribe(this._transport,F.PEER_CONNECTION_CLOSED,this._onPeerConnectionClosed.bind(this));let e=this._conversation.direction===Ye.OUTGOING&&!this._conversation.concurrent;for(let t of Object.values(this._participants))(t.state===W.ACCEPTED||t.state===W.CALLED)&&this._transport.allocate(t.id,e)}_createSpeakerDetector(){this._transport&&(this._volumesDetector=new sr(this._transport),this.subscribe(this._volumesDetector,lt.VOLUMES_DETECTED,this._onVolumesDetected.bind(this)),this._speakerDetector=new cr(this._volumesDetector,this._transport,this._conversation.topology),this.subscribe(this._speakerDetector,or.SPEAKER_CHANGED,this._onSpeakerChanged.bind(this)),this._localVolumeDetector=new hi(this._mediaSource))}_createSpecListener(){this._transport&&this._volumesDetector&&(this._specListener=new fi(this._transport,this._volumesDetector,this._participants))}_logDevices(){let e=y.getCameras().length,t=y.getMicrophones().length;c.debug("Cameras: "+e+(y.hasCameraPermission()?"✔":"✖")+", Microphones: "+t+(y.hasMicrophonePermission()?"✔":"✖")),h.log(E.DEVICES,`${e}_${t}`)}_logWithMediaSettings(e,t){h.log(e,[(t==null?void 0:t.isAudioEnabled)&&"audio",(t==null?void 0:t.isVideoEnabled)&&"video"].filter(Boolean).join("_"))}_removeParticipant(e,t){var i;e.state===W.CALLED||e.state===W.ACCEPTED||this._state==="CLOSE"||(e.id===this._lastSignalledActiveSpeakerId&&(this._lastSignalledActiveSpeakerId=null),!!this._participants[e.id]&&(t===D.HUNGUP?this._setParticipantsStatus([e],Y.HANGUP):this._setParticipantsStatus([e],Y.ERROR,t),(i=e.mediaSource)==null||i.disconnect(),this._conversation&&this._conversation.pinnedParticipantId===e.id&&(this._conversation.pinnedParticipantId=null),this.updateDisplayLayout([{uid:e.externalId,mediaType:Pe.CAMERA,stopStream:!0}]),delete this._participants[e.id],f.onRemoteRemoved(e.externalId,e.markers)))}_cleanupListeners(){this.unsubscribe(),window.removeEventListener("unload",this._onUnload)}_cleanupMediaSource(){this._mediaSource&&(this._mediaSource.destroy(),this._mediaSource=null)}_cleanupParticipants(){Object.values(this._participants).forEach(e=>{var t,i,r;(t=e.remoteStream)==null||t.getTracks().forEach(n=>n.stop()),(i=e.secondStream)==null||i.getTracks().forEach(n=>n.stop()),(r=e.mediaSource)==null||r.disconnect()}),this._participants={},this._audioOutput&&this._audioOutput.destroy()}_cleanupParticipantAgnosticStreams(){c.debug("cleaning up participant-agnostic streams"),this._streamByStreamId.forEach(e=>{e.getTracks().forEach(t=>{t.stop()})}),this._streamByStreamId=new Map,this._streamWaitTimerByStreamDescription.forEach(e=>{window.clearTimeout(e)}),this._streamWaitTimerByStreamDescription=new Map,this._streamIdByStreamDescription=new Map,this._sequenceNumberByStreamDescription=new Map,this._cooldownTimestampByStreamDescription=new Map}_cleanupTransport(){this._transport&&(this._transport.destroy(),this._transport=null),this._debugInfo&&(this._debugInfo=null)}_cleanupSpeakerDetector(){this._speakerDetector&&(this._speakerDetector.destroy(),this._speakerDetector=null),this._volumesDetector&&(this._volumesDetector.destroy(),this._volumesDetector=null),this._localVolumeDetector&&(this._localVolumeDetector.destroy(),this._localVolumeDetector=null)}_cleanupSpecListener(){this._specListener&&(this._specListener.destroy(),this._specListener=null)}_cleanupSignaling(){this._signaling.close(),this._signaling.cleanup()}_onAddParticipant(e,t,i){return o(this,null,function*(){c.debug(`Add new participant [${e}]`);let r=this._participants[e];if(r&&(r.state===W.ACCEPTED||r.state===W.CALLED)){c.warn(`Participant [${r.id}:${r.state}] is already in conversation`);return}r||(r=this._registerParticipantInCache(yield this._createParticipant({id:e,externalId:t.externalId&&fe.fromSignaling(t.externalId,t.deviceIdx||0),mediaSettings:ve(t.mediaSettings),state:t.state,roles:t.roles||[],muteStates:t.muteStates||{},unmuteOptions:t.unmuteOptions||[],observedIds:t.observedIds||[]}))),this._setParticipantsStatus([r],Y.WAITING),i?(r.state=W.HUNGUP,this._removeParticipant(r,i)):this._transport&&(r.state=W.CALLED,this._transport.allocate(r.id,!0),h.log(E.ADD_PARTICIPANT),this._invokeRolesChangedCallbackIfNeeded(r))})}_onRemoveParticipant(e){c.debug(`Remove participant [${e}]`);let t=[];for(let i=0;i<=Yn;i++){let r=v.compose(e,i),n=this._participants[r];n&&t.push(n)}if(!t.length){this._warnParticipantNotInConversation(e);return}if(this._transport)for(let i of t)this._transport.close(i.id);h.log(E.REMOVE_PARTICIPANT)}changeDevice(e){return o(this,null,function*(){return e==="audiooutput"?this._audioOutput.changeOutput():this._mediaSource?(e==="audioinput"&&(this._audioFix=new Gt(this._mediaSource)),this._mediaSource.changeDevice(e)):Promise.reject(ae.UNKNOWN)})}toggleScreenCapturing(e,t){return o(this,null,function*(){return this._mediaSource?this._mediaSource.toggleScreenCapturing(e,t):Promise.reject(ae.UNKNOWN)})}setVideoStream(e,t=!1){return o(this,null,function*(){if(this._mediaSource)return this._mediaSource.setVideoStream(e,t)})}setAudioStream(e){return o(this,null,function*(){if(this._mediaSource)return this._mediaSource.setAudioStream(e)})}toggleLocalVideo(e){return o(this,null,function*(){if(this._mediaSource)return h.log(E.MEDIA_STATUS,e?"video_1":"video_0"),this._mediaSource.toggleVideo(e)})}toggleLocalAudio(e){return o(this,null,function*(){if(this._mediaSource)return h.log(E.MEDIA_STATUS,e?"audio_1":"audio_0"),this._mediaSource.toggleAudio(e)})}changePriorities(e){return o(this,null,function*(){if(e.length<2||!this._signaling.ready)return;let t={},i={};for(let r of e){let n=typeof r.uid=="object"?r.uid:fe.fromId(r.uid),s=fe.toString(n);i[s]=r.priority}for(let r of Object.values(this._participants)){let n=fe.toString(r.externalId);i.hasOwnProperty(n)&&(t[r.id]=i[n])}yield this._signaling.changePriorities(t)})}changeParticipantState(e){return o(this,null,function*(){for(let[t,i]of Object.entries(e))if(t.length>5||i.length>5)throw new Error("key/value max length is 5 chars, mappings with empty values (null or empty string) are discarded");yield this._signaling.changeParticipantState(e)})}requestKeyFrame(e){return o(this,null,function*(){let t={};return t[qe(e)]={keyFrameRequested:!0},this._signaling.updateDisplayLayout(t)})}requestTestMode(e,t){return o(this,null,function*(){return this._signaling.requestTestMode(e,t)})}updateDisplayLayout(e){return o(this,null,function*(){if(e.length<1||!this._signaling.ready)return;c.log(`Update display layout [${this._signaling.getNextCommandSequenceNumber()}]`,e);let t={};for(let r of e){let n=typeof r.uid=="object"?r.uid:fe.fromId(r.uid),s=this._api.getCachedOkIdByExternalId(n);if(!s){let P=fe.toString(n);c.log(`Unknown participant external ID ${P}`);continue}let p=v.compose(s,n.deviceIdx),l=qe({participantId:p,mediaType:r.mediaType,streamName:r.streamName}),u=this._participants[p];u?u.lastRequestedLayouts[l]=r:this._isMe(p)&&(this._myLastRequestedLayouts[l]=r),Ft(r)?(this._isMe(p)&&delete this._myLastRequestedLayouts[l],this._streamIdByStreamDescription.has(l)&&!this._cooldownTimestampByStreamDescription.has(l)&&this._cooldownTimestampByStreamDescription.set(l,Date.now())):(this._cooldownTimestampByStreamDescription.delete(l),!this._streamIdByStreamDescription.has(l)&&d.videoTracksCount>0&&this._streamIdByStreamDescription.set(l,null),t[l]=r)}let i=this._cooldownTimestampByStreamDescription.keys();for(;this._streamIdByStreamDescription.size>d.videoTracksCount;){let r=i.next();if(r.done){c.error("Cannot accommodate all streaming requests: tracks available "+d.videoTracksCount+"; requested streams: "+Array.from(this._streamIdByStreamDescription.keys()));break}this._stopStreaming(r.value),t[r.value]={stopStream:!0}}yield this._sendUpdateDisplayLayout(t)})}feedback(e){return this._signaling.feedback(e)}_stopStreaming(e){if(this._cooldownTimestampByStreamDescription.delete(e),this._sequenceNumberByStreamDescription.set(e,this._signaling.getNextCommandSequenceNumber()),this._streamWaitTimerByStreamDescription.has(e)&&(c.log("Client asked to stop streaming before stream became available",e),window.clearTimeout(this._streamWaitTimerByStreamDescription.get(e)),this._streamWaitTimerByStreamDescription.delete(e)),this._streamIdByStreamDescription.get(e)){let i=Ht(e),r=this._participants[i.participantId],{externalId:n}=this._conversation,s=this._isMe(i.participantId);if(r){if(i.streamName&&(i.mediaType===Pe.STREAM||i.mediaType===Pe.MOVIE)){let p={stream:null,streamName:i.streamName,mediaType:i.mediaType};s?f.onLocalLive(n,p):f.onRemoteLive(r.externalId,p)}else s||f.onRemoteStream(r.externalId,null);h.log(E.PAT_DEALLOCATED)}else c.log(`Cannot find participant to stop streaming: ${i.participantId}`)}this._streamIdByStreamDescription.delete(e)}_sendUpdateDisplayLayout(e){return o(this,null,function*(){if(Object.keys(e).length===0)return;let t=yield this._signaling.updateDisplayLayout(e);if(!t)return;let i=[];for(let[r,n]of Object.entries(t.errorCodeByParticipantId||{})){let s=Ht(r),p=this._participants[s.participantId];if(p){let l;typeof n!="number"?(c.warn(`Unexpected error code ${n} received for participant ${s.participantId}`),l=Gr.UNKNOWN_ERROR):l=Wr(n),i.push({externalId:p.externalId,errorReason:l})}}if(i&&i.length)throw new Si("Could not allocate one or more participants",i)})}_cleanupCooldownQueue(){let e={},t=this._cooldownTimestampByStreamDescription.entries();do{let i=t.next();if(i.done)break;let r=i.value;if(r[1]+Jn>Date.now())break;let s=r[0];this._stopStreaming(s),e[s]={stopStream:!0}}while(!0);this._sendUpdateDisplayLayout(e)}_onParticipantSourcesUpdate(e){if(this._conversation){c.log("Received participant sources update notification",e);for(let t of e)this._waitForStreamIfNeeded(t)}}_onParticipantPromoted(e){return o(this,null,function*(){c.log("Promoted in waiting hall",!e.demote),e.demote?(c.log("Kicked from waiting hall"),this._close(new N(D.REMOVED))):(this._updateConversation(e),yield this._onJoinPart2(e))})}_onChatRoomUpdated(r){return o(this,arguments,function*(e,t=0,i=[]){c.log(`Chat room updated: ${e}`);let n=[],s=[];i.length&&(i.forEach(p=>{if(p.externalId){let l=Ee.fromSignaling(p.externalId);n.push(l),this._api.cacheExternalId(p.id.id,l)}else s.push(v.decomposeId(p.id.id).id)}),s.length&&!n.length&&(n=yield this._api.getExternalIdsByOkIds(s))),f.onChatRoomUpdated(e,t,n)})}_onSharedMovieUpdate(e){return o(this,null,function*(){let{externalId:t}=this._conversation,{data:i}=e;for(let r of i)if(this._isMe(r.participantId))f.onLocalLiveUpdate(t,r);else{let s=yield this._getExternalIdByParticipantId(r.participantId);s&&f.onRemoteLiveUpdate(s,r)}})}_onSharedMovieInfoStarted(e){return o(this,null,function*(){c.log(`Shared movie started data received: ${e.notification}`),yield this._processSharedMovieInfo(e.movieShareInfo)})}_processSharedMovieInfos(e){return o(this,null,function*(){e&&(yield Promise.all(e.map(t=>this._processSharedMovieInfo(t))))})}_processSharedMovieInfo(e){return o(this,null,function*(){var r;if(!e)return;let{externalId:t}=this._conversation;if(this._isMe(e.initiatorId))f.onLocalSharedMovieInfo(t,e);else{let n=yield this._getExternalIdByParticipantId(e.initiatorId);n&&f.onRemoteSharedMovieInfo(n,e)}this._transport.getTopology()===ne.SERVER&&this._transport.getState()===B.IDLE&&this._participantState!==W.CALLED&&this._transport.open(this._transport.allocated(),null,!!((r=this._conversation)==null?void 0:r.observer),!0)})}_processConnectionSharedMovieInfo(e){return o(this,null,function*(){let t=e.conversation.participants.find(i=>this._isMe(v.composeId(i)));yield this._processSharedMovieInfos(t==null?void 0:t.movieShareInfos)})}_onSharedMovieInfoStopped(e){return o(this,null,function*(){c.log(`Shared movie stopped data received: ${e.notification}`);let{externalId:t}=this._conversation,{initiatorId:i,movieId:r,source:n}=e,s={initiatorId:i,movieId:r,source:n};if(this._isMe(i))f.onLocalSharedMovieStoppedInfo(t,s);else{let l=yield this._getExternalIdByParticipantId(i);l&&f.onRemoteSharedMovieStoppedInfo(l,s)}})}_onFeaturesPerRoleChanged(e){c.log(`Features per role changed: ${e.notification}`),f.onFeaturesPerRoleChanged(e.featuresPerRole)}_waitForStreamIfNeeded(e){var p,l;let t=this._matchStreamDescription(e.participantStreamDescription);if(!t||d.producerScreenDataChannel&&t.mediaType===Pe.SCREEN)return;let i=qe(t),r=this._sequenceNumberByStreamDescription.get(i);if(r&&r>e.sequenceNumber){c.warn(`Participant ${t.participantId} received outdated PAT response: sequence number ${e.sequenceNumber}; last sent sequence number for given participant is ${r}`),h.log(E.PAT_OUTDATED_RESPONSE);return}let n=e.streamId,s=e.rtpTimestamp?this._getWaitingTime(n,e.rtpTimestamp):0;if(s<=0){this._streamWaitTimerByStreamDescription.delete(i);let u=t.participantId,P=this._participants[u],{externalId:C}=this._conversation,O=this._isMe(u);if(!P&&!O){h.log(E.PAT_ERROR,"participantMissing"),c.error(`Could not find participant by ID: ${u}`);return}let x=O?C:P.externalId,H=this._streamByStreamId.get(n);if(!H){h.log(E.PAT_ERROR,"streamNotFound"),c.error(`Could not find stream by ID: ${n}`);return}h.log(E.PAT_ALLOCATED),this._streamIdByStreamDescription.set(i,n);let re=(p=e.participantStreamDescription)==null?void 0:p.mediaType;if(re===Pe.STREAM||re===Pe.MOVIE){if((l=e.participantStreamDescription)==null?void 0:l.streamName){let Se={streamName:e.participantStreamDescription.streamName,stream:H,mediaType:re};O?f.onLocalLive(x,Se):f.onRemoteLive(x,Se)}}else if(d.producerScreenTrack&&re===Pe.SCREEN)f.onRemoteScreenStream(P.externalId,H);else if(!O){let Se=(d.producerScreenTrack?null:P.secondStream)||H;f.onRemoteStream(P.externalId,Se)}}else{c.debug(`Waiting for ${s} until stream ${n} for ${i} is switched`);let u=window.setTimeout(this._waitForStreamIfNeeded.bind(this,e),s);this._streamWaitTimerByStreamDescription.set(i,u)}}_matchStreamDescription(e){if(!e)return null;if(this._streamIdByStreamDescription.has(qe(e)))return e;let t=e.participantId;if(e.mediaType){let i={participantId:t,mediaType:null};if(this._streamIdByStreamDescription.has(qe(i)))return i}else{let i={participantId:t,mediaType:Pe.CAMERA};if(this._streamIdByStreamDescription.has(qe(i)))return i;let r={participantId:t,mediaType:Pe.SCREEN};if(this._streamIdByStreamDescription.has(qe(r)))return r}return c.error("Received unrequested allocation",e),null}_getWaitingTime(e,t){if(this._transport)return this._transport.getStreamWaitingTimeMs(e,t);throw new Error("transport is not initialized")}_isCallAdmin(){return this._conversation?v.includesOneOf(this._conversation.roles,[rt.ADMIN,rt.CREATOR]):!1}_checkAdminRole(){if(!!this._conversation&&!v.includesOneOf(this._conversation.roles,[rt.ADMIN,rt.CREATOR]))throw new Error("You don't have the required permission")}grantRoles(e,t,i){return o(this,null,function*(){this._checkAdminRole(),yield this._signaling.grantRoles(e,t,i)})}muteParticipant(){return o(this,arguments,function*(e=null,t,i=[]){this._checkAdminRole(),yield this._signaling.muteParticipant(e,t,i)})}enableFeatureForRoles(e,t){return o(this,null,function*(){yield this._signaling.enableFeatureForRoles(e,t)})}pinParticipant(e,t){return o(this,null,function*(){this._checkAdminRole(),yield this._signaling.pinParticipant(e,t)})}updateMediaModifiers(e){return o(this,null,function*(){this._signaling.ready&&this._conversation&&(this._conversation.mediaModifiers=e,yield this._signaling.updateMediaModifiers(e))})}changeOptions(e){return o(this,null,function*(){if(this._signaling.ready&&this._conversation){this._checkAdminRole(),yield this._signaling.changeOptions(e);let t=Dr(this._conversation.options,e);this._onOptionsChanged(t)}})}getWaitingHall(e,t,i){return o(this,null,function*(){if(!this._signaling)return Promise.reject();let r=null;e&&(r=va(e));let n=yield this._signaling.getWaitingHall(r,t,i);if(n.error)return Promise.reject(n.message);let s=n.participants||[],p=[],l=[],u=null;return s.length&&(s.forEach(P=>{if(P.externalId){let C=Ee.fromSignaling(P.externalId);p.push(C),this._api.cacheExternalId(P.id.id,C)}else l.push(v.decomposeId(P.id.id).id)}),l.length&&!p.length&&(p=yield this._api.getExternalIdsByOkIds(l)),n.hasMore&&(u=Sa(s[s.length-1].id))),{participants:p,pageMarker:u,totalCount:n.totalCount||0}})}promoteParticipant(e,t){return o(this,null,function*(){this._signaling&&(yield this._signaling.promoteParticipant(e,t))})}chatMessage(e,t=null){return o(this,null,function*(){this._signaling.ready&&(yield this._signaling.chatMessage(e,t))})}chatHistory(e){return o(this,null,function*(){if(this._signaling.ready){let t=yield this._signaling.chatHistory(e);for(let i=t.messages.length-1;i>=0;i--){let r=t.messages[i];yield this._onChatMessage(r)}}})}customData(e,t=null){return o(this,null,function*(){this._signaling.ready&&(yield this._signaling.customData(e,t))})}createJoinLink(){return o(this,null,function*(){if(this._conversation){let t=(yield this._api.createJoinLink(this._conversation.id)).join_link;if(t)return this._conversation.joinLink=t,t}return Promise.reject()})}removeJoinLink(){return o(this,null,function*(){if(this._conversation&&(yield this._api.removeJoinLink(this._conversation.id)).success){delete this._conversation.joinLink;return}return Promise.reject()})}addMovie(r){return o(this,arguments,function*({movieId:e,gain:t,metadata:i}){let n={movieId:e};(t||t===0)&&(n.gain=t),i&&(n.metadata=i);let s=yield this._signaling.addMovie(n);if(s.error)throw new Error(s.error);return{movieId:s.movieId,streamType:s.streamType}})}updateMovie(e){return o(this,null,function*(){let t=yield this._signaling.updateMovie(e);if(t.error)throw new Error(t.error)})}removeMovie(e){return o(this,null,function*(){let t={movieId:e},i=yield this._signaling.removeMovie(t);if(i.error)throw new Error(i.error)})}startStream(e=!1,t=null,i=null,r="DIRECT_LINK",n=null){return o(this,null,function*(){let s={movieId:i,name:t,privacy:r,groupId:n,streamMovie:!e},p=yield this._signaling.startStream(s);return p.error?Promise.reject(p.message):p})}stopStream(){return o(this,null,function*(){let e=yield this._signaling.stopStream();return e.error?Promise.reject():e})}recordSetRole(e,t){return o(this,null,function*(){let i=yield this._signaling.recordSetRole(e,t);if(i.error)throw new Error(i.error)})}getStreamInfo(){return o(this,null,function*(){let e=yield this._signaling.getRecordStatus();return{movieId:e.recordMovieId,preview:e.recordMoviePreviewUrl}})}setLocalResolution(e,t,i){return o(this,null,function*(){var r;if(e<d.videoMinWidth||t<d.videoMinHeight)throw new Error("Sizes received are less than the `videoMinWidth` or `videoMinHeight`");if(i==null?void 0:i.effect){if(i.effect.width<d.videoMinWidth||i.effect.height<d.videoMinHeight)throw new Error("Sizes of effect received are less than the `videoMinWidth` or `videoMinHeight`");d.videoEffectMaxHeight=i.effect.height,d.videoEffectMaxWidth=i.effect.width}return d.videoMaxWidth=e,d.videoMaxHeight=t,(r=this._mediaSource)==null?void 0:r.setResolution(e,t)})}videoEffect(e){return o(this,null,function*(){var t;return(t=this._mediaSource)==null?void 0:t.videoEffect(e)})}getParticipants(e){return o(this,null,function*(){let t=e.externalIds.map(s=>({id:s.id,type:d.externalUserType})),i=yield this._signaling.getParticipants(t);if(i.error)throw new Error(i.error);let r=i.participants,n=this._transport.getState();return Promise.all(r.map(s=>o(this,null,function*(){var l;let p=v.composeId(s);return this._createParticipant({id:p,externalId:s.externalId&&fe.fromSignaling(s.externalId,s.deviceIdx||0),mediaSettings:ve(s.mediaSettings),participantState:v.mapParticipantState(s),state:s.state,roles:s.roles||[],status:(l=this._getStatusByTransportState(n))!=null?l:Y.WAITING,muteStates:s.muteStates||{},unmuteOptions:s.unmuteOptions||[],observedIds:s.observedIds||[],markers:this._denormalizeMarkers(p,s.markers)})}))).then(v.mapSharedParticipants)})}getParticipantListChunk(e){return o(this,null,function*(){var p;c.log("Request participant list chunk",e);let t=yield this._signaling.getParticipantListChunk(e);if(t.error)throw new Error(t.error);let i=this._createParticipantListChunk(t.chunk),r=i.participants.filter(l=>{let u=v.composeId(l);return!this._participants[u]});yield this._registerParticipants(r);let n=(p=this._transport)==null?void 0:p.getState();return i.participants.forEach(l=>{var C;let u=v.composeId(l),P=this._participants[u];P.status=(C=this._getStatusByTransportState(n))!=null?C:Y.WAITING,Object.assign(P.muteStates,l.muteStates),Object.assign(P.unmuteOptions,l.unmuteOptions)}),this._participantListChunkToExternalChunk(i)})}_getInitialParticiapntListChunk(){return o(this,null,function*(){let e=d.participantListChunkInitIndex,t=d.participantListChunkInitCount,i="GRID",r=yield this._signaling.getParticipantListChunk({listType:i,fromIdx:e,count:t});return c.debug("Get initial participant list chunk",r.chunk),r.chunk})}_onLocalMediaStreamChanged(e){return o(this,null,function*(){var t,i;!this._conversation||(c.debug("Local media stream changed",e.mediaSettings),f.onLocalStreamUpdate(e.mediaSettings,e.kind),this._signaling.ready&&!((t=this._conversation)==null?void 0:t.waitingHall)&&!((i=this._conversation)==null?void 0:i.observer)&&(yield this._signaling.changeMediaSettings(e.mediaSettings)))})}_onScreenSharingStatus(e){return o(this,null,function*(){var t,i;if(c.log("Screen sharing changed",e.track,e.mediaSettings),d.consumerScreenTrack){let r=e.track?new MediaStream([e.track]):null;f.onScreenStream(r,e.mediaSettings),this._signaling.ready&&!((t=this._conversation)==null?void 0:t.waitingHall)&&!((i=this._conversation)==null?void 0:i.observer)&&(yield this._signaling.changeMediaSettings(e.mediaSettings))}})}_changeRemoteMediaSettings(e,t){c.debug(`Remote media settings changed [${e}]`,t);let{externalId:i}=this._conversation;if(this._isMe(e)){f.onLocalMediaSettings(i,t);return}let n=this._participants[e];if(!n){this._warnParticipantNotInConversation(e);return}n.mediaSettings=t,this._state==="ACTIVE"&&f.onRemoteMediaSettings(n.externalId,t,n.markers),this._specListener&&this._specListener.onChangeRemoteMediaSettings(e,t)}_changeRemoteParticipantState(e,t){c.debug(`Remote participant state changed [${e}]`,t);let i=this._participants[e];if(!i){this._warnParticipantNotInConversation(e);return}i.participantState=t||{},this._state==="ACTIVE"&&f.onRemoteParticipantState(i.externalId,i.participantState,i.markers)}_invokeRolesChangedCallbackIfNeeded(e){this._state==="ACTIVE"&&e.roles&&e.roles.length&&(c.debug(`Roles for participant [${e.id}] changed: ${e.roles}`),f.onRolesChanged(e.externalId,e.roles))}_onSignalingNotification(e){switch(e.notification){case k.ACCEPTED_CALL:return this._onAcceptedCall(e);case k.HUNGUP:return this._onHungup(e);case k.PARTICIPANT_ADDED:return this._onAddedParticipant(e);case k.PARTICIPANT_JOINED:return this._onJoinedParticipant(e);case k.CLOSED_CONVERSATION:return this._onClosedConversation(e);case k.MEDIA_SETTINGS_CHANGED:return this._onMediaSettingsChanged(e);case k.PARTICIPANT_STATE_CHANGED:return this._onParticipantStateChanged(e);case k.RATE_CALL_DATA:return this._onNeedRate();case k.FEATURE_SET_CHANGED:return this._onFeatureSetChanged(e);case k.MULTIPARTY_CHAT_CREATED:return this._onMultipartyChatCreated(e);case k.FORCE_MEDIA_SETTINGS_CHANGE:return this._onForceMediaSettingsChange(e);case k.SETTINGS_UPDATE:return this._onSettingsUpdate(e);case k.VIDEO_QUALITY_UPDATE:return this._onVideoQualityUpdate(e);case k.REGISTERED_PEER:return this._onPeerRegistered(e);case k.SWITCH_MICRO:return this._onMicSwitched(e);case k.CHAT_MESSAGE:return this._onChatMessage(e);case k.CUSTOM_DATA:return this._onCustomData(e);case k.RECORD_STARTED:return this._onRecordInfo(e.recordInfo);case k.RECORD_STOPPED:return this._onRecordInfo(null);case k.ROLES_CHANGED:return this._onRolesChanged(e.participantId,e.roles||[]);case k.MUTE_PARTICIPANT:return this._onMuteParticipant(e);case k.PIN_PARTICIPANT:return this._onPinParticipant(e.participantId,e.unpin,e.markers);case k.OPTIONS_CHANGED:return this._onOptionsChanged(e.options||[]);case k.PARTICIPANT_SOURCES_UPDATE:return this._onParticipantSourcesUpdate(e.participantUpdateInfos);case k.PROMOTE_PARTICIPANT:return this._onParticipantPromoted(e);case k.CHAT_ROOM_UPDATED:return this._onChatRoomUpdated(e.eventType,e.totalCount,e.firstParticipants);case k.JOIN_LINK_CHANGED:return this._onJoinLinkChanged(e);case k.FEEDBACK:return this._onFeedback(e);case k.MOVIE_UPDATE_NOTIFICATION:return this._onSharedMovieUpdate(e);case k.MOVIE_SHARE_STARTED:return this._onSharedMovieInfoStarted(e);case k.MOVIE_SHARE_STOPPED:return this._onSharedMovieInfoStopped(e);case k.FEATURES_PER_ROLE_CHANGED:return this._onFeaturesPerRoleChanged(e)}}_onSignalingReconnect(e){return o(this,null,function*(){if(!this._conversation)return;e.conversation.acceptTime&&(this._conversation.acceptTime=e.conversation.acceptTime),e.conversation.participantsLimit&&(this._conversation.participantsLimit=e.conversation.participantsLimit),e.conversation.features&&(this._conversation.features=e.conversation.features,this._conversation.featuresPerRole=e.conversation.featuresPerRole,this._changeFeatureSet()),e.conversation.pinnedParticipantId!==this._conversation.pinnedParticipantId&&(e.conversation.pinnedParticipantId?yield this._onPinParticipant(e.conversation.pinnedParticipantId,!1):this._conversation.pinnedParticipantId&&(yield this._onPinParticipant(this._conversation.pinnedParticipantId,!0))),e.conversation.state;let t=null;if(e.conversation.participants){let i=Object.keys(this._participants),r=[];for(let n of e.conversation.participants){let s=v.composeId(n),p=n.roles||[];if(this._isMe(s)){t=ve(n.mediaSettings),Ot(this._conversation.roles,p)||this._onRolesChanged(s,p);continue}r.push(s);let l=this._participants[s];if(!l)yield this._onJoinedParticipant({participantId:n.id,participant:n,mediaSettings:n.mediaSettings});else{let u=ve(n.mediaSettings);Xr(u,l.mediaSettings)||this._changeRemoteMediaSettings(s,u);let P=v.mapParticipantState(n),C=l.participantState;v.isEqualParticipantState(P,C)||this._changeRemoteParticipantState(s,P),Ot(p,l.roles)||this._onRolesChanged(l.id,p)}}for(let n of i)r.indexOf(n)<0&&this._removeParticipant(this._participants[n],D.HUNGUP)}this._onMuteParticipant({muteStates:e.conversation.muteStates,unmuteOptions:e.unmuteOptions,mediaOptions:[]},t),this._onRecordInfo(e.conversation.recordInfo),this._onOptionsChanged(e.conversation.options)})}_onSignalingFailed(e){c.error("Signaling failed",e),this._close(e)}_onAcceptedCall(e){return o(this,null,function*(){let t=v.composeMessageId(e),i=v.getPeerIdString(e.peerId);if(c.debug(`Participant accepted call [${t}]`),this._conversation&&this._isMe(t)){this._close(new N(D.MISSED),"Call accepted on other device");return}let r=this._participants[t];r||(r=this._registerParticipantInCache(yield this._createParticipant({id:t,mediaSettings:ve(e.mediaSettings)}))),r.state=W.ACCEPTED,r.mediaSettings=ve(e.mediaSettings),this._logWithMediaSettings(E.ACCEPTED_OUTGOING,r.mediaSettings),this._conversation&&this._conversation.direction===Ye.OUTGOING&&(this._state==="IDLE"||this._state==="PROCESSING")&&(this._state="ACTIVE",this._changeFeatureSet()),this._state==="ACTIVE"&&this._transport&&this._transport.open([r.id],i),this._changeRemoteMediaSettings(t,r.mediaSettings),this._changeRemoteParticipantState(t)})}_onHungup(e){return o(this,null,function*(){c.debug(`Participant hungup [${e.participantId}]`,{reason:e.reason});let t=v.composeMessageId(e);if(this._conversation&&this._isMe(t)){this._close(new N(e.reason,{remote:!0}));return}yield this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers);let i=this._participants[t];if(!i){this._warnParticipantNotInConversation(t);return}this._transport&&this._transport.close(t),i.state=e.reason===D.REJECTED?W.REJECTED:W.HUNGUP,this._state!=="CLOSE"&&this._removeParticipant(i,D.HUNGUP)})}_onAddedParticipant(e){return o(this,null,function*(){var r,n;c.debug(`Participant added [${e.participantId}]`);let t=v.composeMessageId(e),i=this._participants[t];if(i&&i.state!==W.HUNGUP&&i.state!==W.REJECTED){c.debug(`Participant [${t}] is already in conversation and is active`);return}i||(i=this._registerParticipantInCache(yield this._createParticipant({id:t,externalId:e.participant.externalId&&fe.fromSignaling(e.participant.externalId,e.participant.deviceIdx||0),mediaSettings:ve(e.participant.mediaSettings),state:e.participant.state,participantState:v.mapParticipantState(e.participant),roles:e.participant.roles||[],muteStates:e.participant.muteStates||{},unmuteOptions:e.participant.unmuteOptions||[],observedIds:e.participant.observedIds||[]}))),i.state=W.CALLED,i.mediaSettings=ve((r=e.participant)==null?void 0:r.mediaSettings),i.participantState=v.mapParticipantState(e.participant),i.roles=((n=e.participant)==null?void 0:n.roles)||[],this._setParticipantsStatus([i],Y.WAITING),this._state==="ACTIVE"&&this._transport&&this._transport.allocate(i.id,!0),f.onParticipantAdded(i.externalId,i.markers),this._changeRemoteMediaSettings(t,i.mediaSettings),this._changeRemoteParticipantState(t,i.participantState),this._invokeRolesChangedCallbackIfNeeded(i)})}_onJoinedParticipant(e){return o(this,null,function*(){var r,n;c.debug(`Participant joined [${e.participantId}]`);let t=v.composeMessageId(e),i=this._participants[t];if(i&&i.state===W.ACCEPTED){c.warn(`Participant [${t}] is already in conversation and is active`);return}i||(i=this._registerParticipantInCache(yield this._createParticipant({id:t,externalId:e.participant.externalId&&fe.fromSignaling(e.participant.externalId,e.participant.deviceIdx||0),mediaSettings:ve(e.participant.mediaSettings),state:e.participant.state,participantState:v.mapParticipantState(e.participant),roles:e.participant.roles||[],muteStates:e.participant.muteStates||{},movieShareInfos:e.participant.movieShareInfos,unmuteOptions:e.participant.unmuteOptions||[],observedIds:e.participant.observedIds||[],markers:this._denormalizeMarkers(t,e.participant.markers)}))),this._conversation&&this._conversation.direction===Ye.OUTGOING&&(this._state==="IDLE"||this._state==="PROCESSING")&&(this._state="ACTIVE",this._changeFeatureSet()),i.state=W.ACCEPTED,i.mediaSettings=ve(e.mediaSettings),i.participantState=v.mapParticipantState(e.participant),i.roles=e.participant.roles||[],((r=this._transport)==null?void 0:r.isAllocated(i.id))?this._setParticipantsStatus([i],Y.CONNECTED):this._setParticipantsStatus([i],Y.WAITING),this._state==="ACTIVE"&&this._transport&&(this._transport.isAllocated(i.id)||this._transport.allocate(i.id,!0),this._transport.open([i.id],null,!!((n=this._conversation)==null?void 0:n.observer))),f.onParticipantJoined(i.externalId,i.markers),this._changeRemoteMediaSettings(t,i.mediaSettings),this._changeRemoteParticipantState(t,i.participantState),this._invokeRolesChangedCallbackIfNeeded(i),f.onMuteStates(i.muteStates,i.unmuteOptions,Object.keys(i.muteStates),!1,!1,i.externalId,void 0,!0),yield this._processSharedMovieInfos(i.movieShareInfos)})}_onClosedConversation(e){this._toggleJoinAvailability(),this._close(new N(e.reason,{remote:!0}))}_onMediaSettingsChanged(e){return o(this,null,function*(){let t=v.composeMessageId(e);yield this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers),this._changeRemoteMediaSettings(t,ve(e.mediaSettings))})}_onParticipantStateChanged(e){return o(this,null,function*(){let t=v.composeMessageId(e);yield this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers),this._changeRemoteParticipantState(t,v.mapParticipantState(e))})}_onNeedRate(){this._conversation&&(this._conversation.needRate=!0,this._changeNeedRate())}_onFeatureSetChanged(e){this._conversation&&(this._conversation.features=e.features,this._conversation.featuresPerRole=e.featuresPerRole,this._changeFeatureSet())}_onMultipartyChatCreated(e){this._conversation&&(this._conversation.chatId=e.chatId,this._toggleJoinAvailability(),f.onMultipartyChatCreated(this._conversation))}_onForceMediaSettingsChange(e){return o(this,null,function*(){if(!this._mediaSource)return;let t=this._mediaSource.getMediaSettings(),i=ve(e.mediaSettings);t.isAudioEnabled!==i.isAudioEnabled&&(yield this._mediaSource.toggleAudio(i.isAudioEnabled)),t.isVideoEnabled!==i.isVideoEnabled&&(yield this._mediaSource.toggleVideo(i.isVideoEnabled)),d.consumerScreenTrack&&t.isScreenSharingEnabled!==i.isScreenSharingEnabled&&(yield this._mediaSource.toggleScreenCapturing(i.isScreenSharingEnabled,i.isAudioSharingEnabled))})}_onSettingsUpdate(e){c.debug("Got settings update notification",e);let t={camera:e.camera,screenSharing:e.screenSharing};this._serverSettings=ir(this._serverSettings,t),this._transport&&this._transport.updateSettings(this._serverSettings)}_onVideoQualityUpdate(e){c.debug("Got video quality update notification",e);let t=Math.round(e.quality.maxBitrate/1024),i=e.quality.maxDimension,r={camera:Object.assign({},this._serverSettings.camera,{maxBitrateK:t,maxDimension:i}),screenSharing:null};this._serverSettings=ir(this._serverSettings,r),this._transport&&this._transport.updateSettings(this._serverSettings)}_onPeerRegistered(e){let t=v.composeMessageId(e);this._participants[t]&&(this._participants[t].clientType=e.clientType,this._participants[t].platform=e.platform)}_onMicSwitched(e){return o(this,null,function*(){f.onDeviceSwitched(oe.AUDIO,!e.mute),yield this.toggleLocalAudio(!e.mute)})}_onChatMessage(e){return o(this,null,function*(){let t=v.composeMessageId(e),i;this._participants[t]?i=this._participants[t].externalId:i=yield this._getParticipantId(t),f.onChatMessage(e.message,i,e.direct)})}_onCustomData(e){return o(this,null,function*(){if(e.data.hasOwnProperty("sdk"))return;let t=v.composeMessageId(e),i;this._participants[t]?i=this._participants[t].externalId:i=yield this._getParticipantId(t),f.onCustomData(e.data,i,e.direct)})}_onRecordInfo(e){return o(this,null,function*(){var i;if(!this._conversation)return;let t=!1;if(!this._conversation.recordInfo!=!e?t=!0:this._conversation.recordInfo&&e&&(t=this._conversation.recordInfo.recordMovieId!==e.recordMovieId),t)if(e){let r=yield this._getParticipantId(e.initiator);f.onRecordStarted(r,e.recordMovieId,e.recordStartTime,e.recordType,e.recordExternalMovieId,e.recordExternalOwnerId)}else f.onRecordStopped();this._conversation.recordInfo=e,e&&this._transport.getTopology()===ne.SERVER&&this._participantState!==W.CALLED&&this._transport.open(this._transport.allocated(),null,!!((i=this._conversation)==null?void 0:i.observer),!0)})}_onRolesChanged(e,t){if(this._conversation&&this._isMe(e)&&!Ot(this._conversation.roles,t)){c.debug(`Local roles changed: ${t}`),this._conversation.roles=t,f.onLocalRolesChanged(t),this._processMuteState({mediaOptions:bt(this._conversation.muteStates,ke.MUTE_PERMANENT),stateUpdated:!0});return}let i=this._participants[e];i&&!Ot(i.roles,t)&&(c.debug(`Roles for participant [${e}] changed: ${t}`),i.roles=t,f.onRolesChanged(i.externalId,t))}_onMuteParticipant(e,t=null){return o(this,null,function*(){if(!this._conversation)return;let i=e.muteStates||{},r=e.unmuteOptions||[],n=e.mediaOptions||[],s=e.adminId?this._participants[e.adminId]:null;if(e.participantId&&!this._isMe(e.participantId)){if(!this._isCallAdmin()){c.warn(`Not admin got mute states for participant [${e.participantId}]`);return}let p=this._participants[e.participantId];p&&(c.debug(`Mute states for participant [${e.participantId}] changed`,i),f.onMuteStates(i,r,n,e.muteAll,e.unmute,p.externalId,s==null?void 0:s.externalId,e.stateUpdated,e.requestedMedia));return}if(!(v.isObjectsEquals(this._conversation.muteStates,i)&&v.isArraysEquals(this._conversation.unmuteOptions,r)&&!n.length)){if(this._conversation.muteStates=i,this._conversation.unmuteOptions=r,this._isMe(e.adminId)){e.muteAll&&f.onMuteStates(i,r,n,e.muteAll,e.unmute,null,this._conversation.externalId,e.stateUpdated,e.requestedMedia);return}yield this._processMuteState({mediaOptions:n,muteAll:e.muteAll,unmute:e.unmute,serverSettings:t,admin:s,stateUpdated:e.stateUpdated,requestedMedia:e.requestedMedia})}})}_processMuteState(l){return o(this,arguments,function*({mediaOptions:e=[],muteAll:t=!1,unmute:i=!1,serverSettings:r=null,admin:n=null,stateUpdated:s,requestedMedia:p}){if(!this._conversation||!this._mediaSource||this._participantState!==W.ACCEPTED)return;let u=Object.assign({},this._conversation.muteStates),P=this._conversation.unmuteOptions,C=this._mediaSource.getMediaSettings(),O=Object.entries(u);for(let[x,H]of O)if(!(H!==ke.MUTE&&H!==ke.MUTE_PERMANENT)&&(this._isCallAdmin()&&H===ke.MUTE_PERMANENT&&!t&&(u[x]=ke.MUTE),!(!e.includes(x)||i)))switch(x){case oe.VIDEO:C.isVideoEnabled&&!(r==null?void 0:r.isVideoEnabled)&&(f.onDeviceSwitched(oe.VIDEO,!1),yield this.toggleLocalVideo(!1));break;case oe.AUDIO:C.isAudioEnabled&&!(r==null?void 0:r.isAudioEnabled)&&(f.onDeviceSwitched(oe.AUDIO,!1),yield this.toggleLocalAudio(!1));break;case oe.SCREEN_SHARING:C.isScreenSharingEnabled&&!(r==null?void 0:r.isScreenSharingEnabled)&&(f.onDeviceSwitched(oe.SCREEN_SHARING,!1),yield this.toggleScreenCapturing(!1,!1));break;case oe.AUDIO_SHARING:C.isAudioSharingEnabled&&!(r==null?void 0:r.isAudioSharingEnabled)&&(f.onDeviceSwitched(oe.AUDIO_SHARING,!1),yield this.toggleScreenCapturing(C.isScreenSharingEnabled,!1));break}f.onMuteStates(u,P,e,t,i,null,n==null?void 0:n.externalId,s,p)})}_onPinParticipant(e,t=!1,i){return o(this,null,function*(){if(!this._conversation)return;let r=this._conversation.pinnedParticipantId;if(r&&r!==e)if(this._isMe(r))f.onLocalPin(!0);else{let n=yield this._getExternalIdByParticipantId(r);n&&f.onPinnedParticipant(n,!0,this._denormalizeMarkers(e,i))}if(this._isMe(e))f.onLocalPin(t);else{let n=yield this._getExternalIdByParticipantId(e);n&&f.onPinnedParticipant(n,t,this._denormalizeMarkers(e,i))}this._conversation.pinnedParticipantId=t?null:e})}_onOptionsChanged(e){this._conversation&&!Ar(this._conversation.options,e)&&(this._conversation.options=e,f.onOptionsChanged(e))}_onNetworkStatus(e){if(this._conversation){let t=[];for(let[i,r]of Object.entries(e)){let n;if(this._isMe(i)||i==="")n=this._conversation.networkRating;else if(this._participants[i])n=this._participants[i].networkRating;else continue;if(n!==r)if(this._isMe(i)||i==="")this._conversation.networkRating=r,f.onLocalNetworkStatusChanged(r);else{let s=this._participants[i];s.networkRating=r,t.push({uid:s.externalId,rating:r})}}if(t.length===0)return;c.log("Received network status update: ",e),f.onNetworkStatusChanged(t)}}_onRemoteStreamSecond(e,t){let i=this._participants[e];if(!!i){if(d.producerScreenTrack){f.onRemoteScreenStream(i.externalId,t);return}if(i.secondStream=t,d.videoTracksCount>0){let r=e;if(!this._streamIdByStreamDescription.has(r)){c.error("Received remote stream notification for a participant that has no track associated with it",r);return}let n=this._streamIdByStreamDescription.get(r);if(!n||this._streamWaitTimerByStreamDescription.has(r)){c.log("Delaying secondary stream start/stop until main stream becomes available",r);return}let s=this._streamByStreamId.get(n);if(!s){h.log(E.PAT_ERROR,"streamNotFound"),c.error(`Could not find stream by ID: ${n}`);return}f.onRemoteStream(i.externalId,i.secondStream||s)}else{let r=t||i.remoteStream;r&&f.onRemoteStream(i.externalId,r)}}}_onPeerConnectionClosed(e){e===ne.SERVER&&this._cleanupParticipantAgnosticStreams()}_changeFeatureSet(){if(this._conversation){let e=this._state==="ACTIVE",t=this._conversation.features.includes(zt.ADD_PARTICIPANT);f.onCallState(e,t,this._conversation)}}_changeNeedRate(){this._conversation&&this._conversation.needRate&&f.onRateNeeded()}_onVolumesDetected(e){let t=[];for(let[i,r]of Object.entries(e)){let n=this._participants[i];n&&n.externalId&&t.push({uid:n.externalId,volume:r.real})}f.onVolumesDetected(t)}_onSpeakerChanged(e){this._activeSpeakerId=e,this._participants[e]&&this._lastSignalledActiveSpeakerId!==e&&(f.onSpeakerChanged(this._participants[e].externalId),this._lastSignalledActiveSpeakerId=e)}_onTransportStateChanged(e,t){return o(this,null,function*(){c.debug(`Transport state has changed: ${t}`,e);let i=this._getStatusByTransportState(t);if(!i)return;let r=e.reduce((n,s)=>{if(s in this._participants){let p=this._participants[s];n.push(p),t===B.CONNECTED&&(p.remoteStream||(p.mediaSettings&&this._changeRemoteMediaSettings(s,p.mediaSettings),this._changeRemoteParticipantState(s,p.participantState)),this._updateDisplayLayoutFromCache(s))}else this._warnParticipantNotInConversation(s);return n},[]);!r.length||this._setParticipantsStatus(r,i)})}_onTransportLocalStateChanged(e){return o(this,null,function*(){var t;if(c.debug(`Local transport state has changed: ${e}`),e===B.CONNECTED&&(f.onLocalStatus(Y.CONNECTED),((t=this._transport)==null?void 0:t.getTopology())===ne.SERVER)){let i=Object.values(this._myLastRequestedLayouts);yield this.updateDisplayLayout(i)}e===B.CONNECTING&&f.onLocalStatus(Y.CONNECTING),e===B.RECONNECTING&&f.onLocalStatus(Y.RECONNECT),e===B.FAILED&&this._transport&&this._transport.allocated().length===0&&(this._signaling.ready&&(yield this._signaling.hangup(D.FAILED)),this._close(new N(D.FAILED),"Transport failed"))})}_onRemoteTrackAdded(e,t,i){return o(this,null,function*(){if(e.endsWith(Be.AUDIO_MIX))c.debug("Remote audio mix track added"),this._audioOutput.add(i),f.onRemoteMixedAudioStream(t);else if(e.startsWith(Be.PARTICIPANT_AGNOSTIC_TRACK_PREFIX))c.debug(`Participant-agnostic track added: ${e}`),this._streamByStreamId.set(e,t);else{c.debug(`Remote track added on the participant [${e}]`,{kind:i.kind});let r=this._participants[e];if(r||(c.warn(`Conversation: track added before participant [${e}]`),r=this._registerParticipantInCache(yield this._createParticipant({id:e})),this._setParticipantsStatus([r],Y.WAITING),this._activeSpeakerId===e&&this._lastSignalledActiveSpeakerId!==e&&(f.onSpeakerChanged(r.externalId),this._lastSignalledActiveSpeakerId=e)),this._transport&&!this._transport.isAllocated(r.id)&&this._transport.allocate(r.id,!1),i.kind===ce.audio&&(this._audioOutput.add(i),d.preserveAudioTracks||t.removeTrack(i)),r.remoteStream!==t){if(r.remoteStream=t,r.secondStream)return;f.onRemoteStream(r.externalId,t)}r.mediaSettings&&this._changeRemoteMediaSettings(e,r.mediaSettings),d.batchParticipantsOnStart||this._changeRemoteParticipantState(e,r.participantState)}})}_onRemoteTrackRemoved(e,t,i){switch(c.debug(`[${e}] remote track (removed)`,{track:i}),i.kind){case ce.audio:this._removeAudioTrack(e,t,i);break;case ce.video:case ce.screen:this._removeVideoTrack(e,t,i);break}}_removeAudioTrack(e,t,i){if(e!==Be.AUDIO_MIX){let r=this._participants[e];if(!r||r.remoteStream&&r.remoteStream!==t)return}this._audioOutput.remove(i)}_removeVideoTrack(e,t,i){}_onTopologyChanged(e){e===ne.DIRECT&&(this._onRemoteSignalledStall([]),this._onRemoteAllStall(!1)),this._conversation&&(this._conversation.topology=e,this._changeFeatureSet())}_onRemoteAllStall(e){if(this._remoteAllStalled===e)return;this._remoteAllStalled=e;let t=[],i=[];for(let r in this._participants)if(this._participants.hasOwnProperty(r)){let n=this._participants[r];e||this._lastStalled[r]?t.push(n):i.push(n)}t.length&&this._setParticipantsStatus(t,Y.RECONNECT),i.length&&this._setParticipantsStatus(i,Y.CONNECTED)}_onRemoteSignalledStall(e){let t={},i=[],r=[];e.forEach(n=>{if(t[n]=!0,!this._lastStalled[n]){let s=this._participants[n];s&&!this._remoteAllStalled&&i.push(s)}delete this._lastStalled[n]}),Object.keys(this._lastStalled).forEach(n=>{let s=this._participants[n];s&&!this._remoteAllStalled&&r.push(s)}),i.length&&this._setParticipantsStatus(i,Y.RECONNECT),r.length&&this._setParticipantsStatus(r,Y.CONNECTED),this._lastStalled=t}_onRemoteDataStats(e){this._debugInfo&&this._debugInfo.onRemoteDataStats(e,this._participants),this._fixAudioDevice(e.outbound.rtps)}_fixAudioDevice(e){var t;!y.hasMicrophone()||!this._audioFix||!((t=this._mediaSource)==null?void 0:t.getMediaSettings().isAudioEnabled)||this._audioFix.fix(e)}_toggleJoinAvailability(){let e=this._conversation&&this._conversation.chatId,t=e&&this._state!=="CLOSE"||!1;e&&(c.debug("Toggle join availability",{available:t,chatId:e}),f.onJoinStatus(t,e))}_updateDisplayLayoutFromCache(e){return o(this,null,function*(){var i;if(((i=this._transport)==null?void 0:i.getTopology())!==ne.SERVER)return;let t=this._participants[e];t&&t.lastRequestedLayouts&&Object.keys(t.lastRequestedLayouts).length&&(yield this.updateDisplayLayout(Object.values(t.lastRequestedLayouts)))})}_setParticipantsStatus(e,t,i=null){if(!e.length)return;let r=e.reduce((n,s)=>(s.status!==t&&(s.status=t,d.batchParticipantsOnStart?n.push(s.externalId):f.onParticipantStatus(s.externalId,t,i)),n),[]);!r.length||d.batchParticipantsOnStart&&f.onRemoteStatus(r,t,i)}_onJoinLinkChanged(e){f.onJoinLinkChanged(e.joinLink)}_onFeedback(e){return o(this,null,function*(){let t=n=>o(this,null,function*(){return(yield this._registerParticipantAndSetMarkersIfChunkEnabled(n)).externalId}),i=e.feedback.map(n=>o(this,null,function*(){let s=n.items.map(l=>o(this,null,function*(){if(l.participantId===this._conversation.compositeUserId)return Promise.resolve(ht(Ue({},l),{participantId:this._conversation.externalId}));let u=yield t(l.participantId);return ht(Ue({},l),{participantId:u})})),p=yield Promise.all(s);return ht(Ue({},n),{items:p})})),r=yield Promise.all(i);f.onFeedback(r)})}_isMe(e){var t;return e===((t=this._conversation)==null?void 0:t.compositeUserId)}},V=j;V._delayedHangup=!1;var Si=class extends Error{constructor(e,t){super(e);Object.setPrototypeOf(this,Si.prototype),this.participantErrors=t}};var qt,vi=null;function zn(){return o(this,null,function*(){var a;if(d.apiEnv!=="AUTO")return d.apiEndpoint;try{let e=atob("aHR0cHM6Ly9kbnMuZ29vZ2xlL3Jlc29sdmU/bmFtZT12aWRlby5fZW5kcG9pbnQub2sucnUmdHlwZT1UWFQ="),i=yield(yield fetch(e,{method:"GET",mode:"cors",cache:"no-cache"})).json(),r=(a=i==null?void 0:i.Answer[0])==null?void 0:a.data;if(!r)throw new Error("Wrong DNS response");return c.debug("Resolved API endpoint",r),r}catch(e){return c.warn("Failed to resolve API endpoint using DNS, default is used",e),d.apiEndpoint}})}function Ca(){return qt?Promise.resolve(qt):vi||(vi=zn().then(a=>qt=a).finally(()=>vi=null))}function ya(){if(!d.apiKey)throw new N(ae.API,{message:"Required argument apiAppKey not passed"})}function dr(i){return o(this,arguments,function*(a,e={},t=!1){if(!window.Blob||!window.navigator.sendBeacon)return;yield Ca();let r=Pa(a,e,t),n=new window.Blob([r],{type:"application/x-www-form-urlencoded"});window.navigator.sendBeacon(`${qt}/fb.do`,n)})}function Ra(i){return o(this,arguments,function*(a,e={},t=!1){yield Ca();let r=Pa(a,e,t);return Qn(r)})}function Qn(a){return o(this,null,function*(){return new Promise((e,t)=>{let i=new XMLHttpRequest;i.open("POST",`${qt}/fb.do`,!0),i.setRequestHeader("Content-type","application/x-www-form-urlencoded"),i.onreadystatechange=()=>{if(i.readyState!==XMLHttpRequest.DONE)return;let r;try{r=JSON.parse(i.responseText)}catch(n){r={result:i.responseText}}i.status!==200||r.hasOwnProperty("error_msg")?t(r):e(r)},i.send(a)})})}function Pa(a,e={},t=!1){e.method=a,e.format="JSON",e.application_key||(e.application_key=d.apiKey),t||(ie.sessionKey?e.session_key=ie.sessionKey:ie.accessToken&&(e.access_token=ie.accessToken));for(let[r,n]of Object.entries(e))typeof n=="object"&&(e[r]=JSON.stringify(n));let i="";for(let[r,n]of Object.entries(e))i&&(i+="&"),i+=`${r}=${encodeURIComponent(n)}`;return i}var Zn=10,es=700,ts=3e3,$t=class extends _t{constructor(){super(...arguments);this._userId=null;this._externalUidsCache={}}_callUnsafe(r){return o(this,arguments,function*(e,t={},i=!1){let n=s=>o(this,null,function*(){try{return yield Ra(e,t,i)}catch(p){if(!p.hasOwnProperty("error_msg")&&(s++,c.debug(`${e} network error, attempt ${s}...`),s<Zn))return yield v.delay(Math.min(s*es,ts)),n(s);throw c.warn(e,"error",p),p}});return n(0)})}_call(r){return o(this,arguments,function*(e,t={},i=!1){try{return yield this._callUnsafe(e,t,i)}catch(n){c.warn("Api call error",n);let s=ae.API;switch(n.error_code){case 102:case 103:case 104:return yield this.authorize(),this._callUnsafe(e,t,i);case 1101:s=D.SERVICE_DISABLED;break;case 1102:s=D.CALLEE_IS_OFFLINE;break;case 1103:s=D.NOT_FRIENDS;break;case 1104:case 1106:s=D.EXTERNAL_API_ERROR;break;case 1113:s=D.CALLER_IS_REJECTED;break}throw new N(s,{message:n.error_msg,code:n.error_code})}})}userId(e){return o(this,null,function*(){let t=v.decomposeId(e).id;return ie.isEmpty()?Ee.fromId(String(t)):(this._externalUidsCache.hasOwnProperty(t)||Object.assign(this._externalUidsCache,yield this._getExternalIdsByOkIds([t])),Ee.fromString(this._externalUidsCache[t]))})}prepareUserIds(e){return o(this,null,function*(){ie.isEmpty()||Object.assign(this._externalUidsCache,yield this._getExternalIdsByOkIds(e))})}authorize(){return o(this,null,function*(){if(!this._uuid){let t=Ze.get("uuid");t||(t=v.uuid(),Ze.set("uuid",t)),this._uuid=String(t)}let e={session_data:{version:2,device_id:this._uuid,client_version:d.appVersion,client_type:"SDK_JS"}};return d.authToken&&(e.session_data.auth_token=d.authToken,e.session_data.version=3),this._callUnsafe("auth.anonymLogin",e,!0).then(t=>{t.uid&&(this._userId=Number(t.uid)),ie.sessionKey=t.session_key,ie.sessionSecretKey=t.session_secret_key}).catch(t=>{throw t.error_code===401&&f.onTokenExpired(),new N(ae.AUTH,{message:t.error_msg,code:t.error_code})})})}log(e){let t={collector:"ok.mobile.apps.video",data:JSON.stringify({application:`${d.appName}:${d.sdkVersion}`,platform:d.platform,items:e})};dr("log.externalLog",t)}init(){ya()}joinConversation(e,t=!1,i){return o(this,null,function*(){let r={conversationId:e,isVideo:t,protocolVersion:d.protocolVersion};return i&&(r.chatId=i),this._call("vchat.joinConversation",r)})}createConversation(n){return o(this,arguments,function*(e,t="",i=!1,{onlyAdminCanShareMovie:r}={}){let s=this._preareStartConversationData({conversationId:e,isVideo:!1,joiningAllowed:!0,payload:t,requireAuthToJoin:i,onlyAdminCanShareMovie:r});return this._startConversation(s)})}startConversation(u,P,C){return o(this,arguments,function*(e,t,i,r=!1,n="",s=!1,p=!1,{onlyAdminCanShareMovie:l}={}){let O=this._preareStartConversationData({conversationId:e,isVideo:r,joiningAllowed:s,payload:n,requireAuthToJoin:p,onlyAdminCanShareMovie:l});if(t&&t.length)switch(i){case We.USER:O.uids=t.join(",");break;case We.GROUP:O.gid=t[0];break;case We.CHAT:O.chatId=t[0];break}return this._startConversation(O)})}_preareStartConversationData({conversationId:e,isVideo:t,payload:i="",joiningAllowed:r=!1,requireAuthToJoin:n=!1,onlyAdminCanShareMovie:s}){let p={conversationId:e,isVideo:t,protocolVersion:d.protocolVersion};return r&&(p.createJoinLink=!0),i&&(p.payload=i),d.domain&&(p.domainId=d.domain),d.externalDomain&&(p.externalDomain=d.externalDomain),n&&(p.requireAuthToJoin=!0),s!==void 0&&(p.onlyAdminCanShareMovie=s),p}_startConversation(e){return o(this,null,function*(){return this._call("vchat.startConversation",e)})}createJoinLink(e){return o(this,null,function*(){return this._call("vchat.createJoinLink",{conversationId:e})})}removeJoinLink(e){return o(this,null,function*(){return this._call("vchat.removeJoinLink",{conversationId:e})})}getAnonymTokenByLink(e,t){return o(this,null,function*(){let i={joinLink:e};t&&(i.anonymName=t);let r=yield this._call("vchat.getAnonymTokenByLink",i);return this._userId=Number(r.uid),r.token})}joinConversationByLink(e,t=!1,i,r){return o(this,null,function*(){let n={joinLink:e,isVideo:t,protocolVersion:d.protocolVersion};return(i==null?void 0:i.length)&&(n.observedIds=i.join(",")),d.anonymToken&&(n.anonymToken=d.anonymToken),r&&(n.payload=r),this._call("vchat.joinConversationByLink",n)})}getOkIdsByExternalIds(e){return o(this,null,function*(){let t=Ee.fromIds(e),i=[],r={methods:[]},n=[],s=Object.keys(this._externalUidsCache),p=Object.values(this._externalUidsCache);for(let u of t){let P=Ee.toString(u),C=p.indexOf(P);C>-1?i.push(Number(s[C])):(n.push(P),r.methods.push({"vchat.getOkIdByExternalId":{params:{externalId:u.id,anonym:u.type===ct.ANONYM},onError:"SKIP"}}))}return r.methods.length&&(yield this._call("batch.executeV2",r)).forEach((u,P)=>{if(u.ok){let C=Number(u.ok.ok_id);this._externalUidsCache[C]=n[P],i.push(C)}}),i})}getExternalIdsByOkIds(e){return o(this,null,function*(){let t=[],i=[];for(let n of e)this._externalUidsCache.hasOwnProperty(n)?t.push(Ee.fromString(this._externalUidsCache[n])):i.push(n);if(!i.length)return t;let r=yield this._getExternalIdsByOkIds(i);Object.assign(this._externalUidsCache,r);for(let n of i)r.hasOwnProperty(n)&&t.push(Ee.fromString(r[n]));return t})}getCachedOkIdByExternalId(e){let t=Object.keys(this._externalUidsCache),i=Object.values(this._externalUidsCache),r=Ee.toString(e),n=i.indexOf(r);return n>-1?v.composeUserId(t[n],X.USER):null}cacheExternalId(e,t){let i=v.decomposeId(e).id;this._externalUidsCache[i]=Ee.toString(t)}getConversationParams(e){return o(this,null,function*(){let t={};return d.anonymToken&&(t.anonymToken=d.anonymToken),e&&(t.conversationId=e),this._call("vchat.getConversationParams",t)})}getUserId(){return this._userId}setUserId(e){this._userId=e}hangupConversation(e){let t={conversationId:e,reason:D.HUNGUP};d.anonymToken&&(t.anonymToken=d.anonymToken),dr("vchat.hangupConversation",t)}removeHistoryRecords(e){return o(this,null,function*(){yield this._call("vchat.removeHistoryRecords",{recordIds:e.join(",")})})}cleanup(){}_getExternalIdsByOkIds(e){return o(this,null,function*(){let t={};try{let i=yield this._call("vchat.getExternalIdsByOkIds",{uids:e.join(",")});if(i.external_ids)for(let[r,n]of Object.entries(i.external_ids))t[r]=Ee.fromIdToString(n,ct.USER);if(i.anonym_ids)for(let[r,n]of Object.entries(i.anonym_ids))t[r]=Ee.fromIdToString(n,ct.ANONYM);return t}catch(i){return t}})}};var G=it(require("messagepack"));var ba=(M=>(M.RECOVER="recover",M.ACCEPT_CALL="accept-call",M.ADD_PARTICIPANT="add-participant",M.REMOVE_PARTICIPANT="remove-participant",M.HANGUP="hangup",M.TRANSMIT_DATA="transmit-data",M.ACCEPT_PRODUCER="accept-producer",M.ALLOCATE_CONSUMER="allocate-consumer",M.CHANGE_MEDIA_SETTINGS="change-media-settings",M.CHANGE_PARTICIPANT_STATE="change-participant-state",M.CHANGE_STREAM_PRIORITIES="change-streams-priorities",M.UPDATE_DISPLAY_LAYOUT="update-display-layout",M.REPORT_PERF_STAT="report-perf-stat",M.RECORD_START="record-start",M.RECORD_STOP="record-stop",M.RECORD_SET_ROLE="record-set-role",M.RECORD_GET_STATUS="record-get-status",M.SWITCH_MICRO="switch-micro",M.SWITCH_TOPOLOGY="switch-topology",M.REQUEST_REALLOC="request-realloc",M.CHAT_MESSAGE="chat-message",M.CHAT_HISTORY="chat-history",M.CUSTOM_DATA="custom-data",M.GRANT_ROLES="grant-roles",M.MUTE_PARTICIPANT="mute-participant",M.ENABLE_FEATURE_FOR_ROLES="enable-feature-for-roles",M.PIN_PARTICIPANT="pin-participant",M.UPDATE_MEDIA_MODIFIERS="update-media-modifiers",M.CHANGE_OPTIONS="change-options",M.GET_WAITING_HALL="get-waiting-hall",M.GET_PARTICIPANT_LIST_CHUNK="get-participant-list-chunk",M.GET_PARTICIPANTS="get-participants",M.PROMOTE_PARTICIPANT="promote-participant",M.REQUEST_TEST_MODE="request-test-mode",M.ADD_MOVIE="add-movie",M.UPDATE_MOVIE="update-movie",M.REMOVE_MOVIE="remove-movie",M.FEEDBACK="feedback",M))(ba||{}),U=ba;function Ei(){let a=new DataView(new ArrayBuffer(64)),e=0;function t(i){if(e+i>a.byteLength){let r=new Uint8Array(Math.max(e+i,a.byteLength+64));r.set(new Uint8Array(a.buffer.slice(0,e))),a=new DataView(r.buffer)}}return{put(i){if(t(i.byteLength),is(i)){let r=i.buffer;new Uint8Array(a.buffer).set(new Uint8Array(r),e)}else new Uint8Array(a.buffer).set(new Uint8Array(i),e);e+=i.byteLength},putI8(i){t(1),a.setInt8(e,i),++e},putI16(i){t(2),a.setInt16(e,i),e+=2},putI32(i){t(4),a.setInt32(e,i),e+=4},putI64(i){t(8);let r=i<0;r&&(i=-i);let n=i/4294967296|0,s=i%4294967296|0;r&&(s=~s+1|0,n=s===0?~n+1|0:~n),a.setUint32(e,n),a.setUint32(e+4,s),e+=8},putUi8(i){t(1),a.setUint8(e,i),++e},putUi16(i){t(2),a.setUint16(e,i),e+=2},putUi32(i){t(4),a.setUint32(e,i),e+=4},putUi64(i){t(8),a.setUint32(e,i/4294967296|0),a.setUint32(e+4,i%4294967296),e+=8},putF(i){t(8),a.setFloat64(e,i),e+=8},ui8array(){return new Uint8Array(a.buffer.slice(0,e))}}}function is(a){return a.buffer!==void 0}function Ii(a){let e=ArrayBuffer.isView(a)?new DataView(a.buffer,a.byteOffset,a.byteLength):new DataView(a),t=0;return{peek(){return e.getUint8(t)},get(i){t+=i;let r=e.byteOffset;return e.buffer.slice(r+t-i,r+t)},getI8(){return e.getInt8(t++)},getI16(){return t+=2,e.getInt16(t-2)},getI32(){return t+=4,e.getInt32(t-4)},getI64(){t+=8;let i=e.getInt32(t-8),r=e.getUint32(t-4);return i*4294967296+r},getUi8(){return e.getUint8(t++)},getUi16(){return t+=2,e.getUint16(t-2)},getUi32(){return t+=4,e.getUint32(t-4)},getUi64(){t+=8;let i=e.getUint32(t-8),r=e.getUint32(t-4);return i*4294967296+r},getF32(){return t+=4,e.getFloat32(t-4)},getF64(){return t+=8,e.getFloat64(t-8)}}}var Ma=0,Aa=1,rs=0,as=1,ns=2,pr=0,ss=0,os=0,cs=1,lr=class{constructor(){this.participantIdRegistry=null}setParticipantIdRegistry(e){this.participantIdRegistry=e}serializeUpdateDisplayLayout(e,t){let i=Ei();G.Int.enc(i,Ma),G.Int.enc(i,pr),G.Int.enc(i,e),G.Nil.enc(i,null);let r=[];for(let n in t)t.hasOwnProperty(n)&&this.writeLayout(t,n,r);return G.Arr.enc(i,r),G.Nil.enc(i,null),i.ui8array()}writeLayout(e,t,i){let r=e[t],n=Ei();if(this.writeStreamDesc(t,n),Ft(r))G.Int.enc(n,as);else if(er(r))G.Int.enc(n,ns);else if(G.Int.enc(n,rs),r.priority!==void 0?G.Int.enc(n,r.priority):G.Nil.enc(n,null),r.width!==void 0&&r.height!==void 0?(G.Int.enc(n,Math.round(r.width)),G.Int.enc(n,Math.round(r.height))):(G.Nil.enc(n,null),G.Nil.enc(n,null)),r.fit!==void 0)switch(r.fit){case"cv":G.Int.enc(n,os);break;case"cn":G.Int.enc(n,cs);break;default:G.Nil.enc(n,null)}else G.Nil.enc(n,null);i.push(n.ui8array())}writeStreamDesc(e,t){if(this.participantIdRegistry){let i=this.participantIdRegistry.getCompactId(e);if(i!==void 0){G.Int.enc(t,i);return}}G.Str.enc(t,e)}serializePerfStatReport(e,t){let i=Ei();return G.Int.enc(i,Aa),G.Int.enc(i,pr),G.Int.enc(i,e),G.Int.enc(i,t.framesDecoded),G.Int.enc(i,t.framesReceived),i.ui8array()}deserializeCommandResponse(e){return o(this,null,function*(){let t;if(e instanceof Blob){let s=yield e.arrayBuffer();t=Ii(s)}else t=Ii(e);let i=G.Int.dec(t),r=G.Int.dec(t);if(r!==pr){c.warn("Unsupported version for command type: "+i+", version "+r);return}if(G.Int.dec(t)!==ss){c.warn("Error code: "+i+"received for command type: "+i+", version "+r);return}switch(i){case Ma:return this.deserializeUpdateDisplayLayoutResponse(t);case Aa:return this.deserializeReportPerfStatResponse(t);default:return c.warn("unsupported command response commandType: "+i),null}})}deserializeUpdateDisplayLayoutResponse(e){let t=G.Int.dec(e),i=G.Arr.dec(e),r={};return i.forEach(n=>{let s=Ii(n),p=G.Any.dec(s);if(typeof p=="string")r[p]=G.Int.dec(s);else{let l=p,u=qe(this.participantIdRegistry.getStreamDescription(l));r[u]=G.Int.dec(s)}}),{type:"response",sequence:t,response:U.UPDATE_DISPLAY_LAYOUT.toString(),errorCodeByParticipantId:r}}deserializeReportPerfStatResponse(e){let t=G.Int.dec(e),i=G.Int.dec(e);return{type:"response",sequence:t,response:U.REPORT_PERF_STAT.toString(),estimatedPerformanceIndex:i}}};var Da="open",ka=[()=>d.producerScreenTrack,()=>d.videoTracksCount>0,()=>!0,()=>d.filteredMessages,()=>d.consumerScreenTrack,()=>!0,()=>d.movieShare,()=>d.useParticipantListChunk],ds=10,we=class extends ft{constructor(){super(...arguments);this.socket=null;this.sequence=1;this.lastStamp=0;this.websocketCommandsQueue=[];this.datachannelCommandsQueue=[];this.incomingCache=[];this.responseHandlers={};this.reconnectCount=0;this.conversationResolve=null;this.conversationReject=null;this.connected=!1;this.listenersReady=!1;this.postfix="&platform="+d.platform+"&appVersion="+d.appVersion+"&version="+d.protocolVersion+"&device="+d.device+"&capabilities="+we._getCapabilityFlags();this.peerId=null;this.conversationId=null;this.reconnectTimer=0;this.connectionMessageWaitTimer=0;this.doctorTimer=0;this.participantIdRegistry=null;this.producerNotificationDataChannel=null;this.producerCommandDataChannel=null;this.producerCommandDataChannelEnabled=!1;this.producerCommandSerializationService=new lr}static _getCapabilityFlags(){let e=0;for(let t=0;t<ka.length;t++)ka[t]()&&(e|=1<<t);return e.toString(16).toUpperCase()}get ready(){return this.socket!==null}setEndpoint(e){this.endpoint=e}setConversationId(e){this.conversationId=e}setParticipantIdRegistry(e){this.participantIdRegistry=e,this.producerCommandSerializationService.setParticipantIdRegistry(e)}setProducerNotificationDataChannel(e){this.producerNotificationDataChannel=e,this.producerNotificationDataChannel.onmessage=t=>{var r;let i=(r=this.participantIdRegistry)==null?void 0:r.handleMessage(t.data);i&&this._handleMessage(i)}}setProducerCommandDataChannel(e){this.producerCommandDataChannel=e,this.producerCommandDataChannel.onmessage=t=>{this.producerCommandSerializationService.deserializeCommandResponse(t.data).then(i=>{i&&this._handleMessage(i)}).catch(i=>{c.warn("Cannot parse message at producerCommandDataChannel",i)})},this._handleCommandsQueue(this.datachannelCommandsQueue)}useCommandDataChannel(e){this.producerCommandDataChannelEnabled=e}cleanup(){this.datachannelCommandsQueue=[]}connect(e){return o(this,null,function*(){return this.postfix+=`&clientType=${d.clientType}`,new Promise((t,i)=>{if(this.socket&&this.socket.readyState<WebSocket.CLOSING){h.log(E.SOCKET_ACTION,"already_opened"),i(Error("Socket already opened"));return}this.conversationResolve=r=>{t(r),this.conversationResolve=null,this.conversationReject=null},this.conversationReject=r=>{i(r),this.conversationResolve=null,this.conversationReject=null},this._connect(e)})})}_send(r){return o(this,arguments,function*(e,t={},i=0){if(t.participantId){let n=v.decomposeParticipantId(t.participantId),s=v.decomposeId(n.compositeUserId);t=Object.assign({},t,{participantId:s.id,participantType:s.type}),n.deviceIdx&&(t.deviceIdx=n.deviceIdx)}return this._sendRaw(e,t,i)})}_sendRaw(r){return o(this,arguments,function*(e,t={},i=0){let n=s=>{var l;if(this._isDataChannelCommand(e))this.datachannelCommandsQueue.push(s),((l=this.producerCommandDataChannel)==null?void 0:l.readyState)===Da&&this._handleCommandsQueue(this.datachannelCommandsQueue);else{if(!this.socket){h.log(E.SOCKET_ACTION,"not_opened"),c.warn("Socket not opened"),s.reject(new Error(`Socket not opened [${e}]`),!0);return}this.socket.readyState>WebSocket.OPEN&&(h.log(E.SOCKET_ACTION,"invalid_state"),c.warn(`Socket is not opened, state ${this.socket.readyState}`)),this.websocketCommandsQueue.push(s),this.socket&&this.socket.readyState===WebSocket.OPEN&&this._handleCommandsQueue(this.websocketCommandsQueue)}};return new Promise((s,p)=>{let l=(P,C=!1)=>{!i||C?p(P):(c.debug("Resending a signaling message",e,u.sequence),i--,n(u))},u={sequence:this.sequence++,name:e,params:t,responseTimer:0,resolve:s,reject:l};n(u)})})}_isDataChannelCommand(e){return this.producerCommandDataChannelEnabled?e===U.UPDATE_DISPLAY_LAYOUT||e===U.REPORT_PERF_STAT:!1}static _isDataChannelResponseRequired(e){return e===U.UPDATE_DISPLAY_LAYOUT||e===U.REPORT_PERF_STAT}getNextCommandSequenceNumber(){return this.sequence}hangup(e){return o(this,null,function*(){return this._send(U.HANGUP,{reason:e}).catch(()=>{})})}sendCandidate(e,t){return o(this,null,function*(){return this._send(U.TRANSMIT_DATA,{participantId:e,data:{candidate:t}})})}requestTestMode(e,t){return o(this,null,function*(){return this._send(U.REQUEST_TEST_MODE,{consumer:e,producer:t})})}sendSdp(e,t){return o(this,null,function*(){return this._send(U.TRANSMIT_DATA,{participantId:e,data:{sdp:t}})})}acceptCall(e){return o(this,null,function*(){return this._send(U.ACCEPT_CALL,{mediaSettings:e})})}changeMediaSettings(e){return o(this,null,function*(){return this._send(U.CHANGE_MEDIA_SETTINGS,{mediaSettings:e},ds)})}changeParticipantState(e){return o(this,null,function*(){return this._send(U.CHANGE_PARTICIPANT_STATE,{participantState:{state:e}})})}addParticipant(e,t){return o(this,null,function*(){return this._send(U.ADD_PARTICIPANT,Ue({participantId:e},t))})}removeParticipant(e,t=!1){return o(this,null,function*(){return this._send(U.REMOVE_PARTICIPANT,{participantId:e,ban:t})})}allocateConsumer(e,t){return o(this,null,function*(){let i={capabilities:t};return e&&(i.description=e.sdp),this._send(U.ALLOCATE_CONSUMER,i)})}acceptProducer(e,t){return o(this,null,function*(){let i={description:e.sdp};return t&&(i.ssrcs=t),this._send(U.ACCEPT_PRODUCER,i)})}changePriorities(e){return o(this,null,function*(){return this._send(U.CHANGE_STREAM_PRIORITIES,{typedPriorities:e}).catch(()=>{})})}updateDisplayLayout(e){return o(this,null,function*(){return this._send(U.UPDATE_DISPLAY_LAYOUT,e)})}addMovie(e){return o(this,null,function*(){return this._send(U.ADD_MOVIE,e)})}updateMovie(e){return o(this,null,function*(){return this._send(U.UPDATE_MOVIE,e)})}removeMovie(e){return o(this,null,function*(){return this._send(U.REMOVE_MOVIE,e)})}startStream(e){return o(this,null,function*(){return this._send(U.RECORD_START,e)})}stopStream(){return o(this,null,function*(){return this._send(U.RECORD_STOP)})}recordSetRole(e,t){return o(this,null,function*(){return this._send(U.RECORD_SET_ROLE,{participantId:e,role:t})})}getRecordStatus(){return o(this,null,function*(){return this._send(U.RECORD_GET_STATUS)})}switchTopology(e,t=!1){return o(this,null,function*(){return this._send(U.SWITCH_TOPOLOGY,{topology:e,force:t})})}requestRealloc(){return o(this,null,function*(){return this._send(U.REQUEST_REALLOC)})}reportPerfStat(e){return o(this,null,function*(){return this._send(U.REPORT_PERF_STAT,e)})}chatMessage(e,t=null){return o(this,null,function*(){return this._send(U.CHAT_MESSAGE,{message:e,participantId:t})})}chatHistory(e){return o(this,null,function*(){return this._send(U.CHAT_HISTORY,{count:e})})}customData(e,t){return o(this,null,function*(){return this._send(U.CUSTOM_DATA,{data:e,participantId:t})})}grantRoles(e,t,i){return o(this,null,function*(){let r={participantId:e,roles:t};return i&&(r.revoke=!0),this._sendRaw(U.GRANT_ROLES,r)})}muteParticipant(e,t,i){return o(this,null,function*(){return this._sendRaw(U.MUTE_PARTICIPANT,{participantId:e,muteStates:t,requestedMedia:i})})}enableFeatureForRoles(e,t){return o(this,null,function*(){return this._sendRaw(U.ENABLE_FEATURE_FOR_ROLES,{feature:e,roles:t})})}pinParticipant(e,t){return o(this,null,function*(){let i={participantId:e};return t&&(i.unpin=!0),this._sendRaw(U.PIN_PARTICIPANT,i)})}updateMediaModifiers(e){return o(this,null,function*(){return this._send(U.UPDATE_MEDIA_MODIFIERS,{mediaModifiers:e})})}changeOptions(e){return o(this,null,function*(){return this._send(U.CHANGE_OPTIONS,{options:e})})}getWaitingHall(e=null,t,i=!1){return o(this,null,function*(){let r={};return e&&(r.fromId=e),t&&(r.count=t),i&&(r.backward=i),this._send(U.GET_WAITING_HALL,r)})}promoteParticipant(e,t=!1){return o(this,null,function*(){let i={participantId:e};return t&&(i.demote=t),this._sendRaw(U.PROMOTE_PARTICIPANT,i)})}feedback(e){return o(this,null,function*(){return this._sendRaw(U.FEEDBACK,{key:e})})}close(){this.socket&&this.socket.readyState<WebSocket.CLOSING&&this._closeSocket(),this._stopWaitConnectionMessage(),this._stopDoctor(),clearTimeout(this.reconnectTimer)}readyToSend(){this.listenersReady=!0,this._handleCachedMessages()}getParticipantListChunk(e){return o(this,null,function*(){return this._send(U.GET_PARTICIPANT_LIST_CHUNK,e)})}getParticipants(e){return o(this,null,function*(){return this._send(U.GET_PARTICIPANTS,{externalIds:e})})}_connect(e){if(this.socket&&this.socket.readyState<WebSocket.CLOSING)return;let t="";e&&(t+=`&tgt=${e}`),e===je.RETRY&&this.lastStamp&&(t+=`&recoverTs=${this.lastStamp}`),t=i(t),c.debug("Connecting to "+this.endpoint+this.postfix+t),this.socket=new WebSocket(this.endpoint+this.postfix+t),this.socket.onopen=this._onOpen.bind(this),this.socket.onmessage=this._onMessage.bind(this),this.socket.onerror=this._onError.bind(this),this.socket.onclose=this._onClose.bind(this),this._startDoctor();function i(r){if(!d.useParticipantListChunk)return r;r+=`&partIdx=${d.participantListChunkInitIndex}`;let s=d.participantListChunkInitCount;return s!==null&&(r+=`&partCount=${s}`),r}}_disconnect(){this.socket&&this.socket.readyState<WebSocket.CLOSING&&(this.socket.onopen=null,this.socket.onmessage=null,this.socket.onerror=null,this.socket.onclose=null,this.socket.close(),this.socket=null),this._stopWaitConnectionMessage(),this._stopDoctor(),clearTimeout(this.reconnectTimer)}_onOpen(){c.debug("Socket opened"),h.log(E.SOCKET_ACTION,"opened"),this._waitConnectionMessage(),this._startDoctor()}_onMessage(e){if(this._startDoctor(),e.data==="ping"){this.socket&&this.socket.readyState===WebSocket.OPEN&&this.socket.send("pong");return}try{this._handleMessage(JSON.parse(e.data))}catch(t){h.log(E.SOCKET_ACTION,"parse_error"),c.error("Unable to parse message",t,e.data)}}_handleMessage(e){var t;e.type==="notification"?e.notification==="connection"?(c.debug("Signaling connected",e),this.connected=!0,this.reconnectCount=0,this.endpoint=e.endpoint,e.peerId&&this.peerId!==e.peerId.id&&(this.postfix+=`&peerId=${e.peerId.id}`,this.peerId=e.peerId.id),this._stopWaitConnectionMessage(),this.conversationResolve?this.conversationResolve(e):(this._triggerEvent(Te.RECONNECT,e),e.conversation.topology&&this._triggerEvent(Te.NOTIFICATION,{type:"notification",notification:k.TOPOLOGY_CHANGED,topology:e.conversation.topology})),this.lastStamp&&this._handleCachedMessages(),(t=e.recoverMessages)==null||t.forEach(i=>this._handleMessage(i)),this._handleCommandsQueue(this.websocketCommandsQueue)):!this.connected||!this.listenersReady?this.incomingCache.push(e):this._triggerEvent(Te.NOTIFICATION,e):e.type==="response"&&this.responseHandlers[e.sequence]?this._handleCommandResponse(!0,e):e.type==="error"&&this.responseHandlers[e.sequence]?(h.log(E.SOCKET_ACTION,`error-${e.error}`),this._handleCommandResponse(!1,e)):e.type==="error"?(h.log(E.SOCKET_ACTION,`error-${e.error}`),e.error==="service-unavailable"?this._reconnect():e.error==="conversation-ended"?this.conversationReject?this.conversationReject(new N(D.SOCKET_CLOSED,{message:`Unable to connect to the signaling: ${e.error}`})):this._triggerEvent(Te.NOTIFICATION,{notification:k.CLOSED_CONVERSATION,reason:e.reason}):this.connected||e.error==="invalid-token"?this._throwError(new Error(`Signaling error: ${e.error}`)):e.sequence||(this.conversationReject&&this.conversationReject(new N(ae.SIGNALING_FAILED,{message:`Unable to connect to the signaling: ${e.error}`})),this._closeSocket())):(h.log(E.SOCKET_ACTION,"unknown_message"),c.warn("Unhandled message",e)),this.lastStamp=e.stamp||this.lastStamp}_handleCachedMessages(){let e=[...this.incomingCache];for(this.incomingCache=[];e.length>0;){let t=e.shift();this._handleMessage(t)}}_throwError(e){this._triggerEvent(Te.FAILED,e)}_onError(e){h.log(E.SOCKET_ACTION,"error"),c.error("Signaling error",e)}_onClose(e){h.log(E.SOCKET_ACTION,"closed"),c.debug("Connection closed",{code:e.code,reason:e.reason}),this.connected=!1,this._stopDoctor(),this.socket&&this.reconnectCount++<we.RECONNECT_MAX_COUNT?this._reconnect():this.socket&&this._closeSocket(new Error("Connection closed"))}_closeSocket(e=null){!this.socket||(this._disconnect(),Object.values(this.responseHandlers).forEach(t=>{window.clearTimeout(t.responseTimer),e&&t.reject(new Error("Connection closed"),!0)}),this.websocketCommandsQueue=[],this.responseHandlers={},this.lastStamp=0,e&&this._throwError(new Error("Connection closed")))}_reconnect(){let e=Math.min(we.RECONNECT_MAX_DELAY,we.RECONNECT_DELAY*Math.pow(2,this.reconnectCount-1));c.log(`Reconnect websocket after ${e}ms (${this.reconnectCount})`),h.log(E.SOCKET_ACTION,"reconnect"),this.reconnectTimer=window.setTimeout(this._connect.bind(this,je.RETRY),e)}_handleCommandResponse(e,t){var r;if(!this.responseHandlers.hasOwnProperty(t.sequence))return;let i=this.responseHandlers[t.sequence];window.clearTimeout(i.responseTimer),e?(delete this.responseHandlers[t.sequence],i.resolve(t)):((r=this.socket)==null?void 0:r.readyState)===WebSocket.OPEN?(delete this.responseHandlers[t.sequence],h.log(E.SOCKET_ACTION,"response-timeout"),i.reject(new Error(t.error||`Response timeout [${i.name}]`))):i.responseTimer=window.setTimeout(()=>this._handleCommandResponse(!1,t),we.WAIT_RESPONSE_DELAY)}_handleCommandsQueue(e){var t,i;for(;e.length>0;){let r=e.shift();if(this._isDataChannelCommand(r.name)){if(((t=this.producerCommandDataChannel)==null?void 0:t.readyState)!==Da){r.reject(new Error(`Invalid data channel state: ${(i=this.producerCommandDataChannel)==null?void 0:i.readyState}`));return}we._isDataChannelResponseRequired(r.name)&&(r.responseTimer=window.setTimeout(()=>this._handleCommandResponse(!1,{command:r.name,sequence:r.sequence}),we.WAIT_RESPONSE_DELAY),this.responseHandlers[r.sequence]=r);let s=this._serializeBinary(r);s!==null&&this.producerCommandDataChannel.send(s)}else{if(!this.socket||this.socket.readyState!==WebSocket.OPEN){r.reject(new Error("Invalid state or socket already closed"));continue}r.responseTimer=window.setTimeout(()=>this._handleCommandResponse(!1,{command:r.name,sequence:r.sequence}),we.WAIT_RESPONSE_DELAY),this.responseHandlers[r.sequence]=r,this.socket.send(this._serializeJson(r))}}}_serializeBinary(e){switch(e.name){case U.UPDATE_DISPLAY_LAYOUT:return this.producerCommandSerializationService.serializeUpdateDisplayLayout(e.sequence,e.params);case U.REPORT_PERF_STAT:return this.producerCommandSerializationService.serializePerfStatReport(e.sequence,e.params)}return c.warn("cannot get binary data for data channel command: "+e.name),null}_serializeJson(e){let t;e.name===U.UPDATE_DISPLAY_LAYOUT?t=this._convertDisplayLayout(e.params):t=e.params;let i=Object.assign({command:e.name,sequence:e.sequence},t);return JSON.stringify(i)}_convertDisplayLayout(e){let t=e,i={};for(let r in t)t.hasOwnProperty(r)&&(i[r]=_a(t[r]));return{layouts:i}}_waitConnectionMessage(){this.connectionMessageWaitTimer=window.setTimeout(()=>{this.conversationReject&&this.conversationReject(new N(ae.SIGNALING_FAILED,{message:"Unable to connect to the signaling: connection timeout"}))},we.WAIT_CONNECTION_DELAY)}_stopWaitConnectionMessage(){window.clearTimeout(this.connectionMessageWaitTimer),this.connectionMessageWaitTimer=0}_startDoctor(){this._stopDoctor(),this.doctorTimer=window.setTimeout(()=>{c.warn("Socket is dead, trying to reconnect"),this._disconnect(),this._connect(je.RETRY)},we.WAIT_MESSAGE_DELAY)}_stopDoctor(){window.clearTimeout(this.doctorTimer),this.doctorTimer=0}},Fe=we;Fe.RECONNECT_DELAY=d.signalingReconnectDelay,Fe.RECONNECT_MAX_DELAY=d.signalingReconnectMaxDelay,Fe.RECONNECT_MAX_COUNT=d.signalingReconnectMaxCount,Fe.WAIT_CONNECTION_DELAY=d.waitConnectionDelay,Fe.WAIT_RESPONSE_DELAY=d.waitResponseDelay,Fe.WAIT_MESSAGE_DELAY=d.waitMessageDelay;var Oa=(t=>(t.KING="KING",t.PAWN="PAWN",t))(Oa||{}),wa=Oa;var ur=class{constructor(e){this._queue=new Array(e).fill(null),this._readCursor=this._writeCursor=this._left=0,this._moveReadCursor=!1}get length(){return this._queue.length}get left(){return this._left}toArray(){return Array.from(this._queue)}add(e){this._moveReadCursor&&(this._readCursor=this.nextCursor(this._readCursor)),this._queue[this._writeCursor]===null&&(this._left+=1),this._queue[this._writeCursor]=e,this._writeCursor=this.nextCursor(this._writeCursor),this._moveReadCursor=this._writeCursor===this._readCursor}nextCursor(e){return(e+1)%this._queue.length}next(){let e=this._queue[this._readCursor];return e&&(this._moveReadCursor=!1,this._queue[this._readCursor]=null,this._readCursor=this.nextCursor(this._readCursor),this._left-=1),e}};var Mt,ue,Jt=null,ps={getCameras:y.getCameras,getMicrophones:y.getMicrophones,getOutput:y.getOutput,hasCamera:y.hasCamera,hasMicrophone:y.hasMicrophone,getSavedCamera:y.getSavedCamera,getSavedMicrophone:y.getSavedMicrophone,getSavedOutput:y.getSavedOutput,hasCameraPermission:y.hasCameraPermission,hasMicrophonePermission:y.hasMicrophonePermission,hasPermissions:y.hasPermissions,getUserMedia:y.getUserMedia,getUserVideo:y.getUserVideo,getUserAudio:y.getUserAudio,saveDeviceId:y.saveDeviceId,isBrowserSupported:y.isBrowserSupported,isScreenCapturingSupported:y.isScreenCapturingSupported,os:y.os,isMobile:y.isMobile,browserName:y.browserName,browserVersion:y.browserVersion,baseChromeVersion:y.baseChromeVersion,getAudioContext:y.getAudioContext};function xa(a){ue=a}function La(a){Mt=a}function ls(a){Jt=a}function us(a){d.videoEffects=a}function ms(a){return o(this,null,function*(){if(d.set(a),y.browserName()==="Sferum"&&(d.platform=`SFERUM:${y.browserVersion()}`),ue||xa(new $t),Mt||La(()=>new Fe),d.debug&&(mr.default.disableLog(!1),c.toggle(!0)),c.log(`Calls SDK ${d.sdkVersion}`,a),yield y.init(),!y.isBrowserSupported())throw new N(ae.UNSUPPORTED);c.log("UserAgent:",navigator.userAgent),c.log("Screen resolution:",`${window.screen.width}x${window.screen.height}`),c.log("Permissions:",`Camera: ${y.hasCameraPermission()}, Mic: ${y.hasMicrophonePermission()}`),ue.init()})}function hs(s){return o(this,arguments,function*(a,e=[oe.AUDIO],t="",i=!1,r=!1,n){let p=[],l=[];if(Array.isArray(a)?p=a.length?a:[]:a&&(p=[a]),p.length&&(l=yield ue.getOkIdsByExternalIds(p),!l.length))throw new N(D.CALLEE_IS_OFFLINE);return Na(l,We.USER,e,t,i,r,n)})}function Na(p){return o(this,arguments,function*(a,e=We.USER,t,i="",r=!1,n=!1,s){if(V.current())throw c.error("There is already active call"),new N(D.FAILED);return new V(ue,Mt(),Jt).onStart(a,e,t,i,r,n,s)})}function _s(a){return o(this,null,function*(){return Ua(a)})}function Ua(i){return o(this,arguments,function*(a,e=X.USER,t){if(a===V.id())throw new Error("Push has already been processed");return new V(ue,Mt(),Jt).onPush(a,e,t)})}function gs(a){return o(this,null,function*(){return a&&(d.authToken=a),ue.authorize()})}function fs(){return o(this,arguments,function*(a=[oe.AUDIO]){return ut().accept(a)})}function Ss(){return o(this,null,function*(){let a=V.current();if(a)return a.decline()})}function vs(t){return o(this,arguments,function*(a,e=[oe.AUDIO]){return Ba(a,e)})}function Ba(a,e,t){return o(this,null,function*(){if(V.current())throw c.error("There is already active call"),new N(D.FAILED);return new V(ue,Mt(),Jt).onJoin({conversationId:a,mediaOptions:e,chatId:t})})}function Es(n){return o(this,arguments,function*(a,e=[oe.AUDIO],t,i,r){if(V.current())throw c.error("There is already active call"),new N(D.FAILED);return t&&(d.anonymToken=t),new V(ue,Mt(),Jt).onJoin({joinLink:a,mediaOptions:e,observedIds:i,payload:r})})}function Is(){return o(this,null,function*(){let a=V.current();if(a)return a.hangup();V.hangupAfterInit()})}function Ts(a,e){return o(this,null,function*(){let t=yield ue.getOkIdsByExternalIds([a]);if(!t.length)throw new Error("User not found");return Va(t[0],e)})}function Va(a,e){return o(this,null,function*(){let t=V.current();t&&(yield t.addParticipant(v.composeUserId(a,X.USER),e))})}function Cs(a,e=!1){return o(this,null,function*(){let t=yield ue.getOkIdsByExternalIds([a]);return Fa(t[0],e)})}function Fa(a,e=!1){return o(this,null,function*(){let t=V.current();t&&(yield t.removeParticipant(v.composeUserId(a,X.USER),e))})}function ys(a,e){return o(this,null,function*(){let t=yield y.saveDeviceId(a,e),i=V.current();return t&&i?i.changeDevice(a):Promise.reject()})}function Rs(a){return o(this,null,function*(){return Ha(a,!1)})}function Ha(a,e){return o(this,null,function*(){if(e){if(!d.audioShareCapabilityEnabled)throw new Error("Audio share capability is disabled");if(!a)throw new Error("Audio share without screen share is not allowed")}let t=V.current();return t?t.toggleScreenCapturing(a,e):Promise.reject()})}function Ps(a,e=!1){return o(this,null,function*(){let t=V.current();t&&(yield t.setVideoStream(a,e))})}function bs(a){return o(this,null,function*(){let e=V.current();e&&(yield e.toggleLocalVideo(a))})}function Ms(a){return o(this,null,function*(){let e=V.current();e&&(yield e.toggleLocalAudio(a))})}function As(a,e,t){return o(this,null,function*(){let i=V.current();if(i)return i.setLocalResolution(a,e,t)})}function Ds(a){return o(this,null,function*(){let e=V.current();e&&(yield e.changePriorities(a))})}function ks(a){return o(this,null,function*(){let e=V.current();e&&(yield e.changeParticipantState(a))})}function Os(a){return o(this,null,function*(){let e=V.current();e&&(yield e.updateDisplayLayout(a))})}function ws(a,e,t=!1){return o(this,null,function*(){let i=yield ue.getOkIdsByExternalIds([a]);return Ga(i[0],e,t)})}function Ga(a,e,t=!1){return o(this,null,function*(){let i=V.current();i&&(yield i.grantRoles(v.composeUserId(a,X.USER),e,t))})}function xs(){return o(this,arguments,function*(a=null,e,t=[]){let i=null;return a&&(i=(yield ue.getOkIdsByExternalIds([a]))[0]),Wa(i,e,t,fe.getDeviceIdx(a))})}function Wa(){return o(this,arguments,function*(a=null,e,t=[],i=0){let r=V.current();if(r){let n=a?v.composeParticipantId(a,X.USER,i):null;yield r.muteParticipant(n,e,t)}})}function Ls(a,e=!1){return o(this,null,function*(){let t=yield ue.getOkIdsByExternalIds([a]);return ja(t[0],e,fe.getDeviceIdx(a))})}function ja(a,e=!1,t=0){return o(this,null,function*(){let i=V.current();i&&(yield i.pinParticipant(v.composeParticipantId(a,X.USER,t),e))})}function Ns(a){return o(this,null,function*(){let e=V.current();e&&(yield e.updateMediaModifiers(a))})}function Us(a){return o(this,null,function*(){let e=V.current();e&&(yield e.changeOptions(a))})}function Bs(a,e=null){return o(this,null,function*(){let t=null;return e&&(t=(yield ue.getOkIdsByExternalIds([e]))[0]),Ka(a,t)})}function Ka(a,e=null){return o(this,null,function*(){let t=V.current();if(t){let i=e?v.composeUserId(e,X.USER):null;yield t.chatMessage(a,i)}})}function Vs(a=10){return o(this,null,function*(){let e=V.current();if(e)return e.chatHistory(a)})}function Fs(a,e=null){return o(this,null,function*(){let t=null;return e&&(t=(yield ue.getOkIdsByExternalIds([e]))[0]),qa(a,t,fe.getDeviceIdx(e))})}function qa(a,e=null,t=0){return o(this,null,function*(){let i=V.current();if(i){let r=e?v.composeParticipantId(e,X.USER,t):null;yield i.customData(a,r)}})}function Hs(){return o(this,arguments,function*(a="",e=!1,{onlyAdminCanShareMovie:t=!1}={}){return(yield ue.createConversation(v.uuid(),a,e,{onlyAdminCanShareMovie:t})).join_link})}function Gs(){return o(this,null,function*(){let a=V.current();return a?a.createJoinLink():Promise.reject()})}function Ws(){return o(this,null,function*(){let a=V.current();return a?a.removeJoinLink():Promise.reject()})}function js(a,e){return o(this,null,function*(){return ue.getAnonymTokenByLink(a,e)})}function Ks(a){let e=V.current();e&&e.setVolume(a)}function qs(a){d.forceRelayPolicy=a}function $s(a=!1,e=null,t=null,i="DIRECT_LINK",r=null){return o(this,null,function*(){let n=V.current();return n?n.startStream(a,e,t,i,r):Promise.reject()})}function Js(){return o(this,null,function*(){let a=V.current();return a?a.stopStream():Promise.reject()})}function Ys(a,e){return o(this,null,function*(){let t=V.current();if(t){let i=yield ue.getOkIdsByExternalIds([a]),r=fe.getDeviceIdx(a);return t.recordSetRole(v.composeParticipantId(i[0],X.USER,r),e)}return Promise.reject()})}function zs(){return o(this,null,function*(){let a=V.current();return a?a.getStreamInfo():Promise.reject()})}function Qs(a){return o(this,null,function*(){let e=V.current();return e?e.addMovie(a):Promise.reject()})}function Xs(a){return o(this,null,function*(){let e=V.current();return e?e.updateMovie(a):Promise.reject()})}function Zs(a){return o(this,null,function*(){let e=V.current();return e?e.removeMovie(a):Promise.reject()})}function eo(a){d.statisticsInterval=a;let e=V.current();if(e)return e.updateStatisticsInterval()}function to(a){mr.default.disableLog(!a),c.toggle(a)}function io(a,...e){!d.debugLog||c.send(a,"[external]",...e)}function ro(a){return o(this,null,function*(){let e=V.current();if(e)return e.videoEffect(a)})}function ao(a){return o(this,null,function*(){let e=V.current();e&&(yield e.setAudioStream(a))})}function no(a=null,e,t=!1){return o(this,null,function*(){return ut().getWaitingHall(a,e,t)})}function so(a,e=!1){return o(this,null,function*(){let t=ut(),i=yield ue.getOkIdsByExternalIds([a]);return t.promoteParticipant(v.composeUserId(i[0],X.USER),e)})}function oo(a){return o(this,null,function*(){return ut().getParticipantListChunk(a)})}function co(a){return o(this,null,function*(){return ut().getParticipants(a)})}function po(a){return o(this,null,function*(){return ut().feedback(a)})}function lo(a,e){return o(this,null,function*(){return ut().enableFeatureForRoles(a,e)})}function ut(){let a=V.current();if(!a)throw new Error("Conversation not found");return a}function uo(a){return o(this,null,function*(){yield ue.removeHistoryRecords(a)})}function mo(){return d.sdkVersion}