@vkontakte/calls-sdk 2.8.6-dev.6d4d9d1b.0 → 2.8.6-dev.7059c449.0
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/CallsSDK.d.ts +10 -0
- package/abstract/BaseSignaling.d.ts +3 -1
- package/calls-sdk.cjs.js +8 -8
- package/calls-sdk.esm.js +8 -8
- package/classes/Conversation.d.ts +3 -6
- package/default/Signaling.d.ts +5 -2
- package/package.json +4 -1
- package/types/ConversationResponse.d.ts +4 -0
- package/types/ExternalId.d.ts +1 -0
- package/types/WebTransport.d.ts +34 -0
- package/utils/LengthPrefixed.d.ts +48 -0
- package/utils/VariableLengthInteger.d.ts +18 -0
package/calls-sdk.esm.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @vkontakte/calls-sdk v2.8.6-dev.
|
|
3
|
-
*
|
|
2
|
+
* @vkontakte/calls-sdk v2.8.6-dev.7059c449.0
|
|
3
|
+
* Fri, 23 May 2025 11:15:03 GMT
|
|
4
4
|
* https://st.mycdn.me/static/callssdk/2-8-6/doc/
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
var zn=Object.defineProperty,Jn=Object.defineProperties;var Yn=Object.getOwnPropertyDescriptors;var fa=Object.getOwnPropertySymbols;var Qn=Object.prototype.hasOwnProperty,Xn=Object.prototype.propertyIsEnumerable;var va=Math.pow,Sa=(n,r,e)=>r in n?zn(n,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[r]=e,oe=(n,r)=>{for(var e in r||(r={}))Qn.call(r,e)&&Sa(n,e,r[e]);if(fa)for(var e of fa(r))Xn.call(r,e)&&Sa(n,e,r[e]);return n},xe=(n,r)=>Jn(n,Yn(r));var c=(n,r,e)=>new Promise((t,i)=>{var a=l=>{try{s(e.next(l))}catch(u){i(u)}},o=l=>{try{s(e.throw(l))}catch(u){i(u)}},s=l=>l.done?t(l.value):Promise.resolve(l.value).then(a,o);s((e=e.apply(n,r)).next())});import Wn from"webrtc-adapter";var Ut=class{log(r,e,t=!1){}destroy(){}};var se=class{constructor(){this._handlers={};this._listeners=[]}_triggerEvent(r,...e){if(this._handlers.hasOwnProperty(r))for(let t of this._handlers[r])t.apply(this,e)}addEventListener(r,e){if(typeof e!="function")throw new Error("Listener should be a function");return this._handlers.hasOwnProperty(r)||(this._handlers[r]=[]),this._handlers[r].push(e),{dispose:this.removeEventListener.bind(this,r,e)}}removeEventListener(r,e){if(!this._handlers.hasOwnProperty(r))return;e||delete this._handlers[r];let t=this._handlers[r].indexOf(e);t>=0&&this._handlers[r].splice(t,1)}subscribe(r,e,t){let i=r.addEventListener(e,t);this._listeners.push(i)}unsubscribe(){this._listeners.forEach(r=>{r.dispose()})}};var oi=class extends se{get ready(){return!0}setParticipantIdRegistry(r){}requestRealloc(){}setEndpoint(r){}setConversationId(r){}readyToSend(r=!0){}cleanup(){}requestTestMode(r,e){}getNextCommandSequenceNumber(){return 0}};var Ia=(re=>(re.CANCELED="CANCELED",re.REJECTED="REJECTED",re.REMOVED="REMOVED",re.HUNGUP="HUNGUP",re.MISSED="MISSED",re.BUSY="BUSY",re.FAILED="FAILED",re.NETWORK_ERROR="NETWORK_ERROR",re.KILLED="KILLED",re.BANNED="BANNED",re.HAS_ACTIVE_CALL="HAS_ACTIVE_CALL",re.CALLER_IS_BLOCKED="CALLER_IS_BLOCKED",re.NOT_FRIENDS="NOT_FRIENDS",re.CALLEE_IS_OFFLINE="CALLEE_IS_OFFLINE",re.CALLER_IS_REJECTED="CALLER_IS_REJECTED",re.UNKNOWN_ERROR="UNKNOWN_ERROR",re.UNSUPPORTED="UNSUPPORTED",re.OLD_VERSION="OLD_VERSION",re.SERVICE_DISABLED="SERVICE_DISABLED",re.EXTERNAL_API_ERROR="EXTERNAL_API_ERROR",re.SOCKET_CLOSED="SOCKET_CLOSED",re.ENDED="ENDED",re.KILLED_WITHOUT_DELETE="KILLED_WITHOUT_DELETE",re.ANOTHER_DEVICE="ANOTHER_DEVICE",re.NOT_FOUND="NOT_FOUND",re.VCHAT_DETAILED_ERROR="VCHAT_DETAILED_ERROR",re))(Ia||{}),k=Ia;var q=class n extends Error{constructor(r,e){var i;super(),this.name="HangupReason",this.code=e&&e.code||0,this.remote=e&&e.remote||!1,this.custom_error=(i=e==null?void 0:e.custom_error)!=null?i:null,Object.values(k).indexOf(r)>-1?this.hangup=r:this.error=r;let t=[];this.error&&t.push("error"),this.remote&&t.push("remote"),this.code&&t.push(`code: ${this.code}`),e&&e.message&&t.push(`message: '${e.message}'`),this.message=r+(t.length?` (${t.join(", ")})`:""),Error.captureStackTrace&&Error.captureStackTrace(this,n)}};var P=class n extends Ut{constructor(e,t){super();this._batchInterval=3e3;this._batchedLogItems=[];this._batchedClientStats=[];this._batchedClientEvents=[];this._batchTimeout=null;this._serverTimeDelta=0;this._api=e,this._externalLogger=t,this._calculateServerTimeDelta()}_sendLogItems(e){this._api.log(e)}_sendClientStats(e){this._api.logClientStats(e)}_sendClientEvents(e){this._api.logClientEvents(e)}_sendBatch(){this._stopTimeout();let e=!1;this._batchedLogItems.length>0&&(this._sendLogItems(this._batchedLogItems),this._batchedLogItems=[],e=!0),this._batchedClientStats.length>0&&(this._sendClientStats(this._batchedClientStats),this._batchedClientStats=[],e=!0),this._batchedClientEvents.length>0&&(this._sendClientEvents(this._batchedClientEvents),this._batchedClientEvents=[],e=!0),e&&this._startTimeout()}_startTimeout(){this._batchTimeout=window.setTimeout(()=>this._sendBatch(),this._batchInterval)}_stopTimeout(){this._batchTimeout&&(clearTimeout(this._batchTimeout),this._batchTimeout=null)}_calculateServerTimeDelta(){return c(this,null,function*(){try{let e=yield this._api.getServerTime();this._serverTimeDelta=Date.now()-e}catch(e){}})}_now(){return Date.now()-this._serverTimeDelta}log(e,t,i=!1){let a={};typeof t!="undefined"&&(a.param=t),this._logInternal(e,a,i),this._externalLogger&&this._externalLogger.log(e,t,i)}logCustom(e,t,i=!1){this._logInternal(e,t,i)}logClientStats(e,t=!1){let i=Object.assign(e,{vcid:B.id(),timestamp:this._now()});Object.keys(i).forEach(a=>{i[a]===void 0&&delete i[a]}),this._batchedClientStats.push(i),(t||!this._batchTimeout)&&this._sendBatch()}logClientEvent(e,t=!1){let i=Object.assign(e,{vcid:B.id(),timestamp:this._now()});this._batchedClientEvents.push(i),(t||!this._batchTimeout)&&this._sendBatch()}_logInternal(e,t,i){let a={type:1,time:0,operation:e,timestamp:this._now(),custom:Object.assign(t,{vcid:B.id()}),uid:this._api.getUserId()};this._batchedLogItems.push(a),(i||!this._batchTimeout)&&this._sendBatch()}destroy(){this._sendBatch(),this._stopTimeout(),this._externalLogger&&this._externalLogger.destroy()}static create(e,t){n._instance||(n._instance=new n(e,t))}static log(e,t,i=!1){n._instance&&n._instance.log(e,t,i)}static logCustom(e,t,i=!1){n._instance&&n._instance.logCustom(e,t,i)}static logClientStats(e,t=!1){n._instance&&n._instance.logClientStats(e,t)}static logClientEvent(e,t=!1){n._instance&&n._instance.logClientEvent(e,t)}static destroy(){n._instance&&n._instance.destroy(),n._instance=null}};import{Any as zo,Arr as Za,Int as W,Nil as wt,Str as en,Bool as Yr}from"messagepack";var Ea=(N=>(N.RECOVER="recover",N.ACCEPT_CALL="accept-call",N.ADD_PARTICIPANT="add-participant",N.REMOVE_PARTICIPANT="remove-participant",N.HANGUP="hangup",N.TRANSMIT_DATA="transmit-data",N.ACCEPT_PRODUCER="accept-producer",N.ALLOCATE_CONSUMER="allocate-consumer",N.CHANGE_MEDIA_SETTINGS="change-media-settings",N.CHANGE_PARTICIPANT_STATE="change-participant-state",N.CHANGE_STREAM_PRIORITIES="change-streams-priorities",N.UPDATE_DISPLAY_LAYOUT="update-display-layout",N.REPORT_PERF_STAT="report-perf-stat",N.REPORT_SHARING_STAT="report-sharing-stat",N.REPORT_NETWORK_STAT="report-network-stat",N.RECORD_START="record-start",N.RECORD_STOP="record-stop",N.RECORD_PUBLISH="record-publish",N.RECORD_SET_CONF="record-set-conf",N.RECORD_GET_STATUS="record-get-status",N.SWITCH_MICRO="switch-micro",N.SWITCH_TOPOLOGY="switch-topology",N.REQUEST_REALLOC="request-realloc",N.CHAT_MESSAGE="chat-message",N.CHAT_HISTORY="chat-history",N.CUSTOM_DATA="custom-data",N.GRANT_ROLES="grant-roles",N.MUTE_PARTICIPANT="mute-participant",N.ENABLE_FEATURE_FOR_ROLES="enable-feature-for-roles",N.PIN_PARTICIPANT="pin-participant",N.UPDATE_MEDIA_MODIFIERS="update-media-modifiers",N.CHANGE_OPTIONS="change-options",N.GET_WAITING_HALL="get-waiting-hall",N.GET_PARTICIPANT_LIST_CHUNK="get-participant-list-chunk",N.GET_PARTICIPANTS="get-participants",N.PROMOTE_PARTICIPANT="promote-participant",N.REQUEST_TEST_MODE="request-test-mode",N.ADD_MOVIE="add-movie",N.UPDATE_MOVIE="update-movie",N.REMOVE_MOVIE="remove-movie",N.START_URL_SHARING="start-url-sharing",N.STOP_URL_SHARING="stop-url-sharing",N.GET_ROOMS="get-rooms",N.UPDATE_ROOMS="update-rooms",N.ACTIVATE_ROOMS="activate-rooms",N.REMOVE_ROOMS="remove-rooms",N.SWITCH_ROOM="switch-room",N.FEEDBACK="feedback",N.ASR_START="asr-start",N.ASR_STOP="asr-stop",N.REQUEST_ASR="request-asr",N.REQUEST_PROMOTION="request-promotion",N.ACCEPT_PROMOTION="accept-promotion",N.GET_HAND_QUEUE="get-hand-queue",N.ENABLE_VIDEO_SUSPEND="enable-video-suspend",N.ENABLE_VIDEO_SUSPEND_SUGGEST="enable-video-suspend-suggest",N.PUT_HANDS_DOWN="put-hands-down",N.CHANGE_SIMULCAST="change-simulcast",N))(Ea||{}),U=Ea;var Ta=(O=>(O.MIC_CAMERA_PERMISSION="mic_camera",O.CAMERA_PERMISSION="camera",O.MIC_PERMISSION="mic",O.CAMERA_ACCESS="cameralock",O.MIC_ACCESS="miclock",O.MIC_NOT_FOUND="nomic",O.SCREEN_PERMISSION="screenpermission",O.SCREEN_ACCESS="screenlock",O.CONNECTION="connection",O.NETWORK="network",O.UNKNOWN="unknown",O.UNSUPPORTED="unsupported",O.SIGNALING_FAILED="signalingfailed",O.API="api",O.AUTH="auth",O.OVERCONSTRAINED="overconstrained",O))(Ta||{}),ce=Ta;var Ra=(o=>(o.AUDIO="AUDIO",o.VIDEO="VIDEO",o.SCREEN_SHARING="SCREEN_SHARING",o.MOVIE_SHARING="MOVIE_SHARING",o.AUDIO_SHARING="AUDIO_SHARING",o.ANIMOJI="ANIMOJI",o))(Ra||{}),ue=Ra;var Ca=(Y=>(Y.ERROR="callError",Y.DEVICES="callDevices",Y.CALL_SPEC_ERROR="callSpecError",Y.ICE_CONNECTION_STATE="callIceConnectionState",Y.ICE_CONNECTION_TYPE="callIceConnectionType",Y.ICE_RESTART="callIceRestart",Y.PUSH="callPush",Y.OUTGOING_CALL="callStart",Y.CALL_FINISH="call_finish",Y.OUTGOING_MULTIPARTY_CALL="callStartMultiparty",Y.JOIN_CONVERSATION="callJoinConversation",Y.ACCEPTED_OUTGOING="callAcceptedOutgoing",Y.ACCEPT_INCOMING="callAcceptIncoming",Y.DECLINE_INCOMING="callDeclineIncoming",Y.ACCEPT_CONCURRENT="callAcceptConcurrent",Y.HANGUP="callHangup",Y.CODEC_USAGE="codec_usage",Y.MEDIA_STATUS="callMediaStatus",Y.DEVICE_CHANGED="callDeviceChanged",Y.SOCKET_ACTION="callSocketAction",Y.ADD_PARTICIPANT="callAddParticipant",Y.REMOVE_PARTICIPANT="callRemoveParticipant",Y.POOR_CONNECTION="callPoorConnection",Y.TOPOLOGY_CHANGE_REQUESTED="callTopologyChangeRequested",Y.RELAY_POLICY="callForceRelay",Y.PAT_ALLOCATED="patAllocate",Y.PAT_DEALLOCATED="patDeallocate",Y.PAT_ERROR="patError",Y.PAT_WAITING_TIME_ERROR="patWaitingTimeError",Y.PAT_OUTDATED_RESPONSE="patOutdatedResponse",Y.SIGNALING_CONNECTED="signaling_connected",Y.RECONNECT="callReconnect",Y.SCREENSHARE_FIRST_FRAME="screen_share_first_frame",Y.SCREENSHARE_FREEZE_DURATION="callScreenshareFreezeDuration",Y.FIRST_MEDIA_RECEIVED="first_media_received",Y.CALL_EVENTUAL_STAT="callEventualStat",Y.CALL_DECLINED_OR_HANGED_LOCALLY="CallDeclinedOrHangedLocally",Y.USER_FEEDBACK_RECEIVED="UserFeedbackReceived",Y))(Ca||{}),R=Ca;import Pa from"@vkontakte/libvpx";var He=class{constructor(){this._worker=null}_createWorker(o,s){return c(this,arguments,function*(r,e,t=[],i={},a=[]){return new Promise((l,u)=>{let m=t.join(","),h=new Blob([r,`exports.default(${m});`],{type:"application/javascript; charset=utf-8"}),T=window.URL.createObjectURL(h);this._worker=new Worker(T),this._worker.onmessage=v=>{switch(v.data.type){case"ready":l();break;case"error":u(v.data.error);break;case"frame":e(v.data);break;case"debug":d.debug(v.data.message);break;case"log_error":P.log(R.ERROR,v.data.message);break}},this._sendToWorker("init",i,a)})})}_removeWorker(){var r;(r=this._worker)==null||r.terminate(),this._worker=null}_sendToWorker(r,e={},t=[]){var i;(i=this._worker)==null||i.postMessage(Object.assign({type:r},e),t)}static isBrowserSupported(){throw new Error("Not implemented")}};var St=class extends He{init(r,e){return c(this,null,function*(){d.debug("LibVPxDecoder started"),yield this._createWorker('"use strict";var exports=(()=>{var d=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var R=(o,t)=>{for(var e in t)d(o,e,{get:t[e],enumerable:!0})},h=(o,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of x(t))!E.call(o,s)&&s!==e&&d(o,s,{get:()=>t[s],enumerable:!(a=y(t,s))||a.enumerable});return o};var V=o=>h(d({},"__esModule",{value:!0}),o);var D={};R(D,{default:()=>M});var M=(o,t)=>{let e=null,a=null,s=!0;function c(){return o({locateFile:t}).then(r=>a=r)}function f(r,u,n,m){if(!a){self.postMessage({type:"log_error",message:"decoder-init-fail-libvpx"}),self.postMessage({type:"frame",error:"Fatal initialization error"});return}if(s!==n&&(s=n,e&&(e=null,self.postMessage({type:"debug",message:`LibVPxDecoder codec changed to ${n?"VP9":"VP8"} - reinitialize`}))),!e&&(self.postMessage({type:"debug",message:`LibVPxDecoder codec ${n?"VP9":"VP8"}`}),e=new a.VpxDecoder,e.debug(m),!e.init(n?a.VpxType.VP9:a.VpxType.VP8))){e=null,self.postMessage({type:"frame",error:"Decoder failed to create"});return}try{e.allocateBuffer(u.byteLength).set(new Uint8Array(u))}catch(i){self.postMessage({type:"debug",message:i}),e=null,self.postMessage({type:"frame",error:String(i)});return}if(!(e.decode()&&e.nextImage())){self.postMessage({type:"frame",error:"Decode failed"});return}let l=e.getImageBuffer();if(!l){self.postMessage({type:"frame",error:"No decoded data"});return}let b=e.getImageWidth(),g=e.getImageHeight();e.nextImage()&&(self.postMessage({type:"debug",message:"LibVPxDecoder dropped frame"}),self.postMessage({type:"log_error",message:"LibVPxDecoder-drop"}));let p=new Uint8ClampedArray(l.byteLength);p.set(l),self.postMessage({type:"frame",data:p.buffer,width:b,height:g},[p.buffer])}c().then(()=>{self.onmessage=r=>{switch(r.data.type){case"frame":f(r.data.timestamp,r.data.data,r.data.isVP9,r.data.debug);break}},self.postMessage({type:"ready"})}).catch(r=>{self.postMessage({type:"error",error:String(r)})})};return V(D);})();\n',t=>{if(t.error)d.warn("LibVPxDecoder",t.error),e(t.error);else{let i=new ImageData(new Uint8ClampedArray(t.data),t.width,t.height);r(i)}},[Pa,Pa.getUrl])})}decodeFrame(r,e,t,i){this._sendToWorker("frame",{timestamp:r,data:e.buffer,isVP9:t,keyFrame:i,debug:d.enabled()},[e.buffer])}destroy(){this._removeWorker(),d.debug("LibVPxDecoder destroyed")}static isBrowserSupported(){return"WebAssembly"in window&&"Worker"in window}};var Je=class extends He{init(r,e){return c(this,null,function*(){d.debug("WebCodecsDecoder started"),yield this._createWorker('"use strict";var exports=(()=>{var c=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var C=(t,e)=>{for(var n in e)c(t,n,{get:e[n],enumerable:!0})},A=(t,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of R(e))!y.call(t,o)&&o!==n&&c(t,o,{get:()=>e[o],enumerable:!(a=D(e,o))||a.enumerable});return t};var V=t=>A(c({},"__esModule",{value:!0}),t);var F={};C(F,{default:()=>k});var k=t=>{let e=null,n=!0,a=null,o=!1,f=1e3/15*2;function p(){self.postMessage({type:"ready"})}function m(r,b,s,i=!1){if(!e||n!==s){if(!i){self.postMessage({type:"frame",error:"WebCodecsDecoder dropped frame - waiting for keyframe"});return}n=s,e?self.postMessage({type:"debug",message:`WebCodecsDecoder codec changed to ${s?"VP9":"VP8"}`}):(self.postMessage({type:"debug",message:`WebCodecsDecoder codec ${s?"VP9":"VP8"}`}),e=new VideoDecoder({output:d=>{l();let g=t?[d]:[];self.postMessage({type:"frame",data:d},g),d.close()},error:d=>{l(),e&&e.state!=="closed"&&e.close(),e=null,self.postMessage({type:"frame",error:"WebCodecsDecoder failed, reinitialize: "+String(d)})}})),e.configure(u(s))}if(o&&!i){self.postMessage({type:"frame",error:"WebCodecsDecoder dropped frame after reset - waiting for keyframe"});return}o=!1;let E=new EncodedVideoChunk({type:i?"key":"delta",timestamp:r,data:b});e.decode(E),a=setTimeout(()=>{o=!0,e==null||e.reset(),e==null||e.configure(u(s)),self.postMessage({type:"frame",error:"WebCodecsDecoder reset because of decode timeout"})},f)}self.onmessage=r=>{switch(r.data.type){case"init":p();break;case"frame":m(r.data.timestamp,r.data.data,r.data.isVP9,r.data.keyFrame);break}};function l(){a&&clearTimeout(a),a=null}function u(r){return{codec:r?"vp09.00.50.08":"vp8"}}};return V(F);})();\n',t=>{t.error?(d.warn("WebCodecsDecoder",t.error),e(t.error)):(r(t.data),t.data.close())},[A.baseChromeVersion()>=92||A.browserName()==="Safari"])})}decodeFrame(r,e,t,i=!1){this._sendToWorker("frame",{timestamp:r,data:e.buffer,isVP9:t,keyFrame:i},[e.buffer])}destroy(){this._removeWorker(),d.debug("WebCodecsDecoder destroyed")}static isBrowserSupported(){return"VideoDecoder"in window&&"Worker"in window&&"VideoFrame"in window&&!A.isBrokenVP9Decoder()&&A.browserName()!=="Firefox"}};var vt=class{constructor(r=null,e=0){this._counter=0;this._interval=0;this._lastCalculationTime=Date.now();this._onCalculated=null;this._onCalculated=r,e&&(this._interval=window.setInterval(()=>this.calculate(),e))}increment(r=1){this._counter+=r}calculate(){var i;let r=Date.now(),e=r-this._lastCalculationTime,t=Math.round(this._counter*1e3/e);return this._counter=0,this._lastCalculationTime=r,(i=this._onCalculated)==null||i.call(this,t),t}destroy(){window.clearInterval(this._interval),this._interval=0}};import{BitStream as po}from"bit-buffer";var ya=(e=>(e.USER="USER",e.GROUP="GROUP",e))(ya||{}),de=ya;var ct={HEIGHT:720,WIDTH:1280,BITRATE:1e6},si="L1T2",Ma=[{dimension:320,bitrate:18e4},{dimension:520,bitrate:4e5},{dimension:640,bitrate:5e5},{dimension:960,bitrate:9e5},{dimension:1280,bitrate:12e5},{dimension:1920,bitrate:25e5},{dimension:2560,bitrate:35e5},{dimension:3840,bitrate:5e6}],Zn={h:1,m:2,l:4};function Aa(n,r){return!n||!r?n===r:n.streams.length===r.streams.length?n.streams.every((e,t)=>E.isObjectsEquals(e,r.streams[t])):!1}function ba(n,r){for(let e of r)if(n<=e.dimension)return e.bitrate;return length>0?r[length-1].bitrate:Ma[0].bitrate}function ci(n=ct.WIDTH,r=ct.HEIGHT,e=Ma){var u,m;let t=["h","m","l"],i=Math.max(n,r),a=1;i>=960?a=3:i>=480&&(a=2);let o={streams:[]},s=30,l=(u=ba(i,e))!=null?u:ct.BITRATE;for(let h=0;h<a;h++){let T=t[h];o.streams.push({rid:T,width:n,height:r,fps:s,bitrate:l}),n=Math.round(n/2),r=Math.round(r/2),l=(m=ba(Math.max(n,r),e))!=null?m:Math.round(l/2)}return o}function Vi(n){var r;return(r=Zn[n])!=null?r:1}var Da=typeof Object.fromEntries=="function"?Object.fromEntries:function(n){if(!n||!n[Symbol.iterator])throw new Error("Object.fromEntries() requires a single iterable argument");let r={};for(let[e,t]of n)r[e]=t;return r};function wa(n){return c(this,null,function*(){return new Promise((r,e)=>{let t=new FileReader;t.onload=i=>{var a;r((a=i.target)==null?void 0:a.result)},t.onerror=e,t.readAsArrayBuffer(n)})})}var Bt=":",ji="d",eo=533,Fi="a=fmtp:",to="sps-pps-idr-in-keyframe=1",Pr;(je=>{let n=/[\r\n]+/,r=`\r
|
|
8
|
-
`;function e(
|
|
9
|
-
`);for(let w of y)if(w.startsWith("a=fingerprint")){let K=w.split(" ");if(K.length===2){C=K[1];break}}if(!C)return BigInt(-1);let M=C.split(":"),g=BigInt(0);for(let w=Math.min(7,M.length-1);w>=0;w--){let K=BigInt(parseInt(M[w],16));g<<=BigInt(8),g|=K}return BigInt.asIntN(64,g)}je.sdpFingerprint=sa;function ca(_){return c(this,null,function*(){return new Promise(C=>window.setTimeout(C,_))})}je.delay=ca;function da(_,C,y){let M=[];return _.getSenders().forEach(g=>Li(C,g,g.track,y,M)),M}je.applySettings=da;function Li(_,C,y,M,g){var De,qe;if(!RTCRtpSender.prototype.getParameters||!RTCRtpSender.prototype.setParameters||!_||!y||y.kind!=="video")return;let w=y.getSettings();if(!w)return;let K=_.maxBitrateK?_.maxBitrateK*1024:null,F=w.width,te=w.height,ve=F&&te&&_.maxDimension?Math.max(1,Math.max(F,te)/_.maxDimension):null,N=_.maxFramerate||null;if(F&&te&&_.maxDimension&&_.maxDimension>Math.max(F,te)){let Te=Math.round(F*te/256),tt=(Math.round(Te*eo/1e4)+1)*1e4;K=K===null?tt:Math.min(tt,K)}let Ie=_.degradationPreference||"balanced",Se=M[y.id];if(Se&&Se.bitrate===K&&Se.scaleResolutionDownBy===ve&&Se.maxFramerate===N&&Se.degradationPreference===Ie){g[y.id]=Se;return}g[y.id]={bitrate:K,scaleResolutionDownBy:ve,maxFramerate:N,degradationPreference:Ie};let Ee=C.getParameters();if(Ee.encodings||(Ee.encodings=[{}]),Ee.encodings.length>1&&F&&te&&_.maxDimension){let Te=Math.round(_.maxDimension*1.35),tt=Math.max(F,te),Ni=ci(F,te,(De=_==null?void 0:_.bitrates)==null?void 0:De.generic),Ui=Ni.streams.length;d.log(`applyVideoTrackSettings: maxDim=${_.maxDimension} targetDim=${Te} track=${F}x${te} sim=${JSON.stringify(Ni)}`),Ee.encodings.forEach((ze,ni)=>{ze.scaleResolutionDownBy=Vi(ze.rid);let _a=Math.round(tt/ze.scaleResolutionDownBy);ni<Ui-1?ze.active=_a<Te:ni>=Ui?ze.active=!1:ze.active=!0,ni<Ui?ze.maxBitrate=Ni.streams[ni].bitrate:ze.maxBitrate=0,ze.scalabilityMode=si})}else Ee.encodings.forEach(Te=>{_!=null&&_.scalabilityMode&&(Te.scalabilityMode=_.scalabilityMode),K?Te.maxBitrate=K:delete Te.maxBitrate,ve?Te.scaleResolutionDownBy=ve:delete Te.scaleResolutionDownBy,N?Te.maxFramerate=N:delete Te.maxFramerate});if(Ee.degradationPreference=Ie,Ee.encodings.length>0){(qe=C.setParameters)==null||qe.call(C,Ee).catch(tt=>{d.error("Failed to set sender parameters",Ee,tt)});let Te=C.getParameters();d.log(`applyVideoTrackSettings: actual encodings= ${JSON.stringify(Te.encodings)}`)}}je.applyVideoTrackSettings=Li;function Tr(_,C){Array.isArray(C)||(C=[C]);for(let y of C)if(_.includes(y))return!0;return!1}je.includesOneOf=Tr;function la(_){var C;return Object.entries(((C=_.participantState)==null?void 0:C.state)||{}).reduce((y,[M,g])=>(_.participantState&&(y[M]={ts:_.participantState.stateUpdateTs[M],state:g}),y),{})}je.mapParticipantState=la;function pa(_){let C=_.map(y=>({uid:y.externalId,mediaSettings:y.mediaSettings,status:y.status,muteStates:y.muteStates,unmuteOptions:y.unmuteOptions,participantState:y.participantState,markers:y.markers,movieShareInfos:y.movieShareInfos}));return p.filterObservers?C.filter(y=>!y.uid.observer):C}je.mapSharedParticipants=pa;function ua(_,C){let y=Object.keys(_),M=Object.keys(C);if(y.length!==M.length)return!1;for(let g of y)if(!M.hasOwnProperty(g)||_[g].state!==C[g].state||_[g].ts!==C[g].ts)return!1;return!0}je.isEqualParticipantState=ua;function Y(_,C,y=!1){let M=Object.keys(_),g=Object.keys(C);if(M.length!==g.length)return!1;for(let w of M){if(!C.hasOwnProperty(w))return!1;let K=_[w],F=C[w];if(y&&fe(K)&&fe(F))return Y(K,F,y);if(K!==F)return!1}return!0}je.isObjectsEquals=Y;function ma(_,C){if(_.length!==C.length)return!1;for(let y of _)if(C.indexOf(y)<0)return!1;return!0}je.isArraysEquals=ma;function ha(_){return!Object.keys(_).length}je.isEmptyObject=ha;function ge(_,C){if(!_&&!C)return 0;if(!_||!C)return _?-1:1;return M(C.rank,_.rank)||M(_.ts,C.ts)||y(_,C);function y(g,w){let K={[de.USER]:0,[de.GROUP]:1},{compositeUserId:F,deviceIdx:te}=ai(g.id),{compositeUserId:ve,deviceIdx:N}=ai(w.id),{id:Ie,type:Se}=re(F),{id:Ee,type:De}=re(ve);return M(K[Se],K[De])||M(Ie,Ee)||M(te,N)}function M(g,w){return g<w?-1:g===w?0:1}}je.participantMarkerCompare=ge;function j(_,C){let y=Object.entries(_).filter(([,M])=>Array.isArray(C)?!C.includes(M):M!==C);return Da(y)}je.objectFilterOutValues=j;function ee(_,C,y){let M=y;for(let g in _)_.hasOwnProperty(g)&&(M=C(M,_[g],g));return M}je.objectReduce=ee,je.setImmediate=(()=>{let _=1,C={},y=null;return typeof MessageChannel!="undefined"&&(y=new MessageChannel,y.port1.onmessage=M=>{let g=M.data;C[g]&&(C[g](),delete C[g])}),function(M){if(y&&document.visibilityState==="hidden"){let w=_;return _=_>=Number.MAX_SAFE_INTEGER?1:_+1,C[w]=M,y.port2.postMessage(w),()=>{C[w]&&delete C[w]}}let g=setTimeout(M,0);return()=>clearTimeout(g)}})();function fe(_){return _!==null&&typeof _=="object"&&!Array.isArray(_)}je.isObject=fe;function et(_,C,y,M){function g(F,te){let ve=0,N=F.length,Ie=!1;for(let Se=0;Se<F.length;Se++)if(F[Se].startsWith("m=video")&&(ve=Se),F[Se].startsWith("a=mid:"+te)&&(Ie=!0),Ie&&F[Se].startsWith("m=")){N=Se;break}return{start:ve,end:N}}function w(F,te,ve,N,Ie,Se,Ee){let De="a=rid:"+N+" send";for(let qe=te;qe<ve;qe++)if(F[qe]===De){let tt=De+" max-width="+Se+";max-height="+Ee+";max-br="+Ie;F[qe]=tt}}let K=C==null?void 0:C.sender;if(K&&K.track&&C.mid){let F=_.split(n),{start:te,end:ve}=g(F,C.mid),N=K.getParameters();if(N.encodings)return N.encodings.forEach(Ie=>{let Se=Ie.rid,Ee=Ie.maxBitrate,De=Ie.scaleResolutionDownBy;if(y&&M&&De){let qe=""+Math.round(y/De),Te=""+Math.round(M/De);w(F,te,ve,Se,Ee,qe,Te)}}),F.join(r)}return _}je.patchSimulcastAnswerSdp=et})(Pr||(Pr={}));var E=Pr;var io=1e3;function me(n,r,e=0){return r in n&&n[r]?n[r]:e}function yr(...n){return r=>{for(let e of n)if(e(r))return!0;return!1}}function dt(n,r){return e=>e[n]===r}function ro(n){return(r,e)=>e[n]-r[n]}function di(n,r){return r.reduce((e,t)=>(e[t[n]]=t,e),{})}function ao(n){let r={},e=[];for(let t of n)r[t.id]||(r[t.id]=!0,e.push(t));return e}function br(n){return Object.keys(n).filter(r=>n[r]!==void 0).map(r=>[r,n[r]]).reduce((r,e)=>(r[e[0]]=E.isObject(e[1])?br(e[1]):e[1],r),{})}function no(n){let r=[];for(let e of n)e.forEach(t=>r.push(t));return r}function oo(n){return c(this,null,function*(){let r=[];return RTCRtpReceiver.prototype.getStats?(r.push(...n.getReceivers().map(e=>e.getStats())),r.push(...n.getSenders().map(e=>e.getStats()))):r.push(n.getStats()),Promise.all(r).then(no).then(ao)})}function so(n){let r=n.filter(dt("type","candidate-pair")).sort(ro("priority")).find(yr(dt("nominated",!0),dt("selected",!0)));if(!r)return{timestamp:0,availableOutgoingBitrate:0,totalRoundTripTime:0,currentRoundTripTime:0,bytesSent:0,bytesReceived:0};let e={timestamp:r.timestamp,availableOutgoingBitrate:r.availableOutgoingBitrate||0,totalRoundTripTime:r.totalRoundTripTime||0,currentRoundTripTime:r.currentRoundTripTime||0,bytesSent:r.bytesSent||0,bytesReceived:r.bytesReceived||0},t=n.find(dt("id",r.remoteCandidateId));t&&Object.assign(e,{remote:{type:t.candidateType,address:t.ip||t.address,port:t.port,protocol:t.protocol}});let i=n.find(dt("id",r.localCandidateId));return i&&Object.assign(e,{local:{type:i.candidateType,address:i.ip||i.address,port:i.port,protocol:i.protocol,relayProtocol:i.relayProtocol,networkType:i.networkType}}),br(e)}function ka(n,r,e=!1){let t=di("id",n),i=e?n.filter(yr(dt("type","remote-inbound-rtp"))):n.filter(yr(dt("type","inbound-rtp"),dt("type","outbound-rtp")));return A.browserName()==="Firefox"&&(i=Object.values(i.reduce((a,o)=>{if(!a[o.ssrc])a[o.ssrc]=o;else{let s=Object.assign({},a[o.ssrc],o),l=a[o.ssrc].isRemote?o:a[o.ssrc];s.id=l.id,s.type=l.type,delete s.isRemote,delete s.remoteId,a[s.ssrc]=s}return a},{}))),i.map(a=>{var b;let o=Number(a.ssrc),s=a.mediaType||a.kind,l=a.remoteId||a.trackId,u=a.type,m=a.codecId;if(!u||!o||!s)return null;let h={ssrc:o,type:u,kind:s,bytesReceived:me(a,"bytesReceived"),bytesSent:me(a,"bytesSent"),headerBytesReceived:me(a,"headerBytesReceived"),headerBytesSent:me(a,"headerBytesSent"),jitter:me(a,"jitter"),packetsLost:me(a,"packetsLost"),packetsReceived:me(a,"packetsReceived"),packetsSent:me(a,"packetsSent"),fractionLost:me(a,"fractionLost"),pliCount:me(a,"pliCount"),firCount:me(a,"firCount"),nackCount:me(a,"nackCount"),userId:r[o],freezeCount:me(a,"freezeCount",0),totalFreezesDuration:me(a,"totalFreezesDuration",0)},T="mid"in a&&typeof a.mid=="string"?a.mid:void 0,v="rid"in a&&typeof a.rid=="string"?a.rid:void 0;if(T&&(h.mid=T),v&&(h.rid=v),s==="video"){let L=me(a,"framesDecoded"),O=me(a,"totalInterFrameDelay"),G=me(a,"totalSquaredInterFrameDelay"),$=me(a,"encoderImplementation"),le=me(a,"decoderImplementation");$&&(h.encoderImplementation=$),le&&(h.decoderImplementation=le),h.interframeDelayVariance=(G-O*O/L)/L}if(s==="video"&&h.type==="outbound-rtp"&&(h.totalEncodeTime=(b=me(a,"totalEncodeTime"))!=null?b:0),s==="audio"&&(h.totalSamplesReceived=me(a,"totalSamplesReceived"),h.concealedSamples=me(a,"concealedSamples"),h.insertedSamplesForDeceleration=me(a,"insertedSamplesForDeceleration"),h.removedSamplesForAcceleration=me(a,"removedSamplesForAcceleration"),h.silentConcealedSamples=me(a,"silentConcealedSamples"),h.concealmentEvents=me(a,"concealmentEvents"),h.totalAudioEnergy=me(a,"totalAudioEnergy")),m&&t[m]){let L=t[m];h.clockRate=L.clockRate,h.mimeType=L.mimeType,s==="audio"&&L.sdpFmtpLine&&(h.sdpFmtpLine=L.sdpFmtpLine)}if(l&&t[l]){let L=t[l];h.frameHeight=L.frameHeight,h.frameWidth=L.frameWidth,h.framesDecoded=L.framesDecoded,h.framesReceived=L.framesReceived,h.framesDropped=L.framesDropped}return br(h)}).filter(a=>!!a)}function co(n,r,e=!1){if(!r||!r.rtps||!n.rtps)return n;let t,i;e&&(t=di("ssrc",(n==null?void 0:n.remoteRtps)||[]),i=di("ssrc",(r==null?void 0:r.remoteRtps)||[]));let a=di("ssrc",n.rtps),o=di("ssrc",r.rtps),s=(n.timestamp-r.timestamp)/1e3;return!a||!o||Object.keys(a).forEach(l=>{let u=a[l],m=o[l];if(!(!u||!m)){if(u.bytesReceived&&u.bytesReceived>m.bytesReceived&&(u.bandwidth=Math.round((u.bytesReceived-m.bytesReceived)/s),u.bandwidth+=Math.round((u.headerBytesReceived-m.headerBytesReceived)/s)),u.bytesSent&&u.bytesSent>m.bytesSent&&(u.bandwidth=Math.round((u.bytesSent-m.bytesSent)/s),u.bandwidth+=Math.round((u.headerBytesSent-m.headerBytesSent)/s)),u.packetsReceived)if(u.packetsReceived>m.packetsReceived||u.packetsLost>m.packetsLost){let h=u.packetsLost-m.packetsLost,T=u.packetsReceived-m.packetsReceived;u.packetLoss=parseFloat((100*h/(h+T)).toFixed(2))}else u.packetLoss=0;if(u.freezeCount>m.freezeCount&&(u.freezeCountDelta=u.freezeCount-m.freezeCount),u.totalFreezesDuration>m.totalFreezesDuration){let h=u.totalFreezesDuration-m.totalFreezesDuration;u.totalFreezesDurationDelta=h}if(u.framesDropped&&m.framesDropped&&u.framesDropped>m.framesDropped&&(u.framesDroppedDelta=parseFloat(((u.framesDropped-m.framesDropped)/s).toFixed(0))),e&&u.type==="outbound-rtp"&&u.kind==="video"){let h=t==null?void 0:t[l],T=i==null?void 0:i[l],v=O=>O!=null?O:0,b=Math.max(0,v(h==null?void 0:h.packetsLost)-v(T==null?void 0:T.packetsLost)),L=Math.max(1,u.packetsSent-m.packetsSent);n.transport.averageNetStat={currentRoundTripTime:(n.transport.currentRoundTripTime+r.transport.currentRoundTripTime)/2*1e3,lostPercent:Math.round(b/L*100)}}}}),n}function li(i,a){return c(this,arguments,function*(n,r,e={},t=!1){let o=yield oo(n),s={timestamp:Date.now(),transport:so(o),rtps:ka(o,e)};return t&&(s.remoteRtps=ka(o,e,!0)),r?co(s,r,t):(yield E.delay(io),li(n,s,e,t))})}function it(n){performance.clearMarks(n),performance.mark(n)}function Mr(n){performance.clearMarks(n)}function Vt(n){let r=performance.getEntriesByName(n)[0];if(typeof r=="undefined")return null;let e=Math.round(performance.now()-r.startTime);return performance.clearMarks(n),e}function Ft(n){return`${R.SCREENSHARE_FIRST_FRAME}_${lo(n)}`}function lo(n){return typeof n=="string"?n:JSON.stringify(n)}var We=class We{constructor(){this._eventualLogs=new Set}static create(){We._instance=new We}static logCallStat(r){var e;if((e=We._instance)!=null&&e._eventualLogs.size){for(let t of We._instance._eventualLogs)Object.assign(t,{call_topology:r.call_topology,local_address:r.local_address,local_connection_type:r.local_connection_type,network_type:r.network_type,remote_address:r.remote_address,remote_connection_type:r.remote_connection_type,transport:r.transport}),P.logClientStats(t);We._instance._eventualLogs.clear()}P.logClientStats(r)}static logEventualStat(r){var e;r.value===void 0&&(r.value=Vt(r.name)),r.value!==null&&((e=We._instance)==null||e._eventualLogs.add(r))}static destroy(){var r;(r=We._instance)==null||r._destroy(),We._instance=null}_destroy(){this._eventualLogs.clear()}};We._instance=null;var we=We;var Hi=class{constructor(r){this._firstFrameReceived=!1;this._participantId=r}measure(r,e){if(this._firstFrameReceived)return;this._firstFrameReceived=!0;let t=Ft(this._participantId),i=Vt(t);i!==null&&we.logEventualStat({name:R.SCREENSHARE_FIRST_FRAME,value:i,width:r,height:e})}};var uo=65536,jt=class n{constructor(r,e,t){this._chunks=[];this._participantId=r,this._onStream=e,this._onStat=t,this._statScreenShareFirstFrame=new Hi(r)}appendChunk(r){let e=this._chunks.length;if(r.start)this._measureFreezeDuration(!1),this._measureFreezeDuration(!0),e&&(d.warn("[FrameBuilder] Cleanup buffer",Array.prototype.slice.call(this._chunks)),this._chunks=[]);else if(!e||(this._chunks[e-1].sequence+1)%uo!==r.sequence){d.warn("[FrameBuilder] Got incorrect chunk");return}if(this._chunks.push(r),r.end){let t=this._processFrameData(),{width:i,height:a}=n.getFrameSize(t);this._processFrame({timestamp:r.timestamp,frameData:t,isVP9:r.isVP9,keyframe:r.keyframe,width:i,height:a}),this._statScreenShareFirstFrame.measure(i,a)}}destroy(){Mr(R.SCREENSHARE_FREEZE_DURATION),Mr(Ft(this._participantId)),this._chunks=[]}_processFrameData(){let r=this._chunks;this._chunks=[];let e=r.reduce((a,o)=>a+o.data.byteLength,0),t=new Uint8Array(e),i=0;for(let a of r)t.set(new Uint8Array(a.data),i),i+=a.data.byteLength;return t}static getFrameSize(r){let e={width:0,height:0},t=new po(r.buffer);t.bigEndian=!0,t.index+=2;let i=t.readBits(1),o=t.readBits(1)<<1|i;return o===3&&t.index++,t.readBits(1)===1||t.readBits(1)!==0||(t.index++,t.index++,t.index+=24,o>=2&&t.index++,t.readBits(3)!==7?(t.index++,(o===1||o===3)&&(t.index+=3)):(o===1||o===3)&&t.index++,e.width=t.readBits(16)+1,e.height=t.readBits(16)+1),e}static isBrowserSupported(){throw new Error("Method `isBrowserSupported` is not implemented")}_measureFreezeDuration(r){if(r){it(R.SCREENSHARE_FREEZE_DURATION);return}let e=Vt(R.SCREENSHARE_FREEZE_DURATION);e!==null&&e>1e3&&this._onStat({freeze_duration:e})}};var It=class{constructor(r){this._onStream=r}drawFrame(r){return c(this,null,function*(){throw new Error("Method `drawFrame` is not supported by this implementation")})}drawImage(r){return c(this,null,function*(){throw new Error("Method `drawImage` is not supported by this implementation")})}static isBrowserSupported(){throw new Error("Method `isBrowserSupported` is not implemented")}};var Ht=class extends It{constructor(e){super(e);this._canvas=null;this._canvasContext=null;this._stream=null;this._track=null;d.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()}_drawImage(e){return c(this,null,function*(){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,this._useImageBitmap){let i;e instanceof ImageBitmap?i=e:i=yield createImageBitmap(e,0,0,e.width,e.height),this._canvasContext.transferFromImageBitmap(i),i.close()}else{let i=this._canvasContext;i.clearRect(0,0,t.width,t.height),i.putImageData(e,0,0)}this._requestCanvasFrame()})}drawFrame(e){return c(this,null,function*(){let t="createImageBitmap"in e?yield e.createImageBitmap():yield createImageBitmap(e);yield this._drawImage(t)})}drawImage(e){return c(this,null,function*(){yield this._drawImage(e)})}destroy(){this._removeStream(),d.debug("CanvasRenderer destroyed")}static isBrowserSupported(){return("CanvasCaptureMediaStream"in window||"CanvasCaptureMediaStreamTrack"in window)&&!(A.browserName()==="Safari"&&Number(A.browserVersion())===15)&&!(A.browserName()==="Firefox"&&Number(A.browserVersion())<60)}};var Et=class extends It{constructor(r){super(r),d.debug("TrackGeneratorRenderer started"),this._generator=new MediaStreamTrackGenerator({kind:"video"}),this._writer=this._generator.writable.getWriter(),this._stream=new MediaStream([this._generator]),this._onStream(this._stream)}drawFrame(r){return c(this,null,function*(){yield this._writer.write(r)})}destroy(){this._writer.releaseLock(),this._generator.writable.close().then(()=>this._generator.stop()),d.debug("TrackGeneratorRenderer destroyed")}static isBrowserSupported(){return"VideoFrame"in window&&"MediaStreamTrackGenerator"in window&&Je.isBrowserSupported()}};var Gt=class extends jt{constructor(e,t,i){super(e,t,i);this._decoderReady=!1;this._decoderBusy=!1;this._decoderQueue=[];d.debug(`StreamBuilder started for participant [${e}]`),Et.isBrowserSupported()?this._renderer=new Et(t):this._renderer=new Ht(t),Je.isBrowserSupported()?this._decoder=new Je:this._decoder=new St;let a=s=>c(this,null,function*(){this._decoderBusy=!1,"VideoFrame"in window&&s instanceof VideoFrame?yield this._renderer.drawFrame(s):yield this._renderer.drawImage(s),this._fpsMeter.increment(),this._decodeQueue()}),o=s=>{this._decoderBusy=!1,this._decodeQueue()};this._decoder.init(a,o).then(()=>{this._decoderReady=!0,this._decodeQueue()}),this._fpsMeter=new vt(s=>d.log(`[StreamBuilder][${e}] fps: ${s}`),2e4)}_processFrame(e){e.keyframe&&(this._decoderQueue=[]),this._decoderQueue.push(e),this._decodeQueue()}_decodeQueue(){if(!this._decoderReady||this._decoderBusy)return;let e=this._decoderQueue.shift();e&&(this._decoderBusy=!0,this._decoder.decodeFrame(e.timestamp,e.frameData,e.isVP9,e.keyframe))}destroy(){super.destroy(),this._fpsMeter.destroy(),this._decoder.destroy(),this._renderer.destroy(),d.debug(`StreamBuilder destroyed for participant ${this._participantId}`)}static isBrowserSupported(){return Ht.isBrowserSupported()||Et.isBrowserSupported()}};function Oa(n,r,e,t,i,a,o){let s=0;r&&(s|=1),e&&(s|=2),t&&(s|=4),o||(s|=8);let l=new ArrayBuffer(11),u=new DataView(l);if(u.setUint8(0,1),u.setUint16(1,i),u.setUint32(3,n),u.setUint8(7,a?1:0),u.setUint16(8,0),u.setUint8(10,s),!o)return l;let m=new Uint8Array(l.byteLength+o.byteLength);return m.set(new Uint8Array(l),0),m.set(new Uint8Array(o),l.byteLength),m.buffer}function xa(n){let r=new DataView(n),e=r.getUint8(0),t=r.getUint16(1),i=r.getUint32(3),a=r.getUint8(7)===1,o=r.getUint16(8),s=r.getUint8(10),l=!!(s&1),u=!!(s&2),m=!!(s&4),h=!!(s&8);if(e!==1)throw new Error(`Unexpected protocol version. Got ${e}, expected 1`);return{timestamp:i,start:l,end:u,keyframe:m,sequence:t,isVP9:a,ssrc:o,eos:h,data:n.slice(11)}}function La(n){if(!n||!n.byteLength||n.byteLength!==4)return!1;let r=new DataView(n);return!(r.getUint8(0)!==1||r.getUint8(1)!==1||r.getUint16(2)!==0)}function Na(n){if(!n||!n.byteLength||n.byteLength!==10)return null;let r=new DataView(n);if(r.getUint8(0)!==1||r.getUint8(1)!==2||r.getUint16(2)!==0)return null;let a=r.getUint16(4),o=r.getUint32(6);return{seq:a,ts2:o}}import*as x from"simple-ebml-builder";var mo=va(2,15)-1,Ar=1,ho=5,_o=5;var Dr=class n{constructor(r){this._sourceBuffer=null;this._queue=[];this._clearBufferTill=0;this._mediaSource=new MediaSource,this._codec=r;let e=()=>{this._mediaSource.removeEventListener("sourceopen",e),this._initBuffer(),this._handleQueue()};this._mediaSource.addEventListener("sourceopen",e,!1)}_handleQueue(){if(!this._sourceBuffer||this._sourceBuffer.updating||!this._queue.length)return;if(this._clearBufferTill&&this._sourceBuffer.buffered.length){let t=this._sourceBuffer.buffered.start(0);t<this._clearBufferTill&&(this._sourceBuffer.remove(t,this._clearBufferTill),d.debug(`[WebmBuilder] SourceBuffer cleanup from ${t} to ${this._clearBufferTill}`)),this._clearBufferTill=0;return}let r=this._queue;this._queue=[];let e=n._buildQueue(r);this._sourceBuffer.appendBuffer(e)}static _buildQueue(r){if(r.length){if(r.length===1)return x.build(r[0])}else return new Uint8Array;let e=r.reduce((a,o)=>a+o.countSize(),0),t=new Uint8Array(e),i=0;for(let a of r){let o=x.build(a);t.set(o,i),i+=o.byteLength}return t}_initBuffer(){this._sourceBuffer=this._mediaSource.addSourceBuffer(`video/webm; codecs="${this._codec}"`),this._sourceBuffer.mode="sequence",this._sourceBuffer.addEventListener("updateend",()=>this._handleQueue())}changeType(r){var e;return this._codec=r,(e=this._sourceBuffer)==null?void 0:e.changeType(r)}append(r,e=!1){this._queue.push(r),e&&this._handleQueue()}cleanup(){var a,o,s;((a=this._mediaSource)==null?void 0:a.readyState)==="open"&&((o=this._sourceBuffer)==null||o.abort());let r=(s=this._sourceBuffer)==null?void 0:s.buffered,e=r==null?void 0:r.length;if(!e)return;let t=r.start(0),i=Math.max(0,r.end(e-1)-ho);i-t>_o&&(this._clearBufferTill=i)}destroy(){var r;this._queue=[],this._mediaSource.readyState==="open"&&((r=this._sourceBuffer)==null||r.abort(),this._mediaSource.endOfStream()),this._sourceBuffer=null,this._clearBufferTill=0}get codec(){return this._codec}get mediaSource(){return this._mediaSource}get buffered(){var r;return(r=this._sourceBuffer)==null?void 0:r.buffered}},Tt=class n extends jt{constructor(e,t,i){super(e,t,i);this._mediaBuffer=null;this._video=null;this._stream=null;this._earliestTimestamp=0;this._clusterStartTime=0;this._lastFrameTimestamp=0;d.debug(`[WebmBuilder] started for participant [${e}]`)}static _intToU16BE(e){return new Uint8Array([e>>8,e])}static _genWebmHeader(){return x.element(x.ID.EBML,[x.element(x.ID.EBMLVersion,x.number(1)),x.element(x.ID.EBMLReadVersion,x.number(1)),x.element(x.ID.EBMLMaxIDLength,x.number(4)),x.element(x.ID.EBMLMaxSizeLength,x.number(8)),x.element(x.ID.DocType,x.string("webm")),x.element(x.ID.DocTypeVersion,x.number(2)),x.element(x.ID.DocTypeReadVersion,x.number(2))])}static _genSegmentHeader(e,t,i){let a=x.element(x.ID.Info,[x.element(x.ID.TimecodeScale,x.number(1e6)),x.element(x.ID.MuxingApp,x.string("vk-webm-builder")),x.element(x.ID.WritingApp,x.string("vk-webm-builder"))]),o=[x.element(x.ID.PixelWidth,x.number(e)),x.element(x.ID.PixelHeight,x.number(t))],s=x.element(x.ID.Tracks,x.element(x.ID.TrackEntry,[x.element(x.ID.TrackNumber,x.number(Ar)),x.element(x.ID.TrackUID,x.number(Ar)),x.element(x.ID.TrackType,x.number(1)),x.element(x.ID.FlagLacing,x.number(0)),x.element(x.ID.DefaultDuration,x.number(1e9)),x.element(x.ID.CodecID,x.string(`V_${i.toUpperCase()}`)),x.element(x.ID.Video,o)]));return x.unknownSizeElement(x.ID.Segment,[a,s])}static _genClusterHeader(e){return x.unknownSizeElement(x.ID.Cluster,[x.element(x.ID.Timecode,x.number(Math.round(e)))])}_createVideo(e){this._mediaBuffer=new Dr(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=()=>{var i;if((i=this._video)!=null&&i.src){d.warn(`[WebmBuilder] Video paused for participant [${this._participantId}], try to play again`);let a=this._video.seekable;a.length&&(this._video.currentTime=a.end(a.length-1)-.1),this._video.play().catch(()=>{})}};this._video.onpause=t,this._video.onwaiting=t,this._video.onstalled=t,this._video.onerror=()=>{var i;return d.warn(`[WebmBuilder] Video Error for participant [${this._participantId}]`,(i=this._video)==null?void 0:i.error)},this._stream=this._video.captureStream(),this._onStream(this._stream)}_processFrame(e){var s,l,u,m,h;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,d.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,(s=this._mediaBuffer)==null||s.cleanup(),d.debug(`[WebmBuilder] Segment header for participant [${this._participantId}]`);let T=n._genWebmHeader();(l=this._mediaBuffer)==null||l.append(T);let v=n._genSegmentHeader(e.width,e.height,t);(u=this._mediaBuffer)==null||u.append(v)}let a=Math.round(i-this._clusterStartTime);if(a>mo&&(this._clusterStartTime=i,a=0),a===0){d.debug(`[WebmBuilder] Cluster header for participant [${this._participantId}]`);let T=n._genClusterHeader(this._clusterStartTime);(m=this._mediaBuffer)==null||m.append(T)}let o=x.element(x.ID.SimpleBlock,[x.vintEncodedNumber(Ar),x.bytes(n._intToU16BE(a)),x.number((e.keyframe?1:0)<<7),x.bytes(e.frameData)]);(h=this._mediaBuffer)==null||h.append(o,!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),d.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 Rt=class{constructor(r,e,t,i,a){this._participantIdRegistry=null;this._streamBuilders={};this._onStream=()=>{};this._onEos=()=>{};d.debug("ScreenCaptureReceiver started"),this._datachannel=r,this._participantIdRegistry=e,this._onStream=t,this._onEos=i,this._onStat=a,this._datachannel.onmessage=o=>this._onDataChannelMessage(o.data)}_onDataChannelMessage(r){var a,o;let e=xa(r),t=(o=(a=this._participantIdRegistry)==null?void 0:a.getStreamDescription(e.ssrc))==null?void 0:o.participantId;if(!t){d.warn(`Participant id for ssrc ${e.ssrc} not found in registry`);return}if(e.eos){this.close(t),this._onEos(t);return}let i=this._streamBuilders[t];if(!i){let s=l=>this._onStream(t,l);p.screenShareWebmBuilder&&Tt.isBrowserSupported()?i=new Tt(t,s,this._onStat):i=new Gt(t,s,this._onStat),this._streamBuilders[t]=i}i.appendChunk(e)}close(r){let e=this._streamBuilders[r];e&&(e.destroy(),delete this._streamBuilders[r])}destroy(){this._datachannel.onbufferedamountlow=null,this._datachannel.onmessage=null,this._onStream=()=>{},Object.values(this._streamBuilders).forEach(r=>r.destroy()),this._streamBuilders={},this._participantIdRegistry=null,d.debug("ScreenCaptureReceiver destroyed")}static isBrowserSupported(){return(Je.isBrowserSupported()||St.isBrowserSupported())&&(Gt.isBrowserSupported()||Tt.isBrowserSupported())}};var wr=class{constructor(r,e,t){this._next=t,t&&(t.prev=this),this._prev=e,e&&(e.next=this),this._data=r}get prev(){return this._prev}set prev(r){this._prev=r}get next(){return this._next}set next(r){this._next=r}get data(){return this._data}},pi=class{constructor(){this._head=null;this._tail=null;this._length=0}get length(){return this._length}push(...r){for(let e of r)this._tail=new wr(e,this._tail,null),this._head||(this._head=this._tail),this._length++}merge(r){this._tail&&(this._tail.next=r._head),this._head||(this._head=r._head),this._tail=r._tail,this._length+=r._length,r.clear()}shift(){if(!this._length||!this._head)return null;let r=this._head;return this._head=r.next,this._head&&(r.next=null,this._head.prev=null),this._length--,this.length===1?this._tail=this._head:this.length||(this._head=this._tail=null),r.data}bisect(){if(this.length){let r=this.length>1?Math.floor(this.length/2):1;for(let e=0;e<r;e++)this.shift()}}head(){var r;return((r=this._head)==null?void 0:r.data)||null}tail(){var r;return((r=this._tail)==null?void 0:r.data)||null}clear(){this._head=null,this._tail=null,this._length=0}toString(){let r=[],e=this._head;for(;e!==null;)r.push(e.data),e=e.next;return r.length?JSON.stringify(r,(t,i)=>i instanceof Error?String(i):i):""}};import Ua from"@vkontakte/libvpx";var go=1e3,Wt=class extends He{constructor(e,t,i,a){super();this._video=null;this._imageCapture=null;this._canvas=null;this._canvasCtx=null;this._frameReadTimeout=0;this._lastFrame=null;this._sourceTrack=e,this._onFrame=t,this._useCongestionControl=i,this._maxBitrate=a,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 c(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 new Promise((t,i)=>{if(this._useImageCapture)this._imageCapture=new ImageCapture(e),t();else{let a=this._video;a.srcObject=new MediaStream([e]),a.onloadeddata=l=>t(),a.onerror=()=>i(new Error("Video element error"));let o=a.play(),s=()=>i(new Error("Autoplay is disabled"));o?o.catch(s):s()}})})}_removeStream(){var e;window.clearTimeout(this._frameReadTimeout),(e=this._lastFrame)==null||e.close(),this._video&&(this._video.pause(),this._video.srcObject=null),this._imageCapture&&(this._imageCapture=null)}_drawFrameVideo(){if(!this._canvas||!this._canvasCtx||!this._video)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._canvasCtx.getImageData(0,0,e,t)}_getFrameBitmap(){return c(this,null,function*(){if(!this._imageCapture)throw new Error("Destroyed");return this._imageCapture.grabFrame()})}_drawFrameData(e){var a;if(!this._canvas||!this._canvasCtx)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),(a=this._canvasCtx)==null?void 0:a.getImageData(0,0,t,i)}init(){return c(this,null,function*(){this._createDom();let e=this._sourceTrack.getSettings().width,t=this._sourceTrack.getSettings().height;d.debug(`LibVPxEncoder started ${e}x${t}, codec ${this.isVP9()?"VP9":"VP8"}`),yield this._createStream(this._sourceTrack),yield this._createWorker(`"use strict";var exports=(()=>{var u=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var V=(a,r)=>{for(var s in r)u(a,s,{get:r[s],enumerable:!0})},h=(a,r,s,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of y(r))!x.call(a,e)&&e!==s&&u(a,e,{get:()=>r[e],enumerable:!(i=R(r,e))||i.enumerable});return a};var A=a=>h(u({},"__esModule",{value:!0}),a);var M={};V(M,{default:()=>F});var F=(a,r,s,i)=>{let e;function m(t,o){return a({locateFile:r}).then(n=>{if(e=new n.VpxEncoder,e.debug(o),!e.init(t?n.VpxType.VP9:n.VpxType.VP8))throw self.postMessage({type:"log_error",message:"encoder-init-fail-libvpx"}),new Error("LibVPxEncoder failed to create");if(s){let d=Math.round(i/1e3);e.setTargetBitrate(d)}else e.setMaxQuantizer(10),e.setTargetBitrate(1024)})}function E(t,o,n,p){let d=e.allocateImage(t,o);if(!d){self.postMessage({type:"frame",error:"No buffer data"});return}d.set(new Uint8Array(n));let l=Math.round(performance.now()),f=150;if(!e.encode(l,f,p)){self.postMessage({type:"frame",error:"Encode failed"});return}let b=e.readFrame();if(!b){self.postMessage({type:"frame",error:"No encoded data"});return}e.readFrame()&&(self.postMessage({type:"debug",message:"LibVPxEncoder dropped frame"}),self.postMessage({type:"log_error",message:"LibVPxEncoder-drop"}));let c=new Uint8Array(b.byteLength);c.set(b),self.postMessage({type:"frame",frameType:p?"key":"delta",timestamp:l,duration:f,width:t,height:o,data:c.buffer},[c.buffer])}function g(t,o){let n=Math.round(t/1e3);e.setTargetBitrate(n)}self.onmessage=t=>{switch(t.data.type){case"init":m(t.data.isVP9,t.data.debug).then(()=>self.postMessage({type:"ready"})).catch(o=>self.postMessage({type:"error",error:String(o)}));break;case"frame":E(t.data.width,t.data.height,t.data.imageData,t.data.keyFrame);break;case"set_bitrate":g(t.data.bitrate,t.data.useCbr);break}}};return A(M);})();
|
|
10
|
-
`,i=>{
|
|
11
|
-
`,i=>{var a;i.error?this._onFrame(null,i.error):this._onFrame({type:i.frameType,timestamp:i.timestamp,duration:i.duration,data:i.data,byteLength:(a=i.data)==null?void 0:a.byteLength,width:i.width,height:i.height})},[],{readable:t,width:r,height:e,isVP9:this.isVP9(),framerate:this._frameRate,useCongestionControl:this._useCongestionControl,maxBitrate:this._maxBitrate,useCbr:this._useCbr},[t])})}requestFrame(r=!1){this._sendToWorker("frame",{keyFrame:r})}setBitrate(r,e,t){this._sendToWorker("set_bitrate",{bitrate:r,useCbr:e,fps:t})}isVP9(){return!0}destroy(){this._removeWorker(),d.debug("WebCodecsEncoder destroyed")}static isBrowserSupported(){return"VideoEncoder"in window&&"Worker"in window&&"EncodedVideoChunk"in window&&"MediaStreamTrackProcessor"in window}};var fo=2100,So=600,vo=1.2,Ba=.8,Io=2e3,Eo=8e3,kr=8e3,To=16e3,Ro=4,Co=2e3,Gi=(t=>(t[t.NONE=0]="NONE",t[t.UP=1]="UP",t[t.DOWN=2]="DOWN",t))(Gi||{}),ui=class{constructor(r,e,t,i,a,o,s){this._upPenalty=0;this._delayAvgShort=-1;this._delayAvgLong=-1;this._minDelay=Number.MAX_VALUE;this._maxDelay=0;this._largeDelayDuration=0;this._frames=0;this._fps=0;this._onCongestion=r,this._ccEnabled=i,this._minBitrate=e,this._maxBitrate=t,this._fastSharing=a,this._targetFps=s,o>0?this._highDelayThreshold=o:this._highDelayThreshold=fo,a&&(this._highDelayThreshold=So),this._trendDelayThreshold=Math.round(this._highDelayThreshold/3),this._targetBitrate=this._maxBitrate,this._probing=!1;let l=Date.now();this._lastDown=0,this._lastUp=l,this._lastProbing=l,this._lastCheckDelay=0,this._lastFpsCalcMs=0}checkDelay(r,e,t){let i=Date.now();if(this._calcFps(i),this._calcDelay(e,i),this._delayAvgShort<=0||this._delayAvgLong<=0||!this._ccEnabled)return;let a=0,o=this._delayAvgShort-this._delayAvgLong,s=Math.round(Math.abs(o)*100/this._delayAvgLong),l=o>40&&s>30&&this._delayAvgShort>this._trendDelayThreshold,u=this._delayAvgShort>this._highDelayThreshold;l||u?a=2:Math.abs(o)<40&&s<10&&!u&&(a=1);let m=Math.round(this._targetBitrate/1e3),h=t;r%20===0&&d.debug(`#${r}: cc: delay=${e} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${o} percent=${s} -> ${Gi[a]} tr=${m} br=${t}`);let T=i-this._lastDown;if(a===2&&T>Io){this._probing&&(this._upPenalty=Math.min(++this._upPenalty,Ro),this._probing=!1);let G=Ba*h*1e3;if(G>=this._targetBitrate&&(G=this._targetBitrate*Ba),G=Math.max(G,this._minBitrate),G<this._targetBitrate){let $=Math.round(G/1e3),le=Math.round(this._upPenalty*kr/1e3);d.log(`#${r}: cc: delay=${e} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${o} percent=${s} -> ${Gi[a]}`),d.log(`#${r}: cc: DOWN delay=${e} bitrate=${h} target=${m} -> newBitrate=${$} penalty=${le}s`),this._setBitrate(G,!0),this._targetBitrate=G}this._lastDown=i}let v=i-this._lastUp,b=Eo+this._upPenalty*kr;if(a===1&&v>b&&T>b){let G=Math.min(this._targetBitrate*vo,this._maxBitrate);if(G>this._targetBitrate){let $=Math.round(G/1e3),le=Math.round(this._targetBitrate/1e3),ae=Math.round(this._upPenalty*kr/1e3);d.log(`#${r}: cc: delay=${e} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${o} percent=${s} -> ${Gi[a]}`),d.log(`#${r}: cc: UP bitrate=${h} target=${le} -> newBitrate=${$} penalty=${ae}s`),this._setBitrate(G,!1),this._targetBitrate=G,this._probing=!0,this._lastProbing=i,this._lastUp=i}}let L=i-this._lastProbing;this._probing&&L>To&&(this._probing=!1);let O=i-this._lastDown;this._upPenalty>0&&O>3*b&&(d.log(`#${r}: cc: UP reset penalty: oldPenalty=${this._upPenalty}`),this._upPenalty=0)}_setBitrate(r,e){this._fastSharing&&(e=!0);let t=this._targetFps;this._fps>0&&(t=this._fps),this._onCongestion(r,e,t)}_calcDelay(r,e){if(!(r<=0)){if(this._delayAvgShort===-1&&(this._delayAvgShort=r,this._delayAvgLong=r),this._delayAvgShort=Math.round((this._delayAvgShort*3+r)/4),this._delayAvgLong=Math.round((this._delayAvgLong*23+r)/24),r>0&&r<this._minDelay?this._minDelay=r:r>this._maxDelay&&(this._maxDelay=r),this._lastCheckDelay===0&&(this._lastCheckDelay=e),r>Co){let t=e-this._lastCheckDelay;this._largeDelayDuration+=t}this._lastCheckDelay=e}}reconfigure(r,e){this._minBitrate=r,this._maxBitrate=e}getStat(){if(this._minDelay===Number.MAX_VALUE||this._maxDelay===0||this._delayAvgLong<=0)return null;let r={minDelay:this._minDelay,maxDelay:this._maxDelay,avgDelay:this._delayAvgLong,largeDelayDuration:this._largeDelayDuration};return this._minDelay=Number.MAX_VALUE,this._maxDelay=0,this._largeDelayDuration=0,r}_calcFps(r){this._frames++;let e=r-this._lastFpsCalcMs;if(e>5e3){this._lastFpsCalcMs=r;let t=this._fps,i=this._frames*1e3/e;this._fps===0?this._fps=Math.round(i):this._fps=Math.round((this._fps*3+i)/4),this._frames=0,this._fps!==t&&d.log(`cc: fps=${this._fps}`)}}};var mi=class{constructor(r){this._size=0;this._head=0;this._tail=0;this._maxSize=r,this._buffer=new Array(r)}add(r,e,t,i,a){this._tail===this._head&&this._size>0&&(this._head=++this._head%this._maxSize);let o=this._tail;return this._buffer[this._tail]={seq:r,ts:e,size:t,sent:Date.now(),start:i,end:a,ts2:-1,recv:-1},this._tail=++this._tail%this._maxSize,this._size++,o}update(r,e){let t=this.get(r);return t===null?null:(t.ts2=e,t.recv=Date.now(),t)}get(r){let e=this._head;for(let t=0;t<this._maxSize;t++){let i=this._buffer[e];if(r===(i==null?void 0:i.seq))return i;if(e=++e%this._maxSize,e===this._tail)break}return null}getServerBitrateK(r){let e=0,t=0,i=-1,a=-1,o=this._tail;for(let s=0;s<this._maxSize;s++){o>0?--o:o=this._maxSize-1;let l=this._buffer[o];if(!l||(a===-1&&(a=l.ts2,t=0),a>=0&&(t+=l.size),i=l.ts2,a-i>=r)||o===this._head)break}if(i>=0&&a>=0){let s=a-i;e=Math.round(s>0?t*8/s:0)}return e}getCurrentDelay(){let r=this._tail;for(let e=0;e<this._maxSize;e++){r>0?--r:r=this._maxSize-1;let t=this._buffer[r];if(!t)break;if(t.recv>=0&&t.sent>=0)return t.recv-t.sent;if(r===this._head)break}return 0}getMaxBandwidth(){let r=0,e=0,t=-1,i=-1,a=this._tail;for(let o=0;o<this._maxSize;o++){a>0?--a:a=this._maxSize-1;let s=this._buffer[a];if(s){if(i===-1&&s.end&&!s.start&&(i=s.ts2,e=0),t===-1&&i>=0&&s.start&&!s.end&&(t=s.ts2),t>=0&&i>=0){let l=i-t;r=l>0?e*8/l:0;break}if(i>=0&&(e+=s.size),a===this._head)break}}return Math.round(r)}clear(){this._buffer.fill(void 0),this._size=0,this._head=0,this._tail=0}};var Or=65536,yo=50,bo=400,Mo=1e6,Ao=3e5,Do=3e4,wo=2e3,ko=5,Wi=0,Pt=class{constructor(r,e,t,i){this._destroyed=!1;this._needKeyframe=!0;this._frameNum=0;this._feedback=new mi(1024);this._lastSentFrameSeq=0;this._lastDeliveredFrameSeq=0;this._lastFrameDelay=0;this._lastFramerateReduced=Date.now();this._lastSharingStat=Date.now();this._queue=new pi;d.debug("ScreenCaptureSender started"),this.DATA_SIZE=p.consumerScreenDataChannelPacketSize-11,this._datachannel=e,this._signaling=t,this._fastSharing=i,this._congestionControlEnabled=p.screenShareCongestionControl||this._fastSharing,this._width=r.getSettings().width,this._height=r.getSettings().height,this._maxFrameDelay=this._fastSharing?p.screenShareCongestionControlThreshold:p.screenShareCongestionControlThreshold*2;let a=p.getScreenFrameRate(this._fastSharing),{minBitrate:o,maxBitrate:s}=this._calcMinMaxBitrate(this._width,this._height),l=this._onCongestionCallback.bind(this);d.log(`ScreenCaptureSender: CongestionControl: enabled=${this._congestionControlEnabled} minBitrate=${Math.round(o/1e3)}k maxBitrate=${Math.round(s/1e3)}k delayThreshold=${p.screenShareCongestionControlThreshold}`),this._congestionControl=new ui(l,o,s,this._congestionControlEnabled,this._fastSharing,p.screenShareCongestionControlThreshold,a);let u=(m,h)=>{if(this._destroyed)return;if(!m){d.warn("requestFrame failed, keyFrame: "+this._needKeyframe,h),this._needKeyframe=!0,this._handleQueue();return}(m.width!==this._width||m.height!==this._height)&&(this._width=m.width,this._height=m.height,this._onResize(this._width,this._height));let T=this._sliceFrame(m);this._queue.merge(T),this._handleQueue(),this._sendSharingStat()};if(Ct.isBrowserSupported()){let m=this._fastSharing;this._encoder=new Ct(r,u,this._congestionControlEnabled,s,m,a)}else this._encoder=new Wt(r,u,this._congestionControlEnabled,s);this._datachannel.onmessage=m=>{La(m.data)&&(d.debug(`[${this._datachannel.label}] Requested keyframe`),this._needKeyframe=!0);let h=Na(m.data);h!==null&&this._checkCcFeedback(h)},this._encoder.init().then(()=>this._handleQueue()).catch(m=>d.warn("ScreenCaptureSender init failed",m)),this._fpsMeter=new vt(m=>d.log(`[ScreenCaptureSender] fps: ${m}`),5e3)}_handleQueue(){if(this._destroyed)return;let r=this._queue.shift();if(!r){if((this._lastSentFrameSeq-this._lastDeliveredFrameSeq+Or)%Or>ko&&this._lastFrameDelay>this._maxFrameDelay){let i=Date.now();i-this._lastFramerateReduced>wo&&(this._lastFramerateReduced=i,d.debug(`[ScreenCaptureSender] reduce framerate: delay=${this._lastFrameDelay} maxDelay=${this._maxFrameDelay}`))}else this._requestFrame();return}if(!this._sendFrameChunk(r)){this._needKeyframe=this._needKeyframe||!this._cleanupQueue(),E.setImmediate(()=>this._handleQueue());return}if(r.isLast){this._frameNum++,this._fpsMeter.increment(),r.isKey&&d.debug(`#${this._frameNum}: sharing: send keyframe size=${Math.round(r.frameSize/1e3)}k`);let t=this._feedback.getCurrentDelay(),i=this._feedback.getServerBitrateK(2e3);t>0&&this._congestionControl.checkDelay(this._frameNum,t,i)}else E.setImmediate(()=>this._handleQueue())}_cleanupQueue(){let r=this._queue.head();for(;r;){if(r.isFirst&&r.isKey)return!0;this._queue.shift(),r=this._queue.head()}return!1}_requestFrame(){this._destroyed||(this._encoder.requestFrame(this._needKeyframe),this._needKeyframe=!1)}_sliceFrame(r){let e=r.type==="key",t=r.data.byteLength,i=new pi;for(let a=0;a<t;a+=this.DATA_SIZE){let o=r.data.slice(a,a+this.DATA_SIZE),s=a===0,l=t<=a+o.byteLength,u=this._wrapHeader(r.timestamp,s,l,e,o);i.push({data:u.data,sequence:u.sequence,frameSize:t,isFirst:s,isLast:l,isKey:e,timestamp:r.timestamp})}return i}_wrapHeader(r,e,t,i,a){let o=Oa(r,e,t,i,Wi,this._encoder.isVP9(),a),s={sequence:Wi,data:o};return Wi=(Wi+1)%Or,s}_stopPacket(){return this._wrapHeader(Date.now(),!1,!1,!1,null).data}_sendFrameChunk(r){if(!this._datachannel||this._datachannel.readyState!=="open")return!1;try{return this._datachannel.send(r.data),this._feedback.add(r.sequence,r.timestamp,r.data.byteLength,r.isFirst,r.isLast),r.isLast&&(this._lastSentFrameSeq=r.sequence),!0}catch(e){return d.warn("Error sending chunk to DataChannel",e),!1}}destroy(){this._queue.clear(),this._fpsMeter.destroy(),this._datachannel.onmessage=null,this._feedback.clear(),this._datachannel.readyState==="open"&&this._datachannel.send(this._stopPacket()),this._destroyed=!0,this._encoder.destroy(),d.debug("ScreenCaptureSender destroyed")}static isBrowserSupported(){return Ct.isBrowserSupported()||Wt.isBrowserSupported()}_onCongestionCallback(r,e,t){this._encoder.setBitrate(r,e,t)}_onResize(r,e){let{minBitrate:t,maxBitrate:i}=this._calcMinMaxBitrate(r,e),a=Math.round(t/1e3),o=Math.round(i/1e3);d.log(`cc: resize to ${r}x${e}, minBitrate=${a} maxBitrate=${o}`),this._congestionControl.reconfigure(t,i)}_calcMinMaxBitrate(r,e){(r===void 0||r<640)&&(r=640),(e===void 0||e<360)&&(e=360);let t=r*e/256,i=Math.max(Ao,Math.min(Mo,Math.round(t*yo))),a=Math.round(t*bo);return{minBitrate:i,maxBitrate:a}}_checkCcFeedback(r){let e=this._feedback.update(r.seq,r.ts2);if(e===null)d.debug(`cc: update failed, seq=${r.seq}`);else if(e.end){this._lastDeliveredFrameSeq=e.seq;let t=e.recv-e.sent;t>0&&(this._lastFrameDelay=t),this._handleQueue()}}_sendSharingStat(){let r=Date.now();if(r-this._lastSharingStat>Do){let t=this._congestionControl.getStat();t!==null&&(d.debug(`cc: send stats: ${JSON.stringify(t)}`),this._signaling.reportSharingStat(t)),this._lastSharingStat=r}}};var ye=class n{static get sessionKey(){return n._sessionKey}static set sessionKey(r){n._sessionKey=r}static get sessionSecretKey(){return n._sessionSecretKey}static set sessionSecretKey(r){n._sessionSecretKey=r}static get accessToken(){return n._accessToken}static set accessToken(r){n._accessToken=r}static isEmpty(){return!n._sessionKey}};var f=class f{static set(r){r.hasOwnProperty("voiceParams")&&(Object.assign(f._params.voiceParams,r.voiceParams),delete r.voiceParams),r.hasOwnProperty("specListenerParams")&&(Object.assign(f._params.specListenerParams,r.specListenerParams),delete r.specListenerParams),r.hasOwnProperty("apiAuth")&&(ye.accessToken=r.apiAuth.accessToken,ye.sessionKey=r.apiAuth.sessionKey,ye.sessionSecretKey=r.apiAuth.sessionSecretKey),Object.assign(f._params,E.objectFilterOutValues(r,void 0))}static get(r){return f._params[r]}static get appName(){return"ok.calls.sdk.js"}static get appVersion(){return 1.1}static get sdkVersion(){return"2.8.6-dev.6d4d9d1b.0"}static get debug(){return f._params.debug}static get protocolVersion(){return f._params.joinFromMultipleDevices?6:5}static get platform(){return f._params.platform}static set platform(r){f._params.platform=r}static get clientStatsPlatform(){return f._params.clientStatsPlatform}static set clientStatsPlatform(r){f._params.clientStatsPlatform=r}static get clientType(){return f._params.clientType}static set clientType(r){f._params.clientType=r}static get externalUserType(){return f._params.externalUserType}static set externalUserType(r){f._params.externalUserType=r}static get device(){return f._params.device}static get apiKey(){return f._params.apiKey}static get apiEnv(){return f._params.apiEnv}static get apiBaseUrl(){return f._params.apiBaseUrl}static set apiBaseUrl(r){f._params.apiBaseUrl=r}static apiEndpoint(r){switch(r!=null?r:f.apiEnv){case"AUTO":case"PROD":return"https://api.mycdn.me";case"CALLS":return"https://calls.okcdn.ru";case"PROD_OK":return"https://api.ok.ru";case"TEST":return"https://apitest.ok.ru/api";case"VIDEOTEST":return"https://videotestapi.ok.ru/api";case"CALLSTEST":return"https://calls-test.okcdn.ru/api";default:return f._params.apiEnv}}static get authToken(){return f._params.authToken}static set authToken(r){f._params.authToken=r}static get anonymToken(){return f._params.anonymToken}static set anonymToken(r){f._params.anonymToken=r}static get domain(){return f._params.domain}static get externalDomain(){return f._params.externalDomain}static get iceServers(){return f._params.iceServers}static set iceServers(r){f._params.iceServers=r}static get wssBase(){return f._params.wssBase}static set wssBase(r){f._params.wssBase=r}static get wssToken(){return f._params.wssToken}static set wssToken(r){f._params.wssToken=r}static get signalingReconnectDelay(){return f._params.signalingReconnectDelay}static get signalingReconnectMaxDelay(){return f._params.signalingReconnectMaxDelay}static get signalingReconnectMaxCount(){return f._params.signalingReconnectMaxCount}static get waitConnectionDelay(){return f._params.waitConnectionDelay}static get waitResponseDelay(){return f._params.waitResponseDelay}static get waitMessageDelay(){return f._params.waitMessageDelay}static get waitAnotherTabDelay(){return f._params.waitAnotherTabDelay}static get debugLog(){return f._params.debugLog}static get forceRelayPolicy(){return f._params.forceRelayPolicy}static set forceRelayPolicy(r){f._params.forceRelayPolicy=r}static get videoMinWidth(){return f._params.videoMinWidth}static get videoMaxWidth(){return f._params.videoMaxWidth}static set videoMaxWidth(r){f._params.videoMaxWidth=r}static get videoMinHeight(){return f._params.videoMinHeight}static get videoMaxHeight(){return f._params.videoMaxHeight}static set videoMaxHeight(r){f._params.videoMaxHeight=r}static get videoAspectRatio(){return f._params.videoAspectRatio}static get videoFrameRate(){return f._params.videoFrameRate}static get videoFacingMode(){return f._params.videoFacingMode||(A.isMobile()?"user":null)}static set videoFacingMode(r){f._params.videoFacingMode=r}static get displaySurface(){return f._params.displaySurface}static get audioEffects(){return f._params.audioEffects}static set audioEffects(r){var e;f._params.audioEffects=r,(e=f._params.audioEffects)==null||e.setLogger((t,...i)=>d.send(t,...i))}static get videoEffects(){return f._params.videoEffects}static set videoEffects(r){var e;f._params.videoEffects=r,(e=f._params.videoEffects)==null||e.setLogger((t,...i)=>d.send(t,...i))}static get videoEffectMaxWidth(){return f._params.videoEffectMaxWidth}static set videoEffectMaxWidth(r){f._params.videoEffectMaxWidth=r}static get videoEffectMaxHeight(){return f._params.videoEffectMaxHeight}static set videoEffectMaxHeight(r){f._params.videoEffectMaxHeight=r}static get vmoji(){var r;return(r=f._params.vmoji)!=null&&r.isBrowserSupported()?f._params.vmoji:null}static set vmoji(r){f._params.vmoji=r}static get vmojiOptions(){return f._params.vmojiOptions||{protocolVersion:1,renderingOptions:{}}}static set vmojiOptions(r){f._params.vmojiOptions=r}static get voiceParams(){return f._params.voiceParams}static get specListenerParams(){return f._params.specListenerParams}static get iceRestartWaitTime(){return f._params.iceRestartWaitTime}static get transportConnectionWaitTime(){return f._params.transportConnectionWaitTime}static get statisticsInterval(){return f._params.statisticsInterval}static set statisticsInterval(r){f._params.statisticsInterval=r}static get networkStatisticsInterval(){return f._params.networkStatisticsInterval}static get perfStatReportEnabled(){return f._params.perfStatReportEnabled}static get callStatReportEnabled(){return f._params.callStatReportEnabled}static get clientEventsLoggingEnabled(){return f._params.clientEventsLoggingEnabled}static get enableLogPerfStatReport(){return f._params.enableLogPerfStatReport}static get producerNotificationDataChannel(){return f._params.producerNotificationDataChannel}static get producerCommandDataChannel(){return f._params.producerCommandDataChannel}static get consumerScreenDataChannel(){return f._params.consumerScreenDataChannel&&Pt.isBrowserSupported()}static get producerScreenDataChannel(){return f._params.producerScreenDataChannel&&f.producerNotificationDataChannel&&Rt.isBrowserSupported()}static get asrDataChannel(){return f._params.asrDataChannel&&f.producerNotificationDataChannel}static get consumerScreenDataChannelPacketSize(){return f._params.consumerScreenDataChannelPacketSize}static get screenShareWebmBuilder(){return f._params.screenShareWebmBuilder}static get noiseSuppression(){return f._params.noiseSuppression}static set noiseSuppression(r){f._params.noiseSuppression=r}static get preferH264(){return f._params.preferH264}static get preferVP9(){return f._params.preferVP9}static get audioNack(){return f._params.audioNack}static get consumerScreenTrack(){return f._params.consumerScreenTrack&&f.consumerScreenDataChannel}static get producerScreenTrack(){return f._params.producerScreenTrack}static get movieShare(){return f._params.movieShare&&f.videoTracksCount>0}static get videoTracksCount(){return f.producerNotificationDataChannel?Number(f._params.videoTracksCount):0}static get breakVideoPayloadTypes(){return f._params.breakVideoPayloadTypes}static get useCallsToContacts(){return f._params.useCallsToContacts}static get useParticipantListChunk(){return f._params.useParticipantListChunk&&f.videoTracksCount>0}static get useRooms(){return f._params.useRooms}static get useChatRooms(){return f._params.useChatRooms}static get participantListChunkInitIndex(){var r;return(r=f._params.participantListChunkInitIndex)!=null?r:0}static get participantListChunkInitCount(){var r;return(r=f._params.participantListChunkInitCount)!=null?r:null}static get serverAudioRed(){return f._params.serverAudioRed}static get p2pAudioRed(){return f._params.p2pAudioRed}static get h264spsPpsIdrInKeyframe(){return f._params.h264spsPpsIdrInKeyframe}static get filterObservers(){return f._params.filterObservers}static get muteMode(){return f._params.muteMode}static get preserveAudioTracks(){return f._params.preserveAudioTracks}static get audioShare(){return A.isAudioShareSupported()&&f._params.audioShare}static get fastScreenShare(){return f._params.fastScreenShare}static get screenShareCongestionControl(){return f._params.screenShareCongestionControl}static get screenShareCongestionControlThreshold(){return f._params.screenShareCongestionControlThreshold}static get fastScreenShareWidth(){return f._params.fastScreenShareWidth}static get fastScreenShareHeight(){return f._params.fastScreenShareHeight}static get newMuteRules(){return f._params.newMuteRules}static get videoSuspend(){return f._params.videoSuspend}static get enumerateDevicesDelay(){return f._params.enumerateDevicesDelay}static getScreenFrameRate(r){return r?f._params.fastScreenShareFrameRate:f._params.screenFrameRate}static get switchVideoAtBadNetwork(){return f._params.switchVideoAtBadNetwork}static get enableVideoEffectsFpsDegradation(){return f._params.enableVideoEffectsFpsDegradation}static get simulcast(){return f._params.simulcast}static set simulcast(r){f._params.simulcast=r}static toJSON(){return{apiKey:f._params.apiKey,apiEnv:f._params.apiEnv,audioShare:f._params.audioShare,useCallsToContacts:f._params.useCallsToContacts,useParticipantListChunk:f._params.useParticipantListChunk,useRooms:f._params.useRooms,useChatRooms:f._params.useChatRooms,fastScreenShare:f._params.fastScreenShare,participantListChunkInitCount:f._params.participantListChunkInitCount,screenShareCongestionControl:f._params.screenShareCongestionControl,screenShareCongestionControlThreshold:f._params.screenShareCongestionControlThreshold,videoTracksCount:f._params.videoTracksCount,asrDataChannel:f._params.asrDataChannel,videoMaxHeight:f._params.videoMaxHeight,videoMaxWidth:f._params.videoMaxWidth,videoEffectMaxHeight:f._params.videoEffectMaxHeight,videoEffectMaxWidth:f._params.videoEffectMaxWidth,videoSuspend:f._params.videoSuspend,debugLog:f._params.debugLog,callStatReportEnabled:f._params.callStatReportEnabled,joinFromMultipleDevices:f._params.joinFromMultipleDevices,movieShare:f._params.movieShare,newMuteRules:f._params.newMuteRules,clientType:f._params.clientType,clientStatsPlatform:f._params.clientStatsPlatform,consumerScreenDataChannelPacketSize:f._params.consumerScreenDataChannelPacketSize,switchVideoAtBadNetwork:f._params.switchVideoAtBadNetwork}}};f._params={platform:"WEB",clientStatsPlatform:"",clientType:"PORTAL",externalUserType:"",device:"browser",apiKey:"",authToken:"",anonymToken:"",apiEnv:"AUTO",apiBaseUrl:null,domain:"",externalDomain:"",iceServers:[],wssBase:"",wssToken:"",signalingReconnectDelay:1e3,signalingReconnectMaxDelay:5e3,signalingReconnectMaxCount:10,waitConnectionDelay:1e4,waitResponseDelay:1e4,waitMessageDelay:15e3,waitAnotherTabDelay:200,debugLog:!1,debug:!1,forceRelayPolicy:!1,videoMinWidth:428,videoMinHeight:240,videoMaxWidth:1280,videoMaxHeight:720,videoAspectRatio:16/9,videoFrameRate:25,screenFrameRate:15,videoFacingMode:null,displaySurface:"monitor",audioEffects:null,videoEffects:null,videoEffectMaxWidth:640,videoEffectMaxHeight:360,vmoji:null,vmojiOptions:null,iceRestartWaitTime:2e4,transportConnectionWaitTime:5e3,statisticsInterval:5e3,networkStatisticsInterval:2e4,perfStatReportEnabled:!0,callStatReportEnabled:!1,clientEventsLoggingEnabled:!1,enableLogPerfStatReport:!1,voiceParams:{smoothing:.8,minFreq:200,maxFreq:5e3,interval:500,threshold:.35,speakerLevelMultiplier:1.8},specListenerParams:{connectionTimeout:1e4,volumeTimeout:1e4},producerNotificationDataChannel:!0,producerCommandDataChannel:!0,consumerScreenDataChannel:!0,producerScreenDataChannel:!0,asrDataChannel:!1,consumerScreenDataChannelPacketSize:64*1024,screenShareWebmBuilder:!1,noiseSuppression:!0,preferH264:!1,preferVP9:!1,audioNack:!0,consumerScreenTrack:!0,producerScreenTrack:!0,videoTracksCount:30,movieShare:!1,useCallsToContacts:!1,useParticipantListChunk:!1,useRooms:!1,useChatRooms:!1,participantListChunkInitIndex:0,participantListChunkInitCount:null,serverAudioRed:!0,p2pAudioRed:!0,h264spsPpsIdrInKeyframe:!0,breakVideoPayloadTypes:!1,joinFromMultipleDevices:!1,filterObservers:!1,muteMode:!1,preserveAudioTracks:!1,audioShare:!1,fastScreenShare:!1,screenShareCongestionControl:!1,screenShareCongestionControlThreshold:2100,fastScreenShareFrameRate:24,fastScreenShareWidth:1280,fastScreenShareHeight:720,newMuteRules:!1,videoSuspend:!1,enumerateDevicesDelay:2e3,switchVideoAtBadNetwork:!1,enableVideoEffectsFpsDegradation:!1,simulcast:!1};var p=f;function Va(n,r){return!(n.isAudioEnabled!==r.isAudioEnabled||n.isVideoEnabled!==r.isVideoEnabled||n.isScreenSharingEnabled!==r.isScreenSharingEnabled||n.isFastScreenSharingEnabled!==r.isFastScreenSharingEnabled||n.isAudioSharingEnabled!==r.isAudioSharingEnabled||n.isAnimojiEnabled!==r.isAnimojiEnabled)}function Re(n){return Object.assign({isAudioEnabled:!1,isVideoEnabled:!1,isScreenSharingEnabled:!1,isFastScreenSharingEnabled:!1,isAudioSharingEnabled:!1,isAnimojiEnabled:!1},n||{})}var Fa=n=>n.stop(),hi=n=>n.getTracks().forEach(Fa),ja=n=>n.getVideoTracks().forEach(Fa);function Ki(n,r){return c(this,null,function*(){try{let e=typeof r.width=="number"?r.width:void 0,t=typeof r.height=="number"?r.height:void 0;yield n.applyConstraints(oe(oe(oe({},r),e&&{width:{max:e,ideal:e}}),t&&{height:{max:t,ideal:t}}))}catch(e){d.warn("setVideoConstraints failed",e)}})}var $i=class extends se{constructor(){super(...arguments);this.FPS_LIMITS=[13,20,Math.max(p.videoFrameRate,25)];this.THRESHOLD=.8;this.HISTORY_LENGTH=10;this._fpsMeterUnsubscribe=null;this._fpsHistory={cursor:0,arr:[]};this._fpsLimitCursor=this.FPS_LIMITS.length-1}get fpsLimit(){return this.FPS_LIMITS[this._fpsLimitCursor]}watch(e){this._cleanup();try{e&&(this._assertsVideoEffect(e),this._fpsMeterUnsubscribe=e.addFpsMeterListener(this._handleFpsMeter.bind(this)))}catch(t){d.warn("VideoEffectsFpsLimiter error",t)}}_handleFpsMeter(e){if(this._fpsHistory.arr[this._fpsHistory.cursor]=e,this._fpsHistory.cursor=(this._fpsHistory.cursor+1)%this.HISTORY_LENGTH,this._fpsHistory.arr.length===this.HISTORY_LENGTH&&this._fpsLimitCursor){let t=this._fpsHistory.arr.reduce((a,o)=>a+o,0)/this.HISTORY_LENGTH,i=this.FPS_LIMITS[this._fpsLimitCursor];t<i*this.THRESHOLD&&(this._fpsLimitCursor=Math.max(0,this._fpsLimitCursor-1)),i!==this.fpsLimit&&this._triggerEvent("fps-limit",this.fpsLimit)}}_assertsVideoEffect(e){if(!("addFpsMeterListener"in e))throw new Error("Outdated VideoEffect version")}addEventListener(e,t){return super.addEventListener(e,t)}_cleanup(){var e;(e=this._fpsMeterUnsubscribe)==null||e.call(this),this._fpsMeterUnsubscribe=null}destroy(){this._cleanup(),super.unsubscribe()}};var Ge=(i=>(i.audio="audio",i.video="video",i.screen="screen",i.audioshare="audioshare",i))(Ge||{});var qi=class extends se{constructor(){super();this._stream=null;this._screenTrack=null;this._audioShareTrack=null;this._sendVideoTrack=null;this._cameraVideoTrack=null;this._micAudioTrack=null;this._audioEffectsTrack=null;this._mediaSettings=Re();this._videoStatusOnScreenCapturingEnabled=!1;this._effect=null;this._audioEffectParams=null;this._animojiEnabled=!1;this._initDeviceChangeListener(),p.audioShare&&(this._audioShareTrack=this.getSilentAudioShareTrack()),p.enableVideoEffectsFpsDegradation&&(this._videoEffectsFpsLimiter=new $i,this._videoEffectsFpsLimiter.addEventListener("fps-limit",this.handleVideoEffectsLowFps.bind(this)))}request(){return c(this,arguments,function*(e=[ue.AUDIO],t=!0){var s,l,u;if(this._stream)return;let i=e.includes(ue.VIDEO),a=e.includes(ue.AUDIO),o=e.includes(ue.ANIMOJI);if(!A.isBrowserSupported())throw new q(ce.UNSUPPORTED);try{this._stream=yield A.getUserMedia(i,a,t),(s=this._cameraVideoTrack)==null||s.stop(),this._cameraVideoTrack=this._stream.getVideoTracks()[0],(l=this._micAudioTrack)==null||l.stop(),this._micAudioTrack=this._stream.getAudioTracks()[0],(u=this._audioEffectsTrack)==null||u.stop(),this._mediaSettings.isVideoEnabled=i&&this._stream.getVideoTracks().filter(m=>m.enabled).length>0||!1,this._mediaSettings.isAudioEnabled=a&&this._stream.getAudioTracks().filter(m=>m.enabled).length>0||!1,this._mediaSettings.isAnimojiEnabled=o&&!this._mediaSettings.isVideoEnabled||!1,this._animojiEnabled=o,this._triggerEvent("SOURCE_READY")}catch(m){throw new q(m)}})}getStream(){return this._stream}getScreenTrack(){return this._screenTrack}getSendVideoTrack(e=!1){return this._sendVideoTrack&&!e?this._sendVideoTrack:this._stream?this._stream.getVideoTracks()[0]:null}getSendAudioTrack(){var t;return((t=this._stream)==null?void 0:t.getAudioTracks().find(i=>!i.contentHint))||null}get isAnimojiRequested(){return this._animojiEnabled&&!this._mediaSettings.isVideoEnabled}addTrackToPeerConnection(e,t,i){let a=this.getStream(),o=this.getSendAudioTrack(),s=this.getSendVideoTrack(i);if(!a||!o&&!s&&!t)throw new Error("No local stream found");o&&!t&&e.addTrack(o,a),s&&!t&&e.addTrack(s,a)}getMediaSettings(){return this._mediaSettings}changeDevice(e){return c(this,null,function*(){switch(e){case"videoinput":if(this._mediaSettings.isVideoEnabled)return this._changeVideoInput();break;case"audioinput":if(this._mediaSettings.isAudioEnabled)return this._changeAudioInput();break;default:return Promise.reject(ce.UNKNOWN)}})}stopVideoTrack(){var e;this._mediaSettings.isVideoEnabled&&(this._stopEffect(),this._stream&&ja(this._stream),(e=this._cameraVideoTrack)==null||e.stop())}setVideoStream(e,t){return c(this,null,function*(){return t?this._changeScreen(!1,!1,e):this._changeVideoInput(e)})}_initDeviceChangeListener(){!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices||!navigator.mediaDevices.addEventListener||(this._onDeviceChange=e=>c(this,null,function*(){var s,l;if(!this._stream)return;let t=A.getSavedMicrophone(),i=A.getSavedCamera(),a=this._mediaSettings.isAudioEnabled&&(t==null?void 0:t.groupId)!==((s=e.microphone)==null?void 0:s.groupId),o=this._mediaSettings.isVideoEnabled&&(i==null?void 0:i.groupId)!==((l=e.camera)==null?void 0:l.groupId);try{a&&(yield this._changeAudioInput()),o&&(yield this._changeVideoInput())}catch(u){}}),A.addEventListener("devicechange",this._onDeviceChange))}_destroyDeviceChangeListener(){this._onDeviceChange&&A.removeEventListener("devicechange",this._onDeviceChange)}_changeVideoInput(e){return c(this,null,function*(){var t;try{let i=e?"stream":"video",a=e||(yield A._getUserVideo(!!this._effect,this._frameRate));if((t=this._cameraVideoTrack)==null||t.stop(),this._cameraVideoTrack=a.getVideoTracks()[0],!this._stream)hi(a);else{p.consumerScreenTrack||(yield this._disableScreenCapture());let o=yield this._setEffect(this._effect,this._cameraVideoTrack);P.log(R.DEVICE_CHANGED,i),d.log("Video stream changed"),yield this._replaceLocalTrack(o),this._mediaSettings.isVideoEnabled=!0,this._triggerEvent("SOURCE_CHANGED",{kind:"video"})}}catch(i){throw P.log(R.ERROR,"change_video"),d.warn("Camera change failed",i),i}})}setAudioStream(e){return c(this,null,function*(){return this._changeAudioInput(e)})}_changeAudioInput(e=null){return c(this,null,function*(){var t;try{let i=e||(yield A.getUserAudio());if((t=this._micAudioTrack)==null||t.stop(),this._micAudioTrack=i.getAudioTracks()[0],!this._stream)hi(i);else{let a=yield this._applyAudioEffect();P.log(R.DEVICE_CHANGED,"audio"),d.log("Audio stream changed",a),yield this._replaceLocalTrack(a),this._mediaSettings.isAudioEnabled=!0,this._triggerEvent("SOURCE_CHANGED",{kind:"audio"})}}catch(i){throw P.log(R.ERROR,"change_audio"),d.error("Microphone change failed",i),i}})}_changeScreen(e,t,i){return c(this,null,function*(){try{if(i=i||(yield A.getScreenMedia(e,t)),!this._stream)hi(i);else{let a=i.getVideoTracks()[0];if(a.addEventListener("ended",()=>{this._mediaSettings.isScreenSharingEnabled&&this.disableScreenCapturing()},!1),p.consumerScreenTrack||this._stopEffect(),P.log(R.DEVICE_CHANGED,"screen"),d.log("Screen capturing started"),this._screenTrack=a,this._mediaSettings.isScreenSharingEnabled=!0,this._mediaSettings.isFastScreenSharingEnabled=e,p.consumerScreenTrack||(this._videoStatusOnScreenCapturingEnabled=this._mediaSettings.isVideoEnabled,this._mediaSettings.isVideoEnabled=!0,this._sendVideoTrack=p.consumerScreenDataChannel?A.getBlackMediaTrack(p.videoMinWidth,p.videoMinHeight):a,yield this._replaceLocalTrack(a,this._sendVideoTrack)),i.getAudioTracks().length>0){let o=i.getAudioTracks()[0];o.contentHint="music",this._audioShareTrack=o,yield this._replaceLocalTrack(o),this._mediaSettings.isAudioSharingEnabled=!0}t&&!this._mediaSettings.isAudioSharingEnabled&&d.debug("Audio share requested but not captured"),this._triggerEvent("SCREEN_STATUS",{track:a}),this._triggerEvent("SOURCE_CHANGED",{kind:"screen"})}}catch(a){throw P.log(R.ERROR,"screen"),d.warn("Screen capturing failed",a),a}})}_disableScreenCapture(){return c(this,null,function*(){this._sendVideoTrack&&(this._sendVideoTrack.stop(),this._sendVideoTrack=null),this._screenTrack&&(this._screenTrack.stop(),this._screenTrack=null),yield this.stopAudioShareTrack(),this._mediaSettings.isScreenSharingEnabled&&(this._mediaSettings.isScreenSharingEnabled=!1,this._mediaSettings.isFastScreenSharingEnabled=!1,this._triggerEvent("SCREEN_STATUS",{track:null}),this._triggerEvent("SOURCE_CHANGED",{kind:"screen"}))})}disableAudioShare(){return c(this,null,function*(){yield this.stopAudioShareTrack(),this._triggerEvent("SCREEN_STATUS",{track:null}),this._triggerEvent("SOURCE_CHANGED",{kind:"audioshare"})})}stopAudioShareTrack(){return c(this,null,function*(){if(this._audioShareTrack){this._audioShareTrack.stop();let e=this.getSilentAudioShareTrack();yield this._replaceLocalTrack(e),this._mediaSettings.isAudioSharingEnabled=!1}})}_applyAudioEffect(){return c(this,null,function*(){var t;if(!p.audioEffects||!this._audioEffectParams)return(t=p.audioEffects)==null||t.pause(),this._micAudioTrack;p.audioEffects.isInitialized||(yield p.audioEffects.init()),p.audioEffects.resume(),p.audioEffects.setEffects(this._audioEffectParams.effects,this._audioEffectParams.isPreset),p.audioEffects.setSource(this._micAudioTrack);let e=p.audioEffects.outputStream.getAudioTracks()[0];return(!this._audioEffectsTrack||this._audioEffectsTrack.id!==e.id)&&(this._audioEffectsTrack=e),this._audioEffectsTrack})}getSilentAudioShareTrack(){let e=A.getSilentMediaTrack();return e.contentHint="music",e.stop(),e}_replaceLocalTrack(e,t){return c(this,null,function*(){var a,o;if(!this._stream)return;let i=this._stream.getTracks().find(s=>s.kind===e.kind&&s.contentHint===e.contentHint);(i==null?void 0:i.id)!==e.id&&(i?(i!==this._audioEffectsTrack&&i.stop(),(a=this._stream)==null||a.removeTrack(i),(o=this._stream)==null||o.addTrack(e),this._triggerEvent("TRACK_REPLACED",e,t)):(this._stream.addTrack(e),this._triggerEvent("TRACK_REPLACED",e,t)))})}_setEffect(e,t){return c(this,null,function*(){var i;if((i=this._videoEffectsFpsLimiter)==null||i.watch(p.videoEffects),!p.videoEffects)return t;try{return p.videoEffects.setEffect(e,t)}catch(a){return d.warn("Video effect failed",a),t}})}_stopEffect(){if(p.videoEffects)try{p.videoEffects.stopEffect()}catch(e){d.warn("Video effect failed",e)}}destroy(){var t,i,a,o;this._destroyDeviceChangeListener(),p.videoEffects&&(this._effect=null,p.videoEffects.destroy()),p.audioEffects&&p.audioEffects.destroy(),this._stream&&(hi(this._stream),this._stream=null),(t=this._cameraVideoTrack)==null||t.stop(),(i=this._micAudioTrack)==null||i.stop(),(a=this._audioEffectsTrack)==null||a.stop(),this._disableScreenCapture();let e=A.getAudioContext();e==null||e.suspend().catch(s=>d.error(s)),(o=this._videoEffectsFpsLimiter)==null||o.destroy()}toggleScreenCapturing(e){return c(this,null,function*(){if(e.captureScreen){yield this._changeScreen(e.fastScreenSharing,e.captureAudio);return}return p.consumerScreenTrack?this._disableScreenCapture():(e.captureAudio||(yield this.disableAudioShare()),this._videoStatusOnScreenCapturingEnabled?this._changeVideoInput():this.toggleVideo(!1))})}disableScreenCapturing(){return c(this,null,function*(){return this.toggleScreenCapturing({captureScreen:!1,fastScreenSharing:!1,captureAudio:!1})})}toggleVideo(e){return c(this,null,function*(){var i;if(!this._stream)return;p.consumerScreenTrack||(yield this._disableScreenCapture()),(i=this._cameraVideoTrack)==null||i.stop();let t;if(e){let a=yield A._getUserVideo(!!this._effect,this._frameRate);this._cameraVideoTrack=a.getVideoTracks()[0],t=yield this._setEffect(this._effect,this._cameraVideoTrack)}else t=A.getBlackMediaTrack(p.videoMinWidth,p.videoMinHeight),this._stopEffect();if(this._mediaSettings.isVideoEnabled=e,yield this._replaceLocalTrack(t),this._animojiEnabled){this._triggerEvent("ANIMOJI_STATUS",!e);return}this._triggerEvent("SOURCE_CHANGED",{kind:"video"})})}toggleAudio(e){return c(this,null,function*(){var i,a;if(!this._stream)return;(i=this._micAudioTrack)==null||i.stop();let t;if(e){let o=yield A.getUserAudio();this._micAudioTrack=o.getAudioTracks()[0],t=yield this._applyAudioEffect()}else(a=p.audioEffects)==null||a.pause(),t=A.getSilentMediaTrack();yield this._replaceLocalTrack(t),this._mediaSettings.isAudioEnabled=e,this._triggerEvent("SOURCE_CHANGED",{kind:"audio"})})}toggleAnimojiCapturing(e){this._animojiEnabled=e,this._mediaSettings.isVideoEnabled||this._triggerEvent("ANIMOJI_STATUS",e)}onAnimojiSender(e){this._mediaSettings.isAnimojiEnabled=e,this._triggerEvent("SOURCE_CHANGED",{kind:"video"})}setResolution(i){return c(this,arguments,function*({video:e,effect:t}){if(!p.consumerScreenTrack&&this._mediaSettings.isScreenSharingEnabled||!this._mediaSettings.isVideoEnabled)return;if(!this._stream)throw new Error("Local stream not found");if(!this._cameraVideoTrack)throw new Error("Local video track not found");let a=this._effect&&t||e;yield this._applyVideoConstraints(this._cameraVideoTrack,a)})}getCameraVideoTrack(){return this._cameraVideoTrack}updateNoiseSuppression(){return c(this,null,function*(){if(!this._stream||!this._mediaSettings.isAudioEnabled)return;let e=this._stream.getAudioTracks().find(t=>!t.contentHint);if(!e)throw new Error("Local audio track not found");if(e.enabled)return e.applyConstraints({noiseSuppression:p.noiseSuppression})})}videoEffect(e){return c(this,null,function*(){if(!p.videoEffects)throw new Error("Video Effects library is not set");if(!p.consumerScreenTrack&&this._mediaSettings.isScreenSharingEnabled)throw new Error("Can't apply effect to screensharing");if(P.log(R.DEVICE_CHANGED,`effect_${(e==null?void 0:e.effect)||"none"}`),!this._mediaSettings.isVideoEnabled){this._effect=e;return}if(this._stream&&e!==this._effect&&this._cameraVideoTrack){let t=this._effect;this._effect=e;try{let i=this._cameraVideoTrack.clone(),a=new MediaStream([i]);yield this._applyVideoConstraints(i),yield this._changeVideoInput(a)}catch(i){this._effect=t;let a=this._cameraVideoTrack.clone(),o=new MediaStream([a]);throw yield this._changeVideoInput(o),i}}})}audioEffect(e){return c(this,null,function*(){var t;if(!p.audioEffects)throw new Error("Audio Effects library is not set");if(!this._mediaSettings.isAudioEnabled){this._audioEffectParams=e;return}if(this._stream&&(!e&&this._audioEffectParams||e&&!this._audioEffectParams||!E.isArraysEquals((e==null?void 0:e.effects)||[],((t=this._audioEffectParams)==null?void 0:t.effects)||[]))&&this._micAudioTrack){let i=this._audioEffectParams;this._audioEffectParams=e;try{let a=this._micAudioTrack.clone(),o=new MediaStream([a]);yield this._changeAudioInput(o)}catch(a){this._audioEffectParams=i;let o=this._micAudioTrack.clone(),s=new MediaStream([o]);throw yield this._changeAudioInput(s),a}}})}getAudioShareTrack(){return this._audioShareTrack}handleVideoEffectsLowFps(e){this._mediaSettings.isVideoEnabled&&this._cameraVideoTrack&&e<p.videoFrameRate&&this._applyVideoConstraints(this._cameraVideoTrack).catch(t=>{d.warn("MediaSource handleVideoEffectsLowFps error",t)})}get _frameRate(){var t,i;let e=(i=(t=this._videoEffectsFpsLimiter)==null?void 0:t.fpsLimit)!=null?i:p.videoFrameRate;return this._effect?Math.min(e,p.videoFrameRate):void 0}_applyVideoConstraints(e,t){return c(this,null,function*(){yield Ki(e,oe(oe({width:this._effect?p.videoEffectMaxWidth:p.videoMaxWidth,height:this._effect?p.videoEffectMaxHeight:p.videoMaxHeight},this._frameRate&&{frameRate:{ideal:this._frameRate}}),t))})}};var _i=class{static isSupported(){return A.browserName()!=="Firefox"&&"permissions"in navigator&&"PermissionStatus"in window}init(r){return c(this,null,function*(){try{let[e,t]=yield Promise.all([navigator.permissions.query({name:"camera"}),navigator.permissions.query({name:"microphone"})]);this._cameraPermissionStatus=e,this._microphonePermissionStatus=t,this._listener=r,this._cameraPermissionStatus.onchange=i=>this.handlePermissionChange(i),this._microphonePermissionStatus.onchange=i=>this.handlePermissionChange(i)}catch(e){d.warn("NavigatorPermissions init error",e)}})}handlePermissionChange(r){let e=r.target;if(e instanceof PermissionStatus){let{name:t,state:i}=e;switch(t){case"audio_capture":this._listener("microphone",i);break;case"video_capture":this._listener("camera",i);break}}}getPermissionState(r){let e=null;switch(r){case"camera":e=this._cameraPermissionStatus.state;break;case"microphone":e=this._microphonePermissionStatus.state;break}return e}};var Lr=(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))(Lr||{});function H(n,...r){let e=p.get(n);typeof e=="function"&&setTimeout(e,0,...r)}function _e(n,r,...e){if(p.filterObservers){if(Array.isArray(r)){if(r=r.filter(t=>!t.observer),!r.length)return}else if(r.observer)return}H(n,r,...e)}function Ce(n){return Object.assign({},n)}function bt(n){return n.slice()}var xr;(rc=>{function n(S,D){H("onLocalStream",S,Ce(D))}rc.onLocalStream=n;function r(S,D){H("onScreenStream",S,Ce(D))}rc.onScreenStream=r;function e(S,D){H("onVmojiStream",S,Ce(D))}rc.onVmojiStream=e;function t(S){H("onVmojiError",S)}rc.onVmojiError=t;function i(S,D){H("onLocalStreamUpdate",Ce(S),D)}rc.onLocalStreamUpdate=i;function a(S){d.debug("Local status:",S),H("onLocalStatus",S)}rc.onLocalStatus=a;function o(S,D){_e("onRemoteStream",S,D)}rc.onRemoteStream=o;function s(S,D){_e("onRemoteLive",S,D)}rc.onRemoteLive=s;function l(S,D){_e("onLocalLive",S,D)}rc.onLocalLive=l;function u(S,D){_e("onRemoteLiveUpdate",S,D)}rc.onRemoteLiveUpdate=u;function m(S,D){_e("onLocalLiveUpdate",S,D)}rc.onLocalLiveUpdate=m;function h(S,D){_e("onRemoteScreenStream",S,D)}rc.onRemoteScreenStream=h;function T(S,D){_e("onRemoteVmojiStream",S,D)}rc.onRemoteVmojiStream=T;function v(S,D,J){_e("onRemoteStreamSuspended",S,D,J)}rc.onRemoteStreamSuspended=v;function b(S,D,J,Oe,ft){_e("onConversation",S,Ce(D),Ce(J),Oe,ft)}rc.onConversation=b;function L(S){S&&H("onConversationParticipantListChunk",S)}rc.onConversationParticipantListChunk=L;function O(S,D,J){_e("onRemoteMediaSettings",S,Ce(D),J)}rc.onRemoteMediaSettings=O;function G(S,D){_e("onLocalMediaSettings",S,Ce(D))}rc.onLocalMediaSettings=G;function $(S,D,J){_e("onRemoteSharedMovieInfo",S,Ce(D),J)}rc.onRemoteSharedMovieInfo=$;function le(S,D,J){_e("onRemoteSharedMovieStoppedInfo",S,Ce(D),J)}rc.onRemoteSharedMovieStoppedInfo=le;function ae(S,D,J){_e("onLocalSharedMovieInfo",S,Ce(D),J)}rc.onLocalSharedMovieInfo=ae;function z(S,D,J){_e("onLocalSharedMovieStoppedInfo",S,Ce(D),J)}rc.onLocalSharedMovieStoppedInfo=z;function he(S,D,J){_e("onRemoteSharedUrl",S,D,J)}rc.onRemoteSharedUrl=he;function Be(S,D){_e("onParticipantAdded",S,D)}rc.onParticipantAdded=Be;function xi(S,D){_e("onParticipantJoined",S,D)}rc.onParticipantJoined=xi;function ri(S){H("onLocalParticipantState",Ce(S))}rc.onLocalParticipantState=ri;function re(S,D,J){_e("onRemoteParticipantState",S,Ce(D),J)}rc.onRemoteParticipantState=re;function ai(S,D){H("onRemoteParticipantsState",S,D)}rc.onRemoteParticipantsState=ai;function na(S,D,J=null){d.debug("Remote status:",D,S),_e("onRemoteStatus",S,D,J)}rc.onRemoteStatus=na;function oa(){H("onPermissionsRequested")}rc.onPermissionsRequested=oa;function sa(S,D){H("onPermissionsError",S,D)}rc.onPermissionsError=sa;function ca(S,D){_e("onRemoteRemoved",S,D)}rc.onRemoteRemoved=ca;function da(S,D,J){H("onCallState",S,D,Ce(J))}rc.onCallState=da;function Li(S,D){H("onDeviceSwitched",S,D)}rc.onDeviceSwitched=Li;function Tr(S,D,J,Oe=!1,ft=!1,Rr=null,Cr=null,Kn,ga,$n=null){let qn=ga?bt(ga):void 0;H("onMuteStates",Ce(S),bt(D),bt(J),Oe,ft,Rr,Cr,Kn,qn,$n)}rc.onMuteStates=Tr;function la(S,D,J=!1){_e("onRolesChanged",S,bt(D),J)}rc.onRolesChanged=la;function pa(S,D=!1){H("onLocalRolesChanged",bt(S),D)}rc.onLocalRolesChanged=pa;function ua(S,D,J,Oe){_e("onPinnedParticipant",S,D,J,Oe)}rc.onPinnedParticipant=ua;function Y(S,D){H("onLocalPin",S,D)}rc.onLocalPin=Y;function ma(S){H("onOptionsChanged",bt(S))}rc.onOptionsChanged=ma;function ha(){H("onCallAccepted")}rc.onCallAccepted=ha;function ge(S){_e("onAcceptedCall",S)}rc.onAcceptedCall=ge;function j(){H("onRateNeeded")}rc.onRateNeeded=j;function ee(S){_e("onSpeakerChanged",S)}rc.onSpeakerChanged=ee;function pe(S){H("onVolumesDetected",bt(S))}rc.onVolumesDetected=pe;function fe(S,D){H("onLocalVolume",S,D)}rc.onLocalVolume=fe;function et(S,D){H("onJoinStatus",S,D)}rc.onJoinStatus=et;function je(S,D){H("onHangup",S,D)}rc.onHangup=je;function _(S){H("onMultipartyChatCreated",Ce(S))}rc.onMultipartyChatCreated=_;function C(){H("onDeviceChange")}rc.onDeviceChange=C;function y(S){H("onFingerprintChange",S)}rc.onFingerprintChange=y;function M(){H("onTokenExpired")}rc.onTokenExpired=M;function g(S,D,J=!1){H("onChatMessage",S,D,J)}rc.onChatMessage=g;function w(S,D,J=!1){H("onCustomData",S,D,J)}rc.onCustomData=w;function K(S,D,J,Oe,ft,Rr,Cr=null){H("onRecordStarted",S,D,J,Oe,ft,Rr,Cr)}rc.onRecordStarted=K;function F(S=null){H("onRecordStopped",S)}rc.onRecordStopped=F;function te(S){H("onLocalNetworkStatusChanged",S)}rc.onLocalNetworkStatusChanged=te;function ve(S){H("onNetworkStatusChanged",S)}rc.onNetworkStatusChanged=ve;function N(S,...D){H("onDebugMessage",S,...D)}rc.onDebugMessage=N;function Ie(S,D){let J=Object.assign({},S,{memory:D});H("onStatistics",J)}rc.onStatistics=Ie;function Se(){H("onAutoplayError")}rc.onAutoplayError=Se;function Ee(S,D,J,Oe,ft){H("onChatRoomUpdated",S,D,J,Oe,ft)}rc.onChatRoomUpdated=Ee;function De(S){H("onPromoted",S)}rc.onPromoted=De;function qe(S){H("onRemoteMixedAudioStream",S)}rc.onRemoteMixedAudioStream=qe;function Te(S){H("onJoinLinkChanged",S)}rc.onJoinLinkChanged=Te;function tt(S){H("onRoomsUpdated",S)}rc.onRoomsUpdated=tt;function Ni(S,D,J,Oe){H("onRoomUpdated",S,D,J,Oe)}rc.onRoomUpdated=Ni;function Ui(S){H("onRoomParticipantsUpdated",S)}rc.onRoomParticipantsUpdated=Ui;function ze(S){H("onRoomSwitched",S)}rc.onRoomSwitched=ze;function ni(S){H("onRoomStart",S)}rc.onRoomStart=ni;function _a(S,D=null){H("onFeedback",S,D)}rc.onFeedback=_a;function $s(S){H("onFeaturesPerRoleChanged",S)}rc.onFeaturesPerRoleChanged=$s;function qs(S){H("onParticipantVmojiUpdate",S)}rc.onParticipantVmojiUpdate=qs;function zs(S,D){H("onAsrSet",S,D)}rc.onAsrSet=zs;function Js(S,D,J){H("onAsrStarted",S,D,J)}rc.onAsrStarted=Js;function Ys(S){H("onAsrStopped",S)}rc.onAsrStopped=Ys;function Qs(S,D,J,Oe){H("onAsrTranscription",S,D,J,Oe)}rc.onAsrTranscription=Qs;function Xs(S,D){H("onParticipantIdChanged",S,D)}rc.onParticipantIdChanged=Xs;function Zs(S){H("onVideoSuspendSuggest",S)}rc.onVideoSuspendSuggest=Zs;function ec(S){H("onSignalingMessage",typeof S=="string"?S:Ce(S))}rc.onSignalingMessage=ec;function tc(S){H("onPromotionApproved",S)}rc.onPromotionApproved=tc;function ic(){H("onPeerRegistered")}rc.onPeerRegistered=ic})(xr||(xr={}));var I=xr;var Ur="_okcls_",Kt=(()=>{try{let n=Date.now().toString(),r=window.localStorage,e=!1;return r.setItem(n,n),e=r.getItem(n)===n,r.removeItem(n),e?r:null}catch(n){return null}})();function Oo(n){let r=Kt?Kt.getItem(Ur+n):null;if(r===null)return null;try{return JSON.parse(r)}catch(e){return null}}function xo(n,r){try{Kt&&Kt.setItem(Ur+n,JSON.stringify(r))}catch(e){}}function Lo(n){Kt&&Kt.removeItem(Ur+n)}var Nr;(t=>{function n(i){return Oo(i)||null}t.get=n;function r(i,a){xo(i,a)}t.set=r;function e(i){Lo(i)}t.remove=e})(Nr||(Nr={}));var lt=Nr;var Mt=null,$t=null,Jt=null,er=[],tr=[],Zi=[],Ne=null,Ue=null,zt=null,ir=!1,rr=!1,zi,qt,Ji,Br=null,Vr="",Yi=[],Qi=null,Ha=navigator.appVersion,No=navigator.appName,Le=navigator.userAgent,rt={},yt=(e=>(e.USER="user",e.ENVIRONMENT="environment",e))(yt||{});(r=>{function n(e){return Object.values(r).includes(e)}r.contains=n})(yt||(yt={}));var Dt=class{constructor(r,e=!1,t=p.videoMaxWidth,i=p.videoMaxHeight,a=p.videoFrameRate){this.isVideoRequested=()=>this.needVideo;this.supportedConstraints=navigator.mediaDevices.getSupportedConstraints();let o=!1;if(r){o={noiseSuppression:p.noiseSuppression,echoCancellation:!0,autoGainControl:!0};let l=Pe.getMicrophones(),u,m;if(Ue&&(m=Ue.groupId,u=Ue.deviceId),typeof r=="string"){let h=l.find(T=>T.deviceId===r);m=h==null?void 0:h.groupId,u=r}else if(!Ue&&Pe.os()==="MacOS"&&l.find(h=>h.label.includes("iPhone"))){let h=l.find(T=>!T.label.includes("Virtual")&&!T.label.includes("iPhone"));h&&(m=h.groupId,u=h.deviceId)}m&&this.supportedConstraints.groupId?o.groupId={exact:m}:u&&(o.deviceId={exact:u})}let s=!1;if(e){s={width:{min:p.videoMinWidth,max:t,ideal:t},height:{min:p.videoMinHeight,max:i,ideal:i},aspectRatio:{ideal:p.videoAspectRatio},frameRate:{ideal:a}};let l=Pe.getCameras(),u,m;if(Ne&&(m=Ne.groupId,u=Ne.deviceId),typeof e=="string"){let h=l.find(T=>T.deviceId===e);m=h==null?void 0:h.groupId,u=e}else if(!Ne&&Pe.os()==="MacOS"&&l.find(h=>h.label.includes("iPhone"))){let h=l.find(T=>!T.label.includes("Virtual")&&!T.label.includes("iPhone"));h&&(m=h.groupId,u=h.deviceId)}m&&this.supportedConstraints.groupId?s.groupId={exact:m}:u&&(s.deviceId={exact:u}),p.videoFacingMode&&(s.facingMode={ideal:p.videoFacingMode},delete s.deviceId,delete s.groupId)}this.audio=o,this.video=s,this.needVideo=!!s,this.lastSimplifyWasReached=!1}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.groupId||this.video.facingMode)&&(delete this.video.deviceId,delete this.video.groupId,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||this.audio.groupId)&&(delete this.audio.deviceId,delete this.audio.groupId)),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.audio&&!this.video&&(this.lastSimplifyWasReached=!0,this.audio=!this.isVideoRequested(),this.video=this.isVideoRequested()),this}canSimplify(){let r=typeof this.video=="object"&&(this.video.width||this.video.height||this.video.aspectRatio||this.video.frameRate||this.video.facingMode||this.video.deviceId||this.video.groupId)||this.video;return!!(typeof this.audio=="object"&&(this.audio.deviceId||this.audio.groupId||this.audio.noiseSuppression||this.audio.echoCancellation||this.audio.autoGainControl)||this.audio||r)&&!this.lastSimplifyWasReached}isVideo(){return!!this.video}isAudio(){return!!this.audio}},Fr=class extends Dt{constructor(r,e,t,i){if(super(!1,!0),this.captureController="CaptureController"in window?new CaptureController:null,typeof this.video=="object"?(delete this.video.deviceId,delete this.video.groupId,delete this.video.aspectRatio,delete this.video.frameRate,delete this.video.facingMode):this.video={},this.video.cursor="motion",this.video.width=r,this.video.height=e,this.video.frameRate=t,this.video.displaySurface=p.displaySurface,Pe.browserName()==="Safari"){let a=Number(Pe.browserVersion());a===16?(this.video.width={max:r},this.video.height={max:e}):a===17&&(delete this.video.width,delete this.video.height)}i&&(this.audio={noiseSuppression:!1,echoCancellation:!1,autoGainControl:!1})}getNative(){return Object.assign(super.getNative(),{systemAudio:"exclude",controller:this.captureController})}},At=class At{constructor(){this._lockId=Math.round(Math.random()*99998)+1}busy(){if(At._lockId)throw P.log(R.ERROR,"change_device"),d.warn("Device change failed: MediaSource is busy"),new Error("MediaSource is busy");At._lockId=this._lockId}free(){At._lockId===this._lockId&&(At._lockId=0)}};At._lockId=0;var ar=At;function Ga(){return c(this,null,function*(){rr=!1,ir=!1,Mt=null;let n={camera:Pe.getSavedCamera(),microphone:Pe.getSavedMicrophone(),output:Pe.getSavedOutput()};yield jr(),Uo("devicechange",n),I.onDeviceChange()})}function Uo(n,...r){if(rt[n])for(let e of rt[n])e(...r)}function jr(){return c(this,null,function*(){return Mt||(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices?[]:(!$t&&navigator.mediaDevices.addEventListener&&($t=E.debounce(Ga,p.enumerateDevicesDelay),navigator.mediaDevices.addEventListener("devicechange",$t)),!Jt&&_i.isSupported()&&(Jt=new _i,yield Jt.init((n,r)=>{switch(r){case"denied":case"prompt":$t==null||$t();break}})),Mt=navigator.mediaDevices.enumerateDevices().then(n=>{var i,a,o;er=n.filter(s=>s.kind==="videoinput"?(s.label&&(ir=!0),!0):!1),tr=n.filter(s=>s.kind==="audioinput"?(s.label?rr=!0:Pe.isMobile()&&Pe.browserName()==="Firefox"&&(rr=ir),!0):!1),Zi=n.filter(s=>s.kind==="audiooutput");let r=(i=Ne==null?void 0:Ne.deviceId)!=null?i:lt.get("videoinput"),e=(a=Ue==null?void 0:Ue.deviceId)!=null?a:lt.get("audioinput"),t=(o=zt==null?void 0:zt.deviceId)!=null?o:lt.get("audiooutput");return Ne=er.find(s=>s.deviceId===r)||null,Ue=tr.find(s=>s.deviceId===e)||null,zt=Zi.find(s=>s.deviceId===t)||Zi[0]||null,Mt=Promise.resolve(n),n}).catch(()=>(Mt=null,[]))))})}function Bo(n){if(Ne&&Ue)return;let r=(e,t)=>{var a;let i=(a=t.getSettings())==null?void 0:a.deviceId;return e.find(o=>o.deviceId===i||o.label===t.label)||null};n==null||n.getTracks().forEach(e=>{!Ue&&e.kind==="audio"?Ue=r(Pe.getMicrophones(),e):!Ne&&e.kind==="video"&&(Ne=r(Pe.getCameras(),e))})}function gi(n,r){return c(this,null,function*(){d.debug("Try to get media",JSON.parse(JSON.stringify(n.getNative())));let e=(!n.isVideo()||Pe.hasCameraPermission())&&(!n.isAudio()||Pe.hasMicrophonePermission());!e&&!r&&I.onPermissionsRequested();let t=new ar;try{t.busy();let i=yield navigator.mediaDevices.getUserMedia(n.getNative());return t.free(),e||(yield Ga()),Bo(i),i}catch(i){switch(t.free(),d.error("getUserMedia error",i),i.name){case"PermissionDeniedError":case"PermissionDismissedError":case"NotAllowedError":case"SecurityError":case"DOMException":case"NotFoundError":r=n.isVideoRequested()?ce.CAMERA_PERMISSION:ce.MIC_PERMISSION;break;case"OverconstrainedError":r=ce.OVERCONSTRAINED;break;case"TypeError":r=ce.UNKNOWN;break;case"AbortError":case"NotReadableError":r=n.isVideoRequested()?ce.CAMERA_ACCESS:ce.MIC_ACCESS;break;case"Error":if(i.message==="MediaSource is busy"){r=n.isVideoRequested()?ce.CAMERA_ACCESS:ce.MIC_ACCESS;break}}if(n.canSimplify())return gi(n.simplify(),r);let a=r||ce.UNKNOWN;throw I.onPermissionsError(a,i),a}})}function Vo(n){return c(this,null,function*(){var e;d.debug("Try to get screen",JSON.parse(JSON.stringify(n.getNative())));let r=new ar;try{r.busy();let t=yield navigator.mediaDevices.getDisplayMedia(n.getNative()),i=t==null?void 0:t.getVideoTracks()[0];if(i){let a=(e=i.getSettings())==null?void 0:e.displaySurface;if(d.debug(`Got display media track: ${i.id} (${a})`),i.contentHint="text",n.captureController&&(a==="browser"||a==="window"))try{n.captureController.setFocusBehavior("no-focus-change")}catch(o){d.warn("Failed to set focus behavior",o)}}return t}catch(t){switch(t.name){case"PermissionDeniedError":case"NotAllowedError":case"SecurityError":throw ce.SCREEN_PERMISSION;default:throw ce.SCREEN_ACCESS}}finally{r.free()}})}function Xi(){return Yi.length||(Yi=(()=>{let n,r=!1,e=0,t="0",i=Le.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];if(/trident/i.test(i[1]))return n=/\brv[ :]+(\d+)/g.exec(Le),["IE",n&&n[1]||"Unknown",r,e,t];if(i[1]==="Safari"){if(n=Le.match(/\bEdge\/(\d+)/),n)return["Edge",n[1]||"Unknown",r,e,t];if(n=Le.match(/\bCriOS\/(\d+)/),n)return["Chrome",n[1],!0,Number(n[1]),t];if(n=Le.match(/\bFxiOS\/(\d+)/),n)return["Firefox",n[1],!1,e,t];if(n=Le.match(/\bYaBrowser\/(\d+)/),n)return["Yandex",n[1],!1,e,t];if(n=Le.match(/\bOPT\/(\d+)/),n)return["Opera",n[1],!1,e,t]}if(i[1]==="Chrome"){if(r=!0,e=Number(i[2]),n=Le.match(/\bOPR\/(\d+)/),n)return["Opera",n[1]||"Unknown",r,e,t];if(n=Le.match(/\bYaBrowser\/(\d+)/),n)return["Yandex",n[1]||"Unknown",r,e,t];if(n=Le.match(/\bSferum\/((\d+)(?:\.\d+)*)/),n)return["Sferum",n[1]||"Unknown",r,e,t];if(n=Le.match(/\bEdge?\/(\d+)/),n)return["Edge",n[1]||"Unknown",r,e,t];if(typeof window.opr!="undefined"&&/^(.+\.)?ok.ru$/.test(window.location.host))return["Opera","Hidden",r,e,t]}return n=Le.match(/version\/(\d+)(?:(?:\.)(\d+))?/i),n&&n[2]!==void 0&&(t=n[2]),[i[2]?i[1]:No,n&&n[1]||i[2]||Ha,r,e,t]})()),Yi}var Pe;(ge=>{function n(){return c(this,null,function*(){if(Mt)return;let j=()=>{ge.getSilentMediaTrack(),document.removeEventListener("click",j),document.removeEventListener("touchstart",j)};document.addEventListener("click",j),document.addEventListener("touchstart",j),yield jr()})}ge.init=n;function r(){return er}ge.getCameras=r;function e(){return tr}ge.getMicrophones=e;function t(){return Zi}ge.getOutput=t;function i(){return er.length>0}ge.hasCamera=i;function a(){return tr.length>0}ge.hasMicrophone=a;function o(){return Ne}ge.getSavedCamera=o;function s(){return Ue}ge.getSavedMicrophone=s;function l(){return zt}ge.getSavedOutput=l;function u(){return p.videoFacingMode}ge.getVideoFacingMode=u;function m(){return ir}ge.hasCameraPermission=m;function h(){return rr}ge.hasMicrophonePermission=h;function T(){var j;return(j=Jt==null?void 0:Jt.getPermissionState("microphone"))!=null?j:null}ge.getMicrophonePermissionState=T;function v(j=!1){return h()?i()&&j?m():!0:!1}ge.hasPermissions=v;function b(j=!1,ee=!0,pe=!0){return c(this,null,function*(){let fe=a()&&ee,et=i()&&j,je;if(!fe&&!et)je=new MediaStream;else try{je=yield gi(new Dt(fe,et))}catch(_){je=new MediaStream}return!je.getVideoTracks().length&&pe&&je.addTrack(ge.getBlackMediaTrack()),!je.getAudioTracks().length&&pe&&je.addTrack(ge.getSilentMediaTrack()),je})}ge.getUserMedia=b;function L(j,ee){return c(this,null,function*(){let pe=j?p.fastScreenShareWidth:window.screen.width,fe=j?p.fastScreenShareHeight:window.screen.height,et=p.getScreenFrameRate(j);return Vo(new Fr(pe,fe,et,ee))})}ge.getScreenMedia=L;function O(j=!1,ee){return c(this,null,function*(){let pe=j?p.videoEffectMaxWidth:p.videoMaxWidth,fe=j?p.videoEffectMaxHeight:p.videoMaxHeight;return gi(new Dt(!1,!0,pe,fe,ee))})}ge._getUserVideo=O;function G(j,ee){return c(this,null,function*(){let pe=(ee==null?void 0:ee.width)||p.videoMaxWidth,fe=(ee==null?void 0:ee.height)||p.videoMaxHeight;return gi(new Dt(!1,j||!0,pe,fe))})}ge.getUserVideo=G;function $(j){return c(this,null,function*(){return gi(new Dt(j||!0,!1))})}ge.getUserAudio=$;function le(j,ee){return c(this,null,function*(){let[pe]=j.getVideoTracks();if(!pe)throw new Error("Video track not found in stream");return Ki(pe,ee)})}ge.setResolution=le;function ae(j,ee){return c(this,null,function*(){let fe=(yield jr()).find(et=>et.kind===j&&et.deviceId===ee);return fe?(j==="videoinput"?Ne=fe:j==="audioinput"?Ue=fe:j==="audiooutput"&&(zt=fe),lt.set(j,ee),fe):null})}ge._saveDeviceId=ae;function z(){if(!Ji||Ji.readyState==="ended"){let j=ge.getAudioContext(),ee=j.createMediaStreamDestination(),pe=j.createGain();pe.gain.value=1e-5,pe.connect(ee),pe.connect(j.destination);let fe=j.createOscillator();fe.type="sine",fe.frequency.value=0,fe.connect(pe),fe.start(),Ji=ee.stream.getAudioTracks()[0]}return Object.assign(Ji.clone(),{enabled:!1})}ge.getSilentMediaTrack=z;function he(j=p.videoMinWidth,ee=p.videoMinHeight){qt||(qt=document.createElement("canvas")),qt.width=j,qt.height=ee;let pe=qt.getContext("2d");return pe.rect(0,0,j,ee),pe.fillStyle="black",pe.fill(),(!zi||zi.readyState==="ended")&&(zi=qt.captureStream(p.videoFrameRate).getVideoTracks()[0]),Object.assign(zi.clone(),{enabled:!1})}ge.getBlackMediaTrack=he;function Be(){if(Li()==="Edge"&&Number(Tr())<70)return!1;try{let j=window;return"mediaDevices"in j.navigator&&"getUserMedia"in j.navigator.mediaDevices&&j.RTCPeerConnection&&j.RTCIceCandidate&&j.RTCSessionDescription&&j.HTMLCanvasElement&&j.HTMLCanvasElement.prototype.captureStream&&j.RTCRtpSender&&j.RTCRtpSender.prototype.replaceTrack&&j.RTCRtpSender.prototype.getParameters&&"sendBeacon"in navigator&&!0||!1}catch(j){return!1}}ge.isBrowserSupported=Be;function xi(){return!!navigator.mediaDevices.getDisplayMedia}ge.isScreenCapturingSupported=xi;function ri(){let j=ge.browserName()==="Safari"&&ge.browserVersion()==="15"&&ge.browserSubVersion()==="1",ee=ge.browserName()==="Opera",pe=ge.browserName()==="Yandex";return j||ee||pe}ge.isBrokenH264Decoder=ri;function re(){return ge.browserName()==="Yandex"&&ge.os()==="Windows"||p.simulcast}ge.isBrokenVP9Encoder=re;function ai(){return ge.browserName()==="Safari"&&Number(ge.browserVersion())===17&&[4,5,6].includes(Number(ge.browserSubVersion()))}ge.isBrokenVP9Decoder=ai;function na(){return ge.browserName()==="Firefox"&&Number(ge.browserVersion())<60}ge.isOldDataChannelDescription=na;function oa(){return!(ge.baseChromeVersion()&&ge.isMobile())}ge.canPreferH264=oa;function sa(){return!(ge.browserName()==="Firefox"||ge.browserName()==="Safari")}ge.isSimulcastSupportedByBrowser=sa;function ca(){return Vr||(Vr=(()=>{let j={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 ee in j)if(j.hasOwnProperty(ee)&&j[ee].test(Le))return ee;return"Unknown"})()),Vr}ge.os=ca;function da(){return Br===null&&(Br=/Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(Ha)),Br}ge.isMobile=da;function Li(){return Xi()[0]}ge.browserName=Li;function Tr(){return Xi()[1]}ge.browserVersion=Tr;function la(){return Xi()[3]}ge.baseChromeVersion=la;function pa(){return Qi||(Qi=new(window.AudioContext||window.webkitAudioContext)),Qi.resume().catch(()=>{d.warn("Failed to resume AudioContext")}),Qi}ge.getAudioContext=pa;function ua(){return Xi()[4]}ge.browserSubVersion=ua;function Y(){return ge.baseChromeVersion()>=105&&!ge.isMobile()}ge.isAudioShareSupported=Y;function ma(j,ee){rt[j]||(rt[j]=[]),rt[j].push(ee)}ge.addEventListener=ma;function ha(j,ee){if(rt[j])if(!ee)delete rt[j];else{let pe=rt[j].indexOf(ee);pe>-1&&rt[j].splice(pe,1)}}ge.removeEventListener=ha})(Pe||(Pe={}));var A=Pe;var Ve=class Ve{static get startTime(){var r;return((r=Ve._list[0])==null?void 0:r.t)||0}static get endTime(){var e;let r=Ve._list;return((e=r[r.length-1])==null?void 0:e.t)||0}static startSession(){Ve._list=[]}static get conversationId(){return Ve._conversationId}static set conversationId(r){Ve._conversationId=r}static add(r){Ve._list.push(r)}static _createContextLogs(){let r=[[`Calls SDK ${p.sdkVersion}`,p.toJSON()],["UserAgent:",navigator.userAgent],["Screen resolution:",`${window.screen.width}x${window.screen.height}`],["Permissions:",`Camera: ${A.hasCameraPermission()}, Mic: ${A.hasMicrophonePermission()}`]],e=new Date,t=e.getTime(),i=e.toLocaleString("ru-RU",{dateStyle:"short",timeStyle:"long"});return r.map(a=>({h:i,t,l:"LOG",d:a}))}static collectLogs(){let r=Ve._list;return r.length===0?[]:[...Ve._createContextLogs(),...r]}};Ve._list=[],Ve._conversationId=null;var ke=Ve;var nr=class{constructor(){this._items=[]}get length(){return this._items.length}push(...r){this._items.push(...r)}merge(r){this._items.push(...r._items)}shift(){return this._items.shift()||null}bisect(){let r=this.length>1?Math.floor(this.length/2):1;this._items=this._items.slice(r)}head(){return this._items[0]||null}tail(){let r=this._items.length;return r?this._items[r-1]:null}clear(){this._items=[]}toString(){return this._items.length?JSON.stringify(this._items,(r,e)=>e instanceof Error?String(e):e):""}};var Hr=2*1024*1024,Wa=512*1024,Yt=100*1024,Fo=5,Wr="_okcls_logs_session_",jo=3e4,Kr=class{constructor(){this._items=[];this._itemsSize=0;this._storageSize=Hr;try{let r=window.localStorage;for(let e of Object.keys(r)){if(e.indexOf(Wr)!==0)continue;let t=r.getItem(e);if(!t){Ka(e);continue}let i=qa(t);this.add(e,i)}}catch(r){console.error("Storage is blocked",r),this._storageSize=0}this._items.sort((r,e)=>r.date-e.date),this.cleanup(Yt)}get size(){return this._itemsSize}get length(){return this._items.length}get available(){return Math.max(this._storageSize-this._itemsSize,0)}get items(){return this._items}set storageSize(r){this._storageSize=Math.min(r,this._storageSize,Hr)}add(r,e){let t=parseInt(r.replace(Wr,""),10);this._itemsSize+=e,this._items.push({key:r,size:e,date:t})}deleteOldestItem(){let r=this._items.shift();r&&(Ka(r.key),this._itemsSize-=r.size)}cleanup(r){for(;this.length&&(this.size>Hr||this.length>Fo-1||this.size+r>this.available);)this.deleteOldestItem()}};function $a(){return`${Wr}${Date.now()}`}function qa(n){return new Blob([n]).size}function Ka(n){try{window.localStorage.removeItem(n)}catch(r){console.error("Failed to remove log from storage",r)}}function or(){let n=pt.toString();if(!Ae.available||!n)return;let r=qa(n);if(r>Wa){pt.bisect(),or();return}Ae.cleanup(Yt+r);try{window.localStorage.setItem(sr,n)}catch(e){if(console.warn("Failed to write log to storage",e),Ae.storageSize=Ae.size+r,Ae.cleanup(Yt+r),Ae.available>=Yt+r){or();return}if(r>Yt){pt.bisect(),or();return}Ae.storageSize=0;return}r>Wa&&(Ae.add(sr,r),sr=$a(),pt.clear(),Ae.cleanup(Yt))}function $r(){!Ae.available||!pt.length||or()}function Ho(n=!1){let r=[];try{let i=window.localStorage;for(let o of Ae.items){let s=i.getItem(o.key);r.push(s)}let a=pt.toString();a&&r.push(a)}catch(i){console.error("Storage is blocked",i)}let e=`[${r.join(",")}]`;if(n)return e;let t=`logs_${Date.now()}.json`;return Go(e,t),t}function Go(n,r){let e=document.createElement("a"),t=new Blob([n],{type:"text/json"});e.href=URL.createObjectURL(t),e.download=r,e.click()}function za(n,r){if(!Ae.available)return;let e=new Date,t={t:e.getTime(),l:n,d:r,h:e.toLocaleString("ru-RU",{dateStyle:"short",timeStyle:"long"})};pt.push(t),ke.add(t),Gr||(Gr=window.setTimeout(()=>{Gr=null,$r()},jo))}function qr(){Ae||(Ae=new Kr,pt=new nr,sr=$a(),window.addEventListener("beforeunload",$r))}var Ae,pt,sr,Gr=null;window.__VKCallsSDKLogs__=(n=!1)=>(Ae||qr(),$r(),Ho(n));var Ja=(i=>(i.DEBUG="DEBUG",i.LOG="LOG",i.WARN="WARN",i.ERROR="ERROR",i))(Ja||{}),zr;(ae=>{let n="📞",r=(z,...he)=>{I.onDebugMessage(z,...he)},e=!1,t=(z,he)=>(...Be)=>{z(...Be),za(he,Be)},i=console.debug.bind(console,n),a=console.log.bind(console,n),o=console.warn.bind(console,n),s=console.error.bind(console,n),l=r.bind(null,"DEBUG"),u=r.bind(null,"LOG"),m=r.bind(null,"WARN"),h=r.bind(null,"ERROR");ae.debug=l,ae.log=u,ae.warn=m,ae.error=h;function O(){return e}ae.enabled=O;function G(z){e=z,p.debugLog&&qr(),z?(ae.debug=p.debugLog?t(i,"DEBUG"):i,ae.log=p.debugLog?t(a,"LOG"):a,ae.warn=p.debugLog?t(o,"WARN"):o,ae.error=p.debugLog?t(s,"ERROR"):s):(ae.debug=p.debugLog?t(l,"DEBUG"):l,ae.log=p.debugLog?t(u,"LOG"):u,ae.warn=p.debugLog?t(m,"WARN"):m,ae.error=p.debugLog?t(h,"ERROR"):h)}ae.toggle=G;function $(z,...he){switch(z){case"DEBUG":(0,ae.debug)(...he);break;case"LOG":(0,ae.log)(...he);break;case"WARN":(0,ae.warn)(...he);break;case"ERROR":(0,ae.error)(...he);break}}ae.send=$;function le(z,...he){}ae.test=le})(zr||(zr={}));var d=zr;var Ko="kf";function Qt(n){return n.stopStream}function Jr(n){return n.keyFrameRequested}function Ya(n){if(Qt(n))return"ss";if(Jr(n))return Ko;let r="";return n.priority!==void 0&&(r+="p="+n.priority),n.width!==void 0&&n.height!==void 0&&(r!==""&&(r+=":"),r+="sz="+Math.round(n.width)+"x"+Math.round(n.height)),n.fit!==void 0&&(r!==""&&(r+=":"),r+="fit="+n.fit),r}var fi=(o=>(o.CAMERA="CAMERA",o.SCREEN="SCREEN",o.STREAM="STREAM",o.MOVIE="MOVIE",o.ANIMOJI="ANIMOJI",o.SHARED_URL="SHARED_URL",o))(fi||{}),Qa="s",Xa="m";function Ye(n){return n.participantId+(n.mediaType?Bt+Qa+n.mediaType:"")+(n.streamName?Bt+Xa+n.streamName:"")}function Si(n){let r=n.split(Bt),e=r.shift();if(!e)throw new Error("Illegal stream description: "+n);let t=null,i,a=0;for(let s of r)switch(s.charAt(0)){case Qa:t=$o(s.slice(1));break;case Xa:i=s.slice(1);break;case ji:a=Number.parseInt(s.slice(1),10);break;default:throw new Error("Unexpected parameter type "+s.charAt(0)+" in stream description "+n)}return{participantId:E.compose(e,a),mediaType:t,streamName:i}}function $o(n){for(let r of Object.keys(fi))if(r===n)return fi[r];return null}function Qe(){let n=new DataView(new ArrayBuffer(64)),r=0;function e(t){if(r+t>n.byteLength){let i=new Uint8Array(Math.max(r+t,n.byteLength+64));i.set(new Uint8Array(n.buffer.slice(0,r))),n=new DataView(i.buffer)}}return{put(t){if(e(t.byteLength),qo(t)){let i=t.buffer;new Uint8Array(n.buffer).set(new Uint8Array(i),r)}else new Uint8Array(n.buffer).set(new Uint8Array(t),r);r+=t.byteLength},putI8(t){e(1),n.setInt8(r,t),++r},putI16(t){e(2),n.setInt16(r,t),r+=2},putI32(t){e(4),n.setInt32(r,t),r+=4},putI64(t){e(8);let i=t<0;i&&(t=-t);let a=t/4294967296|0,o=t%4294967296|0;i&&(o=~o+1|0,a=o===0?~a+1|0:~a),n.setUint32(r,a),n.setUint32(r+4,o),r+=8},putUi8(t){e(1),n.setUint8(r,t),++r},putUi16(t){e(2),n.setUint16(r,t),r+=2},putUi32(t){e(4),n.setUint32(r,t),r+=4},putUi64(t){e(8),n.setUint32(r,t/4294967296|0),n.setUint32(r+4,t%4294967296),r+=8},putF(t){e(8),n.setFloat64(r,t),r+=8},ui8array(){return new Uint8Array(n.buffer.slice(0,r))}}}function qo(n){return n.buffer!==void 0}function cr(n){let r=ArrayBuffer.isView(n)?new DataView(n.buffer,n.byteOffset,n.byteLength):new DataView(n),e=0;return{peek(){return r.getUint8(e)},get(t){e+=t;let i=r.byteOffset;return r.buffer.slice(i+e-t,i+e)},getI8(){return r.getInt8(e++)},getI16(){return e+=2,r.getInt16(e-2)},getI32(){return e+=4,r.getInt32(e-4)},getI64(){e+=8;let t=r.getInt32(e-8),i=r.getUint32(e-4);return t*4294967296+i},getUi8(){return r.getUint8(e++)},getUi16(){return e+=2,r.getUint16(e-2)},getUi32(){return e+=4,r.getUint32(e-4)},getUi64(){e+=8;let t=r.getUint32(e-8),i=r.getUint32(e-4);return t*4294967296+i},getF32(){return e+=4,r.getFloat32(e-4)},getF64(){return e+=8,r.getFloat64(e-8)}}}var tn=0,rn=1,Jo=2,Yo=3,Qo=4,Xo=5,Zo=6,es=7,ts=0,is=1,rs=2,at=0,as=0,ns=0,os=1,dr=class{constructor(){this.participantIdRegistry=null}setParticipantIdRegistry(r){this.participantIdRegistry=r}serializeUpdateDisplayLayout(r,e){let t=Qe();W.enc(t,tn),W.enc(t,at),W.enc(t,r),wt.enc(t,null);let i=[];for(let a in e)e.hasOwnProperty(a)&&this.writeLayout(e,a,i);return Za.enc(t,i),wt.enc(t,null),t.ui8array()}writeLayout(r,e,t){let i=r[e],a=Qe();if(this.writeStreamDesc(e,a),Qt(i))W.enc(a,is);else if(Jr(i))W.enc(a,rs);else if(W.enc(a,ts),i.priority!==void 0?W.enc(a,i.priority):wt.enc(a,null),i.width!==void 0&&i.height!==void 0?(W.enc(a,Math.round(i.width)),W.enc(a,Math.round(i.height))):(wt.enc(a,null),wt.enc(a,null)),i.fit!==void 0)switch(i.fit){case"cv":W.enc(a,ns);break;case"cn":W.enc(a,os);break;default:wt.enc(a,null)}else wt.enc(a,null);t.push(a.ui8array())}writeStreamDesc(r,e){if(this.participantIdRegistry){let t=this.participantIdRegistry.getCompactId(r);if(t!==void 0){W.enc(e,t);return}}en.enc(e,r)}serializePerfStatReport(r,e){let t=Qe();return W.enc(t,rn),W.enc(t,at),W.enc(t,r),W.enc(t,e.framesDecoded),W.enc(t,e.framesReceived),t.ui8array()}serializeSharingStatReport(r,e){let t=Qe();return W.enc(t,Jo),W.enc(t,at),W.enc(t,r),W.enc(t,e.minDelay),W.enc(t,e.maxDelay),W.enc(t,e.avgDelay),W.enc(t,e.largeDelayDuration),t.ui8array()}serializeRequestAsr(r,e){let t=Qe();return W.enc(t,Yo),W.enc(t,at),W.enc(t,r),Yr.enc(t,e.request),t.ui8array()}serializeNetworkStatReport(r,e){let t=Qe();return W.enc(t,Qo),W.enc(t,at),W.enc(t,r),W.enc(t,e.timestamp),W.enc(t,e.sendBitrate),t.ui8array()}serializeEnableVideoSuspend(r,e){let t=Qe();return W.enc(t,Xo),W.enc(t,at),W.enc(t,r),Yr.enc(t,e.enabled),t.ui8array()}serializeEnableVideoSuspendSuggest(r,e){let t=Qe();return W.enc(t,Zo),W.enc(t,at),W.enc(t,r),Yr.enc(t,e.enabled),t.ui8array()}serializeChangeSimulcast(r,e){let t=Qe();W.enc(t,es),W.enc(t,at),W.enc(t,r);let i=e.simulcastInfo.streams.length;W.enc(t,e.mediaSource),W.enc(t,i);for(let a of e.simulcastInfo.streams)en.enc(t,a.rid),W.enc(t,a.width),W.enc(t,a.height),W.enc(t,a.fps),W.enc(t,a.bitrate/1e3);return t.ui8array()}deserializeCommandResponse(r){return c(this,null,function*(){let e;if(r instanceof Blob){let o="arrayBuffer"in Blob.prototype?yield r.arrayBuffer():yield wa(r);e=cr(o)}else e=cr(r);let t=W.dec(e),i=W.dec(e);if(i!==at){d.warn("Unsupported version for command type: "+t+", version "+i);return}if(W.dec(e)!==as){d.warn("Error code: "+t+"received for command type: "+t+", version "+i);return}switch(t){case tn:return this.deserializeUpdateDisplayLayoutResponse(e);case rn:return this.deserializeReportPerfStatResponse(e);default:d.warn("unsupported command response commandType: "+t);return}})}deserializeUpdateDisplayLayoutResponse(r){let e=W.dec(r),t=Za.dec(r),i={};return t.forEach(a=>{var l;let o=cr(a),s=zo.dec(o);if(typeof s=="string")i[s]=W.dec(o);else{let u=s,m=Ye((l=this.participantIdRegistry)==null?void 0:l.getStreamDescription(u));i[m]=W.dec(o)}}),{type:"response",sequence:e,response:U.UPDATE_DISPLAY_LAYOUT.toString(),errorCodeByParticipantId:i}}deserializeReportPerfStatResponse(r){let e=W.dec(r),t=W.dec(r);return{type:"response",sequence:e,response:U.REPORT_PERF_STAT.toString(),estimatedPerformanceIndex:t}}};var an=(i=>(i.START="start",i.ACCEPT="accept",i.JOIN="join",i.RETRY="retry",i))(an||{}),nt=an;var nn=(t=>(t.NOTIFICATION="NOTIFICATION",t.FAILED="FAILED",t.RECONNECT="RECONNECT",t))(nn||{}),be=nn;var on=(g=>(g.TRANSMITTED_DATA="transmitted-data",g.ACCEPTED_CALL="accepted-call",g.HUNGUP="hungup",g.PARTICIPANT_ADDED="participant-added",g.PARTICIPANT_JOINED="participant-joined",g.CLOSED_CONVERSATION="closed-conversation",g.MEDIA_SETTINGS_CHANGED="media-settings-changed",g.PARTICIPANT_STATE_CHANGED="participant-state-changed",g.PARTICIPANTS_STATE_CHANGED="participants-state-changed",g.RATE_CALL_DATA="rate-call-data",g.FEATURE_SET_CHANGED="feature-set-changed",g.TOPOLOGY_CHANGED="topology-changed",g.PRODUCER_UPDATED="producer-updated",g.CONSUMER_ANSWERED="consumer-answered",g.MULTIPARTY_CHAT_CREATED="multiparty-chat-created",g.FORCE_MEDIA_SETTINGS_CHANGE="force-media-settings-change",g.SETTINGS_UPDATE="settings-update",g.VIDEO_QUALITY_UPDATE="video-quality-update",g.REGISTERED_PEER="registered-peer",g.SWITCH_MICRO="switch-micro",g.RECORD_STARTED="record-started",g.RECORD_STOPPED="record-stopped",g.REALLOC_CON="realloc-con",g.AUDIO_ACTIVITY="audio-activity",g.SPEAKER_CHANGED="speaker-changed",g.STALLED_ACTIVITY="stalled-activity",g.CHAT_MESSAGE="chat-message",g.CUSTOM_DATA="custom-data",g.ROLES_CHANGED="roles-changed",g.MUTE_PARTICIPANT="mute-participant",g.PIN_PARTICIPANT="pin-participant",g.OPTIONS_CHANGED="options-changed",g.NETWORK_STATUS="network-status",g.PARTICIPANT_SOURCES_UPDATE="participant-sources-update",g.PROMOTE_PARTICIPANT="promote-participant",g.CHAT_ROOM_UPDATED="chat-room-updated",g.PROMOTION_APPROVED="promotion-approved",g.JOIN_LINK_CHANGED="join-link-changed",g.FEEDBACK="feedback",g.MOVIE_UPDATE_NOTIFICATION="movie-update-notification",g.MOVIE_SHARE_STARTED="movie-share-started",g.MOVIE_SHARE_STOPPED="movie-share-stopped",g.URL_SHARING_INFO_UPDATED="url-sharing-info-updated",g.ROOM_UPDATED="room-updated",g.ROOMS_UPDATED="rooms-updated",g.ROOM_PARTICIPANTS_UPDATED="room-participants-updated",g.FEATURES_PER_ROLE_CHANGED="features-per-role-changed",g.PARTICIPANT_ANIMOJI_CHANGED="participant-animoji-changed",g.ASR_STARTED="asr-started",g.ASR_STOPPED="asr-stopped",g.DECORATIVE_PARTICIPANT_ID_CHANGED="decorative-participant-id-changed",g.VIDEO_SUSPEND_SUGGEST="video-suspend-suggest",g))(on||{}),V=on;var sn="open",cn=[()=>p.producerScreenTrack,()=>p.videoTracksCount>0,()=>!0,()=>!0,()=>p.consumerScreenTrack,()=>!0,()=>p.movieShare,()=>p.useParticipantListChunk,()=>p.useRooms,()=>!!p.vmoji,()=>p.useCallsToContacts,()=>p.useChatRooms],ss=10,cs=["service-unavailable","conversation-ended","invalid-token"],Me=class Me extends oi{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="+p.platform+"&appVersion="+p.appVersion+"&version="+p.protocolVersion+"&device="+p.device+"&capabilities="+Me._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 dr}static _getCapabilityFlags(){let e=0;for(let t=0;t<cn.length;t++)cn[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 a;let i=(a=this.participantIdRegistry)==null?void 0:a.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=>{d.warn("[signaling] cannot parse message at producerCommandDataChannel",i)})},this._handleCommandsQueue(this.datachannelCommandsQueue)}useCommandDataChannel(e){this.producerCommandDataChannelEnabled=e}cleanup(){this.datachannelCommandsQueue=[],this.incomingCache=[]}connect(e){return c(this,null,function*(){return this.postfix+=`&clientType=${p.clientType}`,new Promise((t,i)=>{if(this.socket&&this.socket.readyState<WebSocket.CLOSING){P.log(R.SOCKET_ACTION,"already_opened"),i(Error("Socket already opened"));return}this.conversationResolve=a=>{t(a),this.conversationResolve=null,this.conversationReject=null},this.conversationReject=a=>{i(a),this.conversationResolve=null,this.conversationReject=null},this._connect(e)})})}_send(o){return c(this,arguments,function*(e,t={},i=!0,a=0){if(t.participantId){let s=E.decomposeParticipantId(t.participantId),l=E.decomposeId(s.compositeUserId);t=Object.assign({},t,{participantId:l.id,participantType:l.type}),s.deviceIdx&&(t.deviceIdx=s.deviceIdx)}return this._sendRaw(e,t,i,a)})}_sendRaw(o){return c(this,arguments,function*(e,t={},i=!0,a=0){let s=l=>{var u;if(this._isDataChannelCommand(e))this.datachannelCommandsQueue.push(l),((u=this.producerCommandDataChannel)==null?void 0:u.readyState)===sn&&this._handleCommandsQueue(this.datachannelCommandsQueue);else{if(!this.socket){P.log(R.SOCKET_ACTION,"not_opened"),d.warn("[signaling] socket is not opened"),l.reject(new Error(`Socket not opened [${e}]`),!0);return}this.socket.readyState>WebSocket.OPEN&&(P.log(R.SOCKET_ACTION,"invalid_state"),d.warn(`[signaling] socket is not opened, state ${this.socket.readyState}`)),this.websocketCommandsQueue.push(l),this.socket&&this.socket.readyState===WebSocket.OPEN&&this._handleCommandsQueue(this.websocketCommandsQueue)}};return new Promise((l,u)=>{let m=(T,v=!1)=>{!a||v?u(T):(d.debug("[signaling] resending a signaling message",e,h.sequence),a--,s(h))},h={sequence:this.sequence++,name:e,params:t,responseTimer:0,needResponse:i,resolve:l,reject:m};s(h)})})}_isDataChannelCommand(e){return this.producerCommandDataChannelEnabled?e===U.UPDATE_DISPLAY_LAYOUT||e===U.REPORT_PERF_STAT||e===U.REPORT_SHARING_STAT||e===U.REQUEST_ASR||e===U.ENABLE_VIDEO_SUSPEND||e===U.ENABLE_VIDEO_SUSPEND_SUGGEST||e===U.REPORT_NETWORK_STAT||e===U.CHANGE_SIMULCAST:!1}getNextCommandSequenceNumber(){return this.sequence}hangup(e){return c(this,null,function*(){return this._send(U.HANGUP,{reason:e}).catch(()=>{})})}sendCandidate(e,t){return c(this,null,function*(){return this._send(U.TRANSMIT_DATA,{participantId:e,data:{candidate:t}},!1)})}requestTestMode(e,t){return c(this,null,function*(){return this._send(U.REQUEST_TEST_MODE,{consumer:e,producer:t})})}sendSdp(e,t,i){return c(this,null,function*(){let a=Object.assign({sdp:t},i);return this._send(U.TRANSMIT_DATA,{participantId:e,data:a})})}acceptCall(e){return c(this,null,function*(){return this._send(U.ACCEPT_CALL,{mediaSettings:e})})}changeMediaSettings(e){return c(this,null,function*(){return this._send(U.CHANGE_MEDIA_SETTINGS,{mediaSettings:e},!0,ss)})}changeParticipantState(e,t){return c(this,null,function*(){let i={participantState:{state:e}};return t&&(i.participantId=t),this._sendRaw(U.CHANGE_PARTICIPANT_STATE,i)})}putHandsDown(){return c(this,null,function*(){return this._send(U.PUT_HANDS_DOWN)})}addParticipant(e,t){return c(this,null,function*(){return this._send(U.ADD_PARTICIPANT,oe({participantIds:e},t))})}removeParticipant(e,t=!1){return c(this,null,function*(){return this._send(U.REMOVE_PARTICIPANT,{participantId:e,ban:t})})}allocateConsumer(e,t){return c(this,null,function*(){let i={capabilities:t};return e&&(i.description=e.sdp),this._send(U.ALLOCATE_CONSUMER,i)})}acceptProducer(e,t){return c(this,null,function*(){let i={description:e.sdp};return t&&(i.ssrcs=t),this._send(U.ACCEPT_PRODUCER,i)})}changePriorities(e){return c(this,null,function*(){return this._send(U.CHANGE_STREAM_PRIORITIES,{typedPriorities:e}).catch(()=>{})})}updateDisplayLayout(e){return c(this,null,function*(){return this._send(U.UPDATE_DISPLAY_LAYOUT,e)})}addMovie(e){return c(this,null,function*(){return this._send(U.ADD_MOVIE,e)})}updateMovie(e){return c(this,null,function*(){return this._send(U.UPDATE_MOVIE,e)})}removeMovie(e){return c(this,null,function*(){return this._send(U.REMOVE_MOVIE,e)})}startUrlSharing(e){return this._send(U.START_URL_SHARING,{sharedUrl:e})}stopUrlSharing(){return this._send(U.STOP_URL_SHARING)}updateRooms(e,t){return c(this,null,function*(){return this._send(U.UPDATE_ROOMS,{rooms:e,assignRandomly:t})})}activateRooms(e,t){return c(this,null,function*(){return this._send(U.ACTIVATE_ROOMS,{roomIds:e,deactivate:t})})}switchRoom(e,t){return c(this,null,function*(){return this._sendRaw(U.SWITCH_ROOM,{toRoomId:e,participantId:t})})}getRooms(e){return c(this,null,function*(){return this._sendRaw(U.GET_ROOMS,{withParticipants:e})})}removeRooms(e){return c(this,null,function*(){return this._send(U.REMOVE_ROOMS,{roomIds:e})})}startStream(e){return c(this,null,function*(){return this._send(U.RECORD_START,e)})}stopStream(){return c(this,arguments,function*(e={roomId:null}){return this._send(U.RECORD_STOP,e)})}publishStream(){return c(this,arguments,function*(e={roomId:null}){return this._send(U.RECORD_PUBLISH,e)})}recordSetConf(){return c(this,arguments,function*(e={hideParticipantCount:!1,roomId:null}){var i;let t={options:{hideParticipantCount:e.hideParticipantCount},roomId:e.roomId};return e.king&&(t.king=e.king),(i=e.pawns)!=null&&i.length&&(t.pawns=e.pawns.join(",")),this._send(U.RECORD_SET_CONF,t)})}getRecordStatus(){return c(this,null,function*(){return this._send(U.RECORD_GET_STATUS)})}switchTopology(e,t=!1){return c(this,null,function*(){return this._send(U.SWITCH_TOPOLOGY,{topology:e,force:t})})}requestRealloc(){return c(this,null,function*(){return this._send(U.REQUEST_REALLOC)})}reportPerfStat(e){return c(this,null,function*(){return this._send(U.REPORT_PERF_STAT,e)})}reportSharingStat(e){return c(this,null,function*(){return this._send(U.REPORT_SHARING_STAT,e,!1)})}reportNetworkStat(e){return c(this,null,function*(){return this._send(U.REPORT_NETWORK_STAT,e,!1)})}chatMessage(e,t=null){return c(this,null,function*(){return this._send(U.CHAT_MESSAGE,{message:e,participantId:t})})}chatHistory(e){return c(this,null,function*(){return this._send(U.CHAT_HISTORY,{count:e})})}customData(e,t){return c(this,null,function*(){return this._send(U.CUSTOM_DATA,{data:e,participantId:t})})}grantRoles(e,t,i){return c(this,null,function*(){let a={participantId:e,roles:t};return i&&(a.revoke=!0),this._sendRaw(U.GRANT_ROLES,a)})}muteParticipant(e,t,i,a=null){return c(this,null,function*(){return this._sendRaw(U.MUTE_PARTICIPANT,{participantId:e,muteStates:t,requestedMedia:i,roomId:a})})}enableFeatureForRoles(e,t){return c(this,null,function*(){return this._sendRaw(U.ENABLE_FEATURE_FOR_ROLES,{feature:e,roles:t})})}pinParticipant(e,t,i){return c(this,null,function*(){let a={participantId:e,roomId:i};return t&&(a.unpin=!0),this._sendRaw(U.PIN_PARTICIPANT,a)})}updateMediaModifiers(e){return c(this,null,function*(){return this._send(U.UPDATE_MEDIA_MODIFIERS,{mediaModifiers:e})})}enableVideoSuspend(e){return c(this,null,function*(){return this._send(U.ENABLE_VIDEO_SUSPEND,{enabled:e},!1)})}enableVideoSuspendSuggest(e){return c(this,null,function*(){return this._send(U.ENABLE_VIDEO_SUSPEND_SUGGEST,{enabled:e},!1)})}changeSimulcast(e){return c(this,null,function*(){return this._send(U.CHANGE_SIMULCAST,e,!1)})}changeOptions(e){return c(this,null,function*(){return this._send(U.CHANGE_OPTIONS,{options:e})})}getWaitingHall(e=null,t,i=!1){return c(this,null,function*(){let a={};return e&&(a.fromId=e),t&&(a.count=t),i&&(a.backward=i),this._send(U.GET_WAITING_HALL,a)})}promoteParticipant(e,t=!1){return c(this,null,function*(){let i={};return e&&(i.participantId=e),t&&(i.demote=t),this._sendRaw(U.PROMOTE_PARTICIPANT,i)})}requestPromotion(e=!1){return c(this,null,function*(){let t={};return e&&(t.unrequest=e),this._send(U.REQUEST_PROMOTION,t)})}acceptPromotion(e=!1){return c(this,null,function*(){let t={};return e&&(t.reject=e),this._send(U.ACCEPT_PROMOTION,t)})}feedback(e){return c(this,null,function*(){return this._sendRaw(U.FEEDBACK,{key:e})})}getHandQueue(){return c(this,null,function*(){return this._send(U.GET_HAND_QUEUE)})}close(){this.socket&&this.socket.readyState<WebSocket.CLOSING&&this._closeSocket(),this._stopWaitConnectionMessage(),this._stopDoctor(),clearTimeout(this.reconnectTimer)}readyToSend(e=!0){this.listenersReady=e,this._handleCachedMessages()}getParticipantListChunk(e){return c(this,null,function*(){return this._send(U.GET_PARTICIPANT_LIST_CHUNK,e)})}getParticipants(e){return c(this,null,function*(){return this._send(U.GET_PARTICIPANTS,{externalIds:e})})}getPeerId(){return this.peerId}startAsr(e){return c(this,null,function*(){return this._send(U.ASR_START,e)})}stopAsr(e){return c(this,null,function*(){return this._send(U.ASR_STOP,e)})}requestAsr(e){return c(this,null,function*(){return this._send(U.REQUEST_ASR,{request:e},!1)})}_connect(e){if(this.socket&&this.socket.readyState<WebSocket.CLOSING)return;let t="";e&&(t+=`&tgt=${e}`),e===nt.RETRY&&this.lastStamp&&(t+=`&recoverTs=${this.lastStamp}`),t=i(t),d.debug("[signaling] 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(a){if(!p.useParticipantListChunk)return a;let o=p.participantListChunkInitIndex;a+=`&partIdx=${o}`;let s=p.participantListChunkInitCount;return s!==null&&(a+=`&partCount=${s}`),a}}_disconnect(e){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(e),this.socket=null),this._stopWaitConnectionMessage(),this._stopDoctor(),clearTimeout(this.reconnectTimer)}_onOpen(){d.debug("[signaling] socket opened"),P.log(R.SOCKET_ACTION,"opened"),this._waitConnectionMessage(),this._startDoctor()}_onMessage(e){if(this._startDoctor(),e.data==="ping"){I.onSignalingMessage(e.data),this.socket&&this.socket.readyState===WebSocket.OPEN&&this.socket.send("pong");return}try{let t=JSON.parse(e.data);I.onSignalingMessage(t),this._handleMessage(t)}catch(t){P.log(R.SOCKET_ACTION,"parse_error"),d.error("[signaling] unable to parse message",t,e.data)}}_handleMessage(e){var t;switch(e.type){case"notification":e.notification==="connection"?(d.debug("[signaling] 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(be.RECONNECT,e),e.conversation.topology&&this._triggerEvent(be.NOTIFICATION,{type:"notification",notification:V.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(be.NOTIFICATION,e);break;case"response":this._handleCommandResponse(!0,e);break;case"error":this._handleErrorMessage(e);break;default:P.log(R.SOCKET_ACTION,"unknown_message"),d.warn("[signaling] unhandled message",e)}this.lastStamp=e.stamp||this.lastStamp}_handleErrorMessage(e){var i;P.log(R.SOCKET_ACTION,`error-${e.error}`);let t=e.error?cs.includes(e.error):!1;switch(d.debug(`[signaling] error message [${e.sequence}]`,e),e.sequence&&this.responseHandlers[e.sequence]&&this._handleCommandResponse(!1,e),e.error){case"service-unavailable":this._reconnect();break;case"conversation-ended":this.conversationReject?this.conversationReject(new q(e.reason||ce.SIGNALING_FAILED,{message:`Conversation ended: ${e.error}`,remote:!0})):this._triggerEvent(be.NOTIFICATION,{notification:V.CLOSED_CONVERSATION,reason:e.reason});break;case"participant-not-found":case"invalid-token":this._throwError(new Error(`Signaling error: ${e.error}`));break;default:if(!t)break;this.connected?this._throwError(new Error(`Signaling error: ${e.error}`)):e.sequence||((i=this.conversationReject)==null||i.call(this,new q(e.reason||ce.SIGNALING_FAILED,{message:`Unable to connect to the signaling: ${e.error}`,remote:!0})),this._closeSocket())}}_handleCachedMessages(){let e=[...this.incomingCache];for(this.incomingCache=[];e.length>0;){let t=e.shift();this._handleMessage(t)}}_throwError(e){this._triggerEvent(be.FAILED,e)}_onError(e){P.log(R.SOCKET_ACTION,"error"),d.error("[signaling] signaling error",e)}_onClose(e){P.log(R.SOCKET_ACTION,"closed"),d.debug("[signaling] connection closed",{code:e.code,reason:e.reason}),this.connected=!1,this._stopDoctor(),this.socket&&this.reconnectCount++<Me.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(Me.RECONNECT_MAX_DELAY,Me.RECONNECT_DELAY*Math.pow(2,this.reconnectCount-1));d.log(`[signaling] reconnect websocket after ${e}ms (${this.reconnectCount})`),P.log(R.SOCKET_ACTION,"reconnect"),this.reconnectTimer=window.setTimeout(this._connect.bind(this,nt.RETRY),e)}_handleCommandResponse(e,t){var a;if(!this.responseHandlers.hasOwnProperty(t.sequence))return;let i=this.responseHandlers[t.sequence];window.clearTimeout(i.responseTimer),d.debug(`[signaling] command response [${t.sequence}]`,t),e?(delete this.responseHandlers[t.sequence],i.resolve(t)):t.type==="error"?(delete this.responseHandlers[t.sequence],P.log(R.SOCKET_ACTION,"response-error"),i.reject(new Error(t.error||`Response error [${i.name}]`),!0)):((a=this.socket)==null?void 0:a.readyState)===WebSocket.OPEN?(delete this.responseHandlers[t.sequence],P.log(R.SOCKET_ACTION,"response-timeout"),i.reject(new Error(t.error||`Response timeout [${i.name}]`))):i.responseTimer=window.setTimeout(()=>this._handleCommandResponse(e,t),Me.WAIT_RESPONSE_DELAY)}_handleCommandsQueue(e){var t,i;for(;e.length>0;){let a=e.shift();if(d.debug(`[signaling] command send [${a.sequence}]`,`'${a.name}'`,a.params),this._isDataChannelCommand(a.name)){if(((t=this.producerCommandDataChannel)==null?void 0:t.readyState)!==sn){a.reject(new Error(`Invalid data channel state: ${(i=this.producerCommandDataChannel)==null?void 0:i.readyState}`));return}this._startResponseTimer(a);let o=this._serializeBinary(a);o!==null&&this.producerCommandDataChannel.send(o)}else{if(!this.socket||this.socket.readyState!==WebSocket.OPEN){a.reject(new Error("Invalid state or socket already closed"));continue}this._startResponseTimer(a),this.socket.send(this._serializeJson(a))}}}_startResponseTimer(e){if(!e.needResponse){e.resolve({type:"response",sequence:e.sequence,response:e.name});return}e.responseTimer=window.setTimeout(()=>this._handleCommandResponse(!1,{response:e.name,sequence:e.sequence,type:"timeout"}),Me.WAIT_RESPONSE_DELAY),this.responseHandlers[e.sequence]=e}_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);case U.REPORT_SHARING_STAT:return this.producerCommandSerializationService.serializeSharingStatReport(e.sequence,e.params);case U.REQUEST_ASR:return this.producerCommandSerializationService.serializeRequestAsr(e.sequence,e.params);case U.REPORT_NETWORK_STAT:return this.producerCommandSerializationService.serializeNetworkStatReport(e.sequence,e.params);case U.ENABLE_VIDEO_SUSPEND:return this.producerCommandSerializationService.serializeEnableVideoSuspend(e.sequence,e.params);case U.ENABLE_VIDEO_SUSPEND_SUGGEST:return this.producerCommandSerializationService.serializeEnableVideoSuspendSuggest(e.sequence,e.params);case U.CHANGE_SIMULCAST:return this.producerCommandSerializationService.serializeChangeSimulcast(e.sequence,e.params)}return d.warn("[signaling] 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 a in t)t.hasOwnProperty(a)&&(i[a]=Ya(t[a]));return{layouts:i}}_waitConnectionMessage(){this.connectionMessageWaitTimer=window.setTimeout(()=>{this.conversationReject&&this.conversationReject(new q(ce.SIGNALING_FAILED,{message:"Unable to connect to the signaling: connection timeout",remote:!0}))},Me.WAIT_CONNECTION_DELAY)}_stopWaitConnectionMessage(){window.clearTimeout(this.connectionMessageWaitTimer),this.connectionMessageWaitTimer=0}_startDoctor(){this._stopDoctor(),this.doctorTimer=window.setTimeout(()=>{d.warn("[signaling] socket is dead, trying to reconnect"),this._disconnect(4e3),this._connect(nt.RETRY)},Me.WAIT_MESSAGE_DELAY)}_stopDoctor(){window.clearTimeout(this.doctorTimer),this.doctorTimer=0}};Me.RECONNECT_DELAY=p.signalingReconnectDelay,Me.RECONNECT_MAX_DELAY=p.signalingReconnectMaxDelay,Me.RECONNECT_MAX_COUNT=p.signalingReconnectMaxCount,Me.WAIT_CONNECTION_DELAY=p.waitConnectionDelay,Me.WAIT_RESPONSE_DELAY=p.waitResponseDelay,Me.WAIT_MESSAGE_DELAY=p.waitMessageDelay;var Xt=Me;var dn=(t=>(t.INCOMING="INCOMING",t.OUTGOING="OUTGOING",t.JOINING="JOINING",t))(dn||{}),ut=dn;var ln=(t=>(t.USER="USER",t.GROUP="GROUP",t.CHAT="CHAT",t))(ln||{}),ot=ln;var pn=(e=>(e.ATTENDEE="ATTENDEE",e.HAND_UP="HAND_UP",e))(pn||{}),Qr=pn;var un=(t=>(t.ADD_PARTICIPANT="ADD_PARTICIPANT",t.RECORD="RECORD",t.MOVIE_SHARE="MOVIE_SHARE",t))(un||{}),Xr=un;var mn=(o=>(o.REQUIRE_AUTH_TO_JOIN="REQUIRE_AUTH_TO_JOIN",o.AUDIENCE_MODE="AUDIENCE_MODE",o.WAITING_HALL="WAITING_HALL",o.ASR="ASR",o.FEEDBACK="FEEDBACK",o.RECURRING="RECURRING",o))(mn||{}),Zt=mn;function hn(n,r){if(n.length!==r.length)return!1;for(let e of n)if(!r.includes(e))return!1;return!0}function _n(n,r){let e=new Set(n);for(let[t,i]of Object.entries(r))i?e.add(t):e.delete(t);return Array.from(e)}var gn=(t=>(t.UNMUTE="UNMUTE",t.MUTE="MUTE",t.MUTE_PERMANENT="MUTE_PERMANENT",t))(gn||{}),Fe=gn;var fn=(i=>(i.CALLED="CALLED",i.ACCEPTED="ACCEPTED",i.REJECTED="REJECTED",i.HUNGUP="HUNGUP",i))(fn||{}),Z=fn;var Sn=(i=>(i.UPDATE="UPDATE",i.REMOVE="REMOVE",i.ACTIVATE="ACTIVATE",i.TIMEOUT="TIMEOUT",i))(Sn||{}),vi=Sn;var vn=(e=>(e.AUDIO_MIX="audio-mix",e.PARTICIPANT_AGNOSTIC_TRACK_PREFIX="pat",e))(vn||{}),Ke=vn;var In=(e=>(e.NO_AVAILABLE_TRACKS="no-available-tracks",e.UNKNOWN_ERROR="unknown-error",e))(In||{}),En=In;function Tn(n){switch(n){case 1:return"no-available-tracks";default:return"unknown-error"}}var Rn=(e=>(e.CREATOR="CREATOR",e.ADMIN="ADMIN",e))(Rn||{}),mt=Rn;function Ii(n,r){if(n.length!==r.length)return!1;for(let e of n)if(!r.includes(e))return!1;return!0}var Zr=(t=>(t.USER="USER",t.ANONYM="ANONYM",t.GROUP="GROUP",t))(Zr||{}),X;(u=>{function n(m){return m.length?typeof m[0]=="object"?m:m.map(h=>r(h)):[]}u.fromIds=n;function r(m,h="USER",T=0){return{id:m,type:h,deviceIdx:T}}u.fromId=r;function e(m,h=!0){var b;let T=h?m.decorativeExternalUserId:m.externalId,v=(b=m.deviceIdx)!=null?b:0;if(T)return t(T,v)}u.fromSignalingParticipant=e;function t(m,h=0){return{id:m.id,type:m.type==="ANONYM"?"ANONYM":"USER",deviceIdx:h}}u.fromSignaling=t;function i(m){let h=m.deviceIdx||0;return`{"id":"${m.id}","type":"${m.type}","deviceIdx":${h}}`}u.toString=i;function a(m,h="USER",T=0){return i(r(m,h,T))}u.fromIdToString=a;function o(m){try{return JSON.parse(m)}catch(h){throw new Error(`Failed to parse ExternalId from string '${m}'`)}}u.fromString=o;function s(m,h){return m.id===h.id&&m.type===h.type&&m.deviceIdx===h.deviceIdx}u.compare=s;function l(m){return(m==null?void 0:m.deviceIdx)||0}u.getDeviceIdx=l})(X||(X={}));var{isObject:Cn,isObjectsEquals:ds}=E;function ea(n,r){return n===null||r===null?n===null&&r===null:n.maxDimension!==r.maxDimension||n.maxBitrateK!==r.maxBitrateK||n.maxFramerate!==r.maxFramerate||n.degradationPreference!==r.degradationPreference||n.scalabilityMode!==r.scalabilityMode||Cn(n.bitrates)&&Cn(r.bitrates)&&!ds(n.bitrates,r.bitrates,!0)?!1:n.bitrates===r.bitrates}function lr(n,r){return!(!ea(n.camera,r.camera)||!ea(n.screenSharing,r.screenSharing))}function ta(n,r){return{camera:Object.assign({},n.camera,r.camera),screenSharing:Object.assign({},n.screenSharing,r.screenSharing)}}function Pn(n){try{return btoa(JSON.stringify(n))}catch(r){d.warn("WaitingParticipant: failed convert to string",n,r)}return null}function yn(n){try{return JSON.parse(atob(n))}catch(r){d.warn("WaitingParticipant: failed convert from string",n,r)}return null}var pr=(n,r)=>E.objectReduce(n,(e,t,i)=>(t===r&&e.push(i),e),[]);function bn(n){var r;if((r=n.conversation)!=null&&r.muteStates)return n.conversation.muteStates;if(n.muteState&&n.muteOptions)return n.muteOptions.reduce((e,t)=>(e[t]=n.muteState,e),{})}function ls(n,r){switch(n){case ue.AUDIO:return!!r.isAudioEnabled;case ue.AUDIO_SHARING:return!!r.isAudioSharingEnabled;case ue.VIDEO:return!!r.isVideoEnabled;case ue.SCREEN_SHARING:return!!r.isFastScreenSharingEnabled||!!r.isScreenSharingEnabled;default:return!1}}function Mn(n,r){return E.objectReduce(n,(e,t,i)=>{switch(t){case Fe.MUTE:case Fe.MUTE_PERMANENT:{ls(i,r)||(e[i]=t);break}default:e[i]=t;break}return e},{})}function An(n){let{muteStates:r={},mediaSettings:e}=n;return Mn(r,e)}function Dn(n,r){let e=n.conversation.participants.find(i=>E.comparePeerId(i.peerId,n.peerId));if(!e)return r;let{mediaSettings:t}=e;return Mn(r,t)}var ei=class{constructor(r){this._fixNoPacketsApplied=!1;this._fixNoPacketsChecked=!1;this._fixTooManyPacketsApplied=!1;this._fixTooManyPacketsSucceeded=!1;this._fixTooManyPacketsFailed=!1;this._toggleAudioPromise=null;this._fixNoPacketsAppliedVideo=!1;this._mediaSource=r}_fixAudioDeviceNoPackets(r){if(!(this._fixNoPacketsApplied&&this._fixNoPacketsChecked)){if(this._fixNoPacketsApplied&&!this._fixNoPacketsChecked){this._fixNoPacketsChecked=!0,P.log(R.ERROR,`audio_device_recover_${r.bandwidth?"success":"fail"}`);return}!this._fixNoPacketsApplied&&!r.bandwidth&&(this._fixNoPacketsApplied=!0,P.log(R.ERROR,"audio_device_recover"),d.log("[AudioFix] Trying to fix RV (no packets)"),this._toggleAudioPromise=this._mediaSource.toggleAudio(A.getMicrophonePermissionState()!=="denied"))}}_fixAudioDeviceTooManyPackets(r){if(this._fixTooManyPacketsSucceeded||this._fixTooManyPacketsFailed)return;let e=75,t=Date.now();if(!this._lastPacketsSentTime)r.packetsSent>0&&(this._lastPacketsSentTime=t,this._lastPacketsSent=r.packetsSent);else if(t-this._lastPacketsSentTime>500){let i=(r.packetsSent-this._lastPacketsSent)*1e3/(t-this._lastPacketsSentTime);this._lastPacketsSentTime=t,this._lastPacketsSent=r.packetsSent,this._fixTooManyPacketsApplied?i>e?(d.log("[AudioFix] Failed to fix RV"),P.log(R.ERROR,"audio_device_recover_rv_fail"),this._fixTooManyPacketsFailed=!0):t-this._fixTooManyPacketsTime>6e4&&(d.log("[AudioFix] Fixed RV"),P.log(R.ERROR,"audio_device_recover_rv_success"),this._fixTooManyPacketsSucceeded=!0):i>e&&(this._fixTooManyPacketsApplied=!0,P.log(R.ERROR,"audio_device_recover"),d.log("[AudioFix] Trying to fix RV (too many packets)"),this._mediaSource.toggleAudio(!0),this._fixTooManyPacketsTime=t)}}fix(r){if(!this._mediaSource)return;let e=r.find(t=>t.kind==="audio");e&&(this._fixAudioDeviceNoPackets(e),this._fixAudioDeviceTooManyPackets(e))}fixVideo(r){if(!this._mediaSource||this._fixNoPacketsAppliedVideo||!this._toggleAudioPromise)return;let e=r.find(t=>t.kind==="video");e&&!e.bandwidth&&(this._fixNoPacketsAppliedVideo=!0,this._toggleAudioPromise.then(()=>{this._mediaSource.getMediaSettings().isVideoEnabled&&this._mediaSource.toggleVideo(!0)}))}};var Ei=class{constructor(r){this._output=null;this._volume=1;this._features={setSinkId:!!Audio.prototype.setSinkId};this._statFirstMediaReceived=r}add(r){this.destroy(),this._output={},this._output.audioTrack=r,this._initAudioElement()}remove(r){!this._output||this._output.audioTrack!==r||this.destroy()}get volume(){return this._volume}set volume(r){this._volume=Math.max(0,Math.min(1,r)),this._output&&this._output.audioElement&&(this._output.audioElement.volume=this._volume)}_initAudioElement(){var o;if(p.muteMode||!((o=this._output)!=null&&o.audioTrack))return;let r=A.browserName()!=="Safari"||A.isMobile(),e=document.createElement(r?"audio":"video");e.muted=!1,e.volume=this._volume,e.preload="auto";let t=()=>{d.warn("[audio] Error on play audio"),I.onAutoplayError()},i=s=>{e.srcObject=new MediaStream([s]),e.load();let l=e.play();l&&l.catch(t)},a=()=>{var l;d.debug("[audio] Recover audio playback");let s=(l=this._output)==null?void 0:l.audioTrack;s?i(s):d.warn("[audio] Broken audio track")};e.onpause=a,e.onstalled=a,e.onerror=a,e.onloadeddata=()=>{this._statFirstMediaReceived.measure()},i(this._output.audioTrack),this._output.audioElement=e}_stopAudioElement(){var r,e,t;(r=this._output)!=null&&r.audioElement&&(this._output.audioElement.pause(),this._output.audioElement.srcObject=null),(t=(e=this._output)==null?void 0:e.audioTrack)==null||t.stop()}destroy(){this._output&&(this._stopAudioElement(),this._output=null)}changeOutput(){return c(this,null,function*(){var r,e,t;try{if(!this._features.setSinkId)throw new Error('Feature "setSinkId" is not supported');if(!((r=this._output)!=null&&r.audioElement))return;let i=A.getSavedOutput();i&&(yield(t=(e=this._output.audioElement).setSinkId)==null?void 0:t.call(e,i.deviceId))}catch(i){throw P.log(R.ERROR,"change_output"),d.error("[audio] Output change failed",i),i}})}};var ps=90,us=3,Ti=class extends se{constructor(){super(...arguments);this._lastMemoryStat={percent:0,bytes:0}}onRemoteDataStats(e,t){this._calcMemory(),e.inbound.rtps.map(i=>{let a=typeof i.userId=="string"&&t[i.userId]||null;i.userId=a==null?void 0:a.externalId}),I.onStatistics(e,this._lastMemoryStat)}_calcMemory(){var a;let e=(a=window==null?void 0:window.performance)==null?void 0:a.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>ps?d.warn(`High memory usage: ${t}% (${i} MiB)`):(!this._lastMemoryStat.percent||Math.abs(t-this._lastMemoryStat.percent)>=us)&&(d.debug(`Memory usage: ${t}% (${i} MiB)`),this._lastMemoryStat.percent=t,this._lastMemoryStat.bytes=e.usedJSHeapSize)}};var ms=44100,kt=class{constructor(r,e){this._analyser=null;this._gainNode=null;this._fftBins=null;this._mediaStreamSource=null;this._lastSmoothedLevel=0;this._trackId=r,this._track=e,this._stream=new MediaStream([e]);try{let t=A.getAudioContext();this._gainNode=t.createGain(),this._gainNode.gain.value=1e-5,this._gainNode.connect(t.destination),this._analyser=t.createAnalyser(),this._analyser.fftSize=1024,this._analyser.smoothingTimeConstant=0,this._analyser.connect(this._gainNode),this._fftBins=new Uint8Array(this._analyser.frequencyBinCount),this._mediaStreamSource=t.createMediaStreamSource(this._stream),this._mediaStreamSource.connect(this._analyser)}catch(t){}}get track(){return this._track}get trackId(){return this._trackId}_getBins(){if(!this._fftBins||!this._analyser)return new Uint8Array;this._analyser.getByteFrequencyData(this._fftBins);let r=ms/this._fftBins.length,e=Math.ceil(p.voiceParams.minFreq/r),t=Math.floor(p.voiceParams.maxFreq/r);return this._fftBins.subarray(e,t)}getLevel(){let r=this._getBins(),t=r.reduce((a,o)=>a+o,0)/r.length/255,i=this._lastSmoothedLevel*p.voiceParams.smoothing+t*(1-p.voiceParams.smoothing);return this._lastSmoothedLevel=i,{real:t,smoothed:i}}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),this._stream.removeTrack(this._track)}};var Ri=class extends se{constructor(e){super();this._detector=null;this._interval=null;let t=()=>{this._detector&&I.onLocalVolume(this._detector.getLevel().real,e.getMediaSettings().isAudioEnabled),this._interval=window.setTimeout(t,p.voiceParams.interval)};this._interval=window.setTimeout(t,p.voiceParams.interval);let i=()=>{let a=e.getSendAudioTrack();a&&this.init(a)};this.subscribe(e,"SOURCE_CHANGED",a=>{a.kind==="audio"&&e.getMediaSettings().isAudioEnabled&&i()}),this.subscribe(e,"SOURCE_READY",i),i()}init(e){this._stopDetector(),this._detector=new kt("local",e.clone())}_stopDetector(){this._detector&&(this._detector.track.stop(),this._detector.destroy(),this._detector=null)}destroy(){this.unsubscribe(),this._interval&&(window.clearTimeout(this._interval),this._interval=null),this._stopDetector()}};var wn=(o=>(o.producerNotification="producerNotification",o.producerCommand="producerCommand",o.consumerScreenShare="consumerScreenShare",o.producerScreenShare="producerScreenShare",o.asr="asr",o.animoji="animoji",o))(wn||{}),st=wn;var ht=class ht{constructor(){this._codecUsages=new Map;this.getCurrentTransportTopology=()=>{}}static create(r){let e=new ht;e.getCurrentTransportTopology=r,ht._instance=e}static reportUsage(r){let e=ht._instance,t=e==null?void 0:e.getCurrentTransportTopology();if(!e||!t)return;let i=r.rtps.filter(a=>{var o;return a.type==="outbound-rtp"&&!((o=a.mid)!=null&&o.endsWith("s"))});p.simulcast&&(i=i.reduce((a,o)=>{var l,u;if(o.kind!=="video")return a.concat(o);let s=a.find(m=>m.kind==="video");return s?s.totalEncodeTime=((l=s.totalEncodeTime)!=null?l:0)+((u=o.totalEncodeTime)!=null?u:0):a.push(o),a},[])),i.forEach(a=>{var l;let o=a.kind,s=a.mimeType;if((o==="audio"||o==="video")&&s){let u=a.encoderImplementation,m=[s,"encoder",u].filter(Boolean).join("/");e.saveUsage({kind:o,codecName:m,totalEncodeTime:((l=a.totalEncodeTime)!=null?l:0)*1e3,audioCodecParams:a.sdpFmtpLine,topology:t})}})}saveUsage({kind:r,codecName:e,totalEncodeTime:t,audioCodecParams:i,topology:a}){let o=this._codecUsages.get(r);if(o&&o.codecName!==e&&this.report(o),o&&o.codecName===e){this._codecUsages.set(r,xe(oe({},o),{totalEncodeTime:t,topology:a}));return}this._codecUsages.set(r,{kind:r,codecName:e,audioCodecParams:i,totalEncodeTime:t,topology:a})}report(r){if(r.kind==="video"&&r.totalEncodeTime===0)return;let e={name:R.CODEC_USAGE,codec_implementation:r.codecName,value:r.totalEncodeTime,call_topology:r.topology==="DIRECT"?"D":"S"};r.audioCodecParams&&(e.string_value=r.audioCodecParams),P.logClientStats(e)}static destroy(){var r;(r=ht._instance)==null||r._destroy(),ht._instance=null}_destroy(){this._codecUsages.forEach(r=>{this.report(r)}),this._codecUsages.clear()}};ht._instance=null;var Xe=ht;var Ot=class extends se{constructor(e,t){super();this._state="IDLE";this._pc=null;this._signaling=e,this._mediaSource=t}getState(){return this._state||"IDLE"}};var kn="videochat-epi",hs=5e3,_s=500,_t=class extends se{constructor(e,t,i=!1){super();this._previousPerfStatReportTimestamp=0;this._previousNetworkStatReportTimestamp=Date.now();this._previousCallStatReportTimestamp=Date.now();this._previousCallStatReport=null;this._screenShareStats=[];this._handleScreenSharingStat=e=>{this._screenShareStats.push(e)};this._handleTransportStateChanged=e=>{(this._directTopology&&e==="CONNECTED"||!this._directTopology&&e==="OPENED")&&(this._previousNetworkStatReportTimestamp=Date.now(),this._previousCallStatReportTimestamp=Date.now())};this._signaling=t,this._directTopology=i,this.subscribe(e,"REMOTE_DATA_STATS",this._handleStats.bind(this)),this.subscribe(e,"SCREEN_SHARING_STAT",this._handleScreenSharingStat.bind(this)),this.subscribe(e,"STATE_CHANGED",this._handleTransportStateChanged.bind(this))}destroy(){this.unsubscribe()}static getEstimatedPerformanceIndex(){try{let e=parseInt(localStorage.getItem(kn)||"",10);return isNaN(e)?0:e}catch(e){return 0}}_handleStats(e){return c(this,null,function*(){var a;if(!e.inbound||!e.inbound.rtps)return;let t=Date.now();!this._directTopology&&p.perfStatReportEnabled&&this._previousPerfStatReportTimestamp+hs<=t&&(yield this.reportPerfStats(e),this._previousPerfStatReportTimestamp=t);let i=((a=e.outbound.transport.local)==null?void 0:a.protocol)==="tcp";!this._directTopology&&i&&this._previousNetworkStatReportTimestamp+_s<=t&&(yield this.reportNetworkStats(e),this._previousNetworkStatReportTimestamp=t),p.callStatReportEnabled&&this._previousCallStatReportTimestamp+p.statisticsInterval<=t&&(this._reportCallStats(e),this._previousCallStatReportTimestamp=t)})}reportPerfStats(e){return c(this,null,function*(){let t=e.inbound.rtps.reduce((i,a)=>(a.kind==="video"&&(i.framesDecoded+=a.framesDecoded||0,i.framesReceived+=a.framesReceived||0),i),{framesDecoded:0,framesReceived:0});if(t.framesDecoded)try{let i=yield this._signaling.reportPerfStat(t);localStorage.setItem(kn,i.estimatedPerformanceIndex)}catch(i){}})}reportNetworkStats(e){return c(this,null,function*(){let t={timestamp:e.outbound.transport.timestamp,sendBitrate:e.outbound.rtps.reduce((i,a)=>{var o;return i+((o=a.bandwidth)!=null?o:0)*8},0)};if(t.timestamp)try{yield this._signaling.reportNetworkStat(t)}catch(i){}})}_reportCallStats(e){var u,m,h,T;let t={call_topology:this._directTopology?"D":"S",stat_time_delta:0,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,packets_lost_video:0,packets_sent_video:0,packets_lost_audio:0,packets_sent_audio:0,freeze_count:0,total_freezes_duration:0,rtt:Math.round(e.inbound.transport.currentRoundTripTime*1e3),ss_freeze_count:0,ss_total_freezes_duration:0,local_address:xn(e.inbound.transport.local),local_connection_type:(u=e.inbound.transport.local)==null?void 0:u.type,network_type:(m=e.inbound.transport.local)==null?void 0:m.networkType,transport:(h=e.inbound.transport.local)==null?void 0:h.protocol,remote_address:xn(e.inbound.transport.remote),remote_connection_type:(T=e.inbound.transport.remote)==null?void 0:T.type};this._previousCallStatReport||(this._previousCallStatReport=Object.assign({},t));let i=!1,a=!1;for(e.inbound.rtps.reduce((v,b)=>(b.kind==="video"?(i=!0,b.framesReceived&&(v.jitter_video=v.jitter_video*v.inbound_video_count/(v.inbound_video_count+1)+b.jitter*1e3/(v.inbound_video_count+1),v.interframe_delay_variance=v.interframe_delay_variance*v.inbound_video_count/(v.inbound_video_count+1)+(b.interframeDelayVariance||0)*1e6/(v.inbound_video_count+1),v.inbound_video_count++),v.frames_dropped+=b.framesDropped||0,v.nack_sent+=b.nackCount,v.pli_sent+=b.pliCount,v.fir_sent+=b.firCount,v.freeze_count+=b.freezeCountDelta||0,v.total_freezes_duration+=b.totalFreezesDurationDelta||0):(a=!0,b.totalSamplesReceived&&(v.jitter_audio=v.jitter_audio*v.inbound_audio_count/(v.inbound_audio_count+1)+b.jitter*1e3/(v.inbound_audio_count+1),v.total_audio_energy=v.total_audio_energy*v.inbound_audio_count/(v.inbound_audio_count+1)+(b.totalAudioEnergy||0)/(v.inbound_audio_count+1),v.inbound_audio_count++),v.total_audio_samples_received+=b.totalSamplesReceived||0,v.inserted_audio_samples_for_deceleration+=b.insertedSamplesForDeceleration||0,v.removed_audio_samples_for_acceleration+=b.removedSamplesForAcceleration||0,v.concealed_audio_samples+=b.concealedSamples||0,v.silent_concealed_audio_samples+=b.silentConcealedSamples||0,v.audio_concealment_events+=b.concealmentEvents||0),v),t),e.outbound.rtps.reduce((v,b)=>(b.kind==="video"?(v.nack_received+=b.nackCount,v.pli_received+=b.pliCount,v.fir_received+=b.firCount,v.packets_sent_video+=b.packetsSent):v.packets_sent_audio+=b.packetsSent,v),t),e.remoteInbound.rtps.reduce((v,b)=>(b.kind==="video"?v.packets_lost_video+=b.packetsLost:v.packets_lost_audio+=b.packetsLost,v),t);this._screenShareStats.length;){let v=this._screenShareStats.pop();v!=null&&v.freeze_duration&&(t.ss_freeze_count+=1,t.ss_total_freezes_duration+=v.freeze_duration)}let o={call_topology:t.call_topology,stat_time_delta:Math.max(0,Date.now()-this._previousCallStatReportTimestamp),nack_sent:Math.max(0,t.nack_sent-this._previousCallStatReport.nack_sent),nack_received:Math.max(0,t.nack_received-this._previousCallStatReport.nack_received),pli_sent:Math.max(0,t.pli_sent-this._previousCallStatReport.pli_sent),pli_received:Math.max(0,t.pli_received-this._previousCallStatReport.pli_received),fir_sent:Math.max(0,t.fir_sent-this._previousCallStatReport.fir_sent),fir_received:Math.max(0,t.fir_received-this._previousCallStatReport.fir_received),frames_dropped:Math.max(0,t.frames_dropped-this._previousCallStatReport.frames_dropped),rtt:Math.max(0,t.rtt)};if(navigator.hardwareConcurrency&&(o.cpu_hardware_concurrency=navigator.hardwareConcurrency),i&&!mr(t.jitter_video)&&(o.jitter_video=Math.round(t.jitter_video)),a&&!mr(t.jitter_audio)&&(o.jitter_audio=Math.round(t.jitter_audio)),i&&!mr(t.interframe_delay_variance)&&(o.interframe_delay_variance=t.interframe_delay_variance),t.freeze_count&&t.total_freezes_duration&&(o.freeze_count=t.freeze_count,o.total_freezes_duration=Math.round(t.total_freezes_duration*1e3)),t.ss_freeze_count&&t.ss_total_freezes_duration&&(o.ss_freeze_count=t.ss_freeze_count,o.ss_total_freezes_duration=t.ss_total_freezes_duration),a&&!mr(t.total_audio_samples_received)){let v=Math.max(0,t.total_audio_samples_received-this._previousCallStatReport.total_audio_samples_received),b=Math.max(0,t.inserted_audio_samples_for_deceleration-this._previousCallStatReport.inserted_audio_samples_for_deceleration),L=Math.max(0,t.removed_audio_samples_for_acceleration-this._previousCallStatReport.removed_audio_samples_for_acceleration),O=Math.max(0,t.concealed_audio_samples-this._previousCallStatReport.concealed_audio_samples),G=Math.max(0,t.silent_concealed_audio_samples-this._previousCallStatReport.silent_concealed_audio_samples),$=Math.max(0,t.audio_concealment_events-this._previousCallStatReport.audio_concealment_events);o.inserted_audio_samples_for_deceleration=xt(b/v*1e3),o.removed_audio_samples_for_acceleration=xt(L/v*1e3),o.concealed_audio_samples=xt(O/v*1e3),o.concealed_silent_audio_samples=xt(G/v*1e3),o.concealment_audio_avg_size=xt(O/$),o.total_audio_energy=t.total_audio_energy}On(t,"local_address","local_connection_type","network_type","transport")&&(o.local_address=t.local_address,o.local_connection_type=t.local_connection_type,o.network_type=t.network_type,o.transport=t.transport),On(t,"remote_address","remote_connection_type")&&(o.remote_address=t.remote_address,o.remote_connection_type=t.remote_connection_type);let s=Math.max(0,t.packets_sent_video-this._previousCallStatReport.packets_sent_video),l=Math.max(0,t.packets_sent_audio-this._previousCallStatReport.packets_sent_audio);if(s>0){let v=Math.max(0,t.packets_lost_video-this._previousCallStatReport.packets_lost_video);o.video_loss=xt(v/s*100)}if(l>0){let v=Math.max(0,t.packets_lost_audio-this._previousCallStatReport.packets_lost_audio);o.audio_loss=xt(v/l*100)}we.logCallStat(o),p.enableLogPerfStatReport&&d.log("Sent call stats",o),this._previousCallStatReport=t}};function On(n,...r){for(let e of r)if(!n.hasOwnProperty(e)||n[e]===void 0)return!1;return!0}function xn(n,r=!1){if(n!=null&&n.address)return n.address+(r?`:${n.port}`:"")}function mr(n){return n===void 0}function xt(n){return Number.isNaN(n)?0:n}var Pi=class{constructor(r,e=null){this.value=NaN;this.weightUp=r,this.weightDown=e!=null?e:r}set(r){this.value=r}update(r){return this.value=this.getNext(r),this.value}getNext(r){if(isNaN(this.value))return r;let e=r<this.value?this.weightDown:this.weightUp;return this.value*(1-e)+r*e}getValue(){return this.value}};var Ln=.25,Nn=.35,gs=85,fs=.1,Ss=1.5,vs=.1,Is=1,Es=.6,Ts=.3;var yi=class extends se{constructor(e){super();this._networkLimits={badNet:{loss:3,rtt:1e3},goodNet:{loss:.5,rtt:600}};this._lastStatSentTimestamp=0;this._currentState="good";this._signaling=e,this._localNetworkStat={rtt:new Pi(Ln,Ln),loss:new Pi(Nn,Nn),bitrate:0},this._remoteNetworkStat={rtt:0,loss:0,bitrate:0},this._lastNetworkStat={rtt:0,loss:0,date:0}}_calcRttRating(e){let t=typeof e=="number"?e:e.getValue(),i=1;if(isNaN(t))return i;let a=Math.round((t-this._networkLimits.goodNet.rtt)/gs);for(let o=0;o<a;o++)i*=1-fs;return i}_calcLossRating(e){let t=typeof e=="number"?e:e.getValue(),i=1;if(isNaN(t))return i;let a=Math.round((t-this._networkLimits.goodNet.loss)/Ss);for(let o=0;o<a;o++)i*=1-vs;return i}_calcBitrateRating(e,t){if(!e||!t)return 1;let a=1-(1-Math.min(e,t)/Math.max(e,t))*Is;return Math.min(a,1)}_calcUDPRating({rtt:e,loss:t}){return this._calcRttRating(e)*this._calcLossRating(t)}_calcRating(e,t,i){return i?this._calcBitrateRating(e.bitrate,t.bitrate):this._calcUDPRating(e)*this._calcUDPRating(t)}_getNetworkState(e){return isNaN(e)||e>=Es?"good":e>=Ts?"medium":"bad"}updateSettings(e){Object.assign(this._networkLimits.badNet,(e==null?void 0:e.badNet)||{}),Object.assign(this._networkLimits.goodNet,(e==null?void 0:e.goodNet)||{})}reportLocal(e){var h;if(!this._signaling.ready)return;let t=((h=e.outbound.transport.local)==null?void 0:h.protocol)==="tcp",i=Math.max(0,Math.round(e.outbound.transport.currentRoundTripTime*1e3)||0),a=e.inbound.rtps.reduce((T,v)=>Math.max(T,v.packetLoss||0),0),o={rtt:this._localNetworkStat.rtt.update(i),loss:this._localNetworkStat.loss.update(a)};if(t){let T=e.outbound.rtps.reduce((v,b)=>{var L;return v+((L=b.bandwidth)!=null?L:0)*8},0);o.bitrate=T,this._localNetworkStat.bitrate=T}let s=Date.now(),l=this._calcRating(this._localNetworkStat,this._remoteNetworkStat,t),u=Math.max(Math.round(l*10)/10,.1),m=this._getNetworkState(u);(t||m!==this._currentState||s-this._lastStatSentTimestamp>p.networkStatisticsInterval)&&(this._lastStatSentTimestamp=s,this._signaling.customData({sdk:Object.assign({type:"bad-net"},o)},null).catch(T=>{d.warn("Unable to send [bad-net]",T)})),this._currentState=m,this._triggerEvent("NETWORK_STATUS",u)}reportRemote(e){let{rtt:t,loss:i,bitrate:a}=e||{};this._remoteNetworkStat.rtt=t||0,this._remoteNetworkStat.loss=i||0,this._remoteNetworkStat.bitrate=a||0}};var Rs=30*1e3,bi=class n extends Ot{constructor(e,t,i,a,o){super(i,a);this._remoteSDP={};this._remoteCandidates={};this._lastRemoteSDP=null;this._animojiDataChannel=null;this._animojiReceiver=null;this._animojiSender=null;this._remoteAnimojiVersion=1;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._networkLimitsForVideo={bad:{loss:4,rtt:1e3},good:{loss:2,rtt:700}};this._videoMaxDimensionsForNet={worst:320,bad:640,good:1280};this._lastVideoMaxDimension=this._videoMaxDimensionsForNet.good;this._lastBadConnection=0;if(this._participantId=e,this._isMaster=t,this._serverSettings=o,this._perfStatReporter=new _t(this,i,!0),this._directStatReporter=new yi(i),this.subscribe(this._signaling,be.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._mediaSource,"TRACK_REPLACED",this._onReplacedTrack.bind(this)),this.subscribe(this._mediaSource,"SOURCE_CHANGED",this._applySettings.bind(this)),this.subscribe(this._directStatReporter,"NETWORK_STATUS",this._onNetworkStatus.bind(this)),this._pc=new RTCPeerConnection({iceServers:p.iceServers,iceTransportPolicy:p.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={},p.vmoji&&this._createDataChannel(this._pc,st.animoji,s=>{var l,u;this._animojiDataChannel=s,this._animojiDataChannel.binaryType="arraybuffer",(l=this._animojiReceiver)==null||l.setDataChannel(this._animojiDataChannel),(u=this._animojiSender)==null||u.setDataChannel(this._animojiDataChannel)}),this._isMaster){try{this._mediaSource.addTrackToPeerConnection(this._pc,!1,!0),this._applySettings()}catch(s){P.log(R.ERROR,"addTrack-direct"),d.error("Unable to add media source tracks",s,{participantId:this._participantId}),this._failedOnCreate=s;return}this._createOffer(!1).catch(s=>{this._state==="IDLE"?this._failedOnCreate=s:this.close(s)})}this._startSettingsInterval()}get participantId(){return this._participantId}updateStatisticsInterval(){this._stopStatInterval(),this._isDeadConnection()||this._startStatInterval()}_isDeadConnection(){return["IDLE","CLOSED","FAILED"].includes(this.getState())}open(e=null){return c(this,null,function*(){if(this._isOpen){d.warn("DirectTransport: Already opened",{participantId:this._participantId});return}if(this._failedOnCreate){this.close(this._failedOnCreate);return}if(d.debug("DirectTransport: Open transport",{participantId:this._participantId}),this._isOpen=!0,this._remotePeerId=e,!this._isMaster)try{this._mediaSource.addTrackToPeerConnection(this._pc,!1,!0),this._applySettings()}catch(i){P.log(R.ERROR,"addTrack-direct"),d.error("DirectTransport: Unable to add media source tracks",i,{participantId:this._participantId}),this.close(i);return}this._setState("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){lr(e,this._serverSettings)||(this._serverSettings=e,this._applySettings())}preventRestart(){this._reconnectionPrevented=!0}allowRestart(){this._reconnectionPrevented=!1}setAnimojiTransport(e,t){if(p.vmoji&&(this._animojiReceiver=e,this._animojiSender=t,e.setParticipantId(this._participantId),this._animojiDataChannel)){e.setDataChannel(this._animojiDataChannel),t.setDataChannel(this._animojiDataChannel);return}}close(e){this._isOpen&&(this._isOpen=!1,this._stopReconnection(),this._remoteStream&&(this._remoteStream.getTracks().forEach(t=>{t.stop(),this._triggerEvent("REMOTE_TRACK_REMOVED",this._remoteStream,t)}),this._remoteStream=null),this._stopStatInterval(),this._stopSettingsInterval(),this._pc&&(this._animojiDataChannel&&(this._animojiDataChannel.onopen=null,this._animojiDataChannel.onmessage=null,this._animojiDataChannel.onerror=null,this._animojiDataChannel.close()),this._pc.onicecandidate=null,this._pc.ontrack=null,this._pc.oniceconnectionstatechange=null,this._pc.onconnectionstatechange=null,this._pc.onsignalingstatechange=null,this._pc.close(),this._pc=null),this._onNetworkStatus(1),this.unsubscribe(),e?(d.error("DirectTransport: Closed",e,{participantId:this._participantId}),this._setState("FAILED")):(d.debug("DirectTransport: Closed",{participantId:this._participantId}),this._setState("CLOSED")),this._triggerEvent("PEER_CONNECTION_CLOSED"))}_setState(e){this._state!==e&&(d.debug(`DirectTransport: State changed to ${e}`,{participantId:this._participantId}),this._state=e,this._triggerEvent("STATE_CHANGED",e))}_onSignalingNotification(e){var t;switch(e.notification){case V.TRANSMITTED_DATA:this._handleTransmittedData(e);break;case V.SETTINGS_UPDATE:this._directStatReporter.updateSettings(e.settings);break;case V.CUSTOM_DATA:e.data.hasOwnProperty("sdk")&&this._directStatReporter.reportRemote((t=e.data)==null?void 0:t.sdk);break}}_handleTransmittedData(e){let t=e.data,i=E.getPeerIdString(e.peerId);E.composeMessageId(e)===this._participantId&&(t.candidate&&t.candidate.candidate?this._addIceCandidate(i,t.candidate).catch(this.close.bind(this)):t.sdp&&(this._remoteAnimojiVersion=t.animojiVersion||1,this._setRemoteDescription(i,t.sdp).catch(this.close.bind(this))))}_addIceCandidate(e,t){return c(this,null,function*(){if(this._isOpen&&(!this._remotePeerId||this._remotePeerId===e)&&this._pc&&this._pc.remoteDescription){d.debug("Add remote ice candidate",{participantId:this._participantId,candidate:t});try{yield this._pc.addIceCandidate(new RTCIceCandidate(t))}catch(i){throw P.log(R.ERROR,"addIceCandidate-direct"),d.error("Unable to add remote ice candidate",i,{participantId:this._participantId,candidate:t}),i}}else d.debug("Cache remote ice candidate",{participantId:this._participantId,candidate:t}),this._remoteCandidates[e]=this._remoteCandidates[e]||[],this._remoteCandidates[e].push(t)})}_setRemoteCandidates(e){return c(this,null,function*(){if(!this._remoteCandidates[e]){d.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(a){}})}_setRemoteDescription(e,t){return c(this,null,function*(){var i;if(this._isOpen&&(!this._remotePeerId||this._remotePeerId===e)&&this._pc){if(((i=this._lastRemoteSDP)==null?void 0:i.sdp)===t.sdp)return;this._lastRemoteSDP=t,t=n._patchRemoteDescription(t),d.debug("Add remote description",{participantId:this._participantId,sdp:t}),this._calcFingerprint(t.sdp);try{yield this._pc.setRemoteDescription(t),yield this._setRemoteCandidates(e),this._processAnimojiProtocolVersion(this._remoteAnimojiVersion)}catch(a){throw P.log(R.ERROR,"setRemoteDescription-direct"),d.error("Unable to set remote description",a,{participantId:this._participantId,sdp:t}),a}}else this._remoteSDP[e]=t})}_processAnimojiProtocolVersion(e){var i,a;let t=Math.min(e,((i=p.vmojiOptions)==null?void 0:i.protocolVersion)||1);(a=this._animojiSender)==null||a.setProtocolVersion(t)}_onAddTrack(e){d.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("REMOTE_TRACK_REMOVED",this._remoteStream,t.track)}),this._triggerEvent("REMOTE_TRACK_ADDED",this._remoteStream,e.track)}_handleIceCandidate(e){return c(this,null,function*(){e.candidate&&this._signaling.ready&&(d.debug("Local ice candidate",{participantId:this._participantId,candidate:e.candidate}),yield this._signaling.sendCandidate(this._participantId,e.candidate))})}_onSignalingStateChange(){var t,i;d.debug(`DirectTransport: Signaling state changed to ${(t=this._pc)==null?void 0:t.signalingState}`,{participantId:this._participantId});let e={animojiVersion:p.vmojiOptions.protocolVersion||1};switch((i=this._pc)==null?void 0:i.signalingState){case"have-local-offer":let a=this._pc.localDescription;a?this._signaling.sendSdp(this._participantId,a,e).catch(this.close.bind(this)):this.close(new Error);break;case"have-remote-offer":this._createAnswer().then(o=>this._signaling.sendSdp(this._participantId,o,e)).catch(this.close.bind(this));break}}_onIceConnectionStateChange(){var e,t;switch(d.debug(`DirectTransport: Ice Connection state changed to ${(e=this._pc)==null?void 0:e.iceConnectionState}`,{participantId:this._participantId}),(t=this._pc)==null?void 0:t.iceConnectionState){case"checking":let i=this.getState();i==="IDLE"||i==="OPENED"?this._setState("CONNECTING"):this._setState("RECONNECTING");break}}_onConnectionStateChange(){var e,t,i;switch(d.debug(`DirectTransport: Connection state changed to ${(e=this._pc)==null?void 0:e.connectionState}`,{participantId:this._participantId}),P.log(R.ICE_CONNECTION_STATE,(t=this._pc)==null?void 0:t.connectionState),(i=this._pc)==null?void 0:i.connectionState){case"connected":this._neverConnected=!1,this._setState("CONNECTED"),this._stopReconnection(),E.getPeerConnectionHostInfo(this._pc).then(a=>{a!=null&&a.local&&(P.log(R.ICE_CONNECTION_TYPE,a.local.type),d.debug("Selected ICE candidates",a))}),this._startStatInterval();break;case"failed":case"disconnected":this._reconnectionPrevented?this.close(new Error(`Ice connection ${this._pc.connectionState}`)):(this._setState("RECONNECTING"),this._startReconnection());break;case"closed":this.close(new Error("Ice connection closed"));break}}_startReconnection(){this._reconnectionTimeout||this._iceRestartTimeout||(d.log("Waiting for reconnection...",{participantId:this._participantId}),this._reconnectionTimeout=window.setTimeout(()=>{this._reconnectionTimeout=null,this._neverConnected?this._requestTopologySwitch():this._startIceRestart()},p.transportConnectionWaitTime))}_requestTopologySwitch(){this._isMaster&&this._signaling.ready&&(d.log("Switch topology DIRECT to SERVER",{participantId:this._participantId}),this._signaling.switchTopology("SERVER"))}_stopReconnection(){this._reconnectionTimeout&&(clearTimeout(this._reconnectionTimeout),this._reconnectionTimeout=null),this._iceRestartTimeout&&(clearTimeout(this._iceRestartTimeout),this._iceRestartTimeout=null)}_startIceRestart(){this._isMaster?(P.log(R.ICE_RESTART),d.log("Ice restart",{participantId:this._participantId}),this._createOffer(!0).catch(this.close.bind(this))):d.debug("Waiting for ice restart...",{participantId:this._participantId}),this._iceRestartTimeout=window.setTimeout(()=>{this._iceRestartTimeout=null,d.error("Ice restart failed",{participantId:this._participantId}),P.log(R.ERROR,"iceRestart-direct"),this._requestTopologySwitch()},p.iceRestartWaitTime)}_createOffer(e){return c(this,null,function*(){var a,o;let t={iceRestart:e,offerToReceiveAudio:!0,offerToReceiveVideo:!0};d.debug("Create offer",{participantId:this._participantId,options:t});let i;try{i=yield(a=this._pc)==null?void 0:a.createOffer(t),d.debug("Created offer",{participantId:this._participantId,offer:i}),i=n._patchLocalDescription(i)}catch(s){throw d.error("Unable to create offer",s,{participantId:this._participantId}),P.log(R.ERROR,"createOffer-direct"),s}try{return d.debug("Set local description",{participantId:this._participantId,offer:i}),this._calcFingerprint(i.sdp),yield(o=this._pc)==null?void 0:o.setLocalDescription(i),i}catch(s){throw d.error("Unable to set local description",s,{participantId:this._participantId}),P.log(R.ERROR,"setLocalDescription-direct"),s}})}_createAnswer(){return c(this,null,function*(){var t,i;d.debug("Create answer",{participantId:this._participantId});let e;try{e=yield(t=this._pc)==null?void 0:t.createAnswer(),d.debug("Created answer",{participantId:this._participantId,answer:e}),e=n._patchLocalDescription(e)}catch(a){throw d.error("Unable to create answer",a,{participantId:this._participantId}),P.log(R.ERROR,"createAnswer-direct"),a}try{return d.debug("Set local description",{participantId:this._participantId,answer:e}),this._calcFingerprint(e.sdp),yield(i=this._pc)==null?void 0:i.setLocalDescription(e),e}catch(a){throw d.error("Unable to set local description",a,{participantId:this._participantId}),P.log(R.ERROR,"setLocalDescription-direct"),a}})}static _patchLocalDescription(e){let t=!!A.baseChromeVersion();return e.sdp=E.patchLocalSDP(e.sdp,p.preferH264&&A.canPreferH264(),A.isBrokenH264Decoder(),p.preferVP9,p.h264spsPpsIdrInKeyframe,t&&p.audioNack,p.p2pAudioRed),e}static _patchRemoteDescription(e){return e.sdp=E.patchRemoteSDP(e.sdp,!1,!1,!1,p.preferVP9,A.isBrokenVP9Encoder(),A.isBrokenVP9Decoder()),e}_onReplacedTrack(e){this._pc&&(this._pc.getSenders().forEach(t=>{t.track&&t.track.kind===e.kind&&t.track.contentHint===e.contentHint&&t.replaceTrack(e).catch(i=>{d.error("DirectTransport: Unable to replace track",i,{participantId:this._participantId}),P.log(R.ERROR,"replaceTrack-direct")})}),this._applySettings())}_startStatInterval(){if(this._statInterval)return;let e=()=>{if(this._isDeadConnection()){this._stopStatInterval();return}li(this._pc,this._lastStat,void 0,!0).then(t=>{var a;this._lastStat=t,Xe.reportUsage(t);let i={inbound:{topology:"DIRECT",transport:t.transport,rtps:t.rtps.filter(o=>o.type==="inbound-rtp"?(o.userId=this._participantId,!0):!1)},outbound:{topology:"DIRECT",transport:t.transport,rtps:t.rtps.filter(o=>o.type==="outbound-rtp")},remoteInbound:{topology:"DIRECT",transport:t.transport,rtps:(a=t.remoteRtps)!=null?a:[]}};this._checkPPTNetwork(i),this._directStatReporter.reportLocal(i),this._triggerEvent("REMOTE_DATA_STATS",i),this._statInterval=window.setTimeout(e,p.statisticsInterval)})};this._statInterval=window.setTimeout(e,p.statisticsInterval)}_isSVCSupported(e,t){return c(this,null,function*(){let i=this._mediaSource.getSendVideoTrack(),a=e.outbound.rtps.find(l=>l.kind==="video");if(!(a!=null&&a.mimeType)||!(a!=null&&a.bandwidth)||!i)return!1;let o=i.getSettings();if(!o.width||!o.height||!o.frameRate)return!1;let s={type:A.browserName()==="Firefox"?"transmission":"webrtc",video:{contentType:a.mimeType,width:o.width,height:o.height,bitrate:a.bandwidth,framerate:o.frameRate,scalabilityMode:t}};try{return(yield navigator.mediaCapabilities.encodingInfo(s)).supported||!1}catch(l){return d.warn("Failed to get encodingInfo",s,l),!1}})}_checkPPTNetwork(e){return c(this,null,function*(){if(!p.switchVideoAtBadNetwork||!e.inbound.transport.averageNetStat)return;let{averageNetStat:t}=e.inbound.transport,i=t.currentRoundTripTime<=this._networkLimitsForVideo.good.rtt&&t.lostPercent<=this._networkLimitsForVideo.good.loss,a=t.currentRoundTripTime>=this._networkLimitsForVideo.bad.rtt||t.lostPercent>=this._networkLimitsForVideo.bad.loss,o=t.currentRoundTripTime<this._networkLimitsForVideo.bad.rtt,s=this._videoMaxDimensionsForNet.good,l="L1T1";if(a?(this._lastBadConnection=Date.now(),o?(s=this._videoMaxDimensionsForNet.bad,l="L1T2"):(s=this._videoMaxDimensionsForNet.worst,l="L1T3")):i&&(s=this._videoMaxDimensionsForNet.good,l="L1T1"),!(s<this._lastVideoMaxDimension||Date.now()-this._lastBadConnection>Rs)||this._lastVideoMaxDimension===s)return;let m=this._serverSettings.camera;if(!m||!(yield this._isSVCSupported(e,l)))return;d.debug("Switch outbound video frame size and scalabilityMode",{scalabilityMode:l,averageNetStat:t,nextVideoMaxDimension:s}),this._lastVideoMaxDimension=s;let T=xe(oe({},this._serverSettings),{camera:xe(oe({},m),{scalabilityMode:l,maxDimension:this._lastVideoMaxDimension})});this.updateSettings(T)})}_stopStatInterval(){this._statInterval&&(window.clearTimeout(this._statInterval),this._statInterval=null)}_onNetworkStatus(e){let t={};t[this._participantId]=t[""]=e,this._triggerEvent("NETWORK_STATUS",t)}_startSettingsInterval(){if(this._settingsInterval)return;let t=()=>{if(!this._pc){this._stopSettingsInterval();return}this._applySettings(),this._settingsInterval=window.setTimeout(t,2e3)};this._settingsInterval=window.setTimeout(t,2e3)}_stopSettingsInterval(){this._settingsInterval&&(window.clearTimeout(this._settingsInterval),this._settingsInterval=null)}_calcFingerprint(e){let t=E.sdpFingerprint(e);if(t===null){d.warn("Fingerprint calculation is unsupported");return}this._fingerprint===null?this._fingerprint=t:(I.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=E.applySettings(this._pc,e,this._prevConsumerSettings))}_createDataChannel(e,t,i){d.debug(`[${t}] data channel opening`);let a=e.createDataChannel(t,{negotiated:!0,id:1});a.onopen=()=>{let o=a.readyState;o==="open"?(d.debug(`[${t}] data channel opened`),a.onerror=s=>{d.error(`[${t}] data channel error`,s)},i(a)):d.error(`[${t}] data channel open failed, state [${o}]`)}}};var Cs=16,hr=class n{constructor(r,e,t){d.debug("AsrReceiver started"),this._datachannel=r,this._participantIdRegistry=e,this._asrCallback=t,this._textDecoder=new TextDecoder,this._datachannel.onmessage=i=>this._onDataChannelMessage(i.data)}static parse(r){let e=new DataView(r),t=e.getUint8(0),i=e.getUint8(1);if(i!==0)throw new Error(`Unsupported message type. Message type: ${i}`);let a=e.getUint16(2),o=e.getUint32(4),s=e.getUint32(8),l=e.getUint32(12);if(t!==1)throw new Error(`Unexpected protocol version. Got ${t}, expected 1`);return{sequence:a,ssrc:o,timestamp:s,duration:l,data:r.slice(Cs)}}_onDataChannelMessage(r){var a,o;let e=n.parse(r),t=(o=(a=this._participantIdRegistry)==null?void 0:a.getStreamDescription(e.ssrc))==null?void 0:o.participantId;if(!t){d.warn(`Participant id for ssrc ${e.ssrc} not found in registry`);return}let i={participantId:t,text:this._textDecoder.decode(e.data),timestamp:e.timestamp,duration:e.duration};this._asrCallback(i)}destroy(){this._datachannel.onmessage=null}};import{decode as gt}from"messagepack";var _r=class{constructor(){this.streamDescriptionByCompactId=new Map;this.compactIdByStreamDescription=new Map}getStreamDescription(r){return this.streamDescriptionByCompactId.get(r)}getCompactId(r){return this.compactIdByStreamDescription.get(r)}handleMessage(r){var a,o;let e=new Uint8Array(r),t=e[0],i=e.subarray(1);switch(t){case 1:let s=gt(i);return Object.entries(s).forEach(([L,O])=>{let G=Si(L);this.streamDescriptionByCompactId.set(O,G),this.compactIdByStreamDescription.set(L,O)}),null;case 2:case 4:let l=gt(i),u=[];for(let L of l){let O=this.getStreamDescription(L);O&&u.push(O.participantId)}return t===2?{type:"notification",notification:V.AUDIO_ACTIVITY,activeParticipants:u}:{type:"notification",notification:V.STALLED_ACTIVITY,stalledParticipants:u};case 3:let m=gt(i);return{type:"notification",notification:V.SPEAKER_CHANGED,speaker:(a=this.getStreamDescription(m))==null?void 0:a.participantId};case 5:let h=gt(i);return{type:"notification",notification:V.VIDEO_QUALITY_UPDATE,quality:{maxBitrate:h[0],maxDimension:h[1]}};case 6:let T=gt(i),v={};for(let[L,O]of Object.entries(T)){let G=(o=this.getStreamDescription(Number(L)))==null?void 0:o.participantId;G&&(v[G]=O/100)}return{type:"notification",notification:V.NETWORK_STATUS,statuses:v};case 7:return this._createParticipantSourcesUpdateNotification(i);case 8:{let O=gt(i).map(G=>{var ri;let[$,le,ae,z,he,Be,xi]=G;return{participantId:(ri=this.getStreamDescription($))==null?void 0:ri.participantId,gain:le,pause:ae,offset:z,mute:he,liveStatus:Be,startTimeMs:xi}});return{type:"notification",notification:V.MOVIE_UPDATE_NOTIFICATION,data:O}}case 9:let b=gt(i);return{type:"notification",notification:V.VIDEO_SUSPEND_SUGGEST,bandwidth:b};default:return d.debug("unsupported message type: "+t),null}}_createParticipantSourcesUpdateNotification(r){let e=gt(r),t=[];for(let[i,a]of Object.entries(e)){let o=a[0],s=a[1],l=a[2],u=!!a[3],m=a[4]!==null?!!a[4]:void 0,h;if(o!==null){if(h=this.getStreamDescription(o),!h){d.error(`could not uncompress participant ID ${o}`);continue}}else h=null;if(l===null){d.error("unexpected null sequenceNumber",i,a);continue}let T=Ke.PARTICIPANT_AGNOSTIC_TRACK_PREFIX+"-"+i,v=s?s>>>0:null;t.push({participantStreamDescription:h,streamId:T,rtpTimestamp:v,sequenceNumber:l,fastScreenShare:u,suspend:m})}return{type:"notification",notification:V.PARTICIPANT_SOURCES_UPDATE,participantUpdateInfos:t}}};var Ps=90,ys=4294967295,Mi=class n extends Ot{constructor(e,t,i){super(e,t);this._producerNotification=null;this._producerCommand=null;this._producerScreen=null;this._consumerScreen=null;this._asr=null;this._animojiDataChannel=null;this._animojiReceiver=null;this._animojiSender=null;this._isOpen=!1;this._observer=!1;this._reconnectionPrevented=!1;this._statInterval=null;this._settingsInterval=null;this._statBytes={};this._ssrcMap={};this._ssrcMapUpdated=!1;this._producerOfferIsProcessing=!1;this._producerNextOffer=null;this._lastStat=null;this._prevConsumerSettings={};this._asrTrack=null;this._captureSender=null;this._captureReceiver=null;this._participantIdRegistry=null;this._disabledSenders=new Set;this._rtpReceiversByStreamId={};this._producerSessionId="";this._newAudioShareTrack=null;this._simulcastInfo=null;this.subscribe(this._signaling,be.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._mediaSource,"TRACK_REPLACED",this._onReplacedTrack.bind(this)),this.subscribe(this._mediaSource,"SOURCE_CHANGED",this._applyConsumerSettings.bind(this)),this.subscribe(this._mediaSource,"SCREEN_STATUS",this._onScreenSharingStatus.bind(this)),this._createPerfStatsReporter(),this._serverSettings=i,d.debug("ServerTransport: Created")}updateStatisticsInterval(){this._stopStatInterval();let e=this.getState();e!=="IDLE"&&e!=="CLOSED"&&e!=="FAILED"&&this._startStatInterval()}open(e=!1){if(this._isOpen){d.log("ServerTransport: Already opened connections");return}this._isOpen=!0,this._observer=e,this._openConnection()}close(e){this._isOpen&&(this._isOpen=!1,this._closeConnection(),this.unsubscribe(),e?(d.error("ServerTransport: Closed",e),this._setState("FAILED")):(d.debug("ServerTransport: Closed"),this._setState("CLOSED")))}removeParticipant(e){var t;(t=this._captureReceiver)==null||t.close(e)}preventRestart(){this._reconnectionPrevented=!0}allowRestart(){this._reconnectionPrevented=!1}updateSettings(e){lr(e,this._serverSettings)||(this._serverSettings=e,this._applyConsumerSettings())}setAnimojiTransport(e,t){if(p.vmoji&&(this._animojiReceiver=e,this._animojiSender=t,this._participantIdRegistry&&e.setParticipantIdRegistry(this._participantIdRegistry),this._animojiDataChannel)){e.setDataChannel(this._animojiDataChannel),t.setDataChannel(this._animojiDataChannel);return}}onCameraResolutionChanged(){return c(this,null,function*(){p.simulcast&&A.isSimulcastSupportedByBrowser()&&(yield this._changeSimulcastInfo(!0,!1))})}_createPerfStatsReporter(){var e;(e=this._perfStatReporter)==null||e.destroy(),this._perfStatReporter=new _t(this,this._signaling)}_closeConnection(){this._stopStatInterval(),this._stopSettingsInterval(),this._removeAsrTrack(),this._removeCaptureSender(),this._removeCaptureReceiver(),this._simulcastInfo=null,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,n._closeDataChannel(this._producerNotification),n._closeDataChannel(this._producerCommand),n._closeDataChannel(this._producerScreen),n._closeDataChannel(this._consumerScreen),n._closeDataChannel(this._asr),n._closeDataChannel(this._animojiDataChannel),this._pc.close(),this._pc=null,this._producerOfferIsProcessing=!1,this._producerNextOffer=null),this._triggerEvent("PEER_CONNECTION_CLOSED")}static _closeDataChannel(e){e&&(e.onopen=null,e.onmessage=null,e.onerror=null,e.close())}_createDataChannel(e,t,i){d.debug(`[${t}] data channel opening`);let a=e.createDataChannel(t,{ordered:!0});a.onopen=()=>{let o=a.readyState;o==="open"?(d.debug(`[${t}] data channel opened`),i(a)):d.error(`[${t}] data channel open failed, state [${o}]`)},a.onerror=o=>{let s=o.error;d.error(`[${t}] data channel error`,s==null?void 0:s.errorDetail,s==null?void 0:s.message)}}_openConnection(e=!1){d.debug("ServerTransport: Open single connection"),this._pc=new RTCPeerConnection({},{optional:[{googSuspendBelowMinBitrate:!1}]}),this._pc.ontrack=this._onAddTrack.bind(this,this._pc),this._pc.onconnectionstatechange=E.debounce(t=>{this._pc&&this._onConnectionStateChange(this._pc,t)},500),this._pc.onsignalingstatechange=n._onSignalingStateChange.bind(this,this._pc),this._participantIdRegistry=new _r,this._signaling.setParticipantIdRegistry(this._participantIdRegistry),p.producerNotificationDataChannel&&this._createDataChannel(this._pc,st.producerNotification,t=>{this._producerNotification=t,this._producerNotification.binaryType="arraybuffer",this._signaling.setProducerNotificationDataChannel(t)}),p.producerCommandDataChannel&&(this._signaling.useCommandDataChannel(!0),this._createDataChannel(this._pc,st.producerCommand,t=>{this._producerCommand=t,this._signaling.setProducerCommandDataChannel(t)})),p.producerScreenDataChannel&&this._createDataChannel(this._pc,st.producerScreenShare,t=>{this._producerScreen=t,this._producerScreen.binaryType="arraybuffer",this._createCaptureReceiver()}),p.asrDataChannel&&this._createDataChannel(this._pc,st.asr,t=>{this._asr=t,this._asr.binaryType="arraybuffer",this._removeAsrTrack(),this._asrTrack=new hr(t,this._participantIdRegistry,i=>{this._onAsrTranscription(i)})}),p.vmoji&&this._createDataChannel(this._pc,st.animoji,t=>{var i,a,o,s;this._animojiDataChannel=t,this._animojiDataChannel.binaryType="arraybuffer",(i=this._animojiReceiver)==null||i.setDataChannel(t),(a=this._animojiReceiver)==null||a.setParticipantIdRegistry(this._participantIdRegistry),(o=this._animojiSender)==null||o.setDataChannel(t),(s=this._animojiSender)==null||s.setProtocolVersion(p.vmojiOptions.protocolVersion||1)}),this._newAudioShareTrack=this._mediaSource.getAudioShareTrack();try{this._mediaSource.addTrackToPeerConnection(this._pc,this._observer,!1),this._prevConsumerSettings={},this._applyConsumerSettings()}catch(t){d.error("ServerTransport: Unable to add media source tracks",t),P.log(R.ERROR,"addTrack-single"),this.close(t);return}p.consumerScreenDataChannel&&this._createDataChannel(this._pc,st.consumerScreenShare,t=>{this._consumerScreen=t,this._consumerScreen.binaryType="arraybuffer";let i=this._mediaSource.getScreenTrack();i&&this._createCaptureSender(i)}),e||this._allocateConsumer(),this._setState("OPENED"),this._startStatInterval(),this._startSettingsInterval()}_removeAsrTrack(){var e;(e=this._asrTrack)==null||e.destroy(),this._asrTrack=null}_reconnect(){this.getState()!=="OPENED"&&(this._setState("RECONNECTING"),this._closeConnection(),this._openConnection(!0))}_signalActiveParticipants(e){this._triggerEvent("SIGNALLED_ACTIVE_PARTICIPANTS",e)}_signalStalledParticipants(e){this._triggerEvent("SIGNALLED_STALLED_PARTICIPANTS",e)}_signalSpeakerChanged(e){this._triggerEvent("SIGNALLED_SPEAKER_CHANGED",e)}_signalNetworkStatus(e){this._triggerEvent("NETWORK_STATUS",e)}_updateSSRCMap(e){e&&e.sdp.split(`
|
|
12
|
-
`).forEach(t=>{let i=`a=ssrc:([0-9]+) label:(audio|video)-((?:[ug]?[\\d]+)|(?:mix)|(?:${Ke.PARTICIPANT_AGNOSTIC_TRACK_PREFIX}-[0-9]+))`,a=new RegExp(i).exec(t);a&&(this._ssrcMap[a[1]]=a[3],this._ssrcMapUpdated=!0)})}_createCaptureSender(e){let t=this._mediaSource.getMediaSettings();!e||!p.consumerScreenDataChannel||!this._consumerScreen||!t.isScreenSharingEnabled||(this._captureSender&&this._removeCaptureSender(),this._captureSender=new Pt(e,this._consumerScreen,this._signaling,t.isFastScreenSharingEnabled))}_removeCaptureSender(){var e;(e=this._captureSender)==null||e.destroy(),this._captureSender=null}_createCaptureReceiver(){!p.producerScreenDataChannel||!this._producerScreen||(this._captureReceiver&&this._removeCaptureReceiver(),this._captureReceiver=new Rt(this._producerScreen,this._participantIdRegistry,(e,t)=>{this._triggerEvent("REMOTE_STREAM_SECOND",e,t)},e=>{this._triggerEvent("REMOTE_STREAM_SECOND",e,null)},e=>{this._triggerEvent("SCREEN_SHARING_STAT",e)}))}_removeCaptureReceiver(){var e;(e=this._captureReceiver)==null||e.destroy(),this._captureReceiver=null}_applyConsumerSettings(){let e=this._mediaSource.getMediaSettings().isScreenSharingEnabled&&!p.consumerScreenDataChannel?this._serverSettings.screenSharing:this._serverSettings.camera;if(e&&this._pc){let t=[];this._pc.getSenders().forEach(i=>{if(!i.track||i.track.kind!=="video")return;let a=!this._disabledSenders.has(i),o=e.maxDimension!==0;if(a&&!o){d.log("Disabling video upload"),this._disabledSenders.add(i),i.replaceTrack(A.getBlackMediaTrack()).catch(l=>{d.error("Could not disable video upload",l)});return}let s=this._mediaSource.getSendVideoTrack();if(!a&&o&&s){d.log("Enabling video upload"),this._disabledSenders.delete(i);let l=i.track;l.enabled=s.enabled,i.replaceTrack(s).then(()=>l.stop()).catch(u=>{d.error("Could not enable video upload",u)})}E.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("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),Xe.reportUsage(t)}).catch(()=>{}),this._statInterval=window.setTimeout(e,p.statisticsInterval)};this._statInterval=window.setTimeout(e,p.statisticsInterval)}_stopStatInterval(){this._statInterval&&(window.clearTimeout(this._statInterval),this._statInterval=null),this._statBytes={}}_startSettingsInterval(){if(this._settingsInterval)return;let t=()=>{if(!this._pc){this._stopSettingsInterval();return}this._applyConsumerSettings(),this._settingsInterval=window.setTimeout(t,2e3)};this._settingsInterval=window.setTimeout(t,2e3)}_stopSettingsInterval(){this._settingsInterval&&(window.clearTimeout(this._settingsInterval),this._settingsInterval=null)}_collectStat(){return c(this,null,function*(){if(!this._pc)return Promise.reject();this._ssrcMapUpdated&&(this._lastStat=null,this._ssrcMapUpdated=!1,this._createPerfStatsReporter());let e=yield li(this._pc,this._lastStat,this._ssrcMap,!0);return this._lastStat=e,e})}_reportStats(e){var t;this._triggerEvent("REMOTE_DATA_STATS",{inbound:{topology:"SERVER",transport:e.transport,rtps:e.rtps.filter(i=>i.type==="inbound-rtp")},outbound:{topology:"SERVER",transport:e.transport,rtps:e.rtps.filter(i=>i.type==="outbound-rtp")},remoteInbound:{topology:"SERVER",transport:e.transport,rtps:(t=e.remoteRtps)!=null?t:[]}})}_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=Ke.AUDIO_MIX,a=this._statBytes[i],o=!1;if(a){let s=t.bytesReceived-a.bytesReceived;s>=0&&s<=5&&(o=!0),a.stalled!==o&&this._triggerEvent("AUDIO_MIX_STALL",o)}this._statBytes[i]={bytesReceived:t.bytesReceived,stalled:o}}_allocateConsumer(){if(!this._signaling.ready)return;let e={estimatedPerformanceIndex:_t.getEstimatedPerformanceIndex(),audioMix:!0,consumerUpdate:!0,producerNotificationDataChannelVersion:p.producerNotificationDataChannel?8:0,producerCommandDataChannelVersion:p.producerCommandDataChannel?3:0,consumerScreenDataChannelVersion:p.consumerScreenDataChannel?1:0,producerScreenDataChannelVersion:p.producerScreenDataChannel?1:0,asrDataChannelVersion:p.asrDataChannel?1:0,animojiDataChannelVersion:p.vmoji?p.vmojiOptions.protocolVersion:1,animojiBackendRender:!p.vmojiOptions.renderingOptions.useFullClientRendering,onDemandTracks:!0,unifiedPlan:!0,singleSession:!0,videoTracksCount:p.videoTracksCount,red:p.serverAudioRed,audioShare:p.audioShare,fastScreenShare:p.fastScreenShare,videoSuspend:p.videoSuspend,simulcast:p.simulcast&&A.isSimulcastSupportedByBrowser()};!p.videoTracksCount&&!this._observer&&d.warn("Setting videoTracksCount to 0 is deprecated"),this._signaling.allocateConsumer(null,e)}_processOffer(e){return c(this,null,function*(){if(!this._pc)throw new Error("Interrupt allocation");let t=p.simulcast&&A.isSimulcastSupportedByBrowser(),i=t;try{yield this._pc.setRemoteDescription(e)}catch(s){throw d.error("[single] unable to set remote offer",s),P.log(R.ERROR,"setRemoteDescription-single"),s}let a=this._findFirstSimTransceiver();if(t)if(a){d.log(`_processOffer: caps.simulcast=${p.simulcast} mid=${a.mid} dir=${a.direction}`);let s=this._mediaSource.getStream(),l=yield this._setupSimulcastTransceiver(s,a);d.log("_processOffer: simulcastInfo",l),l||(d.log(`_processOffer: simulcast transceiver not found in server offer mid=${a.mid}, disable simulcast`),i=!1)}else d.log("_processOffer: simulcast transceiver not found in server offer, disable simulcast"),i=!1;let o;try{if(yield this._handleTracks(),d.debug("[single] create local answer"),!this._pc)throw new Error("Interrupt allocation");o=yield this._pc.createAnswer()}catch(s){throw d.error("[single] unable to create answer",s),P.log(R.ERROR,"createAnswer-single"),s}try{if(!this._pc)throw new Error("Interrupt allocation");o.sdp=E.patchLocalSDP(o.sdp,!1,A.isBrokenH264Decoder(),!1,p.h264spsPpsIdrInKeyframe),d.debug("[single] set local answer",{answer:o}),yield this._pc.setLocalDescription(o)}catch(s){throw d.error("[single] unable to set local answer",s),P.log(R.ERROR,"setLocalDescription-single"),s}if(i&&a){o.sdp=E.patchSimulcastAnswerSdp(o.sdp,a,ct.WIDTH,ct.HEIGHT);for(let s of this._pc.getTransceivers())s.mid===null&&s.stop()}try{d.debug("[single] transmit local answer",{answer:o}),this._updateSSRCMap(e),yield this._signaling.acceptProducer(o,Object.keys(this._ssrcMap)),d.debug("[single] remote offer has been processed")}catch(s){d.warn("[single] unable to send local answer",s),P.log(R.ERROR,"acceptProducer")}i&&(yield this._changeSimulcastInfo(!0,!0))})}_findFirstSimTransceiver(){var e,t,i,a;if(!this._pc)return null;for(let o of this._pc.getTransceivers()){let s=(e=o.sender)!=null&&e.track?(t=o.sender.track)==null?void 0:t.kind:(a=(i=o.receiver)==null?void 0:i.track)==null?void 0:a.kind;if(!o.sender||s!=="video")continue;let l=o.sender.getParameters();if(!(!l.encodings||l.encodings.length<=1))return o}return null}_setupSimulcastTransceiver(e,t){return c(this,null,function*(){var m,h;if(!(t!=null&&t.sender)||!e)return null;t.direction="sendonly";let i=e.getVideoTracks()[0];yield t.sender.replaceTrack(i),t.sender.setStreams(e);let a=t.sender.getParameters();if(!a.encodings||a.encodings.length<=1)return d.log(`_setup:sim: mid=${t.mid} dir=${t.direction}: wrong encodings:${JSON.stringify(a.encodings)}`),null;let o=ci(ct.WIDTH,ct.HEIGHT,(h=(m=this._serverSettings.camera)==null?void 0:m.bitrates)==null?void 0:h.generic),s=0,l=1;for(let T of a.encodings)T.scalabilityMode=si,T.active=!0,s>=o.streams.length?T.maxBitrate=0:T.maxBitrate=o.streams[s].bitrate,T.scaleResolutionDownBy=l,l=l*2,s++;yield t.sender.setParameters(a);let u=i.getSettings();return d.log(`_setup:sim: mid=${t.mid} dir=${t.direction} track=${u.width}x${u.height} encodings=${JSON.stringify(a.encodings)}`),!0})}_acceptProducer(e){return c(this,null,function*(){if(this._producerOfferIsProcessing){this._producerNextOffer=e,d.debug("[single] wait until other remote offer is processed");return}this._producerOfferIsProcessing=!0;let t={type:"offer",sdp:E.patchRemoteSDP(e,A.isOldDataChannelDescription(),!1,!1,!1,A.isBrokenVP9Encoder(),A.isBrokenVP9Decoder())};if(d.debug("[single] set remote offer",{offer:t}),!this._pc)throw new Error("Interrupt allocation");try{if(yield this._processOffer(t),this._producerOfferIsProcessing=!1,this._producerNextOffer){d.debug("[single] there is other unprocessed remote offer, process it");let i=this._producerNextOffer;this._producerNextOffer=null,yield this._acceptProducer(i)}}catch(i){this.close(i)}})}_handleTracks(){return c(this,null,function*(){var t;if(!this._newAudioShareTrack||this._observer)return;let e=(t=this._pc)==null?void 0:t.getTransceivers().find(i=>{var a;return(a=i.mid)==null?void 0:a.endsWith("s")});if(!e||!e.sender){d.warn("Cannot find audioshare transceiver");return}e.sender.track!==null&&d.warn("Unexpected track assigned to audioshare");try{e.direction="sendonly",yield e.sender.replaceTrack(this._newAudioShareTrack),this._newAudioShareTrack=null}catch(i){d.error("ServerTransport: Unable to replace track",i),P.log(R.ERROR,"replaceTrack-single")}})}_onSignalingNotification(e){return c(this,null,function*(){if(this._isOpen)switch(e.notification){case V.PRODUCER_UPDATED:yield this._onProducerUpdated(e);break;case V.REALLOC_CON:this._reconnect();break;case V.AUDIO_ACTIVITY:this._signalActiveParticipants(e.activeParticipants);break;case V.SPEAKER_CHANGED:this._signalSpeakerChanged(e.speaker);break;case V.STALLED_ACTIVITY:this._signalStalledParticipants(e.stalledParticipants);break;case V.NETWORK_STATUS:this._signalNetworkStatus(e.statuses);break}})}_onAsrTranscription(e){this._triggerEvent("ASR_TRANSCRIPTION",e)}_onProducerUpdated(e){return c(this,null,function*(){this._producerSessionId&&this._producerSessionId!==e.sessionId&&this._reconnect(),p.breakVideoPayloadTypes&&(d.log("test mode enabled, video switched off"),this._signaling.requestTestMode("breakVideoPayloadTypes",null)),this._producerSessionId=e.sessionId,yield this._acceptProducer(e.description)})}_onAddTrack(e,t){d.debug("[single] remote track (added)",{track:t.track});let i=t.streams[0];i?(i.onremovetrack||(i.onremovetrack=o=>{this._triggerEvent("REMOTE_TRACK_REMOVED",i.id,i,o.track)}),i.getTracks().find(o=>o.id===t.track.id)||i.addTrack(t.track),this._rtpReceiversByStreamId[i.id]=t.receiver,this._triggerEvent("REMOTE_TRACK_ADDED",i.id,i,t.track)):d.error("[single] unable to get media stream from track event")}static _onSignalingStateChange(e,t){d.debug("[single] signaling state changed",{state:e.signalingState},t)}_onConnectionStateChange(e,t){switch(d.debug("[single] connection state changed",{state:e.connectionState},t),P.log(R.ICE_CONNECTION_STATE,e.connectionState),e.connectionState){case"failed":this._reconnectionPrevented?this.close(new Error("Ice connection failed")):(P.logCustom(R.RECONNECT,{param:1}),this._reconnect());break;case"connecting":let i=this.getState();i==="IDLE"||i==="OPENED"?this._setState("CONNECTING"):e.iceConnectionState==="checking"&&this._setState("RECONNECTING");break;case"disconnected":this._reconnectionPrevented?this.close(new Error("Ice connection disconnected")):this._setState("RECONNECTING");break;case"connected":this._setState("CONNECTED"),E.getPeerConnectionHostInfo(e).then(a=>{a!=null&&a.local&&(P.log(R.ICE_CONNECTION_TYPE,a.local.type),d.debug("Selected ICE candidates",a))}),P.logCustom(R.RECONNECT,{param:0});break}}_onReplacedTrack(e,t){var i,a;if(this._pc){p.consumerScreenDataChannel&&t&&(e=t);let o=(s,l)=>{s.replaceTrack(l).catch(u=>{d.error("ServerTransport: Unable to replace track",u),P.log(R.ERROR,"replaceTrack-single")})};if(d.log(`_onReplacedTrack: newTrack=${e.getSettings().width}x${e.getSettings().height}`),p.simulcast&&A.isSimulcastSupportedByBrowser()&&e.kind==="video"){let s=(i=this._pc)==null?void 0:i.getTransceivers().find(u=>{var m,h;return u.direction==="sendonly"&&((h=(m=u.sender)==null?void 0:m.track)==null?void 0:h.kind)==="video"}),l=s==null?void 0:s.sender;l!=null&&l.track?(o(l,e),e.getSettings().width&&e.getSettings().height&&this._changeSimulcastInfo(!1,!1)):d.warn("_onReplacedTrack: simulcast video transceiver not found")}else{let s=(a=this._pc)==null?void 0:a.getSenders().find(l=>l.track&&l.track.kind===e.kind&&!this._disabledSenders.has(l)&&l.track.contentHint===e.contentHint);s!=null&&s.track?o(s,e):e.kind==="audio"&&e.contentHint==="music"&&(this._newAudioShareTrack=e)}}this._applyConsumerSettings()}getStreamWaitingTimeMs(e,t){if(!this._pc)return P.log(R.PAT_WAITING_TIME_ERROR,"noConnection"),d.error("Cannot get stream waiting time, peer connection is not initialized"),0;if(!RTCRtpReceiver.prototype.getSynchronizationSources)return P.log(R.PAT_WAITING_TIME_ERROR,"oldBrowser"),d.error("Cannot get stream waiting time, RTCRtpReceiver.getSynchronizationSources is not supported"),0;let i=this._rtpReceiversByStreamId[e];if(!i)return P.log(R.PAT_WAITING_TIME_ERROR,"noReceiver"),d.error(`Cannot get stream waiting time, cannot find RTP receiver by stream ID: ${e}`),0;let a=i.getSynchronizationSources();if(!a||!a.length)return d.log(`Cannot get stream waiting time, ${e} receiver has no synchronization sources`),0;let s=a[0].rtpTimestamp;if(!Number.isInteger(s))return P.log(R.PAT_WAITING_TIME_ERROR,"timestampNotInteger"),d.error(`Cannot get stream waiting time, ${e} receiver's RTP timestamp is not an integer: ${s}`),0;let l=t-s&ys,u=Math.ceil(l/Ps);return Math.min(100,Math.max(0,u))}_changeSimulcastInfo(e,t){return c(this,null,function*(){var v,b,L,O;let i=this._mediaSource.getMediaSettings().isVideoEnabled,a=this._findFirstSimTransceiver();if(!p.simulcast||!A.isSimulcastSupportedByBrowser()||!i||!a||!a.sender)return;let o=this._mediaSource.getStream();if(!o)return;let s=o.getVideoTracks()[0],l=s.getSettings().width,u=s.getSettings().height,m=ci(l,u,(b=(v=this._serverSettings.camera)==null?void 0:v.bitrates)==null?void 0:b.generic),h=t||!Aa(this._simulcastInfo,m);if(!m.streams.length||!h)return;let T=a.sender.getParameters();if(T.encodings||(T.encodings=[{}]),!(T.encodings.length<=1)){if(d.log(`_changeSimulcastInfo: ${l}x${u} command: ${JSON.stringify(m)} `),e){let G=0;for(let $ of T.encodings)$.scaleResolutionDownBy=Vi($.rid),$.scalabilityMode=si,G>=m.streams.length?($.maxBitrate=0,$.active=!1):($.active=!0,$.maxBitrate=m.streams[G].bitrate),G++;yield(O=(L=a.sender).setParameters)==null?void 0:O.call(L,T).catch($=>{d.error("Failed to set sender parameters",T,$)}),d.log(`_changeSimulcastInfo: actual encodings: ${JSON.stringify(T.encodings)} `)}if(this._simulcastInfo=m,m.streams){let G={mediaSource:1,simulcastInfo:m};yield this._signaling.changeSimulcast(G)}}})}};var Ze=(e=>(e.DIRECT="DIRECT",e.SERVER="SERVER",e))(Ze||{}),gr=class extends se{constructor(e,t,i,a){super();this._allocated=[];this._opened=[];this._directTransport=null;this._serverTransport=null;this._dtListeners=[];this._stListeners=[];this._states={};this._localState="IDLE";this._animojiReceiver=null;this._animojiSender=null;this._signaling=t,this._mediaSource=i,this._topology=e,this._serverSettings=a,this.subscribe(this._signaling,be.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._mediaSource,"ANIMOJI_STATUS",this._onAnimojiStatus.bind(this)),this.subscribe(this._mediaSource,"SOURCE_CHANGED",this._onSourceChanged.bind(this)),this._createAnimojiTransport(),e==="SERVER"&&(this._serverTransport=this._createServerTransport())}updateSettings(e){d.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(d.log(`Trying allocate participant [${e}]`),this._allocated.indexOf(e)!==-1){d.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,a=!1){d.log("Trying open participant",{participantIds:e});let o=a;for(let s of e){if(this._opened.indexOf(s)!==-1){d.warn(`The participant [${s}] has already had opened transport`);continue}if(this._allocated.indexOf(s)===-1){d.warn(`The participant [${s}] has no allocated transport`);continue}this._opened.push(s),o=!0}o&&(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())),d.debug("The transport has been opened",e))}close(e){var a;let t=this._allocated.indexOf(e),i=this._opened.indexOf(e);t<0&&d.warn(`The participant [${e}] transport has already deallocated`),this._topology==="DIRECT"&&this._directTransport&&i>=0&&this._releaseDirectTransport(),this._topology==="SERVER"&&((a=this._serverTransport)==null||a.removeParticipant(e),this._setStates([e],"CLOSED")),i>=0&&this._opened.splice(i,1),t>=0&&this._allocated.splice(t,1),delete this._states[e]}destroy(){var e,t,i;this.unsubscribe();for(let a of this._dtListeners)a.dispose();for(let a of this._stListeners)a.dispose();this._removeAnimojiTransport(),(e=p.audioEffects)==null||e.destroy(),(t=this._directTransport)==null||t.close(),this._directTransport=null,(i=this._serverTransport)==null||i.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()}getStates(){return this._states}setAnimojiSvg(e,t){var i,a;p.vmoji&&t.isMe&&((i=p.vmoji.AnimojiPreviewGenerator)==null||i.setSvgData(t)),(!(t.svg instanceof ArrayBuffer)||t.svg.byteLength!==0)&&((a=this._animojiReceiver)==null||a.setParticipantSvg(e,t))}setAnimojiFill(e){var t;(t=this._animojiSender)==null||t.setFill(e)}onCameraResolutionChanged(){return c(this,null,function*(){this._topology==="SERVER"&&this._serverTransport&&(yield this._serverTransport.onCameraResolutionChanged())})}_setStates(e,t){let i=e.filter(a=>this._states[a]!==t?(this._states[a]=t,!0):!1);i.length&&this._triggerEvent("STATE_CHANGED",i,t)}_setLocalState(e){this._localState!==e&&(this._localState=e,this._triggerEvent("LOCAL_STATE_CHANGED",e))}_onSignalingNotification(e){if(e.notification===V.TOPOLOGY_CHANGED)return this._onTopologyChanged(e)}_onTopologyChanged(e){var t;if(e.topology!==this._topology){if(d.log(`Topology changed ${this._topology} -> ${e.topology}`),P.log(R.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||[],a=e.offerToTypes||[],o=e.offerToDeviceIdxs||[],s=i.length&&a.length?E.composeParticipantId(i[0],a[0],o[0]):null;if(this._serverTransport&&this._serverTransport.preventRestart(),!this._allocated||this._allocated.length===0){d.error("Topology changed to DIRECT, but the list of allocated participants is empty");return}this._allocated.length>1&&d.warn("Topology changed to DIRECT, but the allocated participants count more then one");let l=this._allocated[0];if(this._directTransport)this._directTransport.allowRestart();else{let u=s===l;this._directTransport=this._createDirectTransport(l,u)}this._opened.indexOf(l)>=0&&this._directTransport.open()}this._triggerEvent("TOPOLOGY_CHANGED",this._topology)}}_createDirectTransport(e,t=!1){let i=new bi(e,t,this._signaling,this._mediaSource,this._serverSettings);return this._dtListeners.length>0&&d.warn(`The list of direct listeners for the participant [${e}] is not empty`),this._dtListeners=[],this._dtListeners.push(i.addEventListener("REMOTE_TRACK_ADDED",this._onRemoteTrackAdded.bind(this,e)),i.addEventListener("REMOTE_TRACK_REMOVED",this._onRemoteTrackRemoved.bind(this,e)),i.addEventListener("REMOTE_DATA_STATS",this._onRemoteDataStats.bind(this)),i.addEventListener("STATE_CHANGED",this._onDirectTransportChanged.bind(this)),i.addEventListener("NETWORK_STATUS",this._onTransportNetworkStatus.bind(this)),i.addEventListener("PEER_CONNECTION_CLOSED",this._onPeerConnectionClosed.bind(this,"DIRECT"))),this._animojiReceiver&&this._animojiSender&&i.setAnimojiTransport(this._animojiReceiver,this._animojiSender),i}_createServerTransport(){let e=new Mi(this._signaling,this._mediaSource,this._serverSettings);return this._stListeners.length>0&&d.warn("The list of server transport listeners is not empty"),this._stListeners=[],this._stListeners.push(e.addEventListener("REMOTE_TRACK_ADDED",this._onRemoteTrackAdded.bind(this)),e.addEventListener("REMOTE_TRACK_REMOVED",this._onRemoteTrackRemoved.bind(this)),e.addEventListener("AUDIO_MIX_STALL",this._onServerAudioMixStall.bind(this)),e.addEventListener("REMOTE_DATA_STATS",this._onRemoteDataStats.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.addEventListener("ASR_TRANSCRIPTION",this._onAsrTranscription.bind(this))),this._animojiReceiver&&this._animojiSender&&e.setAnimojiTransport(this._animojiReceiver,this._animojiSender),e}_releaseDirectTransport(){var e;(e=this._directTransport)==null||e.close(),this._directTransport=null;for(let t of this._dtListeners)t.dispose();this._dtListeners=[]}_releaseServerTransport(){var e;(e=this._serverTransport)==null||e.close(),this._serverTransport=null;for(let t of this._stListeners)t.dispose();this._stListeners=[]}_setLocalNoiseSuppression(e){var t;p.noiseSuppression!==e&&(p.noiseSuppression=e,(t=this._mediaSource)==null||t.updateNoiseSuppression())}_onDirectTransportChanged(e){var i;let t=(i=this._directTransport)==null?void 0:i.participantId;if(e==="CONNECTED"&&this._topology==="DIRECT"&&this._releaseServerTransport(),(e==="CLOSED"||e==="FAILED")&&(this._releaseDirectTransport(),this._topology==="DIRECT")){let a=this._opened.indexOf(t);a>=0&&this._opened.splice(a,1);let o=this._allocated.indexOf(t);o>=0&&this._allocated.splice(o,1)}this._topology==="DIRECT"&&t&&(this._setStates([t],e),this._setLocalState(e))}_onServerTransportChanged(e){let t=this._opened.slice();e==="CONNECTED"&&this._topology==="SERVER"&&this._releaseDirectTransport(),(e==="CLOSED"||e==="FAILED")&&(this._releaseServerTransport(),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)}_onServerAudioMixStall(e){this._topology==="SERVER"&&this._triggerEvent("AUDIO_MIX_STALL",e)}_onRemoteDataStats(e){this._triggerEvent("REMOTE_DATA_STATS",e)}_onRemoteTrackAdded(e,t,i){this._triggerEvent("REMOTE_TRACK_ADDED",e,t,i)}_onRemoteTrackRemoved(e,t,i){this._triggerEvent("REMOTE_TRACK_REMOVED",e,t,i)}_onAsrTranscription(e){this._triggerEvent("ASR_TRANSCRIPTION",e)}_onSourceChanged(){var t;let e=this._mediaSource.getStream();e&&((t=this._animojiSender)==null||t.setStream(e))}_onAnimojiStream(e,t){this._triggerEvent("ANIMOJI_STREAM",e,t)}_onAnimojiStatus(e){var t,i;e?(t=this._animojiSender)==null||t.resume():(i=this._animojiSender)==null||i.pause(),this._mediaSource.onAnimojiSender(e)}_createAnimojiTransport(){if(!p.vmoji)return;this._animojiReceiver=new p.vmoji.AnimojiReceiver((t,i)=>this._onAnimojiStream(t,i),t=>this._onAnimojiStream(t,null),t=>{this._triggerEvent("ANIMOJI_ERROR",t)},p.vmojiOptions.renderingOptions);let e=this._mediaSource.getStream();this._animojiSender=new p.vmoji.AnimojiSender(e,this._signaling.getPeerId(),p.vmojiOptions.protocolVersion,{requested:this._mediaSource.isAnimojiRequested,useAI:p.vmojiOptions.renderingOptions.useAI}),this._animojiSender.onLocalData=t=>{var i;return(i=this._animojiReceiver)==null?void 0:i.receive(t)}}_removeAnimojiTransport(){var e,t;(e=this._animojiSender)==null||e.destroy(),this._animojiSender=null,(t=this._animojiReceiver)==null||t.destroy(),this._animojiReceiver=null}getStreamWaitingTimeMs(e,t){return this._topology!=="SERVER"?(P.log(R.PAT_WAITING_TIME_ERROR,"wrongTopology"),d.error(`Cannot get stream waiting time, incorrect topology: ${this._topology}`),0):this._serverTransport?this._serverTransport.getStreamWaitingTimeMs(e,t):(P.log(R.PAT_WAITING_TIME_ERROR,"noTransport"),d.error("Cannot get stream waiting time, server transport is not initialized"),0)}};var fr=class extends se{constructor(e){super();this._detector=null;this._interval=null;this.subscribe(e,"REMOTE_TRACK_ADDED",this._onRemoteTrackAdded.bind(this)),this.subscribe(e,"REMOTE_TRACK_REMOVED",this._onRemoteTrackRemoved.bind(this)),this.subscribe(e,"SIGNALLED_ACTIVE_PARTICIPANTS",this._onSignalledActiveParticipants.bind(this)),this.subscribe(e,"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 a;if(i.kind==="audio"&&((a=this._detector)==null||a.destroy(),this._detector=new kt(e,i),!this._interval)){let o=()=>{this._collectVolumes(),this._interval=window.setTimeout(o,p.voiceParams.interval)};this._interval=window.setTimeout(o,p.voiceParams.interval)}}_onRemoteTrackRemoved(e,t,i){i.kind==="audio"&&(!this._detector||this._detector.track!==i||(this._detector.destroy(),this._detector=null))}_collectVolumes(){if(!this._detector)return;let e={},t=this._detector.trackId,i=this._detector.getLevel();if(t===Ke.AUDIO_MIX){if(this._activeParticipants)for(let a of this._activeParticipants)e[a]=i}else e[t]=i;this._triggerEvent("VOLUMES_DETECTED",e)}_onSignalledActiveParticipants(e){this._activeParticipants=e}_onTopologyChanged(e){e==="DIRECT"&&(this._activeParticipants=null)}};var Sr=class extends se{constructor(e,t,i){super();this._speakerId=null;this._serverSideSpeakerDetection=!1;this._serverSideSpeakerDetection=i==="SERVER",this.subscribe(e,"VOLUMES_DETECTED",this._onVolumesDetected.bind(this)),this.subscribe(t,"SIGNALLED_SPEAKER_CHANGED",this._onServerSpeakerChanged.bind(this)),this.subscribe(t,"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(a=>{let o=e[a].smoothed;o>t&&o>p.voiceParams.threshold&&(t=o,i=a)}),i&&i!==this._speakerId){let a=this._speakerId&&e.hasOwnProperty(this._speakerId)?e[this._speakerId].smoothed:0;t>a*p.voiceParams.speakerLevelMultiplier&&(this._speakerId=i,this._triggerEvent("SPEAKER_CHANGED",i))}}_onServerSpeakerChanged(e){this._serverSideSpeakerDetection&&this._triggerEvent("SPEAKER_CHANGED",e)}_onTopologyChanged(e){this._serverSideSpeakerDetection=e==="SERVER"}};var Ai=class extends se{constructor(e,t,i){super();this._volumes={};this._participants={};this._connectionTimeout=0;this._volumeTimeout=0;this._transport=e,this._participants=i,this.subscribe(e,"STATE_CHANGED",this._onTransportStateChanged.bind(this)),this.subscribe(t,"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){t==="OPENED"&&(this._connectionTimeout||(this._connectionTimeout=window.setTimeout(this._onConnectionTimeout.bind(this),p.specListenerParams.connectionTimeout)),this._volumeTimeout||(this._volumeTimeout=window.setTimeout(this._onVolumeTimeout.bind(this),p.specListenerParams.volumeTimeout))),t==="FAILED"&&this._connectionTimeout&&(d.warn("Transport failed, send callSpecError"),P.log(R.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!=="CONNECTED";Object.values(this._transport.getStates()).filter(e).length>0&&(d.warn("There is not connected transport, send callSpecError"),P.log(R.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",a=this._participants[t];a&&a.platform&&(i=a.platform),e.indexOf(i)<0&&(e.push(i),P.log(R.CALL_SPEC_ERROR,`${this._transport.getTopology()}_VOLUME_TIMEOUT_${i}`))}),e.length&&d.warn("There is silent participant, send callSpecError"),this._volumeTimeout=0}};var vr=class n{static correctHangupReason(r){switch(r){case k.HUNGUP:return"hangup";case k.CANCELED:return"canceled";case k.REJECTED:return"rejected";case k.BUSY:return"busy";case k.FAILED:return"failed";case k.MISSED:return"missed";case k.ANOTHER_DEVICE:return"another_device";case k.REMOVED:return"removed";case k.BANNED:return"banned";case k.VCHAT_DETAILED_ERROR:return"error";default:return"hangup"}}static sendHangupEvent(r,e){var a;if(![k.HUNGUP,k.CANCELED,k.REJECTED,k.FAILED,k.BUSY,k.MISSED,k.ANOTHER_DEVICE,k.REMOVED,k.BANNED,k.VCHAT_DETAILED_ERROR].includes(r.hangup))return;let i=(a=r.custom_error)==null?void 0:a.vchat_detailed_api_error.code;P.logClientStats(oe({name:R.CALL_FINISH,reason:n.correctHangupReason(r.hangup),call_topology:e==="DIRECT"?"D":"S"},i&&{string_value:i}))}};var Ir=class{constructor(){this._isCallMarked=!1;this._isFinished=!1;this._callType=null}markAcceptCall(r){this.mark(r==="DIRECT"?"direct_incoming":"server_incoming")}markAcceptedCall(r){r==="DIRECT"&&this.mark("direct_outgoing")}markParticipantJoined(r){r==="DIRECT"&&this.mark("server_change_topology")}markOnJoin(r){r==="SERVER"&&this.mark("server_join_server")}mark(r){this._isCallMarked||(this._isCallMarked=!0,this._callType=r,it(R.FIRST_MEDIA_RECEIVED))}measure(){this._isFinished||(this._isFinished=!0,this._callType&&we.logEventualStat({name:R.FIRST_MEDIA_RECEIVED,call_type:this._callType}))}};var bs=1e3,Ms=1e4;var As=15,Q=class Q extends se{constructor(e,t){super();this._mediaSource=null;this._conversation=null;this._myLastRequestedLayouts={};this._state="IDLE";this._participantState=Z.CALLED;this._participants={};this._pendingParticipants=new Map;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._isRealTimeAsrRequested=!1;this._serverSettings={camera:null,screenSharing:null};this._lastStalled={};this._audioMixStalled=!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;this._changeMediaSettings=E.debounce(e=>c(this,null,function*(){if(this._signaling.ready)try{yield this._signaling.changeMediaSettings(e)}catch(t){if(d.warn("changeMediaSettings failed with error",t),t.message==="chatRoom.maxShareCountExceeded")return this.toggleScreenCapturing({captureScreen:!1,fastScreenSharing:!1,captureAudio:!1})}}),100);P.create(e,t),we.create(),Xe.create(()=>{var i;return(i=this._transport)==null?void 0:i.getTopology()}),this._api=e,this._signaling=new Xt,this._onUnload=()=>{this._conversation&&this._api&&(this._api.hangupConversation(this._conversation.id),p.clientEventsLoggingEnabled&&P.logClientEvent({event_type:R.CALL_DECLINED_OR_HANGED_LOCALLY,reason:"none"},!0)),P.destroy(),we.destroy(),Xe.destroy()},window.addEventListener("unload",this._onUnload),this._statFirstMediaReceived=new Ir,this._audioOutput=new Ei(this._statFirstMediaReceived),p.videoTracksCount>0&&(this._cooldownQueueCleanupTimer=window.setInterval(this._cleanupCooldownQueue.bind(this),bs))}static current(){return Q._current}static hangupAfterInit(){Q._activationMutex&&!Q._current&&(Q._delayedHangup=!0)}static id(){var e,t;return((t=(e=Q._current)==null?void 0:e._conversation)==null?void 0:t.id)||null}onStart(e,t,i,a="",o=!1,s=!1,l){return c(this,null,function*(){if(Q._activationMutex)throw P.log(R.ERROR,"startCall"),d.warn("Conversation: there is already running activation"),new q(k.FAILED);Q._activationMutex=!0,ke.startSession();try{this._mediaSource=this._createMediaSource(),yield this._mediaSource.request(i);let u=this._mediaSource.getMediaSettings();t===ot.CHAT||e.length>1?this._logWithMediaSettings(R.OUTGOING_MULTIPARTY_CALL,u):this._logWithMediaSettings(R.OUTGOING_CALL,u);let m=yield this._startConversation(e,t,ut.OUTGOING,i,a,o,s,l);if(!this._conversation)throw new q(k.UNKNOWN_ERROR);if(this._participantState=Z.ACCEPTED,this._changeMediaSettings(u),yield this._processConnection(m),yield this._allocateTransport(),this._createSpeakerDetector(),yield this._createSpecListener(),this._signaling.readyToSend(),Q._delayedHangup)throw new q(k.CANCELED);return d.debug("Outgoing call",{opponentIds:e,opponentType:t,mediaOptions:i}),yield this._processConnectionSharedMovieInfo(m),yield this._processConversationUrlSharingInfo(m),I.onLocalStream(this._mediaSource.getStream(),this._mediaSource.getMediaSettings()),I.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._getMuteStatesForCurrentRoom(),yield this._getMainRoomParticipants()),yield this._onConversationParticipantListChunk(m),this._processPinnedParticipants(m),I.onLocalStatus("WAITING"),this._toggleJoinAvailability(),this._changeFeatureSet(),this._changeNeedRate(),Q._current=this,this._conversation.concurrent&&(yield this._acceptConcurrent()),this._conversation}catch(u){throw this._close(u,"Unable to start conversation"),u}finally{Q._activationMutex=!1}})}onJoin(e){return c(this,null,function*(){var t;if(Q._activationMutex)throw P.log(R.ERROR,"joinCall"),d.warn("Conversation: there is already running activation"),new q(k.FAILED);Q._activationMutex=!0,this._state="PROCESSING",ke.startSession();try{let i=!!((t=e.observedIds)!=null&&t.length);if(i&&p.videoTracksCount>0)throw d.error("Observer mode: please set videoTracksCount=0"),new q(k.UNSUPPORTED);this._mediaSource=this._createMediaSource(),yield this._mediaSource.request(e.mediaOptions,!i);let a=this._mediaSource.getMediaSettings();this._logWithMediaSettings(R.JOIN_CONVERSATION,a);let o=yield this._joinConversation(e);if(!this._conversation)throw new q(k.UNKNOWN_ERROR);return this._conversation.observer=i,I.onLocalStream(this._mediaSource.getStream(),a),this._conversation.waitingHall?(d.log("In waiting hall"),Q._current=this,Q._activationMutex=!1,this._signaling.readyToSend(),I.onLocalStatus("WAITING_HALL"),this._conversation):this._onJoinPart2(o)}catch(i){throw Q._activationMutex=!1,this._close(i,"Unable to join conversation"),i}})}_onJoinPart2(e){return c(this,null,function*(){var t,i,a,o;d.debug("Join conversation part 2"),Q._activationMutex=!0;try{if(this._participantState=Z.ACCEPTED,!this._conversation||!this._mediaSource)throw new q(k.UNKNOWN_ERROR);if(this._statFirstMediaReceived.markOnJoin(this._conversation.topology),!this._conversation.observer&&!this._isAudienceModeListener()&&this._changeMediaSettings(this._mediaSource.getMediaSettings()),yield this._processConnection(e),yield this._allocateTransport(),this._createSpeakerDetector(),yield this._createSpecListener(),this._signaling.readyToSend(),this._state==="CLOSE")return this._conversation;if(Q._delayedHangup)throw new q(k.CANCELED);yield this._processConnectionSharedMovieInfo(e),yield this._processConversationUrlSharingInfo(e),yield this._processConnectionAsrInfo(e);let s=yield this._extractExternalRoomsData((t=e.rooms)==null?void 0:t.rooms,(i=e.rooms)==null?void 0:i.roomId);return I.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._getMuteStatesForCurrentRoom(),yield this._getMainRoomParticipants(),s),yield this._onConversationParticipantListChunk(e),this._processPinnedParticipants(e),I.onLocalStatus("WAITING"),this._toggleJoinAvailability(),this._changeNeedRate(),this._state="ACTIVE",this._changeFeatureSet(),Q._current=this,this._openTransport(Object.values(yield this._getParticipants()),!1),this._conversation.audienceMode&&!this._conversation.restricted&&this._forceOpenTransportForAloneInCall(),this._conversation.recordsInfoByRoom.get((o=(a=e==null?void 0:e.rooms)==null?void 0:a.roomId)!=null?o:null)&&this._forceOpenTransportForAloneInCall(),this._conversation}catch(s){throw this._close(s,"Unable to join conversation"),s}finally{Q._activationMutex=!1}})}_extractExternalRooms(e){return c(this,null,function*(){let t=e.map(this._convertRoomToExternal.bind(this));return(yield Promise.all(t)).filter(a=>!!a)})}_extractExternalRoomsData(e,t){return c(this,null,function*(){if(!e||!e.length)return;let i={rooms:yield this._extractExternalRooms(e)};return t&&(i.roomId=t),i})}onPush(a){return c(this,arguments,function*(e,t=de.USER,i){if(Q._activationMutex)throw d.warn("Conversation: there is already running activation"),new q(k.REJECTED);Q._activationMutex=!0;try{let o=yield this._prepareConversation(e,t,i);if(this._mediaSource=this._createMediaSource(),!this._conversation)throw new q(k.UNKNOWN_ERROR);if(!o.conversation.participants.find(l=>{var u;return l.state===Z.CALLED&&l.id===((u=this._conversation)==null?void 0:u.userId)}))throw d.log("Push rejected (there is an active call)"),P.log(R.PUSH,"rejected"),new q(k.REJECTED);if(ke.startSession(),yield this._processConnection(o),this._extractConnectionUrlSharingInfo(o),yield this._allocateTransport(),this._createSpeakerDetector(),yield this._createSpecListener(),this._processPinnedParticipants(o),this._signaling.readyToSend(),P.log(R.PUSH,"accepted"),Q._current=this,Q._delayedHangup)throw new q(k.CANCELED);Q._activationMutex=!1}catch(o){throw Q._activationMutex=!1,this._close(o,"Unable to handle inbound call push"),o}})}_isInWaitingHall(e){return!e.conversation||(e.conversation.options||[]).indexOf(Zt.WAITING_HALL)<0?!1:this._isRestricted(e)}_isRestricted(e){let t=(e.conversation.participants||[]).find(i=>E.comparePeerId(i.peerId,e.peerId));return t&&t.restricted||!1}_isAudienceMode(e){var t,i;return((i=(t=e.conversation)==null?void 0:t.options)==null?void 0:i.includes(Zt.AUDIENCE_MODE))||!1}_isAudienceModeListener(){var e,t;return((e=this._conversation)==null?void 0:e.audienceMode)&&((t=this._conversation)==null?void 0:t.restricted)}_acceptConcurrent(){return c(this,null,function*(){if(!this._mediaSource||!this._conversation||!this._transport)throw new q(k.UNKNOWN_ERROR);this._state="PROCESSING";let e=this._mediaSource.getMediaSettings();this._logWithMediaSettings(R.ACCEPT_CONCURRENT,e),d.debug("Concurrent call",{conversationId:this._conversation.id});try{this._statFirstMediaReceived.markAcceptCall(this._transport.getTopology()),yield this._signaling.acceptCall(this._mediaSource.getMediaSettings()),I.onCallAccepted(),this._state="ACTIVE",this._participantState=Z.ACCEPTED,this._changeFeatureSet(),this._openTransport(Object.values(yield this._getParticipants()),!0)}catch(t){this._close(t,"Unable to accept concurrent call")}})}_getMainRoomParticipants(){return c(this,null,function*(){let e=yield this._getParticipants();return E.mapSharedParticipants(Object.values(e).filter(t=>!t.isInRoom))})}accept(e){return c(this,null,function*(){var t,i,a,o,s;if(this._state!=="IDLE")throw P.log(R.ERROR,"acceptIncoming"),d.error("Unable to accept a call - invalid state"),new Error("Unable to accept a call - invalid state");if(!this._mediaSource||!this._conversation||!this._transport)throw new q(k.UNKNOWN_ERROR);this._state="PROCESSING",d.debug("Accept incoming call",e);try{yield this._mediaSource.request(e);let l=this._mediaSource.getMediaSettings();this._logWithMediaSettings(R.ACCEPT_INCOMING,l),this._changeMediaSettings(l),this._statFirstMediaReceived.markAcceptCall(this._transport.getTopology()),yield this._signaling.acceptCall(l),this._participantState=Z.ACCEPTED;let u=this._getMuteStatesForCurrentRoom(),m=Object.keys(u);m.length&&this._onMuteParticipant({muteStates:u,mediaOptions:m,muteAll:!0,stateUpdated:!0}),this._registerParticipantLocalMuteState({muteStates:this._conversation.muteStatesPersonal});let h=yield this._signaling.getRooms(this._isCallAdmin());if((t=h.rooms)!=null&&t.rooms){let v=yield this._getParticipants();h.rooms.rooms.forEach(b=>{var L;(L=b.participantIds)==null||L.forEach(O=>{v[O]&&(v[O].isInRoom=!0)})})}this._conversation.roomId=((i=h.rooms)==null?void 0:i.roomId)||null;let T=yield this._extractExternalRoomsData((a=h.rooms)==null?void 0:a.rooms,(o=h.rooms)==null?void 0:o.roomId);if(I.onCallAccepted(),I.onLocalStream(this._mediaSource.getStream(),l),I.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._getMuteStatesForCurrentRoom(),yield this._getMainRoomParticipants(),T),p.useParticipantListChunk){let v=yield this._getInitialParticiapntListChunk(),b=yield this._getParticipants();(s=v==null?void 0:v.participants)==null||s.forEach(L=>{let O=E.composeId(L),G=b[O];G&&(G.movieShareInfos=L.movieShareInfos)}),yield this._onConversationParticipantListChunk({participants:v})}return I.onLocalStatus("WAITING"),this._toggleJoinAvailability(),this._changeNeedRate(),this._state="ACTIVE",this._changeFeatureSet(),this._openTransport(Object.values(yield this._getParticipants()),!0),yield this._processConversationUrlSharingInfo(),yield this._processConnectionAsrInfo(),this._conversation}catch(l){throw this._close(l,"Unable to accept call"),l}})}decline(){return c(this,null,function*(){var e;if(this._state!=="IDLE")throw P.log(R.ERROR,"declineIncoming"),d.error("Unable to decline a call - invalid state"),new Error("Unable to decline a call - invalid state");this._state="PROCESSING",d.debug("Decline incoming call"),this._logWithMediaSettings(R.DECLINE_INCOMING,(e=this._mediaSource)==null?void 0:e.getMediaSettings()),this._participantState=Z.HUNGUP,this._signaling.ready&&(yield this._signaling.hangup(k.REJECTED)),this._close(new q(k.REJECTED))})}hangup(){return c(this,null,function*(){d.debug("Hangup");let e=this._state==="ACTIVE"?k.HUNGUP:k.CANCELED;P.log(R.HANGUP,e),this._signaling.ready?(yield this._signaling.hangup(e),this._close(new q(e))):I.onHangup(new q(k.HUNGUP),this._conversation&&this._conversation.id)})}addParticipant(e,t){return c(this,null,function*(){if(!this._signaling.ready){this._close(new q(k.UNKNOWN_ERROR),"Unable to add participant");return}let i=yield this._signaling.addParticipant(e,t),a=null;i.type==="error"&&(i.error==="call-unfeasible"?a=i.status:a=k.UNKNOWN_ERROR);let o=i.participants;for(let s of o)yield this._onAddParticipant(E.composeId(s),s,a)})}removeParticipant(e,t=!1){return c(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 a;if(!this._transport)return;let i=[];for(let o of e)(o.state===Z.CALLED||o.state===Z.ACCEPTED)&&(this._transport.isAllocated(o.id)||this._transport.allocate(o.id,t)),o.state===Z.ACCEPTED&&i.push(o.id);i.length&&this._transport.open(i,null,!!((a=this._conversation)!=null&&a.observer))}_close(e,t){return c(this,null,function*(){var o;t&&d.error(t,e),d.debug("Close conversation",e),vr.sendHangupEvent(e,(o=this._transport)==null?void 0:o.getTopology()),Xe.destroy(),this._signaling.readyToSend(!1),e.error?this._signaling.ready&&this._signaling.hangup(k.FAILED):P.log(R.ERROR,e.hangup),Q._activationMutex=!1;let i=this._conversation&&this._conversation.id;if([k.CANCELED,k.NOT_FRIENDS,k.CALLEE_IS_OFFLINE,k.CALLER_IS_BLOCKED,k.CALLER_IS_REJECTED].indexOf(e.hangup)!==-1||e.hangup===k.REJECTED&&!e.remote){I.onHangup(e,i),this.destroy();return}if(e.hangup===k.HUNGUP&&(!e.remote||this._isCalledState())){I.onHangup(e,i),this.destroy();return}if(e.hangup===k.MISSED&&!e.remote){I.onHangup(e,i),this.destroy();return}if(this._cooldownQueueCleanupTimer!==null&&(window.clearInterval(this._cooldownQueueCleanupTimer),this._cooldownQueueCleanupTimer=null),(e.hangup===k.SOCKET_CLOSED||e.hangup===k.NOT_FOUND)&&Q._current&&!this._conversation){this._cleanupSignaling(),this._cleanupMediaSource();return}if(e.hangup===k.BUSY&&!e.remote){this._cleanupSignaling(),this._cleanupMediaSource();return}this._state="CLOSE",this._participantState=Z.HUNGUP,this._changeFeatureSet(),this._cleanupMediaSource(),yield this._cleanupParticipants(),this._cleanupParticipantAgnosticStreams(),this._cleanupTransport(),this._cleanupSpeakerDetector(),this._cleanupSpecListener(),this._cleanupSignaling(),this._api.cleanup(),P.destroy(),we.destroy(),this._conversation=null,this._myLastRequestedLayouts={},Q._current=null,Q._delayedHangup=!1,I.onHangup(e||new q(k.UNKNOWN_ERROR),i)})}destroy(){return c(this,null,function*(){let e=this._conversation&&this._conversation.id;d.debug("Destroy conversation",{conversationId:e}),this._cooldownQueueCleanupTimer!==null&&(window.clearInterval(this._cooldownQueueCleanupTimer),this._cooldownQueueCleanupTimer=null),this._state="CLOSE",this._participantState=Z.HUNGUP,this._cleanupMediaSource(),yield this._cleanupParticipants(),this._cleanupParticipantAgnosticStreams(),this._cleanupTransport(),this._cleanupSpeakerDetector(),this._cleanupSpecListener(),this._cleanupSignaling(),this._api.cleanup(),this._cleanupListeners(),P.destroy(),we.destroy(),this._conversation=null,this._myLastRequestedLayouts={},Q._current=null,Q._delayedHangup=!1})}_getConversationParams(e){return c(this,null,function*(){let t=yield this._api.getConversationParams(e);d.debug("Api.getConversationParams",t);let i=[],{turn_server:a,stun_server:o}=t;if(o&&i.push(o),a&&a.urls){let s=a.urls.filter((l,u,m)=>m.indexOf(l)===u);s.push(`${s[s.length-1]}?transport=tcp`),i.push({urls:s,username:a.username,credential:a.credential})}return p.iceServers=i,p.wssBase=t.endpoint,p.wssToken=t.token,t.client_type&&(p.clientType=t.client_type),p.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,a,o="",s=!1,l=!1,u){return c(this,null,function*(){it(R.SIGNALING_CONNECTED);let m=E.uuid();d.debug("Conversation: start",{conversationId:m,opponentIds:e,opponentType:t,direction:i});let h=a.includes(ue.VIDEO),T=yield this._api.startConversation(m,e,t,h,o,s,l,{onlyAdminCanShareMovie:u});d.debug("Api.startConversation",T);let v=yield this._getConversationParams(T.id);T.endpoint=this._addGeoParamsToEndpoint(T.endpoint,v);let b=yield this._connectSignaling(nt.START,T);return yield this._setConversation(T,b,i),b})}_joinConversation(e){return c(this,null,function*(){it(R.SIGNALING_CONNECTED);let{conversationId:t,mediaOptions:i,chatId:a,joinLink:o,observedIds:s,payload:l}=e;d.debug("Conversation: join",{conversationId:t,joinLink:o,observedIds:s});let u=i.includes(ue.VIDEO),m;if(t)m=yield this._api.joinConversation(t,u,a);else if(o)m=yield this._api.joinConversationByLink(o,u,s,l);else throw new q(k.UNKNOWN_ERROR);d.debug("Api.joinConversation",m),yield this._getConversationParams(m.id);let h=yield this._connectSignaling(nt.JOIN,m);return yield this._setConversation(m,h,ut.JOINING),h})}_prepareConversation(a){return c(this,arguments,function*(e,t=de.USER,i){it(R.SIGNALING_CONNECTED),d.debug("Conversation: push",{conversationId:e,type:t,peerId:i});let o=this._api.getUserId();if(!o)throw new q(k.UNKNOWN_ERROR);let s=yield this._getConversationParams(e),l=s.device_idx||0,u=`${p.wssBase}?userId=${o}&entityType=${t}&deviceIdx=${l}&conversationId=${e}&token=${p.wssToken}`;u=this._addGeoParamsToEndpoint(u,s);let m={id:e,peerId:i,endpoint:u,is_concurrent:!1,p2p_forbidden:!1,device_idx:l},h=yield this._connectSignaling(nt.ACCEPT,m);return Q._current&&(Q._current._participantState===Z.ACCEPTED||Q._current._participantState===Z.CALLED)?(d.log("Push rejected (busy)"),P.log(R.PUSH,"busy"),this._signaling.ready&&this._signaling.hangup(k.BUSY),Promise.reject({hangup:k.BUSY})):(Q._current&&(Q._current.destroy(),Q._current=null),yield this._setConversation(m,h,ut.INCOMING,t),h)})}_createParticipant(e,t){return c(this,null,function*(){var a;let i=Object.assign({id:null,externalId:null,mediaSettings:Re(),participantState:{},state:Z.CALLED,status:null,remoteStream:null,mediaSource:null,platform:null,clientType:null,roles:[],networkRating:1,lastRequestedLayouts:{},muteStates:{},unmuteOptions:[],observedIds:[],isInRoom:!1,markers:null},e);return i.externalId||(i.externalId=yield this._getParticipantId(t!=null?t:i.id)),this._api.cacheExternalId(t!=null?t:i.id,i.externalId),t&&this._api.mapDecorativeId(t,i.id),(a=i.observedIds)!=null&&a.length&&(i.externalId.observer=!0),e.markers&&(i.markers=this._denormalizeMarkers(i.id,e.markers)),i})}_getParticipantId(e){return c(this,null,function*(){try{return yield this._api.userId(e)}catch(t){throw this._close(new q(k.NETWORK_ERROR),t),t}})}_setConversation(o,s,l){return c(this,arguments,function*(e,t,i,a=de.USER){var v;let{participants:u}=t.conversation;u.forEach(b=>{let L=E.composeId(b),O=X.fromSignalingParticipant(b,!1);if(O){this._api.cacheExternalId(L,O);let G=E.composeDecorativeId(b),$=X.fromSignalingParticipant(b);G&&$&&(this._api.cacheExternalId(G,$),this._api.mapDecorativeId(b.decorativeUserId,b.id))}});let m=this._api.getUserId(),h=e.device_idx||0;if(!m){let b=(t.conversation.participants||[]).find(L=>E.comparePeerId(L.peerId,t.peerId));if(!b)throw new q(k.UNKNOWN_ERROR);m=Number(b.id),b.idType&&(a=b.idType),b.deviceIdx&&(h=b.deviceIdx),this._api.setUserId(m)}let T=E.composeParticipantId(m,a,h);this._conversation={userId:m,compositeUserId:T,externalId:yield this._getExternalIdByParticipantId(T),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||"DIRECT",direction:i,concurrent:t.isConcurrent||e.is_concurrent||!1,needRate:!1,chatId:t.conversation.multichatId,roles:[],recordsInfoByRoom:new Map,asrInfoByRoom:new Map,muteStates:new Map,muteStatesPersonal:{},joinLink:e.join_link,pinnedParticipantIdByRoom:new Map,mediaModifiers:t.mediaModifiers,options:[],networkRating:1,waitingHall:this._isInWaitingHall(t),observer:!1,asrInfo:t.conversation.asrInfo||null,roomId:((v=t.rooms)==null?void 0:v.roomId)||null,audienceMode:this._isAudienceMode(t),restricted:this._isRestricted(t),urlSharingInfoByRoom:new Map},ke.conversationId=t.conversation.id||e.id,this._signaling.setConversationId(this._conversation.id),e.p2p_forbidden&&(p.forceRelayPolicy=e.p2p_forbidden),P.log(R.RELAY_POLICY,p.forceRelayPolicy?"1":"0"),this._changeFeatureSet(),this._logDevices()})}_updateConversation(e){if(!this._conversation)throw new q(k.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||"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 qi;return this.subscribe(e,"SOURCE_CHANGED",this._onLocalMediaStreamChanged.bind(this)),this.subscribe(e,"SCREEN_STATUS",this._onScreenSharingStatus.bind(this)),this._audioFix=new ei(e),e}_connectSignaling(e,t){return c(this,null,function*(){this._signaling.setEndpoint(t.endpoint),this.subscribe(this._signaling,be.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._signaling,be.FAILED,this._onSignalingFailed.bind(this)),this.subscribe(this._signaling,be.RECONNECT,this._onSignalingReconnect.bind(this));let i=yield this._signaling.connect(e,t);return we.logEventualStat({name:R.SIGNALING_CONNECTED}),i})}_processConnection(e){return c(this,null,function*(){yield this._registerConnectionParticipants(e),this._processRooms(e),this._processMuteStates(e),this._processRecordInfos(e),this._onOptionsChanged(e.conversation.options),e.chatRoom&&e.chatRoom.totalCount&&this._onChatRoomUpdated(Qr.ATTENDEE,e.chatRoom.totalCount,e.chatRoom.firstParticipants,null,null)})}_onConversationParticipantListChunk(e){return c(this,null,function*(){let t=e.participants;t&&I.onConversationParticipantListChunk(yield this._participantListChunkToExternalChunk(this._createParticipantListChunk(t)))})}_createParticipantListChunk(e){return oe(oe({},{participants:[],countBefore:0,countAfter:0,markerFound:!1}),e)}_participantListChunkToExternalChunk(e){return c(this,null,function*(){let t=yield this._getParticipants(),i=E.mapSharedParticipants(e.participants.reduce((a,o)=>{let s=E.composeId(o);return t[s]&&a.push(t[s]),a},[]));return xe(oe({},e),{participants:i})})}_registerConnectionParticipants(e){return c(this,null,function*(){var i,a,o,s,l,u;yield this._registerParticipants(e.conversation.participants),(i=e.participants)!=null&&i.participants&&(yield this._registerParticipants((a=e.participants)==null?void 0:a.participants));let t=(s=(o=e==null?void 0:e.rooms)==null?void 0:o.rooms)!=null?s:[];for(let m of t)yield this._registerParticipants((u=(l=m==null?void 0:m.participants)==null?void 0:l.participants)!=null?u:[],!0)})}_registerParticipants(e,t=!1){return c(this,null,function*(){if(!this._conversation)return;let i=yield this._getParticipants();for(let a of e){let o=E.composeId(a);if(d.test("Conversation:RegisterParticipant",o),this._isMe(o)){this._conversation.roles=a.roles||[],this._conversation.roles.length&&(d.debug(`Local roles changed: ${a.roles}`),I.onLocalRolesChanged(this._conversation.roles,!0)),this._registerParticipantLocalMuteState(a);continue}if(a.state===Z.HUNGUP||a.state===Z.REJECTED){i[a.id]&&(yield this._removeParticipant(i[a.id],k.HUNGUP));continue}let s=E.composeDecorativeId(a);this._registerParticipant({id:o,externalId:X.fromSignalingParticipant(a),mediaSettings:Re(a.mediaSettings),participantState:E.mapParticipantState(a),state:a.state,roles:a.roles||[],status:"WAITING",muteStates:a.muteStates||{},unmuteOptions:a.unmuteOptions||[],observedIds:a.observedIds||[],markers:this._denormalizeMarkers(o,a.markers),movieShareInfos:a.movieShareInfos,isInRoom:t},s);let l=yield this._getParticipant(o);l&&a.roles&&a.roles.length&&(d.debug(`Roles for participant [${o}] changed: ${a.roles}`),I.onRolesChanged(l.externalId,a.roles,!0))}})}_registerParticipantLocalMuteState({muteStates:e,unmuteOptions:t}){if(!e)return;let i=()=>c(this,null,function*(){let a=pr(e,Fe.MUTE),o=pr(e,Fe.MUTE_PERMANENT);for(let s of[a,o])s.length&&(yield this._onMuteParticipant({muteStates:e,unmuteOptions:t,mediaOptions:s,stateUpdated:!0}))});E.setImmediate(()=>i().catch(a=>d.error(a)))}_getStatusByTransportState(e){let t=null;return e==="CONNECTED"?t="CONNECTED":e==="CONNECTING"||e==="OPENED"?t="CONNECTING":e==="RECONNECTING"&&(t="RECONNECT"),t}_registerParticipantInCache(e){return this._participants[e.id]=e,e}_getExistedParticipantByIdOrCreate(e){return c(this,null,function*(){let i=(yield this._getParticipants())[e];if(i)return i;let a=this._api.getDecorativeIdByInitialId(E.decomposeId(e).id),o=a?E.composeUserId(a):void 0;return this._createParticipant({id:e},o)})}_getExternalIdByParticipantId(e){return c(this,null,function*(){var i,a;if(this._isMe(e))return(i=this._conversation)==null?void 0:i.externalId;if(p.useParticipantListChunk)return(yield this._getExistedParticipantByIdOrCreate(e)).externalId;let t=yield this._getParticipants();if((a=t[e])!=null&&a.externalId)return t[e].externalId;{let o=yield this._getParticipantId(e);return this._api.cacheExternalId(e,o),o}})}_registerParticipantAndSetMarkersIfChunkEnabled(e,t){return c(this,null,function*(){if(p.useParticipantListChunk){let a=this._registerParticipantInCache(yield this._getExistedParticipantByIdOrCreate(e));return a.markers=this._denormalizeMarkers(a.id,t),a}return(yield this._getParticipants())[e]})}_warnParticipantNotInConversation(e){d.warn(`Participant [${e}] isn't in conversation`)}_denormalizeMarkers(e,t){if(!t)return null;let i=Object.values(t).find(a=>"ts"in a&&"rank"in a);return Object.entries(t).reduce((a,[o,s])=>(a[o]=xe(oe(oe({},i),s),{id:e}),a),{})}_processRooms(e){var i,a;let t=(a=(i=e.rooms)==null?void 0:i.roomId)!=null?a:null;this._onRoomSwitched(t,!0)}_processMuteStates(e,t=!1){var l,u,m;let i=bn(e);this._setMuteStatesForRoomId(i,null);for(let h of(u=(l=e.rooms)==null?void 0:l.rooms)!=null?u:[])this._setMuteStatesForRoomId(h.muteStates,h.id);let a=this._getMuteStatesForCurrentRoom();t&&(a=Dn(e,a));let o=Object.keys(a),s=(m=this._conversation)==null?void 0:m.roomId;o.length&&this._onMuteParticipant({muteStates:a,mediaOptions:o,muteAll:!0,stateUpdated:!0,roomId:s},t)}_processRecordInfos(e){var t,i,a,o,s;this._onRecordInfo((i=(t=e.conversation)==null?void 0:t.recordInfo)!=null?i:null);for(let l of(o=(a=e.rooms)==null?void 0:a.rooms)!=null?o:[])this._onRecordInfo((s=l.recordInfo)!=null?s:null,l.id)}_processPinnedParticipants(e){var t,i,a,o;e.conversation.pinnedParticipantId?this._onPinParticipant(e.conversation.pinnedParticipantId):(t=this._conversation)==null||t.pinnedParticipantIdByRoom.delete(null);for(let s of(a=(i=e.rooms)==null?void 0:i.rooms)!=null?a:[])s.pinnedParticipantId?this._onPinParticipant(s.pinnedParticipantId,!1,void 0,s.id):(o=this._conversation)==null||o.pinnedParticipantIdByRoom.delete(s.id)}_allocateTransport(){return c(this,null,function*(){if(!this._conversation||!this._mediaSource)return;this._transport=new gr(this._conversation.topology,this._signaling,this._mediaSource,this._serverSettings),this._debugInfo=new Ti,this.subscribe(this._transport,"STATE_CHANGED",this._onTransportStateChanged.bind(this)),this.subscribe(this._transport,"LOCAL_STATE_CHANGED",this._onTransportLocalStateChanged.bind(this)),this.subscribe(this._transport,"REMOTE_TRACK_ADDED",this._onRemoteTrackAdded.bind(this)),this.subscribe(this._transport,"REMOTE_TRACK_REMOVED",this._onRemoteTrackRemoved.bind(this)),this.subscribe(this._transport,"AUDIO_MIX_STALL",this._onAudioMixStall.bind(this)),this.subscribe(this._transport,"REMOTE_DATA_STATS",this._onRemoteDataStats.bind(this)),this.subscribe(this._transport,"SIGNALLED_STALLED_PARTICIPANTS",this._onRemoteSignalledStall.bind(this)),this.subscribe(this._transport,"TOPOLOGY_CHANGED",this._onTopologyChanged.bind(this)),this.subscribe(this._transport,"NETWORK_STATUS",this._onNetworkStatus.bind(this)),this.subscribe(this._transport,"REMOTE_STREAM_SECOND",this._onRemoteStreamSecond.bind(this)),this.subscribe(this._transport,"PEER_CONNECTION_CLOSED",this._onPeerConnectionClosed.bind(this)),this.subscribe(this._transport,"ASR_TRANSCRIPTION",this._onAsrTranscription.bind(this)),this.subscribe(this._transport,"ANIMOJI_STREAM",this._onAnimojiStream.bind(this)),this.subscribe(this._transport,"ANIMOJI_ERROR",this._onAnimojiError.bind(this));let e=this._conversation.direction===ut.OUTGOING&&!this._conversation.concurrent,t=yield this._getParticipants();for(let i of Object.values(t))(i.state===Z.ACCEPTED||i.state===Z.CALLED)&&this._transport.allocate(i.id,e)})}_createSpeakerDetector(){this._transport&&this._conversation&&(this._volumesDetector=new fr(this._transport),this.subscribe(this._volumesDetector,"VOLUMES_DETECTED",this._onVolumesDetected.bind(this)),this._speakerDetector=new Sr(this._volumesDetector,this._transport,this._conversation.topology),this.subscribe(this._speakerDetector,"SPEAKER_CHANGED",this._onSpeakerChanged.bind(this)),this._localVolumeDetector=new Ri(this._mediaSource))}_createSpecListener(){return c(this,null,function*(){this._transport&&this._volumesDetector&&(this._specListener=new Ai(this._transport,this._volumesDetector,yield this._getParticipants()))})}_logDevices(){let e=A.getCameras().length,t=A.getMicrophones().length;d.debug("Cameras: "+e+(A.hasCameraPermission()?"✔":"✖")+", Microphones: "+t+(A.hasMicrophonePermission()?"✔":"✖")),P.log(R.DEVICES,`${e}_${t}`)}_logWithMediaSettings(e,t){P.log(e,[(t==null?void 0:t.isAudioEnabled)&&"audio",(t==null?void 0:t.isVideoEnabled)&&"video"].filter(Boolean).join("_"))}_removeParticipant(e,t){return c(this,null,function*(){var a;if(e.state===Z.CALLED||e.state===Z.ACCEPTED||this._state==="CLOSE")return;e.id===this._lastSignalledActiveSpeakerId&&(this._lastSignalledActiveSpeakerId=null);let i=yield this._getParticipants();if(i[e.id]){t===k.HUNGUP?this._setParticipantsStatus([e],"HANGUP"):this._setParticipantsStatus([e],"ERROR",t),(a=e.mediaSource)==null||a.disconnect(),this._conversation&&this._conversation.pinnedParticipantIdByRoom.get(null)===e.id&&this._conversation.pinnedParticipantIdByRoom.delete(null),this._conversation&&this._conversation.roomId&&this._conversation.pinnedParticipantIdByRoom.get(this._conversation.roomId)===e.id&&this._conversation.pinnedParticipantIdByRoom.delete(this._conversation.roomId);for(let[o,s]of Object.entries(e.lastRequestedLayouts))this._streamIdByStreamDescription.delete(o),this._sequenceNumberByStreamDescription.delete(o),this._cooldownTimestampByStreamDescription.delete(o),this._streamWaitTimerByStreamDescription.has(o)&&(window.clearTimeout(this._streamWaitTimerByStreamDescription.get(o)),this._streamWaitTimerByStreamDescription.delete(o)),this._sendUpdateDisplayLayout({[o]:{stopStream:!0}});this._api.unmapDecorativeId(e.id),delete i[e.id],I.onRemoteRemoved(e.externalId,e.markers)}})}_cleanupListeners(){this.unsubscribe(),window.removeEventListener("unload",this._onUnload)}_cleanupMediaSource(){this._mediaSource&&(this._mediaSource.destroy(),this._mediaSource=null)}_cleanupParticipants(){return c(this,null,function*(){Object.values(yield this._getParticipants()).forEach(e=>{var t,i,a,o;(t=e.remoteStream)==null||t.getTracks().forEach(s=>s.stop()),(i=e.remoteAudioTrack)==null||i.stop(),(a=e.secondStream)==null||a.getTracks().forEach(s=>s.stop()),(o=e.mediaSource)==null||o.disconnect()}),this._participants={},this._audioOutput&&this._audioOutput.destroy()})}_cleanupParticipantAgnosticStreams(){d.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 c(this,null,function*(){d.debug(`Add new participant [${e}]`);let a=yield this._getParticipant(e);if(a&&(a.state===Z.ACCEPTED||a.state===Z.CALLED)){d.warn(`Participant [${a.id}:${a.state}] is already in conversation`);return}if(!a){let o=E.composeDecorativeId(t);this._registerParticipant({id:e,externalId:X.fromSignalingParticipant(t),mediaSettings:Re(t.mediaSettings),state:t.state,roles:t.roles||[],muteStates:t.muteStates||{},unmuteOptions:t.unmuteOptions||[],observedIds:t.observedIds||[]},o),a=yield this._getParticipant(e)}this._setParticipantsStatus([a],"WAITING"),i?(a.state=Z.HUNGUP,yield this._removeParticipant(a,i)):this._transport&&(a.state=Z.CALLED,this._transport.allocate(a.id,!0),P.log(R.ADD_PARTICIPANT),this._invokeRolesChangedCallbackIfNeeded(a))})}_onRemoveParticipant(e){return c(this,null,function*(){d.debug(`Remove participant [${e}]`);let t=[],i=yield this._getParticipants();for(let a=0;a<=As;a++){let o=E.compose(e,a),s=i[o];s&&t.push(s)}if(!t.length){this._warnParticipantNotInConversation(e);return}if(this._transport)for(let a of t)this._transport.close(a.id);P.log(R.REMOVE_PARTICIPANT)})}changeDevice(e){return c(this,null,function*(){return e==="audiooutput"?this._audioOutput.changeOutput():this._mediaSource?this._mediaSource.changeDevice(e):Promise.reject(ce.UNKNOWN)})}stopVideoTrack(){var e;return(e=this._mediaSource)==null?void 0:e.stopVideoTrack()}toggleScreenCapturing(e){return c(this,null,function*(){return this._mediaSource?this._mediaSource.toggleScreenCapturing(e):Promise.reject(ce.UNKNOWN)})}disableScreenCapturing(){return c(this,null,function*(){return this._mediaSource?this._mediaSource.disableScreenCapturing():Promise.reject(ce.UNKNOWN)})}toggleAnimojiCapturing(e){this._mediaSource&&this._mediaSource.toggleAnimojiCapturing(e)}setAnimojiSvg(e,t=null,i=null){if(!this._transport||!this._conversation)return;let a=!t,o=t!=null?t:this._conversation.compositeUserId;if(e instanceof ArrayBuffer){let s=i!=null?i:this._conversation.externalId.id;this._transport.setAnimojiSvg(o,{svg:e,userId:s,isMe:a});return}this._transport.setAnimojiSvg(o,{svg:e,isMe:a})}setAnimojiFill(e){var t;(t=this._transport)==null||t.setAnimojiFill(e)}setVideoStream(e,t=!1){return c(this,null,function*(){if(this._mediaSource)return this._mediaSource.setVideoStream(e,t)})}setAudioStream(e){return c(this,null,function*(){if(this._mediaSource)return this._mediaSource.setAudioStream(e)})}toggleLocalVideo(e){return c(this,null,function*(){if(this._mediaSource)return P.log(R.MEDIA_STATUS,e?"video_1":"video_0"),this._mediaSource.toggleVideo(e)})}toggleLocalAudio(e){return c(this,null,function*(){if(this._mediaSource)return P.log(R.MEDIA_STATUS,e?"audio_1":"audio_0"),this._mediaSource.toggleAudio(e)})}changePriorities(e){return c(this,null,function*(){if(e.length<2||!this._signaling.ready)return;let t={},i={};for(let o of e){let s=typeof o.uid=="object"?o.uid:X.fromId(o.uid),l=X.toString(s);i[l]=o.priority}let a=yield this._getParticipants();for(let o of Object.values(a)){let s=X.toString(o.externalId);i.hasOwnProperty(s)&&(t[o.id]=i[s])}yield this._signaling.changePriorities(t)})}changeParticipantState(e,t){return c(this,null,function*(){for(let[i,a]of Object.entries(e))if(i.length>5||a.length>5)throw new Error("key/value max length is 5 chars, mappings with empty values (null or empty string) are discarded");t&&!this._isCallAdmin()&&(t=void 0),yield this._signaling.changeParticipantState(e,t)})}putHandsDown(){return c(this,null,function*(){this._checkAdminRole(),yield this._signaling.putHandsDown()})}requestKeyFrame(e){return c(this,null,function*(){let t={};return t[Ye(e)]={keyFrameRequested:!0},this._signaling.updateDisplayLayout(t)})}requestTestMode(e,t){return c(this,null,function*(){return this._signaling.requestTestMode(e,t)})}updateDisplayLayout(e){return c(this,null,function*(){var o;if(e.length<1||!this._signaling.ready||((o=this._transport)==null?void 0:o.getTopology())!=="SERVER")return;d.log(`Update display layout request [${this._signaling.getNextCommandSequenceNumber()}]`,e);let t={},i=yield this._getParticipants();for(let s of e){let l=typeof s.uid=="object"?s.uid:X.fromId(s.uid),u=this._api.getCachedOkIdByExternalId(l);if(!u){let T=X.toString(l);d.log(`Unknown participant external ID ${T}`);continue}let m=Ye({participantId:u,mediaType:s.mediaType,streamName:s.streamName}),h=i[u];h?h.lastRequestedLayouts[m]=s:this._isMe(u)&&(this._myLastRequestedLayouts[m]=s),Qt(s)?(this._isMe(u)&&delete this._myLastRequestedLayouts[m],this._streamIdByStreamDescription.has(m)&&!this._cooldownTimestampByStreamDescription.has(m)&&this._cooldownTimestampByStreamDescription.set(m,Date.now())):(this._cooldownTimestampByStreamDescription.delete(m),!this._streamIdByStreamDescription.has(m)&&p.videoTracksCount>0&&this._streamIdByStreamDescription.set(m,null),t[m]=s),s.mediaType==="SCREEN"&&!Qt(s)&&it(Ft(u))}let a=this._cooldownTimestampByStreamDescription.keys();for(;this._streamIdByStreamDescription.size>p.videoTracksCount;){let s=a.next();if(s.done){d.error("Cannot accommodate all streaming requests: tracks available "+p.videoTracksCount+"; requested streams: "+Array.from(this._streamIdByStreamDescription.keys()));break}yield this._stopStreaming(s.value),t[s.value]={stopStream:!0}}yield this._sendUpdateDisplayLayout(t)})}feedback(e){return c(this,null,function*(){return this._signaling.feedback(e)})}userFeedbackStats(e,t,i){if(this._conversation)if(!p.clientEventsLoggingEnabled)this._api.sendUserFeedbackStats(this._conversation.id,e,t,i);else{let a={event_type:R.USER_FEEDBACK_RECEIVED,user_response:e};t!==void 0&&(a.reason=t),i!==void 0&&(a.group_call_users_count=i),P.logClientEvent(a,!0)}}sendClientEvent(e,t={},i=!1){let a=oe({event_type:e},t);P.logClientEvent(a,i)}_stopStreaming(e){return c(this,null,function*(){var i;if(this._cooldownTimestampByStreamDescription.delete(e),this._sequenceNumberByStreamDescription.set(e,this._signaling.getNextCommandSequenceNumber()),this._streamWaitTimerByStreamDescription.has(e)&&(d.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 a=yield this._getParticipants(),o=Si(e),s=a[o.participantId],l=(i=this._conversation)==null?void 0:i.externalId,u=this._isMe(o.participantId);if(s||u){switch(o.mediaType){case"STREAM":case"MOVIE":{if(o.streamName){let m={stream:null,streamName:o.streamName,mediaType:o.mediaType};u?I.onLocalLive(l,m):I.onRemoteLive(s.externalId,m)}break}case"CAMERA":{I.onRemoteStream(s.externalId,null);break}case"SCREEN":{I.onRemoteScreenStream(s.externalId,null);break}}P.log(R.PAT_DEALLOCATED)}else d.log(`Cannot find participant to stop streaming: ${o.participantId}`)}this._streamIdByStreamDescription.delete(e)})}_sendUpdateDisplayLayout(e){return c(this,null,function*(){if(Object.keys(e).length===0)return;d.log(`Update display layout send [${this._signaling.getNextCommandSequenceNumber()}]`,e);let t=yield this._signaling.updateDisplayLayout(e);if(!t)return;let i=[],a=yield this._getParticipants();for(let[o,s]of Object.entries(t.errorCodeByParticipantId||{})){let l=Si(o),u=a[l.participantId];if(u){let m;typeof s!="number"?(d.warn(`Unexpected error code ${s} received for participant ${l.participantId}`),m=En.UNKNOWN_ERROR):m=Tn(s),i.push({externalId:u.externalId,errorReason:m})}}if(i&&i.length)throw new ia("Could not allocate one or more participants",i)})}_cleanupCooldownQueue(){return c(this,null,function*(){let e={},t=this._cooldownTimestampByStreamDescription.entries();do{let i=t.next();if(i.done)break;let a=i.value;if(a[1]+Ms>Date.now())break;let s=a[0];yield this._stopStreaming(s),e[s]={stopStream:!0}}while(!0);this._sendUpdateDisplayLayout(e)})}_onParticipantSourcesUpdate(e){if(this._conversation){let t=e.participantUpdateInfos;d.log("Received participant sources update notification",t);for(let i of t)this._waitForStreamIfNeeded(i)}}_onParticipantPromoted(e){return c(this,null,function*(){this._conversation&&this._conversation.audienceMode?(d.log("Promoted in audience mode",!e.demote),this._conversation.restricted=e.demote,this._processRecordInfos(e),!e.demote&&this._mediaSource&&this._changeMediaSettings(this._mediaSource.getMediaSettings())):(d.log("Promoted in waiting hall",!e.demote),e.demote?(d.log("Kicked from waiting hall"),this._close(new q(k.REMOVED))):(this._updateConversation(e),yield this._onJoinPart2(e))),I.onPromoted(e.demote)})}_onChatRoomUpdated(s){return c(this,arguments,function*(e,t=0,i=[],a,o){d.log(`Chat room updated: ${e}`);let l=[],u=[],m=[],h=[],T=[];if(i.length&&i.forEach(L=>{if(L.externalId){let O=X.fromSignaling(L.externalId);T.push(O),this._api.cacheExternalId(L.id.id,O)}else{let O=E.decomposeId(L.id.id).id;l.push(O),h.push(O)}}),a!=null&&a.length&&a.forEach(L=>{let O=E.decomposeId(L).id;l.push(O),u.push(O)}),o!=null&&o.length&&o.forEach(L=>{let O=E.decomposeId(L).id;l.push(O),m.push(O)}),!l.length){I.onChatRoomUpdated(e,t,T,[],[]);return}if(h.length){let L=yield this._api.getExternalIdsByOkIds(h);T.push(...L)}let v=yield this._api.getExternalIdsByOkIds(u),b=yield this._api.getExternalIdsByOkIds(m);I.onChatRoomUpdated(e,t,T,v,b)})}_onSharedMovieUpdate(e){return c(this,null,function*(){var i;let t=(i=this._conversation)==null?void 0:i.externalId;for(let a of e.data)if(this._isMe(a.participantId))I.onLocalLiveUpdate(t,a);else{let s=yield this._getExternalIdByParticipantId(a.participantId);s&&I.onRemoteLiveUpdate(s,a)}})}_onSharedMovieInfoStarted(e){return c(this,null,function*(){d.log(`Shared movie started data received: ${e.notification}`),yield this._processSharedMovieInfo(e.movieShareInfo,e.roomId)})}_processSharedMovieInfos(e,t=null){return c(this,null,function*(){e&&(yield Promise.all(e.map(i=>this._processSharedMovieInfo(i,t))))})}_processSharedMovieInfo(e,t=null){return c(this,null,function*(){var o;if(!e)return;let i=(o=this._conversation)==null?void 0:o.externalId;if(this._isMe(e.initiatorId))I.onLocalSharedMovieInfo(i,e,t);else{let s=yield this._getExternalIdByParticipantId(e.initiatorId);s&&I.onRemoteSharedMovieInfo(s,e,t)}this._forceOpenTransportForAloneInCall()})}_processConnectionSharedMovieInfo(e){return c(this,null,function*(){var i,a;let t=e.conversation.participants.find(o=>this._isMe(E.composeId(o)));yield this._processSharedMovieInfos(t==null?void 0:t.movieShareInfos,(a=(i=e==null?void 0:e.rooms)==null?void 0:i.roomId)!=null?a:null)})}_processConnectionAsrInfo(e){return c(this,null,function*(){var o,s,l,u,m,h,T,v,b,L;let t=(s=e==null?void 0:e.conversation.asrInfo)!=null?s:(o=this._conversation)==null?void 0:o.asrInfo;if(t&&((l=this._conversation)==null||l.asrInfoByRoom.set(null,t)),(u=e==null?void 0:e.rooms)!=null&&u.rooms)for(let O of e.rooms.rooms)O.asrInfo&&((m=this._conversation)==null||m.asrInfoByRoom.set(O.id,O.asrInfo));let i=(b=(v=(h=e==null?void 0:e.rooms)==null?void 0:h.roomId)!=null?v:(T=this._conversation)==null?void 0:T.roomId)!=null?b:null,a=(L=this._conversation)==null?void 0:L.asrInfoByRoom.get(i);if(a){let O=yield this._getExternalIdByParticipantId(a.initiatorId);O&&I.onAsrSet({externalId:O,movieId:a.movieId},i)}else i&&I.onAsrSet(null,i)})}_processConversationUrlSharingInfo(e){return c(this,null,function*(){if(!this._conversation)return;e&&this._extractConnectionUrlSharingInfo(e);let{urlSharingInfoByRoom:t}=this._conversation,i=this._conversation.roomId,a=t.get(i);if(a&&!this._isMe(a.initiatorId)){let o=yield this._getExternalIdByParticipantId(a.initiatorId);o&&I.onRemoteSharedUrl(o,a.sharedUrl,i)}})}_extractConnectionUrlSharingInfo(e){var i;if(!this._conversation)return;let{urlSharingInfoByRoom:t}=this._conversation;if(e.conversation.urlSharingInfo?t.set(null,e.conversation.urlSharingInfo):t.delete(null),(i=e.rooms)!=null&&i.rooms)for(let a of e.rooms.rooms)a.urlSharingInfo?t.set(a.id,a.urlSharingInfo):t.delete(a.id)}_onSharedMovieInfoStopped(e){return c(this,null,function*(){var m;d.log(`Shared movie stopped data received: ${e.notification}`);let t=(m=this._conversation)==null?void 0:m.externalId,{initiatorId:i,movieId:a,source:o,roomId:s=null}=e,l={initiatorId:i,movieId:a,source:o};if(this._isMe(i))I.onLocalSharedMovieStoppedInfo(t,l,s);else{let h=yield this._getExternalIdByParticipantId(i);if(h){let v=(yield this._getParticipants())[i];v!=null&&v.movieShareInfos&&(v.movieShareInfos=v.movieShareInfos.filter(b=>b&&b.movieId!==a)),I.onRemoteSharedMovieStoppedInfo(h,l,s)}}})}_onUrlSharingInfoUpdated(e){return c(this,null,function*(){if(d.log(`Shared URL data received: ${e.notification}`),!this._conversation)return;let{urlSharingInfoByRoom:t,roomId:i}=this._conversation,{initiatorId:a,sharedUrl:o,roomId:s=null}=e;if(o?t.set(s,{sharedUrl:o,initiatorId:a}):t.delete(s),!(!o&&s!==i&&t.has(i))&&(!o||!this._isMe(a))){let l=yield this._getExternalIdByParticipantId(a);l&&I.onRemoteSharedUrl(l,o,s)}})}_onFeaturesPerRoleChanged(e){d.log(`Features per role changed: ${e.notification}`),I.onFeaturesPerRoleChanged(e.featuresPerRole)}_waitForStreamIfNeeded(e){return c(this,null,function*(){var h,T,v;let t=this._matchStreamDescription(e.participantStreamDescription);if(!t)return;let{mediaType:i,participantId:a}=t;if(i==="ANIMOJI")return;let o=yield this._getParticipant(a);if(p.producerScreenDataChannel&&i==="SCREEN"&&!e.fastScreenShare){d.log("skipping participant-sources-update notification since screenshare will be received over datachannel");return}let s=Ye(t),l=this._sequenceNumberByStreamDescription.get(s);if(l&&l>e.sequenceNumber){d.warn(`Participant ${a} received outdated PAT response: sequence number ${e.sequenceNumber}; last sent sequence number for given participant is ${l}`),P.log(R.PAT_OUTDATED_RESPONSE);return}o&&e.suspend!==void 0&&i&&(d.debug(`participant-sources-update: mediaType=${i}, suspend=${e.suspend}`),I.onRemoteStreamSuspended(o.externalId,i,e.suspend));let u=e.streamId,m=e.rtpTimestamp?this._getWaitingTime(u,e.rtpTimestamp):0;if(m<=0){this._streamWaitTimerByStreamDescription.delete(s);let b=(h=this._conversation)==null?void 0:h.externalId,L=this._isMe(a);if(!o&&!L){P.log(R.PAT_ERROR,"participantMissing"),d.error(`Could not find participant by ID: ${a}`);return}let O=L?b:o.externalId,G=this._streamByStreamId.get(u);if(!G){P.log(R.PAT_ERROR,"streamNotFound"),d.error(`Could not find stream by ID: ${u}`);return}P.log(R.PAT_ALLOCATED),this._streamIdByStreamDescription.set(s,u);let $=(T=e.participantStreamDescription)==null?void 0:T.mediaType;if($==="STREAM"||$==="MOVIE"){if((v=e.participantStreamDescription)!=null&&v.streamName){let le={streamName:e.participantStreamDescription.streamName,stream:G,mediaType:$};L?I.onLocalLive(O,le):I.onRemoteLive(O,le)}}else if(p.producerScreenTrack&&$==="SCREEN")I.onRemoteScreenStream(o.externalId,G);else if(!L){let le=(p.producerScreenTrack?null:o.secondStream)||G;I.onRemoteStream(o.externalId,le)}}else{d.debug(`Waiting for ${m} until stream ${u} for ${s} is switched`);let b=window.setTimeout(this._waitForStreamIfNeeded.bind(this,e),m);this._streamWaitTimerByStreamDescription.set(s,b)}})}_matchStreamDescription(e){if(!e)return null;if(this._streamIdByStreamDescription.has(Ye(e)))return e;let t=e.participantId;if(e.mediaType){let i={participantId:t,mediaType:null};if(this._streamIdByStreamDescription.has(Ye(i)))return i}else{let i={participantId:t,mediaType:"CAMERA"};if(this._streamIdByStreamDescription.has(Ye(i)))return i;let a={participantId:t,mediaType:"SCREEN"};if(this._streamIdByStreamDescription.has(Ye(a)))return a}return d.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?E.includesOneOf(this._conversation.roles,[mt.ADMIN,mt.CREATOR]):!1}_checkAdminRole(){if(this._conversation&&!E.includesOneOf(this._conversation.roles,[mt.ADMIN,mt.CREATOR]))throw new Error("You don't have the required permission")}_isCalledState(){return this._participantState===Z.CALLED}grantRoles(e,t,i){return c(this,null,function*(){this._checkAdminRole(),yield this._signaling.grantRoles(e,t,i)})}startAsr(e){return c(this,null,function*(){yield this._signaling.startAsr(e)})}stopAsr(e){return c(this,null,function*(){yield this._signaling.stopAsr(e)})}requestAsr(e){return c(this,null,function*(){this._isRealTimeAsrRequested=e,e&&this._forceOpenTransportForAloneInCall(),yield this._signaling.requestAsr(e)})}muteParticipant(){return c(this,arguments,function*(e=null,t,i=[],a=null){this._checkAdminRole(),yield this._signaling.muteParticipant(e,t,i,a)})}enableFeatureForRoles(e,t){return c(this,null,function*(){yield this._signaling.enableFeatureForRoles(e,t)})}pinParticipant(a,o){return c(this,arguments,function*(e,t,i=null){var s;this._checkAdminRole(),yield this._signaling.pinParticipant(e,t,i),(s=this._conversation)==null||s.pinnedParticipantIdByRoom.set(i,t?null:e)})}updateMediaModifiers(e){return c(this,null,function*(){this._signaling.ready&&this._conversation&&(this._conversation.mediaModifiers=e,yield this._signaling.updateMediaModifiers(e))})}enableVideoSuspend(e){return c(this,null,function*(){var t;this._signaling.ready&&this._conversation&&((t=this._transport)==null?void 0:t.getTopology())==="SERVER"&&(yield this._signaling.enableVideoSuspend(e))})}enableVideoSuspendSuggest(e){return c(this,null,function*(){var t;this._signaling.ready&&this._conversation&&((t=this._transport)==null?void 0:t.getTopology())==="SERVER"&&(yield this._signaling.enableVideoSuspendSuggest(e))})}changeOptions(e){return c(this,null,function*(){if(this._signaling.ready&&this._conversation){this._checkAdminRole(),yield this._signaling.changeOptions(e);let t=_n(this._conversation.options,e);this._onOptionsChanged(t)}})}getWaitingHall(e,t,i){return c(this,null,function*(){if(!this._signaling)return Promise.reject();let a=null;if(e&&(a=yn(e),a)){let m=this._api.getDecorativeIdByInitialId(a.id);a.id=m?E.composeUserId(m):a.id}let o=yield this._signaling.getWaitingHall(a,t,i);if(o.error)return Promise.reject(o.message);let s=o.participants||[],{externalIds:l}=yield this._resolveWaitingHallExternalIds(s),u=null;return s.length&&o.hasMore&&(u=Pn(s[s.length-1].id)),{participants:l,pageMarker:u,totalCount:o.totalCount||0}})}_resolveWaitingHallExternalIds(e){return c(this,null,function*(){let t=new Map,i=[],a=[];if(e.length){let o=[];e.forEach(s=>{if(t.set(s.id.id,s.id.addedTs),s.externalId){let l=X.fromSignaling(s.externalId);i.push(s.id.addedTs),a.push(l),this._api.cacheExternalId(s.id.id,l)}else o.push(E.decomposeId(s.id.id).id)}),o.length&&!a.length&&(a=yield this._api.getExternalIdsByOkIds(o),i=a.map(s=>{let l=this._api.getCachedOkIdByExternalId(s);return(l?t.get(l):void 0)||Date.now()}))}return{externalIds:a,timestamps:i}})}getAudienceModeHands(){return c(this,null,function*(){if(!this._signaling.ready)throw new Error("Signaling is not ready");let e=yield this._signaling.getHandQueue();if(e.error)return Promise.reject(e.message);let t=e.participants||[],{externalIds:i,timestamps:a}=yield this._resolveWaitingHallExternalIds(t);return{timestamps:a,participants:i,totalCount:e.totalCount||0}})}promoteParticipant(e,t){return c(this,null,function*(){if(this._signaling&&this._conversation)try{if(!E.includesOneOf(this._conversation.options,[Zt.WAITING_HALL,Zt.AUDIENCE_MODE]))throw new Error("Unable to promote a participant in the conversation with current options");if(this._checkAdminRole(),!e&&t)throw new Error("participantId is required");yield this._signaling.promoteParticipant(e,t)}catch(i){throw d.warn(`Failed to promote participant ${e}. ${i}`),i}})}requestPromotion(e=!1){return c(this,null,function*(){this._signaling.ready&&(yield this._signaling.requestPromotion(e))})}acceptPromotion(e=!1){return c(this,null,function*(){this._signaling.ready&&(yield this._signaling.acceptPromotion(e))})}chatMessage(e,t=null){return c(this,null,function*(){this._signaling.ready&&(yield this._signaling.chatMessage(e,t))})}chatHistory(e){return c(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 a=t.messages[i];yield this._onChatMessage(a)}}})}customData(e,t=null){return c(this,null,function*(){this._signaling.ready&&(yield this._signaling.customData(e,t))})}createJoinLink(){return c(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 c(this,null,function*(){if(this._conversation&&(yield this._api.removeJoinLink(this._conversation.id)).success){delete this._conversation.joinLink;return}return Promise.reject()})}addMovie(o){return c(this,arguments,function*({movieId:e,gain:t,metadata:i,lang:a}){let s={movieId:e,lang:a};(t||t===0)&&(s.gain=t),i&&(s.metadata=i);let l=yield this._signaling.addMovie(s);if(l.error)throw new Error(l.error);return{movieId:l.movieId,streamType:l.streamType}})}updateMovie(e){return c(this,null,function*(){let t=yield this._signaling.updateMovie(e);if(t.error)throw new Error(t.error)})}removeMovie(e){return c(this,null,function*(){let t={movieId:e},i=yield this._signaling.removeMovie(t);if(i.error)throw new Error(i.error)})}startUrlSharing(e){return c(this,null,function*(){let t=yield this._signaling.startUrlSharing(e);if(t.error)throw new Error(t.error)})}stopUrlSharing(){return c(this,null,function*(){let e=yield this._signaling.stopUrlSharing();if(e.error)throw new Error(e.error)})}updateRooms(e,t){return c(this,null,function*(){let i=yield this._signaling.updateRooms(e,t);if(i.error)throw new Error(i.error)})}activateRooms(e,t){return c(this,null,function*(){let i=yield this._signaling.activateRooms(e,t);if(i.error)throw new Error(i.error)})}switchRoom(e,t){return c(this,null,function*(){let i=yield this._signaling.switchRoom(e,t);if(i.error)throw new Error(i.error)})}removeRooms(e){return c(this,null,function*(){let t=yield this._signaling.removeRooms(e);if(t.error)throw new Error(t.error)})}startStream(){return c(this,arguments,function*(e=!1,t=null,i=null,a="DIRECT_LINK",o=null,s=null){let l={movieId:i,name:t,privacy:a,groupId:o,roomId:s,streamMovie:!e},u=yield this._signaling.startStream(l);if(u.error)return Promise.reject(u.message)})}stopStream(){return c(this,arguments,function*(e=null){if((yield this._signaling.stopStream({roomId:e})).error)return Promise.reject()})}publishStream(){return c(this,arguments,function*(e=null){if((yield this._signaling.publishStream({roomId:e})).error)return Promise.reject()})}recordSetConf(o,s){return c(this,arguments,function*(e,t,i=!1,a=null){let l=yield this._signaling.recordSetConf({king:e,pawns:t,hideParticipantCount:i,roomId:a});if(l.error)throw new Error(l.error)})}getStreamInfo(){return c(this,null,function*(){let e=yield this._signaling.getRecordStatus();return{movieId:e.recordMovieId,preview:e.recordMoviePreviewUrl}})}setLocalResolution(i){return c(this,arguments,function*({video:e,effect:t}){if(e.width<p.videoMinWidth||e.height<p.videoMinHeight)throw new Error("Sizes received are less than the `videoMinWidth` or `videoMinHeight`");if(t){if(t.width<p.videoMinWidth||t.height<p.videoMinHeight)throw new Error("Sizes of effect received are less than the `videoMinWidth` or `videoMinHeight`");p.videoEffectMaxHeight=t.height,p.videoEffectMaxWidth=t.width}p.videoMaxWidth=e.width,p.videoMaxHeight=e.height,d.debug("Set local video resolution:",`video ${e.width}x${e.height}`+(t?`, effect ${t.width}x${t.height}`:"")),this._mediaSource&&(yield this._mediaSource.setResolution({video:e,effect:t}),this._transport&&(yield this._transport.onCameraResolutionChanged()))})}videoEffect(e){return c(this,null,function*(){var t;return(t=this._mediaSource)==null?void 0:t.videoEffect(e)})}audioEffect(e,t){return c(this,null,function*(){var i;return(i=this._mediaSource)==null?void 0:i.audioEffect(e?{effects:e,isPreset:t}:null)})}_convertExternalIdsToServerExternalIds(e){return e.map(t=>({id:t.id,type:p.externalUserType}))}getParticipants(e){return c(this,null,function*(){var s;let t=this._convertExternalIdsToServerExternalIds(e.externalIds),i=yield this._signaling.getParticipants(t);if(i.error)throw new Error(i.error);let a=i.participants,o=(s=this._transport)==null?void 0:s.getState();return Promise.all(a.map(l=>c(this,null,function*(){var m;let u=E.composeId(l);return this._createParticipant({id:u,externalId:X.fromSignalingParticipant(l),mediaSettings:Re(l.mediaSettings),participantState:E.mapParticipantState(l),state:l.state,roles:l.roles||[],status:(m=this._getStatusByTransportState(o))!=null?m:"WAITING",muteStates:l.muteStates||{},unmuteOptions:l.unmuteOptions||[],observedIds:l.observedIds||[],markers:this._denormalizeMarkers(u,l.markers)},l.decorativeUserId)}))).then(E.mapSharedParticipants)})}getParticipantListChunk(e){return c(this,null,function*(){var l;d.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),a=yield this._getParticipants(),o=i.participants.filter(u=>{let m=E.composeId(u);return!a[m]});yield this._registerParticipants(o);let s=(l=this._transport)==null?void 0:l.getState();return i.participants.forEach(u=>{var T,v;let m=E.composeId(u),h=a[m];h.status=(T=this._getStatusByTransportState(s))!=null?T:"WAITING",h.movieShareInfos=u.movieShareInfos,Object.assign(h.mediaSettings,Re(u.mediaSettings)),Object.assign(h.muteStates,u.muteStates),h.unmuteOptions=(v=u.unmuteOptions)!=null?v:h.unmuteOptions,this._openTransport([h],!0)}),this._participantListChunkToExternalChunk(i)})}_getInitialParticiapntListChunk(){return c(this,null,function*(){let e=p.participantListChunkInitIndex,t=p.participantListChunkInitCount,a=yield this._signaling.getParticipantListChunk({listType:"GRID",fromIdx:e,count:t});return d.debug("Get initial participant list chunk",a.chunk),a.chunk})}_onLocalMediaStreamChanged(e){var i,a;if(!this._conversation||!this._mediaSource)return;let t=this._mediaSource.getMediaSettings();d.debug("Local media stream changed",t),e.kind==="audio"&&this._mediaSource&&(this._audioFix=new ei(this._mediaSource)),I.onLocalStreamUpdate(t,e.kind),!((i=this._conversation)!=null&&i.waitingHall)&&!((a=this._conversation)!=null&&a.observer)&&!this._isAudienceModeListener()&&this._changeMediaSettings(t)}_onScreenSharingStatus(e){var i;let t=(i=this._mediaSource)==null?void 0:i.getMediaSettings();if(d.log("Screen sharing changed",e.track,t),p.consumerScreenTrack){let a=e.track?new MediaStream([e.track]):null;I.onScreenStream(a,t)}}_changeRemoteMediaSettings(e,t){return c(this,null,function*(){var s;d.debug(`Remote media settings changed [${e}]`,t);let i=(s=this._conversation)==null?void 0:s.externalId;if(this._isMe(e)&&i){I.onLocalMediaSettings(i,t);return}let o=yield this._getParticipant(e);if(!o){this._warnParticipantNotInConversation(e);return}o.mediaSettings=t,this._state==="ACTIVE"&&I.onRemoteMediaSettings(o.externalId,t,o.markers),this._specListener&&this._specListener.onChangeRemoteMediaSettings(e,t)})}_changeLocalParticipantState(e){d.debug("Local participant state force changed by admin",e),this._state==="ACTIVE"&&I.onLocalParticipantState(e)}_changeRemoteParticipantState(e,t){return c(this,null,function*(){d.debug(`Remote participant state changed [${e}]`,t);let i=yield this._getParticipant(e);if(!i){this._warnParticipantNotInConversation(e);return}i.participantState=t||{},this._state==="ACTIVE"&&I.onRemoteParticipantState(i.externalId,i.participantState,i.markers)})}_changeMultipleParticipantState(e,t){return c(this,null,function*(){d.debug("Multiple participants state changed",e);let i=[],a,o=yield this._getParticipants();e.forEach((s,l)=>{if(this._isMe(l))a=s;else{let u=o[l];if(!u){this._warnParticipantNotInConversation(l);return}u.participantState=s,i.push({externalId:u.externalId,participantState:oe({},s),markers:u.markers})}}),this._state==="ACTIVE"&&(a&&I.onLocalParticipantState(a),i.length&&I.onRemoteParticipantsState(i,t))})}_invokeRolesChangedCallbackIfNeeded(e){this._state==="ACTIVE"&&e.roles&&e.roles.length&&(d.debug(`Roles for participant [${e.id}] changed: ${e.roles}`),I.onRolesChanged(e.externalId,e.roles,!0))}_onSignalingNotification(e){switch(e.notification){case V.ACCEPTED_CALL:return this._onAcceptedCall(e);case V.HUNGUP:return this._onHungup(e);case V.PARTICIPANT_ADDED:return this._onAddedParticipant(e);case V.PARTICIPANT_JOINED:return this._onJoinedParticipant(e);case V.CLOSED_CONVERSATION:return this._onClosedConversation(e);case V.MEDIA_SETTINGS_CHANGED:return this._onMediaSettingsChanged(e);case V.PARTICIPANT_STATE_CHANGED:return this._onParticipantStateChanged(e);case V.PARTICIPANTS_STATE_CHANGED:return this._onParticipantsStateChanged(e);case V.RATE_CALL_DATA:return this._onNeedRate();case V.FEATURE_SET_CHANGED:return this._onFeatureSetChanged(e);case V.MULTIPARTY_CHAT_CREATED:return this._onMultipartyChatCreated(e);case V.FORCE_MEDIA_SETTINGS_CHANGE:return this._onForceMediaSettingsChange(e);case V.SETTINGS_UPDATE:return this._onSettingsUpdate(e);case V.VIDEO_QUALITY_UPDATE:return this._onVideoQualityUpdate(e);case V.REGISTERED_PEER:return this._onPeerRegistered(e);case V.SWITCH_MICRO:return this._onMicSwitched(e);case V.CHAT_MESSAGE:return this._onChatMessage(e);case V.CUSTOM_DATA:return this._onCustomData(e);case V.RECORD_STARTED:return this._onRecordInfo(e.recordInfo,e.roomId);case V.RECORD_STOPPED:return this._onRecordInfo(null,e.roomId);case V.ROLES_CHANGED:return this._onRolesChanged(e.participantId,e.roles||[]);case V.MUTE_PARTICIPANT:return this._onMuteParticipant(e);case V.PIN_PARTICIPANT:return this._onPinParticipant(e.participantId,e.unpin,e.markers,e.roomId);case V.OPTIONS_CHANGED:return this._onOptionsChanged(e.options||[]);case V.PARTICIPANT_SOURCES_UPDATE:return this._onParticipantSourcesUpdate(e);case V.PROMOTE_PARTICIPANT:return this._onParticipantPromoted(e);case V.CHAT_ROOM_UPDATED:return this._onChatRoomUpdated(e.eventType,e.totalCount,e.firstParticipants,e.addedParticipantIds,e.removedParticipantIds);case V.JOIN_LINK_CHANGED:return this._onJoinLinkChanged(e);case V.FEEDBACK:return this._onFeedback(e);case V.MOVIE_UPDATE_NOTIFICATION:return this._onSharedMovieUpdate(e);case V.MOVIE_SHARE_STARTED:return this._onSharedMovieInfoStarted(e);case V.MOVIE_SHARE_STOPPED:return this._onSharedMovieInfoStopped(e);case V.URL_SHARING_INFO_UPDATED:return this._onUrlSharingInfoUpdated(e);case V.ROOMS_UPDATED:return this._onRoomsUpdated(e);case V.ROOM_UPDATED:return this._onRoomUpdated(e);case V.ROOM_PARTICIPANTS_UPDATED:return this._onRoomParticipantsUpdated(e);case V.FEATURES_PER_ROLE_CHANGED:return this._onFeaturesPerRoleChanged(e);case V.PARTICIPANT_ANIMOJI_CHANGED:return this._onParticipantAnimojiChanged(e);case V.ASR_STARTED:return this._onAsrStart(e);case V.ASR_STOPPED:return this._onAsrStop(e);case V.PROMOTION_APPROVED:return this._onPromotionApproved(e);case V.DECORATIVE_PARTICIPANT_ID_CHANGED:return this._onDecorativeParticipantIdChanged(e);case V.VIDEO_SUSPEND_SUGGEST:return this._onVideoSuspendSuggest(e)}}_onPromotionApproved(e){return c(this,null,function*(){let t=yield this._getExternalIdByParticipantId(e.adminId);if(!t){this._warnParticipantNotInConversation(e.adminId);return}I.onPromotionApproved(t)})}_onSignalingReconnect(e){return c(this,null,function*(){var o,s;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()),this._processPinnedParticipants(e),e.conversation.state;let t=null;if(e.conversation.participants){let l=Object.keys(yield this._getParticipants()),u=[];for(let h of e.conversation.participants){let T=E.composeId(h),v=h.roles||[];if(this._isMe(T)){Ii(this._conversation.roles,v)||this._onRolesChanged(T,v),t=()=>{this._registerParticipantLocalMuteState({muteStates:An(h),unmuteOptions:h.unmuteOptions})};continue}u.push(T);let b=yield this._getParticipant(T);if(!b)yield this._onJoinedParticipant({participantId:h.id,participant:h,mediaSettings:h.mediaSettings});else{let L=Re(h.mediaSettings);Va(L,b.mediaSettings)||(yield this._changeRemoteMediaSettings(T,L));let O=E.mapParticipantState(h),G=b.participantState;E.isEqualParticipantState(O,G)||(yield this._changeRemoteParticipantState(T,O)),Ii(v,b.roles)||this._onRolesChanged(b.id,v)}}let m=yield this._getParticipants();for(let h of l)u.indexOf(h)<0&&this._removeParticipant(m[h],k.HUNGUP)}let i=(s=(o=e.rooms)==null?void 0:o.roomId)!=null?s:null;this._conversation.roomId!==i?this._onRoomSwitched(i).then(t):(this._processMuteStates(e,!0),t==null||t()),this._processRecordInfos(e),this._onOptionsChanged(e.conversation.options)})}_onSignalingFailed(e){d.error("Signaling failed",e),this._close(e)}_onAcceptedCall(e){return c(this,null,function*(){var s;let t=E.composeMessageId(e),i=E.getPeerIdString(e.peerId);if(d.debug(`Participant accepted call [${t}]`),this._statFirstMediaReceived.markAcceptedCall((s=this._transport)==null?void 0:s.getTopology()),this._conversation&&this._isMe(t)){this._close(new q(k.MISSED),"Call accepted on other device");return}let a=yield this._getParticipant(t);if(!a){let l=this._api.getDecorativeIdByInitialId(t),u=l?E.composeUserId(l,e.participantType):void 0;a=this._registerParticipantInCache(yield this._createParticipant({id:t,mediaSettings:Re(e.mediaSettings)},u))}a.state=Z.ACCEPTED,a.mediaSettings=Re(e.mediaSettings),this._logWithMediaSettings(R.ACCEPTED_OUTGOING,a.mediaSettings),this._conversation&&this._conversation.direction===ut.OUTGOING&&(this._state==="IDLE"||this._state==="PROCESSING")&&(this._state="ACTIVE",this._changeFeatureSet()),this._state==="ACTIVE"&&this._transport&&this._transport.open([a.id],i),yield this._changeRemoteMediaSettings(t,a.mediaSettings),yield this._changeRemoteParticipantState(t);let o=Object.keys(a.muteStates);o.length&&this._onMuteParticipant({muteStates:a.muteStates,mediaOptions:o,stateUpdated:!0,participantId:t}),this._state==="ACTIVE"&&I.onAcceptedCall(a.externalId)})}_onHungup(e){return c(this,null,function*(){d.debug(`Participant hungup [${e.participantId}]`,{reason:e.reason});let t=E.composeMessageId(e);if(this._conversation&&this._isMe(t)){this._close(new q(e.reason,{remote:!0}));return}yield this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers);let i=yield this._getParticipant(t);if(!i){this._warnParticipantNotInConversation(t);return}this._transport&&this._transport.close(t),i.state=e.reason===k.REJECTED?Z.REJECTED:Z.HUNGUP,this._state!=="CLOSE"&&this._removeParticipant(i,k.HUNGUP)})}_onAddedParticipant(e){return c(this,null,function*(){var a,o;d.debug(`Participant added [${e.participantId}]`);let t=E.composeMessageId(e),i=yield this._getParticipant(t);if(i&&i.state!==Z.HUNGUP&&i.state!==Z.REJECTED){d.debug(`Participant [${t}] is already in conversation and is active`);return}if(!i){let{participant:s}=e,l=s.decorativeUserId;this._registerParticipant({id:t,externalId:X.fromSignalingParticipant(s),mediaSettings:Re(s.mediaSettings),state:s.state,participantState:E.mapParticipantState(s),roles:s.roles||[],muteStates:s.muteStates||{},unmuteOptions:s.unmuteOptions||[],observedIds:s.observedIds||[]},l),i=yield this._getParticipant(t)}i.state=Z.CALLED,i.mediaSettings=Re((a=e.participant)==null?void 0:a.mediaSettings),i.participantState=E.mapParticipantState(e.participant),i.roles=((o=e.participant)==null?void 0:o.roles)||[],this._setParticipantsStatus([i],"WAITING"),this._state!=="IDLE"&&this._transport&&this._transport.allocate(i.id,!0),I.onParticipantAdded(i.externalId,i.markers),yield this._changeRemoteMediaSettings(t,i.mediaSettings),yield this._changeRemoteParticipantState(t,i.participantState),this._invokeRolesChangedCallbackIfNeeded(i)})}_onJoinedParticipant(e){return c(this,null,function*(){var o,s,l;d.debug(`Participant joined [${e.participantId}]`),this._statFirstMediaReceived.markParticipantJoined((o=this._transport)==null?void 0:o.getTopology());let t=E.composeMessageId(e),i=yield this._getParticipant(t);if(i&&i.state===Z.ACCEPTED){d.warn(`Participant [${t}] is already in conversation and is active`);return}if(!i){let{participant:u}=e,m=u.decorativeUserId;this._registerParticipant({id:t,externalId:X.fromSignalingParticipant(u),mediaSettings:Re(u.mediaSettings),state:u.state,participantState:E.mapParticipantState(u),roles:u.roles||[],muteStates:u.muteStates||{},movieShareInfos:u.movieShareInfos,unmuteOptions:u.unmuteOptions||[],observedIds:u.observedIds||[],markers:this._denormalizeMarkers(t,u.markers)},m),i=yield this._getParticipant(t)}this._conversation&&this._conversation.direction===ut.OUTGOING&&(this._state==="IDLE"||this._state==="PROCESSING")&&(this._state="ACTIVE",this._changeFeatureSet()),i.state=Z.ACCEPTED,i.mediaSettings=Re(e.mediaSettings),i.participantState=E.mapParticipantState(e.participant),i.roles=e.participant.roles||[],(s=this._transport)!=null&&s.isAllocated(i.id)?this._setParticipantsStatus([i],"CONNECTED"):this._setParticipantsStatus([i],"WAITING"),this._state!=="IDLE"&&this._transport&&(this._transport.isAllocated(i.id)||this._transport.allocate(i.id,!0),this._transport.open([i.id],null,!!((l=this._conversation)!=null&&l.observer))),I.onParticipantJoined(i.externalId,i.markers),yield this._changeRemoteMediaSettings(t,i.mediaSettings),yield this._changeRemoteParticipantState(t,i.participantState),this._invokeRolesChangedCallbackIfNeeded(i);let a=Object.keys(i.muteStates);a.length&&this._onMuteParticipant({muteStates:i.muteStates,mediaOptions:a,stateUpdated:!0,participantId:t}),yield this._processSharedMovieInfos(i.movieShareInfos)})}_onClosedConversation(e){this._toggleJoinAvailability(),this._close(new q(e.reason,{remote:!0}))}_onMediaSettingsChanged(e){return c(this,null,function*(){let t=E.composeMessageId(e);yield this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers),yield this._changeRemoteMediaSettings(t,Re(e.mediaSettings))})}_onParticipantStateChanged(e){return c(this,null,function*(){let t=E.composeMessageId(e),i=E.mapParticipantState(e);this._isMe(t)?this._changeLocalParticipantState(i):(yield this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers),yield this._changeRemoteParticipantState(t,i))})}_onParticipantsStateChanged(e){return c(this,null,function*(){let{participants:t,roomId:i}=e,a=t.map(({id:l,markers:u})=>this._registerParticipantAndSetMarkersIfChunkEnabled(l,u));yield Promise.all(a);let o=new Map,s=t.map(({id:l,participantState:u})=>this._getExternalIdByParticipantId(l).then(m=>[l,m&&E.mapParticipantState({participantState:u})]));try{(yield Promise.all(s)).forEach(([u,m])=>{m&&o.set(u,m)}),yield this._changeMultipleParticipantState(o,i)}catch(l){d.warn(`_onParticipantsStateChanged: Failed to get external ids. ${l}`)}})}_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(),I.onMultipartyChatCreated(this._conversation))}_onForceMediaSettingsChange(e){return c(this,null,function*(){if(!this._mediaSource)return;let t=this._mediaSource.getMediaSettings(),i=Re(e.mediaSettings);t.isAudioEnabled!==i.isAudioEnabled&&(yield this._mediaSource.toggleAudio(i.isAudioEnabled)),t.isVideoEnabled!==i.isVideoEnabled&&(yield this._mediaSource.toggleVideo(i.isVideoEnabled)),p.consumerScreenTrack&&t.isScreenSharingEnabled!==i.isScreenSharingEnabled&&(yield this._mediaSource.toggleScreenCapturing({captureScreen:i.isScreenSharingEnabled,fastScreenSharing:i.isFastScreenSharingEnabled,captureAudio:i.isAudioSharingEnabled}))})}_onSettingsUpdate(e){d.debug("Got settings update notification",e);let t={camera:e.camera,screenSharing:e.screenSharing};this._serverSettings=ta(this._serverSettings,t),this._transport&&this._transport.updateSettings(this._serverSettings)}_onVideoQualityUpdate(e){d.debug("Got video quality update notification",e);let t=Math.round(e.quality.maxBitrate/1024),i=e.quality.maxDimension,a={camera:Object.assign({},this._serverSettings.camera,{maxBitrateK:t,maxDimension:i}),screenSharing:null};this._serverSettings=ta(this._serverSettings,a),this._transport&&this._transport.updateSettings(this._serverSettings)}_onPeerRegistered(e){return c(this,null,function*(){let t=E.composeMessageId(e),i=yield this._getParticipant(t);i&&(i.clientType=e.clientType,i.platform=e.platform),I.onPeerRegistered()})}_onMicSwitched(e){return c(this,null,function*(){I.onDeviceSwitched(ue.AUDIO,!e.mute),yield this.toggleLocalAudio(!e.mute)})}_onChatMessage(e){return c(this,null,function*(){let t=E.composeMessageId(e),i=yield this._getExternalIdByParticipantId(t);if(!i){this._warnParticipantNotInConversation(t);return}I.onChatMessage(e.message,i,e.direct)})}_onCustomData(e){return c(this,null,function*(){if(e.data.hasOwnProperty("sdk"))return;let t=E.composeMessageId(e),i=yield this._getExternalIdByParticipantId(t);if(!i){this._warnParticipantNotInConversation(t);return}I.onCustomData(e.data,i,e.direct)})}_onRecordInfo(i){return c(this,arguments,function*(e,t=null){if(!this._conversation)return;let a=this._conversation.recordsInfoByRoom.get(t),o=!1;if(!a!=!e?o=!0:a&&e&&(o=a.recordMovieId!==e.recordMovieId||a.recordStartTime!==e.recordStartTime),o)if(this._conversation.recordsInfoByRoom.set(t,e),e){let s=yield this._getExternalIdByParticipantId(e.initiator);s?I.onRecordStarted(s,e.recordMovieId,e.recordStartTime,e.recordType,e.recordExternalMovieId,e.recordExternalOwnerId,t):this._warnParticipantNotInConversation(e.initiator)}else I.onRecordStopped(t);e&&this._forceOpenTransportForAloneInCall()})}_changePinnedParticipantForRoom(){return c(this,null,function*(){if(!this._conversation)return;let e=this._conversation.roomId,t=this._conversation.pinnedParticipantIdByRoom.get(e);if(t&&!this._isMe(t)){let i=yield this._getExternalIdByParticipantId(t);i&&I.onPinnedParticipant(i,!1,null,e)}})}_changeRecordInfoForRoom(){return c(this,null,function*(){if(!this._conversation)return;let e=this._conversation.roomId,t=this._conversation.recordsInfoByRoom.get(e);if(t){let i=yield this._getExternalIdByParticipantId(t.initiator);i?I.onRecordStarted(i,t.recordMovieId,t.recordStartTime,t.recordType,t.recordExternalMovieId,t.recordExternalOwnerId,e):this._warnParticipantNotInConversation(t.initiator)}else I.onRecordStopped(e)})}_changeAsrInfoForRoom(){return c(this,null,function*(){if(!this._conversation)return;let e=this._conversation.roomId,t=this._conversation.asrInfoByRoom.get(e);if(t){let i=yield this._getExternalIdByParticipantId(t.initiatorId);i&&I.onAsrSet({externalId:i,movieId:t.movieId},e)}else I.onAsrSet(null,e)})}_changeUrlSharingInfoForRoom(){return c(this,null,function*(){if(!this._conversation)return;let{roomId:e}=this._conversation,{urlSharingInfoByRoom:t}=this._conversation,i=t.get(e);if(i){let a=yield this._getExternalIdByParticipantId(i.initiatorId);a&&I.onRemoteSharedUrl(a,i.sharedUrl,e)}})}_onParticipantAnimojiChanged(e){return c(this,null,function*(){if(this._conversation){let t=yield this._getExternalIdByParticipantId(e.participantId);if(!t){this._warnParticipantNotInConversation(e.participantId);return}I.onParticipantVmojiUpdate(t)}})}_onAsrStart(e){return c(this,null,function*(){if(!this._conversation)return;let t=e.asrInfo,i=e.roomId||null;this._conversation.asrInfoByRoom.set(i,t);let a=yield this._getExternalIdByParticipantId(t.initiatorId);if(!a){this._warnParticipantNotInConversation(t.initiatorId);return}I.onAsrStarted(a,t.movieId,i),this._forceOpenTransportForAloneInCall()})}_onAsrStop(e){if(!this._conversation)return;let t=e.roomId||null;t===null&&(this._conversation.asrInfo=null),this._conversation.asrInfoByRoom.delete(t),I.onAsrStopped(t)}_onAsrTranscription(e){return c(this,null,function*(){if(!this._conversation)return;let t=yield this._getExternalIdByParticipantId(e.participantId);if(!t){this._warnParticipantNotInConversation(e.participantId);return}I.onAsrTranscription(t,e.text,e.timestamp,e.duration)})}_onRolesChanged(e,t){return c(this,null,function*(){if(this._conversation&&this._isMe(e)&&!Ii(this._conversation.roles,t)){d.debug(`Local roles changed: ${t}`),this._conversation.roles=t,I.onLocalRolesChanged(t),this._processMuteState({mediaOptions:pr(this._getMuteStatesForCurrentRoom(),Fe.MUTE_PERMANENT),stateUpdated:!0}),E.includesOneOf(t,[mt.ADMIN,mt.CREATOR])?this._refreshRooms(!0):t.length||this._onRoomSwitched(null);return}let i=yield this._getParticipant(e);i&&!Ii(i.roles,t)&&(d.debug(`Roles for participant [${e}] changed: ${t}`),i.roles=t,I.onRolesChanged(i.externalId,t))})}_onMuteParticipant(e,t=!1){return c(this,null,function*(){var m;if(!this._conversation)return;let{muteAll:i,muteStates:a={},unmuteOptions:o=[],mediaOptions:s=[],roomId:l=null}=e,u=e.adminId?yield this._getParticipant(e.adminId):null;if(e.participantId&&!this._isMe(e.participantId)){if(!this._isCallAdmin()){d.warn(`Not admin got mute states for participant [${e.participantId}]`);return}let h=yield this._getParticipant(e.participantId);h&&(d.debug(`Mute states for participant [${e.participantId}] changed`,a),I.onMuteStates(a,o,s,i,e.unmute,h.externalId,u==null?void 0:u.externalId,e.stateUpdated,e.requestedMedia,e.roomId));return}if((m=e.requestedMedia)!=null&&m.length||(i&&!t?this._setMuteStatesForRoomId(a,l):i||(this._conversation.muteStatesPersonal=a)),e.adminId&&this._isMe(e.adminId)){i&&I.onMuteStates(a,o,s,i,e.unmute,null,this._conversation.externalId,e.stateUpdated,e.requestedMedia,e.roomId);return}yield this._processMuteState({mediaOptions:s,muteAll:i,unmute:e.unmute,adminId:e.adminId,stateUpdated:e.stateUpdated,requestedMedia:e.requestedMedia,roomId:e.roomId,unmuteOptions:o,muteStates:a})})}_changeMuteStatesForRoom(e,t){if(!this._conversation)return;let i=this._getMuteStatesForRoomId(t),a=this._getMuteStatesForRoomId(e),o=Object.keys(i),s=Object.keys(a);this._processMuteState({mediaOptions:Array.from(new Set([...o,...s])),roomId:e,muteAll:!0,stateUpdated:!0})}_processMuteState(e){return c(this,null,function*(){var b;if(!this._conversation||!this._mediaSource||this._participantState!==Z.ACCEPTED)return;let{mediaOptions:t=[],muteAll:i,unmute:a,stateUpdated:o,requestedMedia:s,roomId:l=null,unmuteOptions:u=[]}=e,m=e.adminId?yield this._getParticipant(e.adminId):null,h=Object.assign({},(b=e.muteStates)!=null?b:this._getMuteStatesForRoomId(l)),T=this._mediaSource.getMediaSettings(),v=Object.entries(h);for(let[L,O]of v){let G=p.newMuteRules&&this._isCallAdmin()&&i;if(!(O!==Fe.MUTE&&O!==Fe.MUTE_PERMANENT||G)&&(this._isCallAdmin()&&O===Fe.MUTE_PERMANENT&&!i&&(h[L]=Fe.MUTE),!(!t.includes(L)||a)))switch(L){case ue.VIDEO:T.isVideoEnabled&&(I.onDeviceSwitched(ue.VIDEO,!1),yield this.toggleLocalVideo(!1));break;case ue.AUDIO:T.isAudioEnabled&&(I.onDeviceSwitched(ue.AUDIO,!1),yield this.toggleLocalAudio(!1));break;case ue.SCREEN_SHARING:T.isScreenSharingEnabled&&(I.onDeviceSwitched(ue.SCREEN_SHARING,!1),yield this.disableScreenCapturing());break;case ue.AUDIO_SHARING:T.isAudioSharingEnabled&&(I.onDeviceSwitched(ue.AUDIO_SHARING,!1),yield this.toggleScreenCapturing({captureScreen:T.isScreenSharingEnabled,fastScreenSharing:T.isFastScreenSharingEnabled,captureAudio:!1}));break}}I.onMuteStates(h,u,t,i,a,null,m==null?void 0:m.externalId,o,s,l)})}_onPinParticipant(o){return c(this,arguments,function*(e,t=!1,i,a=null){if(!this._conversation)return;let s=this._conversation.pinnedParticipantIdByRoom.get(a);if(s&&s!==e)if(this._isMe(s))I.onLocalPin(!0,a);else{let l=yield this._getExternalIdByParticipantId(s);l&&I.onPinnedParticipant(l,!0,this._denormalizeMarkers(e,i),a)}if(this._isMe(e))I.onLocalPin(t,a);else{let l=yield this._getExternalIdByParticipantId(e);l&&I.onPinnedParticipant(l,t,this._denormalizeMarkers(e,i),a)}this._conversation.pinnedParticipantIdByRoom.set(a,t?null:e)})}_onOptionsChanged(e){this._conversation&&!hn(this._conversation.options,e)&&(this._conversation.options=e,I.onOptionsChanged(e))}_onNetworkStatus(e){return c(this,null,function*(){if(this._conversation){let t=[],i=yield this._getParticipants();for(let[a,o]of Object.entries(e)){let s;if(this._isMe(a)||a==="")s=this._conversation.networkRating;else if(i[a])s=i[a].networkRating;else continue;if(s!==o)if(this._isMe(a)||a==="")this._conversation.networkRating=o,I.onLocalNetworkStatusChanged(o);else{let l=i[a];l.networkRating=o,t.push({uid:l.externalId,rating:o})}}if(t.length===0)return;d.log("Received network status update: ",e),I.onNetworkStatusChanged(t)}})}_onRemoteStreamSecond(e,t){return c(this,null,function*(){let i=yield this._getParticipant(e);if(i){if(p.producerScreenTrack){I.onRemoteScreenStream(i.externalId,t);return}if(i.secondStream=t,p.videoTracksCount>0){let a=e;if(!this._streamIdByStreamDescription.has(a)){d.error("Received remote stream notification for a participant that has no track associated with it",a);return}let o=this._streamIdByStreamDescription.get(a);if(!o||this._streamWaitTimerByStreamDescription.has(a)){d.log("Delaying secondary stream start/stop until main stream becomes available",a);return}let s=this._streamByStreamId.get(o);if(!s){P.log(R.PAT_ERROR,"streamNotFound"),d.error(`Could not find stream by ID: ${o}`);return}I.onRemoteStream(i.externalId,i.secondStream||s)}else{let a=t||i.remoteStream;a&&I.onRemoteStream(i.externalId,a)}}})}_onAnimojiStream(e,t){return c(this,null,function*(){if(this._isMe(e)&&this._mediaSource){I.onVmojiStream(t,this._mediaSource.getMediaSettings());return}let i=yield this._getParticipant(e);i&&I.onRemoteVmojiStream(i.externalId,t)})}_onAnimojiError(e){return c(this,null,function*(){try{let t=yield this._getExternalIdByParticipantId(e.participantId);t&&(delete e.participantId,I.onVmojiError(xe(oe({},e),{externalId:t})))}catch(t){d.warn("_onAnimojiError failed",t)}})}_onPeerConnectionClosed(e){e==="SERVER"&&this._cleanupParticipantAgnosticStreams()}_changeFeatureSet(){if(this._conversation){let e=this._state==="ACTIVE",t=this._conversation.features.includes(Xr.ADD_PARTICIPANT);I.onCallState(e,t,this._conversation)}}_changeNeedRate(){this._conversation&&this._conversation.needRate&&I.onRateNeeded()}_onVolumesDetected(e){return c(this,null,function*(){let t=[];for(let[i,a]of Object.entries(e)){let o=yield this._getParticipant(i);o&&o.externalId&&t.push({uid:o.externalId,volume:a.real})}I.onVolumesDetected(t)})}_onSpeakerChanged(e){return c(this,null,function*(){this._activeSpeakerId=e;let t=yield this._getParticipant(e);t&&this._lastSignalledActiveSpeakerId!==e&&(I.onSpeakerChanged(t.externalId),this._lastSignalledActiveSpeakerId=e)})}_onTransportStateChanged(e,t){return c(this,null,function*(){d.debug(`Transport state has changed: ${t}`,e);let i=this._getStatusByTransportState(t);if(!i)return;let a=yield this._getParticipants(),o=e.reduce((s,l)=>{if(l in a){let u=a[l];s.push(u),t==="CONNECTED"&&(u.remoteStream||(u.mediaSettings&&this._changeRemoteMediaSettings(l,u.mediaSettings),this._changeRemoteParticipantState(l,u.participantState)),this._updateDisplayLayoutFromCache(l))}else this._warnParticipantNotInConversation(l);return s},[]);o.length&&this._setParticipantsStatus(o,i)})}_onTransportLocalStateChanged(e){return c(this,null,function*(){var t;if(d.debug(`Local transport state has changed: ${e}`),e==="CONNECTED"&&(I.onLocalStatus("CONNECTED"),((t=this._transport)==null?void 0:t.getTopology())==="SERVER")){let i=Object.values(this._myLastRequestedLayouts);yield this.updateDisplayLayout(i)}e==="CONNECTING"&&I.onLocalStatus("CONNECTING"),e==="RECONNECTING"&&I.onLocalStatus("RECONNECT"),e==="FAILED"&&this._transport&&this._transport.allocated().length===0&&(this._signaling.ready&&(yield this._signaling.hangup(k.FAILED)),this._close(new q(k.FAILED),"Transport failed"))})}_onRemoteTrackAdded(e,t,i){return c(this,null,function*(){if(e.endsWith(Ke.AUDIO_MIX))d.debug("Remote audio mix track added"),this._audioOutput.add(i),I.onRemoteMixedAudioStream(t);else if(e.startsWith(Ke.PARTICIPANT_AGNOSTIC_TRACK_PREFIX))d.debug(`Participant-agnostic track added: ${e}`),this._streamByStreamId.set(e,t);else{d.debug(`Remote track added on the participant [${e}]`,{kind:i.kind});let a=yield this._getParticipant(e);if(!a){let o=this._api.getDecorativeIdByInitialId(e),s=o?E.composeUserId(o):void 0;d.warn(`Conversation: track added before participant [id: ${e}, decorativeId: ${s}]`),this._registerParticipant({id:e},s),a=yield this._getParticipant(e),this._setParticipantsStatus([a],"WAITING"),this._activeSpeakerId===e&&this._lastSignalledActiveSpeakerId!==e&&(I.onSpeakerChanged(a.externalId),this._lastSignalledActiveSpeakerId=e)}if(this._transport&&!this._transport.isAllocated(a.id)&&this._transport.allocate(a.id,!1),i.kind==="audio"&&(this._audioOutput.add(i),p.preserveAudioTracks||(a.remoteAudioTrack=i,t.removeTrack(i))),a.remoteStream!==t&&t.getTracks().length){if(a.remoteStream=t,a.secondStream)return;I.onRemoteStream(a.externalId,t)}a.mediaSettings&&this._changeRemoteMediaSettings(e,a.mediaSettings)}})}_onRemoteTrackRemoved(e,t,i){switch(d.debug(`[${e}] remote track (removed)`,{track:i}),i.kind){case"audio":this._removeAudioTrack(e,t,i);break;case"video":case"screen":this._removeVideoTrack(e,t,i);break}}_removeAudioTrack(e,t,i){return c(this,null,function*(){if(e!==Ke.AUDIO_MIX){let a=yield this._getParticipant(e);if(!a||a.remoteStream&&a.remoteStream!==t)return}this._audioOutput.remove(i)})}_removeVideoTrack(e,t,i){}_onTopologyChanged(e){e==="DIRECT"&&(this._onRemoteSignalledStall([]),this._onAudioMixStall(!1)),this._conversation&&(this._conversation.topology=e,this._changeFeatureSet(),this._isRealTimeAsrRequested&&this._forceOpenTransportForAloneInCall())}_onAudioMixStall(e){this._audioMixStalled!==e&&(this._audioMixStalled=e,d.debug("Audio mix stalled:",e),I.onLocalStatus(e?"RECONNECT":"CONNECTED"))}_onRemoteSignalledStall(e){return c(this,null,function*(){let t={},i=[],a=[];d.debug("Participants stalled:",e);let o=yield this._getParticipants();for(let s of e){if(t[s]=!0,!this._lastStalled[s]){let l=o[s];l&&i.push(l)}delete this._lastStalled[s]}for(let s of Object.keys(this._lastStalled)){let l=o[s];l&&a.push(l)}i.length&&this._setParticipantsStatus(i,"RECONNECT"),a.length&&this._setParticipantsStatus(a,"CONNECTED"),this._lastStalled=t})}_onRemoteDataStats(e){return c(this,null,function*(){this._debugInfo&&this._debugInfo.onRemoteDataStats(e,yield this._getParticipants()),this._fixAudioDevice(e.outbound.rtps),this._fixVideoDevice(e.outbound.rtps)})}_fixAudioDevice(e){var t;!A.hasMicrophone()||!this._audioFix||!((t=this._mediaSource)!=null&&t.getMediaSettings().isAudioEnabled)||this._audioFix.fix(e)}_fixVideoDevice(e){var t;!A.hasCamera()||!this._audioFix||!((t=this._mediaSource)!=null&&t.getMediaSettings().isVideoEnabled)||this._audioFix.fixVideo(e)}_toggleJoinAvailability(){let e=this._conversation&&this._conversation.chatId,t=e&&this._state!=="CLOSE"||!1;e&&(d.debug("Toggle join availability",{available:t,chatId:e}),I.onJoinStatus(t,e))}_updateDisplayLayoutFromCache(e){return c(this,null,function*(){var i;if(((i=this._transport)==null?void 0:i.getTopology())!=="SERVER")return;let t=yield this._getParticipant(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 a=e.reduce((o,s)=>(s.status!==t&&(s.status=t,o.push(s.externalId)),o),[]);a.length&&I.onRemoteStatus(a,t,i)}_onJoinLinkChanged(e){I.onJoinLinkChanged(e.joinLink)}_onRoomsUpdated(e){return c(this,null,function*(){var i;if(this._isCalledState())return;let t={};for(let a of Object.keys(vi)){let o=e.updates[a];o&&(t[a]={rooms:yield Promise.all(((i=o==null?void 0:o.rooms)==null?void 0:i.map(this._convertRoomToExternal.bind(this)))||[]),roomIds:o==null?void 0:o.roomIds,deactivated:o==null?void 0:o.deactivated})}I.onRoomsUpdated(t)})}_onRoomUpdated(e){return c(this,null,function*(){var i,a;let t=yield this._convertRoomToExternal(e.room||null);e.events.some(o=>o===vi.UPDATE)&&(e.muteStates!==void 0&&this._setMuteStatesForRoomId(e.muteStates,e.roomId),e.recordInfo!==void 0&&((i=this._conversation)==null||i.recordsInfoByRoom.set(e.roomId,e.recordInfo)),e.asrInfo!==void 0&&((a=this._conversation)==null||a.asrInfoByRoom.set(e.roomId,e.asrInfo))),this._isCalledState()||I.onRoomUpdated(e.events,e.roomId,t,e.deactivate||null)})}_convertRoomToExternal(e){return c(this,null,function*(){var s,l,u,m,h;if(!e)return null;let t=yield Promise.all(((s=e.participantIds)==null?void 0:s.map(T=>this._getExternalIdByParticipantId(T)))||[]),i=yield Promise.all(((l=e.addParticipantIds)==null?void 0:l.map(T=>this._getExternalIdByParticipantId(T)))||[]),a=yield Promise.all(((m=(u=e.removeParticipantIds)==null?void 0:u.map)==null?void 0:m.call(u,T=>this._getExternalIdByParticipantId(T)))||[]),o=e.pinnedParticipantId?yield this._getExternalIdByParticipantId(e.pinnedParticipantId):void 0;return{id:e.id,name:e.name,participantCount:e.participantCount,participantIds:t,addParticipantIds:i,removeParticipantIds:a,participants:(h=e.participants)!=null&&h.participants?yield this._participantListChunkToExternalChunk(e.participants):void 0,active:e.active,muteStates:e.muteStates,pinnedParticipantId:o,countdownSec:e.countdownSec,timeoutMs:e.timeoutMs}})}_onRoomParticipantsUpdated(e){return c(this,null,function*(){var v,b,L,O,G,$,le,ae;let t=(v=this._transport)==null?void 0:v.getState(),i=(b=e.roomId)!=null?b:null,a=((L=e.addedParticipantIds)==null?void 0:L.map(z=>E.decomposeId(z).id))||[],o=yield this._api.getExternalIdsByOkIds(a),s=e.addedParticipants;if(o.length&&(s==null?void 0:s.length)!==o.length&&!this._isCalledState()){let z=this._convertExternalIdsToServerExternalIds(o);s=(yield this._signaling.getParticipants(z)).participants}let l=yield Promise.all((s==null?void 0:s.map(z=>c(this,null,function*(){var Be;let he=E.composeId(z);return this._createParticipant({id:he,externalId:X.fromSignalingParticipant(z),mediaSettings:Re(z.mediaSettings),participantState:E.mapParticipantState(z),state:z.state,roles:z.roles||[],status:(Be=this._getStatusByTransportState(t))!=null?Be:"WAITING",muteStates:z.muteStates||{},unmuteOptions:z.unmuteOptions||[],observedIds:z.observedIds||[],markers:this._denormalizeMarkers(he,z.markers),isInRoom:i!==null},z.decorativeUserId)})))||[]),u=!1;for(let z of l)z.id===((O=this._conversation)==null?void 0:O.compositeUserId)&&(u=!0),this._registerParticipantInCache(z);((G=this._transport)==null?void 0:G.getState())==="IDLE"&&!this._isCalledState()&&this._openTransport(l,!0);let m=[],h=[];if(e!=null&&e.removedParticipantMarkers){for(let z of e.removedParticipantMarkers)if(($=z.GRID)!=null&&$.id){let he=this._getExternalIdByParticipantId(z.GRID.id);h.push(he)}m=yield Promise.all(h)}if(u&&(yield this._onRoomSwitched(i)),m){let z=(le=this._conversation)==null?void 0:le.pinnedParticipantIdByRoom.get(i);if(z){let he=yield this._getExternalIdByParticipantId(z);if(he){for(let Be of m)if(X.compare(he,Be)){(ae=this._conversation)==null||ae.pinnedParticipantIdByRoom.delete(i);break}}}}let T={roomId:i,participantCount:e.participantCount,addedParticipantIds:o,addedParticipants:E.mapSharedParticipants(l),removedParticipantMarkers:e==null?void 0:e.removedParticipantMarkers,removedParticipantIds:m};this._isCalledState()||I.onRoomParticipantsUpdated(T)})}_onRoomSwitched(e,t=!1){return c(this,null,function*(){if(!this._conversation||this._conversation.roomId===e)return;let i=this._conversation.roomId;if(this._conversation.roomId=e,t&&!this._isCalledState()){I.onRoomStart(e);return}this._isCalledState()||I.onRoomSwitched(e),e!==null&&!this._isCallAdmin()&&(yield this._refreshRooms(!1)),this._changePinnedParticipantForRoom(),this._changeRecordInfoForRoom(),this._changeMuteStatesForRoom(e,i),yield this._changeAsrInfoForRoom(),yield this._changeUrlSharingInfoForRoom()})}_refreshRooms(e){return c(this,null,function*(){var o,s,l,u,m,h,T,v,b,L,O,G;let t;this._isCalledState()||(t=yield this._signaling.getRooms(e));let i=(s=(o=t==null?void 0:t.rooms)==null?void 0:o.rooms)!=null?s:[],a=[];for(let $ of i){let le=(l=$.id)!=null?l:null;if(this._setMuteStatesForRoomId($.muteStates,le),(m=this._conversation)==null||m.recordsInfoByRoom.set(le,(u=$.recordInfo)!=null?u:null),(T=this._conversation)==null||T.pinnedParticipantIdByRoom.set(le,(h=$.pinnedParticipantId)!=null?h:null),$.asrInfo&&((v=this._conversation)==null||v.asrInfoByRoom.set(le,$.asrInfo)),$.urlSharingInfo?(b=this._conversation)==null||b.urlSharingInfoByRoom.set(le,$.urlSharingInfo):(L=this._conversation)==null||L.urlSharingInfoByRoom.delete(le),e){let ae=yield this._getParticipants();yield this._registerParticipants(((G=(O=$==null?void 0:$.participants)==null?void 0:O.participants)==null?void 0:G.filter(he=>!ae[E.composeId(he)]))||[],!0);let z=yield this._convertRoomToExternal($);z&&a.push(z)}}a.length&&!this._isCalledState()&&I.onRoomsUpdated({[vi.UPDATE]:{rooms:a}})})}_onFeedback(e){return c(this,null,function*(){let t=[];for(let i of e.feedback){let a=xe(oe({},i),{items:[]});for(let o of i.items){let s=yield this._getExternalIdByParticipantId(o.participantId);s?a.items.push(xe(oe({},o),{participantId:s})):this._warnParticipantNotInConversation(o.participantId)}t.push(a)}I.onFeedback(t,e.roomId)})}_onDecorativeParticipantIdChanged(e){return c(this,null,function*(){if(!this._conversation||!e.decorativeParticipantId||!e.decorativeExternalParticipantId)return;let{participantId:t,decorativeParticipantId:i,decorativeExternalParticipantId:a}=e,o=this._isMe(t);d.debug(`Decorative participant id changed [${t}]`,e);let s=yield this._getExternalIdByParticipantId(t);if(!s){this._warnParticipantNotInConversation(t);return}let l=X.fromSignaling(a,s.deviceIdx);if(I.onParticipantIdChanged(s,l),this._api.cacheExternalId(i,l),this._api.mapDecorativeId(i,t),o)this._conversation.externalId=l;else{let u=yield this._getParticipants();u[t].externalId=l}})}_onVideoSuspendSuggest(e){!this._conversation||this._conversation.topology!=="SERVER"||(d.debug("Video suspend suggested",e),I.onVideoSuspendSuggest(e.bandwidth))}_isMe(e){var t;return e===((t=this._conversation)==null?void 0:t.compositeUserId)}_getMuteStatesForRoomId(e=null){var t,i;return(i=(t=this._conversation)==null?void 0:t.muteStates.get(e))!=null?i:{}}_getMuteStatesForCurrentRoom(){var e;return this._getMuteStatesForRoomId((e=this._conversation)==null?void 0:e.roomId)}_setMuteStatesForRoomId(e={},t=null){var i;(i=this._conversation)==null||i.muteStates.set(t,e)}_forceOpenTransportForAloneInCall(){var e,t,i;((e=this._transport)==null?void 0:e.getTopology())==="SERVER"&&((t=this._transport)==null?void 0:t.getState())==="IDLE"&&!this._isCalledState()&&this._transport.open(this._transport.allocated(),null,!!((i=this._conversation)!=null&&i.observer),!0)}_registerParticipant(e,t){this._pendingParticipants.set(e.id,this._createParticipant(e,t))}_getParticipants(){return c(this,null,function*(){if(this._pendingParticipants.size)for(let e of this._pendingParticipants.values()){let t=yield e;this._pendingParticipants.delete(t.id),this._participants[t.id]=t}return this._participants})}_getParticipant(e){return c(this,null,function*(){return(yield this._getParticipants())[e]})}};Q._delayedHangup=!1;var B=Q,ia=class n extends Error{constructor(r,e){super(r),Object.setPrototypeOf(this,n.prototype),this.participantErrors=e}};var Nt=null,ti=null;function Bn(){Nt=null,ti=null}function Er(n=null,r){return c(this,null,function*(){var t;let e=n!=null?n:p.apiBaseUrl;if(e)return e;if((r!=null?r:p.apiEnv)!=="AUTO")return p.apiEndpoint(r);try{let i=atob("aHR0cHM6Ly9kbnMuZ29vZ2xlL3Jlc29sdmU/bmFtZT12aWRlby5fZW5kcG9pbnQub2sucnUmdHlwZT1UWFQ="),o=yield(yield fetch(i,{method:"GET",mode:"cors",cache:"no-cache"})).json(),s=(t=o==null?void 0:o.Answer[0])==null?void 0:t.data;if(!s)throw new Error("Wrong DNS response");return d.debug("Resolved API endpoint",s),s}catch(i){return d.warn("Failed to resolve API endpoint using DNS, default is used",i),p.apiEndpoint(r)}})}function Vn(){return c(this,null,function*(){return Nt||ti||(ti=Er(),Nt=yield ti,ti=null,Nt)})}function ii(t){return c(this,arguments,function*(n,r={},e=!1){if(!window.Blob||!window.navigator.sendBeacon)return;yield Vn();let i=jn(n,r,e),a=new window.Blob([i],{type:"application/x-www-form-urlencoded"});window.navigator.sendBeacon(`${Nt}/fb.do`,a)})}function Di(i){return c(this,arguments,function*(n,r={},e=!1,t){yield Vn();let a=jn(n,r,e);return Ds(a,t)})}function Ds(n,r){return c(this,null,function*(){return new Promise((e,t)=>{let i=new XMLHttpRequest;i.open("POST",`${r!=null?r:Nt}/fb.do`,!0),i.setRequestHeader("Content-type","application/x-www-form-urlencoded"),i.onreadystatechange=()=>{if(i.readyState!==XMLHttpRequest.DONE)return;let a;try{a=JSON.parse(i.responseText)}catch(o){a={result:i.responseText}}i.status!==200||a.hasOwnProperty("error_msg")?t(a):e(a)},i.send(n)})})}function Fn(n,r){return c(this,null,function*(){try{let e=yield fetch(n,{method:"POST",body:r});if(!e.ok)throw new Error(`HTTP error! status: ${e.status}`);let t=yield e.text();d.debug("Form data sent successfully",t)}catch(e){throw d.warn("Failed to send form data",e),e}})}function jn(n,r={},e=!1){r.method=n,r.format="JSON",r.application_key||(r.application_key=p.apiKey),e||(ye.sessionKey?r.session_key=ye.sessionKey:ye.accessToken&&(r.access_token=ye.accessToken));for(let[i,a]of Object.entries(r))typeof a=="object"&&(r[i]=JSON.stringify(a));let t="";for(let[i,a]of Object.entries(r))t&&(t+="&"),t+=`${i}=${encodeURIComponent(a)}`;return t}var wi=class{createJoinLink(r){return c(this,null,function*(){return{join_link:"nop"}})}removeJoinLink(r){return c(this,null,function*(){return{success:!0}})}getAnonymTokenByLink(r,e){return c(this,null,function*(){return""})}log(r){}logClientStats(r){}logClientEvents(r){}getCachedOkIdByExternalId(r){return null}cacheExternalId(r,e){}mapDecorativeId(r,e){}unmapDecorativeId(r){}getDecorativeIdByInitialId(r){}replaceByInitialIdIdIfExists(r){return typeof r=="string"?parseInt(r,10):r}hangupConversation(r){}sendUserFeedbackStats(r,e,t,i){}removeHistoryRecords(r){return c(this,null,function*(){})}getServerTime(){return c(this,null,function*(){return Date.now()})}cleanup(){}};var ks=10,Os=700,xs=3e3,ki=class extends wi{constructor(){super(...arguments);this._userId=null;this._externalUidsCache=new Map;this._decorativeIdToInitialId=new Map;this._initialIdToDecorativeId=new Map}_callUnsafe(a){return c(this,arguments,function*(e,t={},i=!1){let o=s=>c(this,null,function*(){try{return yield Di(e,t,i)}catch(l){if(!l.hasOwnProperty("error_msg")&&(s++,d.debug(`${e} network error, attempt ${s}...`),s<ks))return yield E.delay(Math.min(s*Os,xs)),o(s);throw d.warn(e,"error",l),l}});return o(0)})}_call(a){return c(this,arguments,function*(e,t={},i=!1){try{return yield this._callUnsafe(e,t,i)}catch(o){d.warn("Api call error",o);let s=ce.API;switch(o.error_code){case 102:case 103:case 104:return yield this.authorize(),this._callUnsafe(e,t,i)}let l={message:o.error_msg,code:o.error_code};switch(o.custom_error&&(l.custom_error=o.custom_error),o.error_code){case 1101:s=k.SERVICE_DISABLED;break;case 300:s=k.NOT_FOUND;break;case 1102:s=k.CALLEE_IS_OFFLINE;break;case 1103:s=k.NOT_FRIENDS;break;case 1104:case 1106:s=k.EXTERNAL_API_ERROR;break;case 1113:s=k.CALLER_IS_REJECTED;break;case 1114:s=k.VCHAT_DETAILED_ERROR;break}throw new q(s,l)}})}userId(e){return c(this,null,function*(){let t=E.extractOkId(e);if(ye.isEmpty())return X.fromId(String(t));this._externalUidsCache.has(t)||(yield this._getExternalIdsByOkIds([t]));let i=this.getDecorativeIdByInitialId(t);return i&&(t=i),X.fromString(this._externalUidsCache.get(t))})}authorize(){return c(this,null,function*(){if(this._ensureUuid(),!p.apiKey)throw new q(ce.API,{message:"Required argument apiAppKey not passed"});let e={session_data:{version:2,device_id:this._uuid,client_version:p.appVersion,client_type:"SDK_JS"}};return p.authToken&&(e.session_data.auth_token=p.authToken,e.session_data.version=3),this._callUnsafe("auth.anonymLogin",e,!0).then(t=>{t.uid&&(this._userId=Number(t.uid)),ye.sessionKey=t.session_key,ye.sessionSecretKey=t.session_secret_key}).catch(t=>{throw t.error_code===401&&I.onTokenExpired(),new q(ce.AUTH,{message:t.error_msg,code:t.error_code})})})}log(e){let t={collector:"ok.mobile.apps.video",data:JSON.stringify({application:`${p.appName}:${p.sdkVersion}`,platform:p.platform,items:e})};ii("log.externalLog",t)}logClientStats(e){let t={app_version:String(p.appVersion),sdk_type:"WEB",sdk_version:p.sdkVersion,version:1,items:e};p.clientStatsPlatform&&(t.platform=p.clientStatsPlatform);let i={data:JSON.stringify(t)};ii("vchat.clientStats",i)}logClientEvents(e){let t={app_version:String(p.appVersion),sdk_type:"WEB",sdk_version:p.sdkVersion,version:1,items:e};p.clientStatsPlatform&&(t.platform=p.clientStatsPlatform);let i={data:JSON.stringify(t)};ii("vchat.clientEvents",i)}uploadDebugLogs(e,t,i,a){return c(this,null,function*(){let o={conversationId:e,webrtcPlatform:p.platform,startTime:t,endTime:i},s=yield this._callUnsafe("vchat.getLogUploadUrl",o),l=new FormData,u=new Blob([a],{type:"application/json"});l.append("file",u,"log.json");let m=new URL(s.upload_url);return m.searchParams.append("size",u.size.toString()),Fn(m.toString(),l)})}joinConversation(e,t=!1,i){return c(this,null,function*(){let a={conversationId:e,isVideo:t,protocolVersion:p.protocolVersion};return i&&(a.chatId=i),this._call("vchat.joinConversation",a)})}createConversation(u){return c(this,arguments,function*(e,t="",i=!1,{onlyAdminCanShareMovie:a,audienceMode:o,audioOnly:s}={},l){let m=this._preareStartConversationData({conversationId:e,isVideo:!1,joiningAllowed:!0,payload:t,requireAuthToJoin:i,onlyAdminCanShareMovie:a,audienceMode:o,audioOnly:s,speakerIds:l});return this._startConversation(m)})}startConversation(m,h,T){return c(this,arguments,function*(e,t,i,a=!1,o="",s=!1,l=!1,{onlyAdminCanShareMovie:u}={}){let v=this._preareStartConversationData({conversationId:e,isVideo:a,joiningAllowed:s,payload:o,requireAuthToJoin:l,onlyAdminCanShareMovie:u});if(t&&t.length)switch(i){case ot.USER:v.uids=t.join(",");break;case ot.GROUP:v.gid=t[0];break;case ot.CHAT:v.chatId=t[0];break}return this._startConversation(v)})}_ensureUuid(){if(!this._uuid){let e=lt.get("uuid");e||(e=E.uuid(),lt.set("uuid",e)),this._uuid=String(e)}}_preareStartConversationData({conversationId:e,isVideo:t,payload:i="",joiningAllowed:a=!1,requireAuthToJoin:o=!1,onlyAdminCanShareMovie:s,audienceMode:l=!1,audioOnly:u=!1,speakerIds:m=[]}){let h={conversationId:e,isVideo:t,protocolVersion:p.protocolVersion};if(a&&(h.createJoinLink=!0),i&&(h.payload=i),p.domain&&(h.domainId=p.domain),p.externalDomain&&(h.externalDomain=p.externalDomain),o&&(h.requireAuthToJoin=!0),s!==void 0&&(h.onlyAdminCanShareMovie=s),l&&(h.audienceMode=l),u&&(h.audioOnly=u),m.length){let T=m.map(v=>E.composeUserId(v));h.speakerIds=T.join(",")}return h}_startConversation(e){return c(this,null,function*(){return this._call("vchat.startConversation",e)})}createJoinLink(e){return c(this,null,function*(){return this._call("vchat.createJoinLink",{conversationId:e})})}removeJoinLink(e){return c(this,null,function*(){return this._call("vchat.removeJoinLink",{conversationId:e})})}getAnonymTokenByLink(e,t){return c(this,null,function*(){let i={joinLink:e};t&&(i.anonymName=t);let a=yield this._call("vchat.getAnonymTokenByLink",i);return this._userId=Number(a.uid),a.token})}joinConversationByLink(e,t=!1,i,a){return c(this,null,function*(){let o={joinLink:e,isVideo:t,protocolVersion:p.protocolVersion};return i!=null&&i.length&&(o.observedIds=i.join(",")),p.anonymToken&&(o.anonymToken=p.anonymToken),a&&(o.payload=a),this._call("vchat.joinConversationByLink",o)})}getOkIdsByExternalIds(e){return c(this,null,function*(){let t=[],i=[],a=new Map,o=Array.from(this._externalUidsCache.keys()),s=Array.from(this._externalUidsCache.values());for(let u of e){let m=X.toString(u),h=s.indexOf(m);h>-1?t.push(this.replaceByInitialIdIdIfExists(o[h])):(a.set(String(u.id),m),i.push({id:u.id,ok_anonym:u.type==="ANONYM"}))}return i.length&&(yield this._call("vchat.getOkIdsByExternalIds",{externalIds:i})).ids.forEach((u,m)=>{let h=Number(u.ok_user_id),T=String(u.external_user_id.id);a.has(T)&&(this.cacheExternalId(h,X.fromString(a.get(T))),t.push(h))}),t})}getParticipantIdsByExternalIds(e){return c(this,null,function*(){yield this.getOkIdsByExternalIds(e);let t=new Map,i=Array.from(this._externalUidsCache.keys()),a=Array.from(this._externalUidsCache.values());for(let o of e){let s=X.toString(o),l=a.indexOf(s);if(l>-1){let u=E.composeParticipantId(this.replaceByInitialIdIdIfExists(i[l]),de.USER,o.deviceIdx);t.set(o,u)}}return t})}getExternalIdsByOkIds(e){return c(this,null,function*(){let t=[],i=[];for(let o of e)if(this._externalUidsCache.has(o)){let s=this.getDecorativeIdByInitialId(o),l=this._externalUidsCache.get(s!=null?s:o);t.push(X.fromString(l))}else i.push(o);if(!i.length)return t;let a=yield this._getExternalIdsByOkIds(i);return Array.from(a.values())})}getCachedOkIdByExternalId(e){let t=Array.from(this._externalUidsCache.keys()),i=Array.from(this._externalUidsCache.values()),a=X.toString(e),o=i.indexOf(a);return o>-1?E.composeParticipantId(this.replaceByInitialIdIdIfExists(t[o]),de.USER,e.deviceIdx):o>-1?E.composeParticipantId(t[o],de.USER,e.deviceIdx):null}cacheExternalId(e,t){let i=E.extractOkId(e);this._externalUidsCache.set(i,X.toString(t))}mapDecorativeId(e,t){let i=E.extractOkId(e),a=E.extractOkId(t);this._decorativeIdToInitialId.set(i,a),this._initialIdToDecorativeId.set(a,i)}unmapDecorativeId(e){let t=E.extractOkId(e),i=this.getDecorativeIdByInitialId(t);i&&this._decorativeIdToInitialId.delete(i),this._initialIdToDecorativeId.delete(t)}getDecorativeIdByInitialId(e){let t=E.extractOkId(e);return this._initialIdToDecorativeId.get(t)}replaceByInitialIdIdIfExists(e){var i;let t=E.extractOkId(e);return(i=this._decorativeIdToInitialId.get(t))!=null?i:t}getConversationParams(e){return c(this,null,function*(){let t={};return p.anonymToken&&(t.anonymToken=p.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:k.HUNGUP};p.anonymToken&&(t.anonymToken=p.anonymToken),ii("vchat.hangupConversation",t)}sendUserFeedbackStats(e,t,i,a){let o={collector:"app.vchat.events.product",data:JSON.stringify({application:`${p.appName}:${p.sdkVersion}`,platform:p.platform,items:[{type:1,operation:R.USER_FEEDBACK_RECEIVED,timestamp:Date.now(),custom:{vcid:e,user_response:t,reason:i,group_call_users_count:a}}]})};ii("log.externalLog",o)}removeHistoryRecords(e){return c(this,null,function*(){yield this._call("vchat.removeHistoryRecords",{recordIds:e.join(",")})})}cleanup(){this._decorativeIdToInitialId=new Map,this._initialIdToDecorativeId=new Map}_getExternalIdsByOkIds(e){return c(this,null,function*(){let t=new Map;e=e.map(i=>{var a;return(a=this.getDecorativeIdByInitialId(i))!=null?a:i});try{let i=yield this._call("vchat.getExternalIdsByOkIds",{uids:e.join(",")}),a=(o,s)=>{for(let[l,u]of Object.entries(o)){let m=Number(l),h=X.fromId(u,s);t.set(m,h),this.cacheExternalId(m,h)}};i.external_ids&&a(i.external_ids,"USER"),i.anonym_ids&&a(i.anonym_ids,"ANONYM");for(let o of e){let s=Number(o);if(!t.has(s)){let l=X.fromId(String(s));t.set(s,l),this.cacheExternalId(s,l)}}return t}catch(i){return t}})}getServerTime(){return c(this,null,function*(){return(yield this._call("system.getInfo")).serverTime})}};var Hn=(e=>(e.KING="KING",e.PAWN="PAWN",e))(Hn||{}),Ls=Hn;var Gn=(e=>(e.OFF="0",e.ON="1",e))(Gn||{});var ra=class{constructor(r){this._queue=new Array(r).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(r){this._moveReadCursor&&(this._readCursor=this.nextCursor(this._readCursor)),this._queue[this._writeCursor]===null&&(this._left+=1),this._queue[this._writeCursor]=r,this._writeCursor=this.nextCursor(this._writeCursor),this._moveReadCursor=this._writeCursor===this._readCursor}nextCursor(r){return(r+1)%this._queue.length}next(){let r=this._queue[this._readCursor];return r&&(this._moveReadCursor=!1,this._queue[this._readCursor]=null,this._readCursor=this.nextCursor(this._readCursor),this._left-=1),r}};var aa=class{constructor(r,e,t,i=null){this._uuid=E.uuid(),this._apiKey=e,this._callToken=t,this._apiEnv=r,this._baseApiUrl=i}authorize(){return c(this,null,function*(){let r={session_data:{device_id:this._uuid,client_version:p.appVersion,client_type:"SDK_JS",auth_token:this._callToken,version:3},application_key:this._apiKey},e=yield Er(this._baseApiUrl,this._apiEnv),t=yield Di("auth.anonymLogin",r,!0,e);return E.isObject(t)&&!("error_msg"in t)?(this._sessionKey=t.session_key,!0):!1})}hangupConversation(r){return c(this,null,function*(){let e={conversationId:r,reason:k.HUNGUP,application_key:this._apiKey,session_key:this._sessionKey},t=yield Er(this._baseApiUrl,this._apiEnv);yield Di("vchat.hangupConversation",e,!0,t)})}};var ne,Oi=null,gv={getCameras:A.getCameras,getMicrophones:A.getMicrophones,getOutput:A.getOutput,getVideoFacingMode:A.getVideoFacingMode,hasCamera:A.hasCamera,hasMicrophone:A.hasMicrophone,getSavedCamera:A.getSavedCamera,getSavedMicrophone:A.getSavedMicrophone,getSavedOutput:A.getSavedOutput,hasCameraPermission:A.hasCameraPermission,hasMicrophonePermission:A.hasMicrophonePermission,hasPermissions:A.hasPermissions,getUserMedia:A.getUserMedia,getUserVideo:A.getUserVideo,getUserAudio:A.getUserAudio,setResolution:A.setResolution,isBrowserSupported:A.isBrowserSupported,isScreenCapturingSupported:A.isScreenCapturingSupported,os:A.os,isMobile:A.isMobile,browserName:A.browserName,browserVersion:A.browserVersion,baseChromeVersion:A.baseChromeVersion,getAudioContext:A.getAudioContext,isAudioShareSupported:A.isAudioShareSupported},fv={participantMarkerCompare:E.participantMarkerCompare};function Sv(n){Oi=n}function vv(n){p.videoEffects=n}function Iv(n){p.audioEffects=n}function Ev(n,r=null,e={},t=1){p.vmoji=n,p.vmojiOptions={protocolVersion:t,renderingOptions:e},r&&n.setSDK(r)}function Tv(n){return c(this,null,function*(){if(p.set(n),ne||(ne=new ki),Wn.disableLog(!p.debug),d.toggle(p.debug),d.log(`Calls SDK ${p.sdkVersion}`,n),yield A.init(),!A.isBrowserSupported())throw new q(ce.UNSUPPORTED);d.log("UserAgent:",navigator.userAgent),d.log("Screen resolution:",`${window.screen.width}x${window.screen.height}`),d.log("Permissions:",`Camera: ${A.hasCameraPermission()}, Mic: ${A.hasMicrophonePermission()}`),d.log("Simulcast:",`${n.simulcast} => ${p.simulcast}`)})}function Rv(o){return c(this,arguments,function*(n,r=[ue.AUDIO],e="",t=!1,i=!1,a){let s=[],l=[];if(Array.isArray(n)?s=n.length?n:[]:n&&(s=[n]),s.length&&(l=yield ne.getOkIdsByExternalIds(s),!l.length))throw new q(k.CALLEE_IS_OFFLINE);return Ns(l,ot.USER,r,e,t,i,a)})}function Ns(s){return c(this,arguments,function*(n,r=ot.USER,e,t="",i=!1,a=!1,o){if(B.current())throw d.error("There is already active call"),new q(k.FAILED);return new B(ne,Oi).onStart(n,r,e,t,i,a,o)})}function Cv(n){return c(this,null,function*(){return Us(n)})}function Us(t){return c(this,arguments,function*(n,r=de.USER,e){if(n===B.id())throw new Error("Push has already been processed");return new B(ne,Oi).onPush(n,r,e)})}function Pv(n,r){return c(this,null,function*(){return n&&(p.authToken=n),r!==void 0&&p.apiBaseUrl!==r&&(p.apiBaseUrl=r,Bn()),ne.authorize()})}function yv(){return c(this,arguments,function*(n=[ue.AUDIO]){return $e().accept(n)})}function bv(){return c(this,null,function*(){let n=B.current();if(n)return n.decline()})}function Mv(e){return c(this,arguments,function*(n,r=[ue.AUDIO]){return Bs(n,r)})}function Bs(n,r,e){return c(this,null,function*(){if(B.current())throw d.error("There is already active call"),new q(k.FAILED);return new B(ne,Oi).onJoin({conversationId:n,mediaOptions:r,chatId:e})})}function Av(a){return c(this,arguments,function*(n,r=[ue.AUDIO],e,t,i){if(B.current())throw d.error("There is already active call"),new q(k.FAILED);return e&&(p.anonymToken=e),new B(ne,Oi).onJoin({joinLink:n,mediaOptions:r,observedIds:t,payload:i})})}function Dv(){return c(this,null,function*(){let n=B.current();if(n)return n.hangup();B.hangupAfterInit()})}function wv(n,r){return c(this,null,function*(){Array.isArray(n)||(n=[n]);let e=yield ne.getOkIdsByExternalIds(n);if(!e.length)throw new Error("User not found");return Vs(e,r)})}function Vs(n,r){return c(this,null,function*(){let e=B.current();if(e){let t=n.map(i=>E.composeUserId(i));yield e.addParticipant(t,r)}})}function kv(n,r=!1){return c(this,null,function*(){let e=yield ne.getOkIdsByExternalIds([n]);return Fs(e[0],r)})}function Fs(n,r=!1){return c(this,null,function*(){let e=B.current();if(e)try{yield e.removeParticipant(E.composeUserId(n),r)}catch(t){d.warn(`Failed to remove participant ${n}. Perhaps he is no longer on the call. ${t}`)}})}function Ov(n,r){return c(this,null,function*(){let e=B.current();if(n==="videoinput"&&yt.contains(r))return p.videoFacingMode=r,e?(A.isMobile()&&e.stopVideoTrack(),e.changeDevice(n)):void 0;if(!(yield A._saveDeviceId(n,r)))throw new Error(`Device not found: ${r}`);if(e)return e.changeDevice(n)})}function xv(n){return c(this,null,function*(){let r=typeof n=="object"?xe(oe({},n),{fastScreenSharing:n.captureScreen&&n.fastScreenSharing,captureAudio:n.captureScreen&&n.captureAudio&&p.audioShare}):{captureScreen:n,fastScreenSharing:!1,captureAudio:!1},e=B.current();return e?e.toggleScreenCapturing(r):Promise.reject()})}function Lv(n){let r=B.current();r&&r.toggleAnimojiCapturing(n)}function Nv(n,r=!1){return c(this,null,function*(){let e=B.current();e&&(yield e.setVideoStream(n,r))})}function Uv(n){return c(this,null,function*(){let r=B.current();r&&(yield r.toggleLocalVideo(n))})}function Bv(n){return c(this,null,function*(){let r=B.current();r&&(yield r.toggleLocalAudio(n))})}function Vv(n){return c(this,null,function*(){let r=B.current();if(r)return r.setLocalResolution(n)})}function Fv(n){return c(this,null,function*(){let r=B.current();r&&(yield r.changePriorities(n))})}function jv(n,r){return c(this,null,function*(){let e=B.current();if(e){let t;if(r){let[i]=yield ne.getOkIdsByExternalIds([r]);t=E.composeParticipantId(i,de.USER,r.deviceIdx)}yield e.changeParticipantState(n,t)}})}function Hv(){return c(this,null,function*(){let n=B.current();n&&(yield n.putHandsDown())})}function Gv(n){return c(this,null,function*(){let r=B.current();r&&(yield r.updateDisplayLayout(n))})}function Wv(n,r,e=!1){return c(this,null,function*(){let t=yield ne.getOkIdsByExternalIds([n]);return js(t[0],X.getDeviceIdx(n),r,e)})}function js(n,r,e,t=!1){return c(this,null,function*(){let i=B.current();i&&(yield i.grantRoles(E.composeParticipantId(n,de.USER,r),e,t))})}function Kv(i){return c(this,arguments,function*({externalId:n=null,muteStates:r,requestedMedia:e=[],roomId:t=null}){let a=null;return n&&(a=(yield ne.getOkIdsByExternalIds([n]))[0]),Hs({uid:a,muteStates:r,requestedMedia:e,deviceIdx:X.getDeviceIdx(n),roomId:t})})}function Hs(a){return c(this,arguments,function*({uid:n=null,muteStates:r,requestedMedia:e=[],deviceIdx:t=0,roomId:i=null}){let o=B.current();if(o){let s=n?E.composeParticipantId(n,de.USER,t):null;yield o.muteParticipant(s,r,e,i)}})}function $v(n,r=!1,e=null){return c(this,null,function*(){let t=yield ne.getOkIdsByExternalIds([n]);return Gs(t[0],r,X.getDeviceIdx(n),e)})}function Gs(n,r=!1,e=0,t=null){return c(this,null,function*(){let i=B.current();i&&(yield i.pinParticipant(E.composeParticipantId(n,de.USER,e),r,t))})}function qv(n){return c(this,null,function*(){let r=B.current();r&&(yield r.updateMediaModifiers(n))})}function zv(n){return c(this,null,function*(){let r=B.current();r&&(yield r.enableVideoSuspend(n))})}function Jv(n){return c(this,null,function*(){let r=B.current();r&&(yield r.enableVideoSuspendSuggest(n))})}function Yv(n){return c(this,null,function*(){let r=B.current();r&&(yield r.changeOptions(n))})}function Qv(n,r=null){return c(this,null,function*(){let e=null;return r&&(e=(yield ne.getOkIdsByExternalIds([r]))[0]),Ws(n,e)})}function Ws(n,r=null){return c(this,null,function*(){let e=B.current();if(e){let t=r?E.composeUserId(r):null;yield e.chatMessage(n,t)}})}function Xv(n=10){return c(this,null,function*(){let r=B.current();if(r)return r.chatHistory(n)})}function Zv(n,r=null){return c(this,null,function*(){let e=null;return r&&(e=(yield ne.getOkIdsByExternalIds([r]))[0]),Ks(n,e,X.getDeviceIdx(r))})}function Ks(n,r=null,e=0){return c(this,null,function*(){let t=B.current();if(t){let i=r?E.composeParticipantId(r,de.USER,e):null;yield t.customData(n,i)}})}function eI(){return c(this,arguments,function*(n="",r=!1,{onlyAdminCanShareMovie:e=!1}={}){return(yield ne.createConversation(E.uuid(),n,r,{onlyAdminCanShareMovie:e})).join_link})}function tI(){return c(this,arguments,function*(n="",r=!1,{onlyAdminCanShareMovie:e=!1,audioOnly:t=!1}={},i){let a=X.fromIds(i),o=yield ne.getOkIdsByExternalIds(a);return(yield ne.createConversation(E.uuid(),n,r,{onlyAdminCanShareMovie:e,audienceMode:!0,audioOnly:t},o)).join_link})}function iI(){return c(this,null,function*(){let n=B.current();return n?n.createJoinLink():Promise.reject()})}function rI(){return c(this,null,function*(){let n=B.current();return n?n.removeJoinLink():Promise.reject()})}function aI(n,r){return c(this,null,function*(){return ne.getAnonymTokenByLink(n,r)})}function nI(n){let r=B.current();r&&r.setVolume(n)}function oI(n){p.forceRelayPolicy=n}function sI(n=!1,r=null,e=null,t="DIRECT_LINK",i=null,a=null){return c(this,null,function*(){let o=B.current();return o?o.startStream(n,r,e,t,i,a):Promise.reject()})}function cI(n=null){return c(this,null,function*(){let r=B.current();return r?r.stopStream(n):Promise.reject()})}function dI(n=null){return c(this,null,function*(){let r=B.current();return r?r.publishStream(n):Promise.reject()})}function lI(n,r,e=!1,t=null){return c(this,null,function*(){let i=B.current();if(!i)return Promise.reject();let a,o,s=[];if(r!=null&&r.length&&s.push(...r),n&&s.push(n),s.length){let l=yield ne.getParticipantIdsByExternalIds(s);n&&(a=l.get(n),l.delete(n)),o=Array.from(l.values())}return i.recordSetConf(a,o,e,t)})}function pI(){return c(this,null,function*(){let n=B.current();return n?n.getStreamInfo():Promise.reject()})}function uI(n){return c(this,null,function*(){let r=B.current();return r?r.addMovie(n):Promise.reject()})}function mI(n){return c(this,null,function*(){let r=B.current();return r?r.updateMovie(n):Promise.reject()})}function hI(n){return c(this,null,function*(){let r=B.current();return r?r.removeMovie(n):Promise.reject()})}function _I(n,r){return c(this,null,function*(){let e=B.current();if(e){let t=[];for(let i of n){let a,o;i.addParticipantIds&&(a=(yield ne.getOkIdsByExternalIds(i.addParticipantIds)).map(s=>E.composeUserId(s))),i.removeParticipantIds&&(o=(yield ne.getOkIdsByExternalIds(i.removeParticipantIds)).map(s=>E.composeUserId(s))),t.push({id:i.id,name:i.name,participantCount:i.participantCount,addParticipantIds:a,removeParticipantIds:o,countdownSec:i.countdownSec})}return e.updateRooms(t,r)}return Promise.reject()})}function gI(n,r){return c(this,null,function*(){let e=B.current();return e?e.activateRooms(n,r):Promise.reject()})}function fI(n=null,r=null){return c(this,null,function*(){let e=B.current();if(!e)return Promise.reject();let t;if(r){let i=yield ne.getOkIdsByExternalIds([r]),a=X.getDeviceIdx(r);t=E.composeParticipantId(i[0],de.USER,a)}return e.switchRoom(n,t)})}function SI(n){return c(this,null,function*(){let r=B.current();return r?r.removeRooms(n):Promise.reject()})}function vI(n){p.statisticsInterval=n;let r=B.current();if(r)return r.updateStatisticsInterval()}function II(n){Wn.disableLog(!n),d.toggle(n)}function EI(n,...r){p.debugLog&&d.send(n,"[external]",...r)}function TI(){return c(this,null,function*(){let n=ke.conversationId;if(!n)throw d.error("[uploadDebugLogs]","No conversation id found"),new Error("No conversation id found");let r=ke.collectLogs();if(r.length===0)throw d.error("[uploadDebugLogs]","No logs found"),new Error("No logs found");let e=ke.startTime,t=ke.endTime;try{return ne==null?void 0:ne.uploadDebugLogs(n,e,t,JSON.stringify(r))}catch(i){throw d.error("[uploadDebugLogs]","Error while uploading logs",i),new Error("Error while uploading logs",{cause:i})}})}function RI(n){return c(this,null,function*(){let r=B.current();if(r)return r.videoEffect(n)})}function CI(n,r){return c(this,null,function*(){let e=B.current();if(e)return e.audioEffect(n.length>0?n:null,r)})}function PI(n){return c(this,null,function*(){let r=B.current();r&&(yield r.setAudioStream(n))})}function yI(n,r=null,e=null){return c(this,null,function*(){let t=B.current();if(!t)return;let i=e!=null?e:r==null?void 0:r.id,a=null;if(r){let s=(yield ne.getOkIdsByExternalIds([r]))[0];if(!s)throw new Error("Could not get user id to set animoji svg");a=E.composeParticipantId(s,de.USER,X.getDeviceIdx(r))}t.setAnimojiSvg(n,a,i)})}function bI(n){let r=B.current();r&&r.setAnimojiFill(n)}function MI(n=null,r,e=!1){return c(this,null,function*(){return $e().getWaitingHall(n,r,e)})}function AI(){return c(this,null,function*(){return $e().getAudienceModeHands()})}function DI(n,r=!1){return c(this,null,function*(){let e=$e(),t;if(n){let[i]=yield ne.getOkIdsByExternalIds([n]);t=E.composeUserId(i)}return e.promoteParticipant(t,r)})}function wI(n=!1){return c(this,null,function*(){return $e().requestPromotion(n)})}function kI(n=!1){return c(this,null,function*(){return $e().acceptPromotion(n)})}function OI(n){return c(this,null,function*(){return $e().getParticipantListChunk(n)})}function xI(n){return c(this,null,function*(){return $e().getParticipants(n)})}function LI(n){return c(this,null,function*(){return $e().feedback(n)})}function NI(n,r,e){return $e().userFeedbackStats(n,r,e)}function UI(n,r={},e=!1){let t=B.current();t&&t.sendClientEvent(n,r,e)}function BI(n,r){return c(this,null,function*(){return $e().enableFeatureForRoles(n,r)})}function $e(){let n=B.current();if(!n)throw new Error("Conversation not found");return n}function VI(n){return c(this,null,function*(){yield ne.removeHistoryRecords(n)})}function FI(n){return c(this,null,function*(){let r=B.current();r&&(yield r.startAsr(n))})}function jI(n){return c(this,null,function*(){let r=B.current();r&&(yield r.stopAsr(n))})}function HI(n){return c(this,null,function*(){let r=B.current();r&&(yield r.requestAsr(n))})}function GI(n){return c(this,null,function*(){let r=B.current();return r?r.startUrlSharing(n):Promise.reject()})}function WI(){return c(this,null,function*(){let n=B.current();return n?n.stopUrlSharing():Promise.reject()})}function KI(){return p.sdkVersion}export{ki as Api,aa as ApiExternal,ra as ArrayDequeue,ye as AuthData,Ut as BaseLogger,ut as CallDirection,ot as CallType,Qr as ChatRoomEventType,Xr as ConversationFeature,Zt as ConversationOption,Ja as DebugMessageType,Zr as ExternalIdType,yt as FacingMode,ce as FatalError,q as HangupReason,k as HangupType,ue as MediaOption,Ge as MediaTrackKind,fi as MediaType,Fe as MuteState,Z as ParticipantState,Gn as ParticipantStateDataValue,Lr as ParticipantStatus,Ls as RecordRole,vi as RoomsEventType,Xt as Signaling,U as SignalingCommandType,nt as SignalingConnectionType,V as SignalingNotification,Ze as TransportTopology,mt as UserRole,de as UserType,kt as VolumeDetector,yv as acceptCall,kI as acceptPromotion,gI as activateRooms,uI as addMovie,wv as addParticipant,Vs as addParticipantInternal,Pv as authorize,gv as browser,Ns as callInternal,Rv as callTo,xv as captureScreen,Lv as captureVmoji,CI as changeAudioEffect,Yv as changeConversationOptions,Ov as changeDevice,jv as changeParticipantState,Fv as changePriorities,RI as changeVideoEffect,Xv as chatHistory,Qv as chatMessage,Ws as chatMessageInternal,iI as createJoinLink,Zv as customData,Ks as customDataInternal,II as debug,EI as debugMessage,bv as declineCall,BI as enableFeatureForRoles,zv as enableVideoSuspend,Jv as enableVideoSuspendSuggest,LI as feedback,oI as forceRelayPolicy,aI as getAnonymTokenByLink,AI as getAudienceModeHands,OI as getParticipantListChunk,xI as getParticipants,pI as getStreamInfo,MI as getWaitingHall,Wv as grantRoles,js as grantRolesInternal,Dv as hangup,Tv as init,Mv as joinCall,Av as joinCallByLink,Bs as joinCallInternal,UI as logClientEvent,Kv as muteParticipant,Hs as muteParticipantInternal,$v as pinParticipant,Gs as pinParticipantInternal,Cv as processPush,Us as processPushInternal,DI as promoteParticipant,dI as publishStream,Hv as putHandsDown,lI as recordSetConf,VI as removeHistoryRecords,rI as removeJoinLink,hI as removeMovie,kv as removeParticipant,Fs as removeParticipantInternal,SI as removeRooms,HI as requestAsr,wI as requestPromotion,Iv as setAudioEffects,PI as setAudioStream,Vv as setLocalResolution,Sv as setLogger,qv as setMediaModifiers,vI as setStatisticsInterval,vv as setVideoEffects,Nv as setVideoStream,Ev as setVmoji,bI as setVmojiFill,yI as setVmojiSvg,nI as setVolume,FI as startAsr,tI as startAudienceConversation,eI as startConversation,sI as startStream,GI as startUrlSharing,jI as stopAsr,cI as stopStream,WI as stopUrlSharing,fI as switchRoom,Bv as toggleLocalAudio,Uv as toggleLocalVideo,Gv as updateDisplayLayout,mI as updateMovie,_I as updateRooms,TI as uploadDebugLogs,NI as userFeedbackStats,fv as utils,KI as version};
|
|
7
|
+
import Hn from"webrtc-adapter";var Ot=class{log(r,e,t=!1){}destroy(){}};var ee=class{constructor(){this._handlers={};this._listeners=[]}_triggerEvent(r,...e){if(this._handlers.hasOwnProperty(r))for(let t of this._handlers[r])t.apply(this,e)}addEventListener(r,e){if(typeof e!="function")throw new Error("Listener should be a function");return this._handlers.hasOwnProperty(r)||(this._handlers[r]=[]),this._handlers[r].push(e),{dispose:this.removeEventListener.bind(this,r,e)}}removeEventListener(r,e){if(!this._handlers.hasOwnProperty(r))return;e||delete this._handlers[r];let t=this._handlers[r].indexOf(e);t>=0&&this._handlers[r].splice(t,1)}subscribe(r,e,t){let i=r.addEventListener(e,t);this._listeners.push(i)}unsubscribe(){this._listeners.forEach(r=>{r.dispose()})}};var ei=class extends ee{get ready(){return!0}setParticipantIdRegistry(r){}requestRealloc(){}setEndpoint(r){}setWebTransportEndpoint(r){}setConversationId(r){}readyToSend(r=!0){}cleanup(){}requestTestMode(r,e){}getNextCommandSequenceNumber(){return 0}};var Sa=(X=>(X.CANCELED="CANCELED",X.REJECTED="REJECTED",X.REMOVED="REMOVED",X.HUNGUP="HUNGUP",X.MISSED="MISSED",X.BUSY="BUSY",X.FAILED="FAILED",X.NETWORK_ERROR="NETWORK_ERROR",X.KILLED="KILLED",X.BANNED="BANNED",X.HAS_ACTIVE_CALL="HAS_ACTIVE_CALL",X.CALLER_IS_BLOCKED="CALLER_IS_BLOCKED",X.NOT_FRIENDS="NOT_FRIENDS",X.CALLEE_IS_OFFLINE="CALLEE_IS_OFFLINE",X.CALLER_IS_REJECTED="CALLER_IS_REJECTED",X.UNKNOWN_ERROR="UNKNOWN_ERROR",X.UNSUPPORTED="UNSUPPORTED",X.OLD_VERSION="OLD_VERSION",X.SERVICE_DISABLED="SERVICE_DISABLED",X.EXTERNAL_API_ERROR="EXTERNAL_API_ERROR",X.SOCKET_CLOSED="SOCKET_CLOSED",X.ENDED="ENDED",X.KILLED_WITHOUT_DELETE="KILLED_WITHOUT_DELETE",X.ANOTHER_DEVICE="ANOTHER_DEVICE",X.NOT_FOUND="NOT_FOUND",X.VCHAT_DETAILED_ERROR="VCHAT_DETAILED_ERROR",X))(Sa||{}),A=Sa;var j=class n extends Error{constructor(r,e){super(),this.name="HangupReason",this.code=e&&e.code||0,this.remote=e&&e.remote||!1,this.custom_error=e?.custom_error??null,Object.values(A).indexOf(r)>-1?this.hangup=r:this.error=r;let t=[];this.error&&t.push("error"),this.remote&&t.push("remote"),this.code&&t.push(`code: ${this.code}`),e&&e.message&&t.push(`message: '${e.message}'`),this.message=r+(t.length?` (${t.join(", ")})`:""),Error.captureStackTrace&&Error.captureStackTrace(this,n)}};var T=class n extends Ot{constructor(e,t){super();this._batchInterval=3e3;this._batchedLogItems=[];this._batchedClientStats=[];this._batchedClientEvents=[];this._batchTimeout=null;this._serverTimeDelta=0;this._api=e,this._externalLogger=t,this._calculateServerTimeDelta()}_sendLogItems(e){this._api.log(e)}_sendClientStats(e){this._api.logClientStats(e)}_sendClientEvents(e){this._api.logClientEvents(e)}_sendBatch(){this._stopTimeout();let e=!1;this._batchedLogItems.length>0&&(this._sendLogItems(this._batchedLogItems),this._batchedLogItems=[],e=!0),this._batchedClientStats.length>0&&(this._sendClientStats(this._batchedClientStats),this._batchedClientStats=[],e=!0),this._batchedClientEvents.length>0&&(this._sendClientEvents(this._batchedClientEvents),this._batchedClientEvents=[],e=!0),e&&this._startTimeout()}_startTimeout(){this._batchTimeout=window.setTimeout(()=>this._sendBatch(),this._batchInterval)}_stopTimeout(){this._batchTimeout&&(clearTimeout(this._batchTimeout),this._batchTimeout=null)}async _calculateServerTimeDelta(){try{let e=await this._api.getServerTime();this._serverTimeDelta=Date.now()-e}catch{}}_now(){return Date.now()-this._serverTimeDelta}log(e,t,i=!1){let a={};typeof t<"u"&&(a.param=t),this._logInternal(e,a,i),this._externalLogger&&this._externalLogger.log(e,t,i)}logCustom(e,t,i=!1){this._logInternal(e,t,i)}logClientStats(e,t=!1){let i=Object.assign(e,{vcid:L.id(),timestamp:this._now()});Object.keys(i).forEach(a=>{i[a]===void 0&&delete i[a]}),this._batchedClientStats.push(i),(t||!this._batchTimeout)&&this._sendBatch()}logClientEvent(e,t=!1){let i=Object.assign(e,{vcid:L.id(),timestamp:this._now()});this._batchedClientEvents.push(i),(t||!this._batchTimeout)&&this._sendBatch()}_logInternal(e,t,i){let a={type:1,time:0,operation:e,timestamp:this._now(),custom:Object.assign(t,{vcid:L.id()}),uid:this._api.getUserId()};this._batchedLogItems.push(a),(i||!this._batchTimeout)&&this._sendBatch()}destroy(){this._sendBatch(),this._stopTimeout(),this._externalLogger&&this._externalLogger.destroy()}static create(e,t){n._instance||(n._instance=new n(e,t))}static log(e,t,i=!1){n._instance&&n._instance.log(e,t,i)}static logCustom(e,t,i=!1){n._instance&&n._instance.logCustom(e,t,i)}static logClientStats(e,t=!1){n._instance&&n._instance.logClientStats(e,t)}static logClientEvent(e,t=!1){n._instance&&n._instance.logClientEvent(e,t)}static destroy(){n._instance&&n._instance.destroy(),n._instance=null}};import{Any as jo,Arr as Qa,Int as F,Nil as bt,Str as Xa,Bool as Jr}from"messagepack";var va=(x=>(x.RECOVER="recover",x.ACCEPT_CALL="accept-call",x.ADD_PARTICIPANT="add-participant",x.REMOVE_PARTICIPANT="remove-participant",x.HANGUP="hangup",x.TRANSMIT_DATA="transmit-data",x.ACCEPT_PRODUCER="accept-producer",x.ALLOCATE_CONSUMER="allocate-consumer",x.CHANGE_MEDIA_SETTINGS="change-media-settings",x.CHANGE_PARTICIPANT_STATE="change-participant-state",x.CHANGE_STREAM_PRIORITIES="change-streams-priorities",x.UPDATE_DISPLAY_LAYOUT="update-display-layout",x.REPORT_PERF_STAT="report-perf-stat",x.REPORT_SHARING_STAT="report-sharing-stat",x.REPORT_NETWORK_STAT="report-network-stat",x.RECORD_START="record-start",x.RECORD_STOP="record-stop",x.RECORD_PUBLISH="record-publish",x.RECORD_SET_CONF="record-set-conf",x.RECORD_GET_STATUS="record-get-status",x.SWITCH_MICRO="switch-micro",x.SWITCH_TOPOLOGY="switch-topology",x.REQUEST_REALLOC="request-realloc",x.CHAT_MESSAGE="chat-message",x.CHAT_HISTORY="chat-history",x.CUSTOM_DATA="custom-data",x.GRANT_ROLES="grant-roles",x.MUTE_PARTICIPANT="mute-participant",x.ENABLE_FEATURE_FOR_ROLES="enable-feature-for-roles",x.PIN_PARTICIPANT="pin-participant",x.UPDATE_MEDIA_MODIFIERS="update-media-modifiers",x.CHANGE_OPTIONS="change-options",x.GET_WAITING_HALL="get-waiting-hall",x.GET_PARTICIPANT_LIST_CHUNK="get-participant-list-chunk",x.GET_PARTICIPANTS="get-participants",x.PROMOTE_PARTICIPANT="promote-participant",x.REQUEST_TEST_MODE="request-test-mode",x.ADD_MOVIE="add-movie",x.UPDATE_MOVIE="update-movie",x.REMOVE_MOVIE="remove-movie",x.START_URL_SHARING="start-url-sharing",x.STOP_URL_SHARING="stop-url-sharing",x.GET_ROOMS="get-rooms",x.UPDATE_ROOMS="update-rooms",x.ACTIVATE_ROOMS="activate-rooms",x.REMOVE_ROOMS="remove-rooms",x.SWITCH_ROOM="switch-room",x.FEEDBACK="feedback",x.ASR_START="asr-start",x.ASR_STOP="asr-stop",x.REQUEST_ASR="request-asr",x.REQUEST_PROMOTION="request-promotion",x.ACCEPT_PROMOTION="accept-promotion",x.GET_HAND_QUEUE="get-hand-queue",x.ENABLE_VIDEO_SUSPEND="enable-video-suspend",x.ENABLE_VIDEO_SUSPEND_SUGGEST="enable-video-suspend-suggest",x.PUT_HANDS_DOWN="put-hands-down",x.CHANGE_SIMULCAST="change-simulcast",x))(va||{}),O=va;var Ia=(Y=>(Y.MIC_CAMERA_PERMISSION="mic_camera",Y.CAMERA_PERMISSION="camera",Y.MIC_PERMISSION="mic",Y.CAMERA_ACCESS="cameralock",Y.MIC_ACCESS="miclock",Y.MIC_NOT_FOUND="nomic",Y.SCREEN_PERMISSION="screenpermission",Y.SCREEN_ACCESS="screenlock",Y.CONNECTION="connection",Y.NETWORK="network",Y.UNKNOWN="unknown",Y.UNSUPPORTED="unsupported",Y.SIGNALING_FAILED="signalingfailed",Y.API="api",Y.AUTH="auth",Y.OVERCONSTRAINED="overconstrained",Y))(Ia||{}),te=Ia;var Ea=(o=>(o.AUDIO="AUDIO",o.VIDEO="VIDEO",o.SCREEN_SHARING="SCREEN_SHARING",o.MOVIE_SHARING="MOVIE_SHARING",o.AUDIO_SHARING="AUDIO_SHARING",o.ANIMOJI="ANIMOJI",o))(Ea||{}),ae=Ea;var Ta=(K=>(K.ERROR="callError",K.DEVICES="callDevices",K.CALL_SPEC_ERROR="callSpecError",K.ICE_CONNECTION_STATE="callIceConnectionState",K.ICE_CONNECTION_TYPE="callIceConnectionType",K.ICE_RESTART="callIceRestart",K.PUSH="callPush",K.OUTGOING_CALL="callStart",K.CALL_FINISH="call_finish",K.OUTGOING_MULTIPARTY_CALL="callStartMultiparty",K.JOIN_CONVERSATION="callJoinConversation",K.ACCEPTED_OUTGOING="callAcceptedOutgoing",K.ACCEPT_INCOMING="callAcceptIncoming",K.DECLINE_INCOMING="callDeclineIncoming",K.ACCEPT_CONCURRENT="callAcceptConcurrent",K.HANGUP="callHangup",K.CODEC_USAGE="codec_usage",K.MEDIA_STATUS="callMediaStatus",K.DEVICE_CHANGED="callDeviceChanged",K.SOCKET_ACTION="callSocketAction",K.ADD_PARTICIPANT="callAddParticipant",K.REMOVE_PARTICIPANT="callRemoveParticipant",K.POOR_CONNECTION="callPoorConnection",K.TOPOLOGY_CHANGE_REQUESTED="callTopologyChangeRequested",K.RELAY_POLICY="callForceRelay",K.PAT_ALLOCATED="patAllocate",K.PAT_DEALLOCATED="patDeallocate",K.PAT_ERROR="patError",K.PAT_WAITING_TIME_ERROR="patWaitingTimeError",K.PAT_OUTDATED_RESPONSE="patOutdatedResponse",K.SIGNALING_CONNECTED="signaling_connected",K.RECONNECT="callReconnect",K.SCREENSHARE_FIRST_FRAME="screen_share_first_frame",K.SCREENSHARE_FREEZE_DURATION="callScreenshareFreezeDuration",K.FIRST_MEDIA_RECEIVED="first_media_received",K.CALL_EVENTUAL_STAT="callEventualStat",K.CALL_DECLINED_OR_HANGED_LOCALLY="CallDeclinedOrHangedLocally",K.USER_FEEDBACK_RECEIVED="UserFeedbackReceived",K))(Ta||{}),I=Ta;import Ra from"@vkontakte/libvpx";var Ne=class{constructor(){this._worker=null}async _createWorker(r,e,t=[],i={},a=[]){return new Promise((o,s)=>{let l=t.join(","),p=new Blob([r,`exports.default(${l});`],{type:"application/javascript; charset=utf-8"}),u=window.URL.createObjectURL(p);this._worker=new Worker(u),this._worker.onmessage=m=>{switch(m.data.type){case"ready":o();break;case"error":s(m.data.error);break;case"frame":e(m.data);break;case"debug":c.debug(m.data.message);break;case"log_error":T.log(I.ERROR,m.data.message);break}},this._sendToWorker("init",i,a)})}_removeWorker(){this._worker?.terminate(),this._worker=null}_sendToWorker(r,e={},t=[]){this._worker?.postMessage(Object.assign({type:r},e),t)}static isBrowserSupported(){throw new Error("Not implemented")}};var ht=class extends Ne{async init(r,e){c.debug("LibVPxDecoder started"),await this._createWorker('"use strict";var exports=(()=>{var d=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var R=(o,t)=>{for(var e in t)d(o,e,{get:t[e],enumerable:!0})},h=(o,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of x(t))!E.call(o,s)&&s!==e&&d(o,s,{get:()=>t[s],enumerable:!(a=y(t,s))||a.enumerable});return o};var V=o=>h(d({},"__esModule",{value:!0}),o);var D={};R(D,{default:()=>M});var M=(o,t)=>{let e=null,a=null,s=!0;function c(){return o({locateFile:t}).then(r=>a=r)}function f(r,u,n,m){if(!a){self.postMessage({type:"log_error",message:"decoder-init-fail-libvpx"}),self.postMessage({type:"frame",error:"Fatal initialization error"});return}if(s!==n&&(s=n,e&&(e=null,self.postMessage({type:"debug",message:`LibVPxDecoder codec changed to ${n?"VP9":"VP8"} - reinitialize`}))),!e&&(self.postMessage({type:"debug",message:`LibVPxDecoder codec ${n?"VP9":"VP8"}`}),e=new a.VpxDecoder,e.debug(m),!e.init(n?a.VpxType.VP9:a.VpxType.VP8))){e=null,self.postMessage({type:"frame",error:"Decoder failed to create"});return}try{e.allocateBuffer(u.byteLength).set(new Uint8Array(u))}catch(i){self.postMessage({type:"debug",message:i}),e=null,self.postMessage({type:"frame",error:String(i)});return}if(!(e.decode()&&e.nextImage())){self.postMessage({type:"frame",error:"Decode failed"});return}let l=e.getImageBuffer();if(!l){self.postMessage({type:"frame",error:"No decoded data"});return}let b=e.getImageWidth(),g=e.getImageHeight();e.nextImage()&&(self.postMessage({type:"debug",message:"LibVPxDecoder dropped frame"}),self.postMessage({type:"log_error",message:"LibVPxDecoder-drop"}));let p=new Uint8ClampedArray(l.byteLength);p.set(l),self.postMessage({type:"frame",data:p.buffer,width:b,height:g},[p.buffer])}c().then(()=>{self.onmessage=r=>{switch(r.data.type){case"frame":f(r.data.timestamp,r.data.data,r.data.isVP9,r.data.debug);break}},self.postMessage({type:"ready"})}).catch(r=>{self.postMessage({type:"error",error:String(r)})})};return V(D);})();\n',t=>{if(t.error)c.warn("LibVPxDecoder",t.error),e(t.error);else{let i=new ImageData(new Uint8ClampedArray(t.data),t.width,t.height);r(i)}},[Ra,Ra.getUrl])}decodeFrame(r,e,t,i){this._sendToWorker("frame",{timestamp:r,data:e.buffer,isVP9:t,keyFrame:i,debug:c.enabled()},[e.buffer])}destroy(){this._removeWorker(),c.debug("LibVPxDecoder destroyed")}static isBrowserSupported(){return"WebAssembly"in window&&"Worker"in window}};var Ke=class extends Ne{async init(r,e){c.debug("WebCodecsDecoder started"),await this._createWorker('"use strict";var exports=(()=>{var i=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var C=(o,e)=>{for(var n in e)i(o,n,{get:e[n],enumerable:!0})},A=(o,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of R(e))!y.call(o,t)&&t!==n&&i(o,t,{get:()=>e[t],enumerable:!(a=D(e,t))||a.enumerable});return o};var V=o=>A(i({},"__esModule",{value:!0}),o);var F={};C(F,{default:()=>k});var k=o=>{let e=null,n=!0,a=null,t=!1,f=1e3/15*2;function p(){self.postMessage({type:"ready"})}function m(r,b,d,c=!1){if(!e||n!==d){if(!c){self.postMessage({type:"frame",error:"WebCodecsDecoder dropped frame - waiting for keyframe"});return}n=d,e?self.postMessage({type:"debug",message:`WebCodecsDecoder codec changed to ${d?"VP9":"VP8"}`}):(self.postMessage({type:"debug",message:`WebCodecsDecoder codec ${d?"VP9":"VP8"}`}),e=new VideoDecoder({output:s=>{l();let g=o?[s]:[];self.postMessage({type:"frame",data:s},g),s.close()},error:s=>{l(),e&&e.state!=="closed"&&e.close(),e=null,self.postMessage({type:"frame",error:"WebCodecsDecoder failed, reinitialize: "+String(s)})}})),e.configure(u(d))}if(t&&!c){self.postMessage({type:"frame",error:"WebCodecsDecoder dropped frame after reset - waiting for keyframe"});return}t=!1;let E=new EncodedVideoChunk({type:c?"key":"delta",timestamp:r,data:b});e.decode(E),a=setTimeout(()=>{t=!0,e?.reset(),e?.configure(u(d)),self.postMessage({type:"frame",error:"WebCodecsDecoder reset because of decode timeout"})},f)}self.onmessage=r=>{switch(r.data.type){case"init":p();break;case"frame":m(r.data.timestamp,r.data.data,r.data.isVP9,r.data.keyFrame);break}};function l(){a&&clearTimeout(a),a=null}function u(r){return{codec:r?"vp09.00.50.08":"vp8"}}};return V(F);})();\n',t=>{t.error?(c.warn("WebCodecsDecoder",t.error),e(t.error)):(r(t.data),t.data.close())},[y.baseChromeVersion()>=92||y.browserName()==="Safari"])}decodeFrame(r,e,t,i=!1){this._sendToWorker("frame",{timestamp:r,data:e.buffer,isVP9:t,keyFrame:i},[e.buffer])}destroy(){this._removeWorker(),c.debug("WebCodecsDecoder destroyed")}static isBrowserSupported(){return"VideoDecoder"in window&&"Worker"in window&&"VideoFrame"in window&&!y.isBrokenVP9Decoder()&&y.browserName()!=="Firefox"}};var _t=class{constructor(r=null,e=0){this._counter=0;this._interval=0;this._lastCalculationTime=Date.now();this._onCalculated=null;this._onCalculated=r,e&&(this._interval=window.setInterval(()=>this.calculate(),e))}increment(r=1){this._counter+=r}calculate(){let r=Date.now(),e=r-this._lastCalculationTime,t=Math.round(this._counter*1e3/e);return this._counter=0,this._lastCalculationTime=r,this._onCalculated?.(t),t}destroy(){window.clearInterval(this._interval),this._interval=0}};import{BitStream as ro}from"bit-buffer";var Ca=(e=>(e.USER="USER",e.GROUP="GROUP",e))(Ca||{}),ie=Ca;var rt={HEIGHT:720,WIDTH:1280,BITRATE:1e6},ti="L1T2",Pa=[{dimension:320,bitrate:18e4},{dimension:520,bitrate:4e5},{dimension:640,bitrate:5e5},{dimension:960,bitrate:9e5},{dimension:1280,bitrate:12e5},{dimension:1920,bitrate:25e5},{dimension:2560,bitrate:35e5},{dimension:3840,bitrate:5e6}],$n={h:1,m:2,l:4};function ba(n,r){return!n||!r?n===r:n.streams.length===r.streams.length?n.streams.every((e,t)=>S.isObjectsEquals(e,r.streams[t])):!1}function ya(n,r){for(let e of r)if(n<=e.dimension)return e.bitrate;return length>0?r[length-1].bitrate:Pa[0].bitrate}function ii(n=rt.WIDTH,r=rt.HEIGHT,e=Pa){let t=["h","m","l"],i=Math.max(n,r),a=1;i>=960?a=3:i>=480&&(a=2);let o={streams:[]},s=30,l=ya(i,e)??rt.BITRATE;for(let p=0;p<a;p++){let u=t[p];o.streams.push({rid:u,width:n,height:r,fps:s,bitrate:l}),n=Math.round(n/2),r=Math.round(r/2),l=ya(Math.max(n,r),e)??Math.round(l/2)}return o}function Di(n){return $n[n]??1}var Ma=typeof Object.fromEntries=="function"?Object.fromEntries:function(n){if(!n||!n[Symbol.iterator])throw new Error("Object.fromEntries() requires a single iterable argument");let r={};for(let[e,t]of n)r[e]=t;return r};async function Aa(n){return new Promise((r,e)=>{let t=new FileReader;t.onload=i=>{r(i.target?.result)},t.onerror=e,t.readAsArrayBuffer(n)})}var Lt=":",ki="d",qn=533,wi="a=fmtp:",zn="sps-pps-idr-in-keyframe=1",Cr;(Le=>{let n=/[\r\n]+/,r=`\r
|
|
8
|
+
`;function e(h,E){let R=new RegExp("a=rtpmap:(\\d+) ([a-zA-Z0-9-]+)\\/\\d+"),P,g=[];for(P=0;P<h.length;++P){let M=h[P].match(R);M&&M.length===3&&M[2]===E&&g.push(M[1])}return g}function t(h,E,R){let P=h.split(" "),g=P.slice(0,3),M;for(M=3;M<P.length;M++)R.includes(P[M])&&g.push(P[M]);for(M=3;M<P.length;M++)!R.includes(P[M])&&!E.includes(P[M])&&g.push(P[M]);return g.join(" ")}function i(h,E,R,P){let g,M="m="+E;for(g=0;g<h.length;++g)h[g].startsWith(M)&&(h[g]=t(h[g],R,P))}function a(h,E){let R=new RegExp(wi+"(\\d+)");for(let P=0;P<h.length;++P){let g=h[P].match(R);if(g&&g.length===2&&E.includes(g[1])){let M=h[P].trim()===wi+g[1]?" ":";";h[P]+=M+zn}}}function o(h,E){let R=e(h,E);if(!R.length)return;let P=R.slice(0),g=new RegExp(wi+"(\\d+) apt=(\\d+)"),M;for(M=0;M<h.length;++M){let U=h[M].match(g);U&&U.length===3&&P.includes(U[2])&&P.push(U[1])}let H=new RegExp("a=(rtpmap|rtcp-fb|fmtp):(\\d+) .*");for(M=h.length;M--;){let U=h[M].match(H);U&&U.length===3&&P.includes(U[2])&&h.splice(M,1)}i(h,"video",P,[])}function s(h,E,R,P){let g=new RegExp("a=rtpmap:(\\d+) ([a-zA-Z0-9-]+)\\/\\d+"),M,H=[];for(M=E;M<R;++M){let J=h[M].match(g);J&&J.length===3&&J[2]===P&&H.push(J[1])}if(!H.length)return H;let U=new RegExp(wi+"(\\d+) apt=(\\d+)");for(M=E;M<R;++M){let J=h[M].match(U);J&&J.length===3&&H.includes(J[2])&&H.push(J[1])}return H}function l(h,E,R,P){let g=s(h,E,R,P);if(!g.length)return R+1;let M=new RegExp("a=(rtpmap|rtcp-fb|fmtp):(\\d+) .*"),H=0,U=R;for(;U>=E;){let J=h[U].match(M);J&&J.length===3&&g.includes(J[2])&&(h.splice(U,1),H++),U--}return h[E]=t(h[E],g,[]),R-H+1}function p(h,E,R,P){let g=-1,M=-1,H=!1;for(let U=0;U<h.length;++U)if(g>=0&&h[U].startsWith("m=")&&(M=U-1,H&&(U=l(h,g,M,E)),g=-1,M=-1,H=!1),h[U].startsWith("m=video")&&(g=U),g>=0){let J=R==="remote"&&P==="encoder"||R==="local"&&P==="decoder"?"recvonly":"sendonly";(h[U].startsWith(`a=${J}`)||h[U].startsWith("a=sendrecv"))&&(H=!0)}M=h.length-1,g>=0&&H&&l(h,g,M,E)}function u(h,E,R){let P=e(h,"H264");E&&i(h,"video",[],P),R&&a(h,P)}function m(h){let E=e(h,"VP9");i(h,"video",[],E)}function C(h,E,R,P,g,M=!1,H=!1){if(!E&&!R&&!P&&!H&&!M&&!g)return h;function U(x){let _e=["a=rtcp-fb:111 nack","a=rtcp-fb:111 nack pli"],me="a=rtcp-fb:111",ge=x.findIndex(ce=>ce.startsWith(me));return~ge&&(x[ge]=x[ge]+r+_e.join(r)),x}function J(x){let _e=e(x,"red");_e.length>0&&i(x,"audio",[],_e)}let he=h.split(n);return R?p(he,"H264","local","decoder"):(E||g)&&u(he,E,g),P&&m(he),H&&J(he),M&&U(he),he.join(r)}Le.patchLocalSDP=C;function k(h,E,R,P,g,M,H){E&&(h=h.replace("m=application 9 UDP/DTLS/SCTP webrtc-datachannel","m=application 9 DTLS/SCTP 5000").replace("a=sctp-port:5000","a=sctpmap:5000 webrtc-datachannel 256"));let U=h.split(n);return P?o(U,"H264"):R&&u(U,R,!1),M&&H?o(U,"VP9"):M?p(U,"VP9","remote","encoder"):H?p(U,"VP9","remote","decoder"):g&&m(U),U.join(r)}Le.patchRemoteSDP=k;function D(h){return h?`${h.type||"WEB_SOCKET"}_${h.id}`:"_"}Le.getPeerIdString=D;function G(h,E){return h&&h.id===E.id&&(h.type||"WEB_SOCKET")===(E.type||"WEB_SOCKET")}Le.comparePeerId=G;async function Y(h){let E={local:null,remote:null};if(!h||!h.getStats)return E;try{let R=await h.getStats(null),P=null;if(R.forEach(g=>{g.type==="transport"&&g.selectedCandidatePairId?P=R.get(g.selectedCandidatePairId):g.type==="candidate-pair"&&g.state==="succeeded"&&!P&&(!g.hasOwnProperty("selected")||g.selected)&&(P=g)}),P?.localCandidateId){let g=R.get(P.localCandidateId);g&&(E.local={type:g.candidateType,ip:g.ip||g.ipAddress,port:g.port||g.portNumber})}if(P?.remoteCandidateId){let g=R.get(P.remoteCandidateId);g&&(E.remote={type:g.candidateType,ip:g.ip||g.ipAddress,port:g.port||g.portNumber})}return E}catch{return E}}Le.getPeerConnectionHostInfo=Y;let ue=/^[0-9]+$/,Pe=/^([gu])([0-9]+)$/;function Ge(h,E=ie.USER){let R=String(h);return Pe.test(R)?(c.warn(`Already composite id [${h}] type supplied [${E}]`),R):E===ie.GROUP?"g"+R:E===ie.USER?"u"+R:(c.warn(`Unknown type [${E}] for id [${h}]`),R.match(ue)?"u"+R:R)}Le.composeUserId=Ge;function se(h,E,R=0){let P=Ge(h,E);return Re(P,R)}Le.composeParticipantId=se;function Re(h,E){return E?h+Lt+ki+E:h}Le.compose=Re;function Ce(h){return se(h.id,h.idType||ie.USER,h.deviceIdx)}Le.composeId=Ce;function Qt(h){if(h.decorativeUserId)return se(h.decorativeUserId,h.idType||ie.USER,h.deviceIdx)}Le.composeDecorativeId=Qt;function aa(h){return h.participant?Ce(h.participant):se(h.participantId,h.participantType||ie.USER,h.deviceIdx)}Le.composeMessageId=aa;function na(h){return typeof h=="string"?X(Xt(h).compositeUserId).id:h}Le.extractOkId=na;function X(h){let E=String(h),R=E.match(Pe);return R?{id:Number(R[2]),type:R[1]==="g"?ie.GROUP:ie.USER}:(c.warn(`Unsupported compositeId [${h}]`),{id:Number(E),type:ie.USER})}Le.decomposeId=X;function Xt(h){let E=h.split(Lt+ki);return{compositeUserId:E[0],deviceIdx:E.length>1?parseInt(E[1],10):0}}Le.decomposeParticipantId=Xt;function oa(){let h=window.crypto?.randomUUID?.();if(h)return h;let E="0123456789abcdefghijklmnopqrstuvwxyz".split(""),R=new Array(36),P=0,g,M;for(M=0;M<36;M++)M===8||M===13||M===18||M===23?R[M]="-":M===14?R[M]="4":(P<=2&&(P=33554432+Math.random()*16777216|0),g=P&15,P=P>>4,R[M]=E[M===19?g&3|8:g]);return R.join("")}Le.uuid=oa;function sa(h,E){let R;function P(...g){let M=this;R&&window.clearTimeout(R),R=window.setTimeout(()=>{h.apply(M,g)},E)}return P}Le.debounce=sa;function ca(h){if(!window.BigInt)return null;let E="",R=h.split(`
|
|
9
|
+
`);for(let M of R)if(M.startsWith("a=fingerprint")){let H=M.split(" ");if(H.length===2){E=H[1];break}}if(!E)return BigInt(-1);let P=E.split(":"),g=BigInt(0);for(let M=Math.min(7,P.length-1);M>=0;M--){let H=BigInt(parseInt(P[M],16));g<<=BigInt(8),g|=H}return BigInt.asIntN(64,g)}Le.sdpFingerprint=ca;async function da(h){return new Promise(E=>window.setTimeout(E,h))}Le.delay=da;function la(h,E,R){let P=[];return h.getSenders().forEach(g=>Mi(E,g,g.track,R,P)),P}Le.applySettings=la;function Mi(h,E,R,P,g){if(!RTCRtpSender.prototype.getParameters||!RTCRtpSender.prototype.setParameters||!h||!R||R.kind!=="video")return;let M=R.getSettings();if(!M)return;let H=h.maxBitrateK?h.maxBitrateK*1024:null,U=M.width,J=M.height,he=U&&J&&h.maxDimension?Math.max(1,Math.max(U,J)/h.maxDimension):null,x=h.maxFramerate||null;if(U&&J&&h.maxDimension&&h.maxDimension>Math.max(U,J)){let ce=Math.round(U*J/256),be=(Math.round(ce*qn/1e4)+1)*1e4;H=H===null?be:Math.min(be,H)}let _e=h.degradationPreference||"balanced",me=P[R.id];if(me&&me.bitrate===H&&me.scaleResolutionDownBy===he&&me.maxFramerate===x&&me.degradationPreference===_e){g[R.id]=me;return}g[R.id]={bitrate:H,scaleResolutionDownBy:he,maxFramerate:x,degradationPreference:_e};let ge=E.getParameters();if(ge.encodings||(ge.encodings=[{}]),ge.encodings.length>1&&U&&J&&h.maxDimension){let ce=Math.round(h.maxDimension*1.35),be=Math.max(U,J),ut=ii(U,J,h?.bitrates?.generic),xt=ut.streams.length;c.log(`applyVideoTrackSettings: maxDim=${h.maxDimension} targetDim=${ce} track=${U}x${J} sim=${JSON.stringify(ut)}`),ge.encodings.forEach((We,Zt)=>{We.scaleResolutionDownBy=Di(We.rid);let ga=Math.round(be/We.scaleResolutionDownBy);Zt<xt-1?We.active=ga<ce:Zt>=xt?We.active=!1:We.active=!0,Zt<xt?We.maxBitrate=ut.streams[Zt].bitrate:We.maxBitrate=0,We.scalabilityMode=ti})}else ge.encodings.forEach(ce=>{h?.scalabilityMode&&(ce.scalabilityMode=h.scalabilityMode),H?ce.maxBitrate=H:delete ce.maxBitrate,he?ce.scaleResolutionDownBy=he:delete ce.scaleResolutionDownBy,x?ce.maxFramerate=x:delete ce.maxFramerate});if(ge.degradationPreference=_e,ge.encodings.length>0){E.setParameters?.(ge).catch(be=>{c.error("Failed to set sender parameters",ge,be)});let ce=E.getParameters();c.log(`applyVideoTrackSettings: actual encodings= ${JSON.stringify(ce.encodings)}`)}}Le.applyVideoTrackSettings=Mi;function Er(h,E){Array.isArray(E)||(E=[E]);for(let R of E)if(h.includes(R))return!0;return!1}Le.includesOneOf=Er;function pa(h){return Object.entries(h.participantState?.state||{}).reduce((E,[R,P])=>(h.participantState&&(E[R]={ts:h.participantState.stateUpdateTs[R],state:P}),E),{})}Le.mapParticipantState=pa;function ua(h){let E=h.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?E.filter(R=>!R.uid.observer):E}Le.mapSharedParticipants=ua;function ma(h,E){let R=Object.keys(h),P=Object.keys(E);if(R.length!==P.length)return!1;for(let g of R)if(!P.hasOwnProperty(g)||h[g].state!==E[g].state||h[g].ts!==E[g].ts)return!1;return!0}Le.isEqualParticipantState=ma;function K(h,E,R=!1){let P=Object.keys(h),g=Object.keys(E);if(P.length!==g.length)return!1;for(let M of P){if(!E.hasOwnProperty(M))return!1;let H=h[M],U=E[M];if(R&&pe(H)&&pe(U))return K(H,U,R);if(H!==U)return!1}return!0}Le.isObjectsEquals=K;function ha(h,E){if(h.length!==E.length)return!1;for(let R of h)if(E.indexOf(R)<0)return!1;return!0}Le.isArraysEquals=ha;function _a(h){return!Object.keys(h).length}Le.isEmptyObject=_a;function le(h,E){if(!h&&!E)return 0;if(!h||!E)return h?-1:1;return P(E.rank,h.rank)||P(h.ts,E.ts)||R(h,E);function R(g,M){let H={[ie.USER]:0,[ie.GROUP]:1},{compositeUserId:U,deviceIdx:J}=Xt(g.id),{compositeUserId:he,deviceIdx:x}=Xt(M.id),{id:_e,type:me}=X(U),{id:ge,type:ce}=X(he);return P(H[me],H[ce])||P(_e,ge)||P(J,x)}function P(g,M){return g<M?-1:g===M?0:1}}Le.participantMarkerCompare=le;function B(h,E){let R=Object.entries(h).filter(([,P])=>Array.isArray(E)?!E.includes(P):P!==E);return Ma(R)}Le.objectFilterOutValues=B;function Z(h,E,R){let P=R;for(let g in h)h.hasOwnProperty(g)&&(P=E(P,h[g],g));return P}Le.objectReduce=Z,Le.setImmediate=(()=>{let h=1,E={},R=null;return typeof MessageChannel<"u"&&(R=new MessageChannel,R.port1.onmessage=P=>{let g=P.data;E[g]&&(E[g](),delete E[g])}),function(P){if(R&&document.visibilityState==="hidden"){let M=h;return h=h>=Number.MAX_SAFE_INTEGER?1:h+1,E[M]=P,R.port2.postMessage(M),()=>{E[M]&&delete E[M]}}let g=setTimeout(P,0);return()=>clearTimeout(g)}})();function pe(h){return h!==null&&typeof h=="object"&&!Array.isArray(h)}Le.isObject=pe;function Ye(h,E,R,P){function g(U,J){let he=0,x=U.length,_e=!1;for(let me=0;me<U.length;me++)if(U[me].startsWith("m=video")&&(he=me),U[me].startsWith("a=mid:"+J)&&(_e=!0),_e&&U[me].startsWith("m=")){x=me;break}return{start:he,end:x}}function M(U,J,he,x,_e,me,ge){let ce="a=rid:"+x+" send";for(let be=J;be<he;be++)if(U[be]===ce){let xt=ce+" max-width="+me+";max-height="+ge+";max-br="+_e;U[be]=xt}}let H=E?.sender;if(H&&H.track&&E.mid){let U=h.split(n),{start:J,end:he}=g(U,E.mid),x=H.getParameters();if(x.encodings)return x.encodings.forEach(_e=>{let me=_e.rid,ge=_e.maxBitrate,ce=_e.scaleResolutionDownBy;if(R&&P&&ce){let be=""+Math.round(R/ce),ut=""+Math.round(P/ce);M(U,J,he,me,ge,be,ut)}}),U.join(r)}return h}Le.patchSimulcastAnswerSdp=Ye})(Cr||(Cr={}));var S=Cr;var Jn=1e3;function ne(n,r,e=0){return r in n&&n[r]?n[r]:e}function yr(...n){return r=>{for(let e of n)if(e(r))return!0;return!1}}function at(n,r){return e=>e[n]===r}function Yn(n){return(r,e)=>e[n]-r[n]}function ri(n,r){return r.reduce((e,t)=>(e[t[n]]=t,e),{})}function Qn(n){let r={},e=[];for(let t of n)r[t.id]||(r[t.id]=!0,e.push(t));return e}function Pr(n){return Object.keys(n).filter(r=>n[r]!==void 0).map(r=>[r,n[r]]).reduce((r,e)=>(r[e[0]]=S.isObject(e[1])?Pr(e[1]):e[1],r),{})}function Xn(n){let r=[];for(let e of n)e.forEach(t=>r.push(t));return r}async function Zn(n){let r=[];return RTCRtpReceiver.prototype.getStats?(r.push(...n.getReceivers().map(e=>e.getStats())),r.push(...n.getSenders().map(e=>e.getStats()))):r.push(n.getStats()),Promise.all(r).then(Xn).then(Qn)}function eo(n){let r=n.filter(at("type","candidate-pair")).sort(Yn("priority")).find(yr(at("nominated",!0),at("selected",!0)));if(!r)return{timestamp:0,availableOutgoingBitrate:0,totalRoundTripTime:0,currentRoundTripTime:0,bytesSent:0,bytesReceived:0};let e={timestamp:r.timestamp,availableOutgoingBitrate:r.availableOutgoingBitrate||0,totalRoundTripTime:r.totalRoundTripTime||0,currentRoundTripTime:r.currentRoundTripTime||0,bytesSent:r.bytesSent||0,bytesReceived:r.bytesReceived||0},t=n.find(at("id",r.remoteCandidateId));t&&Object.assign(e,{remote:{type:t.candidateType,address:t.ip||t.address,port:t.port,protocol:t.protocol}});let i=n.find(at("id",r.localCandidateId));return i&&Object.assign(e,{local:{type:i.candidateType,address:i.ip||i.address,port:i.port,protocol:i.protocol,relayProtocol:i.relayProtocol,networkType:i.networkType}}),Pr(e)}function Da(n,r,e=!1){let t=ri("id",n),i=e?n.filter(yr(at("type","remote-inbound-rtp"))):n.filter(yr(at("type","inbound-rtp"),at("type","outbound-rtp")));return y.browserName()==="Firefox"&&(i=Object.values(i.reduce((a,o)=>{if(!a[o.ssrc])a[o.ssrc]=o;else{let s=Object.assign({},a[o.ssrc],o),l=a[o.ssrc].isRemote?o:a[o.ssrc];s.id=l.id,s.type=l.type,delete s.isRemote,delete s.remoteId,a[s.ssrc]=s}return a},{}))),i.map(a=>{let o=Number(a.ssrc),s=a.mediaType||a.kind,l=a.remoteId||a.trackId,p=a.type,u=a.codecId;if(!p||!o||!s)return null;let m={ssrc:o,type:p,kind:s,bytesReceived:ne(a,"bytesReceived"),bytesSent:ne(a,"bytesSent"),headerBytesReceived:ne(a,"headerBytesReceived"),headerBytesSent:ne(a,"headerBytesSent"),jitter:ne(a,"jitter"),packetsLost:ne(a,"packetsLost"),packetsReceived:ne(a,"packetsReceived"),packetsSent:ne(a,"packetsSent"),fractionLost:ne(a,"fractionLost"),pliCount:ne(a,"pliCount"),firCount:ne(a,"firCount"),nackCount:ne(a,"nackCount"),userId:r[o],freezeCount:ne(a,"freezeCount",0),totalFreezesDuration:ne(a,"totalFreezesDuration",0)},C="mid"in a&&typeof a.mid=="string"?a.mid:void 0,k="rid"in a&&typeof a.rid=="string"?a.rid:void 0;if(C&&(m.mid=C),k&&(m.rid=k),s==="video"){let D=ne(a,"framesDecoded"),G=ne(a,"totalInterFrameDelay"),Y=ne(a,"totalSquaredInterFrameDelay"),ue=ne(a,"encoderImplementation"),Pe=ne(a,"decoderImplementation");ue&&(m.encoderImplementation=ue),Pe&&(m.decoderImplementation=Pe),m.interframeDelayVariance=(Y-G*G/D)/D}if(s==="video"&&m.type==="outbound-rtp"&&(m.totalEncodeTime=ne(a,"totalEncodeTime")??0),s==="audio"&&(m.totalSamplesReceived=ne(a,"totalSamplesReceived"),m.concealedSamples=ne(a,"concealedSamples"),m.insertedSamplesForDeceleration=ne(a,"insertedSamplesForDeceleration"),m.removedSamplesForAcceleration=ne(a,"removedSamplesForAcceleration"),m.silentConcealedSamples=ne(a,"silentConcealedSamples"),m.concealmentEvents=ne(a,"concealmentEvents"),m.totalAudioEnergy=ne(a,"totalAudioEnergy")),u&&t[u]){let D=t[u];m.clockRate=D.clockRate,m.mimeType=D.mimeType,s==="audio"&&D.sdpFmtpLine&&(m.sdpFmtpLine=D.sdpFmtpLine)}if(l&&t[l]){let D=t[l];m.frameHeight=D.frameHeight,m.frameWidth=D.frameWidth,m.framesDecoded=D.framesDecoded,m.framesReceived=D.framesReceived,m.framesDropped=D.framesDropped}return Pr(m)}).filter(a=>!!a)}function to(n,r,e=!1){if(!r||!r.rtps||!n.rtps)return n;let t,i;e&&(t=ri("ssrc",n?.remoteRtps||[]),i=ri("ssrc",r?.remoteRtps||[]));let a=ri("ssrc",n.rtps),o=ri("ssrc",r.rtps),s=(n.timestamp-r.timestamp)/1e3;return!a||!o||Object.keys(a).forEach(l=>{let p=a[l],u=o[l];if(!(!p||!u)){if(p.bytesReceived&&p.bytesReceived>u.bytesReceived&&(p.bandwidth=Math.round((p.bytesReceived-u.bytesReceived)/s),p.bandwidth+=Math.round((p.headerBytesReceived-u.headerBytesReceived)/s)),p.bytesSent&&p.bytesSent>u.bytesSent&&(p.bandwidth=Math.round((p.bytesSent-u.bytesSent)/s),p.bandwidth+=Math.round((p.headerBytesSent-u.headerBytesSent)/s)),p.packetsReceived)if(p.packetsReceived>u.packetsReceived||p.packetsLost>u.packetsLost){let m=p.packetsLost-u.packetsLost,C=p.packetsReceived-u.packetsReceived;p.packetLoss=parseFloat((100*m/(m+C)).toFixed(2))}else p.packetLoss=0;if(p.freezeCount>u.freezeCount&&(p.freezeCountDelta=p.freezeCount-u.freezeCount),p.totalFreezesDuration>u.totalFreezesDuration){let m=p.totalFreezesDuration-u.totalFreezesDuration;p.totalFreezesDurationDelta=m}if(p.framesDropped&&u.framesDropped&&p.framesDropped>u.framesDropped&&(p.framesDroppedDelta=parseFloat(((p.framesDropped-u.framesDropped)/s).toFixed(0))),e&&p.type==="outbound-rtp"&&p.kind==="video"){let m=t?.[l],C=i?.[l],k=Y=>Y??0,D=Math.max(0,k(m?.packetsLost)-k(C?.packetsLost)),G=Math.max(1,p.packetsSent-u.packetsSent);n.transport.averageNetStat={currentRoundTripTime:(n.transport.currentRoundTripTime+r.transport.currentRoundTripTime)/2*1e3,lostPercent:Math.round(D/G*100)}}}}),n}async function ai(n,r,e={},t=!1){let i=await Zn(n),a={timestamp:Date.now(),transport:eo(i),rtps:Da(i,e)};return t&&(a.remoteRtps=Da(i,e,!0)),r?to(a,r,t):(await S.delay(Jn),ai(n,a,e,t))}function Qe(n){performance.clearMarks(n),performance.mark(n)}function br(n){performance.clearMarks(n)}function Nt(n){let r=performance.getEntriesByName(n)[0];if(typeof r>"u")return null;let e=Math.round(performance.now()-r.startTime);return performance.clearMarks(n),e}function Ut(n){return`${I.SCREENSHARE_FIRST_FRAME}_${io(n)}`}function io(n){return typeof n=="string"?n:JSON.stringify(n)}var Be=class Be{constructor(){this._eventualLogs=new Set}static create(){Be._instance=new Be}static logCallStat(r){if(Be._instance?._eventualLogs.size){for(let e of Be._instance._eventualLogs)Object.assign(e,{call_topology:r.call_topology,local_address:r.local_address,local_connection_type:r.local_connection_type,network_type:r.network_type,remote_address:r.remote_address,remote_connection_type:r.remote_connection_type,transport:r.transport}),T.logClientStats(e);Be._instance._eventualLogs.clear()}T.logClientStats(r)}static logEventualStat(r){r.value===void 0&&(r.value=Nt(r.name)),r.value!==null&&Be._instance?._eventualLogs.add(r)}static destroy(){Be._instance?._destroy(),Be._instance=null}_destroy(){this._eventualLogs.clear()}};Be._instance=null;var Me=Be;var xi=class{constructor(r){this._firstFrameReceived=!1;this._participantId=r}measure(r,e){if(this._firstFrameReceived)return;this._firstFrameReceived=!0;let t=Ut(this._participantId),i=Nt(t);i!==null&&Me.logEventualStat({name:I.SCREENSHARE_FIRST_FRAME,value:i,width:r,height:e})}};var ao=65536,Bt=class n{constructor(r,e,t){this._chunks=[];this._participantId=r,this._onStream=e,this._onStat=t,this._statScreenShareFirstFrame=new xi(r)}appendChunk(r){let e=this._chunks.length;if(r.start)this._measureFreezeDuration(!1),this._measureFreezeDuration(!0),e&&(c.warn("[FrameBuilder] Cleanup buffer",Array.prototype.slice.call(this._chunks)),this._chunks=[]);else if(!e||(this._chunks[e-1].sequence+1)%ao!==r.sequence){c.warn("[FrameBuilder] Got incorrect chunk");return}if(this._chunks.push(r),r.end){let t=this._processFrameData(),{width:i,height:a}=n.getFrameSize(t);this._processFrame({timestamp:r.timestamp,frameData:t,isVP9:r.isVP9,keyframe:r.keyframe,width:i,height:a}),this._statScreenShareFirstFrame.measure(i,a)}}destroy(){br(I.SCREENSHARE_FREEZE_DURATION),br(Ut(this._participantId)),this._chunks=[]}_processFrameData(){let r=this._chunks;this._chunks=[];let e=r.reduce((a,o)=>a+o.data.byteLength,0),t=new Uint8Array(e),i=0;for(let a of r)t.set(new Uint8Array(a.data),i),i+=a.data.byteLength;return t}static getFrameSize(r){let e={width:0,height:0},t=new ro(r.buffer);t.bigEndian=!0,t.index+=2;let i=t.readBits(1),o=t.readBits(1)<<1|i;return o===3&&t.index++,t.readBits(1)===1||t.readBits(1)!==0||(t.index++,t.index++,t.index+=24,o>=2&&t.index++,t.readBits(3)!==7?(t.index++,(o===1||o===3)&&(t.index+=3)):(o===1||o===3)&&t.index++,e.width=t.readBits(16)+1,e.height=t.readBits(16)+1),e}static isBrowserSupported(){throw new Error("Method `isBrowserSupported` is not implemented")}_measureFreezeDuration(r){if(r){Qe(I.SCREENSHARE_FREEZE_DURATION);return}let e=Nt(I.SCREENSHARE_FREEZE_DURATION);e!==null&&e>1e3&&this._onStat({freeze_duration:e})}};var gt=class{constructor(r){this._onStream=r}async drawFrame(r){throw new Error("Method `drawFrame` is not supported by this implementation")}async drawImage(r){throw new Error("Method `drawImage` is not supported by this implementation")}static isBrowserSupported(){throw new Error("Method `isBrowserSupported` is not implemented")}};var Vt=class extends gt{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{}this._canvas=null}_requestCanvasFrame(){this._track&&this._track.requestFrame?this._track.requestFrame():this._stream&&this._stream.requestFrame&&this._stream.requestFrame()}async _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,this._useImageBitmap){let i;e instanceof ImageBitmap?i=e:i=await createImageBitmap(e,0,0,e.width,e.height),this._canvasContext.transferFromImageBitmap(i),i.close()}else{let i=this._canvasContext;i.clearRect(0,0,t.width,t.height),i.putImageData(e,0,0)}this._requestCanvasFrame()}async drawFrame(e){let t="createImageBitmap"in e?await e.createImageBitmap():await createImageBitmap(e);await this._drawImage(t)}async drawImage(e){await this._drawImage(e)}destroy(){this._removeStream(),c.debug("CanvasRenderer destroyed")}static isBrowserSupported(){return("CanvasCaptureMediaStream"in window||"CanvasCaptureMediaStreamTrack"in window)&&!(y.browserName()==="Safari"&&Number(y.browserVersion())===15)&&!(y.browserName()==="Firefox"&&Number(y.browserVersion())<60)}};var ft=class extends gt{constructor(r){super(r),c.debug("TrackGeneratorRenderer started"),this._generator=new MediaStreamTrackGenerator({kind:"video"}),this._writer=this._generator.writable.getWriter(),this._stream=new MediaStream([this._generator]),this._onStream(this._stream)}async drawFrame(r){await this._writer.write(r)}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&&Ke.isBrowserSupported()}};var Ft=class extends Bt{constructor(e,t,i){super(e,t,i);this._decoderReady=!1;this._decoderBusy=!1;this._decoderQueue=[];c.debug(`StreamBuilder started for participant [${e}]`),ft.isBrowserSupported()?this._renderer=new ft(t):this._renderer=new Vt(t),Ke.isBrowserSupported()?this._decoder=new Ke:this._decoder=new ht;let a=async s=>{this._decoderBusy=!1,"VideoFrame"in window&&s instanceof VideoFrame?await this._renderer.drawFrame(s):await this._renderer.drawImage(s),this._fpsMeter.increment(),this._decodeQueue()},o=s=>{this._decoderBusy=!1,this._decodeQueue()};this._decoder.init(a,o).then(()=>{this._decoderReady=!0,this._decodeQueue()}),this._fpsMeter=new _t(s=>c.log(`[StreamBuilder][${e}] fps: ${s}`),2e4)}_processFrame(e){e.keyframe&&(this._decoderQueue=[]),this._decoderQueue.push(e),this._decodeQueue()}_decodeQueue(){if(!this._decoderReady||this._decoderBusy)return;let e=this._decoderQueue.shift();e&&(this._decoderBusy=!0,this._decoder.decodeFrame(e.timestamp,e.frameData,e.isVP9,e.keyframe))}destroy(){super.destroy(),this._fpsMeter.destroy(),this._decoder.destroy(),this._renderer.destroy(),c.debug(`StreamBuilder destroyed for participant ${this._participantId}`)}static isBrowserSupported(){return Vt.isBrowserSupported()||ft.isBrowserSupported()}};function wa(n,r,e,t,i,a,o){let s=0;r&&(s|=1),e&&(s|=2),t&&(s|=4),o||(s|=8);let l=new ArrayBuffer(11),p=new DataView(l);if(p.setUint8(0,1),p.setUint16(1,i),p.setUint32(3,n),p.setUint8(7,a?1:0),p.setUint16(8,0),p.setUint8(10,s),!o)return l;let u=new Uint8Array(l.byteLength+o.byteLength);return u.set(new Uint8Array(l),0),u.set(new Uint8Array(o),l.byteLength),u.buffer}function ka(n){let r=new DataView(n),e=r.getUint8(0),t=r.getUint16(1),i=r.getUint32(3),a=r.getUint8(7)===1,o=r.getUint16(8),s=r.getUint8(10),l=!!(s&1),p=!!(s&2),u=!!(s&4),m=!!(s&8);if(e!==1)throw new Error(`Unexpected protocol version. Got ${e}, expected 1`);return{timestamp:i,start:l,end:p,keyframe:u,sequence:t,isVP9:a,ssrc:o,eos:m,data:n.slice(11)}}function xa(n){if(!n||!n.byteLength||n.byteLength!==4)return!1;let r=new DataView(n);return!(r.getUint8(0)!==1||r.getUint8(1)!==1||r.getUint16(2)!==0)}function Oa(n){if(!n||!n.byteLength||n.byteLength!==10)return null;let r=new DataView(n);if(r.getUint8(0)!==1||r.getUint8(1)!==2||r.getUint16(2)!==0)return null;let a=r.getUint16(4),o=r.getUint32(6);return{seq:a,ts2:o}}import*as w from"simple-ebml-builder";var no=2**15-1,Mr=1,oo=5,so=5;var Ar=class n{constructor(r){this._sourceBuffer=null;this._queue=[];this._clearBufferTill=0;this._mediaSource=new MediaSource,this._codec=r;let e=()=>{this._mediaSource.removeEventListener("sourceopen",e),this._initBuffer(),this._handleQueue()};this._mediaSource.addEventListener("sourceopen",e,!1)}_handleQueue(){if(!this._sourceBuffer||this._sourceBuffer.updating||!this._queue.length)return;if(this._clearBufferTill&&this._sourceBuffer.buffered.length){let t=this._sourceBuffer.buffered.start(0);t<this._clearBufferTill&&(this._sourceBuffer.remove(t,this._clearBufferTill),c.debug(`[WebmBuilder] SourceBuffer cleanup from ${t} to ${this._clearBufferTill}`)),this._clearBufferTill=0;return}let r=this._queue;this._queue=[];let e=n._buildQueue(r);this._sourceBuffer.appendBuffer(e)}static _buildQueue(r){if(r.length){if(r.length===1)return w.build(r[0])}else return new Uint8Array;let e=r.reduce((a,o)=>a+o.countSize(),0),t=new Uint8Array(e),i=0;for(let a of r){let o=w.build(a);t.set(o,i),i+=o.byteLength}return t}_initBuffer(){this._sourceBuffer=this._mediaSource.addSourceBuffer(`video/webm; codecs="${this._codec}"`),this._sourceBuffer.mode="sequence",this._sourceBuffer.addEventListener("updateend",()=>this._handleQueue())}changeType(r){return this._codec=r,this._sourceBuffer?.changeType(r)}append(r,e=!1){this._queue.push(r),e&&this._handleQueue()}cleanup(){this._mediaSource?.readyState==="open"&&this._sourceBuffer?.abort();let r=this._sourceBuffer?.buffered,e=r?.length;if(!e)return;let t=r.start(0),i=Math.max(0,r.end(e-1)-oo);i-t>so&&(this._clearBufferTill=i)}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(){return this._sourceBuffer?.buffered}},St=class n extends Bt{constructor(e,t,i){super(e,t,i);this._mediaBuffer=null;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 w.element(w.ID.EBML,[w.element(w.ID.EBMLVersion,w.number(1)),w.element(w.ID.EBMLReadVersion,w.number(1)),w.element(w.ID.EBMLMaxIDLength,w.number(4)),w.element(w.ID.EBMLMaxSizeLength,w.number(8)),w.element(w.ID.DocType,w.string("webm")),w.element(w.ID.DocTypeVersion,w.number(2)),w.element(w.ID.DocTypeReadVersion,w.number(2))])}static _genSegmentHeader(e,t,i){let a=w.element(w.ID.Info,[w.element(w.ID.TimecodeScale,w.number(1e6)),w.element(w.ID.MuxingApp,w.string("vk-webm-builder")),w.element(w.ID.WritingApp,w.string("vk-webm-builder"))]),o=[w.element(w.ID.PixelWidth,w.number(e)),w.element(w.ID.PixelHeight,w.number(t))],s=w.element(w.ID.Tracks,w.element(w.ID.TrackEntry,[w.element(w.ID.TrackNumber,w.number(Mr)),w.element(w.ID.TrackUID,w.number(Mr)),w.element(w.ID.TrackType,w.number(1)),w.element(w.ID.FlagLacing,w.number(0)),w.element(w.ID.DefaultDuration,w.number(1e9)),w.element(w.ID.CodecID,w.string(`V_${i.toUpperCase()}`)),w.element(w.ID.Video,o)]));return w.unknownSizeElement(w.ID.Segment,[a,s])}static _genClusterHeader(e){return w.unknownSizeElement(w.ID.Cluster,[w.element(w.ID.Timecode,w.number(Math.round(e)))])}_createVideo(e){this._mediaBuffer=new Ar(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=n._genWebmHeader();this._mediaBuffer?.append(s);let l=n._genSegmentHeader(e.width,e.height,t);this._mediaBuffer?.append(l)}let a=Math.round(i-this._clusterStartTime);if(a>no&&(this._clusterStartTime=i,a=0),a===0){c.debug(`[WebmBuilder] Cluster header for participant [${this._participantId}]`);let s=n._genClusterHeader(this._clusterStartTime);this._mediaBuffer?.append(s)}let o=w.element(w.ID.SimpleBlock,[w.vintEncodedNumber(Mr),w.bytes(n._intToU16BE(a)),w.number((e.keyframe?1:0)<<7),w.bytes(e.frameData)]);this._mediaBuffer?.append(o,!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(){return"captureStream"in window.HTMLVideoElement?.prototype&&window.MediaSource?.isTypeSupported('video/webm; codecs="vp8"')&&window.MediaSource?.isTypeSupported('video/webm; codecs="vp9"')}};var vt=class{constructor(r,e,t,i,a){this._participantIdRegistry=null;this._streamBuilders={};this._onStream=()=>{};this._onEos=()=>{};c.debug("ScreenCaptureReceiver started"),this._datachannel=r,this._participantIdRegistry=e,this._onStream=t,this._onEos=i,this._onStat=a,this._datachannel.onmessage=o=>this._onDataChannelMessage(o.data)}_onDataChannelMessage(r){let e=ka(r),t=this._participantIdRegistry?.getStreamDescription(e.ssrc)?.participantId;if(!t){c.warn(`Participant id for ssrc ${e.ssrc} not found in registry`);return}if(e.eos){this.close(t),this._onEos(t);return}let i=this._streamBuilders[t];if(!i){let a=o=>this._onStream(t,o);d.screenShareWebmBuilder&&St.isBrowserSupported()?i=new St(t,a,this._onStat):i=new Ft(t,a,this._onStat),this._streamBuilders[t]=i}i.appendChunk(e)}close(r){let e=this._streamBuilders[r];e&&(e.destroy(),delete this._streamBuilders[r])}destroy(){this._datachannel.onbufferedamountlow=null,this._datachannel.onmessage=null,this._onStream=()=>{},Object.values(this._streamBuilders).forEach(r=>r.destroy()),this._streamBuilders={},this._participantIdRegistry=null,c.debug("ScreenCaptureReceiver destroyed")}static isBrowserSupported(){return(Ke.isBrowserSupported()||ht.isBrowserSupported())&&(Ft.isBrowserSupported()||St.isBrowserSupported())}};var Dr=class{constructor(r,e,t){this._next=t,t&&(t.prev=this),this._prev=e,e&&(e.next=this),this._data=r}get prev(){return this._prev}set prev(r){this._prev=r}get next(){return this._next}set next(r){this._next=r}get data(){return this._data}},ni=class{constructor(){this._head=null;this._tail=null;this._length=0}get length(){return this._length}push(...r){for(let e of r)this._tail=new Dr(e,this._tail,null),this._head||(this._head=this._tail),this._length++}merge(r){this._tail&&(this._tail.next=r._head),this._head||(this._head=r._head),this._tail=r._tail,this._length+=r._length,r.clear()}shift(){if(!this._length||!this._head)return null;let r=this._head;return this._head=r.next,this._head&&(r.next=null,this._head.prev=null),this._length--,this.length===1?this._tail=this._head:this.length||(this._head=this._tail=null),r.data}bisect(){if(this.length){let r=this.length>1?Math.floor(this.length/2):1;for(let e=0;e<r;e++)this.shift()}}head(){return this._head?.data||null}tail(){return this._tail?.data||null}clear(){this._head=null,this._tail=null,this._length=0}toString(){let r=[],e=this._head;for(;e!==null;)r.push(e.data),e=e.next;return r.length?JSON.stringify(r,(t,i)=>i instanceof Error?String(i):i):""}};import La from"@vkontakte/libvpx";var co=1e3,jt=class extends Ne{constructor(e,t,i,a){super();this._video=null;this._imageCapture=null;this._canvas=null;this._canvasCtx=null;this._frameReadTimeout=0;this._lastFrame=null;this._sourceTrack=e,this._onFrame=t,this._useCongestionControl=i,this._maxBitrate=a,this._useImageCapture="ImageCapture"in window&&ImageCapture.prototype.grabFrame!==void 0&&"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{}this._canvasCtx=null,this._canvas=null,this._video=null}async _createStream(e){if(!this._canvas)throw new Error("Canvas not found");if(!this._video&&!this._useImageCapture)throw new Error("Video element not found");return new Promise((t,i)=>{if(this._useImageCapture)this._imageCapture=new ImageCapture(e),t();else{let a=this._video;a.srcObject=new MediaStream([e]),a.onloadeddata=l=>t(),a.onerror=()=>i(new Error("Video element error"));let o=a.play(),s=()=>i(new Error("Autoplay is disabled"));o?o.catch(s):s()}})}_removeStream(){window.clearTimeout(this._frameReadTimeout),this._lastFrame?.close(),this._video&&(this._video.pause(),this._video.srcObject=null),this._imageCapture&&(this._imageCapture=null)}_drawFrameVideo(){if(!this._canvas||!this._canvasCtx||!this._video)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._canvasCtx.getImageData(0,0,e,t)}async _getFrameBitmap(){if(!this._imageCapture)throw new Error("Destroyed");return this._imageCapture.grabFrame()}_drawFrameData(e){if(!this._canvas||!this._canvasCtx)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._canvasCtx?.getImageData(0,0,t,i)}async init(){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"}`),await this._createStream(this._sourceTrack),await this._createWorker(`"use strict";var exports=(()=>{var u=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var V=(a,r)=>{for(var s in r)u(a,s,{get:r[s],enumerable:!0})},h=(a,r,s,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of y(r))!x.call(a,e)&&e!==s&&u(a,e,{get:()=>r[e],enumerable:!(i=R(r,e))||i.enumerable});return a};var A=a=>h(u({},"__esModule",{value:!0}),a);var M={};V(M,{default:()=>F});var F=(a,r,s,i)=>{let e;function m(t,o){return a({locateFile:r}).then(n=>{if(e=new n.VpxEncoder,e.debug(o),!e.init(t?n.VpxType.VP9:n.VpxType.VP8))throw self.postMessage({type:"log_error",message:"encoder-init-fail-libvpx"}),new Error("LibVPxEncoder failed to create");if(s){let d=Math.round(i/1e3);e.setTargetBitrate(d)}else e.setMaxQuantizer(10),e.setTargetBitrate(1024)})}function E(t,o,n,p){let d=e.allocateImage(t,o);if(!d){self.postMessage({type:"frame",error:"No buffer data"});return}d.set(new Uint8Array(n));let l=Math.round(performance.now()),f=150;if(!e.encode(l,f,p)){self.postMessage({type:"frame",error:"Encode failed"});return}let b=e.readFrame();if(!b){self.postMessage({type:"frame",error:"No encoded data"});return}e.readFrame()&&(self.postMessage({type:"debug",message:"LibVPxEncoder dropped frame"}),self.postMessage({type:"log_error",message:"LibVPxEncoder-drop"}));let c=new Uint8Array(b.byteLength);c.set(b),self.postMessage({type:"frame",frameType:p?"key":"delta",timestamp:l,duration:f,width:t,height:o,data:c.buffer},[c.buffer])}function g(t,o){let n=Math.round(t/1e3);e.setTargetBitrate(n)}self.onmessage=t=>{switch(t.data.type){case"init":m(t.data.isVP9,t.data.debug).then(()=>self.postMessage({type:"ready"})).catch(o=>self.postMessage({type:"error",error:String(o)}));break;case"frame":E(t.data.width,t.data.height,t.data.imageData,t.data.keyFrame);break;case"set_bitrate":g(t.data.bitrate,t.data.useCbr);break}}};return A(M);})();
|
|
10
|
+
`,i=>{i.error?this._onFrame(null,i.error):this._onFrame({type:i.frameType,timestamp:i.timestamp,duration:i.duration,data:i.data,byteLength:i.data?.byteLength,width:i.width,height:i.height})},[La,La.getUrl,this._useCongestionControl,this._maxBitrate],{isVP9:this.isVP9(),debug:c.enabled()})}_encode(e,t){let i=e.data.buffer;this._sendToWorker("frame",{width:e.width,height:e.height,imageData:i,keyFrame:t},[i])}_requestFrameVideo(e){let t=this._drawFrameVideo();this._encode(t,e)}_requestFrameBitmap(e){window.clearTimeout(this._frameReadTimeout),this._frameReadTimeout=window.setTimeout(()=>{if(this._lastFrame){let t=this._drawFrameData(this._lastFrame);this._encode(t,e)}else this._onFrame(null)},co),this._getFrameBitmap().then(t=>{window.clearTimeout(this._frameReadTimeout),this._lastFrame?.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)}setBitrate(e,t,i){this._sendToWorker("set_bitrate",{bitrate:e,useCbr:t})}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 It=class extends Ne{constructor(r,e,t,i,a,o){super(),this._sourceTrack=r,this._onFrame=e,this._useCongestionControl=t,this._maxBitrate=i,this._useCbr=a,this._frameRate=o,this._trackProcessor=new MediaStreamTrackProcessor(r)}async init(){let r=this._sourceTrack.getSettings().width,e=this._sourceTrack.getSettings().height,t=this._trackProcessor.readable;c.debug(`WebCodecsEncoder started ${r}x${e}, codec ${this.isVP9()?"VP9":"VP8"}`),await this._createWorker(`"use strict";var exports=(()=>{var p=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var _=(a,t)=>{for(var n in t)p(a,n,{get:t[n],enumerable:!0})},I=(a,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of B(t))!x.call(a,o)&&o!==n&&p(a,o,{get:()=>t[o],enumerable:!(i=T(t,o))||i.enumerable});return a};var M=a=>I(p({},"__esModule",{value:!0}),a);var O={};_(O,{default:()=>S});var S=()=>{let t,n,i,o,g,m,d=null,f=0,b=!1,u=0,F,V,c=!1,l=!1;function h(e){t=e.readable,n=t.getReader(),i=e.width,o=e.height,g=e.isVP9,m=e.framerate,F=e.useCongestionControl,V=e.maxBitrate,F&&(u=V,c=e.useCbr),E(),self.postMessage({type:"ready"})}function A(e){e&&!l&&(l=!0),self.clearTimeout(f),f=self.setTimeout(()=>{d&&y(d,l)},1e3),!b&&(b=!0,n.read().finally(()=>{b=!1,self.clearTimeout(f)}).then(({done:r,value:s})=>{if(d?.close(),d=null,!(r||!s)){if(!R){n.releaseLock(),t.cancel();return}d=s,y(s,l)}}))}function y(e,r){(e.codedWidth!==i||e.codedHeight!==o)&&(i=e.codedWidth,o=e.codedHeight,E(),l=!0),R.encode(e,{keyFrame:r}),r&&(l=!1)}function E(){let e={framerate:m,codec:g?"vp09.00.50.08":"vp8",width:i,height:o,latencyMode:"realtime",bitrateMode:c?"constant":"variable"};u>0&&(e.bitrate=u),R.configure(e)}function C(e,r,s){u=e,c=r,m=s,E()}let R=new VideoEncoder({output:e=>{let r;e.data?r=e.data:(r=new ArrayBuffer(e.byteLength),e.copyTo(r)),self.postMessage({type:"frame",frameType:e.type,timestamp:e.timestamp,duration:e.duration,width:i,height:o,data:r},[r])},error:e=>{self.postMessage({type:"frame",error:String(e)})}});self.onmessage=e=>{switch(e.data.type){case"init":h(e.data);break;case"frame":A(e.data.keyFrame);break;case"set_bitrate":C(e.data.bitrate,e.data.useCbr,e.data.fps);break}}};return M(O);})();
|
|
11
|
+
`,i=>{i.error?this._onFrame(null,i.error):this._onFrame({type:i.frameType,timestamp:i.timestamp,duration:i.duration,data:i.data,byteLength:i.data?.byteLength,width:i.width,height:i.height})},[],{readable:t,width:r,height:e,isVP9:this.isVP9(),framerate:this._frameRate,useCongestionControl:this._useCongestionControl,maxBitrate:this._maxBitrate,useCbr:this._useCbr},[t])}requestFrame(r=!1){this._sendToWorker("frame",{keyFrame:r})}setBitrate(r,e,t){this._sendToWorker("set_bitrate",{bitrate:r,useCbr:e,fps:t})}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 lo=2100,po=600,uo=1.2,Na=.8,mo=2e3,ho=8e3,wr=8e3,_o=16e3,go=4,fo=2e3,Oi=(t=>(t[t.NONE=0]="NONE",t[t.UP=1]="UP",t[t.DOWN=2]="DOWN",t))(Oi||{}),oi=class{constructor(r,e,t,i,a,o,s){this._upPenalty=0;this._delayAvgShort=-1;this._delayAvgLong=-1;this._minDelay=Number.MAX_VALUE;this._maxDelay=0;this._largeDelayDuration=0;this._frames=0;this._fps=0;this._onCongestion=r,this._ccEnabled=i,this._minBitrate=e,this._maxBitrate=t,this._fastSharing=a,this._targetFps=s,o>0?this._highDelayThreshold=o:this._highDelayThreshold=lo,a&&(this._highDelayThreshold=po),this._trendDelayThreshold=Math.round(this._highDelayThreshold/3),this._targetBitrate=this._maxBitrate,this._probing=!1;let l=Date.now();this._lastDown=0,this._lastUp=l,this._lastProbing=l,this._lastCheckDelay=0,this._lastFpsCalcMs=0}checkDelay(r,e,t){let i=Date.now();if(this._calcFps(i),this._calcDelay(e,i),this._delayAvgShort<=0||this._delayAvgLong<=0||!this._ccEnabled)return;let a=0,o=this._delayAvgShort-this._delayAvgLong,s=Math.round(Math.abs(o)*100/this._delayAvgLong),l=o>40&&s>30&&this._delayAvgShort>this._trendDelayThreshold,p=this._delayAvgShort>this._highDelayThreshold;l||p?a=2:Math.abs(o)<40&&s<10&&!p&&(a=1);let u=Math.round(this._targetBitrate/1e3),m=t;r%20===0&&c.debug(`#${r}: cc: delay=${e} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${o} percent=${s} -> ${Oi[a]} tr=${u} br=${t}`);let C=i-this._lastDown;if(a===2&&C>mo){this._probing&&(this._upPenalty=Math.min(++this._upPenalty,go),this._probing=!1);let ue=Na*m*1e3;if(ue>=this._targetBitrate&&(ue=this._targetBitrate*Na),ue=Math.max(ue,this._minBitrate),ue<this._targetBitrate){let Pe=Math.round(ue/1e3),Ge=Math.round(this._upPenalty*wr/1e3);c.log(`#${r}: cc: delay=${e} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${o} percent=${s} -> ${Oi[a]}`),c.log(`#${r}: cc: DOWN delay=${e} bitrate=${m} target=${u} -> newBitrate=${Pe} penalty=${Ge}s`),this._setBitrate(ue,!0),this._targetBitrate=ue}this._lastDown=i}let k=i-this._lastUp,D=ho+this._upPenalty*wr;if(a===1&&k>D&&C>D){let ue=Math.min(this._targetBitrate*uo,this._maxBitrate);if(ue>this._targetBitrate){let Pe=Math.round(ue/1e3),Ge=Math.round(this._targetBitrate/1e3),se=Math.round(this._upPenalty*wr/1e3);c.log(`#${r}: cc: delay=${e} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${o} percent=${s} -> ${Oi[a]}`),c.log(`#${r}: cc: UP bitrate=${m} target=${Ge} -> newBitrate=${Pe} penalty=${se}s`),this._setBitrate(ue,!1),this._targetBitrate=ue,this._probing=!0,this._lastProbing=i,this._lastUp=i}}let G=i-this._lastProbing;this._probing&&G>_o&&(this._probing=!1);let Y=i-this._lastDown;this._upPenalty>0&&Y>3*D&&(c.log(`#${r}: cc: UP reset penalty: oldPenalty=${this._upPenalty}`),this._upPenalty=0)}_setBitrate(r,e){this._fastSharing&&(e=!0);let t=this._targetFps;this._fps>0&&(t=this._fps),this._onCongestion(r,e,t)}_calcDelay(r,e){if(!(r<=0)){if(this._delayAvgShort===-1&&(this._delayAvgShort=r,this._delayAvgLong=r),this._delayAvgShort=Math.round((this._delayAvgShort*3+r)/4),this._delayAvgLong=Math.round((this._delayAvgLong*23+r)/24),r>0&&r<this._minDelay?this._minDelay=r:r>this._maxDelay&&(this._maxDelay=r),this._lastCheckDelay===0&&(this._lastCheckDelay=e),r>fo){let t=e-this._lastCheckDelay;this._largeDelayDuration+=t}this._lastCheckDelay=e}}reconfigure(r,e){this._minBitrate=r,this._maxBitrate=e}getStat(){if(this._minDelay===Number.MAX_VALUE||this._maxDelay===0||this._delayAvgLong<=0)return null;let r={minDelay:this._minDelay,maxDelay:this._maxDelay,avgDelay:this._delayAvgLong,largeDelayDuration:this._largeDelayDuration};return this._minDelay=Number.MAX_VALUE,this._maxDelay=0,this._largeDelayDuration=0,r}_calcFps(r){this._frames++;let e=r-this._lastFpsCalcMs;if(e>5e3){this._lastFpsCalcMs=r;let t=this._fps,i=this._frames*1e3/e;this._fps===0?this._fps=Math.round(i):this._fps=Math.round((this._fps*3+i)/4),this._frames=0,this._fps!==t&&c.log(`cc: fps=${this._fps}`)}}};var si=class{constructor(r){this._size=0;this._head=0;this._tail=0;this._maxSize=r,this._buffer=new Array(r)}add(r,e,t,i,a){this._tail===this._head&&this._size>0&&(this._head=++this._head%this._maxSize);let o=this._tail;return this._buffer[this._tail]={seq:r,ts:e,size:t,sent:Date.now(),start:i,end:a,ts2:-1,recv:-1},this._tail=++this._tail%this._maxSize,this._size++,o}update(r,e){let t=this.get(r);return t===null?null:(t.ts2=e,t.recv=Date.now(),t)}get(r){let e=this._head;for(let t=0;t<this._maxSize;t++){let i=this._buffer[e];if(r===i?.seq)return i;if(e=++e%this._maxSize,e===this._tail)break}return null}getServerBitrateK(r){let e=0,t=0,i=-1,a=-1,o=this._tail;for(let s=0;s<this._maxSize;s++){o>0?--o:o=this._maxSize-1;let l=this._buffer[o];if(!l||(a===-1&&(a=l.ts2,t=0),a>=0&&(t+=l.size),i=l.ts2,a-i>=r)||o===this._head)break}if(i>=0&&a>=0){let s=a-i;e=Math.round(s>0?t*8/s:0)}return e}getCurrentDelay(){let r=this._tail;for(let e=0;e<this._maxSize;e++){r>0?--r:r=this._maxSize-1;let t=this._buffer[r];if(!t)break;if(t.recv>=0&&t.sent>=0)return t.recv-t.sent;if(r===this._head)break}return 0}getMaxBandwidth(){let r=0,e=0,t=-1,i=-1,a=this._tail;for(let o=0;o<this._maxSize;o++){a>0?--a:a=this._maxSize-1;let s=this._buffer[a];if(s){if(i===-1&&s.end&&!s.start&&(i=s.ts2,e=0),t===-1&&i>=0&&s.start&&!s.end&&(t=s.ts2),t>=0&&i>=0){let l=i-t;r=l>0?e*8/l:0;break}if(i>=0&&(e+=s.size),a===this._head)break}}return Math.round(r)}clear(){this._buffer.fill(void 0),this._size=0,this._head=0,this._tail=0}};var kr=65536,vo=50,Io=400,Eo=1e6,To=3e5,Ro=3e4,Co=2e3,yo=5,Li=0,Et=class{constructor(r,e,t,i){this._destroyed=!1;this._needKeyframe=!0;this._frameNum=0;this._feedback=new si(1024);this._lastSentFrameSeq=0;this._lastDeliveredFrameSeq=0;this._lastFrameDelay=0;this._lastFramerateReduced=Date.now();this._lastSharingStat=Date.now();this._queue=new ni;c.debug("ScreenCaptureSender started"),this.DATA_SIZE=d.consumerScreenDataChannelPacketSize-11,this._datachannel=e,this._signaling=t,this._fastSharing=i,this._congestionControlEnabled=d.screenShareCongestionControl||this._fastSharing,this._width=r.getSettings().width,this._height=r.getSettings().height,this._maxFrameDelay=this._fastSharing?d.screenShareCongestionControlThreshold:d.screenShareCongestionControlThreshold*2;let a=d.getScreenFrameRate(this._fastSharing),{minBitrate:o,maxBitrate:s}=this._calcMinMaxBitrate(this._width,this._height),l=this._onCongestionCallback.bind(this);c.log(`ScreenCaptureSender: CongestionControl: enabled=${this._congestionControlEnabled} minBitrate=${Math.round(o/1e3)}k maxBitrate=${Math.round(s/1e3)}k delayThreshold=${d.screenShareCongestionControlThreshold}`),this._congestionControl=new oi(l,o,s,this._congestionControlEnabled,this._fastSharing,d.screenShareCongestionControlThreshold,a);let p=(u,m)=>{if(this._destroyed)return;if(!u){c.warn("requestFrame failed, keyFrame: "+this._needKeyframe,m),this._needKeyframe=!0,this._handleQueue();return}(u.width!==this._width||u.height!==this._height)&&(this._width=u.width,this._height=u.height,this._onResize(this._width,this._height));let C=this._sliceFrame(u);this._queue.merge(C),this._handleQueue(),this._sendSharingStat()};if(It.isBrowserSupported()){let u=this._fastSharing;this._encoder=new It(r,p,this._congestionControlEnabled,s,u,a)}else this._encoder=new jt(r,p,this._congestionControlEnabled,s);this._datachannel.onmessage=u=>{xa(u.data)&&(c.debug(`[${this._datachannel.label}] Requested keyframe`),this._needKeyframe=!0);let m=Oa(u.data);m!==null&&this._checkCcFeedback(m)},this._encoder.init().then(()=>this._handleQueue()).catch(u=>c.warn("ScreenCaptureSender init failed",u)),this._fpsMeter=new _t(u=>c.log(`[ScreenCaptureSender] fps: ${u}`),5e3)}_handleQueue(){if(this._destroyed)return;let r=this._queue.shift();if(!r){if((this._lastSentFrameSeq-this._lastDeliveredFrameSeq+kr)%kr>yo&&this._lastFrameDelay>this._maxFrameDelay){let i=Date.now();i-this._lastFramerateReduced>Co&&(this._lastFramerateReduced=i,c.debug(`[ScreenCaptureSender] reduce framerate: delay=${this._lastFrameDelay} maxDelay=${this._maxFrameDelay}`))}else this._requestFrame();return}if(!this._sendFrameChunk(r)){this._needKeyframe=this._needKeyframe||!this._cleanupQueue(),S.setImmediate(()=>this._handleQueue());return}if(r.isLast){this._frameNum++,this._fpsMeter.increment(),r.isKey&&c.debug(`#${this._frameNum}: sharing: send keyframe size=${Math.round(r.frameSize/1e3)}k`);let t=this._feedback.getCurrentDelay(),i=this._feedback.getServerBitrateK(2e3);t>0&&this._congestionControl.checkDelay(this._frameNum,t,i)}else S.setImmediate(()=>this._handleQueue())}_cleanupQueue(){let r=this._queue.head();for(;r;){if(r.isFirst&&r.isKey)return!0;this._queue.shift(),r=this._queue.head()}return!1}_requestFrame(){this._destroyed||(this._encoder.requestFrame(this._needKeyframe),this._needKeyframe=!1)}_sliceFrame(r){let e=r.type==="key",t=r.data.byteLength,i=new ni;for(let a=0;a<t;a+=this.DATA_SIZE){let o=r.data.slice(a,a+this.DATA_SIZE),s=a===0,l=t<=a+o.byteLength,p=this._wrapHeader(r.timestamp,s,l,e,o);i.push({data:p.data,sequence:p.sequence,frameSize:t,isFirst:s,isLast:l,isKey:e,timestamp:r.timestamp})}return i}_wrapHeader(r,e,t,i,a){let o=wa(r,e,t,i,Li,this._encoder.isVP9(),a),s={sequence:Li,data:o};return Li=(Li+1)%kr,s}_stopPacket(){return this._wrapHeader(Date.now(),!1,!1,!1,null).data}_sendFrameChunk(r){if(!this._datachannel||this._datachannel.readyState!=="open")return!1;try{return this._datachannel.send(r.data),this._feedback.add(r.sequence,r.timestamp,r.data.byteLength,r.isFirst,r.isLast),r.isLast&&(this._lastSentFrameSeq=r.sequence),!0}catch(e){return c.warn("Error sending chunk to DataChannel",e),!1}}destroy(){this._queue.clear(),this._fpsMeter.destroy(),this._datachannel.onmessage=null,this._feedback.clear(),this._datachannel.readyState==="open"&&this._datachannel.send(this._stopPacket()),this._destroyed=!0,this._encoder.destroy(),c.debug("ScreenCaptureSender destroyed")}static isBrowserSupported(){return It.isBrowserSupported()||jt.isBrowserSupported()}_onCongestionCallback(r,e,t){this._encoder.setBitrate(r,e,t)}_onResize(r,e){let{minBitrate:t,maxBitrate:i}=this._calcMinMaxBitrate(r,e),a=Math.round(t/1e3),o=Math.round(i/1e3);c.log(`cc: resize to ${r}x${e}, minBitrate=${a} maxBitrate=${o}`),this._congestionControl.reconfigure(t,i)}_calcMinMaxBitrate(r,e){(r===void 0||r<640)&&(r=640),(e===void 0||e<360)&&(e=360);let t=r*e/256,i=Math.max(To,Math.min(Eo,Math.round(t*vo))),a=Math.round(t*Io);return{minBitrate:i,maxBitrate:a}}_checkCcFeedback(r){let e=this._feedback.update(r.seq,r.ts2);if(e===null)c.debug(`cc: update failed, seq=${r.seq}`);else if(e.end){this._lastDeliveredFrameSeq=e.seq;let t=e.recv-e.sent;t>0&&(this._lastFrameDelay=t),this._handleQueue()}}_sendSharingStat(){let r=Date.now();if(r-this._lastSharingStat>Ro){let t=this._congestionControl.getStat();t!==null&&(c.debug(`cc: send stats: ${JSON.stringify(t)}`),this._signaling.reportSharingStat(t)),this._lastSharingStat=r}}};var Ie=class n{static get sessionKey(){return n._sessionKey}static set sessionKey(r){n._sessionKey=r}static get sessionSecretKey(){return n._sessionSecretKey}static set sessionSecretKey(r){n._sessionSecretKey=r}static get accessToken(){return n._accessToken}static set accessToken(r){n._accessToken=r}static isEmpty(){return!n._sessionKey}};var _=class _{static set(r){r.hasOwnProperty("voiceParams")&&(Object.assign(_._params.voiceParams,r.voiceParams),delete r.voiceParams),r.hasOwnProperty("specListenerParams")&&(Object.assign(_._params.specListenerParams,r.specListenerParams),delete r.specListenerParams),r.hasOwnProperty("apiAuth")&&(Ie.accessToken=r.apiAuth.accessToken,Ie.sessionKey=r.apiAuth.sessionKey,Ie.sessionSecretKey=r.apiAuth.sessionSecretKey),Object.assign(_._params,S.objectFilterOutValues(r,void 0))}static get(r){return _._params[r]}static get appName(){return"ok.calls.sdk.js"}static get appVersion(){return 1.1}static get sdkVersion(){return"2.8.6-dev.7059c449.0"}static get debug(){return _._params.debug}static get protocolVersion(){return _._params.joinFromMultipleDevices?6:5}static get platform(){return _._params.platform}static set platform(r){_._params.platform=r}static get clientStatsPlatform(){return _._params.clientStatsPlatform}static set clientStatsPlatform(r){_._params.clientStatsPlatform=r}static get clientType(){return _._params.clientType}static set clientType(r){_._params.clientType=r}static get externalUserType(){return _._params.externalUserType}static set externalUserType(r){_._params.externalUserType=r}static get device(){return _._params.device}static get apiKey(){return _._params.apiKey}static get apiEnv(){return _._params.apiEnv}static get apiBaseUrl(){return _._params.apiBaseUrl}static set apiBaseUrl(r){_._params.apiBaseUrl=r}static apiEndpoint(r){switch(r??_.apiEnv){case"AUTO":case"PROD":return"https://api.mycdn.me";case"CALLS":return"https://calls.okcdn.ru";case"PROD_OK":return"https://api.ok.ru";case"TEST":return"https://apitest.ok.ru/api";case"VIDEOTEST":return"https://videotestapi.ok.ru/api";case"CALLSTEST":return"https://calls-test.okcdn.ru/api";default:return _._params.apiEnv}}static get authToken(){return _._params.authToken}static set authToken(r){_._params.authToken=r}static get anonymToken(){return _._params.anonymToken}static set anonymToken(r){_._params.anonymToken=r}static get domain(){return _._params.domain}static get externalDomain(){return _._params.externalDomain}static get iceServers(){return _._params.iceServers}static set iceServers(r){_._params.iceServers=r}static get wssBase(){return _._params.wssBase}static set wssBase(r){_._params.wssBase=r}static get wssToken(){return _._params.wssToken}static set wssToken(r){_._params.wssToken=r}static get signalingReconnectDelay(){return _._params.signalingReconnectDelay}static get signalingReconnectMaxDelay(){return _._params.signalingReconnectMaxDelay}static get signalingReconnectMaxCount(){return _._params.signalingReconnectMaxCount}static get waitConnectionDelay(){return _._params.waitConnectionDelay}static get waitResponseDelay(){return _._params.waitResponseDelay}static get waitMessageDelay(){return _._params.waitMessageDelay}static get waitAnotherTabDelay(){return _._params.waitAnotherTabDelay}static get debugLog(){return _._params.debugLog}static get forceRelayPolicy(){return _._params.forceRelayPolicy}static set forceRelayPolicy(r){_._params.forceRelayPolicy=r}static get videoMinWidth(){return _._params.videoMinWidth}static get videoMaxWidth(){return _._params.videoMaxWidth}static set videoMaxWidth(r){_._params.videoMaxWidth=r}static get videoMinHeight(){return _._params.videoMinHeight}static get videoMaxHeight(){return _._params.videoMaxHeight}static set videoMaxHeight(r){_._params.videoMaxHeight=r}static get videoAspectRatio(){return _._params.videoAspectRatio}static get videoFrameRate(){return _._params.videoFrameRate}static get videoFacingMode(){return _._params.videoFacingMode||(y.isMobile()?"user":null)}static set videoFacingMode(r){_._params.videoFacingMode=r}static get displaySurface(){return _._params.displaySurface}static get audioEffects(){return _._params.audioEffects}static set audioEffects(r){_._params.audioEffects=r,_._params.audioEffects?.setLogger((e,...t)=>c.send(e,...t))}static get videoEffects(){return _._params.videoEffects}static set videoEffects(r){_._params.videoEffects=r,_._params.videoEffects?.setLogger((e,...t)=>c.send(e,...t))}static get videoEffectMaxWidth(){return _._params.videoEffectMaxWidth}static set videoEffectMaxWidth(r){_._params.videoEffectMaxWidth=r}static get videoEffectMaxHeight(){return _._params.videoEffectMaxHeight}static set videoEffectMaxHeight(r){_._params.videoEffectMaxHeight=r}static get vmoji(){return _._params.vmoji?.isBrowserSupported()?_._params.vmoji:null}static set vmoji(r){_._params.vmoji=r}static get vmojiOptions(){return _._params.vmojiOptions||{protocolVersion:1,renderingOptions:{}}}static set vmojiOptions(r){_._params.vmojiOptions=r}static get voiceParams(){return _._params.voiceParams}static get specListenerParams(){return _._params.specListenerParams}static get iceRestartWaitTime(){return _._params.iceRestartWaitTime}static get transportConnectionWaitTime(){return _._params.transportConnectionWaitTime}static get statisticsInterval(){return _._params.statisticsInterval}static set statisticsInterval(r){_._params.statisticsInterval=r}static get networkStatisticsInterval(){return _._params.networkStatisticsInterval}static get perfStatReportEnabled(){return _._params.perfStatReportEnabled}static get callStatReportEnabled(){return _._params.callStatReportEnabled}static get clientEventsLoggingEnabled(){return _._params.clientEventsLoggingEnabled}static get enableLogPerfStatReport(){return _._params.enableLogPerfStatReport}static get producerNotificationDataChannel(){return _._params.producerNotificationDataChannel}static get producerCommandDataChannel(){return _._params.producerCommandDataChannel}static get consumerScreenDataChannel(){return _._params.consumerScreenDataChannel&&Et.isBrowserSupported()}static get producerScreenDataChannel(){return _._params.producerScreenDataChannel&&_.producerNotificationDataChannel&&vt.isBrowserSupported()}static get asrDataChannel(){return _._params.asrDataChannel&&_.producerNotificationDataChannel}static get consumerScreenDataChannelPacketSize(){return _._params.consumerScreenDataChannelPacketSize}static get screenShareWebmBuilder(){return _._params.screenShareWebmBuilder}static get noiseSuppression(){return _._params.noiseSuppression}static set noiseSuppression(r){_._params.noiseSuppression=r}static get preferH264(){return _._params.preferH264}static get preferVP9(){return _._params.preferVP9}static get audioNack(){return _._params.audioNack}static get consumerScreenTrack(){return _._params.consumerScreenTrack&&_.consumerScreenDataChannel}static get producerScreenTrack(){return _._params.producerScreenTrack}static get movieShare(){return _._params.movieShare&&_.videoTracksCount>0}static get videoTracksCount(){return _.producerNotificationDataChannel?Number(_._params.videoTracksCount):0}static get breakVideoPayloadTypes(){return _._params.breakVideoPayloadTypes}static get useCallsToContacts(){return _._params.useCallsToContacts}static get useParticipantListChunk(){return _._params.useParticipantListChunk&&_.videoTracksCount>0}static get useRooms(){return _._params.useRooms}static get useChatRooms(){return _._params.useChatRooms}static get participantListChunkInitIndex(){return _._params.participantListChunkInitIndex??0}static get participantListChunkInitCount(){return _._params.participantListChunkInitCount??null}static get serverAudioRed(){return _._params.serverAudioRed}static get p2pAudioRed(){return _._params.p2pAudioRed}static get h264spsPpsIdrInKeyframe(){return _._params.h264spsPpsIdrInKeyframe}static get filterObservers(){return _._params.filterObservers}static get muteMode(){return _._params.muteMode}static get preserveAudioTracks(){return _._params.preserveAudioTracks}static get audioShare(){return y.isAudioShareSupported()&&_._params.audioShare}static get fastScreenShare(){return _._params.fastScreenShare}static get screenShareCongestionControl(){return _._params.screenShareCongestionControl}static get screenShareCongestionControlThreshold(){return _._params.screenShareCongestionControlThreshold}static get fastScreenShareWidth(){return _._params.fastScreenShareWidth}static get fastScreenShareHeight(){return _._params.fastScreenShareHeight}static get newMuteRules(){return _._params.newMuteRules}static get videoSuspend(){return _._params.videoSuspend}static get enumerateDevicesDelay(){return _._params.enumerateDevicesDelay}static getScreenFrameRate(r){return r?_._params.fastScreenShareFrameRate:_._params.screenFrameRate}static get switchVideoAtBadNetwork(){return _._params.switchVideoAtBadNetwork}static get enableVideoEffectsFpsDegradation(){return _._params.enableVideoEffectsFpsDegradation}static get simulcast(){return _._params.simulcast}static set simulcast(r){_._params.simulcast=r}static toJSON(){return{apiKey:_._params.apiKey,apiEnv:_._params.apiEnv,audioShare:_._params.audioShare,useCallsToContacts:_._params.useCallsToContacts,useParticipantListChunk:_._params.useParticipantListChunk,useRooms:_._params.useRooms,useChatRooms:_._params.useChatRooms,fastScreenShare:_._params.fastScreenShare,participantListChunkInitCount:_._params.participantListChunkInitCount,screenShareCongestionControl:_._params.screenShareCongestionControl,screenShareCongestionControlThreshold:_._params.screenShareCongestionControlThreshold,videoTracksCount:_._params.videoTracksCount,asrDataChannel:_._params.asrDataChannel,videoMaxHeight:_._params.videoMaxHeight,videoMaxWidth:_._params.videoMaxWidth,videoEffectMaxHeight:_._params.videoEffectMaxHeight,videoEffectMaxWidth:_._params.videoEffectMaxWidth,videoSuspend:_._params.videoSuspend,debugLog:_._params.debugLog,callStatReportEnabled:_._params.callStatReportEnabled,joinFromMultipleDevices:_._params.joinFromMultipleDevices,movieShare:_._params.movieShare,newMuteRules:_._params.newMuteRules,clientType:_._params.clientType,clientStatsPlatform:_._params.clientStatsPlatform,consumerScreenDataChannelPacketSize:_._params.consumerScreenDataChannelPacketSize,switchVideoAtBadNetwork:_._params.switchVideoAtBadNetwork}}};_._params={platform:"WEB",clientStatsPlatform:"",clientType:"PORTAL",externalUserType:"",device:"browser",apiKey:"",authToken:"",anonymToken:"",apiEnv:"AUTO",apiBaseUrl:null,domain:"",externalDomain:"",iceServers:[],wssBase:"",wssToken:"",signalingReconnectDelay:1e3,signalingReconnectMaxDelay:5e3,signalingReconnectMaxCount:10,waitConnectionDelay:1e4,waitResponseDelay:1e4,waitMessageDelay:15e3,waitAnotherTabDelay:200,debugLog:!1,debug:!1,forceRelayPolicy:!1,videoMinWidth:428,videoMinHeight:240,videoMaxWidth:1280,videoMaxHeight:720,videoAspectRatio:16/9,videoFrameRate:25,screenFrameRate:15,videoFacingMode:null,displaySurface:"monitor",audioEffects:null,videoEffects:null,videoEffectMaxWidth:640,videoEffectMaxHeight:360,vmoji:null,vmojiOptions:null,iceRestartWaitTime:2e4,transportConnectionWaitTime:5e3,statisticsInterval:5e3,networkStatisticsInterval:2e4,perfStatReportEnabled:!0,callStatReportEnabled:!1,clientEventsLoggingEnabled:!1,enableLogPerfStatReport:!1,voiceParams:{smoothing:.8,minFreq:200,maxFreq:5e3,interval:500,threshold:.35,speakerLevelMultiplier:1.8},specListenerParams:{connectionTimeout:1e4,volumeTimeout:1e4},producerNotificationDataChannel:!0,producerCommandDataChannel:!0,consumerScreenDataChannel:!0,producerScreenDataChannel:!0,asrDataChannel:!1,consumerScreenDataChannelPacketSize:64*1024,screenShareWebmBuilder:!1,noiseSuppression:!0,preferH264:!1,preferVP9:!1,audioNack:!0,consumerScreenTrack:!0,producerScreenTrack:!0,videoTracksCount:30,movieShare:!1,useCallsToContacts:!1,useParticipantListChunk:!1,useRooms:!1,useChatRooms:!1,participantListChunkInitIndex:0,participantListChunkInitCount:null,serverAudioRed:!0,p2pAudioRed:!0,h264spsPpsIdrInKeyframe:!0,breakVideoPayloadTypes:!1,joinFromMultipleDevices:!1,filterObservers:!1,muteMode:!1,preserveAudioTracks:!1,audioShare:!1,fastScreenShare:!1,screenShareCongestionControl:!1,screenShareCongestionControlThreshold:2100,fastScreenShareFrameRate:24,fastScreenShareWidth:1280,fastScreenShareHeight:720,newMuteRules:!1,videoSuspend:!1,enumerateDevicesDelay:2e3,switchVideoAtBadNetwork:!1,enableVideoEffectsFpsDegradation:!1,simulcast:!1};var d=_;function Ua(n,r){return!(n.isAudioEnabled!==r.isAudioEnabled||n.isVideoEnabled!==r.isVideoEnabled||n.isScreenSharingEnabled!==r.isScreenSharingEnabled||n.isFastScreenSharingEnabled!==r.isFastScreenSharingEnabled||n.isAudioSharingEnabled!==r.isAudioSharingEnabled||n.isAnimojiEnabled!==r.isAnimojiEnabled)}function fe(n){return Object.assign({isAudioEnabled:!1,isVideoEnabled:!1,isScreenSharingEnabled:!1,isFastScreenSharingEnabled:!1,isAudioSharingEnabled:!1,isAnimojiEnabled:!1},n||{})}var Ba=n=>n.stop(),ci=n=>n.getTracks().forEach(Ba),Va=n=>n.getVideoTracks().forEach(Ba);async function Ni(n,r){try{let e=typeof r.width=="number"?r.width:void 0,t=typeof r.height=="number"?r.height:void 0;await n.applyConstraints({...r,...e&&{width:{max:e,ideal:e}},...t&&{height:{max:t,ideal:t}}})}catch(e){c.warn("setVideoConstraints failed",e)}}var Ui=class extends ee{constructor(){super(...arguments);this.FPS_LIMITS=[13,20,Math.max(d.videoFrameRate,25)];this.THRESHOLD=.8;this.HISTORY_LENGTH=10;this._fpsMeterUnsubscribe=null;this._fpsHistory={cursor:0,arr:[]};this._fpsLimitCursor=this.FPS_LIMITS.length-1}get fpsLimit(){return this.FPS_LIMITS[this._fpsLimitCursor]}watch(e){this._cleanup();try{e&&(this._assertsVideoEffect(e),this._fpsMeterUnsubscribe=e.addFpsMeterListener(this._handleFpsMeter.bind(this)))}catch(t){c.warn("VideoEffectsFpsLimiter error",t)}}_handleFpsMeter(e){if(this._fpsHistory.arr[this._fpsHistory.cursor]=e,this._fpsHistory.cursor=(this._fpsHistory.cursor+1)%this.HISTORY_LENGTH,this._fpsHistory.arr.length===this.HISTORY_LENGTH&&this._fpsLimitCursor){let t=this._fpsHistory.arr.reduce((a,o)=>a+o,0)/this.HISTORY_LENGTH,i=this.FPS_LIMITS[this._fpsLimitCursor];t<i*this.THRESHOLD&&(this._fpsLimitCursor=Math.max(0,this._fpsLimitCursor-1)),i!==this.fpsLimit&&this._triggerEvent("fps-limit",this.fpsLimit)}}_assertsVideoEffect(e){if(!("addFpsMeterListener"in e))throw new Error("Outdated VideoEffect version")}addEventListener(e,t){return super.addEventListener(e,t)}_cleanup(){this._fpsMeterUnsubscribe?.(),this._fpsMeterUnsubscribe=null}destroy(){this._cleanup(),super.unsubscribe()}};var Ue=(i=>(i.audio="audio",i.video="video",i.screen="screen",i.audioshare="audioshare",i))(Ue||{});var Bi=class extends ee{constructor(){super();this._stream=null;this._screenTrack=null;this._audioShareTrack=null;this._sendVideoTrack=null;this._cameraVideoTrack=null;this._micAudioTrack=null;this._audioEffectsTrack=null;this._mediaSettings=fe();this._videoStatusOnScreenCapturingEnabled=!1;this._effect=null;this._audioEffectParams=null;this._animojiEnabled=!1;this._initDeviceChangeListener(),d.audioShare&&(this._audioShareTrack=this.getSilentAudioShareTrack()),d.enableVideoEffectsFpsDegradation&&(this._videoEffectsFpsLimiter=new Ui,this._videoEffectsFpsLimiter.addEventListener("fps-limit",this.handleVideoEffectsLowFps.bind(this)))}async request(e=[ae.AUDIO],t=!0){if(this._stream)return;let i=e.includes(ae.VIDEO),a=e.includes(ae.AUDIO),o=e.includes(ae.ANIMOJI);if(!y.isBrowserSupported())throw new j(te.UNSUPPORTED);try{this._stream=await y.getUserMedia(i,a,t),this._cameraVideoTrack?.stop(),this._cameraVideoTrack=this._stream.getVideoTracks()[0],this._micAudioTrack?.stop(),this._micAudioTrack=this._stream.getAudioTracks()[0],this._audioEffectsTrack?.stop(),this._mediaSettings.isVideoEnabled=i&&this._stream.getVideoTracks().filter(s=>s.enabled).length>0||!1,this._mediaSettings.isAudioEnabled=a&&this._stream.getAudioTracks().filter(s=>s.enabled).length>0||!1,this._mediaSettings.isAnimojiEnabled=o&&!this._mediaSettings.isVideoEnabled||!1,this._animojiEnabled=o,this._triggerEvent("SOURCE_READY")}catch(s){throw new j(s)}}getStream(){return this._stream}getScreenTrack(){return this._screenTrack}getSendVideoTrack(e=!1){return this._sendVideoTrack&&!e?this._sendVideoTrack:this._stream?this._stream.getVideoTracks()[0]:null}getSendAudioTrack(){return this._stream?.getAudioTracks().find(t=>!t.contentHint)||null}get isAnimojiRequested(){return this._animojiEnabled&&!this._mediaSettings.isVideoEnabled}addTrackToPeerConnection(e,t,i){let a=this.getStream(),o=this.getSendAudioTrack(),s=this.getSendVideoTrack(i);if(!a||!o&&!s&&!t)throw new Error("No local stream found");o&&!t&&e.addTrack(o,a),s&&!t&&e.addTrack(s,a)}getMediaSettings(){return this._mediaSettings}async changeDevice(e){switch(e){case"videoinput":if(this._mediaSettings.isVideoEnabled)return this._changeVideoInput();break;case"audioinput":if(this._mediaSettings.isAudioEnabled)return this._changeAudioInput();break;default:return Promise.reject(te.UNKNOWN)}}stopVideoTrack(){this._mediaSettings.isVideoEnabled&&(this._stopEffect(),this._stream&&Va(this._stream),this._cameraVideoTrack?.stop())}async setVideoStream(e,t){return t?this._changeScreen(!1,!1,e):this._changeVideoInput(e)}_initDeviceChangeListener(){!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices||!navigator.mediaDevices.addEventListener||(this._onDeviceChange=async e=>{if(!this._stream)return;let t=y.getSavedMicrophone(),i=y.getSavedCamera(),a=this._mediaSettings.isAudioEnabled&&t?.groupId!==e.microphone?.groupId,o=this._mediaSettings.isVideoEnabled&&i?.groupId!==e.camera?.groupId;try{a&&await this._changeAudioInput(),o&&await this._changeVideoInput()}catch{}},y.addEventListener("devicechange",this._onDeviceChange))}_destroyDeviceChangeListener(){this._onDeviceChange&&y.removeEventListener("devicechange",this._onDeviceChange)}async _changeVideoInput(e){try{let t=e?"stream":"video",i=e||await y._getUserVideo(!!this._effect,this._frameRate);if(this._cameraVideoTrack?.stop(),this._cameraVideoTrack=i.getVideoTracks()[0],!this._stream)ci(i);else{d.consumerScreenTrack||await this._disableScreenCapture();let a=await this._setEffect(this._effect,this._cameraVideoTrack);T.log(I.DEVICE_CHANGED,t),c.log("Video stream changed"),await this._replaceLocalTrack(a),this._mediaSettings.isVideoEnabled=!0,this._triggerEvent("SOURCE_CHANGED",{kind:"video"})}}catch(t){throw T.log(I.ERROR,"change_video"),c.warn("Camera change failed",t),t}}async setAudioStream(e){return this._changeAudioInput(e)}async _changeAudioInput(e=null){try{let t=e||await y.getUserAudio();if(this._micAudioTrack?.stop(),this._micAudioTrack=t.getAudioTracks()[0],!this._stream)ci(t);else{let i=await this._applyAudioEffect();T.log(I.DEVICE_CHANGED,"audio"),c.log("Audio stream changed",i),await this._replaceLocalTrack(i),this._mediaSettings.isAudioEnabled=!0,this._triggerEvent("SOURCE_CHANGED",{kind:"audio"})}}catch(t){throw T.log(I.ERROR,"change_audio"),c.error("Microphone change failed",t),t}}async _changeScreen(e,t,i){try{if(i=i||await y.getScreenMedia(e,t),!this._stream)ci(i);else{let a=i.getVideoTracks()[0];if(a.addEventListener("ended",()=>{this._mediaSettings.isScreenSharingEnabled&&this.disableScreenCapturing()},!1),d.consumerScreenTrack||this._stopEffect(),T.log(I.DEVICE_CHANGED,"screen"),c.log("Screen capturing started"),this._screenTrack=a,this._mediaSettings.isScreenSharingEnabled=!0,this._mediaSettings.isFastScreenSharingEnabled=e,d.consumerScreenTrack||(this._videoStatusOnScreenCapturingEnabled=this._mediaSettings.isVideoEnabled,this._mediaSettings.isVideoEnabled=!0,this._sendVideoTrack=d.consumerScreenDataChannel?y.getBlackMediaTrack(d.videoMinWidth,d.videoMinHeight):a,await this._replaceLocalTrack(a,this._sendVideoTrack)),i.getAudioTracks().length>0){let o=i.getAudioTracks()[0];o.contentHint="music",this._audioShareTrack=o,await this._replaceLocalTrack(o),this._mediaSettings.isAudioSharingEnabled=!0}t&&!this._mediaSettings.isAudioSharingEnabled&&c.debug("Audio share requested but not captured"),this._triggerEvent("SCREEN_STATUS",{track:a}),this._triggerEvent("SOURCE_CHANGED",{kind:"screen"})}}catch(a){throw T.log(I.ERROR,"screen"),c.warn("Screen capturing failed",a),a}}async _disableScreenCapture(){this._sendVideoTrack&&(this._sendVideoTrack.stop(),this._sendVideoTrack=null),this._screenTrack&&(this._screenTrack.stop(),this._screenTrack=null),await this.stopAudioShareTrack(),this._mediaSettings.isScreenSharingEnabled&&(this._mediaSettings.isScreenSharingEnabled=!1,this._mediaSettings.isFastScreenSharingEnabled=!1,this._triggerEvent("SCREEN_STATUS",{track:null}),this._triggerEvent("SOURCE_CHANGED",{kind:"screen"}))}async disableAudioShare(){await this.stopAudioShareTrack(),this._triggerEvent("SCREEN_STATUS",{track:null}),this._triggerEvent("SOURCE_CHANGED",{kind:"audioshare"})}async stopAudioShareTrack(){if(this._audioShareTrack){this._audioShareTrack.stop();let e=this.getSilentAudioShareTrack();await this._replaceLocalTrack(e),this._mediaSettings.isAudioSharingEnabled=!1}}async _applyAudioEffect(){if(!d.audioEffects||!this._audioEffectParams)return d.audioEffects?.pause(),this._micAudioTrack;d.audioEffects.isInitialized||await d.audioEffects.init(),d.audioEffects.resume(),d.audioEffects.setEffects(this._audioEffectParams.effects,this._audioEffectParams.isPreset),d.audioEffects.setSource(this._micAudioTrack);let e=d.audioEffects.outputStream.getAudioTracks()[0];return(!this._audioEffectsTrack||this._audioEffectsTrack.id!==e.id)&&(this._audioEffectsTrack=e),this._audioEffectsTrack}getSilentAudioShareTrack(){let e=y.getSilentMediaTrack();return e.contentHint="music",e.stop(),e}async _replaceLocalTrack(e,t){if(!this._stream)return;let i=this._stream.getTracks().find(a=>a.kind===e.kind&&a.contentHint===e.contentHint);i?.id!==e.id&&(i?(i!==this._audioEffectsTrack&&i.stop(),this._stream?.removeTrack(i),this._stream?.addTrack(e),this._triggerEvent("TRACK_REPLACED",e,t)):(this._stream.addTrack(e),this._triggerEvent("TRACK_REPLACED",e,t)))}async _setEffect(e,t){if(this._videoEffectsFpsLimiter?.watch(d.videoEffects),!d.videoEffects)return t;try{return d.videoEffects.setEffect(e,t)}catch(i){return c.warn("Video effect failed",i),t}}_stopEffect(){if(d.videoEffects)try{d.videoEffects.stopEffect()}catch(e){c.warn("Video effect failed",e)}}destroy(){this._destroyDeviceChangeListener(),d.videoEffects&&(this._effect=null,d.videoEffects.destroy()),d.audioEffects&&d.audioEffects.destroy(),this._stream&&(ci(this._stream),this._stream=null),this._cameraVideoTrack?.stop(),this._micAudioTrack?.stop(),this._audioEffectsTrack?.stop(),this._disableScreenCapture(),y.getAudioContext()?.suspend().catch(t=>c.error(t)),this._videoEffectsFpsLimiter?.destroy()}async toggleScreenCapturing(e){if(e.captureScreen){await this._changeScreen(e.fastScreenSharing,e.captureAudio);return}return d.consumerScreenTrack?this._disableScreenCapture():(e.captureAudio||await this.disableAudioShare(),this._videoStatusOnScreenCapturingEnabled?this._changeVideoInput():this.toggleVideo(!1))}async disableScreenCapturing(){return this.toggleScreenCapturing({captureScreen:!1,fastScreenSharing:!1,captureAudio:!1})}async toggleVideo(e){if(!this._stream)return;d.consumerScreenTrack||await this._disableScreenCapture(),this._cameraVideoTrack?.stop();let t;if(e){let i=await y._getUserVideo(!!this._effect,this._frameRate);this._cameraVideoTrack=i.getVideoTracks()[0],t=await this._setEffect(this._effect,this._cameraVideoTrack)}else t=y.getBlackMediaTrack(d.videoMinWidth,d.videoMinHeight),this._stopEffect();if(this._mediaSettings.isVideoEnabled=e,await this._replaceLocalTrack(t),this._animojiEnabled){this._triggerEvent("ANIMOJI_STATUS",!e);return}this._triggerEvent("SOURCE_CHANGED",{kind:"video"})}async toggleAudio(e){if(!this._stream)return;this._micAudioTrack?.stop();let t;if(e){let i=await y.getUserAudio();this._micAudioTrack=i.getAudioTracks()[0],t=await this._applyAudioEffect()}else d.audioEffects?.pause(),t=y.getSilentMediaTrack();await this._replaceLocalTrack(t),this._mediaSettings.isAudioEnabled=e,this._triggerEvent("SOURCE_CHANGED",{kind:"audio"})}toggleAnimojiCapturing(e){this._animojiEnabled=e,this._mediaSettings.isVideoEnabled||this._triggerEvent("ANIMOJI_STATUS",e)}onAnimojiSender(e){this._mediaSettings.isAnimojiEnabled=e,this._triggerEvent("SOURCE_CHANGED",{kind:"video"})}async setResolution({video:e,effect:t}){if(!d.consumerScreenTrack&&this._mediaSettings.isScreenSharingEnabled||!this._mediaSettings.isVideoEnabled)return;if(!this._stream)throw new Error("Local stream not found");if(!this._cameraVideoTrack)throw new Error("Local video track not found");let i=this._effect&&t||e;await this._applyVideoConstraints(this._cameraVideoTrack,i)}getCameraVideoTrack(){return this._cameraVideoTrack}async updateNoiseSuppression(){if(!this._stream||!this._mediaSettings.isAudioEnabled)return;let e=this._stream.getAudioTracks().find(t=>!t.contentHint);if(!e)throw new Error("Local audio track not found");if(e.enabled)return e.applyConstraints({noiseSuppression:d.noiseSuppression})}async videoEffect(e){if(!d.videoEffects)throw new Error("Video Effects library is not set");if(!d.consumerScreenTrack&&this._mediaSettings.isScreenSharingEnabled)throw new Error("Can't apply effect to screensharing");if(T.log(I.DEVICE_CHANGED,`effect_${e?.effect||"none"}`),!this._mediaSettings.isVideoEnabled){this._effect=e;return}if(this._stream&&e!==this._effect&&this._cameraVideoTrack){let t=this._effect;this._effect=e;try{let i=this._cameraVideoTrack.clone(),a=new MediaStream([i]);await this._applyVideoConstraints(i),await this._changeVideoInput(a)}catch(i){this._effect=t;let a=this._cameraVideoTrack.clone(),o=new MediaStream([a]);throw await this._changeVideoInput(o),i}}}async audioEffect(e){if(!d.audioEffects)throw new Error("Audio Effects library is not set");if(!this._mediaSettings.isAudioEnabled){this._audioEffectParams=e;return}if(this._stream&&(!e&&this._audioEffectParams||e&&!this._audioEffectParams||!S.isArraysEquals(e?.effects||[],this._audioEffectParams?.effects||[]))&&this._micAudioTrack){let t=this._audioEffectParams;this._audioEffectParams=e;try{let i=this._micAudioTrack.clone(),a=new MediaStream([i]);await this._changeAudioInput(a)}catch(i){this._audioEffectParams=t;let a=this._micAudioTrack.clone(),o=new MediaStream([a]);throw await this._changeAudioInput(o),i}}}getAudioShareTrack(){return this._audioShareTrack}handleVideoEffectsLowFps(e){this._mediaSettings.isVideoEnabled&&this._cameraVideoTrack&&e<d.videoFrameRate&&this._applyVideoConstraints(this._cameraVideoTrack).catch(t=>{c.warn("MediaSource handleVideoEffectsLowFps error",t)})}get _frameRate(){let e=this._videoEffectsFpsLimiter?.fpsLimit??d.videoFrameRate;return this._effect?Math.min(e,d.videoFrameRate):void 0}async _applyVideoConstraints(e,t){await Ni(e,{width:this._effect?d.videoEffectMaxWidth:d.videoMaxWidth,height:this._effect?d.videoEffectMaxHeight:d.videoMaxHeight,...this._frameRate&&{frameRate:{ideal:this._frameRate}},...t})}};var di=class{static isSupported(){return y.browserName()!=="Firefox"&&"permissions"in navigator&&"PermissionStatus"in window}async init(r){try{let[e,t]=await Promise.all([navigator.permissions.query({name:"camera"}),navigator.permissions.query({name:"microphone"})]);this._cameraPermissionStatus=e,this._microphonePermissionStatus=t,this._listener=r,this._cameraPermissionStatus.onchange=i=>this.handlePermissionChange(i),this._microphonePermissionStatus.onchange=i=>this.handlePermissionChange(i)}catch(e){c.warn("NavigatorPermissions init error",e)}}handlePermissionChange(r){let e=r.target;if(e instanceof PermissionStatus){let{name:t,state:i}=e;switch(t){case"audio_capture":this._listener("microphone",i);break;case"video_capture":this._listener("camera",i);break}}}getPermissionState(r){let e=null;switch(r){case"camera":e=this._cameraPermissionStatus.state;break;case"microphone":e=this._microphonePermissionStatus.state;break}return e}};var Or=(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))(Or||{});function V(n,...r){let e=d.get(n);typeof e=="function"&&setTimeout(e,0,...r)}function de(n,r,...e){if(d.filterObservers){if(Array.isArray(r)){if(r=r.filter(t=>!t.observer),!r.length)return}else if(r.observer)return}V(n,r,...e)}function Se(n){return Object.assign({},n)}function Rt(n){return n.slice()}var xr;(tc=>{function n(f,b){V("onLocalStream",f,Se(b))}tc.onLocalStream=n;function r(f,b){V("onScreenStream",f,Se(b))}tc.onScreenStream=r;function e(f,b){V("onVmojiStream",f,Se(b))}tc.onVmojiStream=e;function t(f){V("onVmojiError",f)}tc.onVmojiError=t;function i(f,b){V("onLocalStreamUpdate",Se(f),b)}tc.onLocalStreamUpdate=i;function a(f){c.debug("Local status:",f),V("onLocalStatus",f)}tc.onLocalStatus=a;function o(f,b){de("onRemoteStream",f,b)}tc.onRemoteStream=o;function s(f,b){de("onRemoteLive",f,b)}tc.onRemoteLive=s;function l(f,b){de("onLocalLive",f,b)}tc.onLocalLive=l;function p(f,b){de("onRemoteLiveUpdate",f,b)}tc.onRemoteLiveUpdate=p;function u(f,b){de("onLocalLiveUpdate",f,b)}tc.onLocalLiveUpdate=u;function m(f,b){de("onRemoteScreenStream",f,b)}tc.onRemoteScreenStream=m;function C(f,b){de("onRemoteVmojiStream",f,b)}tc.onRemoteVmojiStream=C;function k(f,b,W){de("onRemoteStreamSuspended",f,b,W)}tc.onRemoteStreamSuspended=k;function D(f,b,W,De,mt){de("onConversation",f,Se(b),Se(W),De,mt)}tc.onConversation=D;function G(f){f&&V("onConversationParticipantListChunk",f)}tc.onConversationParticipantListChunk=G;function Y(f,b,W){de("onRemoteMediaSettings",f,Se(b),W)}tc.onRemoteMediaSettings=Y;function ue(f,b){de("onLocalMediaSettings",f,Se(b))}tc.onLocalMediaSettings=ue;function Pe(f,b,W){de("onRemoteSharedMovieInfo",f,Se(b),W)}tc.onRemoteSharedMovieInfo=Pe;function Ge(f,b,W){de("onRemoteSharedMovieStoppedInfo",f,Se(b),W)}tc.onRemoteSharedMovieStoppedInfo=Ge;function se(f,b,W){de("onLocalSharedMovieInfo",f,Se(b),W)}tc.onLocalSharedMovieInfo=se;function Re(f,b,W){de("onLocalSharedMovieStoppedInfo",f,Se(b),W)}tc.onLocalSharedMovieStoppedInfo=Re;function Ce(f,b,W){de("onRemoteSharedUrl",f,b,W)}tc.onRemoteSharedUrl=Ce;function Qt(f,b){de("onParticipantAdded",f,b)}tc.onParticipantAdded=Qt;function aa(f,b){de("onParticipantJoined",f,b)}tc.onParticipantJoined=aa;function na(f){V("onLocalParticipantState",Se(f))}tc.onLocalParticipantState=na;function X(f,b,W){de("onRemoteParticipantState",f,Se(b),W)}tc.onRemoteParticipantState=X;function Xt(f,b){V("onRemoteParticipantsState",f,b)}tc.onRemoteParticipantsState=Xt;function oa(f,b,W=null){c.debug("Remote status:",b,f),de("onRemoteStatus",f,b,W)}tc.onRemoteStatus=oa;function sa(){V("onPermissionsRequested")}tc.onPermissionsRequested=sa;function ca(f,b){V("onPermissionsError",f,b)}tc.onPermissionsError=ca;function da(f,b){de("onRemoteRemoved",f,b)}tc.onRemoteRemoved=da;function la(f,b,W){V("onCallState",f,b,Se(W))}tc.onCallState=la;function Mi(f,b){V("onDeviceSwitched",f,b)}tc.onDeviceSwitched=Mi;function Er(f,b,W,De=!1,mt=!1,Tr=null,Rr=null,Gn,fa,Wn=null){let Kn=fa?Rt(fa):void 0;V("onMuteStates",Se(f),Rt(b),Rt(W),De,mt,Tr,Rr,Gn,Kn,Wn)}tc.onMuteStates=Er;function pa(f,b,W=!1){de("onRolesChanged",f,Rt(b),W)}tc.onRolesChanged=pa;function ua(f,b=!1){V("onLocalRolesChanged",Rt(f),b)}tc.onLocalRolesChanged=ua;function ma(f,b,W,De){de("onPinnedParticipant",f,b,W,De)}tc.onPinnedParticipant=ma;function K(f,b){V("onLocalPin",f,b)}tc.onLocalPin=K;function ha(f){V("onOptionsChanged",Rt(f))}tc.onOptionsChanged=ha;function _a(){V("onCallAccepted")}tc.onCallAccepted=_a;function le(f){de("onAcceptedCall",f)}tc.onAcceptedCall=le;function B(){V("onRateNeeded")}tc.onRateNeeded=B;function Z(f){de("onSpeakerChanged",f)}tc.onSpeakerChanged=Z;function re(f){V("onVolumesDetected",Rt(f))}tc.onVolumesDetected=re;function pe(f,b){V("onLocalVolume",f,b)}tc.onLocalVolume=pe;function Ye(f,b){V("onJoinStatus",f,b)}tc.onJoinStatus=Ye;function Le(f,b){V("onHangup",f,b)}tc.onHangup=Le;function h(f){V("onMultipartyChatCreated",Se(f))}tc.onMultipartyChatCreated=h;function E(){V("onDeviceChange")}tc.onDeviceChange=E;function R(f){V("onFingerprintChange",f)}tc.onFingerprintChange=R;function P(){V("onTokenExpired")}tc.onTokenExpired=P;function g(f,b,W=!1){V("onChatMessage",f,b,W)}tc.onChatMessage=g;function M(f,b,W=!1){V("onCustomData",f,b,W)}tc.onCustomData=M;function H(f,b,W,De,mt,Tr,Rr=null){V("onRecordStarted",f,b,W,De,mt,Tr,Rr)}tc.onRecordStarted=H;function U(f=null){V("onRecordStopped",f)}tc.onRecordStopped=U;function J(f){V("onLocalNetworkStatusChanged",f)}tc.onLocalNetworkStatusChanged=J;function he(f){V("onNetworkStatusChanged",f)}tc.onNetworkStatusChanged=he;function x(f,...b){V("onDebugMessage",f,...b)}tc.onDebugMessage=x;function _e(f,b){let W=Object.assign({},f,{memory:b});V("onStatistics",W)}tc.onStatistics=_e;function me(){V("onAutoplayError")}tc.onAutoplayError=me;function ge(f,b,W,De,mt){V("onChatRoomUpdated",f,b,W,De,mt)}tc.onChatRoomUpdated=ge;function ce(f){V("onPromoted",f)}tc.onPromoted=ce;function be(f){V("onRemoteMixedAudioStream",f)}tc.onRemoteMixedAudioStream=be;function ut(f){V("onJoinLinkChanged",f)}tc.onJoinLinkChanged=ut;function xt(f){V("onRoomsUpdated",f)}tc.onRoomsUpdated=xt;function We(f,b,W,De){V("onRoomUpdated",f,b,W,De)}tc.onRoomUpdated=We;function Zt(f){V("onRoomParticipantsUpdated",f)}tc.onRoomParticipantsUpdated=Zt;function ga(f){V("onRoomSwitched",f)}tc.onRoomSwitched=ga;function Hs(f){V("onRoomStart",f)}tc.onRoomStart=Hs;function Gs(f,b=null){V("onFeedback",f,b)}tc.onFeedback=Gs;function Ws(f){V("onFeaturesPerRoleChanged",f)}tc.onFeaturesPerRoleChanged=Ws;function Ks(f){V("onParticipantVmojiUpdate",f)}tc.onParticipantVmojiUpdate=Ks;function $s(f,b){V("onAsrSet",f,b)}tc.onAsrSet=$s;function qs(f,b,W){V("onAsrStarted",f,b,W)}tc.onAsrStarted=qs;function zs(f){V("onAsrStopped",f)}tc.onAsrStopped=zs;function Js(f,b,W,De){V("onAsrTranscription",f,b,W,De)}tc.onAsrTranscription=Js;function Ys(f,b){V("onParticipantIdChanged",f,b)}tc.onParticipantIdChanged=Ys;function Qs(f){V("onVideoSuspendSuggest",f)}tc.onVideoSuspendSuggest=Qs;function Xs(f){V("onSignalingMessage",typeof f=="string"?f:Se(f))}tc.onSignalingMessage=Xs;function Zs(f){V("onPromotionApproved",f)}tc.onPromotionApproved=Zs;function ec(){V("onPeerRegistered")}tc.onPeerRegistered=ec})(xr||(xr={}));var v=xr;var Nr="_okcls_",Ht=(()=>{try{let n=Date.now().toString(),r=window.localStorage,e=!1;return r.setItem(n,n),e=r.getItem(n)===n,r.removeItem(n),e?r:null}catch{return null}})();function Po(n){let r=Ht?Ht.getItem(Nr+n):null;if(r===null)return null;try{return JSON.parse(r)}catch{return null}}function bo(n,r){try{Ht&&Ht.setItem(Nr+n,JSON.stringify(r))}catch{}}function Mo(n){Ht&&Ht.removeItem(Nr+n)}var Lr;(t=>{function n(i){return Po(i)||null}t.get=n;function r(i,a){bo(i,a)}t.set=r;function e(i){Mo(i)}t.remove=e})(Lr||(Lr={}));var nt=Lr;var Ct=null,Vi=null,Ki=null,qi=[],zi=[],$i=[],Ve=null,Fe=null,Ji=null,Yi=!1,Qi=!1,Fi,Gt,ji,Ur=null,Br="",Hi=[],Gi=null,Fa=navigator.appVersion,Ao=navigator.appName,we=navigator.userAgent,Xe={},Tt=(e=>(e.USER="user",e.ENVIRONMENT="environment",e))(Tt||{});(r=>{function n(e){return Object.values(r).includes(e)}r.contains=n})(Tt||(Tt={}));var Pt=class{constructor(r,e=!1,t=d.videoMaxWidth,i=d.videoMaxHeight,a=d.videoFrameRate){this.isVideoRequested=()=>this.needVideo;this.supportedConstraints=navigator.mediaDevices.getSupportedConstraints();let o=!1;if(r){o={noiseSuppression:d.noiseSuppression,echoCancellation:!0,autoGainControl:!0};let l=ve.getMicrophones(),p,u;if(Fe&&(u=Fe.groupId,p=Fe.deviceId),typeof r=="string")u=l.find(C=>C.deviceId===r)?.groupId,p=r;else if(!Fe&&ve.os()==="MacOS"&&l.find(m=>m.label.includes("iPhone"))){let m=l.find(C=>!C.label.includes("Virtual")&&!C.label.includes("iPhone"));m&&(u=m.groupId,p=m.deviceId)}u&&this.supportedConstraints.groupId?o.groupId={exact:u}:p&&(o.deviceId={exact:p})}let s=!1;if(e){s={width:{min:d.videoMinWidth,max:t,ideal:t},height:{min:d.videoMinHeight,max:i,ideal:i},aspectRatio:{ideal:d.videoAspectRatio},frameRate:{ideal:a}};let l=ve.getCameras(),p,u;if(Ve&&(u=Ve.groupId,p=Ve.deviceId),typeof e=="string")u=l.find(C=>C.deviceId===e)?.groupId,p=e;else if(!Ve&&ve.os()==="MacOS"&&l.find(m=>m.label.includes("iPhone"))){let m=l.find(C=>!C.label.includes("Virtual")&&!C.label.includes("iPhone"));m&&(u=m.groupId,p=m.deviceId)}u&&this.supportedConstraints.groupId?s.groupId={exact:u}:p&&(s.deviceId={exact:p}),d.videoFacingMode&&(s.facingMode={ideal:d.videoFacingMode},delete s.deviceId,delete s.groupId)}this.audio=o,this.video=s,this.needVideo=!!s,this.lastSimplifyWasReached=!1}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.groupId||this.video.facingMode)&&(delete this.video.deviceId,delete this.video.groupId,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||this.audio.groupId)&&(delete this.audio.deviceId,delete this.audio.groupId)),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.audio&&!this.video&&(this.lastSimplifyWasReached=!0,this.audio=!this.isVideoRequested(),this.video=this.isVideoRequested()),this}canSimplify(){let r=typeof this.video=="object"&&(this.video.width||this.video.height||this.video.aspectRatio||this.video.frameRate||this.video.facingMode||this.video.deviceId||this.video.groupId)||this.video;return!!(typeof this.audio=="object"&&(this.audio.deviceId||this.audio.groupId||this.audio.noiseSuppression||this.audio.echoCancellation||this.audio.autoGainControl)||this.audio||r)&&!this.lastSimplifyWasReached}isVideo(){return!!this.video}isAudio(){return!!this.audio}},Vr=class extends Pt{constructor(r,e,t,i){if(super(!1,!0),this.captureController="CaptureController"in window?new CaptureController:null,typeof this.video=="object"?(delete this.video.deviceId,delete this.video.groupId,delete this.video.aspectRatio,delete this.video.frameRate,delete this.video.facingMode):this.video={},this.video.cursor="motion",this.video.width=r,this.video.height=e,this.video.frameRate=t,this.video.displaySurface=d.displaySurface,ve.browserName()==="Safari"){let a=Number(ve.browserVersion());a===16?(this.video.width={max:r},this.video.height={max:e}):a===17&&(delete this.video.width,delete this.video.height)}i&&(this.audio={noiseSuppression:!1,echoCancellation:!1,autoGainControl:!1})}getNative(){return Object.assign(super.getNative(),{systemAudio:"exclude",controller:this.captureController})}},yt=class yt{constructor(){this._lockId=Math.round(Math.random()*99998)+1}busy(){if(yt._lockId)throw T.log(I.ERROR,"change_device"),c.warn("Device change failed: MediaSource is busy"),new Error("MediaSource is busy");yt._lockId=this._lockId}free(){yt._lockId===this._lockId&&(yt._lockId=0)}};yt._lockId=0;var Xi=yt;async function ja(){Qi=!1,Yi=!1,Ct=null;let n={camera:ve.getSavedCamera(),microphone:ve.getSavedMicrophone(),output:ve.getSavedOutput()};await Fr(),Do("devicechange",n),v.onDeviceChange()}function Do(n,...r){if(Xe[n])for(let e of Xe[n])e(...r)}async function Fr(){return Ct||(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices?[]:(!Vi&&navigator.mediaDevices.addEventListener&&(Vi=S.debounce(ja,d.enumerateDevicesDelay),navigator.mediaDevices.addEventListener("devicechange",Vi)),!Ki&&di.isSupported()&&(Ki=new di,await Ki.init((n,r)=>{switch(r){case"denied":case"prompt":Vi?.();break}})),Ct=navigator.mediaDevices.enumerateDevices().then(n=>{qi=n.filter(i=>i.kind==="videoinput"?(i.label&&(Yi=!0),!0):!1),zi=n.filter(i=>i.kind==="audioinput"?(i.label?Qi=!0:ve.isMobile()&&ve.browserName()==="Firefox"&&(Qi=Yi),!0):!1),$i=n.filter(i=>i.kind==="audiooutput");let r=Ve?.deviceId??nt.get("videoinput"),e=Fe?.deviceId??nt.get("audioinput"),t=Ji?.deviceId??nt.get("audiooutput");return Ve=qi.find(i=>i.deviceId===r)||null,Fe=zi.find(i=>i.deviceId===e)||null,Ji=$i.find(i=>i.deviceId===t)||$i[0]||null,Ct=Promise.resolve(n),n}).catch(()=>(Ct=null,[]))))}function wo(n){if(Ve&&Fe)return;let r=(e,t)=>{let i=t.getSettings()?.deviceId;return e.find(a=>a.deviceId===i||a.label===t.label)||null};n?.getTracks().forEach(e=>{!Fe&&e.kind==="audio"?Fe=r(ve.getMicrophones(),e):!Ve&&e.kind==="video"&&(Ve=r(ve.getCameras(),e))})}async function li(n,r){c.debug("Try to get media",JSON.parse(JSON.stringify(n.getNative())));let e=(!n.isVideo()||ve.hasCameraPermission())&&(!n.isAudio()||ve.hasMicrophonePermission());!e&&!r&&v.onPermissionsRequested();let t=new Xi;try{t.busy();let i=await navigator.mediaDevices.getUserMedia(n.getNative());return t.free(),e||await ja(),wo(i),i}catch(i){switch(t.free(),c.error("getUserMedia error",i),i.name){case"PermissionDeniedError":case"PermissionDismissedError":case"NotAllowedError":case"SecurityError":case"DOMException":case"NotFoundError":r=n.isVideoRequested()?te.CAMERA_PERMISSION:te.MIC_PERMISSION;break;case"OverconstrainedError":r=te.OVERCONSTRAINED;break;case"TypeError":r=te.UNKNOWN;break;case"AbortError":case"NotReadableError":r=n.isVideoRequested()?te.CAMERA_ACCESS:te.MIC_ACCESS;break;case"Error":if(i.message==="MediaSource is busy"){r=n.isVideoRequested()?te.CAMERA_ACCESS:te.MIC_ACCESS;break}}if(n.canSimplify())return li(n.simplify(),r);let a=r||te.UNKNOWN;throw v.onPermissionsError(a,i),a}}async function ko(n){c.debug("Try to get screen",JSON.parse(JSON.stringify(n.getNative())));let r=new Xi;try{r.busy();let e=await navigator.mediaDevices.getDisplayMedia(n.getNative()),t=e?.getVideoTracks()[0];if(t){let i=t.getSettings()?.displaySurface;if(c.debug(`Got display media track: ${t.id} (${i})`),t.contentHint="text",n.captureController&&(i==="browser"||i==="window"))try{n.captureController.setFocusBehavior("no-focus-change")}catch(a){c.warn("Failed to set focus behavior",a)}}return e}catch(e){switch(e.name){case"PermissionDeniedError":case"NotAllowedError":case"SecurityError":throw te.SCREEN_PERMISSION;default:throw te.SCREEN_ACCESS}}finally{r.free()}}function Wi(){return Hi.length||(Hi=(()=>{let n,r=!1,e=0,t="0",i=we.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];if(/trident/i.test(i[1]))return n=/\brv[ :]+(\d+)/g.exec(we),["IE",n&&n[1]||"Unknown",r,e,t];if(i[1]==="Safari"){if(n=we.match(/\bEdge\/(\d+)/),n)return["Edge",n[1]||"Unknown",r,e,t];if(n=we.match(/\bCriOS\/(\d+)/),n)return["Chrome",n[1],!0,Number(n[1]),t];if(n=we.match(/\bFxiOS\/(\d+)/),n)return["Firefox",n[1],!1,e,t];if(n=we.match(/\bYaBrowser\/(\d+)/),n)return["Yandex",n[1],!1,e,t];if(n=we.match(/\bOPT\/(\d+)/),n)return["Opera",n[1],!1,e,t]}if(i[1]==="Chrome"){if(r=!0,e=Number(i[2]),n=we.match(/\bOPR\/(\d+)/),n)return["Opera",n[1]||"Unknown",r,e,t];if(n=we.match(/\bYaBrowser\/(\d+)/),n)return["Yandex",n[1]||"Unknown",r,e,t];if(n=we.match(/\bSferum\/((\d+)(?:\.\d+)*)/),n)return["Sferum",n[1]||"Unknown",r,e,t];if(n=we.match(/\bEdge?\/(\d+)/),n)return["Edge",n[1]||"Unknown",r,e,t];if(typeof window.opr<"u"&&/^(.+\.)?ok.ru$/.test(window.location.host))return["Opera","Hidden",r,e,t]}return n=we.match(/version\/(\d+)(?:(?:\.)(\d+))?/i),n&&n[2]!==void 0&&(t=n[2]),[i[2]?i[1]:Ao,n&&n[1]||i[2]||Fa,r,e,t]})()),Hi}var ve;(le=>{async function n(){if(Ct)return;let B=()=>{le.getSilentMediaTrack(),document.removeEventListener("click",B),document.removeEventListener("touchstart",B)};document.addEventListener("click",B),document.addEventListener("touchstart",B),await Fr()}le.init=n;function r(){return qi}le.getCameras=r;function e(){return zi}le.getMicrophones=e;function t(){return $i}le.getOutput=t;function i(){return qi.length>0}le.hasCamera=i;function a(){return zi.length>0}le.hasMicrophone=a;function o(){return Ve}le.getSavedCamera=o;function s(){return Fe}le.getSavedMicrophone=s;function l(){return Ji}le.getSavedOutput=l;function p(){return d.videoFacingMode}le.getVideoFacingMode=p;function u(){return Yi}le.hasCameraPermission=u;function m(){return Qi}le.hasMicrophonePermission=m;function C(){return Ki?.getPermissionState("microphone")??null}le.getMicrophonePermissionState=C;function k(B=!1){return m()?i()&&B?u():!0:!1}le.hasPermissions=k;async function D(B=!1,Z=!0,re=!0){let pe=a()&&Z,Ye=i()&&B,Le;if(!pe&&!Ye)Le=new MediaStream;else try{Le=await li(new Pt(pe,Ye))}catch{Le=new MediaStream}return!Le.getVideoTracks().length&&re&&Le.addTrack(le.getBlackMediaTrack()),!Le.getAudioTracks().length&&re&&Le.addTrack(le.getSilentMediaTrack()),Le}le.getUserMedia=D;async function G(B,Z){let re=B?d.fastScreenShareWidth:window.screen.width,pe=B?d.fastScreenShareHeight:window.screen.height,Ye=d.getScreenFrameRate(B);return ko(new Vr(re,pe,Ye,Z))}le.getScreenMedia=G;async function Y(B=!1,Z){let re=B?d.videoEffectMaxWidth:d.videoMaxWidth,pe=B?d.videoEffectMaxHeight:d.videoMaxHeight;return li(new Pt(!1,!0,re,pe,Z))}le._getUserVideo=Y;async function ue(B,Z){let re=Z?.width||d.videoMaxWidth,pe=Z?.height||d.videoMaxHeight;return li(new Pt(!1,B||!0,re,pe))}le.getUserVideo=ue;async function Pe(B){return li(new Pt(B||!0,!1))}le.getUserAudio=Pe;async function Ge(B,Z){let[re]=B.getVideoTracks();if(!re)throw new Error("Video track not found in stream");return Ni(re,Z)}le.setResolution=Ge;async function se(B,Z){let pe=(await Fr()).find(Ye=>Ye.kind===B&&Ye.deviceId===Z);return pe?(B==="videoinput"?Ve=pe:B==="audioinput"?Fe=pe:B==="audiooutput"&&(Ji=pe),nt.set(B,Z),pe):null}le._saveDeviceId=se;function Re(){if(!ji||ji.readyState==="ended"){let B=le.getAudioContext(),Z=B.createMediaStreamDestination(),re=B.createGain();re.gain.value=1e-5,re.connect(Z),re.connect(B.destination);let pe=B.createOscillator();pe.type="sine",pe.frequency.value=0,pe.connect(re),pe.start(),ji=Z.stream.getAudioTracks()[0]}return Object.assign(ji.clone(),{enabled:!1})}le.getSilentMediaTrack=Re;function Ce(B=d.videoMinWidth,Z=d.videoMinHeight){Gt||(Gt=document.createElement("canvas")),Gt.width=B,Gt.height=Z;let re=Gt.getContext("2d");return re.rect(0,0,B,Z),re.fillStyle="black",re.fill(),(!Fi||Fi.readyState==="ended")&&(Fi=Gt.captureStream(d.videoFrameRate).getVideoTracks()[0]),Object.assign(Fi.clone(),{enabled:!1})}le.getBlackMediaTrack=Ce;function Qt(){if(Mi()==="Edge"&&Number(Er())<70)return!1;try{let B=window;return"mediaDevices"in B.navigator&&"getUserMedia"in B.navigator.mediaDevices&&B.RTCPeerConnection&&B.RTCIceCandidate&&B.RTCSessionDescription&&B.HTMLCanvasElement&&B.HTMLCanvasElement.prototype.captureStream&&B.RTCRtpSender&&B.RTCRtpSender.prototype.replaceTrack&&B.RTCRtpSender.prototype.getParameters&&"sendBeacon"in navigator&&!0||!1}catch{return!1}}le.isBrowserSupported=Qt;function aa(){return!!navigator.mediaDevices.getDisplayMedia}le.isScreenCapturingSupported=aa;function na(){let B=le.browserName()==="Safari"&&le.browserVersion()==="15"&&le.browserSubVersion()==="1",Z=le.browserName()==="Opera",re=le.browserName()==="Yandex";return B||Z||re}le.isBrokenH264Decoder=na;function X(){return le.browserName()==="Yandex"&&le.os()==="Windows"||d.simulcast}le.isBrokenVP9Encoder=X;function Xt(){return le.browserName()==="Safari"&&Number(le.browserVersion())===17&&[4,5,6].includes(Number(le.browserSubVersion()))}le.isBrokenVP9Decoder=Xt;function oa(){return le.browserName()==="Firefox"&&Number(le.browserVersion())<60}le.isOldDataChannelDescription=oa;function sa(){return!(le.baseChromeVersion()&&le.isMobile())}le.canPreferH264=sa;function ca(){return!(le.browserName()==="Firefox"||le.browserName()==="Safari")}le.isSimulcastSupportedByBrowser=ca;function da(){return Br||(Br=(()=>{let B={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 Z in B)if(B.hasOwnProperty(Z)&&B[Z].test(we))return Z;return"Unknown"})()),Br}le.os=da;function la(){return Ur===null&&(Ur=/Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(Fa)),Ur}le.isMobile=la;function Mi(){return Wi()[0]}le.browserName=Mi;function Er(){return Wi()[1]}le.browserVersion=Er;function pa(){return Wi()[3]}le.baseChromeVersion=pa;function ua(){return Gi||(Gi=new(window.AudioContext||window.webkitAudioContext)),Gi.resume().catch(()=>{c.warn("Failed to resume AudioContext")}),Gi}le.getAudioContext=ua;function ma(){return Wi()[4]}le.browserSubVersion=ma;function K(){return le.baseChromeVersion()>=105&&!le.isMobile()}le.isAudioShareSupported=K;function ha(B,Z){Xe[B]||(Xe[B]=[]),Xe[B].push(Z)}le.addEventListener=ha;function _a(B,Z){if(Xe[B])if(!Z)delete Xe[B];else{let re=Xe[B].indexOf(Z);re>-1&&Xe[B].splice(re,1)}}le.removeEventListener=_a})(ve||(ve={}));var y=ve;var ke=class ke{static get startTime(){return ke._list[0]?.t||0}static get endTime(){let r=ke._list;return r[r.length-1]?.t||0}static startSession(){ke._list=[]}static get conversationId(){return ke._conversationId}static set conversationId(r){ke._conversationId=r}static add(r){ke._list.push(r)}static _createContextLogs(){let r=[[`Calls SDK ${d.sdkVersion}`,d.toJSON()],["UserAgent:",navigator.userAgent],["Screen resolution:",`${window.screen.width}x${window.screen.height}`],["Permissions:",`Camera: ${y.hasCameraPermission()}, Mic: ${y.hasMicrophonePermission()}`]],e=new Date,t=e.getTime(),i=e.toLocaleString("ru-RU",{dateStyle:"short",timeStyle:"long"});return r.map(a=>({h:i,t,l:"LOG",d:a}))}static collectLogs(){let r=ke._list;return r.length===0?[]:[...ke._createContextLogs(),...r]}};ke._list=[],ke._conversationId=null;var Ae=ke;var Zi=class{constructor(){this._items=[]}get length(){return this._items.length}push(...r){this._items.push(...r)}merge(r){this._items.push(...r._items)}shift(){return this._items.shift()||null}bisect(){let r=this.length>1?Math.floor(this.length/2):1;this._items=this._items.slice(r)}head(){return this._items[0]||null}tail(){let r=this._items.length;return r?this._items[r-1]:null}clear(){this._items=[]}toString(){return this._items.length?JSON.stringify(this._items,(r,e)=>e instanceof Error?String(e):e):""}};var jr=2*1024*1024,Ha=512*1024,Wt=100*1024,xo=5,Gr="_okcls_logs_session_",Oo=3e4,Wr=class{constructor(){this._items=[];this._itemsSize=0;this._storageSize=jr;try{let r=window.localStorage;for(let e of Object.keys(r)){if(e.indexOf(Gr)!==0)continue;let t=r.getItem(e);if(!t){Ga(e);continue}let i=Ka(t);this.add(e,i)}}catch(r){console.error("Storage is blocked",r),this._storageSize=0}this._items.sort((r,e)=>r.date-e.date),this.cleanup(Wt)}get size(){return this._itemsSize}get length(){return this._items.length}get available(){return Math.max(this._storageSize-this._itemsSize,0)}get items(){return this._items}set storageSize(r){this._storageSize=Math.min(r,this._storageSize,jr)}add(r,e){let t=parseInt(r.replace(Gr,""),10);this._itemsSize+=e,this._items.push({key:r,size:e,date:t})}deleteOldestItem(){let r=this._items.shift();r&&(Ga(r.key),this._itemsSize-=r.size)}cleanup(r){for(;this.length&&(this.size>jr||this.length>xo-1||this.size+r>this.available);)this.deleteOldestItem()}};function Wa(){return`${Gr}${Date.now()}`}function Ka(n){return new Blob([n]).size}function Ga(n){try{window.localStorage.removeItem(n)}catch(r){console.error("Failed to remove log from storage",r)}}function er(){let n=ot.toString();if(!ye.available||!n)return;let r=Ka(n);if(r>Ha){ot.bisect(),er();return}ye.cleanup(Wt+r);try{window.localStorage.setItem(tr,n)}catch(e){if(console.warn("Failed to write log to storage",e),ye.storageSize=ye.size+r,ye.cleanup(Wt+r),ye.available>=Wt+r){er();return}if(r>Wt){ot.bisect(),er();return}ye.storageSize=0;return}r>Ha&&(ye.add(tr,r),tr=Wa(),ot.clear(),ye.cleanup(Wt))}function Kr(){!ye.available||!ot.length||er()}function Lo(n=!1){let r=[];try{let i=window.localStorage;for(let o of ye.items){let s=i.getItem(o.key);r.push(s)}let a=ot.toString();a&&r.push(a)}catch(i){console.error("Storage is blocked",i)}let e=`[${r.join(",")}]`;if(n)return e;let t=`logs_${Date.now()}.json`;return No(e,t),t}function No(n,r){let e=document.createElement("a"),t=new Blob([n],{type:"text/json"});e.href=URL.createObjectURL(t),e.download=r,e.click()}function $a(n,r){if(!ye.available)return;let e=new Date,t={t:e.getTime(),l:n,d:r,h:e.toLocaleString("ru-RU",{dateStyle:"short",timeStyle:"long"})};ot.push(t),Ae.add(t),Hr||(Hr=window.setTimeout(()=>{Hr=null,Kr()},Oo))}function $r(){ye||(ye=new Wr,ot=new Zi,tr=Wa(),window.addEventListener("beforeunload",Kr))}var ye,ot,tr,Hr=null;window.__VKCallsSDKLogs__=(n=!1)=>(ye||$r(),Kr(),Lo(n));var qa=(i=>(i.DEBUG="DEBUG",i.LOG="LOG",i.WARN="WARN",i.ERROR="ERROR",i))(qa||{}),qr;(se=>{let n="📞",r=(Re,...Ce)=>{v.onDebugMessage(Re,...Ce)},e=!1,t=(Re,Ce)=>(...Qt)=>{Re(...Qt),$a(Ce,Qt)},i=console.debug.bind(console,n),a=console.log.bind(console,n),o=console.warn.bind(console,n),s=console.error.bind(console,n),l=r.bind(null,"DEBUG"),p=r.bind(null,"LOG"),u=r.bind(null,"WARN"),m=r.bind(null,"ERROR");se.debug=l,se.log=p,se.warn=u,se.error=m;function Y(){return e}se.enabled=Y;function ue(Re){e=Re,d.debugLog&&$r(),Re?(se.debug=d.debugLog?t(i,"DEBUG"):i,se.log=d.debugLog?t(a,"LOG"):a,se.warn=d.debugLog?t(o,"WARN"):o,se.error=d.debugLog?t(s,"ERROR"):s):(se.debug=d.debugLog?t(l,"DEBUG"):l,se.log=d.debugLog?t(p,"LOG"):p,se.warn=d.debugLog?t(u,"WARN"):u,se.error=d.debugLog?t(m,"ERROR"):m)}se.toggle=ue;function Pe(Re,...Ce){switch(Re){case"DEBUG":(0,se.debug)(...Ce);break;case"LOG":(0,se.log)(...Ce);break;case"WARN":(0,se.warn)(...Ce);break;case"ERROR":(0,se.error)(...Ce);break}}se.send=Pe;function Ge(Re,...Ce){}se.test=Ge})(qr||(qr={}));var c=qr;var Bo="kf";function Kt(n){return n.stopStream}function zr(n){return n.keyFrameRequested}function za(n){if(Kt(n))return"ss";if(zr(n))return Bo;let r="";return n.priority!==void 0&&(r+="p="+n.priority),n.width!==void 0&&n.height!==void 0&&(r!==""&&(r+=":"),r+="sz="+Math.round(n.width)+"x"+Math.round(n.height)),n.fit!==void 0&&(r!==""&&(r+=":"),r+="fit="+n.fit),r}var pi=(o=>(o.CAMERA="CAMERA",o.SCREEN="SCREEN",o.STREAM="STREAM",o.MOVIE="MOVIE",o.ANIMOJI="ANIMOJI",o.SHARED_URL="SHARED_URL",o))(pi||{}),Ja="s",Ya="m";function $e(n){return n.participantId+(n.mediaType?Lt+Ja+n.mediaType:"")+(n.streamName?Lt+Ya+n.streamName:"")}function ui(n){let r=n.split(Lt),e=r.shift();if(!e)throw new Error("Illegal stream description: "+n);let t=null,i,a=0;for(let s of r)switch(s.charAt(0)){case Ja:t=Vo(s.slice(1));break;case Ya:i=s.slice(1);break;case ki:a=Number.parseInt(s.slice(1),10);break;default:throw new Error("Unexpected parameter type "+s.charAt(0)+" in stream description "+n)}return{participantId:S.compose(e,a),mediaType:t,streamName:i}}function Vo(n){for(let r of Object.keys(pi))if(r===n)return pi[r];return null}function qe(){let n=new DataView(new ArrayBuffer(64)),r=0;function e(t){if(r+t>n.byteLength){let i=new Uint8Array(Math.max(r+t,n.byteLength+64));i.set(new Uint8Array(n.buffer.slice(0,r))),n=new DataView(i.buffer)}}return{put(t){if(e(t.byteLength),Fo(t)){let i=t.buffer;new Uint8Array(n.buffer).set(new Uint8Array(i),r)}else new Uint8Array(n.buffer).set(new Uint8Array(t),r);r+=t.byteLength},putI8(t){e(1),n.setInt8(r,t),++r},putI16(t){e(2),n.setInt16(r,t),r+=2},putI32(t){e(4),n.setInt32(r,t),r+=4},putI64(t){e(8);let i=t<0;i&&(t=-t);let a=t/4294967296|0,o=t%4294967296|0;i&&(o=~o+1|0,a=o===0?~a+1|0:~a),n.setUint32(r,a),n.setUint32(r+4,o),r+=8},putUi8(t){e(1),n.setUint8(r,t),++r},putUi16(t){e(2),n.setUint16(r,t),r+=2},putUi32(t){e(4),n.setUint32(r,t),r+=4},putUi64(t){e(8),n.setUint32(r,t/4294967296|0),n.setUint32(r+4,t%4294967296),r+=8},putF(t){e(8),n.setFloat64(r,t),r+=8},ui8array(){return new Uint8Array(n.buffer.slice(0,r))}}}function Fo(n){return n.buffer!==void 0}function ir(n){let r=ArrayBuffer.isView(n)?new DataView(n.buffer,n.byteOffset,n.byteLength):new DataView(n),e=0;return{peek(){return r.getUint8(e)},get(t){e+=t;let i=r.byteOffset;return r.buffer.slice(i+e-t,i+e)},getI8(){return r.getInt8(e++)},getI16(){return e+=2,r.getInt16(e-2)},getI32(){return e+=4,r.getInt32(e-4)},getI64(){e+=8;let t=r.getInt32(e-8),i=r.getUint32(e-4);return t*4294967296+i},getUi8(){return r.getUint8(e++)},getUi16(){return e+=2,r.getUint16(e-2)},getUi32(){return e+=4,r.getUint32(e-4)},getUi64(){e+=8;let t=r.getUint32(e-8),i=r.getUint32(e-4);return t*4294967296+i},getF32(){return e+=4,r.getFloat32(e-4)},getF64(){return e+=8,r.getFloat64(e-8)}}}var Za=0,en=1,Ho=2,Go=3,Wo=4,Ko=5,$o=6,qo=7,zo=0,Jo=1,Yo=2,Ze=0,Qo=0,Xo=0,Zo=1,rr=class{constructor(){this.participantIdRegistry=null}setParticipantIdRegistry(r){this.participantIdRegistry=r}serializeUpdateDisplayLayout(r,e){let t=qe();F.enc(t,Za),F.enc(t,Ze),F.enc(t,r),bt.enc(t,null);let i=[];for(let a in e)e.hasOwnProperty(a)&&this.writeLayout(e,a,i);return Qa.enc(t,i),bt.enc(t,null),t.ui8array()}writeLayout(r,e,t){let i=r[e],a=qe();if(this.writeStreamDesc(e,a),Kt(i))F.enc(a,Jo);else if(zr(i))F.enc(a,Yo);else if(F.enc(a,zo),i.priority!==void 0?F.enc(a,i.priority):bt.enc(a,null),i.width!==void 0&&i.height!==void 0?(F.enc(a,Math.round(i.width)),F.enc(a,Math.round(i.height))):(bt.enc(a,null),bt.enc(a,null)),i.fit!==void 0)switch(i.fit){case"cv":F.enc(a,Xo);break;case"cn":F.enc(a,Zo);break;default:bt.enc(a,null)}else bt.enc(a,null);t.push(a.ui8array())}writeStreamDesc(r,e){if(this.participantIdRegistry){let t=this.participantIdRegistry.getCompactId(r);if(t!==void 0){F.enc(e,t);return}}Xa.enc(e,r)}serializePerfStatReport(r,e){let t=qe();return F.enc(t,en),F.enc(t,Ze),F.enc(t,r),F.enc(t,e.framesDecoded),F.enc(t,e.framesReceived),t.ui8array()}serializeSharingStatReport(r,e){let t=qe();return F.enc(t,Ho),F.enc(t,Ze),F.enc(t,r),F.enc(t,e.minDelay),F.enc(t,e.maxDelay),F.enc(t,e.avgDelay),F.enc(t,e.largeDelayDuration),t.ui8array()}serializeRequestAsr(r,e){let t=qe();return F.enc(t,Go),F.enc(t,Ze),F.enc(t,r),Jr.enc(t,e.request),t.ui8array()}serializeNetworkStatReport(r,e){let t=qe();return F.enc(t,Wo),F.enc(t,Ze),F.enc(t,r),F.enc(t,e.timestamp),F.enc(t,e.sendBitrate),t.ui8array()}serializeEnableVideoSuspend(r,e){let t=qe();return F.enc(t,Ko),F.enc(t,Ze),F.enc(t,r),Jr.enc(t,e.enabled),t.ui8array()}serializeEnableVideoSuspendSuggest(r,e){let t=qe();return F.enc(t,$o),F.enc(t,Ze),F.enc(t,r),Jr.enc(t,e.enabled),t.ui8array()}serializeChangeSimulcast(r,e){let t=qe();F.enc(t,qo),F.enc(t,Ze),F.enc(t,r);let i=e.simulcastInfo.streams.length;F.enc(t,e.mediaSource),F.enc(t,i);for(let a of e.simulcastInfo.streams)Xa.enc(t,a.rid),F.enc(t,a.width),F.enc(t,a.height),F.enc(t,a.fps),F.enc(t,a.bitrate/1e3);return t.ui8array()}async deserializeCommandResponse(r){let e;if(r instanceof Blob){let o="arrayBuffer"in Blob.prototype?await r.arrayBuffer():await Aa(r);e=ir(o)}else e=ir(r);let t=F.dec(e),i=F.dec(e);if(i!==Ze){c.warn("Unsupported version for command type: "+t+", version "+i);return}if(F.dec(e)!==Qo){c.warn("Error code: "+t+"received for command type: "+t+", version "+i);return}switch(t){case Za:return this.deserializeUpdateDisplayLayoutResponse(e);case en:return this.deserializeReportPerfStatResponse(e);default:c.warn("unsupported command response commandType: "+t);return}}deserializeUpdateDisplayLayoutResponse(r){let e=F.dec(r),t=Qa.dec(r),i={};return t.forEach(a=>{let o=ir(a),s=jo.dec(o);if(typeof s=="string")i[s]=F.dec(o);else{let l=s,p=$e(this.participantIdRegistry?.getStreamDescription(l));i[p]=F.dec(o)}}),{type:"response",sequence:e,response:O.UPDATE_DISPLAY_LAYOUT.toString(),errorCodeByParticipantId:i}}deserializeReportPerfStatResponse(r){let e=F.dec(r),t=F.dec(r);return{type:"response",sequence:e,response:O.REPORT_PERF_STAT.toString(),estimatedPerformanceIndex:t}}};var tn=(i=>(i.START="start",i.ACCEPT="accept",i.JOIN="join",i.RETRY="retry",i))(tn||{}),et=tn;var rn=(t=>(t.NOTIFICATION="NOTIFICATION",t.FAILED="FAILED",t.RECONNECT="RECONNECT",t))(rn||{}),Ee=rn;var an=(g=>(g.TRANSMITTED_DATA="transmitted-data",g.ACCEPTED_CALL="accepted-call",g.HUNGUP="hungup",g.PARTICIPANT_ADDED="participant-added",g.PARTICIPANT_JOINED="participant-joined",g.CLOSED_CONVERSATION="closed-conversation",g.MEDIA_SETTINGS_CHANGED="media-settings-changed",g.PARTICIPANT_STATE_CHANGED="participant-state-changed",g.PARTICIPANTS_STATE_CHANGED="participants-state-changed",g.RATE_CALL_DATA="rate-call-data",g.FEATURE_SET_CHANGED="feature-set-changed",g.TOPOLOGY_CHANGED="topology-changed",g.PRODUCER_UPDATED="producer-updated",g.CONSUMER_ANSWERED="consumer-answered",g.MULTIPARTY_CHAT_CREATED="multiparty-chat-created",g.FORCE_MEDIA_SETTINGS_CHANGE="force-media-settings-change",g.SETTINGS_UPDATE="settings-update",g.VIDEO_QUALITY_UPDATE="video-quality-update",g.REGISTERED_PEER="registered-peer",g.SWITCH_MICRO="switch-micro",g.RECORD_STARTED="record-started",g.RECORD_STOPPED="record-stopped",g.REALLOC_CON="realloc-con",g.AUDIO_ACTIVITY="audio-activity",g.SPEAKER_CHANGED="speaker-changed",g.STALLED_ACTIVITY="stalled-activity",g.CHAT_MESSAGE="chat-message",g.CUSTOM_DATA="custom-data",g.ROLES_CHANGED="roles-changed",g.MUTE_PARTICIPANT="mute-participant",g.PIN_PARTICIPANT="pin-participant",g.OPTIONS_CHANGED="options-changed",g.NETWORK_STATUS="network-status",g.PARTICIPANT_SOURCES_UPDATE="participant-sources-update",g.PROMOTE_PARTICIPANT="promote-participant",g.CHAT_ROOM_UPDATED="chat-room-updated",g.PROMOTION_APPROVED="promotion-approved",g.JOIN_LINK_CHANGED="join-link-changed",g.FEEDBACK="feedback",g.MOVIE_UPDATE_NOTIFICATION="movie-update-notification",g.MOVIE_SHARE_STARTED="movie-share-started",g.MOVIE_SHARE_STOPPED="movie-share-stopped",g.URL_SHARING_INFO_UPDATED="url-sharing-info-updated",g.ROOM_UPDATED="room-updated",g.ROOMS_UPDATED="rooms-updated",g.ROOM_PARTICIPANTS_UPDATED="room-participants-updated",g.FEATURES_PER_ROLE_CHANGED="features-per-role-changed",g.PARTICIPANT_ANIMOJI_CHANGED="participant-animoji-changed",g.ASR_STARTED="asr-started",g.ASR_STOPPED="asr-stopped",g.DECORATIVE_PARTICIPANT_ID_CHANGED="decorative-participant-id-changed",g.VIDEO_SUSPEND_SUGGEST="video-suspend-suggest",g))(an||{}),N=an;import{WebTransportPolyfill as rs}from"@fails-components/webtransport";import*as xe from"fflate";var es=63n,ts=16383n;var is=4611686018427387903n,ar=class{encode(r){let e=typeof r=="number"?BigInt(r):r;if(e<=es)return new Uint8Array([Number(e)]);if(e<=ts)return new Uint8Array([64|Number(e>>8n),Number(e&0xffn)]);if(e<=BigInt(1073741823))return new Uint8Array([128|Number(e>>24n),Number(e>>16n&0xffn),Number(e>>8n&0xffn),Number(e&0xffn)]);if(e<=is)return new Uint8Array([192|Number(e>>56n),Number(e>>48n&0xffn),Number(e>>40n&0xffn),Number(e>>32n&0xffn),Number(e>>24n&0xffn),Number(e>>16n&0xffn),Number(e>>8n&0xffn),Number(e&0xffn)]);throw new RangeError("Number is too large to encode using varint")}},nr=class{decode(r){let e=this.getNumBytesForLengthInteger(r);if(e<0)throw new Error("Invalid length prefix");if(r.length<e)throw new Error("Not enough data to decode integer");let t=BigInt(0);switch(e){case 1:t=BigInt(r[0]&63);break;case 2:t=BigInt(r[0]&63)<<8n|BigInt(r[1]);break;case 4:t=BigInt(r[0]&63)<<24n|BigInt(r[1])<<16n|BigInt(r[2])<<8n|BigInt(r[3]);break;case 8:t=BigInt(r[0]&63)<<56n|BigInt(r[1])<<48n|BigInt(r[2])<<40n|BigInt(r[3])<<32n|BigInt(r[4])<<24n|BigInt(r[5])<<16n|BigInt(r[6])<<8n|BigInt(r[7]);break}return t}getNumBytesForLengthInteger(r){let e=r[0]&192;return e===0?1:e===64?2:e===128?4:e===192?8:-1}};var or=class{constructor(r){this.encoder=new TextEncoder,this.lengthEncoder=new ar,this.compression=r??null}encode(r){let e=this.encoder.encode(r);e=this.compress(e);let t=this.lengthEncoder.encode(e.length),i=new Uint8Array(t.length+e.length);return i.set(t),i.set(e,t.length),i}compress(r){if(!this.compression)return r;switch(this.compression){case"gzip":return xe.gzipSync(r);case"deflate":return xe.zlibSync(r);case"deflate-raw":return xe.deflateSync(r);default:return r}}},sr=class{constructor(r){this.decoder=new TextDecoder,this.lengthDecoder=new nr,this.compression=r??null,this.buffer=new Uint8Array(0),this.expectedLength=null,this.offset=0}decode(r){let e=[];for(this.buffer=new Uint8Array([...this.buffer,...r]);this.buffer.length>0;){if(this.expectedLength===null){if(this.expectedLength=this.readLength(this.buffer),this.expectedLength===null)return e;this.offset=this.lengthPrefixLength}if(this.buffer.length-this.offset<this.expectedLength)return e;let t=this.buffer.subarray(this.offset,this.offset+this.expectedLength);t=this.decompress(t),e.push(this.decoder.decode(t)),this.buffer=this.buffer.subarray(this.offset+this.expectedLength),this.expectedLength=null,this.offset=0}return e}readLength(r){if(r.length===0)return 0;if(this.lengthPrefixLength=this.lengthDecoder.getNumBytesForLengthInteger(r),this.lengthPrefixLength<0)throw new Error("Invalid length prefix");return Number(this.lengthDecoder.decode(r.subarray(0,this.lengthPrefixLength)))}decompress(r){if(!this.compression)return r;switch(this.compression){case"gzip":return xe.gunzipSync(r);case"deflate":return xe.unzlibSync(r);case"deflate-raw":return xe.inflateSync(r);default:return r}}};var cr=class{constructor(r,e={}){this.stream=null;this.writer=null;this.reader=null;this.onopen=null;this.onmessage=null;this.onerror=null;this.onclose=null;this.readyState=WebSocket.CONNECTING;this.url=r,this.options=e,this.readyState=WebSocket.CONNECTING,this.compression=this.getCompressionTypeFromUrl(r),this.encoder=new or(this.compression),this.decoder=new sr(this.compression),this.connect()}getCompressionTypeFromUrl(r){let t=new URL(r).searchParams.get("compression");return null}async connect(){try{this.webTransport=new rs(this.url,{...this.options}),await this.webTransport.ready,c.debug("[WebTransport] WebTransport connected to "+this.url),this.stream=await this.webTransport.createBidirectionalStream(),this.writer=this.stream.writable.getWriter(),this.reader=this.stream.readable.getReader(),this.readyState=WebSocket.OPEN,this.onopen?.(new Event("open")),await this.readLoop()}catch(r){c.error("[WebTransport] WebTransport connection failed. This will cause fallback to WebSocket",r),this.readyState=WebSocket.CLOSED,this.onerror?.(new Event("error")),this.onclose?.(new CloseEvent("close",{code:1006,reason:"Connection Failed"}))}}async readLoop(){if(this.reader)try{for(;;){let{done:r,value:e}=await this.reader.read();if(r){this.close(1e3,"Stream Closed");break}e&&this.decoder.decode(e).forEach(i=>{this.onmessage?.(new MessageEvent("message",{data:i}))})}}catch(r){c.error("[WebTransport] Stream read failed",r),this.readyState=WebSocket.CLOSED,this.onerror?.(new Event("error"))}}async send(r){if(!this.writer){c.warn("[WebTransport] Attempt to send data before stream is ready");return}await this.writer.ready;try{let e=this.encoder.encode(r);await this.writer.write(e)}catch(e){c.error("[WebTransport] Failed to send data",e),this.onerror?.(new Event("error")),this.close(1006,"Failed to send data")}}close(r=1e3,e){if(!(this.readyState===WebSocket.CLOSED||this.readyState===WebSocket.CLOSING)){this.readyState=WebSocket.CLOSING;try{this.webTransport.close()}catch(t){c.warn("[WebTransport] already closed. Did we get a STOP_SENDING? ignore",t)}this.writer?.close(),this.reader?.cancel(),this.writer=null,this.reader=null,this.stream=null,this.readyState=WebSocket.CLOSED,this.onclose?.(new CloseEvent("close",{code:r,reason:e}))}}};var nn="open",on=[()=>d.producerScreenTrack,()=>d.videoTracksCount>0,()=>!0,()=>!0,()=>d.consumerScreenTrack,()=>!0,()=>d.movieShare,()=>d.useParticipantListChunk,()=>d.useRooms,()=>!!d.vmoji,()=>d.useCallsToContacts,()=>d.useChatRooms],as=10,ns=["service-unavailable","conversation-ended","invalid-token"],Te=class Te extends ei{constructor(){super(...arguments);this.socket=null;this.sequence=1;this.lastStamp=0;this.websocketCommandsQueue=[];this.datachannelCommandsQueue=[];this.incomingCache=[];this.responseHandlers={};this.reconnectCount=0;this.wtEndpoint=null;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="+Te._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 rr}static _getCapabilityFlags(){let e=0;for(let t=0;t<on.length;t++)on[t]()&&(e|=1<<t);return e.toString(16).toUpperCase()}get ready(){return this.socket!==null}setEndpoint(e){this.endpoint=e}setWebTransportEndpoint(e){this.wtEndpoint=e}setConversationId(e){this.conversationId=e}setParticipantIdRegistry(e){this.participantIdRegistry=e,this.producerCommandSerializationService.setParticipantIdRegistry(e)}setProducerNotificationDataChannel(e){this.producerNotificationDataChannel=e,this.producerNotificationDataChannel.onmessage=t=>{let i=this.participantIdRegistry?.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("[signaling] cannot parse message at producerCommandDataChannel",i)})},this._handleCommandsQueue(this.datachannelCommandsQueue)}useCommandDataChannel(e){this.producerCommandDataChannelEnabled=e}cleanup(){this.datachannelCommandsQueue=[],this.incomingCache=[]}async connect(e){return this.postfix+=`&clientType=${d.clientType}`,new Promise((t,i)=>{if(this.socket&&this.socket.readyState<WebSocket.CLOSING){T.log(I.SOCKET_ACTION,"already_opened"),i(Error("Socket already opened"));return}this.conversationResolve=a=>{t(a),this.conversationResolve=null,this.conversationReject=null},this.conversationReject=a=>{i(a),this.conversationResolve=null,this.conversationReject=null},this._connect(e,this.wtEndpoint!==null)})}async _send(e,t={},i=!0,a=0){if(t.participantId){let o=S.decomposeParticipantId(t.participantId),s=S.decomposeId(o.compositeUserId);t=Object.assign({},t,{participantId:s.id,participantType:s.type}),o.deviceIdx&&(t.deviceIdx=o.deviceIdx)}return this._sendRaw(e,t,i,a)}async _sendRaw(e,t={},i=!0,a=0){let o=s=>{if(this._isDataChannelCommand(e))this.datachannelCommandsQueue.push(s),this.producerCommandDataChannel?.readyState===nn&&this._handleCommandsQueue(this.datachannelCommandsQueue);else{if(!this.socket){T.log(I.SOCKET_ACTION,"not_opened"),c.warn("[signaling] socket is not opened"),s.reject(new Error(`Socket not opened [${e}]`),!0);return}this.socket.readyState>WebSocket.OPEN&&(T.log(I.SOCKET_ACTION,"invalid_state"),c.warn(`[signaling] 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,l)=>{let p=(m,C=!1)=>{!a||C?l(m):(c.debug("[signaling] resending a signaling message",e,u.sequence),a--,o(u))},u={sequence:this.sequence++,name:e,params:t,responseTimer:0,needResponse:i,resolve:s,reject:p};o(u)})}_isDataChannelCommand(e){return this.producerCommandDataChannelEnabled?e===O.UPDATE_DISPLAY_LAYOUT||e===O.REPORT_PERF_STAT||e===O.REPORT_SHARING_STAT||e===O.REQUEST_ASR||e===O.ENABLE_VIDEO_SUSPEND||e===O.ENABLE_VIDEO_SUSPEND_SUGGEST||e===O.REPORT_NETWORK_STAT||e===O.CHANGE_SIMULCAST:!1}getNextCommandSequenceNumber(){return this.sequence}async hangup(e){return this._send(O.HANGUP,{reason:e}).catch(()=>{})}async sendCandidate(e,t){return this._send(O.TRANSMIT_DATA,{participantId:e,data:{candidate:t}},!1)}async requestTestMode(e,t){return this._send(O.REQUEST_TEST_MODE,{consumer:e,producer:t})}async sendSdp(e,t,i){let a=Object.assign({sdp:t},i);return this._send(O.TRANSMIT_DATA,{participantId:e,data:a})}async acceptCall(e){return this._send(O.ACCEPT_CALL,{mediaSettings:e})}async changeMediaSettings(e){return this._send(O.CHANGE_MEDIA_SETTINGS,{mediaSettings:e},!0,as)}async changeParticipantState(e,t){let i={participantState:{state:e}};return t&&(i.participantId=t),this._sendRaw(O.CHANGE_PARTICIPANT_STATE,i)}async putHandsDown(){return this._send(O.PUT_HANDS_DOWN)}async addParticipant(e,t){return this._send(O.ADD_PARTICIPANT,{externalIds:e,...t})}async addParticipantLegacy(e,t){return this._send(O.ADD_PARTICIPANT,{participantIds:e,...t})}async removeParticipant(e,t=!1){return this._send(O.REMOVE_PARTICIPANT,{participantId:e,ban:t})}async allocateConsumer(e,t){let i={capabilities:t};return e&&(i.description=e.sdp),this._send(O.ALLOCATE_CONSUMER,i)}async acceptProducer(e,t){let i={description:e.sdp};return t&&(i.ssrcs=t),this._send(O.ACCEPT_PRODUCER,i)}async changePriorities(e){return this._send(O.CHANGE_STREAM_PRIORITIES,{typedPriorities:e}).catch(()=>{})}async updateDisplayLayout(e){return this._send(O.UPDATE_DISPLAY_LAYOUT,e)}async addMovie(e){return this._send(O.ADD_MOVIE,e)}async updateMovie(e){return this._send(O.UPDATE_MOVIE,e)}async removeMovie(e){return this._send(O.REMOVE_MOVIE,e)}startUrlSharing(e){return this._send(O.START_URL_SHARING,{sharedUrl:e})}stopUrlSharing(){return this._send(O.STOP_URL_SHARING)}async updateRooms(e,t){return this._send(O.UPDATE_ROOMS,{rooms:e,assignRandomly:t})}async activateRooms(e,t){return this._send(O.ACTIVATE_ROOMS,{roomIds:e,deactivate:t})}async switchRoom(e,t){return this._sendRaw(O.SWITCH_ROOM,{toRoomId:e,participantId:t})}async getRooms(e){return this._sendRaw(O.GET_ROOMS,{withParticipants:e})}async removeRooms(e){return this._send(O.REMOVE_ROOMS,{roomIds:e})}async startStream(e){return this._send(O.RECORD_START,e)}async stopStream(e={roomId:null}){return this._send(O.RECORD_STOP,e)}async publishStream(e={roomId:null}){return this._send(O.RECORD_PUBLISH,e)}async recordSetConf(e={hideParticipantCount:!1,roomId:null}){let t={options:{hideParticipantCount:e.hideParticipantCount},roomId:e.roomId};return e.king&&(t.king=e.king),e.pawns?.length&&(t.pawns=e.pawns.join(",")),this._send(O.RECORD_SET_CONF,t)}async getRecordStatus(){return this._send(O.RECORD_GET_STATUS)}async switchTopology(e,t=!1){return this._send(O.SWITCH_TOPOLOGY,{topology:e,force:t})}async requestRealloc(){return this._send(O.REQUEST_REALLOC)}async reportPerfStat(e){return this._send(O.REPORT_PERF_STAT,e)}async reportSharingStat(e){return this._send(O.REPORT_SHARING_STAT,e,!1)}async reportNetworkStat(e){return this._send(O.REPORT_NETWORK_STAT,e,!1)}async chatMessage(e,t=null){return this._send(O.CHAT_MESSAGE,{message:e,participantId:t})}async chatHistory(e){return this._send(O.CHAT_HISTORY,{count:e})}async customData(e,t){return this._send(O.CUSTOM_DATA,{data:e,participantId:t})}async grantRoles(e,t,i){let a={participantId:e,roles:t};return i&&(a.revoke=!0),this._sendRaw(O.GRANT_ROLES,a)}async muteParticipant(e,t,i,a=null){return this._sendRaw(O.MUTE_PARTICIPANT,{participantId:e,muteStates:t,requestedMedia:i,roomId:a})}async enableFeatureForRoles(e,t){return this._sendRaw(O.ENABLE_FEATURE_FOR_ROLES,{feature:e,roles:t})}async pinParticipant(e,t,i){let a={participantId:e,roomId:i};return t&&(a.unpin=!0),this._sendRaw(O.PIN_PARTICIPANT,a)}async updateMediaModifiers(e){return this._send(O.UPDATE_MEDIA_MODIFIERS,{mediaModifiers:e})}async enableVideoSuspend(e){return this._send(O.ENABLE_VIDEO_SUSPEND,{enabled:e},!1)}async enableVideoSuspendSuggest(e){return this._send(O.ENABLE_VIDEO_SUSPEND_SUGGEST,{enabled:e},!1)}async changeSimulcast(e){return this._send(O.CHANGE_SIMULCAST,e,!1)}async changeOptions(e){return this._send(O.CHANGE_OPTIONS,{options:e})}async getWaitingHall(e=null,t,i=!1){let a={};return e&&(a.fromId=e),t&&(a.count=t),i&&(a.backward=i),this._send(O.GET_WAITING_HALL,a)}async promoteParticipant(e,t=!1){let i={};return e&&(i.participantId=e),t&&(i.demote=t),this._sendRaw(O.PROMOTE_PARTICIPANT,i)}async requestPromotion(e=!1){let t={};return e&&(t.unrequest=e),this._send(O.REQUEST_PROMOTION,t)}async acceptPromotion(e=!1){let t={};return e&&(t.reject=e),this._send(O.ACCEPT_PROMOTION,t)}async feedback(e){return this._sendRaw(O.FEEDBACK,{key:e})}async getHandQueue(){return this._send(O.GET_HAND_QUEUE)}close(){this.socket&&this.socket.readyState<WebSocket.CLOSING&&this._closeSocket(),this._stopWaitConnectionMessage(),this._stopDoctor(),clearTimeout(this.reconnectTimer)}readyToSend(e=!0){this.listenersReady=e,this._handleCachedMessages()}async getParticipantListChunk(e){return this._send(O.GET_PARTICIPANT_LIST_CHUNK,e)}async getParticipants(e){return this._send(O.GET_PARTICIPANTS,{externalIds:e})}getPeerId(){return this.peerId}async startAsr(e){return this._send(O.ASR_START,e)}async stopAsr(e){return this._send(O.ASR_STOP,e)}async requestAsr(e){return this._send(O.REQUEST_ASR,{request:e},!1)}_connect(e,t){if(this.socket&&this.socket.readyState<WebSocket.CLOSING)return;let i="";e&&(i+=`&tgt=${e}`),e===et.RETRY&&this.lastStamp&&(i+=`&recoverTs=${this.lastStamp}`),i=a(i),c.debug("[signaling] connecting to "+this.endpoint+this.postfix+i),this.socket=t?new cr(this.wtEndpoint+this.postfix+i):new WebSocket(this.endpoint+this.postfix+i),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 a(o){if(!d.useParticipantListChunk)return o;let s=d.participantListChunkInitIndex;o+=`&partIdx=${s}`;let l=d.participantListChunkInitCount;return l!==null&&(o+=`&partCount=${l}`),o}}_disconnect(e){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(e),this.socket=null),this._stopWaitConnectionMessage(),this._stopDoctor(),clearTimeout(this.reconnectTimer)}_onOpen(){c.debug("[signaling] socket opened"),T.log(I.SOCKET_ACTION,"opened"),this._waitConnectionMessage(),this._startDoctor()}_onMessage(e){if(this._startDoctor(),e.data==="ping"){v.onSignalingMessage(e.data),this.socket&&this.socket.readyState===WebSocket.OPEN&&this.socket.send("pong");return}try{let t=JSON.parse(e.data);v.onSignalingMessage(t),this._handleMessage(t)}catch(t){T.log(I.SOCKET_ACTION,"parse_error"),c.error("[signaling] unable to parse message",t,e.data)}}_handleMessage(e){switch(e.type){case"notification":e.notification==="connection"?(c.debug("[signaling] 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(Ee.RECONNECT,e),e.conversation.topology&&this._triggerEvent(Ee.NOTIFICATION,{type:"notification",notification:N.TOPOLOGY_CHANGED,topology:e.conversation.topology})),this.lastStamp&&this._handleCachedMessages(),e.recoverMessages?.forEach(t=>this._handleMessage(t)),this._handleCommandsQueue(this.websocketCommandsQueue)):!this.connected||!this.listenersReady?this.incomingCache.push(e):this._triggerEvent(Ee.NOTIFICATION,e);break;case"response":this._handleCommandResponse(!0,e);break;case"error":this._handleErrorMessage(e);break;default:T.log(I.SOCKET_ACTION,"unknown_message"),c.warn("[signaling] unhandled message",e)}this.lastStamp=e.stamp||this.lastStamp}_handleErrorMessage(e){T.log(I.SOCKET_ACTION,`error-${e.error}`);let t=e.error?ns.includes(e.error):!1;switch(c.debug(`[signaling] error message [${e.sequence}]`,e),e.sequence&&this.responseHandlers[e.sequence]&&this._handleCommandResponse(!1,e),e.error){case"service-unavailable":this._reconnect();break;case"conversation-ended":this.conversationReject?this.conversationReject(new j(e.reason||te.SIGNALING_FAILED,{message:`Conversation ended: ${e.error}`,remote:!0})):this._triggerEvent(Ee.NOTIFICATION,{notification:N.CLOSED_CONVERSATION,reason:e.reason});break;case"participant-not-found":case"invalid-token":this._throwError(new Error(`Signaling error: ${e.error}`));break;default:if(!t)break;this.connected?this._throwError(new Error(`Signaling error: ${e.error}`)):e.sequence||(this.conversationReject?.(new j(e.reason||te.SIGNALING_FAILED,{message:`Unable to connect to the signaling: ${e.error}`,remote:!0})),this._closeSocket())}}_handleCachedMessages(){let e=[...this.incomingCache];for(this.incomingCache=[];e.length>0;){let t=e.shift();this._handleMessage(t)}}_throwError(e){this._triggerEvent(Ee.FAILED,e)}_onError(e){T.log(I.SOCKET_ACTION,"error"),c.error("[signaling] signaling error",e)}_onClose(e){T.log(I.SOCKET_ACTION,"closed"),c.debug("[signaling] connection closed",{code:e.code,reason:e.reason}),this.connected=!1,this._stopDoctor(),this.socket&&this.reconnectCount++<Te.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(Te.RECONNECT_MAX_DELAY,Te.RECONNECT_DELAY*Math.pow(2,this.reconnectCount-1));c.log(`[signaling] reconnect websocket after ${e}ms (${this.reconnectCount})`),T.log(I.SOCKET_ACTION,"reconnect"),this.reconnectTimer=window.setTimeout(this._connect.bind(this,et.RETRY,!1),e)}_handleCommandResponse(e,t){if(!this.responseHandlers.hasOwnProperty(t.sequence))return;let i=this.responseHandlers[t.sequence];window.clearTimeout(i.responseTimer),c.debug(`[signaling] command response [${t.sequence}]`,t),e?(delete this.responseHandlers[t.sequence],i.resolve(t)):t.type==="error"?(delete this.responseHandlers[t.sequence],T.log(I.SOCKET_ACTION,"response-error"),i.reject(new Error(t.error||`Response error [${i.name}]`),!0)):this.socket?.readyState===WebSocket.OPEN?(delete this.responseHandlers[t.sequence],T.log(I.SOCKET_ACTION,"response-timeout"),i.reject(new Error(t.error||`Response timeout [${i.name}]`))):i.responseTimer=window.setTimeout(()=>this._handleCommandResponse(e,t),Te.WAIT_RESPONSE_DELAY)}_handleCommandsQueue(e){for(;e.length>0;){let t=e.shift();if(c.debug(`[signaling] command send [${t.sequence}]`,`'${t.name}'`,t.params),this._isDataChannelCommand(t.name)){if(this.producerCommandDataChannel?.readyState!==nn){t.reject(new Error(`Invalid data channel state: ${this.producerCommandDataChannel?.readyState}`));return}this._startResponseTimer(t);let i=this._serializeBinary(t);i!==null&&this.producerCommandDataChannel.send(i)}else{if(!this.socket||this.socket.readyState!==WebSocket.OPEN){t.reject(new Error("Invalid state or socket already closed"));continue}this._startResponseTimer(t),this.socket.send(this._serializeJson(t))}}}_startResponseTimer(e){if(!e.needResponse){e.resolve({type:"response",sequence:e.sequence,response:e.name});return}e.responseTimer=window.setTimeout(()=>this._handleCommandResponse(!1,{response:e.name,sequence:e.sequence,type:"timeout"}),Te.WAIT_RESPONSE_DELAY),this.responseHandlers[e.sequence]=e}_serializeBinary(e){switch(e.name){case O.UPDATE_DISPLAY_LAYOUT:return this.producerCommandSerializationService.serializeUpdateDisplayLayout(e.sequence,e.params);case O.REPORT_PERF_STAT:return this.producerCommandSerializationService.serializePerfStatReport(e.sequence,e.params);case O.REPORT_SHARING_STAT:return this.producerCommandSerializationService.serializeSharingStatReport(e.sequence,e.params);case O.REQUEST_ASR:return this.producerCommandSerializationService.serializeRequestAsr(e.sequence,e.params);case O.REPORT_NETWORK_STAT:return this.producerCommandSerializationService.serializeNetworkStatReport(e.sequence,e.params);case O.ENABLE_VIDEO_SUSPEND:return this.producerCommandSerializationService.serializeEnableVideoSuspend(e.sequence,e.params);case O.ENABLE_VIDEO_SUSPEND_SUGGEST:return this.producerCommandSerializationService.serializeEnableVideoSuspendSuggest(e.sequence,e.params);case O.CHANGE_SIMULCAST:return this.producerCommandSerializationService.serializeChangeSimulcast(e.sequence,e.params)}return c.warn("[signaling] cannot get binary data for data channel command: "+e.name),null}_serializeJson(e){let t;e.name===O.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 a in t)t.hasOwnProperty(a)&&(i[a]=za(t[a]));return{layouts:i}}_waitConnectionMessage(){this.connectionMessageWaitTimer=window.setTimeout(()=>{this.conversationReject&&this.conversationReject(new j(te.SIGNALING_FAILED,{message:"Unable to connect to the signaling: connection timeout",remote:!0}))},Te.WAIT_CONNECTION_DELAY)}_stopWaitConnectionMessage(){window.clearTimeout(this.connectionMessageWaitTimer),this.connectionMessageWaitTimer=0}_startDoctor(){this._stopDoctor(),this.doctorTimer=window.setTimeout(()=>{this.wtEndpoint!==null?(c.warn("[signaling] socket is dead. Fallback to WebSocket. Trying to connect"),this.wtEndpoint=null):c.warn("[signaling] socket is dead, trying to reconnect"),this._disconnect(4e3),this._connect(et.RETRY,!1)},Te.WAIT_MESSAGE_DELAY)}_stopDoctor(){window.clearTimeout(this.doctorTimer),this.doctorTimer=0}};Te.RECONNECT_DELAY=d.signalingReconnectDelay,Te.RECONNECT_MAX_DELAY=d.signalingReconnectMaxDelay,Te.RECONNECT_MAX_COUNT=d.signalingReconnectMaxCount,Te.WAIT_CONNECTION_DELAY=d.waitConnectionDelay,Te.WAIT_RESPONSE_DELAY=d.waitResponseDelay,Te.WAIT_MESSAGE_DELAY=d.waitMessageDelay;var $t=Te;var sn=(t=>(t.INCOMING="INCOMING",t.OUTGOING="OUTGOING",t.JOINING="JOINING",t))(sn||{}),st=sn;var cn=(t=>(t.USER="USER",t.GROUP="GROUP",t.CHAT="CHAT",t))(cn||{}),tt=cn;var dn=(e=>(e.ATTENDEE="ATTENDEE",e.HAND_UP="HAND_UP",e))(dn||{}),Yr=dn;var ln=(t=>(t.ADD_PARTICIPANT="ADD_PARTICIPANT",t.RECORD="RECORD",t.MOVIE_SHARE="MOVIE_SHARE",t))(ln||{}),Qr=ln;var pn=(o=>(o.REQUIRE_AUTH_TO_JOIN="REQUIRE_AUTH_TO_JOIN",o.AUDIENCE_MODE="AUDIENCE_MODE",o.WAITING_HALL="WAITING_HALL",o.ASR="ASR",o.FEEDBACK="FEEDBACK",o.RECURRING="RECURRING",o))(pn||{}),qt=pn;function un(n,r){if(n.length!==r.length)return!1;for(let e of n)if(!r.includes(e))return!1;return!0}function mn(n,r){let e=new Set(n);for(let[t,i]of Object.entries(r))i?e.add(t):e.delete(t);return Array.from(e)}var hn=(t=>(t.UNMUTE="UNMUTE",t.MUTE="MUTE",t.MUTE_PERMANENT="MUTE_PERMANENT",t))(hn||{}),Oe=hn;var _n=(i=>(i.CALLED="CALLED",i.ACCEPTED="ACCEPTED",i.REJECTED="REJECTED",i.HUNGUP="HUNGUP",i))(_n||{}),z=_n;var gn=(i=>(i.UPDATE="UPDATE",i.REMOVE="REMOVE",i.ACTIVATE="ACTIVATE",i.TIMEOUT="TIMEOUT",i))(gn||{}),mi=gn;var fn=(e=>(e.AUDIO_MIX="audio-mix",e.PARTICIPANT_AGNOSTIC_TRACK_PREFIX="pat",e))(fn||{}),je=fn;var Sn=(e=>(e.NO_AVAILABLE_TRACKS="no-available-tracks",e.UNKNOWN_ERROR="unknown-error",e))(Sn||{}),vn=Sn;function In(n){switch(n){case 1:return"no-available-tracks";default:return"unknown-error"}}var En=(e=>(e.CREATOR="CREATOR",e.ADMIN="ADMIN",e))(En||{}),ct=En;function hi(n,r){if(n.length!==r.length)return!1;for(let e of n)if(!r.includes(e))return!1;return!0}var Xr=(t=>(t.USER="USER",t.ANONYM="ANONYM",t.GROUP="GROUP",t))(Xr||{}),$;(u=>{function n(m){return m.length?typeof m[0]=="object"?m:m.map(C=>r(C)):[]}u.fromIds=n;function r(m,C="USER",k=0){return{id:m,type:C,deviceIdx:k}}u.fromId=r;function e(m,C=!0){let k=C?m.decorativeExternalUserId:m.externalId,D=m.deviceIdx??0;if(k)return t(k,D)}u.fromSignalingParticipant=e;function t(m,C=0){return{id:m.id,type:m.type==="ANONYM"?"ANONYM":"USER",deviceIdx:C}}u.fromSignaling=t;function i(m){return m.id}u.toSignaling=i;function a(m){let C=m.deviceIdx||0;return`{"id":"${m.id}","type":"${m.type}","deviceIdx":${C}}`}u.toString=a;function o(m,C="USER",k=0){return a(r(m,C,k))}u.fromIdToString=o;function s(m){try{return JSON.parse(m)}catch{throw new Error(`Failed to parse ExternalId from string '${m}'`)}}u.fromString=s;function l(m,C){return m.id===C.id&&m.type===C.type&&m.deviceIdx===C.deviceIdx}u.compare=l;function p(m){return m?.deviceIdx||0}u.getDeviceIdx=p})($||($={}));var{isObject:Tn,isObjectsEquals:os}=S;function Zr(n,r){return n===null||r===null?n===null&&r===null:n.maxDimension!==r.maxDimension||n.maxBitrateK!==r.maxBitrateK||n.maxFramerate!==r.maxFramerate||n.degradationPreference!==r.degradationPreference||n.scalabilityMode!==r.scalabilityMode||Tn(n.bitrates)&&Tn(r.bitrates)&&!os(n.bitrates,r.bitrates,!0)?!1:n.bitrates===r.bitrates}function dr(n,r){return!(!Zr(n.camera,r.camera)||!Zr(n.screenSharing,r.screenSharing))}function ea(n,r){return{camera:Object.assign({},n.camera,r.camera),screenSharing:Object.assign({},n.screenSharing,r.screenSharing)}}function Rn(n){try{return btoa(JSON.stringify(n))}catch(r){c.warn("WaitingParticipant: failed convert to string",n,r)}return null}function Cn(n){try{return JSON.parse(atob(n))}catch(r){c.warn("WaitingParticipant: failed convert from string",n,r)}return null}var lr=(n,r)=>S.objectReduce(n,(e,t,i)=>(t===r&&e.push(i),e),[]);function yn(n){if(n.conversation?.muteStates)return n.conversation.muteStates;if(n.muteState&&n.muteOptions)return n.muteOptions.reduce((r,e)=>(r[e]=n.muteState,r),{})}function ss(n,r){switch(n){case ae.AUDIO:return!!r.isAudioEnabled;case ae.AUDIO_SHARING:return!!r.isAudioSharingEnabled;case ae.VIDEO:return!!r.isVideoEnabled;case ae.SCREEN_SHARING:return!!r.isFastScreenSharingEnabled||!!r.isScreenSharingEnabled;default:return!1}}function Pn(n,r){return S.objectReduce(n,(e,t,i)=>{switch(t){case Oe.MUTE:case Oe.MUTE_PERMANENT:{ss(i,r)||(e[i]=t);break}default:e[i]=t;break}return e},{})}function bn(n){let{muteStates:r={},mediaSettings:e}=n;return Pn(r,e)}function Mn(n,r){let e=n.conversation.participants.find(i=>S.comparePeerId(i.peerId,n.peerId));if(!e)return r;let{mediaSettings:t}=e;return Pn(r,t)}var zt=class{constructor(r){this._fixNoPacketsApplied=!1;this._fixNoPacketsChecked=!1;this._fixTooManyPacketsApplied=!1;this._fixTooManyPacketsSucceeded=!1;this._fixTooManyPacketsFailed=!1;this._toggleAudioPromise=null;this._fixNoPacketsAppliedVideo=!1;this._mediaSource=r}_fixAudioDeviceNoPackets(r){if(!(this._fixNoPacketsApplied&&this._fixNoPacketsChecked)){if(this._fixNoPacketsApplied&&!this._fixNoPacketsChecked){this._fixNoPacketsChecked=!0,T.log(I.ERROR,`audio_device_recover_${r.bandwidth?"success":"fail"}`);return}!this._fixNoPacketsApplied&&!r.bandwidth&&(this._fixNoPacketsApplied=!0,T.log(I.ERROR,"audio_device_recover"),c.log("[AudioFix] Trying to fix RV (no packets)"),this._toggleAudioPromise=this._mediaSource.toggleAudio(y.getMicrophonePermissionState()!=="denied"))}}_fixAudioDeviceTooManyPackets(r){if(this._fixTooManyPacketsSucceeded||this._fixTooManyPacketsFailed)return;let e=75,t=Date.now();if(!this._lastPacketsSentTime)r.packetsSent>0&&(this._lastPacketsSentTime=t,this._lastPacketsSent=r.packetsSent);else if(t-this._lastPacketsSentTime>500){let i=(r.packetsSent-this._lastPacketsSent)*1e3/(t-this._lastPacketsSentTime);this._lastPacketsSentTime=t,this._lastPacketsSent=r.packetsSent,this._fixTooManyPacketsApplied?i>e?(c.log("[AudioFix] Failed to fix RV"),T.log(I.ERROR,"audio_device_recover_rv_fail"),this._fixTooManyPacketsFailed=!0):t-this._fixTooManyPacketsTime>6e4&&(c.log("[AudioFix] Fixed RV"),T.log(I.ERROR,"audio_device_recover_rv_success"),this._fixTooManyPacketsSucceeded=!0):i>e&&(this._fixTooManyPacketsApplied=!0,T.log(I.ERROR,"audio_device_recover"),c.log("[AudioFix] Trying to fix RV (too many packets)"),this._mediaSource.toggleAudio(!0),this._fixTooManyPacketsTime=t)}}fix(r){if(!this._mediaSource)return;let e=r.find(t=>t.kind==="audio");e&&(this._fixAudioDeviceNoPackets(e),this._fixAudioDeviceTooManyPackets(e))}fixVideo(r){if(!this._mediaSource||this._fixNoPacketsAppliedVideo||!this._toggleAudioPromise)return;let e=r.find(t=>t.kind==="video");e&&!e.bandwidth&&(this._fixNoPacketsAppliedVideo=!0,this._toggleAudioPromise.then(()=>{this._mediaSource.getMediaSettings().isVideoEnabled&&this._mediaSource.toggleVideo(!0)}))}};var _i=class{constructor(r){this._output=null;this._volume=1;this._features={setSinkId:!!Audio.prototype.setSinkId};this._statFirstMediaReceived=r}add(r){this.destroy(),this._output={},this._output.audioTrack=r,this._initAudioElement()}remove(r){!this._output||this._output.audioTrack!==r||this.destroy()}get volume(){return this._volume}set volume(r){this._volume=Math.max(0,Math.min(1,r)),this._output&&this._output.audioElement&&(this._output.audioElement.volume=this._volume)}_initAudioElement(){if(d.muteMode||!this._output?.audioTrack)return;let r=y.browserName()!=="Safari"||y.isMobile(),e=document.createElement(r?"audio":"video");e.muted=!1,e.volume=this._volume,e.preload="auto";let t=()=>{c.warn("[audio] Error on play audio"),v.onAutoplayError()},i=o=>{e.srcObject=new MediaStream([o]),e.load();let s=e.play();s&&s.catch(t)},a=()=>{c.debug("[audio] Recover audio playback");let o=this._output?.audioTrack;o?i(o):c.warn("[audio] Broken audio track")};e.onpause=a,e.onstalled=a,e.onerror=a,e.onloadeddata=()=>{this._statFirstMediaReceived.measure()},i(this._output.audioTrack),this._output.audioElement=e}_stopAudioElement(){this._output?.audioElement&&(this._output.audioElement.pause(),this._output.audioElement.srcObject=null),this._output?.audioTrack?.stop()}destroy(){this._output&&(this._stopAudioElement(),this._output=null)}async changeOutput(){try{if(!this._features.setSinkId)throw new Error('Feature "setSinkId" is not supported');if(!this._output?.audioElement)return;let r=y.getSavedOutput();r&&await this._output.audioElement.setSinkId?.(r.deviceId)}catch(r){throw T.log(I.ERROR,"change_output"),c.error("[audio] Output change failed",r),r}}};var cs=90,ds=3,gi=class extends ee{constructor(){super(...arguments);this._lastMemoryStat={percent:0,bytes:0}}onRemoteDataStats(e,t){this._calcMemory(),e.inbound.rtps.map(i=>{let a=typeof i.userId=="string"&&t[i.userId]||null;i.userId=a?.externalId}),v.onStatistics(e,this._lastMemoryStat)}_calcMemory(){let e=window?.performance?.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>cs?c.warn(`High memory usage: ${t}% (${i} MiB)`):(!this._lastMemoryStat.percent||Math.abs(t-this._lastMemoryStat.percent)>=ds)&&(c.debug(`Memory usage: ${t}% (${i} MiB)`),this._lastMemoryStat.percent=t,this._lastMemoryStat.bytes=e.usedJSHeapSize)}};var ls=44100,Mt=class{constructor(r,e){this._analyser=null;this._gainNode=null;this._fftBins=null;this._mediaStreamSource=null;this._lastSmoothedLevel=0;this._trackId=r,this._track=e,this._stream=new MediaStream([e]);try{let t=y.getAudioContext();this._gainNode=t.createGain(),this._gainNode.gain.value=1e-5,this._gainNode.connect(t.destination),this._analyser=t.createAnalyser(),this._analyser.fftSize=1024,this._analyser.smoothingTimeConstant=0,this._analyser.connect(this._gainNode),this._fftBins=new Uint8Array(this._analyser.frequencyBinCount),this._mediaStreamSource=t.createMediaStreamSource(this._stream),this._mediaStreamSource.connect(this._analyser)}catch{}}get track(){return this._track}get trackId(){return this._trackId}_getBins(){if(!this._fftBins||!this._analyser)return new Uint8Array;this._analyser.getByteFrequencyData(this._fftBins);let r=ls/this._fftBins.length,e=Math.ceil(d.voiceParams.minFreq/r),t=Math.floor(d.voiceParams.maxFreq/r);return this._fftBins.subarray(e,t)}getLevel(){let r=this._getBins(),t=r.reduce((a,o)=>a+o,0)/r.length/255,i=this._lastSmoothedLevel*d.voiceParams.smoothing+t*(1-d.voiceParams.smoothing);return this._lastSmoothedLevel=i,{real:t,smoothed:i}}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),this._stream.removeTrack(this._track)}};var fi=class extends ee{constructor(e){super();this._detector=null;this._interval=null;let t=()=>{this._detector&&v.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 a=e.getSendAudioTrack();a&&this.init(a)};this.subscribe(e,"SOURCE_CHANGED",a=>{a.kind==="audio"&&e.getMediaSettings().isAudioEnabled&&i()}),this.subscribe(e,"SOURCE_READY",i),i()}init(e){this._stopDetector(),this._detector=new Mt("local",e.clone())}_stopDetector(){this._detector&&(this._detector.track.stop(),this._detector.destroy(),this._detector=null)}destroy(){this.unsubscribe(),this._interval&&(window.clearTimeout(this._interval),this._interval=null),this._stopDetector()}};var An=(o=>(o.producerNotification="producerNotification",o.producerCommand="producerCommand",o.consumerScreenShare="consumerScreenShare",o.producerScreenShare="producerScreenShare",o.asr="asr",o.animoji="animoji",o))(An||{}),it=An;var dt=class dt{constructor(){this._codecUsages=new Map;this.getCurrentTransportTopology=()=>{}}static create(r){let e=new dt;e.getCurrentTransportTopology=r,dt._instance=e}static reportUsage(r){let e=dt._instance,t=e?.getCurrentTransportTopology();if(!e||!t)return;let i=r.rtps.filter(a=>a.type==="outbound-rtp"&&!a.mid?.endsWith("s"));d.simulcast&&(i=i.reduce((a,o)=>{if(o.kind!=="video")return a.concat(o);let s=a.find(l=>l.kind==="video");return s?s.totalEncodeTime=(s.totalEncodeTime??0)+(o.totalEncodeTime??0):a.push(o),a},[])),i.forEach(a=>{let o=a.kind,s=a.mimeType;if((o==="audio"||o==="video")&&s){let l=a.encoderImplementation,p=[s,"encoder",l].filter(Boolean).join("/");e.saveUsage({kind:o,codecName:p,totalEncodeTime:(a.totalEncodeTime??0)*1e3,audioCodecParams:a.sdpFmtpLine,topology:t})}})}saveUsage({kind:r,codecName:e,totalEncodeTime:t,audioCodecParams:i,topology:a}){let o=this._codecUsages.get(r);if(o&&o.codecName!==e&&this.report(o),o&&o.codecName===e){this._codecUsages.set(r,{...o,totalEncodeTime:t,topology:a});return}this._codecUsages.set(r,{kind:r,codecName:e,audioCodecParams:i,totalEncodeTime:t,topology:a})}report(r){if(r.kind==="video"&&r.totalEncodeTime===0)return;let e={name:I.CODEC_USAGE,codec_implementation:r.codecName,value:r.totalEncodeTime,call_topology:r.topology==="DIRECT"?"D":"S"};r.audioCodecParams&&(e.string_value=r.audioCodecParams),T.logClientStats(e)}static destroy(){dt._instance?._destroy(),dt._instance=null}_destroy(){this._codecUsages.forEach(r=>{this.report(r)}),this._codecUsages.clear()}};dt._instance=null;var ze=dt;var At=class extends ee{constructor(e,t){super();this._state="IDLE";this._pc=null;this._signaling=e,this._mediaSource=t}getState(){return this._state||"IDLE"}};var Dn="videochat-epi",ps=5e3,us=500,lt=class extends ee{constructor(e,t,i=!1){super();this._previousPerfStatReportTimestamp=0;this._previousNetworkStatReportTimestamp=Date.now();this._previousCallStatReportTimestamp=Date.now();this._previousCallStatReport=null;this._screenShareStats=[];this._handleScreenSharingStat=e=>{this._screenShareStats.push(e)};this._handleTransportStateChanged=e=>{(this._directTopology&&e==="CONNECTED"||!this._directTopology&&e==="OPENED")&&(this._previousNetworkStatReportTimestamp=Date.now(),this._previousCallStatReportTimestamp=Date.now())};this._signaling=t,this._directTopology=i,this.subscribe(e,"REMOTE_DATA_STATS",this._handleStats.bind(this)),this.subscribe(e,"SCREEN_SHARING_STAT",this._handleScreenSharingStat.bind(this)),this.subscribe(e,"STATE_CHANGED",this._handleTransportStateChanged.bind(this))}destroy(){this.unsubscribe()}static getEstimatedPerformanceIndex(){try{let e=parseInt(localStorage.getItem(Dn)||"",10);return isNaN(e)?0:e}catch{return 0}}async _handleStats(e){if(!e.inbound||!e.inbound.rtps)return;let t=Date.now();!this._directTopology&&d.perfStatReportEnabled&&this._previousPerfStatReportTimestamp+ps<=t&&(await this.reportPerfStats(e),this._previousPerfStatReportTimestamp=t);let i=e.outbound.transport.local?.protocol==="tcp";!this._directTopology&&i&&this._previousNetworkStatReportTimestamp+us<=t&&(await this.reportNetworkStats(e),this._previousNetworkStatReportTimestamp=t),d.callStatReportEnabled&&this._previousCallStatReportTimestamp+d.statisticsInterval<=t&&(this._reportCallStats(e),this._previousCallStatReportTimestamp=t)}async reportPerfStats(e){let t=e.inbound.rtps.reduce((i,a)=>(a.kind==="video"&&(i.framesDecoded+=a.framesDecoded||0,i.framesReceived+=a.framesReceived||0),i),{framesDecoded:0,framesReceived:0});if(t.framesDecoded)try{let i=await this._signaling.reportPerfStat(t);localStorage.setItem(Dn,i.estimatedPerformanceIndex)}catch{}}async reportNetworkStats(e){let t={timestamp:e.outbound.transport.timestamp,sendBitrate:e.outbound.rtps.reduce((i,a)=>i+(a.bandwidth??0)*8,0)};if(t.timestamp)try{await this._signaling.reportNetworkStat(t)}catch{}}_reportCallStats(e){let t={call_topology:this._directTopology?"D":"S",stat_time_delta:0,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,packets_lost_video:0,packets_sent_video:0,packets_lost_audio:0,packets_sent_audio:0,freeze_count:0,total_freezes_duration:0,rtt:Math.round(e.inbound.transport.currentRoundTripTime*1e3),ss_freeze_count:0,ss_total_freezes_duration:0,local_address:kn(e.inbound.transport.local),local_connection_type:e.inbound.transport.local?.type,network_type:e.inbound.transport.local?.networkType,transport:e.inbound.transport.local?.protocol,remote_address:kn(e.inbound.transport.remote),remote_connection_type:e.inbound.transport.remote?.type};this._previousCallStatReport||(this._previousCallStatReport=Object.assign({},t));let i=!1,a=!1;for(e.inbound.rtps.reduce((p,u)=>(u.kind==="video"?(i=!0,u.framesReceived&&(p.jitter_video=p.jitter_video*p.inbound_video_count/(p.inbound_video_count+1)+u.jitter*1e3/(p.inbound_video_count+1),p.interframe_delay_variance=p.interframe_delay_variance*p.inbound_video_count/(p.inbound_video_count+1)+(u.interframeDelayVariance||0)*1e6/(p.inbound_video_count+1),p.inbound_video_count++),p.frames_dropped+=u.framesDropped||0,p.nack_sent+=u.nackCount,p.pli_sent+=u.pliCount,p.fir_sent+=u.firCount,p.freeze_count+=u.freezeCountDelta||0,p.total_freezes_duration+=u.totalFreezesDurationDelta||0):(a=!0,u.totalSamplesReceived&&(p.jitter_audio=p.jitter_audio*p.inbound_audio_count/(p.inbound_audio_count+1)+u.jitter*1e3/(p.inbound_audio_count+1),p.total_audio_energy=p.total_audio_energy*p.inbound_audio_count/(p.inbound_audio_count+1)+(u.totalAudioEnergy||0)/(p.inbound_audio_count+1),p.inbound_audio_count++),p.total_audio_samples_received+=u.totalSamplesReceived||0,p.inserted_audio_samples_for_deceleration+=u.insertedSamplesForDeceleration||0,p.removed_audio_samples_for_acceleration+=u.removedSamplesForAcceleration||0,p.concealed_audio_samples+=u.concealedSamples||0,p.silent_concealed_audio_samples+=u.silentConcealedSamples||0,p.audio_concealment_events+=u.concealmentEvents||0),p),t),e.outbound.rtps.reduce((p,u)=>(u.kind==="video"?(p.nack_received+=u.nackCount,p.pli_received+=u.pliCount,p.fir_received+=u.firCount,p.packets_sent_video+=u.packetsSent):p.packets_sent_audio+=u.packetsSent,p),t),e.remoteInbound.rtps.reduce((p,u)=>(u.kind==="video"?p.packets_lost_video+=u.packetsLost:p.packets_lost_audio+=u.packetsLost,p),t);this._screenShareStats.length;){let p=this._screenShareStats.pop();p?.freeze_duration&&(t.ss_freeze_count+=1,t.ss_total_freezes_duration+=p.freeze_duration)}let o={call_topology:t.call_topology,stat_time_delta:Math.max(0,Date.now()-this._previousCallStatReportTimestamp),nack_sent:Math.max(0,t.nack_sent-this._previousCallStatReport.nack_sent),nack_received:Math.max(0,t.nack_received-this._previousCallStatReport.nack_received),pli_sent:Math.max(0,t.pli_sent-this._previousCallStatReport.pli_sent),pli_received:Math.max(0,t.pli_received-this._previousCallStatReport.pli_received),fir_sent:Math.max(0,t.fir_sent-this._previousCallStatReport.fir_sent),fir_received:Math.max(0,t.fir_received-this._previousCallStatReport.fir_received),frames_dropped:Math.max(0,t.frames_dropped-this._previousCallStatReport.frames_dropped),rtt:Math.max(0,t.rtt)};if(navigator.hardwareConcurrency&&(o.cpu_hardware_concurrency=navigator.hardwareConcurrency),i&&!ur(t.jitter_video)&&(o.jitter_video=Math.round(t.jitter_video)),a&&!ur(t.jitter_audio)&&(o.jitter_audio=Math.round(t.jitter_audio)),i&&!ur(t.interframe_delay_variance)&&(o.interframe_delay_variance=t.interframe_delay_variance),t.freeze_count&&t.total_freezes_duration&&(o.freeze_count=t.freeze_count,o.total_freezes_duration=Math.round(t.total_freezes_duration*1e3)),t.ss_freeze_count&&t.ss_total_freezes_duration&&(o.ss_freeze_count=t.ss_freeze_count,o.ss_total_freezes_duration=t.ss_total_freezes_duration),a&&!ur(t.total_audio_samples_received)){let p=Math.max(0,t.total_audio_samples_received-this._previousCallStatReport.total_audio_samples_received),u=Math.max(0,t.inserted_audio_samples_for_deceleration-this._previousCallStatReport.inserted_audio_samples_for_deceleration),m=Math.max(0,t.removed_audio_samples_for_acceleration-this._previousCallStatReport.removed_audio_samples_for_acceleration),C=Math.max(0,t.concealed_audio_samples-this._previousCallStatReport.concealed_audio_samples),k=Math.max(0,t.silent_concealed_audio_samples-this._previousCallStatReport.silent_concealed_audio_samples),D=Math.max(0,t.audio_concealment_events-this._previousCallStatReport.audio_concealment_events);o.inserted_audio_samples_for_deceleration=Dt(u/p*1e3),o.removed_audio_samples_for_acceleration=Dt(m/p*1e3),o.concealed_audio_samples=Dt(C/p*1e3),o.concealed_silent_audio_samples=Dt(k/p*1e3),o.concealment_audio_avg_size=Dt(C/D),o.total_audio_energy=t.total_audio_energy}wn(t,"local_address","local_connection_type","network_type","transport")&&(o.local_address=t.local_address,o.local_connection_type=t.local_connection_type,o.network_type=t.network_type,o.transport=t.transport),wn(t,"remote_address","remote_connection_type")&&(o.remote_address=t.remote_address,o.remote_connection_type=t.remote_connection_type);let s=Math.max(0,t.packets_sent_video-this._previousCallStatReport.packets_sent_video),l=Math.max(0,t.packets_sent_audio-this._previousCallStatReport.packets_sent_audio);if(s>0){let p=Math.max(0,t.packets_lost_video-this._previousCallStatReport.packets_lost_video);o.video_loss=Dt(p/s*100)}if(l>0){let p=Math.max(0,t.packets_lost_audio-this._previousCallStatReport.packets_lost_audio);o.audio_loss=Dt(p/l*100)}Me.logCallStat(o),d.enableLogPerfStatReport&&c.log("Sent call stats",o),this._previousCallStatReport=t}};function wn(n,...r){for(let e of r)if(!n.hasOwnProperty(e)||n[e]===void 0)return!1;return!0}function kn(n,r=!1){if(n?.address)return n.address+(r?`:${n.port}`:"")}function ur(n){return n===void 0}function Dt(n){return Number.isNaN(n)?0:n}var vi=class{constructor(r,e=null){this.value=NaN;this.weightUp=r,this.weightDown=e??r}set(r){this.value=r}update(r){return this.value=this.getNext(r),this.value}getNext(r){if(isNaN(this.value))return r;let e=r<this.value?this.weightDown:this.weightUp;return this.value*(1-e)+r*e}getValue(){return this.value}};var xn=.25,On=.35,ms=85,hs=.1,_s=1.5,gs=.1,fs=1,Ss=.6,vs=.3;var Ii=class extends ee{constructor(e){super();this._networkLimits={badNet:{loss:3,rtt:1e3},goodNet:{loss:.5,rtt:600}};this._lastStatSentTimestamp=0;this._currentState="good";this._signaling=e,this._localNetworkStat={rtt:new vi(xn,xn),loss:new vi(On,On),bitrate:0},this._remoteNetworkStat={rtt:0,loss:0,bitrate:0},this._lastNetworkStat={rtt:0,loss:0,date:0}}_calcRttRating(e){let t=typeof e=="number"?e:e.getValue(),i=1;if(isNaN(t))return i;let a=Math.round((t-this._networkLimits.goodNet.rtt)/ms);for(let o=0;o<a;o++)i*=1-hs;return i}_calcLossRating(e){let t=typeof e=="number"?e:e.getValue(),i=1;if(isNaN(t))return i;let a=Math.round((t-this._networkLimits.goodNet.loss)/_s);for(let o=0;o<a;o++)i*=1-gs;return i}_calcBitrateRating(e,t){if(!e||!t)return 1;let a=1-(1-Math.min(e,t)/Math.max(e,t))*fs;return Math.min(a,1)}_calcUDPRating({rtt:e,loss:t}){return this._calcRttRating(e)*this._calcLossRating(t)}_calcRating(e,t,i){return i?this._calcBitrateRating(e.bitrate,t.bitrate):this._calcUDPRating(e)*this._calcUDPRating(t)}_getNetworkState(e){return isNaN(e)||e>=Ss?"good":e>=vs?"medium":"bad"}updateSettings(e){Object.assign(this._networkLimits.badNet,e?.badNet||{}),Object.assign(this._networkLimits.goodNet,e?.goodNet||{})}reportLocal(e){if(!this._signaling.ready)return;let t=e.outbound.transport.local?.protocol==="tcp",i=Math.max(0,Math.round(e.outbound.transport.currentRoundTripTime*1e3)||0),a=e.inbound.rtps.reduce((m,C)=>Math.max(m,C.packetLoss||0),0),o={rtt:this._localNetworkStat.rtt.update(i),loss:this._localNetworkStat.loss.update(a)};if(t){let m=e.outbound.rtps.reduce((C,k)=>C+(k.bandwidth??0)*8,0);o.bitrate=m,this._localNetworkStat.bitrate=m}let s=Date.now(),l=this._calcRating(this._localNetworkStat,this._remoteNetworkStat,t),p=Math.max(Math.round(l*10)/10,.1),u=this._getNetworkState(p);(t||u!==this._currentState||s-this._lastStatSentTimestamp>d.networkStatisticsInterval)&&(this._lastStatSentTimestamp=s,this._signaling.customData({sdk:Object.assign({type:"bad-net"},o)},null).catch(m=>{c.warn("Unable to send [bad-net]",m)})),this._currentState=u,this._triggerEvent("NETWORK_STATUS",p)}reportRemote(e){let{rtt:t,loss:i,bitrate:a}=e||{};this._remoteNetworkStat.rtt=t||0,this._remoteNetworkStat.loss=i||0,this._remoteNetworkStat.bitrate=a||0}};var Is=30*1e3,Ei=class n extends At{constructor(e,t,i,a,o){super(i,a);this._remoteSDP={};this._remoteCandidates={};this._lastRemoteSDP=null;this._animojiDataChannel=null;this._animojiReceiver=null;this._animojiSender=null;this._remoteAnimojiVersion=1;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._networkLimitsForVideo={bad:{loss:4,rtt:1e3},good:{loss:2,rtt:700}};this._videoMaxDimensionsForNet={worst:320,bad:640,good:1280};this._lastVideoMaxDimension=this._videoMaxDimensionsForNet.good;this._lastBadConnection=0;if(this._participantId=e,this._isMaster=t,this._serverSettings=o,this._perfStatReporter=new lt(this,i,!0),this._directStatReporter=new Ii(i),this.subscribe(this._signaling,Ee.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._mediaSource,"TRACK_REPLACED",this._onReplacedTrack.bind(this)),this.subscribe(this._mediaSource,"SOURCE_CHANGED",this._applySettings.bind(this)),this.subscribe(this._directStatReporter,"NETWORK_STATUS",this._onNetworkStatus.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={},d.vmoji&&this._createDataChannel(this._pc,it.animoji,s=>{this._animojiDataChannel=s,this._animojiDataChannel.binaryType="arraybuffer",this._animojiReceiver?.setDataChannel(this._animojiDataChannel),this._animojiSender?.setDataChannel(this._animojiDataChannel)}),this._isMaster){try{this._mediaSource.addTrackToPeerConnection(this._pc,!1,!0),this._applySettings()}catch(s){T.log(I.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==="IDLE"?this._failedOnCreate=s:this.close(s)})}this._startSettingsInterval()}get participantId(){return this._participantId}updateStatisticsInterval(){this._stopStatInterval(),this._isDeadConnection()||this._startStatInterval()}_isDeadConnection(){return["IDLE","CLOSED","FAILED"].includes(this.getState())}async open(e=null){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),this._applySettings()}catch(i){T.log(I.ERROR,"addTrack-direct"),c.error("DirectTransport: Unable to add media source tracks",i,{participantId:this._participantId}),this.close(i);return}this._setState("OPENED");let t=e;if(!e){let i=Object.keys(this._remoteSDP);t=i[i.length-1]}if(t&&this._remoteSDP[t])try{await this._setRemoteDescription(t,this._remoteSDP[t])}catch{this.close();return}this._remoteSDP={},this._remoteCandidates={}}updateSettings(e){dr(e,this._serverSettings)||(this._serverSettings=e,this._applySettings())}preventRestart(){this._reconnectionPrevented=!0}allowRestart(){this._reconnectionPrevented=!1}setAnimojiTransport(e,t){if(d.vmoji&&(this._animojiReceiver=e,this._animojiSender=t,e.setParticipantId(this._participantId),this._animojiDataChannel)){e.setDataChannel(this._animojiDataChannel),t.setDataChannel(this._animojiDataChannel);return}}close(e){this._isOpen&&(this._isOpen=!1,this._stopReconnection(),this._remoteStream&&(this._remoteStream.getTracks().forEach(t=>{t.stop(),this._triggerEvent("REMOTE_TRACK_REMOVED",this._remoteStream,t)}),this._remoteStream=null),this._stopStatInterval(),this._stopSettingsInterval(),this._pc&&(this._animojiDataChannel&&(this._animojiDataChannel.onopen=null,this._animojiDataChannel.onmessage=null,this._animojiDataChannel.onerror=null,this._animojiDataChannel.close()),this._pc.onicecandidate=null,this._pc.ontrack=null,this._pc.oniceconnectionstatechange=null,this._pc.onconnectionstatechange=null,this._pc.onsignalingstatechange=null,this._pc.close(),this._pc=null),this._onNetworkStatus(1),this.unsubscribe(),e?(c.error("DirectTransport: Closed",e,{participantId:this._participantId}),this._setState("FAILED")):(c.debug("DirectTransport: Closed",{participantId:this._participantId}),this._setState("CLOSED")),this._triggerEvent("PEER_CONNECTION_CLOSED"))}_setState(e){this._state!==e&&(c.debug(`DirectTransport: State changed to ${e}`,{participantId:this._participantId}),this._state=e,this._triggerEvent("STATE_CHANGED",e))}_onSignalingNotification(e){switch(e.notification){case N.TRANSMITTED_DATA:this._handleTransmittedData(e);break;case N.SETTINGS_UPDATE:this._directStatReporter.updateSettings(e.settings);break;case N.CUSTOM_DATA:e.data.hasOwnProperty("sdk")&&this._directStatReporter.reportRemote(e.data?.sdk);break}}_handleTransmittedData(e){let t=e.data,i=S.getPeerIdString(e.peerId);S.composeMessageId(e)===this._participantId&&(t.candidate&&t.candidate.candidate?this._addIceCandidate(i,t.candidate).catch(this.close.bind(this)):t.sdp&&(this._remoteAnimojiVersion=t.animojiVersion||1,this._setRemoteDescription(i,t.sdp).catch(this.close.bind(this))))}async _addIceCandidate(e,t){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{await this._pc.addIceCandidate(new RTCIceCandidate(t))}catch(i){throw T.log(I.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)}async _setRemoteCandidates(e){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{await this._addIceCandidate(e,i)}catch{}}async _setRemoteDescription(e,t){if(this._isOpen&&(!this._remotePeerId||this._remotePeerId===e)&&this._pc){if(this._lastRemoteSDP?.sdp===t.sdp)return;this._lastRemoteSDP=t,t=n._patchRemoteDescription(t),c.debug("Add remote description",{participantId:this._participantId,sdp:t}),this._calcFingerprint(t.sdp);try{await this._pc.setRemoteDescription(t),await this._setRemoteCandidates(e),this._processAnimojiProtocolVersion(this._remoteAnimojiVersion)}catch(i){throw T.log(I.ERROR,"setRemoteDescription-direct"),c.error("Unable to set remote description",i,{participantId:this._participantId,sdp:t}),i}}else this._remoteSDP[e]=t}_processAnimojiProtocolVersion(e){let t=Math.min(e,d.vmojiOptions?.protocolVersion||1);this._animojiSender?.setProtocolVersion(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("REMOTE_TRACK_REMOVED",this._remoteStream,t.track)}),this._triggerEvent("REMOTE_TRACK_ADDED",this._remoteStream,e.track)}async _handleIceCandidate(e){e.candidate&&this._signaling.ready&&(c.debug("Local ice candidate",{participantId:this._participantId,candidate:e.candidate}),await this._signaling.sendCandidate(this._participantId,e.candidate))}_onSignalingStateChange(){c.debug(`DirectTransport: Signaling state changed to ${this._pc?.signalingState}`,{participantId:this._participantId});let e={animojiVersion:d.vmojiOptions.protocolVersion||1};switch(this._pc?.signalingState){case"have-local-offer":let t=this._pc.localDescription;t?this._signaling.sendSdp(this._participantId,t,e).catch(this.close.bind(this)):this.close(new Error);break;case"have-remote-offer":this._createAnswer().then(i=>this._signaling.sendSdp(this._participantId,i,e)).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==="IDLE"||e==="OPENED"?this._setState("CONNECTING"):this._setState("RECONNECTING");break}}_onConnectionStateChange(){switch(c.debug(`DirectTransport: Connection state changed to ${this._pc?.connectionState}`,{participantId:this._participantId}),T.log(I.ICE_CONNECTION_STATE,this._pc?.connectionState),this._pc?.connectionState){case"connected":this._neverConnected=!1,this._setState("CONNECTED"),this._stopReconnection(),S.getPeerConnectionHostInfo(this._pc).then(e=>{e?.local&&(T.log(I.ICE_CONNECTION_TYPE,e.local.type),c.debug("Selected ICE candidates",e))}),this._startStatInterval();break;case"failed":case"disconnected":this._reconnectionPrevented?this.close(new Error(`Ice connection ${this._pc.connectionState}`)):(this._setState("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("SERVER"))}_stopReconnection(){this._reconnectionTimeout&&(clearTimeout(this._reconnectionTimeout),this._reconnectionTimeout=null),this._iceRestartTimeout&&(clearTimeout(this._iceRestartTimeout),this._iceRestartTimeout=null)}_startIceRestart(){this._isMaster?(T.log(I.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}),T.log(I.ERROR,"iceRestart-direct"),this._requestTopologySwitch()},d.iceRestartWaitTime)}async _createOffer(e){let t={iceRestart:e,offerToReceiveAudio:!0,offerToReceiveVideo:!0};c.debug("Create offer",{participantId:this._participantId,options:t});let i;try{i=await this._pc?.createOffer(t),c.debug("Created offer",{participantId:this._participantId,offer:i}),i=n._patchLocalDescription(i)}catch(a){throw c.error("Unable to create offer",a,{participantId:this._participantId}),T.log(I.ERROR,"createOffer-direct"),a}try{return c.debug("Set local description",{participantId:this._participantId,offer:i}),this._calcFingerprint(i.sdp),await this._pc?.setLocalDescription(i),i}catch(a){throw c.error("Unable to set local description",a,{participantId:this._participantId}),T.log(I.ERROR,"setLocalDescription-direct"),a}}async _createAnswer(){c.debug("Create answer",{participantId:this._participantId});let e;try{e=await this._pc?.createAnswer(),c.debug("Created answer",{participantId:this._participantId,answer:e}),e=n._patchLocalDescription(e)}catch(t){throw c.error("Unable to create answer",t,{participantId:this._participantId}),T.log(I.ERROR,"createAnswer-direct"),t}try{return c.debug("Set local description",{participantId:this._participantId,answer:e}),this._calcFingerprint(e.sdp),await this._pc?.setLocalDescription(e),e}catch(t){throw c.error("Unable to set local description",t,{participantId:this._participantId}),T.log(I.ERROR,"setLocalDescription-direct"),t}}static _patchLocalDescription(e){let t=!!y.baseChromeVersion();return e.sdp=S.patchLocalSDP(e.sdp,d.preferH264&&y.canPreferH264(),y.isBrokenH264Decoder(),d.preferVP9,d.h264spsPpsIdrInKeyframe,t&&d.audioNack,d.p2pAudioRed),e}static _patchRemoteDescription(e){return e.sdp=S.patchRemoteSDP(e.sdp,!1,!1,!1,d.preferVP9,y.isBrokenVP9Encoder(),y.isBrokenVP9Decoder()),e}_onReplacedTrack(e){this._pc&&(this._pc.getSenders().forEach(t=>{t.track&&t.track.kind===e.kind&&t.track.contentHint===e.contentHint&&t.replaceTrack(e).catch(i=>{c.error("DirectTransport: Unable to replace track",i,{participantId:this._participantId}),T.log(I.ERROR,"replaceTrack-direct")})}),this._applySettings())}_startStatInterval(){if(this._statInterval)return;let e=()=>{if(this._isDeadConnection()){this._stopStatInterval();return}ai(this._pc,this._lastStat,void 0,!0).then(t=>{this._lastStat=t,ze.reportUsage(t);let i={inbound:{topology:"DIRECT",transport:t.transport,rtps:t.rtps.filter(a=>a.type==="inbound-rtp"?(a.userId=this._participantId,!0):!1)},outbound:{topology:"DIRECT",transport:t.transport,rtps:t.rtps.filter(a=>a.type==="outbound-rtp")},remoteInbound:{topology:"DIRECT",transport:t.transport,rtps:t.remoteRtps??[]}};this._checkPPTNetwork(i),this._directStatReporter.reportLocal(i),this._triggerEvent("REMOTE_DATA_STATS",i),this._statInterval=window.setTimeout(e,d.statisticsInterval)})};this._statInterval=window.setTimeout(e,d.statisticsInterval)}async _isSVCSupported(e,t){let i=this._mediaSource.getSendVideoTrack(),a=e.outbound.rtps.find(l=>l.kind==="video");if(!a?.mimeType||!a?.bandwidth||!i)return!1;let o=i.getSettings();if(!o.width||!o.height||!o.frameRate)return!1;let s={type:y.browserName()==="Firefox"?"transmission":"webrtc",video:{contentType:a.mimeType,width:o.width,height:o.height,bitrate:a.bandwidth,framerate:o.frameRate,scalabilityMode:t}};try{return(await navigator.mediaCapabilities.encodingInfo(s)).supported||!1}catch(l){return c.warn("Failed to get encodingInfo",s,l),!1}}async _checkPPTNetwork(e){if(!d.switchVideoAtBadNetwork||!e.inbound.transport.averageNetStat)return;let{averageNetStat:t}=e.inbound.transport,i=t.currentRoundTripTime<=this._networkLimitsForVideo.good.rtt&&t.lostPercent<=this._networkLimitsForVideo.good.loss,a=t.currentRoundTripTime>=this._networkLimitsForVideo.bad.rtt||t.lostPercent>=this._networkLimitsForVideo.bad.loss,o=t.currentRoundTripTime<this._networkLimitsForVideo.bad.rtt,s=this._videoMaxDimensionsForNet.good,l="L1T1";if(a?(this._lastBadConnection=Date.now(),o?(s=this._videoMaxDimensionsForNet.bad,l="L1T2"):(s=this._videoMaxDimensionsForNet.worst,l="L1T3")):i&&(s=this._videoMaxDimensionsForNet.good,l="L1T1"),!(s<this._lastVideoMaxDimension||Date.now()-this._lastBadConnection>Is)||this._lastVideoMaxDimension===s)return;let u=this._serverSettings.camera;if(!u||!await this._isSVCSupported(e,l))return;c.debug("Switch outbound video frame size and scalabilityMode",{scalabilityMode:l,averageNetStat:t,nextVideoMaxDimension:s}),this._lastVideoMaxDimension=s;let C={...this._serverSettings,camera:{...u,scalabilityMode:l,maxDimension:this._lastVideoMaxDimension}};this.updateSettings(C)}_stopStatInterval(){this._statInterval&&(window.clearTimeout(this._statInterval),this._statInterval=null)}_onNetworkStatus(e){let t={};t[this._participantId]=t[""]=e,this._triggerEvent("NETWORK_STATUS",t)}_startSettingsInterval(){if(this._settingsInterval)return;let t=()=>{if(!this._pc){this._stopSettingsInterval();return}this._applySettings(),this._settingsInterval=window.setTimeout(t,2e3)};this._settingsInterval=window.setTimeout(t,2e3)}_stopSettingsInterval(){this._settingsInterval&&(window.clearTimeout(this._settingsInterval),this._settingsInterval=null)}_calcFingerprint(e){let t=S.sdpFingerprint(e);if(t===null){c.warn("Fingerprint calculation is unsupported");return}this._fingerprint===null?this._fingerprint=t:(v.onFingerprintChange((this._fingerprint^t).toString()),this._fingerprint=null)}_applySettings(){let e=this._mediaSource.getMediaSettings().isScreenSharingEnabled?this._serverSettings.screenSharing:this._serverSettings.camera;e&&this._pc?.connectionState==="connected"&&(this._prevConsumerSettings=S.applySettings(this._pc,e,this._prevConsumerSettings))}_createDataChannel(e,t,i){c.debug(`[${t}] data channel opening`);let a=e.createDataChannel(t,{negotiated:!0,id:1});a.onopen=()=>{let o=a.readyState;o==="open"?(c.debug(`[${t}] data channel opened`),a.onerror=s=>{c.error(`[${t}] data channel error`,s)},i(a)):c.error(`[${t}] data channel open failed, state [${o}]`)}}};var Es=16,mr=class n{constructor(r,e,t){c.debug("AsrReceiver started"),this._datachannel=r,this._participantIdRegistry=e,this._asrCallback=t,this._textDecoder=new TextDecoder,this._datachannel.onmessage=i=>this._onDataChannelMessage(i.data)}static parse(r){let e=new DataView(r),t=e.getUint8(0),i=e.getUint8(1);if(i!==0)throw new Error(`Unsupported message type. Message type: ${i}`);let a=e.getUint16(2),o=e.getUint32(4),s=e.getUint32(8),l=e.getUint32(12);if(t!==1)throw new Error(`Unexpected protocol version. Got ${t}, expected 1`);return{sequence:a,ssrc:o,timestamp:s,duration:l,data:r.slice(Es)}}_onDataChannelMessage(r){let e=n.parse(r),t=this._participantIdRegistry?.getStreamDescription(e.ssrc)?.participantId;if(!t){c.warn(`Participant id for ssrc ${e.ssrc} not found in registry`);return}let i={participantId:t,text:this._textDecoder.decode(e.data),timestamp:e.timestamp,duration:e.duration};this._asrCallback(i)}destroy(){this._datachannel.onmessage=null}};import{decode as pt}from"messagepack";var hr=class{constructor(){this.streamDescriptionByCompactId=new Map;this.compactIdByStreamDescription=new Map}getStreamDescription(r){return this.streamDescriptionByCompactId.get(r)}getCompactId(r){return this.compactIdByStreamDescription.get(r)}handleMessage(r){let e=new Uint8Array(r),t=e[0],i=e.subarray(1);switch(t){case 1:let a=pt(i);return Object.entries(a).forEach(([k,D])=>{let G=ui(k);this.streamDescriptionByCompactId.set(D,G),this.compactIdByStreamDescription.set(k,D)}),null;case 2:case 4:let o=pt(i),s=[];for(let k of o){let D=this.getStreamDescription(k);D&&s.push(D.participantId)}return t===2?{type:"notification",notification:N.AUDIO_ACTIVITY,activeParticipants:s}:{type:"notification",notification:N.STALLED_ACTIVITY,stalledParticipants:s};case 3:let l=pt(i);return{type:"notification",notification:N.SPEAKER_CHANGED,speaker:this.getStreamDescription(l)?.participantId};case 5:let p=pt(i);return{type:"notification",notification:N.VIDEO_QUALITY_UPDATE,quality:{maxBitrate:p[0],maxDimension:p[1]}};case 6:let u=pt(i),m={};for(let[k,D]of Object.entries(u)){let G=this.getStreamDescription(Number(k))?.participantId;G&&(m[G]=D/100)}return{type:"notification",notification:N.NETWORK_STATUS,statuses:m};case 7:return this._createParticipantSourcesUpdateNotification(i);case 8:{let D=pt(i).map(G=>{let[Y,ue,Pe,Ge,se,Re,Ce]=G;return{participantId:this.getStreamDescription(Y)?.participantId,gain:ue,pause:Pe,offset:Ge,mute:se,liveStatus:Re,startTimeMs:Ce}});return{type:"notification",notification:N.MOVIE_UPDATE_NOTIFICATION,data:D}}case 9:let C=pt(i);return{type:"notification",notification:N.VIDEO_SUSPEND_SUGGEST,bandwidth:C};default:return c.debug("unsupported message type: "+t),null}}_createParticipantSourcesUpdateNotification(r){let e=pt(r),t=[];for(let[i,a]of Object.entries(e)){let o=a[0],s=a[1],l=a[2],p=!!a[3],u=a[4]!==null?!!a[4]:void 0,m;if(o!==null){if(m=this.getStreamDescription(o),!m){c.error(`could not uncompress participant ID ${o}`);continue}}else m=null;if(l===null){c.error("unexpected null sequenceNumber",i,a);continue}let C=je.PARTICIPANT_AGNOSTIC_TRACK_PREFIX+"-"+i,k=s?s>>>0:null;t.push({participantStreamDescription:m,streamId:C,rtpTimestamp:k,sequenceNumber:l,fastScreenShare:p,suspend:u})}return{type:"notification",notification:N.PARTICIPANT_SOURCES_UPDATE,participantUpdateInfos:t}}};var Ts=90,Rs=4294967295,Ti=class n extends At{constructor(e,t,i){super(e,t);this._producerNotification=null;this._producerCommand=null;this._producerScreen=null;this._consumerScreen=null;this._asr=null;this._animojiDataChannel=null;this._animojiReceiver=null;this._animojiSender=null;this._isOpen=!1;this._observer=!1;this._reconnectionPrevented=!1;this._statInterval=null;this._settingsInterval=null;this._statBytes={};this._ssrcMap={};this._ssrcMapUpdated=!1;this._producerOfferIsProcessing=!1;this._producerNextOffer=null;this._lastStat=null;this._prevConsumerSettings={};this._asrTrack=null;this._captureSender=null;this._captureReceiver=null;this._participantIdRegistry=null;this._disabledSenders=new Set;this._rtpReceiversByStreamId={};this._producerSessionId="";this._newAudioShareTrack=null;this._simulcastInfo=null;this.subscribe(this._signaling,Ee.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._mediaSource,"TRACK_REPLACED",this._onReplacedTrack.bind(this)),this.subscribe(this._mediaSource,"SOURCE_CHANGED",this._applyConsumerSettings.bind(this)),this.subscribe(this._mediaSource,"SCREEN_STATUS",this._onScreenSharingStatus.bind(this)),this._createPerfStatsReporter(),this._serverSettings=i,c.debug("ServerTransport: Created")}updateStatisticsInterval(){this._stopStatInterval();let e=this.getState();e!=="IDLE"&&e!=="CLOSED"&&e!=="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&&(this._isOpen=!1,this._closeConnection(),this.unsubscribe(),e?(c.error("ServerTransport: Closed",e),this._setState("FAILED")):(c.debug("ServerTransport: Closed"),this._setState("CLOSED")))}removeParticipant(e){this._captureReceiver?.close(e)}preventRestart(){this._reconnectionPrevented=!0}allowRestart(){this._reconnectionPrevented=!1}updateSettings(e){dr(e,this._serverSettings)||(this._serverSettings=e,this._applyConsumerSettings())}setAnimojiTransport(e,t){if(d.vmoji&&(this._animojiReceiver=e,this._animojiSender=t,this._participantIdRegistry&&e.setParticipantIdRegistry(this._participantIdRegistry),this._animojiDataChannel)){e.setDataChannel(this._animojiDataChannel),t.setDataChannel(this._animojiDataChannel);return}}async onCameraResolutionChanged(){d.simulcast&&y.isSimulcastSupportedByBrowser()&&await this._changeSimulcastInfo(!0,!1)}_createPerfStatsReporter(){this._perfStatReporter?.destroy(),this._perfStatReporter=new lt(this,this._signaling)}_closeConnection(){this._stopStatInterval(),this._stopSettingsInterval(),this._removeAsrTrack(),this._removeCaptureSender(),this._removeCaptureReceiver(),this._simulcastInfo=null,this._pc&&(this._rtpReceiversByStreamId={},this._disabledSenders.forEach(e=>e.track?.stop()),this._disabledSenders.clear(),this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.onsignalingstatechange=null,this._participantIdRegistry=null,n._closeDataChannel(this._producerNotification),n._closeDataChannel(this._producerCommand),n._closeDataChannel(this._producerScreen),n._closeDataChannel(this._consumerScreen),n._closeDataChannel(this._asr),n._closeDataChannel(this._animojiDataChannel),this._pc.close(),this._pc=null,this._producerOfferIsProcessing=!1,this._producerNextOffer=null),this._triggerEvent("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 a=e.createDataChannel(t,{ordered:!0});a.onopen=()=>{let o=a.readyState;o==="open"?(c.debug(`[${t}] data channel opened`),i(a)):c.error(`[${t}] data channel open failed, state [${o}]`)},a.onerror=o=>{let s=o.error;c.error(`[${t}] data channel error`,s?.errorDetail,s?.message)}}_openConnection(e=!1){c.debug("ServerTransport: Open single connection"),this._pc=new RTCPeerConnection({},{optional:[{googSuspendBelowMinBitrate:!1}]}),this._pc.ontrack=this._onAddTrack.bind(this,this._pc),this._pc.onconnectionstatechange=S.debounce(t=>{this._pc&&this._onConnectionStateChange(this._pc,t)},500),this._pc.onsignalingstatechange=n._onSignalingStateChange.bind(this,this._pc),this._participantIdRegistry=new hr,this._signaling.setParticipantIdRegistry(this._participantIdRegistry),d.producerNotificationDataChannel&&this._createDataChannel(this._pc,it.producerNotification,t=>{this._producerNotification=t,this._producerNotification.binaryType="arraybuffer",this._signaling.setProducerNotificationDataChannel(t)}),d.producerCommandDataChannel&&(this._signaling.useCommandDataChannel(!0),this._createDataChannel(this._pc,it.producerCommand,t=>{this._producerCommand=t,this._signaling.setProducerCommandDataChannel(t)})),d.producerScreenDataChannel&&this._createDataChannel(this._pc,it.producerScreenShare,t=>{this._producerScreen=t,this._producerScreen.binaryType="arraybuffer",this._createCaptureReceiver()}),d.asrDataChannel&&this._createDataChannel(this._pc,it.asr,t=>{this._asr=t,this._asr.binaryType="arraybuffer",this._removeAsrTrack(),this._asrTrack=new mr(t,this._participantIdRegistry,i=>{this._onAsrTranscription(i)})}),d.vmoji&&this._createDataChannel(this._pc,it.animoji,t=>{this._animojiDataChannel=t,this._animojiDataChannel.binaryType="arraybuffer",this._animojiReceiver?.setDataChannel(t),this._animojiReceiver?.setParticipantIdRegistry(this._participantIdRegistry),this._animojiSender?.setDataChannel(t),this._animojiSender?.setProtocolVersion(d.vmojiOptions.protocolVersion||1)}),this._newAudioShareTrack=this._mediaSource.getAudioShareTrack();try{this._mediaSource.addTrackToPeerConnection(this._pc,this._observer,!1),this._prevConsumerSettings={},this._applyConsumerSettings()}catch(t){c.error("ServerTransport: Unable to add media source tracks",t),T.log(I.ERROR,"addTrack-single"),this.close(t);return}d.consumerScreenDataChannel&&this._createDataChannel(this._pc,it.consumerScreenShare,t=>{this._consumerScreen=t,this._consumerScreen.binaryType="arraybuffer";let i=this._mediaSource.getScreenTrack();i&&this._createCaptureSender(i)}),e||this._allocateConsumer(),this._setState("OPENED"),this._startStatInterval(),this._startSettingsInterval()}_removeAsrTrack(){this._asrTrack?.destroy(),this._asrTrack=null}_reconnect(){this.getState()!=="OPENED"&&(this._setState("RECONNECTING"),this._closeConnection(),this._openConnection(!0))}_signalActiveParticipants(e){this._triggerEvent("SIGNALLED_ACTIVE_PARTICIPANTS",e)}_signalStalledParticipants(e){this._triggerEvent("SIGNALLED_STALLED_PARTICIPANTS",e)}_signalSpeakerChanged(e){this._triggerEvent("SIGNALLED_SPEAKER_CHANGED",e)}_signalNetworkStatus(e){this._triggerEvent("NETWORK_STATUS",e)}_updateSSRCMap(e){e&&e.sdp.split(`
|
|
12
|
+
`).forEach(t=>{let i=`a=ssrc:([0-9]+) label:(audio|video)-((?:[ug]?[\\d]+)|(?:mix)|(?:${je.PARTICIPANT_AGNOSTIC_TRACK_PREFIX}-[0-9]+))`,a=new RegExp(i).exec(t);a&&(this._ssrcMap[a[1]]=a[3],this._ssrcMapUpdated=!0)})}_createCaptureSender(e){let t=this._mediaSource.getMediaSettings();!e||!d.consumerScreenDataChannel||!this._consumerScreen||!t.isScreenSharingEnabled||(this._captureSender&&this._removeCaptureSender(),this._captureSender=new Et(e,this._consumerScreen,this._signaling,t.isFastScreenSharingEnabled))}_removeCaptureSender(){this._captureSender?.destroy(),this._captureSender=null}_createCaptureReceiver(){!d.producerScreenDataChannel||!this._producerScreen||(this._captureReceiver&&this._removeCaptureReceiver(),this._captureReceiver=new vt(this._producerScreen,this._participantIdRegistry,(e,t)=>{this._triggerEvent("REMOTE_STREAM_SECOND",e,t)},e=>{this._triggerEvent("REMOTE_STREAM_SECOND",e,null)},e=>{this._triggerEvent("SCREEN_SHARING_STAT",e)}))}_removeCaptureReceiver(){this._captureReceiver?.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!=="video")return;let a=!this._disabledSenders.has(i),o=e.maxDimension!==0;if(a&&!o){c.log("Disabling video upload"),this._disabledSenders.add(i),i.replaceTrack(y.getBlackMediaTrack()).catch(l=>{c.error("Could not disable video upload",l)});return}let s=this._mediaSource.getSendVideoTrack();if(!a&&o&&s){c.log("Enabling video upload"),this._disabledSenders.delete(i);let l=i.track;l.enabled=s.enabled,i.replaceTrack(s).then(()=>l.stop()).catch(p=>{c.error("Could not enable video upload",p)})}S.applyVideoTrackSettings(e,i,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("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),ze.reportUsage(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(){if(this._settingsInterval)return;let t=()=>{if(!this._pc){this._stopSettingsInterval();return}this._applyConsumerSettings(),this._settingsInterval=window.setTimeout(t,2e3)};this._settingsInterval=window.setTimeout(t,2e3)}_stopSettingsInterval(){this._settingsInterval&&(window.clearTimeout(this._settingsInterval),this._settingsInterval=null)}async _collectStat(){if(!this._pc)return Promise.reject();this._ssrcMapUpdated&&(this._lastStat=null,this._ssrcMapUpdated=!1,this._createPerfStatsReporter());let e=await ai(this._pc,this._lastStat,this._ssrcMap,!0);return this._lastStat=e,e}_reportStats(e){this._triggerEvent("REMOTE_DATA_STATS",{inbound:{topology:"SERVER",transport:e.transport,rtps:e.rtps.filter(t=>t.type==="inbound-rtp")},outbound:{topology:"SERVER",transport:e.transport,rtps:e.rtps.filter(t=>t.type==="outbound-rtp")},remoteInbound:{topology:"SERVER",transport:e.transport,rtps:e.remoteRtps??[]}})}_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=je.AUDIO_MIX,a=this._statBytes[i],o=!1;if(a){let s=t.bytesReceived-a.bytesReceived;s>=0&&s<=5&&(o=!0),a.stalled!==o&&this._triggerEvent("AUDIO_MIX_STALL",o)}this._statBytes[i]={bytesReceived:t.bytesReceived,stalled:o}}_allocateConsumer(){if(!this._signaling.ready)return;let e={estimatedPerformanceIndex:lt.getEstimatedPerformanceIndex(),audioMix:!0,consumerUpdate:!0,producerNotificationDataChannelVersion:d.producerNotificationDataChannel?8:0,producerCommandDataChannelVersion:d.producerCommandDataChannel?3:0,consumerScreenDataChannelVersion:d.consumerScreenDataChannel?1:0,producerScreenDataChannelVersion:d.producerScreenDataChannel?1:0,asrDataChannelVersion:d.asrDataChannel?1:0,animojiDataChannelVersion:d.vmoji?d.vmojiOptions.protocolVersion:1,animojiBackendRender:!d.vmojiOptions.renderingOptions.useFullClientRendering,onDemandTracks:!0,unifiedPlan:!0,singleSession:!0,videoTracksCount:d.videoTracksCount,red:d.serverAudioRed,audioShare:d.audioShare,fastScreenShare:d.fastScreenShare,videoSuspend:d.videoSuspend,simulcast:d.simulcast&&y.isSimulcastSupportedByBrowser()};!d.videoTracksCount&&!this._observer&&c.warn("Setting videoTracksCount to 0 is deprecated"),this._signaling.allocateConsumer(null,e)}async _processOffer(e){if(!this._pc)throw new Error("Interrupt allocation");let t=d.simulcast&&y.isSimulcastSupportedByBrowser(),i=t;try{await this._pc.setRemoteDescription(e)}catch(s){throw c.error("[single] unable to set remote offer",s),T.log(I.ERROR,"setRemoteDescription-single"),s}let a=this._findFirstSimTransceiver();if(t)if(a){c.log(`_processOffer: caps.simulcast=${d.simulcast} mid=${a.mid} dir=${a.direction}`);let s=this._mediaSource.getStream(),l=await this._setupSimulcastTransceiver(s,a);c.log("_processOffer: simulcastInfo",l),l||(c.log(`_processOffer: simulcast transceiver not found in server offer mid=${a.mid}, disable simulcast`),i=!1)}else c.log("_processOffer: simulcast transceiver not found in server offer, disable simulcast"),i=!1;let o;try{if(await this._handleTracks(),c.debug("[single] create local answer"),!this._pc)throw new Error("Interrupt allocation");o=await this._pc.createAnswer()}catch(s){throw c.error("[single] unable to create answer",s),T.log(I.ERROR,"createAnswer-single"),s}try{if(!this._pc)throw new Error("Interrupt allocation");o.sdp=S.patchLocalSDP(o.sdp,!1,y.isBrokenH264Decoder(),!1,d.h264spsPpsIdrInKeyframe),c.debug("[single] set local answer",{answer:o}),await this._pc.setLocalDescription(o)}catch(s){throw c.error("[single] unable to set local answer",s),T.log(I.ERROR,"setLocalDescription-single"),s}if(i&&a){o.sdp=S.patchSimulcastAnswerSdp(o.sdp,a,rt.WIDTH,rt.HEIGHT);for(let s of this._pc.getTransceivers())s.mid===null&&s.stop()}try{c.debug("[single] transmit local answer",{answer:o}),this._updateSSRCMap(e),await this._signaling.acceptProducer(o,Object.keys(this._ssrcMap)),c.debug("[single] remote offer has been processed")}catch(s){c.warn("[single] unable to send local answer",s),T.log(I.ERROR,"acceptProducer")}i&&await this._changeSimulcastInfo(!0,!0)}_findFirstSimTransceiver(){if(!this._pc)return null;for(let e of this._pc.getTransceivers()){let t=e.sender?.track?e.sender.track?.kind:e.receiver?.track?.kind;if(!e.sender||t!=="video")continue;let i=e.sender.getParameters();if(!(!i.encodings||i.encodings.length<=1))return e}return null}async _setupSimulcastTransceiver(e,t){if(!t?.sender||!e)return null;t.direction="sendonly";let i=e.getVideoTracks()[0];await t.sender.replaceTrack(i),t.sender.setStreams(e);let a=t.sender.getParameters();if(!a.encodings||a.encodings.length<=1)return c.log(`_setup:sim: mid=${t.mid} dir=${t.direction}: wrong encodings:${JSON.stringify(a.encodings)}`),null;let o=ii(rt.WIDTH,rt.HEIGHT,this._serverSettings.camera?.bitrates?.generic),s=0,l=1;for(let u of a.encodings)u.scalabilityMode=ti,u.active=!0,s>=o.streams.length?u.maxBitrate=0:u.maxBitrate=o.streams[s].bitrate,u.scaleResolutionDownBy=l,l=l*2,s++;await t.sender.setParameters(a);let p=i.getSettings();return c.log(`_setup:sim: mid=${t.mid} dir=${t.direction} track=${p.width}x${p.height} encodings=${JSON.stringify(a.encodings)}`),!0}async _acceptProducer(e){if(this._producerOfferIsProcessing){this._producerNextOffer=e,c.debug("[single] wait until other remote offer is processed");return}this._producerOfferIsProcessing=!0;let t={type:"offer",sdp:S.patchRemoteSDP(e,y.isOldDataChannelDescription(),!1,!1,!1,y.isBrokenVP9Encoder(),y.isBrokenVP9Decoder())};if(c.debug("[single] set remote offer",{offer:t}),!this._pc)throw new Error("Interrupt allocation");try{if(await this._processOffer(t),this._producerOfferIsProcessing=!1,this._producerNextOffer){c.debug("[single] there is other unprocessed remote offer, process it");let i=this._producerNextOffer;this._producerNextOffer=null,await this._acceptProducer(i)}}catch(i){this.close(i)}}async _handleTracks(){if(!this._newAudioShareTrack||this._observer)return;let e=this._pc?.getTransceivers().find(t=>t.mid?.endsWith("s"));if(!e||!e.sender){c.warn("Cannot find audioshare transceiver");return}e.sender.track!==null&&c.warn("Unexpected track assigned to audioshare");try{e.direction="sendonly",await e.sender.replaceTrack(this._newAudioShareTrack),this._newAudioShareTrack=null}catch(t){c.error("ServerTransport: Unable to replace track",t),T.log(I.ERROR,"replaceTrack-single")}}async _onSignalingNotification(e){if(this._isOpen)switch(e.notification){case N.PRODUCER_UPDATED:await this._onProducerUpdated(e);break;case N.REALLOC_CON:this._reconnect();break;case N.AUDIO_ACTIVITY:this._signalActiveParticipants(e.activeParticipants);break;case N.SPEAKER_CHANGED:this._signalSpeakerChanged(e.speaker);break;case N.STALLED_ACTIVITY:this._signalStalledParticipants(e.stalledParticipants);break;case N.NETWORK_STATUS:this._signalNetworkStatus(e.statuses);break}}_onAsrTranscription(e){this._triggerEvent("ASR_TRANSCRIPTION",e)}async _onProducerUpdated(e){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,await 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=o=>{this._triggerEvent("REMOTE_TRACK_REMOVED",i.id,i,o.track)}),i.getTracks().find(o=>o.id===t.track.id)||i.addTrack(t.track),this._rtpReceiversByStreamId[i.id]=t.receiver,this._triggerEvent("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),T.log(I.ICE_CONNECTION_STATE,e.connectionState),e.connectionState){case"failed":this._reconnectionPrevented?this.close(new Error("Ice connection failed")):(T.logCustom(I.RECONNECT,{param:1}),this._reconnect());break;case"connecting":let i=this.getState();i==="IDLE"||i==="OPENED"?this._setState("CONNECTING"):e.iceConnectionState==="checking"&&this._setState("RECONNECTING");break;case"disconnected":this._reconnectionPrevented?this.close(new Error("Ice connection disconnected")):this._setState("RECONNECTING");break;case"connected":this._setState("CONNECTED"),S.getPeerConnectionHostInfo(e).then(a=>{a?.local&&(T.log(I.ICE_CONNECTION_TYPE,a.local.type),c.debug("Selected ICE candidates",a))}),T.logCustom(I.RECONNECT,{param:0});break}}_onReplacedTrack(e,t){if(this._pc){d.consumerScreenDataChannel&&t&&(e=t);let i=(a,o)=>{a.replaceTrack(o).catch(s=>{c.error("ServerTransport: Unable to replace track",s),T.log(I.ERROR,"replaceTrack-single")})};if(c.log(`_onReplacedTrack: newTrack=${e.getSettings().width}x${e.getSettings().height}`),d.simulcast&&y.isSimulcastSupportedByBrowser()&&e.kind==="video"){let o=this._pc?.getTransceivers().find(s=>s.direction==="sendonly"&&s.sender?.track?.kind==="video")?.sender;o?.track?(i(o,e),e.getSettings().width&&e.getSettings().height&&this._changeSimulcastInfo(!1,!1)):c.warn("_onReplacedTrack: simulcast video transceiver not found")}else{let a=this._pc?.getSenders().find(o=>o.track&&o.track.kind===e.kind&&!this._disabledSenders.has(o)&&o.track.contentHint===e.contentHint);a?.track?i(a,e):e.kind==="audio"&&e.contentHint==="music"&&(this._newAudioShareTrack=e)}}this._applyConsumerSettings()}getStreamWaitingTimeMs(e,t){if(!this._pc)return T.log(I.PAT_WAITING_TIME_ERROR,"noConnection"),c.error("Cannot get stream waiting time, peer connection is not initialized"),0;if(!RTCRtpReceiver.prototype.getSynchronizationSources)return T.log(I.PAT_WAITING_TIME_ERROR,"oldBrowser"),c.error("Cannot get stream waiting time, RTCRtpReceiver.getSynchronizationSources is not supported"),0;let i=this._rtpReceiversByStreamId[e];if(!i)return T.log(I.PAT_WAITING_TIME_ERROR,"noReceiver"),c.error(`Cannot get stream waiting time, cannot find RTP receiver by stream ID: ${e}`),0;let a=i.getSynchronizationSources();if(!a||!a.length)return c.log(`Cannot get stream waiting time, ${e} receiver has no synchronization sources`),0;let s=a[0].rtpTimestamp;if(!Number.isInteger(s))return T.log(I.PAT_WAITING_TIME_ERROR,"timestampNotInteger"),c.error(`Cannot get stream waiting time, ${e} receiver's RTP timestamp is not an integer: ${s}`),0;let l=t-s&Rs,p=Math.ceil(l/Ts);return Math.min(100,Math.max(0,p))}async _changeSimulcastInfo(e,t){let i=this._mediaSource.getMediaSettings().isVideoEnabled,a=this._findFirstSimTransceiver();if(!d.simulcast||!y.isSimulcastSupportedByBrowser()||!i||!a||!a.sender)return;let o=this._mediaSource.getStream();if(!o)return;let s=o.getVideoTracks()[0],l=s.getSettings().width,p=s.getSettings().height,u=ii(l,p,this._serverSettings.camera?.bitrates?.generic),m=t||!ba(this._simulcastInfo,u);if(!u.streams.length||!m)return;let C=a.sender.getParameters();if(C.encodings||(C.encodings=[{}]),!(C.encodings.length<=1)){if(c.log(`_changeSimulcastInfo: ${l}x${p} command: ${JSON.stringify(u)} `),e){let k=0;for(let D of C.encodings)D.scaleResolutionDownBy=Di(D.rid),D.scalabilityMode=ti,k>=u.streams.length?(D.maxBitrate=0,D.active=!1):(D.active=!0,D.maxBitrate=u.streams[k].bitrate),k++;await a.sender.setParameters?.(C).catch(D=>{c.error("Failed to set sender parameters",C,D)}),c.log(`_changeSimulcastInfo: actual encodings: ${JSON.stringify(C.encodings)} `)}if(this._simulcastInfo=u,u.streams){let k={mediaSource:1,simulcastInfo:u};await this._signaling.changeSimulcast(k)}}}};var Je=(e=>(e.DIRECT="DIRECT",e.SERVER="SERVER",e))(Je||{}),_r=class extends ee{constructor(e,t,i,a){super();this._allocated=[];this._opened=[];this._directTransport=null;this._serverTransport=null;this._dtListeners=[];this._stListeners=[];this._states={};this._localState="IDLE";this._animojiReceiver=null;this._animojiSender=null;this._signaling=t,this._mediaSource=i,this._topology=e,this._serverSettings=a,this.subscribe(this._signaling,Ee.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._mediaSource,"ANIMOJI_STATUS",this._onAnimojiStatus.bind(this)),this.subscribe(this._mediaSource,"SOURCE_CHANGED",this._onSourceChanged.bind(this)),this._createAnimojiTransport(),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(c.log(`Trying allocate participant [${e}]`),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,a=!1){c.log("Trying open participant",{participantIds:e});let o=a;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),o=!0}o&&(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){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&&i>=0&&this._releaseDirectTransport(),this._topology==="SERVER"&&(this._serverTransport?.removeParticipant(e),this._setStates([e],"CLOSED")),i>=0&&this._opened.splice(i,1),t>=0&&this._allocated.splice(t,1),delete this._states[e]}destroy(){this.unsubscribe();for(let e of this._dtListeners)e.dispose();for(let e of this._stListeners)e.dispose();this._removeAnimojiTransport(),d.audioEffects?.destroy(),this._directTransport?.close(),this._directTransport=null,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(){return this._topology==="SERVER"?this._serverTransport?.getState():this._directTransport?.getState()}getStates(){return this._states}setAnimojiSvg(e,t){d.vmoji&&t.isMe&&d.vmoji.AnimojiPreviewGenerator?.setSvgData(t),(!(t.svg instanceof ArrayBuffer)||t.svg.byteLength!==0)&&this._animojiReceiver?.setParticipantSvg(e,t)}setAnimojiFill(e){this._animojiSender?.setFill(e)}async onCameraResolutionChanged(){this._topology==="SERVER"&&this._serverTransport&&await this._serverTransport.onCameraResolutionChanged()}_setStates(e,t){let i=e.filter(a=>this._states[a]!==t?(this._states[a]=t,!0):!1);i.length&&this._triggerEvent("STATE_CHANGED",i,t)}_setLocalState(e){this._localState!==e&&(this._localState=e,this._triggerEvent("LOCAL_STATE_CHANGED",e))}_onSignalingNotification(e){if(e.notification===N.TOPOLOGY_CHANGED)return this._onTopologyChanged(e)}_onTopologyChanged(e){if(e.topology!==this._topology){if(c.log(`Topology changed ${this._topology} -> ${e.topology}`),T.log(I.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&&(this._directTransport?.preventRestart(),this._serverTransport.open()))),this._topology==="DIRECT"){let t=e.offerTo||[],i=e.offerToTypes||[],a=e.offerToDeviceIdxs||[],o=t.length&&i.length?S.composeParticipantId(t[0],i[0],a[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 s=this._allocated[0];if(this._directTransport)this._directTransport.allowRestart();else{let l=o===s;this._directTransport=this._createDirectTransport(s,l)}this._opened.indexOf(s)>=0&&this._directTransport.open()}this._triggerEvent("TOPOLOGY_CHANGED",this._topology)}}_createDirectTransport(e,t=!1){let i=new Ei(e,t,this._signaling,this._mediaSource,this._serverSettings);return 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._onRemoteTrackAdded.bind(this,e)),i.addEventListener("REMOTE_TRACK_REMOVED",this._onRemoteTrackRemoved.bind(this,e)),i.addEventListener("REMOTE_DATA_STATS",this._onRemoteDataStats.bind(this)),i.addEventListener("STATE_CHANGED",this._onDirectTransportChanged.bind(this)),i.addEventListener("NETWORK_STATUS",this._onTransportNetworkStatus.bind(this)),i.addEventListener("PEER_CONNECTION_CLOSED",this._onPeerConnectionClosed.bind(this,"DIRECT"))),this._animojiReceiver&&this._animojiSender&&i.setAnimojiTransport(this._animojiReceiver,this._animojiSender),i}_createServerTransport(){let e=new Ti(this._signaling,this._mediaSource,this._serverSettings);return 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._onRemoteTrackAdded.bind(this)),e.addEventListener("REMOTE_TRACK_REMOVED",this._onRemoteTrackRemoved.bind(this)),e.addEventListener("AUDIO_MIX_STALL",this._onServerAudioMixStall.bind(this)),e.addEventListener("REMOTE_DATA_STATS",this._onRemoteDataStats.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.addEventListener("ASR_TRANSCRIPTION",this._onAsrTranscription.bind(this))),this._animojiReceiver&&this._animojiSender&&e.setAnimojiTransport(this._animojiReceiver,this._animojiSender),e}_releaseDirectTransport(){this._directTransport?.close(),this._directTransport=null;for(let e of this._dtListeners)e.dispose();this._dtListeners=[]}_releaseServerTransport(){this._serverTransport?.close(),this._serverTransport=null;for(let e of this._stListeners)e.dispose();this._stListeners=[]}_setLocalNoiseSuppression(e){d.noiseSuppression!==e&&(d.noiseSuppression=e,this._mediaSource?.updateNoiseSuppression())}_onDirectTransportChanged(e){let t=this._directTransport?.participantId;if(e==="CONNECTED"&&this._topology==="DIRECT"&&this._releaseServerTransport(),(e==="CLOSED"||e==="FAILED")&&(this._releaseDirectTransport(),this._topology==="DIRECT")){let i=this._opened.indexOf(t);i>=0&&this._opened.splice(i,1);let a=this._allocated.indexOf(t);a>=0&&this._allocated.splice(a,1)}this._topology==="DIRECT"&&t&&(this._setStates([t],e),this._setLocalState(e))}_onServerTransportChanged(e){let t=this._opened.slice();e==="CONNECTED"&&this._topology==="SERVER"&&this._releaseDirectTransport(),(e==="CLOSED"||e==="FAILED")&&(this._releaseServerTransport(),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)}_onServerAudioMixStall(e){this._topology==="SERVER"&&this._triggerEvent("AUDIO_MIX_STALL",e)}_onRemoteDataStats(e){this._triggerEvent("REMOTE_DATA_STATS",e)}_onRemoteTrackAdded(e,t,i){this._triggerEvent("REMOTE_TRACK_ADDED",e,t,i)}_onRemoteTrackRemoved(e,t,i){this._triggerEvent("REMOTE_TRACK_REMOVED",e,t,i)}_onAsrTranscription(e){this._triggerEvent("ASR_TRANSCRIPTION",e)}_onSourceChanged(){let e=this._mediaSource.getStream();e&&this._animojiSender?.setStream(e)}_onAnimojiStream(e,t){this._triggerEvent("ANIMOJI_STREAM",e,t)}_onAnimojiStatus(e){e?this._animojiSender?.resume():this._animojiSender?.pause(),this._mediaSource.onAnimojiSender(e)}_createAnimojiTransport(){if(!d.vmoji)return;this._animojiReceiver=new d.vmoji.AnimojiReceiver((t,i)=>this._onAnimojiStream(t,i),t=>this._onAnimojiStream(t,null),t=>{this._triggerEvent("ANIMOJI_ERROR",t)},d.vmojiOptions.renderingOptions);let e=this._mediaSource.getStream();this._animojiSender=new d.vmoji.AnimojiSender(e,this._signaling.getPeerId(),d.vmojiOptions.protocolVersion,{requested:this._mediaSource.isAnimojiRequested,useAI:d.vmojiOptions.renderingOptions.useAI}),this._animojiSender.onLocalData=t=>this._animojiReceiver?.receive(t)}_removeAnimojiTransport(){this._animojiSender?.destroy(),this._animojiSender=null,this._animojiReceiver?.destroy(),this._animojiReceiver=null}getStreamWaitingTimeMs(e,t){return this._topology!=="SERVER"?(T.log(I.PAT_WAITING_TIME_ERROR,"wrongTopology"),c.error(`Cannot get stream waiting time, incorrect topology: ${this._topology}`),0):this._serverTransport?this._serverTransport.getStreamWaitingTimeMs(e,t):(T.log(I.PAT_WAITING_TIME_ERROR,"noTransport"),c.error("Cannot get stream waiting time, server transport is not initialized"),0)}};var gr=class extends ee{constructor(e){super();this._detector=null;this._interval=null;this.subscribe(e,"REMOTE_TRACK_ADDED",this._onRemoteTrackAdded.bind(this)),this.subscribe(e,"REMOTE_TRACK_REMOVED",this._onRemoteTrackRemoved.bind(this)),this.subscribe(e,"SIGNALLED_ACTIVE_PARTICIPANTS",this._onSignalledActiveParticipants.bind(this)),this.subscribe(e,"TOPOLOGY_CHANGED",this._onTopologyChanged.bind(this))}destroy(){this._interval&&(window.clearTimeout(this._interval),this._interval=null),this.unsubscribe(),this._detector?.destroy(),this._detector=null}_onRemoteTrackAdded(e,t,i){if(i.kind==="audio"&&(this._detector?.destroy(),this._detector=new Mt(e,i),!this._interval)){let a=()=>{this._collectVolumes(),this._interval=window.setTimeout(a,d.voiceParams.interval)};this._interval=window.setTimeout(a,d.voiceParams.interval)}}_onRemoteTrackRemoved(e,t,i){i.kind==="audio"&&(!this._detector||this._detector.track!==i||(this._detector.destroy(),this._detector=null))}_collectVolumes(){if(!this._detector)return;let e={},t=this._detector.trackId,i=this._detector.getLevel();if(t===je.AUDIO_MIX){if(this._activeParticipants)for(let a of this._activeParticipants)e[a]=i}else e[t]=i;this._triggerEvent("VOLUMES_DETECTED",e)}_onSignalledActiveParticipants(e){this._activeParticipants=e}_onTopologyChanged(e){e==="DIRECT"&&(this._activeParticipants=null)}};var fr=class extends ee{constructor(e,t,i){super();this._speakerId=null;this._serverSideSpeakerDetection=!1;this._serverSideSpeakerDetection=i==="SERVER",this.subscribe(e,"VOLUMES_DETECTED",this._onVolumesDetected.bind(this)),this.subscribe(t,"SIGNALLED_SPEAKER_CHANGED",this._onServerSpeakerChanged.bind(this)),this.subscribe(t,"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(a=>{let o=e[a].smoothed;o>t&&o>d.voiceParams.threshold&&(t=o,i=a)}),i&&i!==this._speakerId){let a=this._speakerId&&e.hasOwnProperty(this._speakerId)?e[this._speakerId].smoothed:0;t>a*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==="SERVER"}};var Ri=class extends ee{constructor(e,t,i){super();this._volumes={};this._participants={};this._connectionTimeout=0;this._volumeTimeout=0;this._transport=e,this._participants=i,this.subscribe(e,"STATE_CHANGED",this._onTransportStateChanged.bind(this)),this.subscribe(t,"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){t==="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==="FAILED"&&this._connectionTimeout&&(c.warn("Transport failed, send callSpecError"),T.log(I.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!=="CONNECTED";Object.values(this._transport.getStates()).filter(e).length>0&&(c.warn("There is not connected transport, send callSpecError"),T.log(I.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",a=this._participants[t];a&&a.platform&&(i=a.platform),e.indexOf(i)<0&&(e.push(i),T.log(I.CALL_SPEC_ERROR,`${this._transport.getTopology()}_VOLUME_TIMEOUT_${i}`))}),e.length&&c.warn("There is silent participant, send callSpecError"),this._volumeTimeout=0}};var Sr=class n{static correctHangupReason(r){switch(r){case A.HUNGUP:return"hangup";case A.CANCELED:return"canceled";case A.REJECTED:return"rejected";case A.BUSY:return"busy";case A.FAILED:return"failed";case A.MISSED:return"missed";case A.ANOTHER_DEVICE:return"another_device";case A.REMOVED:return"removed";case A.BANNED:return"banned";case A.VCHAT_DETAILED_ERROR:return"error";default:return"hangup"}}static sendHangupEvent(r,e){if(![A.HUNGUP,A.CANCELED,A.REJECTED,A.FAILED,A.BUSY,A.MISSED,A.ANOTHER_DEVICE,A.REMOVED,A.BANNED,A.VCHAT_DETAILED_ERROR].includes(r.hangup))return;let i=r.custom_error?.vchat_detailed_api_error.code;T.logClientStats({name:I.CALL_FINISH,reason:n.correctHangupReason(r.hangup),call_topology:e==="DIRECT"?"D":"S",...i&&{string_value:i}})}};var vr=class{constructor(){this._isCallMarked=!1;this._isFinished=!1;this._callType=null}markAcceptCall(r){this.mark(r==="DIRECT"?"direct_incoming":"server_incoming")}markAcceptedCall(r){r==="DIRECT"&&this.mark("direct_outgoing")}markParticipantJoined(r){r==="DIRECT"&&this.mark("server_change_topology")}markOnJoin(r){r==="SERVER"&&this.mark("server_join_server")}mark(r){this._isCallMarked||(this._isCallMarked=!0,this._callType=r,Qe(I.FIRST_MEDIA_RECEIVED))}measure(){this._isFinished||(this._isFinished=!0,this._callType&&Me.logEventualStat({name:I.FIRST_MEDIA_RECEIVED,call_type:this._callType}))}};var Cs=1e3,ys=1e4;var Ps=15,q=class q extends ee{constructor(e,t){super();this._mediaSource=null;this._conversation=null;this._myLastRequestedLayouts={};this._state="IDLE";this._participantState=z.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._isRealTimeAsrRequested=!1;this._serverSettings={camera:null,screenSharing:null};this._lastStalled={};this._audioMixStalled=!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;this._changeMediaSettings=S.debounce(async e=>{if(this._signaling.ready)try{await this._signaling.changeMediaSettings(e)}catch(t){if(c.warn("changeMediaSettings failed with error",t),t.message==="chatRoom.maxShareCountExceeded")return this.toggleScreenCapturing({captureScreen:!1,fastScreenSharing:!1,captureAudio:!1})}},100);T.create(e,t),Me.create(),ze.create(()=>this._transport?.getTopology()),this._api=e,this._signaling=new $t,this._onUnload=()=>{this._conversation&&this._api&&(this._api.hangupConversation(this._conversation.id),d.clientEventsLoggingEnabled&&T.logClientEvent({event_type:I.CALL_DECLINED_OR_HANGED_LOCALLY,reason:"none"},!0)),T.destroy(),Me.destroy(),ze.destroy()},window.addEventListener("unload",this._onUnload),this._statFirstMediaReceived=new vr,this._audioOutput=new _i(this._statFirstMediaReceived),d.videoTracksCount>0&&(this._cooldownQueueCleanupTimer=window.setInterval(this._cleanupCooldownQueue.bind(this),Cs))}static current(){return q._current}static hangupAfterInit(){q._activationMutex&&!q._current&&(q._delayedHangup=!0)}static id(){return q._current?._conversation?.id||null}async onStart(e,t,i,a="",o=!1,s=!1,l){if(q._activationMutex)throw T.log(I.ERROR,"startCall"),c.warn("Conversation: there is already running activation"),new j(A.FAILED);q._activationMutex=!0,Ae.startSession();try{this._mediaSource=this._createMediaSource(),await this._mediaSource.request(i);let p=this._mediaSource.getMediaSettings();t===tt.CHAT||e.length>1?this._logWithMediaSettings(I.OUTGOING_MULTIPARTY_CALL,p):this._logWithMediaSettings(I.OUTGOING_CALL,p);let u=await this._startConversation(e,t,st.OUTGOING,i,a,o,s,l);if(!this._conversation)throw new j(A.UNKNOWN_ERROR);if(this._participantState=z.ACCEPTED,this._changeMediaSettings(p),await this._processConnection(u),this._allocateTransport(),this._createSpeakerDetector(),this._createSpecListener(),this._signaling.readyToSend(),q._delayedHangup)throw new j(A.CANCELED);return c.debug("Outgoing call",{opponentIds:e,opponentType:t,mediaOptions:i}),await this._processConnectionSharedMovieInfo(u),await this._processConversationUrlSharingInfo(u),v.onLocalStream(this._mediaSource.getStream(),this._mediaSource.getMediaSettings()),v.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._getMuteStatesForCurrentRoom(),this._getMainRoomParticipants()),this._onConversationParticipantListChunk(u),this._processPinnedParticipants(u),v.onLocalStatus("WAITING"),this._toggleJoinAvailability(),this._changeFeatureSet(),this._changeNeedRate(),q._current=this,this._conversation.concurrent&&await this._acceptConcurrent(),this._conversation}catch(p){throw this._close(p,"Unable to start conversation"),p}finally{q._activationMutex=!1}}async onJoin(e){if(q._activationMutex)throw T.log(I.ERROR,"joinCall"),c.warn("Conversation: there is already running activation"),new j(A.FAILED);q._activationMutex=!0,this._state="PROCESSING",Ae.startSession();try{let t=!!e.observedIds?.length;if(t&&d.videoTracksCount>0)throw c.error("Observer mode: please set videoTracksCount=0"),new j(A.UNSUPPORTED);this._mediaSource=this._createMediaSource(),await this._mediaSource.request(e.mediaOptions,!t);let i=this._mediaSource.getMediaSettings();this._logWithMediaSettings(I.JOIN_CONVERSATION,i);let a=await this._joinConversation(e);if(!this._conversation)throw new j(A.UNKNOWN_ERROR);return this._conversation.observer=t,v.onLocalStream(this._mediaSource.getStream(),i),this._conversation.waitingHall?(c.log("In waiting hall"),q._current=this,q._activationMutex=!1,this._signaling.readyToSend(),v.onLocalStatus("WAITING_HALL"),this._conversation):this._onJoinPart2(a)}catch(t){throw q._activationMutex=!1,this._close(t,"Unable to join conversation"),t}}async _onJoinPart2(e){c.debug("Join conversation part 2"),q._activationMutex=!0;try{if(this._participantState=z.ACCEPTED,!this._conversation||!this._mediaSource)throw new j(A.UNKNOWN_ERROR);if(this._statFirstMediaReceived.markOnJoin(this._conversation.topology),!this._conversation.observer&&!this._isAudienceModeListener()&&this._changeMediaSettings(this._mediaSource.getMediaSettings()),await this._processConnection(e),this._allocateTransport(),this._createSpeakerDetector(),this._createSpecListener(),this._signaling.readyToSend(),this._state==="CLOSE")return this._conversation;if(q._delayedHangup)throw new j(A.CANCELED);await this._processConnectionSharedMovieInfo(e),await this._processConversationUrlSharingInfo(e),await this._processConnectionAsrInfo(e);let t=await this._extractExternalRoomsData(e.rooms?.rooms,e.rooms?.roomId);return v.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._getMuteStatesForCurrentRoom(),this._getMainRoomParticipants(),t),this._onConversationParticipantListChunk(e),this._processPinnedParticipants(e),v.onLocalStatus("WAITING"),this._toggleJoinAvailability(),this._changeNeedRate(),this._state="ACTIVE",this._changeFeatureSet(),q._current=this,this._openTransport(Object.values(this._participants),!1),this._conversation.audienceMode&&!this._conversation.restricted&&this._forceOpenTransportForAloneInCall(),this._conversation.recordsInfoByRoom.get(e?.rooms?.roomId??null)&&this._forceOpenTransportForAloneInCall(),this._conversation}catch(t){throw this._close(t,"Unable to join conversation"),t}finally{q._activationMutex=!1}}async _extractExternalRooms(e){let t=e.map(this._convertRoomToExternal.bind(this));return(await Promise.all(t)).filter(a=>!!a)}async _extractExternalRoomsData(e,t){if(!e||!e.length)return;let i={rooms:await this._extractExternalRooms(e)};return t&&(i.roomId=t),i}async onPush(e,t=ie.USER,i){if(q._activationMutex)throw c.warn("Conversation: there is already running activation"),new j(A.REJECTED);q._activationMutex=!0;try{let a=await this._prepareConversation(e,t,i);if(this._mediaSource=this._createMediaSource(),!this._conversation)throw new j(A.UNKNOWN_ERROR);if(!a.conversation.participants.find(s=>s.state===z.CALLED&&s.id===this._conversation?.userId))throw c.log("Push rejected (there is an active call)"),T.log(I.PUSH,"rejected"),new j(A.REJECTED);if(Ae.startSession(),await this._processConnection(a),this._extractConnectionUrlSharingInfo(a),this._allocateTransport(),this._createSpeakerDetector(),this._createSpecListener(),this._processPinnedParticipants(a),this._signaling.readyToSend(),T.log(I.PUSH,"accepted"),q._current=this,q._delayedHangup)throw new j(A.CANCELED);q._activationMutex=!1}catch(a){throw q._activationMutex=!1,this._close(a,"Unable to handle inbound call push"),a}}_isInWaitingHall(e){return!e.conversation||(e.conversation.options||[]).indexOf(qt.WAITING_HALL)<0?!1:this._isRestricted(e)}_isRestricted(e){let t=(e.conversation.participants||[]).find(i=>S.comparePeerId(i.peerId,e.peerId));return t&&t.restricted||!1}_isAudienceMode(e){return e.conversation?.options?.includes(qt.AUDIENCE_MODE)||!1}_isAudienceModeListener(){return this._conversation?.audienceMode&&this._conversation?.restricted}async _acceptConcurrent(){if(!this._mediaSource||!this._conversation||!this._transport)throw new j(A.UNKNOWN_ERROR);this._state="PROCESSING";let e=this._mediaSource.getMediaSettings();this._logWithMediaSettings(I.ACCEPT_CONCURRENT,e),c.debug("Concurrent call",{conversationId:this._conversation.id});try{this._statFirstMediaReceived.markAcceptCall(this._transport.getTopology()),await this._signaling.acceptCall(this._mediaSource.getMediaSettings()),v.onCallAccepted(),this._state="ACTIVE",this._participantState=z.ACCEPTED,this._changeFeatureSet(),this._openTransport(Object.values(this._participants),!0)}catch(t){this._close(t,"Unable to accept concurrent call")}}_getMainRoomParticipants(){return S.mapSharedParticipants(Object.values(this._participants).filter(e=>!e.isInRoom))}async accept(e){if(this._state!=="IDLE")throw T.log(I.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||!this._transport)throw new j(A.UNKNOWN_ERROR);this._state="PROCESSING",c.debug("Accept incoming call",e);try{await this._mediaSource.request(e);let t=this._mediaSource.getMediaSettings();this._logWithMediaSettings(I.ACCEPT_INCOMING,t),this._changeMediaSettings(t),this._statFirstMediaReceived.markAcceptCall(this._transport.getTopology()),await this._signaling.acceptCall(t),this._participantState=z.ACCEPTED;let i=this._getMuteStatesForCurrentRoom(),a=Object.keys(i);a.length&&this._onMuteParticipant({muteStates:i,mediaOptions:a,muteAll:!0,stateUpdated:!0}),this._registerParticipantLocalMuteState({muteStates:this._conversation.muteStatesPersonal});let o=await this._signaling.getRooms(this._isCallAdmin());o.rooms?.rooms&&o.rooms.rooms.forEach(l=>{l.participantIds?.forEach(p=>{this._participants[p]&&(this._participants[p].isInRoom=!0)})}),this._conversation.roomId=o.rooms?.roomId||null;let s=await this._extractExternalRoomsData(o.rooms?.rooms,o.rooms?.roomId);if(v.onCallAccepted(),v.onLocalStream(this._mediaSource.getStream(),t),v.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._getMuteStatesForCurrentRoom(),this._getMainRoomParticipants(),s),d.useParticipantListChunk){let l=await this._getInitialParticiapntListChunk();l?.participants?.forEach(p=>{let u=S.composeId(p),m=this._participants[u];m&&(m.movieShareInfos=p.movieShareInfos)}),this._onConversationParticipantListChunk({participants:l})}return v.onLocalStatus("WAITING"),this._toggleJoinAvailability(),this._changeNeedRate(),this._state="ACTIVE",this._changeFeatureSet(),this._openTransport(Object.values(this._participants),!0),await this._processConversationUrlSharingInfo(),await this._processConnectionAsrInfo(),this._conversation}catch(t){throw this._close(t,"Unable to accept call"),t}}async decline(){if(this._state!=="IDLE")throw T.log(I.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(I.DECLINE_INCOMING,this._mediaSource?.getMediaSettings()),this._participantState=z.HUNGUP,this._signaling.ready&&await this._signaling.hangup(A.REJECTED),this._close(new j(A.REJECTED))}async hangup(){c.debug("Hangup");let e=this._state==="ACTIVE"?A.HUNGUP:A.CANCELED;T.log(I.HANGUP,e),this._signaling.ready?(await this._signaling.hangup(e),this._close(new j(e))):v.onHangup(new j(A.HUNGUP),this._conversation&&this._conversation.id)}async addParticipant(e,t){if(!this._signaling.ready){this._close(new j(A.UNKNOWN_ERROR),"Unable to add participant");return}let i=await this._signaling.addParticipant(e.map($.toSignaling),t),a=null;i.type==="error"&&(i.error==="call-unfeasible"?a=i.status:a=A.UNKNOWN_ERROR);let o=i.participants;for(let s of o)await this._onAddParticipant(S.composeId(s),s,a)}async addParticipantLegacy(e,t){if(!this._signaling.ready){this._close(new j(A.UNKNOWN_ERROR),"Unable to add participant");return}let i=await this._signaling.addParticipantLegacy(e,t),a=null;i.type==="error"&&(i.error==="call-unfeasible"?a=i.status:a=A.UNKNOWN_ERROR);let o=i.participants;for(let s of o)await this._onAddParticipant(S.composeId(s),s,a)}async removeParticipant(e,t=!1){this._signaling.ready&&(await this._signaling.removeParticipant(e,t),this._onRemoveParticipant(e))}setVolume(e){this._audioOutput.volume=e}updateStatisticsInterval(){this._transport&&this._transport.updateStatisticsInterval()}_openTransport(e,t){if(!this._transport)return;let i=[];for(let a of e)(a.state===z.CALLED||a.state===z.ACCEPTED)&&(this._transport.isAllocated(a.id)||this._transport.allocate(a.id,t)),a.state===z.ACCEPTED&&i.push(a.id);i.length&&this._transport.open(i,null,!!this._conversation?.observer)}_close(e,t){t&&c.error(t,e),c.debug("Close conversation",e),Sr.sendHangupEvent(e,this._transport?.getTopology()),ze.destroy(),this._signaling.readyToSend(!1),e.error?this._signaling.ready&&this._signaling.hangup(A.FAILED):T.log(I.ERROR,e.hangup),q._activationMutex=!1;let i=this._conversation&&this._conversation.id;if([A.CANCELED,A.NOT_FRIENDS,A.CALLEE_IS_OFFLINE,A.CALLER_IS_BLOCKED,A.CALLER_IS_REJECTED].indexOf(e.hangup)!==-1||e.hangup===A.REJECTED&&!e.remote){v.onHangup(e,i),this.destroy();return}if(e.hangup===A.HUNGUP&&(!e.remote||this._isCalledState())){v.onHangup(e,i),this.destroy();return}if(e.hangup===A.MISSED&&!e.remote){v.onHangup(e,i),this.destroy();return}if(this._cooldownQueueCleanupTimer!==null&&(window.clearInterval(this._cooldownQueueCleanupTimer),this._cooldownQueueCleanupTimer=null),(e.hangup===A.SOCKET_CLOSED||e.hangup===A.NOT_FOUND)&&q._current&&!this._conversation){this._cleanupSignaling(),this._cleanupMediaSource();return}if(e.hangup===A.BUSY&&!e.remote){this._cleanupSignaling(),this._cleanupMediaSource();return}this._state="CLOSE",this._participantState=z.HUNGUP,this._changeFeatureSet(),this._cleanupMediaSource(),this._cleanupParticipants(),this._cleanupParticipantAgnosticStreams(),this._cleanupTransport(),this._cleanupSpeakerDetector(),this._cleanupSpecListener(),this._cleanupSignaling(),this._api.cleanup(),T.destroy(),Me.destroy(),this._conversation=null,this._myLastRequestedLayouts={},q._current=null,q._delayedHangup=!1,v.onHangup(e||new j(A.UNKNOWN_ERROR),i)}destroy(){let e=this._conversation&&this._conversation.id;c.debug("Destroy conversation",{conversationId:e}),this._cooldownQueueCleanupTimer!==null&&(window.clearInterval(this._cooldownQueueCleanupTimer),this._cooldownQueueCleanupTimer=null),this._state="CLOSE",this._participantState=z.HUNGUP,this._cleanupMediaSource(),this._cleanupParticipants(),this._cleanupParticipantAgnosticStreams(),this._cleanupTransport(),this._cleanupSpeakerDetector(),this._cleanupSpecListener(),this._cleanupSignaling(),this._api.cleanup(),this._cleanupListeners(),T.destroy(),Me.destroy(),this._conversation=null,this._myLastRequestedLayouts={},q._current=null,q._delayedHangup=!1}async _getConversationParams(e){let t=await this._api.getConversationParams(e);c.debug("Api.getConversationParams",t);let i=[],{turn_server:a,stun_server:o}=t;if(o&&i.push(o),a&&a.urls){let s=a.urls.filter((l,p,u)=>u.indexOf(l)===p);s.push(`${s[s.length-1]}?transport=tcp`),i.push({urls:s,username:a.username,credential:a.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}async _startConversation(e,t,i,a,o="",s=!1,l=!1,p){Qe(I.SIGNALING_CONNECTED);let u=S.uuid();c.debug("Conversation: start",{conversationId:u,opponentIds:e,opponentType:t,direction:i});let m=a.includes(ae.VIDEO),C=await this._api.startConversation(u,e,t,m,o,s,l,{onlyAdminCanShareMovie:p});c.debug("Api.startConversation",C);let k=await this._getConversationParams(C.id);C.endpoint=this._addGeoParamsToEndpoint(C.endpoint,k);let D=await this._connectSignaling(et.START,C);return await this._setConversation(C,D,i),D}async _joinConversation(e){Qe(I.SIGNALING_CONNECTED);let{conversationId:t,mediaOptions:i,chatId:a,joinLink:o,observedIds:s,payload:l}=e;c.debug("Conversation: join",{conversationId:t,joinLink:o,observedIds:s});let p=i.includes(ae.VIDEO),u;if(t)u=await this._api.joinConversation(t,p,a);else if(o)u=await this._api.joinConversationByLink(o,p,s,l);else throw new j(A.UNKNOWN_ERROR);c.debug("Api.joinConversation",u),await this._getConversationParams(u.id);let m=await this._connectSignaling(et.JOIN,u);return await this._setConversation(u,m,st.JOINING),m}async _prepareConversation(e,t=ie.USER,i){Qe(I.SIGNALING_CONNECTED),c.debug("Conversation: push",{conversationId:e,type:t,peerId:i});let a=this._api.getUserId();if(!a)throw new j(A.UNKNOWN_ERROR);let o=await this._getConversationParams(e),s=o.device_idx||0,l=`${d.wssBase}?userId=${a}&entityType=${t}&deviceIdx=${s}&conversationId=${e}&token=${d.wssToken}`;l=this._addGeoParamsToEndpoint(l,o);let p={id:e,peerId:i,endpoint:l,is_concurrent:!1,p2p_forbidden:!1,device_idx:s},u=await this._connectSignaling(et.ACCEPT,p);return q._current&&(q._current._participantState===z.ACCEPTED||q._current._participantState===z.CALLED)?(c.log("Push rejected (busy)"),T.log(I.PUSH,"busy"),this._signaling.ready&&this._signaling.hangup(A.BUSY),Promise.reject(new j(A.BUSY))):(q._current&&(q._current.destroy(),q._current=null),await this._setConversation(p,u,st.INCOMING,t),u)}async _createParticipant(e,t){let i=Object.assign({id:null,externalId:null,mediaSettings:fe(),participantState:{},state:z.CALLED,status:null,remoteStream:null,mediaSource:null,platform:null,clientType:null,roles:[],networkRating:1,lastRequestedLayouts:{},muteStates:{},unmuteOptions:[],observedIds:[],isInRoom:!1,markers:null},e);return i.externalId||(i.externalId=await this._getParticipantId(t??i.id)),this._api.cacheExternalId(t??i.id,i.externalId),t&&this._api.mapDecorativeId(t,i.id),i.observedIds?.length&&(i.externalId.observer=!0),e.markers&&(i.markers=this._denormalizeMarkers(i.id,e.markers)),i}async _getParticipantId(e){try{return await this._api.userId(e)}catch(t){throw this._close(new j(A.NETWORK_ERROR),t),t}}async _setConversation(e,t,i,a=ie.USER){let{participants:o}=t.conversation;o.forEach(u=>{let m=S.composeId(u),C=$.fromSignalingParticipant(u,!1);if(C){this._api.cacheExternalId(m,C);let k=S.composeDecorativeId(u),D=$.fromSignalingParticipant(u);k&&D&&(this._api.cacheExternalId(k,D),this._api.mapDecorativeId(u.decorativeUserId,u.id))}});let s=this._api.getUserId(),l=e.device_idx||0;if(!s){let u=(t.conversation.participants||[]).find(m=>S.comparePeerId(m.peerId,t.peerId));if(!u)throw new j(A.UNKNOWN_ERROR);s=Number(u.id),u.idType&&(a=u.idType),u.deviceIdx&&(l=u.deviceIdx),this._api.setUserId(s)}let p=S.composeParticipantId(s,a,l);this._conversation={userId:s,compositeUserId:p,externalId:await this._getExternalIdByParticipantId(p),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||"DIRECT",direction:i,concurrent:t.isConcurrent||e.is_concurrent||!1,needRate:!1,chatId:t.conversation.multichatId,roles:[],recordsInfoByRoom:new Map,asrInfoByRoom:new Map,muteStates:new Map,muteStatesPersonal:{},joinLink:e.join_link,pinnedParticipantIdByRoom:new Map,mediaModifiers:t.mediaModifiers,options:[],networkRating:1,waitingHall:this._isInWaitingHall(t),observer:!1,asrInfo:t.conversation.asrInfo||null,roomId:t.rooms?.roomId||null,audienceMode:this._isAudienceMode(t),restricted:this._isRestricted(t),urlSharingInfoByRoom:new Map},Ae.conversationId=t.conversation.id||e.id,this._signaling.setConversationId(this._conversation.id),e.p2p_forbidden&&(d.forceRelayPolicy=e.p2p_forbidden),T.log(I.RELAY_POLICY,d.forceRelayPolicy?"1":"0"),this._changeFeatureSet(),this._logDevices()}_updateConversation(e){if(!this._conversation)throw new j(A.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||"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 Bi;return this.subscribe(e,"SOURCE_CHANGED",this._onLocalMediaStreamChanged.bind(this)),this.subscribe(e,"SCREEN_STATUS",this._onScreenSharingStatus.bind(this)),this._audioFix=new zt(e),e}async _connectSignaling(e,t){this._signaling.setEndpoint(t.endpoint),this._signaling.setWebTransportEndpoint(t.wt_endpoint??null),this.subscribe(this._signaling,Ee.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._signaling,Ee.FAILED,this._onSignalingFailed.bind(this)),this.subscribe(this._signaling,Ee.RECONNECT,this._onSignalingReconnect.bind(this));let i=await this._signaling.connect(e,t);return Me.logEventualStat({name:I.SIGNALING_CONNECTED}),i}async _processConnection(e){await this._registerConnectionParticipants(e),this._processRooms(e),this._processMuteStates(e),this._processRecordInfos(e),this._onOptionsChanged(e.conversation.options),e.chatRoom&&e.chatRoom.totalCount&&this._onChatRoomUpdated(Yr.ATTENDEE,e.chatRoom.totalCount,e.chatRoom.firstParticipants,null,null)}_onConversationParticipantListChunk(e){let t=e.participants;t&&v.onConversationParticipantListChunk(this._participantListChunkToExternalChunk(this._createParticipantListChunk(t)))}_createParticipantListChunk(e){return{...{participants:[],countBefore:0,countAfter:0,markerFound:!1},...e}}_participantListChunkToExternalChunk(e){let t=S.mapSharedParticipants(e.participants.reduce((i,a)=>{let o=S.composeId(a);return this._participants[o]&&i.push(this._participants[o]),i},[]));return{...e,participants:t}}async _registerConnectionParticipants(e){await this._registerParticipants(e.conversation.participants),e.participants?.participants&&await this._registerParticipants(e.participants?.participants);let t=e?.rooms?.rooms??[];for(let i of t)await this._registerParticipants(i?.participants?.participants??[],!0)}async _registerParticipants(e,t=!1){if(this._conversation)for(let i of e){let a=S.composeId(i);if(c.test("Conversation:RegisterParticipant",a),this._isMe(a)){this._conversation.roles=i.roles||[],this._conversation.roles.length&&(c.debug(`Local roles changed: ${i.roles}`),v.onLocalRolesChanged(this._conversation.roles,!0)),this._registerParticipantLocalMuteState(i);continue}if(i.state===z.HUNGUP||i.state===z.REJECTED){this._participants[i.id]&&this._removeParticipant(this._participants[i.id],A.HUNGUP);continue}let o=S.composeDecorativeId(i),s=await this._createParticipant({id:a,externalId:$.fromSignalingParticipant(i),mediaSettings:fe(i.mediaSettings),participantState:S.mapParticipantState(i),state:i.state,roles:i.roles||[],status:"WAITING",muteStates:i.muteStates||{},unmuteOptions:i.unmuteOptions||[],observedIds:i.observedIds||[],markers:this._denormalizeMarkers(a,i.markers),movieShareInfos:i.movieShareInfos,isInRoom:t},o);this._registerParticipantInCache(s),i.roles&&i.roles.length&&(c.debug(`Roles for participant [${a}] changed: ${i.roles}`),v.onRolesChanged(this._participants[a].externalId,i.roles,!0))}}_registerParticipantLocalMuteState({muteStates:e,unmuteOptions:t}){if(!e)return;let i=async()=>{let a=lr(e,Oe.MUTE),o=lr(e,Oe.MUTE_PERMANENT);for(let s of[a,o])s.length&&await this._onMuteParticipant({muteStates:e,unmuteOptions:t,mediaOptions:s,stateUpdated:!0})};S.setImmediate(()=>i().catch(a=>c.error(a)))}_getStatusByTransportState(e){let t=null;return e==="CONNECTED"?t="CONNECTED":e==="CONNECTING"||e==="OPENED"?t="CONNECTING":e==="RECONNECTING"&&(t="RECONNECT"),t}_registerParticipantInCache(e){return this._participants[e.id]=e,e}async _getExistedParticipantByIdOrCreate(e){let t=this._participants[e];if(t)return t;let i=this._api.getDecorativeIdByInitialId(S.decomposeId(e).id),a=i?S.composeUserId(i):void 0;return this._createParticipant({id:e},a)}async _getExternalIdByParticipantId(e){if(this._isMe(e))return this._conversation?.externalId;if(d.useParticipantListChunk)return(await this._getExistedParticipantByIdOrCreate(e)).externalId;if(this._participants[e]?.externalId)return this._participants[e].externalId;{let t=await this._getParticipantId(e);return this._api.cacheExternalId(e,t),t}}async _registerParticipantAndSetMarkersIfChunkEnabled(e,t){if(d.useParticipantListChunk){let i=this._registerParticipantInCache(await this._getExistedParticipantByIdOrCreate(e));return i.markers=this._denormalizeMarkers(i.id,t),i}return this._participants[e]}_warnParticipantNotInConversation(e){c.warn(`Participant [${e}] isn't in conversation`)}_denormalizeMarkers(e,t){if(!t)return null;let i=Object.values(t).find(a=>"ts"in a&&"rank"in a);return Object.entries(t).reduce((a,[o,s])=>(a[o]={...i,...s,id:e},a),{})}_processRooms(e){let t=e.rooms?.roomId??null;this._onRoomSwitched(t,!0)}_processMuteStates(e,t=!1){let i=yn(e);this._setMuteStatesForRoomId(i,null);for(let l of e.rooms?.rooms??[])this._setMuteStatesForRoomId(l.muteStates,l.id);let a=this._getMuteStatesForCurrentRoom();t&&(a=Mn(e,a));let o=Object.keys(a),s=this._conversation?.roomId;o.length&&this._onMuteParticipant({muteStates:a,mediaOptions:o,muteAll:!0,stateUpdated:!0,roomId:s},t)}_processRecordInfos(e){this._onRecordInfo(e.conversation?.recordInfo??null);for(let t of e.rooms?.rooms??[])this._onRecordInfo(t.recordInfo??null,t.id)}_processPinnedParticipants(e){e.conversation.pinnedParticipantId?this._onPinParticipant(e.conversation.pinnedParticipantId):this._conversation?.pinnedParticipantIdByRoom.delete(null);for(let t of e.rooms?.rooms??[])t.pinnedParticipantId?this._onPinParticipant(t.pinnedParticipantId,!1,void 0,t.id):this._conversation?.pinnedParticipantIdByRoom.delete(t.id)}_allocateTransport(){if(!this._conversation||!this._mediaSource)return;this._transport=new _r(this._conversation.topology,this._signaling,this._mediaSource,this._serverSettings),this._debugInfo=new gi,this.subscribe(this._transport,"STATE_CHANGED",this._onTransportStateChanged.bind(this)),this.subscribe(this._transport,"LOCAL_STATE_CHANGED",this._onTransportLocalStateChanged.bind(this)),this.subscribe(this._transport,"REMOTE_TRACK_ADDED",this._onRemoteTrackAdded.bind(this)),this.subscribe(this._transport,"REMOTE_TRACK_REMOVED",this._onRemoteTrackRemoved.bind(this)),this.subscribe(this._transport,"AUDIO_MIX_STALL",this._onAudioMixStall.bind(this)),this.subscribe(this._transport,"REMOTE_DATA_STATS",this._onRemoteDataStats.bind(this)),this.subscribe(this._transport,"SIGNALLED_STALLED_PARTICIPANTS",this._onRemoteSignalledStall.bind(this)),this.subscribe(this._transport,"TOPOLOGY_CHANGED",this._onTopologyChanged.bind(this)),this.subscribe(this._transport,"NETWORK_STATUS",this._onNetworkStatus.bind(this)),this.subscribe(this._transport,"REMOTE_STREAM_SECOND",this._onRemoteStreamSecond.bind(this)),this.subscribe(this._transport,"PEER_CONNECTION_CLOSED",this._onPeerConnectionClosed.bind(this)),this.subscribe(this._transport,"ASR_TRANSCRIPTION",this._onAsrTranscription.bind(this)),this.subscribe(this._transport,"ANIMOJI_STREAM",this._onAnimojiStream.bind(this)),this.subscribe(this._transport,"ANIMOJI_ERROR",this._onAnimojiError.bind(this));let e=this._conversation.direction===st.OUTGOING&&!this._conversation.concurrent;for(let t of Object.values(this._participants))(t.state===z.ACCEPTED||t.state===z.CALLED)&&this._transport.allocate(t.id,e)}_createSpeakerDetector(){this._transport&&this._conversation&&(this._volumesDetector=new gr(this._transport),this.subscribe(this._volumesDetector,"VOLUMES_DETECTED",this._onVolumesDetected.bind(this)),this._speakerDetector=new fr(this._volumesDetector,this._transport,this._conversation.topology),this.subscribe(this._speakerDetector,"SPEAKER_CHANGED",this._onSpeakerChanged.bind(this)),this._localVolumeDetector=new fi(this._mediaSource))}_createSpecListener(){this._transport&&this._volumesDetector&&(this._specListener=new Ri(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()?"✔":"✖")),T.log(I.DEVICES,`${e}_${t}`)}_logWithMediaSettings(e,t){T.log(e,[t?.isAudioEnabled&&"audio",t?.isVideoEnabled&&"video"].filter(Boolean).join("_"))}_removeParticipant(e,t){if(!(e.state===z.CALLED||e.state===z.ACCEPTED||this._state==="CLOSE")&&(e.id===this._lastSignalledActiveSpeakerId&&(this._lastSignalledActiveSpeakerId=null),!!this._participants[e.id])){t===A.HUNGUP?this._setParticipantsStatus([e],"HANGUP"):this._setParticipantsStatus([e],"ERROR",t),e.mediaSource?.disconnect(),this._conversation&&this._conversation.pinnedParticipantIdByRoom.get(null)===e.id&&this._conversation.pinnedParticipantIdByRoom.delete(null),this._conversation&&this._conversation.roomId&&this._conversation.pinnedParticipantIdByRoom.get(this._conversation.roomId)===e.id&&this._conversation.pinnedParticipantIdByRoom.delete(this._conversation.roomId);for(let[i,a]of Object.entries(e.lastRequestedLayouts))this._streamIdByStreamDescription.delete(i),this._sequenceNumberByStreamDescription.delete(i),this._cooldownTimestampByStreamDescription.delete(i),this._streamWaitTimerByStreamDescription.has(i)&&(window.clearTimeout(this._streamWaitTimerByStreamDescription.get(i)),this._streamWaitTimerByStreamDescription.delete(i)),this._sendUpdateDisplayLayout({[i]:{stopStream:!0}});this._api.unmapDecorativeId(e.id),delete this._participants[e.id],v.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=>{e.remoteStream?.getTracks().forEach(t=>t.stop()),e.remoteAudioTrack?.stop(),e.secondStream?.getTracks().forEach(t=>t.stop()),e.mediaSource?.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()}async _onAddParticipant(e,t,i){c.debug(`Add new participant [${e}]`);let a=this._participants[e];if(a&&(a.state===z.ACCEPTED||a.state===z.CALLED)){c.warn(`Participant [${a.id}:${a.state}] is already in conversation`);return}if(!a){let o=S.composeDecorativeId(t);a=this._registerParticipantInCache(await this._createParticipant({id:e,externalId:$.fromSignalingParticipant(t,!!t.decorativeExternalUserId),mediaSettings:fe(t.mediaSettings),state:t.state,roles:t.roles||[],muteStates:t.muteStates||{},unmuteOptions:t.unmuteOptions||[],observedIds:t.observedIds||[]},o))}this._setParticipantsStatus([a],"WAITING"),i?(a.state=z.HUNGUP,this._removeParticipant(a,i)):this._transport&&(a.state=z.CALLED,this._transport.allocate(a.id,!0),T.log(I.ADD_PARTICIPANT),this._invokeRolesChangedCallbackIfNeeded(a))}_onRemoveParticipant(e){c.debug(`Remove participant [${e}]`);let t=[];for(let i=0;i<=Ps;i++){let a=S.compose(e,i),o=this._participants[a];o&&t.push(o)}if(!t.length){this._warnParticipantNotInConversation(e);return}if(this._transport)for(let i of t)this._transport.close(i.id);T.log(I.REMOVE_PARTICIPANT)}async changeDevice(e){return e==="audiooutput"?this._audioOutput.changeOutput():this._mediaSource?this._mediaSource.changeDevice(e):Promise.reject(te.UNKNOWN)}stopVideoTrack(){return this._mediaSource?.stopVideoTrack()}async toggleScreenCapturing(e){return this._mediaSource?this._mediaSource.toggleScreenCapturing(e):Promise.reject(te.UNKNOWN)}async disableScreenCapturing(){return this._mediaSource?this._mediaSource.disableScreenCapturing():Promise.reject(te.UNKNOWN)}toggleAnimojiCapturing(e){this._mediaSource&&this._mediaSource.toggleAnimojiCapturing(e)}setAnimojiSvg(e,t=null,i=null){if(!this._transport||!this._conversation)return;let a=!t,o=t??this._conversation.compositeUserId;if(e instanceof ArrayBuffer){let s=i??this._conversation.externalId.id;this._transport.setAnimojiSvg(o,{svg:e,userId:s,isMe:a});return}this._transport.setAnimojiSvg(o,{svg:e,isMe:a})}setAnimojiFill(e){this._transport?.setAnimojiFill(e)}async setVideoStream(e,t=!1){if(this._mediaSource)return this._mediaSource.setVideoStream(e,t)}async setAudioStream(e){if(this._mediaSource)return this._mediaSource.setAudioStream(e)}async toggleLocalVideo(e){if(this._mediaSource)return T.log(I.MEDIA_STATUS,e?"video_1":"video_0"),this._mediaSource.toggleVideo(e)}async toggleLocalAudio(e){if(this._mediaSource)return T.log(I.MEDIA_STATUS,e?"audio_1":"audio_0"),this._mediaSource.toggleAudio(e)}async changePriorities(e){if(e.length<2||!this._signaling.ready)return;let t={},i={};for(let a of e){let o=typeof a.uid=="object"?a.uid:$.fromId(a.uid),s=$.toString(o);i[s]=a.priority}for(let a of Object.values(this._participants)){let o=$.toString(a.externalId);i.hasOwnProperty(o)&&(t[a.id]=i[o])}await this._signaling.changePriorities(t)}async changeParticipantState(e,t){for(let[i,a]of Object.entries(e))if(i.length>5||a.length>5)throw new Error("key/value max length is 5 chars, mappings with empty values (null or empty string) are discarded");t&&!this._isCallAdmin()&&(t=void 0),await this._signaling.changeParticipantState(e,t)}async putHandsDown(){this._checkAdminRole(),await this._signaling.putHandsDown()}async requestKeyFrame(e){let t={};return t[$e(e)]={keyFrameRequested:!0},this._signaling.updateDisplayLayout(t)}async requestTestMode(e,t){return this._signaling.requestTestMode(e,t)}async updateDisplayLayout(e){if(e.length<1||!this._signaling.ready||this._transport?.getTopology()!=="SERVER")return;c.log(`Update display layout request [${this._signaling.getNextCommandSequenceNumber()}]`,e);let t={};for(let a of e){let o=typeof a.uid=="object"?a.uid:$.fromId(a.uid),s=this._api.getCachedOkIdByExternalId(o);if(!s){let u=$.toString(o);c.log(`Unknown participant external ID ${u}`);continue}let l=$e({participantId:s,mediaType:a.mediaType,streamName:a.streamName}),p=this._participants[s];p?p.lastRequestedLayouts[l]=a:this._isMe(s)&&(this._myLastRequestedLayouts[l]=a),Kt(a)?(this._isMe(s)&&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]=a),a.mediaType==="SCREEN"&&!Kt(a)&&Qe(Ut(s))}let i=this._cooldownTimestampByStreamDescription.keys();for(;this._streamIdByStreamDescription.size>d.videoTracksCount;){let a=i.next();if(a.done){c.error("Cannot accommodate all streaming requests: tracks available "+d.videoTracksCount+"; requested streams: "+Array.from(this._streamIdByStreamDescription.keys()));break}this._stopStreaming(a.value),t[a.value]={stopStream:!0}}await this._sendUpdateDisplayLayout(t)}async feedback(e){return this._signaling.feedback(e)}userFeedbackStats(e,t,i){if(this._conversation)if(!d.clientEventsLoggingEnabled)this._api.sendUserFeedbackStats(this._conversation.id,e,t,i);else{let a={event_type:I.USER_FEEDBACK_RECEIVED,user_response:e};t!==void 0&&(a.reason=t),i!==void 0&&(a.group_call_users_count=i),T.logClientEvent(a,!0)}}sendClientEvent(e,t={},i=!1){let a={event_type:e,...t};T.logClientEvent(a,i)}_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=ui(e),a=this._participants[i.participantId],o=this._conversation?.externalId,s=this._isMe(i.participantId);if(a||s){switch(i.mediaType){case"STREAM":case"MOVIE":{if(i.streamName){let l={stream:null,streamName:i.streamName,mediaType:i.mediaType};s?v.onLocalLive(o,l):v.onRemoteLive(a.externalId,l)}break}case"CAMERA":{v.onRemoteStream(a.externalId,null);break}case"SCREEN":{v.onRemoteScreenStream(a.externalId,null);break}}T.log(I.PAT_DEALLOCATED)}else c.log(`Cannot find participant to stop streaming: ${i.participantId}`)}this._streamIdByStreamDescription.delete(e)}async _sendUpdateDisplayLayout(e){if(Object.keys(e).length===0)return;c.log(`Update display layout send [${this._signaling.getNextCommandSequenceNumber()}]`,e);let t=await this._signaling.updateDisplayLayout(e);if(!t)return;let i=[];for(let[a,o]of Object.entries(t.errorCodeByParticipantId||{})){let s=ui(a),l=this._participants[s.participantId];if(l){let p;typeof o!="number"?(c.warn(`Unexpected error code ${o} received for participant ${s.participantId}`),p=vn.UNKNOWN_ERROR):p=In(o),i.push({externalId:l.externalId,errorReason:p})}}if(i&&i.length)throw new ta("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 a=i.value;if(a[1]+ys>Date.now())break;let s=a[0];this._stopStreaming(s),e[s]={stopStream:!0}}while(!0);this._sendUpdateDisplayLayout(e)}_onParticipantSourcesUpdate(e){if(this._conversation){let t=e.participantUpdateInfos;c.log("Received participant sources update notification",t);for(let i of t)this._waitForStreamIfNeeded(i)}}async _onParticipantPromoted(e){this._conversation&&this._conversation.audienceMode?(c.log("Promoted in audience mode",!e.demote),this._conversation.restricted=e.demote,this._processRecordInfos(e),!e.demote&&this._mediaSource&&this._changeMediaSettings(this._mediaSource.getMediaSettings())):(c.log("Promoted in waiting hall",!e.demote),e.demote?(c.log("Kicked from waiting hall"),this._close(new j(A.REMOVED))):(this._updateConversation(e),await this._onJoinPart2(e))),v.onPromoted(e.demote)}async _onChatRoomUpdated(e,t=0,i=[],a,o){c.log(`Chat room updated: ${e}`);let s=[],l=[],p=[],u=[],m=[];if(i.length&&i.forEach(D=>{if(D.externalId){let G=$.fromSignaling(D.externalId);m.push(G),this._api.cacheExternalId(D.id.id,G)}else{let G=S.decomposeId(D.id.id).id;s.push(G),u.push(G)}}),a?.length&&a.forEach(D=>{let G=S.decomposeId(D).id;s.push(G),l.push(G)}),o?.length&&o.forEach(D=>{let G=S.decomposeId(D).id;s.push(G),p.push(G)}),!s.length){v.onChatRoomUpdated(e,t,m,[],[]);return}if(u.length){let D=await this._api.getExternalIdsByOkIds(u);m.push(...D)}let C=await this._api.getExternalIdsByOkIds(l),k=await this._api.getExternalIdsByOkIds(p);v.onChatRoomUpdated(e,t,m,C,k)}async _onSharedMovieUpdate(e){let t=this._conversation?.externalId;for(let i of e.data)if(this._isMe(i.participantId))v.onLocalLiveUpdate(t,i);else{let o=await this._getExternalIdByParticipantId(i.participantId);o&&v.onRemoteLiveUpdate(o,i)}}async _onSharedMovieInfoStarted(e){c.log(`Shared movie started data received: ${e.notification}`),await this._processSharedMovieInfo(e.movieShareInfo,e.roomId)}async _processSharedMovieInfos(e,t=null){e&&await Promise.all(e.map(i=>this._processSharedMovieInfo(i,t)))}async _processSharedMovieInfo(e,t=null){if(!e)return;let i=this._conversation?.externalId;if(this._isMe(e.initiatorId))v.onLocalSharedMovieInfo(i,e,t);else{let o=await this._getExternalIdByParticipantId(e.initiatorId);o&&v.onRemoteSharedMovieInfo(o,e,t)}this._forceOpenTransportForAloneInCall()}async _processConnectionSharedMovieInfo(e){let t=e.conversation.participants.find(i=>this._isMe(S.composeId(i)));await this._processSharedMovieInfos(t?.movieShareInfos,e?.rooms?.roomId??null)}async _processConnectionAsrInfo(e){let t=e?.conversation.asrInfo??this._conversation?.asrInfo;if(t&&this._conversation?.asrInfoByRoom.set(null,t),e?.rooms?.rooms)for(let o of e.rooms.rooms)o.asrInfo&&this._conversation?.asrInfoByRoom.set(o.id,o.asrInfo);let i=e?.rooms?.roomId??this._conversation?.roomId??null,a=this._conversation?.asrInfoByRoom.get(i);if(a){let o=await this._getExternalIdByParticipantId(a.initiatorId);o&&v.onAsrSet({externalId:o,movieId:a.movieId},i)}else i&&v.onAsrSet(null,i)}async _processConversationUrlSharingInfo(e){if(!this._conversation)return;e&&this._extractConnectionUrlSharingInfo(e);let{urlSharingInfoByRoom:t}=this._conversation,i=this._conversation.roomId,a=t.get(i);if(a&&!this._isMe(a.initiatorId)){let o=await this._getExternalIdByParticipantId(a.initiatorId);o&&v.onRemoteSharedUrl(o,a.sharedUrl,i)}}_extractConnectionUrlSharingInfo(e){if(!this._conversation)return;let{urlSharingInfoByRoom:t}=this._conversation;if(e.conversation.urlSharingInfo?t.set(null,e.conversation.urlSharingInfo):t.delete(null),e.rooms?.rooms)for(let i of e.rooms.rooms)i.urlSharingInfo?t.set(i.id,i.urlSharingInfo):t.delete(i.id)}async _onSharedMovieInfoStopped(e){c.log(`Shared movie stopped data received: ${e.notification}`);let t=this._conversation?.externalId,{initiatorId:i,movieId:a,source:o,roomId:s=null}=e,l={initiatorId:i,movieId:a,source:o};if(this._isMe(i))v.onLocalSharedMovieStoppedInfo(t,l,s);else{let u=await this._getExternalIdByParticipantId(i);if(u){let m=this._participants[i];m?.movieShareInfos&&(m.movieShareInfos=m.movieShareInfos.filter(C=>C&&C.movieId!==a)),v.onRemoteSharedMovieStoppedInfo(u,l,s)}}}async _onUrlSharingInfoUpdated(e){if(c.log(`Shared URL data received: ${e.notification}`),!this._conversation)return;let{urlSharingInfoByRoom:t,roomId:i}=this._conversation,{initiatorId:a,sharedUrl:o,roomId:s=null}=e;if(o?t.set(s,{sharedUrl:o,initiatorId:a}):t.delete(s),!(!o&&s!==i&&t.has(i))&&(!o||!this._isMe(a))){let l=await this._getExternalIdByParticipantId(a);l&&v.onRemoteSharedUrl(l,o,s)}}_onFeaturesPerRoleChanged(e){c.log(`Features per role changed: ${e.notification}`),v.onFeaturesPerRoleChanged(e.featuresPerRole)}_waitForStreamIfNeeded(e){let t=this._matchStreamDescription(e.participantStreamDescription);if(!t)return;let{mediaType:i,participantId:a}=t;if(i==="ANIMOJI")return;let o=this._participants[a];if(d.producerScreenDataChannel&&i==="SCREEN"&&!e.fastScreenShare){c.log("skipping participant-sources-update notification since screenshare will be received over datachannel");return}let s=$e(t),l=this._sequenceNumberByStreamDescription.get(s);if(l&&l>e.sequenceNumber){c.warn(`Participant ${a} received outdated PAT response: sequence number ${e.sequenceNumber}; last sent sequence number for given participant is ${l}`),T.log(I.PAT_OUTDATED_RESPONSE);return}o&&e.suspend!==void 0&&i&&(c.debug(`participant-sources-update: mediaType=${i}, suspend=${e.suspend}`),v.onRemoteStreamSuspended(o.externalId,i,e.suspend));let p=e.streamId,u=e.rtpTimestamp?this._getWaitingTime(p,e.rtpTimestamp):0;if(u<=0){this._streamWaitTimerByStreamDescription.delete(s);let m=this._conversation?.externalId,C=this._isMe(a);if(!o&&!C){T.log(I.PAT_ERROR,"participantMissing"),c.error(`Could not find participant by ID: ${a}`);return}let k=C?m:o.externalId,D=this._streamByStreamId.get(p);if(!D){T.log(I.PAT_ERROR,"streamNotFound"),c.error(`Could not find stream by ID: ${p}`);return}T.log(I.PAT_ALLOCATED),this._streamIdByStreamDescription.set(s,p);let G=e.participantStreamDescription?.mediaType;if(G==="STREAM"||G==="MOVIE"){if(e.participantStreamDescription?.streamName){let Y={streamName:e.participantStreamDescription.streamName,stream:D,mediaType:G};C?v.onLocalLive(k,Y):v.onRemoteLive(k,Y)}}else if(d.producerScreenTrack&&G==="SCREEN")v.onRemoteScreenStream(o.externalId,D);else if(!C){let Y=(d.producerScreenTrack?null:o.secondStream)||D;v.onRemoteStream(o.externalId,Y)}}else{c.debug(`Waiting for ${u} until stream ${p} for ${s} is switched`);let m=window.setTimeout(this._waitForStreamIfNeeded.bind(this,e),u);this._streamWaitTimerByStreamDescription.set(s,m)}}_matchStreamDescription(e){if(!e)return null;if(this._streamIdByStreamDescription.has($e(e)))return e;let t=e.participantId;if(e.mediaType){let i={participantId:t,mediaType:null};if(this._streamIdByStreamDescription.has($e(i)))return i}else{let i={participantId:t,mediaType:"CAMERA"};if(this._streamIdByStreamDescription.has($e(i)))return i;let a={participantId:t,mediaType:"SCREEN"};if(this._streamIdByStreamDescription.has($e(a)))return a}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?S.includesOneOf(this._conversation.roles,[ct.ADMIN,ct.CREATOR]):!1}_checkAdminRole(){if(this._conversation&&!S.includesOneOf(this._conversation.roles,[ct.ADMIN,ct.CREATOR]))throw new Error("You don't have the required permission")}_isCalledState(){return this._participantState===z.CALLED}async grantRoles(e,t,i){this._checkAdminRole(),await this._signaling.grantRoles(e,t,i)}async startAsr(e){await this._signaling.startAsr(e)}async stopAsr(e){await this._signaling.stopAsr(e)}async requestAsr(e){this._isRealTimeAsrRequested=e,e&&this._forceOpenTransportForAloneInCall(),await this._signaling.requestAsr(e)}async muteParticipant(e=null,t,i=[],a=null){this._checkAdminRole(),await this._signaling.muteParticipant(e,t,i,a)}async enableFeatureForRoles(e,t){await this._signaling.enableFeatureForRoles(e,t)}async pinParticipant(e,t,i=null){this._checkAdminRole(),await this._signaling.pinParticipant(e,t,i),this._conversation?.pinnedParticipantIdByRoom.set(i,t?null:e)}async updateMediaModifiers(e){this._signaling.ready&&this._conversation&&(this._conversation.mediaModifiers=e,await this._signaling.updateMediaModifiers(e))}async enableVideoSuspend(e){this._signaling.ready&&this._conversation&&this._transport?.getTopology()==="SERVER"&&await this._signaling.enableVideoSuspend(e)}async enableVideoSuspendSuggest(e){this._signaling.ready&&this._conversation&&this._transport?.getTopology()==="SERVER"&&await this._signaling.enableVideoSuspendSuggest(e)}async changeOptions(e){if(this._signaling.ready&&this._conversation){this._checkAdminRole(),await this._signaling.changeOptions(e);let t=mn(this._conversation.options,e);this._onOptionsChanged(t)}}async getWaitingHall(e,t,i){if(!this._signaling)return Promise.reject();let a=null;if(e&&(a=Cn(e),a)){let u=this._api.getDecorativeIdByInitialId(a.id);a.id=u?S.composeUserId(u):a.id}let o=await this._signaling.getWaitingHall(a,t,i);if(o.error)return Promise.reject(o.message);let s=o.participants||[],{externalIds:l}=await this._resolveWaitingHallExternalIds(s),p=null;return s.length&&o.hasMore&&(p=Rn(s[s.length-1].id)),{participants:l,pageMarker:p,totalCount:o.totalCount||0}}async _resolveWaitingHallExternalIds(e){let t=new Map,i=[],a=[];if(e.length){let o=[];e.forEach(s=>{if(t.set(s.id.id,s.id.addedTs),s.externalId){let l=$.fromSignaling(s.externalId);i.push(s.id.addedTs),a.push(l),this._api.cacheExternalId(s.id.id,l)}else o.push(S.decomposeId(s.id.id).id)}),o.length&&!a.length&&(a=await this._api.getExternalIdsByOkIds(o),i=a.map(s=>{let l=this._api.getCachedOkIdByExternalId(s);return(l?t.get(l):void 0)||Date.now()}))}return{externalIds:a,timestamps:i}}async getAudienceModeHands(){if(!this._signaling.ready)throw new Error("Signaling is not ready");let e=await this._signaling.getHandQueue();if(e.error)return Promise.reject(e.message);let t=e.participants||[],{externalIds:i,timestamps:a}=await this._resolveWaitingHallExternalIds(t);return{timestamps:a,participants:i,totalCount:e.totalCount||0}}async promoteParticipant(e,t){if(this._signaling&&this._conversation)try{if(!S.includesOneOf(this._conversation.options,[qt.WAITING_HALL,qt.AUDIENCE_MODE]))throw new Error("Unable to promote a participant in the conversation with current options");if(this._checkAdminRole(),!e&&t)throw new Error("participantId is required");await this._signaling.promoteParticipant(e,t)}catch(i){throw c.warn(`Failed to promote participant ${e}. ${i}`),i}}async requestPromotion(e=!1){this._signaling.ready&&await this._signaling.requestPromotion(e)}async acceptPromotion(e=!1){this._signaling.ready&&await this._signaling.acceptPromotion(e)}async chatMessage(e,t=null){this._signaling.ready&&await this._signaling.chatMessage(e,t)}async chatHistory(e){if(this._signaling.ready){let t=await this._signaling.chatHistory(e);for(let i=t.messages.length-1;i>=0;i--){let a=t.messages[i];await this._onChatMessage(a)}}}async customData(e,t=null){this._signaling.ready&&await this._signaling.customData(e,t)}async createJoinLink(){if(this._conversation){let t=(await this._api.createJoinLink(this._conversation.id)).join_link;if(t)return this._conversation.joinLink=t,t}return Promise.reject()}async removeJoinLink(){if(this._conversation&&(await this._api.removeJoinLink(this._conversation.id)).success){delete this._conversation.joinLink;return}return Promise.reject()}async addMovie({movieId:e,gain:t,metadata:i,lang:a}){let o={movieId:e,lang:a};(t||t===0)&&(o.gain=t),i&&(o.metadata=i);let s=await this._signaling.addMovie(o);if(s.error)throw new Error(s.error);return{movieId:s.movieId,streamType:s.streamType}}async updateMovie(e){let t=await this._signaling.updateMovie(e);if(t.error)throw new Error(t.error)}async removeMovie(e){let t={movieId:e},i=await this._signaling.removeMovie(t);if(i.error)throw new Error(i.error)}async startUrlSharing(e){let t=await this._signaling.startUrlSharing(e);if(t.error)throw new Error(t.error)}async stopUrlSharing(){let e=await this._signaling.stopUrlSharing();if(e.error)throw new Error(e.error)}async updateRooms(e,t){let i=await this._signaling.updateRooms(e,t);if(i.error)throw new Error(i.error)}async activateRooms(e,t){let i=await this._signaling.activateRooms(e,t);if(i.error)throw new Error(i.error)}async switchRoom(e,t){let i=await this._signaling.switchRoom(e,t);if(i.error)throw new Error(i.error)}async removeRooms(e){let t=await this._signaling.removeRooms(e);if(t.error)throw new Error(t.error)}async startStream(e=!1,t=null,i=null,a="DIRECT_LINK",o=null,s=null){let l={movieId:i,name:t,privacy:a,groupId:o,roomId:s,streamMovie:!e},p=await this._signaling.startStream(l);if(p.error)return Promise.reject(p.message)}async stopStream(e=null){if((await this._signaling.stopStream({roomId:e})).error)return Promise.reject()}async publishStream(e=null){if((await this._signaling.publishStream({roomId:e})).error)return Promise.reject()}async recordSetConf(e,t,i=!1,a=null){let o=await this._signaling.recordSetConf({king:e,pawns:t,hideParticipantCount:i,roomId:a});if(o.error)throw new Error(o.error)}async getStreamInfo(){let e=await this._signaling.getRecordStatus();return{movieId:e.recordMovieId,preview:e.recordMoviePreviewUrl}}async setLocalResolution({video:e,effect:t}){if(e.width<d.videoMinWidth||e.height<d.videoMinHeight)throw new Error("Sizes received are less than the `videoMinWidth` or `videoMinHeight`");if(t){if(t.width<d.videoMinWidth||t.height<d.videoMinHeight)throw new Error("Sizes of effect received are less than the `videoMinWidth` or `videoMinHeight`");d.videoEffectMaxHeight=t.height,d.videoEffectMaxWidth=t.width}d.videoMaxWidth=e.width,d.videoMaxHeight=e.height,c.debug("Set local video resolution:",`video ${e.width}x${e.height}`+(t?`, effect ${t.width}x${t.height}`:"")),this._mediaSource&&(await this._mediaSource.setResolution({video:e,effect:t}),this._transport&&await this._transport.onCameraResolutionChanged())}async videoEffect(e){return this._mediaSource?.videoEffect(e)}async audioEffect(e,t){return this._mediaSource?.audioEffect(e?{effects:e,isPreset:t}:null)}_convertExternalIdsToServerExternalIds(e){return e.map(t=>({id:t.id,type:d.externalUserType}))}async getParticipants(e){let t=this._convertExternalIdsToServerExternalIds(e.externalIds),i=await this._signaling.getParticipants(t);if(i.error)throw new Error(i.error);let a=i.participants,o=this._transport?.getState();return Promise.all(a.map(async s=>{let l=S.composeId(s);return this._createParticipant({id:l,externalId:$.fromSignalingParticipant(s),mediaSettings:fe(s.mediaSettings),participantState:S.mapParticipantState(s),state:s.state,roles:s.roles||[],status:this._getStatusByTransportState(o)??"WAITING",muteStates:s.muteStates||{},unmuteOptions:s.unmuteOptions||[],observedIds:s.observedIds||[],markers:this._denormalizeMarkers(l,s.markers)},s.decorativeUserId)})).then(S.mapSharedParticipants)}async getParticipantListChunk(e){c.log("Request participant list chunk",e);let t=await this._signaling.getParticipantListChunk(e);if(t.error)throw new Error(t.error);let i=this._createParticipantListChunk(t.chunk),a=i.participants.filter(s=>{let l=S.composeId(s);return!this._participants[l]});await this._registerParticipants(a);let o=this._transport?.getState();return i.participants.forEach(s=>{let l=S.composeId(s),p=this._participants[l];p.status=this._getStatusByTransportState(o)??"WAITING",p.movieShareInfos=s.movieShareInfos,Object.assign(p.mediaSettings,fe(s.mediaSettings)),Object.assign(p.muteStates,s.muteStates),p.unmuteOptions=s.unmuteOptions??p.unmuteOptions,this._openTransport([p],!0)}),this._participantListChunkToExternalChunk(i)}async _getInitialParticiapntListChunk(){let e=d.participantListChunkInitIndex,t=d.participantListChunkInitCount,a=await this._signaling.getParticipantListChunk({listType:"GRID",fromIdx:e,count:t});return c.debug("Get initial participant list chunk",a.chunk),a.chunk}_onLocalMediaStreamChanged(e){if(!this._conversation||!this._mediaSource)return;let t=this._mediaSource.getMediaSettings();c.debug("Local media stream changed",t),e.kind==="audio"&&this._mediaSource&&(this._audioFix=new zt(this._mediaSource)),v.onLocalStreamUpdate(t,e.kind),!this._conversation?.waitingHall&&!this._conversation?.observer&&!this._isAudienceModeListener()&&this._changeMediaSettings(t)}_onScreenSharingStatus(e){let t=this._mediaSource?.getMediaSettings();if(c.log("Screen sharing changed",e.track,t),d.consumerScreenTrack){let i=e.track?new MediaStream([e.track]):null;v.onScreenStream(i,t)}}_changeRemoteMediaSettings(e,t){c.debug(`Remote media settings changed [${e}]`,t);let i=this._conversation?.externalId;if(this._isMe(e)&&i){v.onLocalMediaSettings(i,t);return}let o=this._participants[e];if(!o){this._warnParticipantNotInConversation(e);return}o.mediaSettings=t,this._state==="ACTIVE"&&v.onRemoteMediaSettings(o.externalId,t,o.markers),this._specListener&&this._specListener.onChangeRemoteMediaSettings(e,t)}_changeLocalParticipantState(e){c.debug("Local participant state force changed by admin",e),this._state==="ACTIVE"&&v.onLocalParticipantState(e)}_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"&&v.onRemoteParticipantState(i.externalId,i.participantState,i.markers)}_changeMultipleParticipantState(e,t){c.debug("Multiple participants state changed",e);let i=[],a;e.forEach((o,s)=>{if(this._isMe(s))a=o;else{let l=this._participants[s];if(!l){this._warnParticipantNotInConversation(s);return}l.participantState=o,i.push({externalId:l.externalId,participantState:{...o},markers:l.markers})}}),this._state==="ACTIVE"&&(a&&v.onLocalParticipantState(a),i.length&&v.onRemoteParticipantsState(i,t))}_invokeRolesChangedCallbackIfNeeded(e){this._state==="ACTIVE"&&e.roles&&e.roles.length&&(c.debug(`Roles for participant [${e.id}] changed: ${e.roles}`),v.onRolesChanged(e.externalId,e.roles,!0))}_onSignalingNotification(e){switch(e.notification){case N.ACCEPTED_CALL:return this._onAcceptedCall(e);case N.HUNGUP:return this._onHungup(e);case N.PARTICIPANT_ADDED:return this._onAddedParticipant(e);case N.PARTICIPANT_JOINED:return this._onJoinedParticipant(e);case N.CLOSED_CONVERSATION:return this._onClosedConversation(e);case N.MEDIA_SETTINGS_CHANGED:return this._onMediaSettingsChanged(e);case N.PARTICIPANT_STATE_CHANGED:return this._onParticipantStateChanged(e);case N.PARTICIPANTS_STATE_CHANGED:return this._onParticipantsStateChanged(e);case N.RATE_CALL_DATA:return this._onNeedRate();case N.FEATURE_SET_CHANGED:return this._onFeatureSetChanged(e);case N.MULTIPARTY_CHAT_CREATED:return this._onMultipartyChatCreated(e);case N.FORCE_MEDIA_SETTINGS_CHANGE:return this._onForceMediaSettingsChange(e);case N.SETTINGS_UPDATE:return this._onSettingsUpdate(e);case N.VIDEO_QUALITY_UPDATE:return this._onVideoQualityUpdate(e);case N.REGISTERED_PEER:return this._onPeerRegistered(e);case N.SWITCH_MICRO:return this._onMicSwitched(e);case N.CHAT_MESSAGE:return this._onChatMessage(e);case N.CUSTOM_DATA:return this._onCustomData(e);case N.RECORD_STARTED:return this._onRecordInfo(e.recordInfo,e.roomId);case N.RECORD_STOPPED:return this._onRecordInfo(null,e.roomId);case N.ROLES_CHANGED:return this._onRolesChanged(e.participantId,e.roles||[]);case N.MUTE_PARTICIPANT:return this._onMuteParticipant(e);case N.PIN_PARTICIPANT:return this._onPinParticipant(e.participantId,e.unpin,e.markers,e.roomId);case N.OPTIONS_CHANGED:return this._onOptionsChanged(e.options||[]);case N.PARTICIPANT_SOURCES_UPDATE:return this._onParticipantSourcesUpdate(e);case N.PROMOTE_PARTICIPANT:return this._onParticipantPromoted(e);case N.CHAT_ROOM_UPDATED:return this._onChatRoomUpdated(e.eventType,e.totalCount,e.firstParticipants,e.addedParticipantIds,e.removedParticipantIds);case N.JOIN_LINK_CHANGED:return this._onJoinLinkChanged(e);case N.FEEDBACK:return this._onFeedback(e);case N.MOVIE_UPDATE_NOTIFICATION:return this._onSharedMovieUpdate(e);case N.MOVIE_SHARE_STARTED:return this._onSharedMovieInfoStarted(e);case N.MOVIE_SHARE_STOPPED:return this._onSharedMovieInfoStopped(e);case N.URL_SHARING_INFO_UPDATED:return this._onUrlSharingInfoUpdated(e);case N.ROOMS_UPDATED:return this._onRoomsUpdated(e);case N.ROOM_UPDATED:return this._onRoomUpdated(e);case N.ROOM_PARTICIPANTS_UPDATED:return this._onRoomParticipantsUpdated(e);case N.FEATURES_PER_ROLE_CHANGED:return this._onFeaturesPerRoleChanged(e);case N.PARTICIPANT_ANIMOJI_CHANGED:return this._onParticipantAnimojiChanged(e);case N.ASR_STARTED:return this._onAsrStart(e);case N.ASR_STOPPED:return this._onAsrStop(e);case N.PROMOTION_APPROVED:return this._onPromotionApproved(e);case N.DECORATIVE_PARTICIPANT_ID_CHANGED:return this._onDecorativeParticipantIdChanged(e);case N.VIDEO_SUSPEND_SUGGEST:return this._onVideoSuspendSuggest(e)}}async _onPromotionApproved(e){let t=await this._getExternalIdByParticipantId(e.adminId);if(!t){this._warnParticipantNotInConversation(e.adminId);return}v.onPromotionApproved(t)}async _onSignalingReconnect(e){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()),this._processPinnedParticipants(e),e.conversation.state;let t=null;if(e.conversation.participants){let o=Object.keys(this._participants),s=[];for(let l of e.conversation.participants){let p=S.composeId(l),u=l.roles||[];if(this._isMe(p)){hi(this._conversation.roles,u)||this._onRolesChanged(p,u),t=()=>{this._registerParticipantLocalMuteState({muteStates:bn(l),unmuteOptions:l.unmuteOptions})};continue}s.push(p);let m=this._participants[p];if(!m)await this._onJoinedParticipant({participantId:l.id,participant:l,mediaSettings:l.mediaSettings});else{let C=fe(l.mediaSettings);Ua(C,m.mediaSettings)||this._changeRemoteMediaSettings(p,C);let k=S.mapParticipantState(l),D=m.participantState;S.isEqualParticipantState(k,D)||this._changeRemoteParticipantState(p,k),hi(u,m.roles)||this._onRolesChanged(m.id,u)}}for(let l of o)s.indexOf(l)<0&&this._removeParticipant(this._participants[l],A.HUNGUP)}let i=e.rooms?.roomId??null;this._conversation.roomId!==i?this._onRoomSwitched(i).then(t):(this._processMuteStates(e,!0),t?.()),this._processRecordInfos(e),this._onOptionsChanged(e.conversation.options)}_onSignalingFailed(e){c.error("Signaling failed",e),this._close(e)}async _onAcceptedCall(e){let t=S.composeMessageId(e),i=S.getPeerIdString(e.peerId);if(c.debug(`Participant accepted call [${t}]`),this._statFirstMediaReceived.markAcceptedCall(this._transport?.getTopology()),this._conversation&&this._isMe(t)){this._close(new j(A.MISSED),"Call accepted on other device");return}let a=this._participants[t];if(!a){let s=this._api.getDecorativeIdByInitialId(t),l=s?S.composeUserId(s,e.participantType):void 0;a=this._registerParticipantInCache(await this._createParticipant({id:t,mediaSettings:fe(e.mediaSettings)},l))}a.state=z.ACCEPTED,a.mediaSettings=fe(e.mediaSettings),this._logWithMediaSettings(I.ACCEPTED_OUTGOING,a.mediaSettings),this._conversation&&this._conversation.direction===st.OUTGOING&&(this._state==="IDLE"||this._state==="PROCESSING")&&(this._state="ACTIVE",this._changeFeatureSet()),this._state==="ACTIVE"&&this._transport&&this._transport.open([a.id],i),this._changeRemoteMediaSettings(t,a.mediaSettings),this._changeRemoteParticipantState(t);let o=Object.keys(a.muteStates);o.length&&this._onMuteParticipant({muteStates:a.muteStates,mediaOptions:o,stateUpdated:!0,participantId:t}),this._state==="ACTIVE"&&v.onAcceptedCall(a.externalId)}async _onHungup(e){c.debug(`Participant hungup [${e.participantId}]`,{reason:e.reason});let t=S.composeMessageId(e);if(this._conversation&&this._isMe(t)){this._close(new j(e.reason,{remote:!0}));return}await 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===A.REJECTED?z.REJECTED:z.HUNGUP,this._state!=="CLOSE"&&this._removeParticipant(i,A.HUNGUP)}async _onAddedParticipant(e){c.debug(`Participant added [${e.participantId}]`);let t=S.composeMessageId(e),i=this._participants[t];if(i&&i.state!==z.HUNGUP&&i.state!==z.REJECTED){c.debug(`Participant [${t}] is already in conversation and is active`);return}if(!i){let{participant:a}=e,o=a.decorativeUserId,s=await this._createParticipant({id:t,externalId:$.fromSignalingParticipant(a),mediaSettings:fe(a.mediaSettings),state:a.state,participantState:S.mapParticipantState(a),roles:a.roles||[],muteStates:a.muteStates||{},unmuteOptions:a.unmuteOptions||[],observedIds:a.observedIds||[]},o);i=this._registerParticipantInCache(s)}i.state=z.CALLED,i.mediaSettings=fe(e.participant?.mediaSettings),i.participantState=S.mapParticipantState(e.participant),i.roles=e.participant?.roles||[],this._setParticipantsStatus([i],"WAITING"),this._state!=="IDLE"&&this._transport&&this._transport.allocate(i.id,!0),v.onParticipantAdded(i.externalId,i.markers),this._changeRemoteMediaSettings(t,i.mediaSettings),this._changeRemoteParticipantState(t,i.participantState),this._invokeRolesChangedCallbackIfNeeded(i)}async _onJoinedParticipant(e){c.debug(`Participant joined [${e.participantId}]`),this._statFirstMediaReceived.markParticipantJoined(this._transport?.getTopology());let t=S.composeMessageId(e),i=this._participants[t];if(i&&i.state===z.ACCEPTED){c.warn(`Participant [${t}] is already in conversation and is active`);return}if(!i){let{participant:o}=e,s=o.decorativeUserId,l=await this._createParticipant({id:t,externalId:$.fromSignalingParticipant(o),mediaSettings:fe(o.mediaSettings),state:o.state,participantState:S.mapParticipantState(o),roles:o.roles||[],muteStates:o.muteStates||{},movieShareInfos:o.movieShareInfos,unmuteOptions:o.unmuteOptions||[],observedIds:o.observedIds||[],markers:this._denormalizeMarkers(t,o.markers)},s);i=this._registerParticipantInCache(l)}this._conversation&&this._conversation.direction===st.OUTGOING&&(this._state==="IDLE"||this._state==="PROCESSING")&&(this._state="ACTIVE",this._changeFeatureSet()),i.state=z.ACCEPTED,i.mediaSettings=fe(e.mediaSettings),i.participantState=S.mapParticipantState(e.participant),i.roles=e.participant.roles||[],this._transport?.isAllocated(i.id)?this._setParticipantsStatus([i],"CONNECTED"):this._setParticipantsStatus([i],"WAITING"),this._state!=="IDLE"&&this._transport&&(this._transport.isAllocated(i.id)||this._transport.allocate(i.id,!0),this._transport.open([i.id],null,!!this._conversation?.observer)),v.onParticipantJoined(i.externalId,i.markers),this._changeRemoteMediaSettings(t,i.mediaSettings),this._changeRemoteParticipantState(t,i.participantState),this._invokeRolesChangedCallbackIfNeeded(i);let a=Object.keys(i.muteStates);a.length&&this._onMuteParticipant({muteStates:i.muteStates,mediaOptions:a,stateUpdated:!0,participantId:t}),await this._processSharedMovieInfos(i.movieShareInfos)}_onClosedConversation(e){this._toggleJoinAvailability(),this._close(new j(e.reason,{remote:!0}))}async _onMediaSettingsChanged(e){let t=S.composeMessageId(e);await this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers),this._changeRemoteMediaSettings(t,fe(e.mediaSettings))}async _onParticipantStateChanged(e){let t=S.composeMessageId(e),i=S.mapParticipantState(e);this._isMe(t)?this._changeLocalParticipantState(i):(await this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers),this._changeRemoteParticipantState(t,i))}async _onParticipantsStateChanged(e){let{participants:t,roomId:i}=e,a=t.map(({id:l,markers:p})=>this._registerParticipantAndSetMarkersIfChunkEnabled(l,p));await Promise.all(a);let o=new Map,s=t.map(({id:l,participantState:p})=>this._getExternalIdByParticipantId(l).then(u=>[l,u&&S.mapParticipantState({participantState:p})]));try{(await Promise.all(s)).forEach(([p,u])=>{u&&o.set(p,u)}),this._changeMultipleParticipantState(o,i)}catch(l){c.warn(`_onParticipantsStateChanged: Failed to get external ids. ${l}`)}}_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(),v.onMultipartyChatCreated(this._conversation))}async _onForceMediaSettingsChange(e){if(!this._mediaSource)return;let t=this._mediaSource.getMediaSettings(),i=fe(e.mediaSettings);t.isAudioEnabled!==i.isAudioEnabled&&await this._mediaSource.toggleAudio(i.isAudioEnabled),t.isVideoEnabled!==i.isVideoEnabled&&await this._mediaSource.toggleVideo(i.isVideoEnabled),d.consumerScreenTrack&&t.isScreenSharingEnabled!==i.isScreenSharingEnabled&&await this._mediaSource.toggleScreenCapturing({captureScreen:i.isScreenSharingEnabled,fastScreenSharing:i.isFastScreenSharingEnabled,captureAudio:i.isAudioSharingEnabled})}_onSettingsUpdate(e){c.debug("Got settings update notification",e);let t={camera:e.camera,screenSharing:e.screenSharing};this._serverSettings=ea(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,a={camera:Object.assign({},this._serverSettings.camera,{maxBitrateK:t,maxDimension:i}),screenSharing:null};this._serverSettings=ea(this._serverSettings,a),this._transport&&this._transport.updateSettings(this._serverSettings)}_onPeerRegistered(e){let t=S.composeMessageId(e);this._participants[t]&&(this._participants[t].clientType=e.clientType,this._participants[t].platform=e.platform),v.onPeerRegistered()}async _onMicSwitched(e){v.onDeviceSwitched(ae.AUDIO,!e.mute),await this.toggleLocalAudio(!e.mute)}async _onChatMessage(e){let t=S.composeMessageId(e),i=await this._getExternalIdByParticipantId(t);if(!i){this._warnParticipantNotInConversation(t);return}v.onChatMessage(e.message,i,e.direct)}async _onCustomData(e){if(e.data.hasOwnProperty("sdk"))return;let t=S.composeMessageId(e),i=await this._getExternalIdByParticipantId(t);if(!i){this._warnParticipantNotInConversation(t);return}v.onCustomData(e.data,i,e.direct)}async _onRecordInfo(e,t=null){if(!this._conversation)return;let i=this._conversation.recordsInfoByRoom.get(t),a=!1;if(!i!=!e?a=!0:i&&e&&(a=i.recordMovieId!==e.recordMovieId||i.recordStartTime!==e.recordStartTime),a)if(this._conversation.recordsInfoByRoom.set(t,e),e){let o=await this._getExternalIdByParticipantId(e.initiator);o?v.onRecordStarted(o,e.recordMovieId,e.recordStartTime,e.recordType,e.recordExternalMovieId,e.recordExternalOwnerId,t):this._warnParticipantNotInConversation(e.initiator)}else v.onRecordStopped(t);e&&this._forceOpenTransportForAloneInCall()}async _changePinnedParticipantForRoom(){if(!this._conversation)return;let e=this._conversation.roomId,t=this._conversation.pinnedParticipantIdByRoom.get(e);if(t&&!this._isMe(t)){let i=await this._getExternalIdByParticipantId(t);i&&v.onPinnedParticipant(i,!1,null,e)}}async _changeRecordInfoForRoom(){if(!this._conversation)return;let e=this._conversation.roomId,t=this._conversation.recordsInfoByRoom.get(e);if(t){let i=await this._getExternalIdByParticipantId(t.initiator);i?v.onRecordStarted(i,t.recordMovieId,t.recordStartTime,t.recordType,t.recordExternalMovieId,t.recordExternalOwnerId,e):this._warnParticipantNotInConversation(t.initiator)}else v.onRecordStopped(e)}async _changeAsrInfoForRoom(){if(!this._conversation)return;let e=this._conversation.roomId,t=this._conversation.asrInfoByRoom.get(e);if(t){let i=await this._getExternalIdByParticipantId(t.initiatorId);i&&v.onAsrSet({externalId:i,movieId:t.movieId},e)}else v.onAsrSet(null,e)}async _changeUrlSharingInfoForRoom(){if(!this._conversation)return;let{roomId:e}=this._conversation,{urlSharingInfoByRoom:t}=this._conversation,i=t.get(e);if(i){let a=await this._getExternalIdByParticipantId(i.initiatorId);a&&v.onRemoteSharedUrl(a,i.sharedUrl,e)}}async _onParticipantAnimojiChanged(e){if(this._conversation){let t=await this._getExternalIdByParticipantId(e.participantId);if(!t){this._warnParticipantNotInConversation(e.participantId);return}v.onParticipantVmojiUpdate(t)}}async _onAsrStart(e){if(!this._conversation)return;let t=e.asrInfo,i=e.roomId||null;this._conversation.asrInfoByRoom.set(i,t);let a=await this._getExternalIdByParticipantId(t.initiatorId);if(!a){this._warnParticipantNotInConversation(t.initiatorId);return}v.onAsrStarted(a,t.movieId,i),this._forceOpenTransportForAloneInCall()}_onAsrStop(e){if(!this._conversation)return;let t=e.roomId||null;t===null&&(this._conversation.asrInfo=null),this._conversation.asrInfoByRoom.delete(t),v.onAsrStopped(t)}async _onAsrTranscription(e){if(!this._conversation)return;let t=await this._getExternalIdByParticipantId(e.participantId);if(!t){this._warnParticipantNotInConversation(e.participantId);return}v.onAsrTranscription(t,e.text,e.timestamp,e.duration)}_onRolesChanged(e,t){if(this._conversation&&this._isMe(e)&&!hi(this._conversation.roles,t)){c.debug(`Local roles changed: ${t}`),this._conversation.roles=t,v.onLocalRolesChanged(t),this._processMuteState({mediaOptions:lr(this._getMuteStatesForCurrentRoom(),Oe.MUTE_PERMANENT),stateUpdated:!0}),S.includesOneOf(t,[ct.ADMIN,ct.CREATOR])?this._refreshRooms(!0):t.length||this._onRoomSwitched(null);return}let i=this._participants[e];i&&!hi(i.roles,t)&&(c.debug(`Roles for participant [${e}] changed: ${t}`),i.roles=t,v.onRolesChanged(i.externalId,t))}async _onMuteParticipant(e,t=!1){if(!this._conversation)return;let{muteAll:i,muteStates:a={},unmuteOptions:o=[],mediaOptions:s=[],roomId:l=null}=e,p=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 u=this._participants[e.participantId];u&&(c.debug(`Mute states for participant [${e.participantId}] changed`,a),v.onMuteStates(a,o,s,i,e.unmute,u.externalId,p?.externalId,e.stateUpdated,e.requestedMedia,e.roomId));return}if(e.requestedMedia?.length||(i&&!t?this._setMuteStatesForRoomId(a,l):i||(this._conversation.muteStatesPersonal=a)),e.adminId&&this._isMe(e.adminId)){i&&v.onMuteStates(a,o,s,i,e.unmute,null,this._conversation.externalId,e.stateUpdated,e.requestedMedia,e.roomId);return}await this._processMuteState({mediaOptions:s,muteAll:i,unmute:e.unmute,adminId:e.adminId,stateUpdated:e.stateUpdated,requestedMedia:e.requestedMedia,roomId:e.roomId,unmuteOptions:o,muteStates:a})}_changeMuteStatesForRoom(e,t){if(!this._conversation)return;let i=this._getMuteStatesForRoomId(t),a=this._getMuteStatesForRoomId(e),o=Object.keys(i),s=Object.keys(a);this._processMuteState({mediaOptions:Array.from(new Set([...o,...s])),roomId:e,muteAll:!0,stateUpdated:!0})}async _processMuteState(e){if(!this._conversation||!this._mediaSource||this._participantState!==z.ACCEPTED)return;let{mediaOptions:t=[],muteAll:i,unmute:a,stateUpdated:o,requestedMedia:s,roomId:l=null,unmuteOptions:p=[]}=e,u=e.adminId?this._participants[e.adminId]:null,m=Object.assign({},e.muteStates??this._getMuteStatesForRoomId(l)),C=this._mediaSource.getMediaSettings(),k=Object.entries(m);for(let[D,G]of k){let Y=d.newMuteRules&&this._isCallAdmin()&&i;if(!(G!==Oe.MUTE&&G!==Oe.MUTE_PERMANENT||Y)&&(this._isCallAdmin()&&G===Oe.MUTE_PERMANENT&&!i&&(m[D]=Oe.MUTE),!(!t.includes(D)||a)))switch(D){case ae.VIDEO:C.isVideoEnabled&&(v.onDeviceSwitched(ae.VIDEO,!1),await this.toggleLocalVideo(!1));break;case ae.AUDIO:C.isAudioEnabled&&(v.onDeviceSwitched(ae.AUDIO,!1),await this.toggleLocalAudio(!1));break;case ae.SCREEN_SHARING:C.isScreenSharingEnabled&&(v.onDeviceSwitched(ae.SCREEN_SHARING,!1),await this.disableScreenCapturing());break;case ae.AUDIO_SHARING:C.isAudioSharingEnabled&&(v.onDeviceSwitched(ae.AUDIO_SHARING,!1),await this.toggleScreenCapturing({captureScreen:C.isScreenSharingEnabled,fastScreenSharing:C.isFastScreenSharingEnabled,captureAudio:!1}));break}}v.onMuteStates(m,p,t,i,a,null,u?.externalId,o,s,l)}async _onPinParticipant(e,t=!1,i,a=null){if(!this._conversation)return;let o=this._conversation.pinnedParticipantIdByRoom.get(a);if(o&&o!==e)if(this._isMe(o))v.onLocalPin(!0,a);else{let s=await this._getExternalIdByParticipantId(o);s&&v.onPinnedParticipant(s,!0,this._denormalizeMarkers(e,i),a)}if(this._isMe(e))v.onLocalPin(t,a);else{let s=await this._getExternalIdByParticipantId(e);s&&v.onPinnedParticipant(s,t,this._denormalizeMarkers(e,i),a)}this._conversation.pinnedParticipantIdByRoom.set(a,t?null:e)}_onOptionsChanged(e){this._conversation&&!un(this._conversation.options,e)&&(this._conversation.options=e,v.onOptionsChanged(e))}_onNetworkStatus(e){if(this._conversation){let t=[];for(let[i,a]of Object.entries(e)){let o;if(this._isMe(i)||i==="")o=this._conversation.networkRating;else if(this._participants[i])o=this._participants[i].networkRating;else continue;if(o!==a)if(this._isMe(i)||i==="")this._conversation.networkRating=a,v.onLocalNetworkStatusChanged(a);else{let s=this._participants[i];s.networkRating=a,t.push({uid:s.externalId,rating:a})}}if(t.length===0)return;c.log("Received network status update: ",e),v.onNetworkStatusChanged(t)}}_onRemoteStreamSecond(e,t){let i=this._participants[e];if(i){if(d.producerScreenTrack){v.onRemoteScreenStream(i.externalId,t);return}if(i.secondStream=t,d.videoTracksCount>0){let a=e;if(!this._streamIdByStreamDescription.has(a)){c.error("Received remote stream notification for a participant that has no track associated with it",a);return}let o=this._streamIdByStreamDescription.get(a);if(!o||this._streamWaitTimerByStreamDescription.has(a)){c.log("Delaying secondary stream start/stop until main stream becomes available",a);return}let s=this._streamByStreamId.get(o);if(!s){T.log(I.PAT_ERROR,"streamNotFound"),c.error(`Could not find stream by ID: ${o}`);return}v.onRemoteStream(i.externalId,i.secondStream||s)}else{let a=t||i.remoteStream;a&&v.onRemoteStream(i.externalId,a)}}}_onAnimojiStream(e,t){if(this._isMe(e)&&this._mediaSource){v.onVmojiStream(t,this._mediaSource.getMediaSettings());return}let i=this._participants[e];i&&v.onRemoteVmojiStream(i.externalId,t)}async _onAnimojiError(e){try{let t=await this._getExternalIdByParticipantId(e.participantId);t&&(delete e.participantId,v.onVmojiError({...e,externalId:t}))}catch(t){c.warn("_onAnimojiError failed",t)}}_onPeerConnectionClosed(e){e==="SERVER"&&this._cleanupParticipantAgnosticStreams()}_changeFeatureSet(){if(this._conversation){let e=this._state==="ACTIVE",t=this._conversation.features.includes(Qr.ADD_PARTICIPANT);v.onCallState(e,t,this._conversation)}}_changeNeedRate(){this._conversation&&this._conversation.needRate&&v.onRateNeeded()}_onVolumesDetected(e){let t=[];for(let[i,a]of Object.entries(e)){let o=this._participants[i];o&&o.externalId&&t.push({uid:o.externalId,volume:a.real})}v.onVolumesDetected(t)}_onSpeakerChanged(e){this._activeSpeakerId=e,this._participants[e]&&this._lastSignalledActiveSpeakerId!==e&&(v.onSpeakerChanged(this._participants[e].externalId),this._lastSignalledActiveSpeakerId=e)}async _onTransportStateChanged(e,t){c.debug(`Transport state has changed: ${t}`,e);let i=this._getStatusByTransportState(t);if(!i)return;let a=e.reduce((o,s)=>{if(s in this._participants){let l=this._participants[s];o.push(l),t==="CONNECTED"&&(l.remoteStream||(l.mediaSettings&&this._changeRemoteMediaSettings(s,l.mediaSettings),this._changeRemoteParticipantState(s,l.participantState)),this._updateDisplayLayoutFromCache(s))}else this._warnParticipantNotInConversation(s);return o},[]);a.length&&this._setParticipantsStatus(a,i)}async _onTransportLocalStateChanged(e){if(c.debug(`Local transport state has changed: ${e}`),e==="CONNECTED"&&(v.onLocalStatus("CONNECTED"),this._transport?.getTopology()==="SERVER")){let t=Object.values(this._myLastRequestedLayouts);await this.updateDisplayLayout(t)}e==="CONNECTING"&&v.onLocalStatus("CONNECTING"),e==="RECONNECTING"&&v.onLocalStatus("RECONNECT"),e==="FAILED"&&this._transport&&this._transport.allocated().length===0&&(this._signaling.ready&&await this._signaling.hangup(A.FAILED),this._close(new j(A.FAILED),"Transport failed"))}async _onRemoteTrackAdded(e,t,i){if(e.endsWith(je.AUDIO_MIX))c.debug("Remote audio mix track added"),this._audioOutput.add(i),v.onRemoteMixedAudioStream(t);else if(e.startsWith(je.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 a=this._participants[e];if(!a){let o=this._api.getDecorativeIdByInitialId(e),s=o?S.composeUserId(o):void 0;c.warn(`Conversation: track added before participant [id: ${e}, decorativeId: ${s}]`),a=this._registerParticipantInCache(await this._createParticipant({id:e},s)),this._setParticipantsStatus([a],"WAITING"),this._activeSpeakerId===e&&this._lastSignalledActiveSpeakerId!==e&&(v.onSpeakerChanged(a.externalId),this._lastSignalledActiveSpeakerId=e)}if(this._transport&&!this._transport.isAllocated(a.id)&&this._transport.allocate(a.id,!1),i.kind==="audio"&&(this._audioOutput.add(i),d.preserveAudioTracks||(a.remoteAudioTrack=i,t.removeTrack(i))),a.remoteStream!==t&&t.getTracks().length){if(a.remoteStream=t,a.secondStream)return;v.onRemoteStream(a.externalId,t)}a.mediaSettings&&this._changeRemoteMediaSettings(e,a.mediaSettings)}}_onRemoteTrackRemoved(e,t,i){switch(c.debug(`[${e}] remote track (removed)`,{track:i}),i.kind){case"audio":this._removeAudioTrack(e,t,i);break;case"video":case"screen":this._removeVideoTrack(e,t,i);break}}_removeAudioTrack(e,t,i){if(e!==je.AUDIO_MIX){let a=this._participants[e];if(!a||a.remoteStream&&a.remoteStream!==t)return}this._audioOutput.remove(i)}_removeVideoTrack(e,t,i){}_onTopologyChanged(e){e==="DIRECT"&&(this._onRemoteSignalledStall([]),this._onAudioMixStall(!1)),this._conversation&&(this._conversation.topology=e,this._changeFeatureSet(),this._isRealTimeAsrRequested&&this._forceOpenTransportForAloneInCall())}_onAudioMixStall(e){this._audioMixStalled!==e&&(this._audioMixStalled=e,c.debug("Audio mix stalled:",e),v.onLocalStatus(e?"RECONNECT":"CONNECTED"))}_onRemoteSignalledStall(e){let t={},i=[],a=[];c.debug("Participants stalled:",e);for(let o of e){if(t[o]=!0,!this._lastStalled[o]){let s=this._participants[o];s&&i.push(s)}delete this._lastStalled[o]}for(let o of Object.keys(this._lastStalled)){let s=this._participants[o];s&&a.push(s)}i.length&&this._setParticipantsStatus(i,"RECONNECT"),a.length&&this._setParticipantsStatus(a,"CONNECTED"),this._lastStalled=t}_onRemoteDataStats(e){this._debugInfo&&this._debugInfo.onRemoteDataStats(e,this._participants),this._fixAudioDevice(e.outbound.rtps),this._fixVideoDevice(e.outbound.rtps)}_fixAudioDevice(e){!y.hasMicrophone()||!this._audioFix||!this._mediaSource?.getMediaSettings().isAudioEnabled||this._audioFix.fix(e)}_fixVideoDevice(e){!y.hasCamera()||!this._audioFix||!this._mediaSource?.getMediaSettings().isVideoEnabled||this._audioFix.fixVideo(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}),v.onJoinStatus(t,e))}async _updateDisplayLayoutFromCache(e){if(this._transport?.getTopology()!=="SERVER")return;let t=this._participants[e];t&&t.lastRequestedLayouts&&Object.keys(t.lastRequestedLayouts).length&&await this.updateDisplayLayout(Object.values(t.lastRequestedLayouts))}_setParticipantsStatus(e,t,i=null){if(!e.length)return;let a=e.reduce((o,s)=>(s.status!==t&&(s.status=t,o.push(s.externalId)),o),[]);a.length&&v.onRemoteStatus(a,t,i)}_onJoinLinkChanged(e){v.onJoinLinkChanged(e.joinLink)}async _onRoomsUpdated(e){if(this._isCalledState())return;let t={};for(let i of Object.keys(mi)){let a=e.updates[i];a&&(t[i]={rooms:await Promise.all(a?.rooms?.map(this._convertRoomToExternal.bind(this))||[]),roomIds:a?.roomIds,deactivated:a?.deactivated})}v.onRoomsUpdated(t)}async _onRoomUpdated(e){let t=await this._convertRoomToExternal(e.room||null);e.events.some(i=>i===mi.UPDATE)&&(e.muteStates!==void 0&&this._setMuteStatesForRoomId(e.muteStates,e.roomId),e.recordInfo!==void 0&&this._conversation?.recordsInfoByRoom.set(e.roomId,e.recordInfo),e.asrInfo!==void 0&&this._conversation?.asrInfoByRoom.set(e.roomId,e.asrInfo)),this._isCalledState()||v.onRoomUpdated(e.events,e.roomId,t,e.deactivate||null)}async _convertRoomToExternal(e){if(!e)return null;let t=await Promise.all(e.participantIds?.map(s=>this._getExternalIdByParticipantId(s))||[]),i=await Promise.all(e.addParticipantIds?.map(s=>this._getExternalIdByParticipantId(s))||[]),a=await Promise.all(e.removeParticipantIds?.map?.(s=>this._getExternalIdByParticipantId(s))||[]),o=e.pinnedParticipantId?await this._getExternalIdByParticipantId(e.pinnedParticipantId):void 0;return{id:e.id,name:e.name,participantCount:e.participantCount,participantIds:t,addParticipantIds:i,removeParticipantIds:a,participants:e.participants?.participants?this._participantListChunkToExternalChunk(e.participants):void 0,active:e.active,muteStates:e.muteStates,pinnedParticipantId:o,countdownSec:e.countdownSec,timeoutMs:e.timeoutMs}}async _onRoomParticipantsUpdated(e){let t=this._transport?.getState(),i=e.roomId??null,a=e.addedParticipantIds?.map(k=>S.decomposeId(k).id)||[],o=await this._api.getExternalIdsByOkIds(a),s=e.addedParticipants;if(o.length&&s?.length!==o.length&&!this._isCalledState()){let k=this._convertExternalIdsToServerExternalIds(o);s=(await this._signaling.getParticipants(k)).participants}let l=await Promise.all(s?.map(async k=>{let D=S.composeId(k);return this._createParticipant({id:D,externalId:$.fromSignalingParticipant(k),mediaSettings:fe(k.mediaSettings),participantState:S.mapParticipantState(k),state:k.state,roles:k.roles||[],status:this._getStatusByTransportState(t)??"WAITING",muteStates:k.muteStates||{},unmuteOptions:k.unmuteOptions||[],observedIds:k.observedIds||[],markers:this._denormalizeMarkers(D,k.markers),isInRoom:i!==null},k.decorativeUserId)})||[]),p=!1;for(let k of l)k.id===this._conversation?.compositeUserId&&(p=!0),this._registerParticipantInCache(k);this._transport?.getState()==="IDLE"&&!this._isCalledState()&&this._openTransport(l,!0);let u=[],m=[];if(e?.removedParticipantMarkers){for(let k of e.removedParticipantMarkers)if(k.GRID?.id){let D=this._getExternalIdByParticipantId(k.GRID.id);m.push(D)}u=await Promise.all(m)}if(p&&await this._onRoomSwitched(i),u){let k=this._conversation?.pinnedParticipantIdByRoom.get(i);if(k){let D=await this._getExternalIdByParticipantId(k);if(D){for(let G of u)if($.compare(D,G)){this._conversation?.pinnedParticipantIdByRoom.delete(i);break}}}}let C={roomId:i,participantCount:e.participantCount,addedParticipantIds:o,addedParticipants:S.mapSharedParticipants(l),removedParticipantMarkers:e?.removedParticipantMarkers,removedParticipantIds:u};this._isCalledState()||v.onRoomParticipantsUpdated(C)}async _onRoomSwitched(e,t=!1){if(!this._conversation||this._conversation.roomId===e)return;let i=this._conversation.roomId;if(this._conversation.roomId=e,t&&!this._isCalledState()){v.onRoomStart(e);return}this._isCalledState()||v.onRoomSwitched(e),e!==null&&!this._isCallAdmin()&&await this._refreshRooms(!1),this._changePinnedParticipantForRoom(),this._changeRecordInfoForRoom(),this._changeMuteStatesForRoom(e,i),await this._changeAsrInfoForRoom(),await this._changeUrlSharingInfoForRoom()}async _refreshRooms(e){let t;this._isCalledState()||(t=await this._signaling.getRooms(e));let i=t?.rooms?.rooms??[],a=[];for(let o of i){let s=o.id??null;if(this._setMuteStatesForRoomId(o.muteStates,s),this._conversation?.recordsInfoByRoom.set(s,o.recordInfo??null),this._conversation?.pinnedParticipantIdByRoom.set(s,o.pinnedParticipantId??null),o.asrInfo&&this._conversation?.asrInfoByRoom.set(s,o.asrInfo),o.urlSharingInfo?this._conversation?.urlSharingInfoByRoom.set(s,o.urlSharingInfo):this._conversation?.urlSharingInfoByRoom.delete(s),e){await this._registerParticipants(o?.participants?.participants?.filter(p=>!this._participants[S.composeId(p)])||[],!0);let l=await this._convertRoomToExternal(o);l&&a.push(l)}}a.length&&!this._isCalledState()&&v.onRoomsUpdated({[mi.UPDATE]:{rooms:a}})}async _onFeedback(e){let t=[];for(let i of e.feedback){let a={...i,items:[]};for(let o of i.items){let s=await this._getExternalIdByParticipantId(o.participantId);s?a.items.push({...o,participantId:s}):this._warnParticipantNotInConversation(o.participantId)}t.push(a)}v.onFeedback(t,e.roomId)}async _onDecorativeParticipantIdChanged(e){if(!this._conversation||!e.decorativeParticipantId||!e.decorativeExternalParticipantId)return;let{participantId:t,decorativeParticipantId:i,decorativeExternalParticipantId:a}=e,o=this._isMe(t);c.debug(`Decorative participant id changed [${t}]`,e);let s=await this._getExternalIdByParticipantId(t);if(!s){this._warnParticipantNotInConversation(t);return}let l=$.fromSignaling(a,s.deviceIdx);v.onParticipantIdChanged(s,l),this._api.cacheExternalId(i,l),this._api.mapDecorativeId(i,t),o?this._conversation.externalId=l:this._participants[t].externalId=l}_onVideoSuspendSuggest(e){!this._conversation||this._conversation.topology!=="SERVER"||(c.debug("Video suspend suggested",e),v.onVideoSuspendSuggest(e.bandwidth))}_isMe(e){return e===this._conversation?.compositeUserId}_getMuteStatesForRoomId(e=null){return this._conversation?.muteStates.get(e)??{}}_getMuteStatesForCurrentRoom(){return this._getMuteStatesForRoomId(this._conversation?.roomId)}_setMuteStatesForRoomId(e={},t=null){this._conversation?.muteStates.set(t,e)}_forceOpenTransportForAloneInCall(){this._transport?.getTopology()==="SERVER"&&this._transport?.getState()==="IDLE"&&!this._isCalledState()&&this._transport.open(this._transport.allocated(),null,!!this._conversation?.observer,!0)}};q._delayedHangup=!1;var L=q,ta=class n extends Error{constructor(r,e){super(r),Object.setPrototypeOf(this,n.prototype),this.participantErrors=e}};var kt=null,Jt=null;function Nn(){kt=null,Jt=null}async function Ir(n=null,r){let e=n??d.apiBaseUrl;if(e)return e;if((r??d.apiEnv)!=="AUTO")return d.apiEndpoint(r);try{let t=atob("aHR0cHM6Ly9kbnMuZ29vZ2xlL3Jlc29sdmU/bmFtZT12aWRlby5fZW5kcG9pbnQub2sucnUmdHlwZT1UWFQ="),o=(await(await fetch(t,{method:"GET",mode:"cors",cache:"no-cache"})).json())?.Answer[0]?.data;if(!o)throw new Error("Wrong DNS response");return c.debug("Resolved API endpoint",o),o}catch(t){return c.warn("Failed to resolve API endpoint using DNS, default is used",t),d.apiEndpoint(r)}}async function Un(){return kt||Jt||(Jt=Ir(),kt=await Jt,Jt=null,kt)}async function Yt(n,r={},e=!1){if(!window.Blob||!window.navigator.sendBeacon)return;await Un();let t=Vn(n,r,e),i=new window.Blob([t],{type:"application/x-www-form-urlencoded"});window.navigator.sendBeacon(`${kt}/fb.do`,i)}async function Ci(n,r={},e=!1,t){await Un();let i=Vn(n,r,e);return bs(i,t)}async function bs(n,r){return new Promise((e,t)=>{let i=new XMLHttpRequest;i.open("POST",`${r??kt}/fb.do`,!0),i.setRequestHeader("Content-type","application/x-www-form-urlencoded"),i.onreadystatechange=()=>{if(i.readyState!==XMLHttpRequest.DONE)return;let a;try{a=JSON.parse(i.responseText)}catch{a={result:i.responseText}}i.status!==200||a.hasOwnProperty("error_msg")?t(a):e(a)},i.send(n)})}async function Bn(n,r){try{let e=await fetch(n,{method:"POST",body:r});if(!e.ok)throw new Error(`HTTP error! status: ${e.status}`);let t=await e.text();c.debug("Form data sent successfully",t)}catch(e){throw c.warn("Failed to send form data",e),e}}function Vn(n,r={},e=!1){r.method=n,r.format="JSON",r.application_key||(r.application_key=d.apiKey),e||(Ie.sessionKey?r.session_key=Ie.sessionKey:Ie.accessToken&&(r.access_token=Ie.accessToken));for(let[i,a]of Object.entries(r))typeof a=="object"&&(r[i]=JSON.stringify(a));let t="";for(let[i,a]of Object.entries(r))t&&(t+="&"),t+=`${i}=${encodeURIComponent(a)}`;return t}var yi=class{async createJoinLink(r){return{join_link:"nop"}}async removeJoinLink(r){return{success:!0}}async getAnonymTokenByLink(r,e){return""}log(r){}logClientStats(r){}logClientEvents(r){}getCachedOkIdByExternalId(r){return null}cacheExternalId(r,e){}mapDecorativeId(r,e){}unmapDecorativeId(r){}getDecorativeIdByInitialId(r){}replaceByInitialIdIdIfExists(r){return typeof r=="string"?parseInt(r,10):r}hangupConversation(r){}sendUserFeedbackStats(r,e,t,i){}async removeHistoryRecords(r){}async getServerTime(){return Date.now()}cleanup(){}};var As=10,Ds=700,ws=3e3,Pi=class extends yi{constructor(){super(...arguments);this._userId=null;this._externalUidsCache=new Map;this._decorativeIdToInitialId=new Map;this._initialIdToDecorativeId=new Map}async _callUnsafe(e,t={},i=!1){let a=async o=>{try{return await Ci(e,t,i)}catch(s){if(!s.hasOwnProperty("error_msg")&&(o++,c.debug(`${e} network error, attempt ${o}...`),o<As))return await S.delay(Math.min(o*Ds,ws)),a(o);throw c.warn(e,"error",s),s}};return a(0)}async _call(e,t={},i=!1){try{return await this._callUnsafe(e,t,i)}catch(a){c.warn("Api call error",a);let o=te.API;switch(a.error_code){case 102:case 103:case 104:return await this.authorize(),this._callUnsafe(e,t,i)}let s={message:a.error_msg,code:a.error_code};switch(a.custom_error&&(s.custom_error=a.custom_error),a.error_code){case 1101:o=A.SERVICE_DISABLED;break;case 300:o=A.NOT_FOUND;break;case 1102:o=A.CALLEE_IS_OFFLINE;break;case 1103:o=A.NOT_FRIENDS;break;case 1104:case 1106:o=A.EXTERNAL_API_ERROR;break;case 1113:o=A.CALLER_IS_REJECTED;break;case 1114:o=A.VCHAT_DETAILED_ERROR;break}throw new j(o,s)}}async userId(e){let t=S.extractOkId(e);if(Ie.isEmpty())return $.fromId(String(t));this._externalUidsCache.has(t)||await this._getExternalIdsByOkIds([t]);let i=this.getDecorativeIdByInitialId(t);return i&&(t=i),$.fromString(this._externalUidsCache.get(t))}async authorize(){if(this._ensureUuid(),!d.apiKey)throw new j(te.API,{message:"Required argument apiAppKey not passed"});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&&v.onTokenExpired(),new j(te.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})};Yt("log.externalLog",t)}logClientStats(e){let t={app_version:String(d.appVersion),sdk_type:"WEB",sdk_version:d.sdkVersion,version:1,items:e};d.clientStatsPlatform&&(t.platform=d.clientStatsPlatform);let i={data:JSON.stringify(t)};Yt("vchat.clientStats",i)}logClientEvents(e){let t={app_version:String(d.appVersion),sdk_type:"WEB",sdk_version:d.sdkVersion,version:1,items:e};d.clientStatsPlatform&&(t.platform=d.clientStatsPlatform);let i={data:JSON.stringify(t)};Yt("vchat.clientEvents",i)}async uploadDebugLogs(e,t,i,a){let o={conversationId:e,webrtcPlatform:d.platform,startTime:t,endTime:i},s=await this._callUnsafe("vchat.getLogUploadUrl",o),l=new FormData,p=new Blob([a],{type:"application/json"});l.append("file",p,"log.json");let u=new URL(s.upload_url);return u.searchParams.append("size",p.size.toString()),Bn(u.toString(),l)}async joinConversation(e,t=!1,i){let a={conversationId:e,isVideo:t,protocolVersion:d.protocolVersion};return i&&(a.chatId=i),this._call("vchat.joinConversation",a)}async createConversation(e,t="",i=!1,{onlyAdminCanShareMovie:a,audienceMode:o,audioOnly:s}={},l){let p=this._preareStartConversationData({conversationId:e,isVideo:!1,joiningAllowed:!0,payload:t,requireAuthToJoin:i,onlyAdminCanShareMovie:a,audienceMode:o,audioOnly:s,speakerIds:l});return this._startConversation(p)}async startConversation(e,t,i,a=!1,o="",s=!1,l=!1,{onlyAdminCanShareMovie:p}={}){let u=this._preareStartConversationData({conversationId:e,isVideo:a,joiningAllowed:s,payload:o,requireAuthToJoin:l,onlyAdminCanShareMovie:p});if(t&&t.length)switch(i){case tt.USER:u.uids=t.join(",");break;case tt.GROUP:u.gid=t[0];break;case tt.CHAT:u.chatId=t[0];break}return this._startConversation(u)}_ensureUuid(){if(!this._uuid){let e=nt.get("uuid");e||(e=S.uuid(),nt.set("uuid",e)),this._uuid=String(e)}}_preareStartConversationData({conversationId:e,isVideo:t,payload:i="",joiningAllowed:a=!1,requireAuthToJoin:o=!1,onlyAdminCanShareMovie:s,audienceMode:l=!1,audioOnly:p=!1,speakerIds:u=[]}){let m={conversationId:e,isVideo:t,protocolVersion:d.protocolVersion};if(a&&(m.createJoinLink=!0),i&&(m.payload=i),d.domain&&(m.domainId=d.domain),d.externalDomain&&(m.externalDomain=d.externalDomain),o&&(m.requireAuthToJoin=!0),s!==void 0&&(m.onlyAdminCanShareMovie=s),l&&(m.audienceMode=l),p&&(m.audioOnly=p),u.length){let C=u.map(k=>S.composeUserId(k));m.speakerIds=C.join(",")}return m}async _startConversation(e){return this._call("vchat.startConversation",e)}async createJoinLink(e){return this._call("vchat.createJoinLink",{conversationId:e})}async removeJoinLink(e){return this._call("vchat.removeJoinLink",{conversationId:e})}async getAnonymTokenByLink(e,t){let i={joinLink:e};t&&(i.anonymName=t);let a=await this._call("vchat.getAnonymTokenByLink",i);return this._userId=Number(a.uid),a.token}async joinConversationByLink(e,t=!1,i,a){let o={joinLink:e,isVideo:t,protocolVersion:d.protocolVersion};return i?.length&&(o.observedIds=i.join(",")),d.anonymToken&&(o.anonymToken=d.anonymToken),a&&(o.payload=a),this._call("vchat.joinConversationByLink",o)}async getOkIdsByExternalIds(e){let t=[],i=[],a=new Map,o=Array.from(this._externalUidsCache.keys()),s=Array.from(this._externalUidsCache.values());for(let p of e){let u=$.toString(p),m=s.indexOf(u);m>-1?t.push(this.replaceByInitialIdIdIfExists(o[m])):(a.set(String(p.id),u),i.push({id:p.id,ok_anonym:p.type==="ANONYM"}))}return i.length&&(await this._call("vchat.getOkIdsByExternalIds",{externalIds:i})).ids.forEach((p,u)=>{let m=Number(p.ok_user_id),C=String(p.external_user_id.id);a.has(C)&&(this.cacheExternalId(m,$.fromString(a.get(C))),t.push(m))}),t}async getParticipantIdsByExternalIds(e){await this.getOkIdsByExternalIds(e);let t=new Map,i=Array.from(this._externalUidsCache.keys()),a=Array.from(this._externalUidsCache.values());for(let o of e){let s=$.toString(o),l=a.indexOf(s);if(l>-1){let p=S.composeParticipantId(this.replaceByInitialIdIdIfExists(i[l]),ie.USER,o.deviceIdx);t.set(o,p)}}return t}async getExternalIdsByOkIds(e){let t=[],i=[];for(let o of e)if(this._externalUidsCache.has(o)){let s=this.getDecorativeIdByInitialId(o),l=this._externalUidsCache.get(s??o);t.push($.fromString(l))}else i.push(o);if(!i.length)return t;let a=await this._getExternalIdsByOkIds(i);return Array.from(a.values())}getCachedOkIdByExternalId(e){let t=Array.from(this._externalUidsCache.keys()),i=Array.from(this._externalUidsCache.values()),a=$.toString(e),o=i.indexOf(a);return o>-1?S.composeParticipantId(this.replaceByInitialIdIdIfExists(t[o]),ie.USER,e.deviceIdx):o>-1?S.composeParticipantId(t[o],ie.USER,e.deviceIdx):null}cacheExternalId(e,t){let i=S.extractOkId(e);this._externalUidsCache.set(i,$.toString(t))}mapDecorativeId(e,t){let i=S.extractOkId(e),a=S.extractOkId(t);this._decorativeIdToInitialId.set(i,a),this._initialIdToDecorativeId.set(a,i)}unmapDecorativeId(e){let t=S.extractOkId(e),i=this.getDecorativeIdByInitialId(t);i&&this._decorativeIdToInitialId.delete(i),this._initialIdToDecorativeId.delete(t)}getDecorativeIdByInitialId(e){let t=S.extractOkId(e);return this._initialIdToDecorativeId.get(t)}replaceByInitialIdIdIfExists(e){let t=S.extractOkId(e);return this._decorativeIdToInitialId.get(t)??t}async getConversationParams(e){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:A.HUNGUP};d.anonymToken&&(t.anonymToken=d.anonymToken),Yt("vchat.hangupConversation",t)}sendUserFeedbackStats(e,t,i,a){let o={collector:"app.vchat.events.product",data:JSON.stringify({application:`${d.appName}:${d.sdkVersion}`,platform:d.platform,items:[{type:1,operation:I.USER_FEEDBACK_RECEIVED,timestamp:Date.now(),custom:{vcid:e,user_response:t,reason:i,group_call_users_count:a}}]})};Yt("log.externalLog",o)}async removeHistoryRecords(e){await this._call("vchat.removeHistoryRecords",{recordIds:e.join(",")})}cleanup(){this._decorativeIdToInitialId=new Map,this._initialIdToDecorativeId=new Map}async _getExternalIdsByOkIds(e){let t=new Map;e=e.map(i=>this.getDecorativeIdByInitialId(i)??i);try{let i=await this._call("vchat.getExternalIdsByOkIds",{uids:e.join(",")}),a=(o,s)=>{for(let[l,p]of Object.entries(o)){let u=Number(l),m=$.fromId(p,s);t.set(u,m),this.cacheExternalId(u,m)}};i.external_ids&&a(i.external_ids,"USER"),i.anonym_ids&&a(i.anonym_ids,"ANONYM");for(let o of e){let s=Number(o);if(!t.has(s)){let l=$.fromId(String(s));t.set(s,l),this.cacheExternalId(s,l)}}return t}catch{return t}}async getServerTime(){return(await this._call("system.getInfo")).serverTime}};var Fn=(e=>(e.KING="KING",e.PAWN="PAWN",e))(Fn||{}),ks=Fn;var jn=(e=>(e.OFF="0",e.ON="1",e))(jn||{});var ia=class{constructor(r){this._queue=new Array(r).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(r){this._moveReadCursor&&(this._readCursor=this.nextCursor(this._readCursor)),this._queue[this._writeCursor]===null&&(this._left+=1),this._queue[this._writeCursor]=r,this._writeCursor=this.nextCursor(this._writeCursor),this._moveReadCursor=this._writeCursor===this._readCursor}nextCursor(r){return(r+1)%this._queue.length}next(){let r=this._queue[this._readCursor];return r&&(this._moveReadCursor=!1,this._queue[this._readCursor]=null,this._readCursor=this.nextCursor(this._readCursor),this._left-=1),r}};var ra=class{constructor(r,e,t,i=null){this._uuid=S.uuid(),this._apiKey=e,this._callToken=t,this._apiEnv=r,this._baseApiUrl=i}async authorize(){let r={session_data:{device_id:this._uuid,client_version:d.appVersion,client_type:"SDK_JS",auth_token:this._callToken,version:3},application_key:this._apiKey},e=await Ir(this._baseApiUrl,this._apiEnv),t=await Ci("auth.anonymLogin",r,!0,e);return S.isObject(t)&&!("error_msg"in t)?(this._sessionKey=t.session_key,!0):!1}async hangupConversation(r){let e={conversationId:r,reason:A.HUNGUP,application_key:this._apiKey,session_key:this._sessionKey},t=await Ir(this._baseApiUrl,this._apiEnv);await Ci("vchat.hangupConversation",e,!0,t)}};var oe,bi=null,GS={getCameras:y.getCameras,getMicrophones:y.getMicrophones,getOutput:y.getOutput,getVideoFacingMode:y.getVideoFacingMode,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,setResolution:y.setResolution,isBrowserSupported:y.isBrowserSupported,isScreenCapturingSupported:y.isScreenCapturingSupported,os:y.os,isMobile:y.isMobile,browserName:y.browserName,browserVersion:y.browserVersion,baseChromeVersion:y.baseChromeVersion,getAudioContext:y.getAudioContext,isAudioShareSupported:y.isAudioShareSupported},WS={participantMarkerCompare:S.participantMarkerCompare};function KS(n){bi=n}function $S(n){d.videoEffects=n}function qS(n){d.audioEffects=n}function zS(n,r=null,e={},t=1){d.vmoji=n,d.vmojiOptions={protocolVersion:t,renderingOptions:e},r&&n.setSDK(r)}async function JS(n){if(d.set(n),oe||(oe=new Pi),Hn.disableLog(!d.debug),c.toggle(d.debug),c.log(`Calls SDK ${d.sdkVersion}`,n),await y.init(),!y.isBrowserSupported())throw new j(te.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()}`),c.log("Simulcast:",`${n.simulcast} => ${d.simulcast}`)}async function YS(n,r=[ae.AUDIO],e="",t=!1,i=!1,a){let o=[],s=[];if(Array.isArray(n)?o=n.length?n:[]:n&&(o=[n]),o.length&&(s=await oe.getOkIdsByExternalIds(o),!s.length))throw new j(A.CALLEE_IS_OFFLINE);return xs(s,tt.USER,r,e,t,i,a)}async function xs(n,r=tt.USER,e,t="",i=!1,a=!1,o){if(L.current())throw c.error("There is already active call"),new j(A.FAILED);return new L(oe,bi).onStart(n,r,e,t,i,a,o)}async function QS(n){return Os(n)}async function Os(n,r=ie.USER,e){if(n===L.id())throw new Error("Push has already been processed");return new L(oe,bi).onPush(n,r,e)}async function XS(n,r){return n&&(d.authToken=n),r!==void 0&&d.apiBaseUrl!==r&&(d.apiBaseUrl=r,Nn()),oe.authorize()}async function ZS(n=[ae.AUDIO]){return He().accept(n)}async function ev(){let n=L.current();if(n)return n.decline()}async function tv(n,r=[ae.AUDIO]){return Ls(n,r)}async function Ls(n,r,e){if(L.current())throw c.error("There is already active call"),new j(A.FAILED);return new L(oe,bi).onJoin({conversationId:n,mediaOptions:r,chatId:e})}async function iv(n,r=[ae.AUDIO],e,t,i){if(L.current())throw c.error("There is already active call"),new j(A.FAILED);return e&&(d.anonymToken=e),new L(oe,bi).onJoin({joinLink:n,mediaOptions:r,observedIds:t,payload:i})}async function rv(){let n=L.current();if(n)return n.hangup();L.hangupAfterInit()}async function av(n,r){let e=Array.isArray(n)?n:[n],t=L.current();t&&await t.addParticipant(e,r)}async function nv(n,r){let e=L.current();if(e){let t=n.map(i=>S.composeUserId(i));await e.addParticipantLegacy(t,r)}}async function ov(n,r=!1){let e=await oe.getOkIdsByExternalIds([n]);return Ns(e[0],r)}async function Ns(n,r=!1){let e=L.current();if(e)try{await e.removeParticipant(S.composeUserId(n),r)}catch(t){c.warn(`Failed to remove participant ${n}. Perhaps he is no longer on the call. ${t}`)}}async function sv(n,r){let e=L.current();if(n==="videoinput"&&Tt.contains(r))return d.videoFacingMode=r,e?(y.isMobile()&&e.stopVideoTrack(),e.changeDevice(n)):void 0;if(!await y._saveDeviceId(n,r))throw new Error(`Device not found: ${r}`);if(e)return e.changeDevice(n)}async function cv(n){let r=typeof n=="object"?{...n,fastScreenSharing:n.captureScreen&&n.fastScreenSharing,captureAudio:n.captureScreen&&n.captureAudio&&d.audioShare}:{captureScreen:n,fastScreenSharing:!1,captureAudio:!1},e=L.current();return e?e.toggleScreenCapturing(r):Promise.reject()}function dv(n){let r=L.current();r&&r.toggleAnimojiCapturing(n)}async function lv(n,r=!1){let e=L.current();e&&await e.setVideoStream(n,r)}async function pv(n){let r=L.current();r&&await r.toggleLocalVideo(n)}async function uv(n){let r=L.current();r&&await r.toggleLocalAudio(n)}async function mv(n){let r=L.current();if(r)return r.setLocalResolution(n)}async function hv(n){let r=L.current();r&&await r.changePriorities(n)}async function _v(n,r){let e=L.current();if(e){let t;if(r){let[i]=await oe.getOkIdsByExternalIds([r]);t=S.composeParticipantId(i,ie.USER,r.deviceIdx)}await e.changeParticipantState(n,t)}}async function gv(){let n=L.current();n&&await n.putHandsDown()}async function fv(n){let r=L.current();r&&await r.updateDisplayLayout(n)}async function Sv(n,r,e=!1){let t=await oe.getOkIdsByExternalIds([n]);return Us(t[0],$.getDeviceIdx(n),r,e)}async function Us(n,r,e,t=!1){let i=L.current();i&&await i.grantRoles(S.composeParticipantId(n,ie.USER,r),e,t)}async function vv({externalId:n=null,muteStates:r,requestedMedia:e=[],roomId:t=null}){let i=null;return n&&(i=(await oe.getOkIdsByExternalIds([n]))[0]),Bs({uid:i,muteStates:r,requestedMedia:e,deviceIdx:$.getDeviceIdx(n),roomId:t})}async function Bs({uid:n=null,muteStates:r,requestedMedia:e=[],deviceIdx:t=0,roomId:i=null}){let a=L.current();if(a){let o=n?S.composeParticipantId(n,ie.USER,t):null;await a.muteParticipant(o,r,e,i)}}async function Iv(n,r=!1,e=null){let t=await oe.getOkIdsByExternalIds([n]);return Vs(t[0],r,$.getDeviceIdx(n),e)}async function Vs(n,r=!1,e=0,t=null){let i=L.current();i&&await i.pinParticipant(S.composeParticipantId(n,ie.USER,e),r,t)}async function Ev(n){let r=L.current();r&&await r.updateMediaModifiers(n)}async function Tv(n){let r=L.current();r&&await r.enableVideoSuspend(n)}async function Rv(n){let r=L.current();r&&await r.enableVideoSuspendSuggest(n)}async function Cv(n){let r=L.current();r&&await r.changeOptions(n)}async function yv(n,r=null){let e=null;return r&&(e=(await oe.getOkIdsByExternalIds([r]))[0]),Fs(n,e)}async function Fs(n,r=null){let e=L.current();if(e){let t=r?S.composeUserId(r):null;await e.chatMessage(n,t)}}async function Pv(n=10){let r=L.current();if(r)return r.chatHistory(n)}async function bv(n,r=null){let e=null;return r&&(e=(await oe.getOkIdsByExternalIds([r]))[0]),js(n,e,$.getDeviceIdx(r))}async function js(n,r=null,e=0){let t=L.current();if(t){let i=r?S.composeParticipantId(r,ie.USER,e):null;await t.customData(n,i)}}async function Mv(n="",r=!1,{onlyAdminCanShareMovie:e=!1}={}){return(await oe.createConversation(S.uuid(),n,r,{onlyAdminCanShareMovie:e})).join_link}async function Av(n="",r=!1,{onlyAdminCanShareMovie:e=!1,audioOnly:t=!1}={},i){let a=$.fromIds(i),o=await oe.getOkIdsByExternalIds(a);return(await oe.createConversation(S.uuid(),n,r,{onlyAdminCanShareMovie:e,audienceMode:!0,audioOnly:t},o)).join_link}async function Dv(){let n=L.current();return n?n.createJoinLink():Promise.reject()}async function wv(){let n=L.current();return n?n.removeJoinLink():Promise.reject()}async function kv(n,r){return oe.getAnonymTokenByLink(n,r)}function xv(n){let r=L.current();r&&r.setVolume(n)}function Ov(n){d.forceRelayPolicy=n}async function Lv(n=!1,r=null,e=null,t="DIRECT_LINK",i=null,a=null){let o=L.current();return o?o.startStream(n,r,e,t,i,a):Promise.reject()}async function Nv(n=null){let r=L.current();return r?r.stopStream(n):Promise.reject()}async function Uv(n=null){let r=L.current();return r?r.publishStream(n):Promise.reject()}async function Bv(n,r,e=!1,t=null){let i=L.current();if(!i)return Promise.reject();let a,o,s=[];if(r?.length&&s.push(...r),n&&s.push(n),s.length){let l=await oe.getParticipantIdsByExternalIds(s);n&&(a=l.get(n),l.delete(n)),o=Array.from(l.values())}return i.recordSetConf(a,o,e,t)}async function Vv(){let n=L.current();return n?n.getStreamInfo():Promise.reject()}async function Fv(n){let r=L.current();return r?r.addMovie(n):Promise.reject()}async function jv(n){let r=L.current();return r?r.updateMovie(n):Promise.reject()}async function Hv(n){let r=L.current();return r?r.removeMovie(n):Promise.reject()}async function Gv(n,r){let e=L.current();if(e){let t=[];for(let i of n){let a,o;i.addParticipantIds&&(a=(await oe.getOkIdsByExternalIds(i.addParticipantIds)).map(s=>S.composeUserId(s))),i.removeParticipantIds&&(o=(await oe.getOkIdsByExternalIds(i.removeParticipantIds)).map(s=>S.composeUserId(s))),t.push({id:i.id,name:i.name,participantCount:i.participantCount,addParticipantIds:a,removeParticipantIds:o,countdownSec:i.countdownSec})}return e.updateRooms(t,r)}return Promise.reject()}async function Wv(n,r){let e=L.current();return e?e.activateRooms(n,r):Promise.reject()}async function Kv(n=null,r=null){let e=L.current();if(!e)return Promise.reject();let t;if(r){let i=await oe.getOkIdsByExternalIds([r]),a=$.getDeviceIdx(r);t=S.composeParticipantId(i[0],ie.USER,a)}return e.switchRoom(n,t)}async function $v(n){let r=L.current();return r?r.removeRooms(n):Promise.reject()}function qv(n){d.statisticsInterval=n;let r=L.current();if(r)return r.updateStatisticsInterval()}function zv(n){Hn.disableLog(!n),c.toggle(n)}function Jv(n,...r){d.debugLog&&c.send(n,"[external]",...r)}async function Yv(){let n=Ae.conversationId;if(!n)throw c.error("[uploadDebugLogs]","No conversation id found"),new Error("No conversation id found");let r=Ae.collectLogs();if(r.length===0)throw c.error("[uploadDebugLogs]","No logs found"),new Error("No logs found");let e=Ae.startTime,t=Ae.endTime;try{return oe?.uploadDebugLogs(n,e,t,JSON.stringify(r))}catch(i){throw c.error("[uploadDebugLogs]","Error while uploading logs",i),new Error("Error while uploading logs",{cause:i})}}async function Qv(n){let r=L.current();if(r)return r.videoEffect(n)}async function Xv(n,r){let e=L.current();if(e)return e.audioEffect(n.length>0?n:null,r)}async function Zv(n){let r=L.current();r&&await r.setAudioStream(n)}async function eI(n,r=null,e=null){let t=L.current();if(!t)return;let i=e??r?.id,a=null;if(r){let s=(await oe.getOkIdsByExternalIds([r]))[0];if(!s)throw new Error("Could not get user id to set animoji svg");a=S.composeParticipantId(s,ie.USER,$.getDeviceIdx(r))}t.setAnimojiSvg(n,a,i)}function tI(n){let r=L.current();r&&r.setAnimojiFill(n)}async function iI(n=null,r,e=!1){return He().getWaitingHall(n,r,e)}async function rI(){return He().getAudienceModeHands()}async function aI(n,r=!1){let e=He(),t;if(n){let[i]=await oe.getOkIdsByExternalIds([n]);t=S.composeUserId(i)}return e.promoteParticipant(t,r)}async function nI(n=!1){return He().requestPromotion(n)}async function oI(n=!1){return He().acceptPromotion(n)}async function sI(n){return He().getParticipantListChunk(n)}async function cI(n){return He().getParticipants(n)}async function dI(n){return He().feedback(n)}function lI(n,r,e){return He().userFeedbackStats(n,r,e)}function pI(n,r={},e=!1){let t=L.current();t&&t.sendClientEvent(n,r,e)}async function uI(n,r){return He().enableFeatureForRoles(n,r)}function He(){let n=L.current();if(!n)throw new Error("Conversation not found");return n}async function mI(n){await oe.removeHistoryRecords(n)}async function hI(n){let r=L.current();r&&await r.startAsr(n)}async function _I(n){let r=L.current();r&&await r.stopAsr(n)}async function gI(n){let r=L.current();r&&await r.requestAsr(n)}async function fI(n){let r=L.current();return r?r.startUrlSharing(n):Promise.reject()}async function SI(){let n=L.current();return n?n.stopUrlSharing():Promise.reject()}function vI(){return d.sdkVersion}export{Pi as Api,ra as ApiExternal,ia as ArrayDequeue,Ie as AuthData,Ot as BaseLogger,st as CallDirection,tt as CallType,Yr as ChatRoomEventType,Qr as ConversationFeature,qt as ConversationOption,qa as DebugMessageType,Xr as ExternalIdType,Tt as FacingMode,te as FatalError,j as HangupReason,A as HangupType,ae as MediaOption,Ue as MediaTrackKind,pi as MediaType,Oe as MuteState,z as ParticipantState,jn as ParticipantStateDataValue,Or as ParticipantStatus,ks as RecordRole,mi as RoomsEventType,$t as Signaling,O as SignalingCommandType,et as SignalingConnectionType,N as SignalingNotification,Je as TransportTopology,ct as UserRole,ie as UserType,Mt as VolumeDetector,ZS as acceptCall,oI as acceptPromotion,Wv as activateRooms,Fv as addMovie,av as addParticipant,nv as addParticipantInternal,XS as authorize,GS as browser,xs as callInternal,YS as callTo,cv as captureScreen,dv as captureVmoji,Xv as changeAudioEffect,Cv as changeConversationOptions,sv as changeDevice,_v as changeParticipantState,hv as changePriorities,Qv as changeVideoEffect,Pv as chatHistory,yv as chatMessage,Fs as chatMessageInternal,Dv as createJoinLink,bv as customData,js as customDataInternal,zv as debug,Jv as debugMessage,ev as declineCall,uI as enableFeatureForRoles,Tv as enableVideoSuspend,Rv as enableVideoSuspendSuggest,dI as feedback,Ov as forceRelayPolicy,kv as getAnonymTokenByLink,rI as getAudienceModeHands,sI as getParticipantListChunk,cI as getParticipants,Vv as getStreamInfo,iI as getWaitingHall,Sv as grantRoles,Us as grantRolesInternal,rv as hangup,JS as init,tv as joinCall,iv as joinCallByLink,Ls as joinCallInternal,pI as logClientEvent,vv as muteParticipant,Bs as muteParticipantInternal,Iv as pinParticipant,Vs as pinParticipantInternal,QS as processPush,Os as processPushInternal,aI as promoteParticipant,Uv as publishStream,gv as putHandsDown,Bv as recordSetConf,mI as removeHistoryRecords,wv as removeJoinLink,Hv as removeMovie,ov as removeParticipant,Ns as removeParticipantInternal,$v as removeRooms,gI as requestAsr,nI as requestPromotion,qS as setAudioEffects,Zv as setAudioStream,mv as setLocalResolution,KS as setLogger,Ev as setMediaModifiers,qv as setStatisticsInterval,$S as setVideoEffects,lv as setVideoStream,zS as setVmoji,tI as setVmojiFill,eI as setVmojiSvg,xv as setVolume,hI as startAsr,Av as startAudienceConversation,Mv as startConversation,Lv as startStream,fI as startUrlSharing,_I as stopAsr,Nv as stopStream,SI as stopUrlSharing,Kv as switchRoom,uv as toggleLocalAudio,pv as toggleLocalVideo,fv as updateDisplayLayout,jv as updateMovie,Gv as updateRooms,Yv as uploadDebugLogs,lI as userFeedbackStats,WS as utils,vI as version};
|