@vkontakte/calls-sdk 2.8.6-dev.77dd3c9d.0 → 2.8.6-dev.785c0ce9.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.
Files changed (54) hide show
  1. package/CallsSDK.d.ts +23 -8
  2. package/abstract/BaseApi.d.ts +2 -1
  3. package/abstract/BaseSignaling.d.ts +7 -3
  4. package/calls-sdk.cjs.js +8 -8
  5. package/calls-sdk.esm.js +8 -8
  6. package/classes/Conversation.d.ts +20 -11
  7. package/classes/Logger.d.ts +3 -0
  8. package/classes/MediaSource.d.ts +13 -0
  9. package/classes/ParticipantIdRegistry.d.ts +1 -0
  10. package/classes/ProducerCommandSerializationService.d.ts +2 -0
  11. package/classes/SignalingActor.d.ts +9 -0
  12. package/classes/codec/IEncoder.d.ts +0 -1
  13. package/classes/screenshare/BaseStreamBuilder.d.ts +1 -1
  14. package/classes/stat/CodecStatsAggregator.d.ts +19 -0
  15. package/classes/stat/EventMetricsService.d.ts +9 -0
  16. package/classes/transport/ServerTransport.d.ts +8 -0
  17. package/classes/transport/Statistics.d.ts +23 -10
  18. package/classes/transport/Transport.d.ts +1 -0
  19. package/default/Api.d.ts +2 -1
  20. package/default/Signaling.d.ts +21 -11
  21. package/enums/ChatRoomEventType.d.ts +1 -1
  22. package/enums/ConversationOption.d.ts +3 -3
  23. package/enums/RecordRole.d.ts +1 -1
  24. package/enums/SignalingCommandType.d.ts +2 -1
  25. package/enums/SignalingTransportStat.d.ts +17 -0
  26. package/enums/Stat.d.ts +36 -21
  27. package/package.json +7 -3
  28. package/static/ApiTransport.d.ts +1 -1
  29. package/static/Params.d.ts +59 -9
  30. package/static/SimulcastInfo.d.ts +13 -0
  31. package/static/Utils.d.ts +3 -2
  32. package/static/WebRTCUtils.d.ts +5 -0
  33. package/types/ChangeSimulcast.d.ts +6 -0
  34. package/types/Conversation.d.ts +28 -1
  35. package/types/ConversationParams.d.ts +14 -1
  36. package/types/ConversationResponse.d.ts +9 -0
  37. package/types/ExternalId.d.ts +1 -0
  38. package/types/FastStart.d.ts +46 -0
  39. package/types/Participant.d.ts +9 -0
  40. package/types/PerfStatReporter.d.ts +1 -0
  41. package/types/ServerSettings.d.ts +2 -0
  42. package/types/SignalingMessage.d.ts +4 -1
  43. package/types/SimulcastInfo.d.ts +10 -0
  44. package/types/Statistics.d.ts +158 -4
  45. package/types/VideoSettings.d.ts +12 -0
  46. package/types/WebTransport.d.ts +25 -0
  47. package/utils/LengthPrefixed.d.ts +48 -0
  48. package/utils/Lz4.d.ts +1 -0
  49. package/utils/MsgPackerBufferUtils.d.ts +1 -1
  50. package/utils/VariableLengthInteger.d.ts +18 -0
  51. package/worker/LibVPxDecoderWorker.d.ts +0 -1
  52. package/worker/LibVPxEncoderWorker.d.ts +0 -1
  53. package/worker/WebCodecsDecoderWorker.d.ts +0 -1
  54. package/worker/WebCodecsEncoderWorker.d.ts +0 -1
package/calls-sdk.esm.js CHANGED
@@ -1,12 +1,12 @@
1
1
  /**
2
- * @vkontakte/calls-sdk v2.8.6-dev.77dd3c9d.0
3
- * Tue, 17 Dec 2024 12:30:51 GMT
2
+ * @vkontakte/calls-sdk v2.8.6-dev.785c0ce9.0
3
+ * Wed, 23 Jul 2025 15:27:21 GMT
4
4
  * https://st.mycdn.me/static/callssdk/2-8-6/doc/
5
5
  */
6
6
 
7
- var Mn=Object.defineProperty,An=Object.defineProperties;var Dn=Object.getOwnPropertyDescriptors;var ra=Object.getOwnPropertySymbols;var kn=Object.prototype.hasOwnProperty,wn=Object.prototype.propertyIsEnumerable;var na=Math.pow,aa=(o,r,e)=>r in o?Mn(o,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[r]=e,ue=(o,r)=>{for(var e in r||(r={}))kn.call(r,e)&&aa(o,e,r[e]);if(ra)for(var e of ra(r))wn.call(r,e)&&aa(o,e,r[e]);return o},je=(o,r)=>An(o,Dn(r));var c=(o,r,e)=>new Promise((t,i)=>{var a=l=>{try{s(e.next(l))}catch(u){i(u)}},n=l=>{try{s(e.throw(l))}catch(u){i(u)}},s=l=>l.done?t(l.value):Promise.resolve(l.value).then(a,n);s((e=e.apply(o,r)).next())});import Cn from"webrtc-adapter";var xt=class{log(r,e,t=!1){}destroy(){}};var ne=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 ii=class extends ne{get ready(){return!0}setParticipantIdRegistry(r){}requestRealloc(){}setEndpoint(r){}setConversationId(r){}readyToSend(r=!0){}cleanup(){}requestTestMode(r,e){}getNextCommandSequenceNumber(){return 0}};var oa=(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))(oa||{}),B=oa;var H=class extends Error{constructor(e,t){var a;super();this.name="HangupReason",this.code=t&&t.code||0,this.remote=t&&t.remote||!1,this.custom_error=(a=t==null?void 0:t.custom_error)!=null?a:null,Object.values(B).indexOf(e)>-1?this.hangup=e:this.error=e;let i=[];this.error&&i.push("error"),this.remote&&i.push("remote"),this.code&&i.push(`code: ${this.code}`),t&&t.message&&i.push(`message: '${t.message}'`),this.message=e+(i.length?` (${i.join(", ")})`:""),Error.captureStackTrace&&Error.captureStackTrace(this,H)}};var T=class extends xt{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:N.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:N.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:N.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){T._instance||(T._instance=new T(e,t))}static log(e,t,i=!1){T._instance&&T._instance.log(e,t,i)}static logCustom(e,t,i=!1){T._instance&&T._instance.logCustom(e,t,i)}static logClientStats(e,t=!1){T._instance&&T._instance.logClientStats(e,t)}static logClientEvent(e,t=!1){T._instance&&T._instance.logClientEvent(e,t)}static destroy(){T._instance&&T._instance.destroy(),T._instance=null}};import{Any as bo,Arr as Na,Int as W,Nil as Mt,Str as Mo,Bool as Vr}from"messagepack";var sa=(L=>(L.RECOVER="recover",L.ACCEPT_CALL="accept-call",L.ADD_PARTICIPANT="add-participant",L.REMOVE_PARTICIPANT="remove-participant",L.HANGUP="hangup",L.TRANSMIT_DATA="transmit-data",L.ACCEPT_PRODUCER="accept-producer",L.ALLOCATE_CONSUMER="allocate-consumer",L.CHANGE_MEDIA_SETTINGS="change-media-settings",L.CHANGE_PARTICIPANT_STATE="change-participant-state",L.CHANGE_STREAM_PRIORITIES="change-streams-priorities",L.UPDATE_DISPLAY_LAYOUT="update-display-layout",L.REPORT_PERF_STAT="report-perf-stat",L.REPORT_SHARING_STAT="report-sharing-stat",L.REPORT_NETWORK_STAT="report-network-stat",L.RECORD_START="record-start",L.RECORD_STOP="record-stop",L.RECORD_PUBLISH="record-publish",L.RECORD_SET_CONF="record-set-conf",L.RECORD_GET_STATUS="record-get-status",L.SWITCH_MICRO="switch-micro",L.SWITCH_TOPOLOGY="switch-topology",L.REQUEST_REALLOC="request-realloc",L.CHAT_MESSAGE="chat-message",L.CHAT_HISTORY="chat-history",L.CUSTOM_DATA="custom-data",L.GRANT_ROLES="grant-roles",L.MUTE_PARTICIPANT="mute-participant",L.ENABLE_FEATURE_FOR_ROLES="enable-feature-for-roles",L.PIN_PARTICIPANT="pin-participant",L.UPDATE_MEDIA_MODIFIERS="update-media-modifiers",L.CHANGE_OPTIONS="change-options",L.GET_WAITING_HALL="get-waiting-hall",L.GET_PARTICIPANT_LIST_CHUNK="get-participant-list-chunk",L.GET_PARTICIPANTS="get-participants",L.PROMOTE_PARTICIPANT="promote-participant",L.REQUEST_TEST_MODE="request-test-mode",L.ADD_MOVIE="add-movie",L.UPDATE_MOVIE="update-movie",L.REMOVE_MOVIE="remove-movie",L.START_URL_SHARING="start-url-sharing",L.STOP_URL_SHARING="stop-url-sharing",L.GET_ROOMS="get-rooms",L.UPDATE_ROOMS="update-rooms",L.ACTIVATE_ROOMS="activate-rooms",L.REMOVE_ROOMS="remove-rooms",L.SWITCH_ROOM="switch-room",L.FEEDBACK="feedback",L.ASR_START="asr-start",L.ASR_STOP="asr-stop",L.REQUEST_ASR="request-asr",L.REQUEST_PROMOTION="request-promotion",L.ACCEPT_PROMOTION="accept-promotion",L.GET_HAND_QUEUE="get-hand-queue",L.ENABLE_VIDEO_SUSPEND="enable-video-suspend",L.ENABLE_VIDEO_SUSPEND_SUGGEST="enable-video-suspend-suggest",L.PUT_HANDS_DOWN="put-hands-down",L))(sa||{}),x=sa;var ca=(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))(ca||{}),oe=ca;var da=(n=>(n.AUDIO="AUDIO",n.VIDEO="VIDEO",n.SCREEN_SHARING="SCREEN_SHARING",n.MOVIE_SHARING="MOVIE_SHARING",n.AUDIO_SHARING="AUDIO_SHARING",n.ANIMOJI="ANIMOJI",n))(da||{}),de=da;var la=(J=>(J.ERROR="callError",J.DEVICES="callDevices",J.CALL_SPEC_ERROR="callSpecError",J.ICE_CONNECTION_STATE="callIceConnectionState",J.ICE_CONNECTION_TYPE="callIceConnectionType",J.ICE_RESTART="callIceRestart",J.PUSH="callPush",J.OUTGOING_CALL="callStart",J.OUTGOING_MULTIPARTY_CALL="callStartMultiparty",J.JOIN_CONVERSATION="callJoinConversation",J.ACCEPTED_OUTGOING="callAcceptedOutgoing",J.ACCEPT_INCOMING="callAcceptIncoming",J.DECLINE_INCOMING="callDeclineIncoming",J.ACCEPT_CONCURRENT="callAcceptConcurrent",J.HANGUP="callHangup",J.MEDIA_STATUS="callMediaStatus",J.DEVICE_CHANGED="callDeviceChanged",J.SOCKET_ACTION="callSocketAction",J.ADD_PARTICIPANT="callAddParticipant",J.REMOVE_PARTICIPANT="callRemoveParticipant",J.POOR_CONNECTION="callPoorConnection",J.TOPOLOGY_CHANGE_REQUESTED="callTopologyChangeRequested",J.RELAY_POLICY="callForceRelay",J.PAT_ALLOCATED="patAllocate",J.PAT_DEALLOCATED="patDeallocate",J.PAT_ERROR="patError",J.PAT_WAITING_TIME_ERROR="patWaitingTimeError",J.PAT_OUTDATED_RESPONSE="patOutdatedResponse",J.SIGNALING_CONNECTED="signaling_connected",J.RECONNECT="callReconnect",J.SCREENSHARE_FIRST_FRAME="screen_share_first_frame",J.SCREENSHARE_FREEZE_DURATION="callScreenshareFreezeDuration",J.FIRST_MEDIA_RECEIVED="first_media_received",J.CALL_EVENTUAL_STAT="callEventualStat",J.CALL_DECLINED_OR_HANGED_LOCALLY="CallDeclinedOrHangedLocally",J.USER_FEEDBACK_RECEIVED="UserFeedbackReceived",J))(la||{}),C=la;import pa from"@vkontakte/libvpx";var He=class{constructor(){this._worker=null}_createWorker(n,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"}),R=window.URL.createObjectURL(h);this._worker=new Worker(R),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":T.log(C.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 ft=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 qe=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())},[k.baseChromeVersion()>=92||k.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&&!k.isBrokenVP9Decoder()&&k.browserName()!=="Firefox"}};var St=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 Gn}from"bit-buffer";var ua=(e=>(e.USER="USER",e.GROUP="GROUP",e))(ua||{}),se=ua;var ma=typeof Object.fromEntries=="function"?Object.fromEntries:function(o){if(!o||!o[Symbol.iterator])throw new Error("Object.fromEntries() requires a single iterable argument");let r={};for(let[e,t]of o)r[e]=t;return r};function ha(o){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(o)})})}var Lt=":",Oi="d",On=533,wi="a=fmtp:",xn="sps-pps-idr-in-keyframe=1",_r;(Be=>{let o=/[\r\n]+/,r=`\r
8
- `;function e(_,P){let b=new RegExp("a=rtpmap:(\\d+) ([a-zA-Z0-9-]+)\\/\\d+"),M,y=[];for(M=0;M<_.length;++M){let S=_[M].match(b);S&&S.length===3&&S[2]===P&&y.push(S[1])}return y}function t(_,P,b){let M=_.split(" "),y=M.slice(0,3),S;for(S=3;S<M.length;S++)b.includes(M[S])&&y.push(M[S]);for(S=3;S<M.length;S++)!b.includes(M[S])&&!P.includes(M[S])&&y.push(M[S]);return y.join(" ")}function i(_,P,b,M){let y,S="m="+P;for(y=0;y<_.length;++y)_[y].startsWith(S)&&(_[y]=t(_[y],b,M))}function a(_,P){let b=new RegExp(wi+"(\\d+)");for(let M=0;M<_.length;++M){let y=_[M].match(b);if(y&&y.length===2&&P.includes(y[1])){let S=_[M].trim()===wi+y[1]?" ":";";_[M]+=S+xn}}}function n(_,P){let b=e(_,P);if(!b.length)return;let M=b.slice(0),y=new RegExp(wi+"(\\d+) apt=(\\d+)"),S;for(S=0;S<_.length;++S){let G=_[S].match(y);G&&G.length===3&&M.includes(G[2])&&M.push(G[1])}let K=new RegExp("a=(rtpmap|rtcp-fb|fmtp):(\\d+) .*");for(S=_.length;S--;){let G=_[S].match(K);G&&G.length===3&&M.includes(G[2])&&_.splice(S,1)}i(_,"video",M,[])}function s(_,P,b,M){let y=new RegExp("a=rtpmap:(\\d+) ([a-zA-Z0-9-]+)\\/\\d+"),S,K=[];for(S=P;S<b;++S){let le=_[S].match(y);le&&le.length===3&&le[2]===M&&K.push(le[1])}if(!K.length)return K;let G=new RegExp(wi+"(\\d+) apt=(\\d+)");for(S=P;S<b;++S){let le=_[S].match(G);le&&le.length===3&&K.includes(le[2])&&K.push(le[1])}return K}function l(_,P,b,M){let y=s(_,P,b,M);if(!y.length)return b+1;let S=new RegExp("a=(rtpmap|rtcp-fb|fmtp):(\\d+) .*"),K=0,G=b;for(;G>=P;){let le=_[G].match(S);le&&le.length===3&&y.includes(le[2])&&(_.splice(G,1),K++),G--}return _[P]=t(_[P],y,[]),b-K+1}function u(_,P,b,M){let y=-1,S=-1,K=!1;for(let G=0;G<_.length;++G)if(y>=0&&_[G].startsWith("m=")&&(S=G-1,K&&(G=l(_,y,S,P)),y=-1,S=-1,K=!1),_[G].startsWith("m=video")&&(y=G),y>=0){let le=b==="remote"&&M==="encoder"||b==="local"&&M==="decoder"?"recvonly":"sendonly";(_[G].startsWith(`a=${le}`)||_[G].startsWith("a=sendrecv"))&&(K=!0)}S=_.length-1,y>=0&&K&&l(_,y,S,P)}function m(_,P,b){let M=e(_,"H264");P&&i(_,"video",[],M),b&&a(_,M)}function h(_){let P=e(_,"VP9");i(_,"video",[],P)}function R(_,P,b,M,y,S=!1,K=!1){if(!P&&!b&&!M&&!K&&!S&&!y)return _;function G(L){let Ve=["a=rtcp-fb:111 nack","a=rtcp-fb:111 nack pli"],Fe="a=rtcp-fb:111",be=L.findIndex(_t=>_t.startsWith(Fe));return~be&&(L[be]=L[be]+r+Ve.join(r)),L}function le(L){let Ve=e(L,"red");Ve.length>0&&i(L,"audio",[],Ve)}let ye=_.split(o);return b?u(ye,"H264","local","decoder"):(P||y)&&m(ye,P,y),M&&h(ye),K&&le(ye),S&&G(ye),ye.join(r)}Be.patchLocalSDP=R;function v(_,P,b,M,y,S,K){P&&(_=_.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 G=_.split(o);return M?n(G,"H264"):b&&m(G,b,!1),S&&K?n(G,"VP9"):S?u(G,"VP9","remote","encoder"):K?u(G,"VP9","remote","decoder"):y&&h(G),G.join(r)}Be.patchRemoteSDP=v;function A(_){return _?`${_.type||"WEB_SOCKET"}_${_.id}`:"_"}Be.getPeerIdString=A;function F(_,P){return _&&_.id===P.id&&(_.type||"WEB_SOCKET")===(P.type||"WEB_SOCKET")}Be.comparePeerId=F;function O(_){return c(this,null,function*(){let P={local:null,remote:null};if(!_||!_.getStats)return P;try{let b=yield _.getStats(null),M=null;if(b.forEach(y=>{y.type==="transport"&&y.selectedCandidatePairId?M=b.get(y.selectedCandidatePairId):y.type==="candidate-pair"&&y.state==="succeeded"&&!M&&(!y.hasOwnProperty("selected")||y.selected)&&(M=y)}),M!=null&&M.localCandidateId){let y=b.get(M.localCandidateId);y&&(P.local={type:y.candidateType,ip:y.ip||y.ipAddress,port:y.port||y.portNumber})}if(M!=null&&M.remoteCandidateId){let y=b.get(M.remoteCandidateId);y&&(P.remote={type:y.candidateType,ip:y.ip||y.ipAddress,port:y.port||y.portNumber})}return P}catch(b){return P}})}Be.getPeerConnectionHostInfo=O;let q=/^[0-9]+$/,X=/^([gu])([0-9]+)$/;function pe(_,P=se.USER){let b=String(_);return X.test(b)?(d.warn(`Already composite id [${_}] type supplied [${P}]`),b):P===se.GROUP?"g"+b:P===se.USER?"u"+b:(d.warn(`Unknown type [${P}] for id [${_}]`),b.match(q)?"u"+b:b)}Be.composeUserId=pe;function ie(_,P,b=0){let M=pe(_,P);return z(M,b)}Be.composeParticipantId=ie;function z(_,P){return P?_+Lt+Oi+P:_}Be.compose=z;function _e(_){return ie(_.id,_.idType||se.USER,_.deviceIdx)}Be.composeId=_e;function Oe(_){if(_.decorativeUserId)return ie(_.decorativeUserId,_.idType||se.USER,_.deviceIdx)}Be.composeDecorativeId=Oe;function Ai(_){return _.participant?_e(_.participant):ie(_.participantId,_.participantType||se.USER,_.deviceIdx)}Be.composeMessageId=Ai;function ei(_){return typeof _=="string"?re(ti(_).compositeUserId).id:_}Be.extractOkId=ei;function re(_){let P=String(_),b=P.match(X);return b?{id:Number(b[2]),type:b[1]==="g"?se.GROUP:se.USER}:(d.warn(`Unsupported compositeId [${_}]`),{id:Number(P),type:se.USER})}Be.decomposeId=re;function ti(_){let P=_.split(Lt+Oi);return{compositeUserId:P[0],deviceIdx:P.length>1?parseInt(P[1],10):0}}Be.decomposeParticipantId=ti;function $r(){var K,G;let _=(G=(K=window.crypto)==null?void 0:K.randomUUID)==null?void 0:G.call(K);if(_)return _;let P="0123456789abcdefghijklmnopqrstuvwxyz".split(""),b=new Array(36),M=0,y,S;for(S=0;S<36;S++)S===8||S===13||S===18||S===23?b[S]="-":S===14?b[S]="4":(M<=2&&(M=33554432+Math.random()*16777216|0),y=M&15,M=M>>4,b[S]=P[S===19?y&3|8:y]);return b.join("")}Be.uuid=$r;function zr(_,P){let b;function M(...y){let S=this;b&&window.clearTimeout(b),b=window.setTimeout(()=>{_.apply(S,y)},P)}return M}Be.debounce=zr;function Jr(_){if(!window.BigInt)return null;let P="",b=_.split(`
9
- `);for(let S of b)if(S.startsWith("a=fingerprint")){let K=S.split(" ");if(K.length===2){P=K[1];break}}if(!P)return BigInt(-1);let M=P.split(":"),y=BigInt(0);for(let S=Math.min(7,M.length-1);S>=0;S--){let K=BigInt(parseInt(M[S],16));y<<=BigInt(8),y|=K}return BigInt.asIntN(64,y)}Be.sdpFingerprint=Jr;function Yr(_){return c(this,null,function*(){return new Promise(P=>window.setTimeout(P,_))})}Be.delay=Yr;function pr(_,P,b){let M=[];return _.getSenders().forEach(y=>Di(P,y,y.track,b,M)),M}Be.applySettings=pr;function Di(_,P,b,M,y){var _t;if(!RTCRtpSender.prototype.getParameters||!RTCRtpSender.prototype.setParameters||!_||!b||b.kind!=="video")return;let S=b.getSettings();if(!S)return;let K=_.maxBitrateK?_.maxBitrateK*1024:null,G=S.width,le=S.height,ye=G&&le&&_.maxDimension?Math.max(1,Math.max(G,le)/_.maxDimension):null,L=_.maxFramerate||null;if(G&&le&&_.maxDimension&&_.maxDimension>Math.max(G,le)){let xe=Math.round(G*le/256),ur=(Math.round(xe*On/1e4)+1)*1e4;K=K===null?ur:Math.min(ur,K)}let Ve=_.degradationPreference||"balanced",Fe=M[b.id];if(Fe&&Fe.bitrate===K&&Fe.scaleResolutionDownBy===ye&&Fe.maxFramerate===L&&Fe.degradationPreference===Ve){y[b.id]=Fe;return}y[b.id]={bitrate:K,scaleResolutionDownBy:ye,maxFramerate:L,degradationPreference:Ve};let be=P.getParameters();be.encodings||(be.encodings=[{}]),be.encodings.forEach(xe=>{_.scalabilityMode&&(xe.scalabilityMode=_.scalabilityMode),K?xe.maxBitrate=K:delete xe.maxBitrate,ye?xe.scaleResolutionDownBy=ye:delete xe.scaleResolutionDownBy,L?xe.maxFramerate=L:delete xe.maxFramerate}),be.degradationPreference=Ve,(_t=P.setParameters)==null||_t.call(P,be).catch(xe=>{d.error("Failed to set sender parameters",be,xe)})}Be.applyVideoTrackSettings=Di;function Qr(_,P){Array.isArray(P)||(P=[P]);for(let b of P)if(_.includes(b))return!0;return!1}Be.includesOneOf=Qr;function Xr(_){var P;return Object.entries(((P=_.participantState)==null?void 0:P.state)||{}).reduce((b,[M,y])=>(_.participantState&&(b[M]={ts:_.participantState.stateUpdateTs[M],state:y}),b),{})}Be.mapParticipantState=Xr;function J(_){let P=_.map(b=>({uid:b.externalId,mediaSettings:b.mediaSettings,status:b.status,muteStates:b.muteStates,unmuteOptions:b.unmuteOptions,participantState:b.participantState,markers:b.markers,movieShareInfos:b.movieShareInfos}));return p.filterObservers?P.filter(b=>!b.uid.observer):P}Be.mapSharedParticipants=J;function Zr(_,P){let b=Object.keys(_),M=Object.keys(P);if(b.length!==M.length)return!1;for(let y of b)if(!M.hasOwnProperty(y)||_[y].state!==P[y].state||_[y].ts!==P[y].ts)return!1;return!0}Be.isEqualParticipantState=Zr;function ea(_,P){let b=Object.keys(_),M=Object.keys(P);if(b.length!==M.length)return!1;for(let y of b)if(!P.hasOwnProperty(y)||_[y]!==P[y])return!1;return!0}Be.isObjectsEquals=ea;function ta(_,P){if(_.length!==P.length)return!1;for(let b of _)if(P.indexOf(b)<0)return!1;return!0}Be.isArraysEquals=ta;function fe(_){return!Object.keys(_).length}Be.isEmptyObject=fe;function V(_,P){if(!_&&!P)return 0;if(!_||!P)return _?-1:1;return M(P.rank,_.rank)||M(_.ts,P.ts)||b(_,P);function b(y,S){let K={[se.USER]:0,[se.GROUP]:1},{compositeUserId:G,deviceIdx:le}=ti(y.id),{compositeUserId:ye,deviceIdx:L}=ti(S.id),{id:Ve,type:Fe}=re(G),{id:be,type:_t}=re(ye);return M(K[Fe],K[_t])||M(Ve,be)||M(le,L)}function M(y,S){return y<S?-1:y===S?0:1}}Be.participantMarkerCompare=V;function ee(_,P){let b=Object.entries(_).filter(([,M])=>Array.isArray(P)?!P.includes(M):M!==P);return ma(b)}Be.objectFilterOutValues=ee;function ce(_,P,b){let M=b;for(let y in _)_.hasOwnProperty(y)&&(M=P(M,_[y],y));return M}Be.objectReduce=ce,Be.setImmediate=(()=>{let _=1,P={},b=null;return typeof MessageChannel!="undefined"&&(b=new MessageChannel,b.port1.onmessage=M=>{let y=M.data;P[y]&&(P[y](),delete P[y])}),function(M){if(b&&document.visibilityState==="hidden"){let S=_;return _=_>=Number.MAX_SAFE_INTEGER?1:_+1,P[S]=M,b.port2.postMessage(S),()=>{P[S]&&delete P[S]}}let y=setTimeout(M,0);return()=>clearTimeout(y)}})();function Qe(_){return _!==null&&typeof _=="object"&&!Array.isArray(_)}Be.isObject=Qe})(_r||(_r={}));var E=_r;var Ln=1e3;function ge(o,r,e=0){return r in o&&o[r]?o[r]:e}function gr(...o){return r=>{for(let e of o)if(e(r))return!0;return!1}}function nt(o,r){return e=>e[o]===r}function Nn(o){return(r,e)=>e[o]-r[o]}function ri(o,r){return r.reduce((e,t)=>(e[t[o]]=t,e),{})}function Un(o){let r={},e=[];for(let t of o)r[t.id]||(r[t.id]=!0,e.push(t));return e}function fr(o){return Object.keys(o).filter(r=>o[r]!==void 0).map(r=>[r,o[r]]).reduce((r,e)=>(r[e[0]]=E.isObject(e[1])?fr(e[1]):e[1],r),{})}function Bn(o){let r=[];for(let e of o)e.forEach(t=>r.push(t));return r}function Vn(o){return c(this,null,function*(){let r=[];return RTCRtpReceiver.prototype.getStats?(r.push(...o.getReceivers().map(e=>e.getStats())),r.push(...o.getSenders().map(e=>e.getStats()))):r.push(o.getStats()),Promise.all(r).then(Bn).then(Un)})}function Fn(o){let r=o.filter(nt("type","candidate-pair")).sort(Nn("priority")).find(gr(nt("nominated",!0),nt("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=o.find(nt("id",r.remoteCandidateId));t&&Object.assign(e,{remote:{type:t.candidateType,address:t.ip||t.address,port:t.port,protocol:t.protocol}});let i=o.find(nt("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}}),fr(e)}function _a(o,r,e=!1){let t=ri("id",o),i=e?o.filter(gr(nt("type","remote-inbound-rtp"))):o.filter(gr(nt("type","inbound-rtp"),nt("type","outbound-rtp")));return k.browserName()==="Firefox"&&(i=Object.values(i.reduce((a,n)=>{if(!a[n.ssrc])a[n.ssrc]=n;else{let s=Object.assign({},a[n.ssrc],n),l=a[n.ssrc].isRemote?n:a[n.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 n=Number(a.ssrc),s=a.mediaType||a.kind,l=a.remoteId||a.trackId,u=a.type,m=a.codecId;if(!u||!n||!s)return null;let h={ssrc:n,type:u,kind:s,bytesReceived:ge(a,"bytesReceived"),bytesSent:ge(a,"bytesSent"),headerBytesReceived:ge(a,"headerBytesReceived"),headerBytesSent:ge(a,"headerBytesSent"),jitter:ge(a,"jitter"),packetsLost:ge(a,"packetsLost"),packetsReceived:ge(a,"packetsReceived"),packetsSent:ge(a,"packetsSent"),fractionLost:ge(a,"fractionLost"),pliCount:ge(a,"pliCount"),firCount:ge(a,"firCount"),nackCount:ge(a,"nackCount"),userId:r[n],freezeCount:ge(a,"freezeCount",0),totalFreezesDuration:ge(a,"totalFreezesDuration",0)};if(s==="video"){let R=ge(a,"framesDecoded"),v=ge(a,"totalInterFrameDelay"),A=ge(a,"totalSquaredInterFrameDelay");h.interframeDelayVariance=(A-v*v/R)/R}if(s==="audio"&&(h.totalSamplesReceived=ge(a,"totalSamplesReceived"),h.concealedSamples=ge(a,"concealedSamples"),h.insertedSamplesForDeceleration=ge(a,"insertedSamplesForDeceleration"),h.removedSamplesForAcceleration=ge(a,"removedSamplesForAcceleration"),h.silentConcealedSamples=ge(a,"silentConcealedSamples"),h.concealmentEvents=ge(a,"concealmentEvents"),h.totalAudioEnergy=ge(a,"totalAudioEnergy")),m&&t[m]){let R=t[m];h.clockRate=R.clockRate,h.mimeType=R.mimeType}if(l&&t[l]){let R=t[l];h.frameHeight=R.frameHeight,h.frameWidth=R.frameWidth,h.framesDecoded=R.framesDecoded,h.framesReceived=R.framesReceived,h.framesDropped=R.framesDropped}return fr(h)}).filter(a=>!!a)}function jn(o,r,e=!1){if(!r||!r.rtps||!o.rtps)return o;let t,i;e&&(t=ri("ssrc",(o==null?void 0:o.remoteRtps)||[]),i=ri("ssrc",(r==null?void 0:r.remoteRtps)||[]));let a=ri("ssrc",o.rtps),n=ri("ssrc",r.rtps),s=(o.timestamp-r.timestamp)/1e3;return!a||!n||Object.keys(a).forEach(l=>{let u=a[l],m=n[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,R=u.packetsReceived-m.packetsReceived;u.packetLoss=parseFloat((100*h/(h+R)).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],R=i==null?void 0:i[l],v=O=>O!=null?O:0,A=Math.max(0,v(h==null?void 0:h.packetsLost)-v(R==null?void 0:R.packetsLost)),F=Math.max(1,u.packetsSent-m.packetsSent);o.transport.averageNetStat={currentRoundTripTime:(o.transport.currentRoundTripTime+r.transport.currentRoundTripTime)/2*1e3,lostPercent:Math.round(A/F*100)}}}}),o}function ai(i,a){return c(this,arguments,function*(o,r,e={},t=!1){let n=yield Vn(o),s={timestamp:Date.now(),transport:Fn(n),rtps:_a(n,e)};return t&&(s.remoteRtps=_a(n,e,!0)),r?jn(s,r,t):(yield E.delay(Ln),ai(o,s,e,t))})}function Xe(o){performance.clearMarks(o),performance.mark(o)}function Sr(o){performance.clearMarks(o)}function Nt(o){let r=performance.getEntriesByName(o)[0];if(typeof r=="undefined")return null;let e=Math.round(performance.now()-r.startTime);return performance.clearMarks(o),e}function Ut(o){return`${C.SCREENSHARE_FIRST_FRAME}_${Hn(o)}`}function Hn(o){return typeof o=="string"?o:JSON.stringify(o)}var $e=class{constructor(){this._eventualLogs=new Set}static create(){$e._instance=new $e}static logCallStat(r){var e;if((e=$e._instance)!=null&&e._eventualLogs.size){for(let t of $e._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}),T.logClientStats(t);$e._instance._eventualLogs.clear()}T.logClientStats(r)}static logEventualStat(r){var e;r.value===void 0&&(r.value=Nt(r.name)),r.value!==null&&((e=$e._instance)==null||e._eventualLogs.add(r))}static destroy(){var r;(r=$e._instance)==null||r._destroy(),$e._instance=null}_destroy(){this._eventualLogs.clear()}},Ce=$e;Ce._instance=null;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&&Ce.logEventualStat({name:C.SCREENSHARE_FIRST_FRAME,value:i,width:r,height:e})}};var Wn=65536,ot=class{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&&(d.warn("[FrameBuilder] Cleanup buffer",Array.prototype.slice.call(this._chunks)),this._chunks=[]);else if(!e||(this._chunks[e-1].sequence+1)%Wn!==r.sequence){d.warn("[FrameBuilder] Got incorrect chunk");return}if(this._chunks.push(r),r.end){let t=this._processFrameData(),{width:i,height:a}=ot.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(){Sr(C.SCREENSHARE_FREEZE_DURATION),Sr(Ut(this._participantId)),this._chunks=[]}_processFrameData(){let r=this._chunks;this._chunks=[];let e=r.reduce((a,n)=>a+n.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 Gn(r.buffer);t.bigEndian=!0,t.index+=2;let i=t.readBits(1),n=t.readBits(1)<<1|i;return n===3&&t.index++,t.readBits(1)===1||t.readBits(1)!==0||(t.index++,t.index++,t.index+=24,n>=2&&t.index++,t.readBits(3)!==7?(t.index++,(n===1||n===3)&&(t.index+=3)):(n===1||n===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){Xe(C.SCREENSHARE_FREEZE_DURATION);return}let e=Nt(C.SCREENSHARE_FREEZE_DURATION);e!==null&&e>1e3&&this._onStat({freeze_duration:e})}};var vt=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 Bt=class extends vt{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)&&!(k.browserName()==="Safari"&&Number(k.browserVersion())===15)&&!(k.browserName()==="Firefox"&&Number(k.browserVersion())<60)}};var It=class extends vt{constructor(e){super(e);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(e){return c(this,null,function*(){yield this._writer.write(e)})}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&&qe.isBrowserSupported()}};var Vt=class extends ot{constructor(e,t,i){super(e,t,i);this._decoderReady=!1;this._decoderBusy=!1;this._decoderQueue=[];d.debug(`StreamBuilder started for participant [${e}]`),It.isBrowserSupported()?this._renderer=new It(t):this._renderer=new Bt(t),qe.isBrowserSupported()?this._decoder=new qe:this._decoder=new ft;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()}),n=s=>{this._decoderBusy=!1,this._decodeQueue()};this._decoder.init(a,n).then(()=>{this._decoderReady=!0,this._decodeQueue()}),this._fpsMeter=new St(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 Bt.isBrowserSupported()||It.isBrowserSupported()}};function ga(o,r,e,t,i,a,n){let s=0;r&&(s|=1),e&&(s|=2),t&&(s|=4),n||(s|=8);let l=new ArrayBuffer(11),u=new DataView(l);if(u.setUint8(0,1),u.setUint16(1,i),u.setUint32(3,o),u.setUint8(7,a?1:0),u.setUint16(8,0),u.setUint8(10,s),!n)return l;let m=new Uint8Array(l.byteLength+n.byteLength);return m.set(new Uint8Array(l),0),m.set(new Uint8Array(n),l.byteLength),m.buffer}function fa(o){let r=new DataView(o),e=r.getUint8(0),t=r.getUint16(1),i=r.getUint32(3),a=r.getUint8(7)===1,n=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:n,eos:h,data:o.slice(11)}}function Sa(o){if(!o||!o.byteLength||o.byteLength!==4)return!1;let r=new DataView(o);return!(r.getUint8(0)!==1||r.getUint8(1)!==1||r.getUint16(2)!==0)}function va(o){if(!o||!o.byteLength||o.byteLength!==10)return null;let r=new DataView(o);if(r.getUint8(0)!==1||r.getUint8(1)!==2||r.getUint16(2)!==0)return null;let a=r.getUint16(4),n=r.getUint32(6);return{seq:a,ts2:n}}import*as w from"simple-ebml-builder";var Kn=na(2,15)-1,vr=1,qn=5,$n=5;var ni=class{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=ni._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,n)=>a+n.countSize(),0),t=new Uint8Array(e),i=0;for(let a of r){let n=w.build(a);t.set(n,i),i+=n.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,n,s;((a=this._mediaSource)==null?void 0:a.readyState)==="open"&&((n=this._sourceBuffer)==null||n.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)-qn);i-t>$n&&(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}},Le=class extends ot{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 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"))]),n=[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(vr)),w.element(w.ID.TrackUID,w.number(vr)),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,n)]));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 ni(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 R=Le._genWebmHeader();(l=this._mediaBuffer)==null||l.append(R);let v=Le._genSegmentHeader(e.width,e.height,t);(u=this._mediaBuffer)==null||u.append(v)}let a=Math.round(i-this._clusterStartTime);if(a>Kn&&(this._clusterStartTime=i,a=0),a===0){d.debug(`[WebmBuilder] Cluster header for participant [${this._participantId}]`);let R=Le._genClusterHeader(this._clusterStartTime);(m=this._mediaBuffer)==null||m.append(R)}let n=w.element(w.ID.SimpleBlock,[w.vintEncodedNumber(vr),w.bytes(Le._intToU16BE(a)),w.number((e.keyframe?1:0)<<7),w.bytes(e.frameData)]);(h=this._mediaBuffer)==null||h.append(n,!0)}destroy(){super.destroy(),this._video&&(this._video.onpause=null,this._video.onwaiting=null,this._video.onstalled=null,this._video.onerror=null,this._video.pause(),this._video.src="",document.body.removeChild(this._video)),this._mediaBuffer&&(this._mediaBuffer.destroy(),this._mediaBuffer=null),this._stream&&(this._stream.getTracks().forEach(e=>e.stop()),this._stream=null),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 Et=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=n=>this._onDataChannelMessage(n.data)}_onDataChannelMessage(r){var a,n;let e=fa(r),t=(n=(a=this._participantIdRegistry)==null?void 0:a.getStreamDescription(e.ssrc))==null?void 0:n.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&&Le.isBrowserSupported()?i=new Le(t,s,this._onStat):i=new Vt(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(qe.isBrowserSupported()||ft.isBrowserSupported())&&(Vt.isBrowserSupported()||Le.isBrowserSupported())}};var Ir=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}},oi=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 Ir(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 Ia from"@vkontakte/libvpx";var zn=1e3,Ft=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 n=a.play(),s=()=>i(new Error("Autoplay is disabled"));n?n.catch(s):s()}})})}_removeStream(){var e;window.clearTimeout(this._frameReadTimeout),(e=this._lastFrame)==null||e.close(),this._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=>{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})},[Ia,Ia.getUrl,this._useCongestionControl,this._maxBitrate],{isVP9:this.isVP9(),debug:d.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)},zn),this._getFrameBitmap().then(t=>{var a;window.clearTimeout(this._frameReadTimeout),(a=this._lastFrame)==null||a.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(),d.debug("LibVPxEncoder destroyed")}static isBrowserSupported(){return"WebAssembly"in window&&"Worker"in window&&("CanvasCaptureMediaStream"in window||"CanvasCaptureMediaStreamTrack"in window)}};var Rt=class extends He{constructor(e,t,i,a,n,s){super();this._sourceTrack=e,this._onFrame=t,this._useCongestionControl=i,this._maxBitrate=a,this._useCbr=n,this._frameRate=s,this._trackProcessor=new MediaStreamTrackProcessor(e)}init(){return c(this,null,function*(){let e=this._sourceTrack.getSettings().width,t=this._sourceTrack.getSettings().height,i=this._trackProcessor.readable;d.debug(`WebCodecsEncoder started ${e}x${t}, codec ${this.isVP9()?"VP9":"VP8"}`),yield 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,V,y,c=!1,l=!1;function A(e){t=e.readable,n=t.getReader(),i=e.width,o=e.height,g=e.isVP9,m=e.framerate,V=e.useCongestionControl,y=e.maxBitrate,V&&(u=y,c=e.useCbr),E(),self.postMessage({type:"ready"})}function F(e){e&&!l&&(l=!0),self.clearTimeout(f),f=self.setTimeout(()=>{d&&h(d,l)},1e3),!b&&(b=!0,n.read().finally(()=>{b=!1,self.clearTimeout(f)}).then(({done:r,value:s})=>{if(d==null||d.close(),d=null,!(r||!s)){if(!R){n.releaseLock(),t.cancel();return}d=s,h(s,l)}}))}function h(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":A(e.data);break;case"frame":F(e.data.keyFrame);break;case"set_bitrate":C(e.data.bitrate,e.data.useCbr,e.data.fps);break}}};return M(O);})();
11
- `,a=>{var n;a.error?this._onFrame(null,a.error):this._onFrame({type:a.frameType,timestamp:a.timestamp,duration:a.duration,data:a.data,byteLength:(n=a.data)==null?void 0:n.byteLength,width:a.width,height:a.height})},[],{readable:i,width:e,height:t,isVP9:this.isVP9(),framerate:this._frameRate,useCongestionControl:this._useCongestionControl,maxBitrate:this._maxBitrate,useCbr:this._useCbr},[i])})}requestFrame(e=!1){this._sendToWorker("frame",{keyFrame:e})}setBitrate(e,t,i){this._sendToWorker("set_bitrate",{bitrate:e,useCbr:t,fps:i})}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 Jn=2100,Yn=600,Qn=1.2,Ea=.8,Xn=2e3,Zn=8e3,Er=8e3,eo=16e3,to=4,io=2e3,Li=(t=>(t[t.NONE=0]="NONE",t[t.UP=1]="UP",t[t.DOWN=2]="DOWN",t))(Li||{}),si=class{constructor(r,e,t,i,a,n,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,n>0?this._highDelayThreshold=n:this._highDelayThreshold=Jn,a&&(this._highDelayThreshold=Yn),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,n=this._delayAvgShort-this._delayAvgLong,s=Math.round(Math.abs(n)*100/this._delayAvgLong),l=n>40&&s>30&&this._delayAvgShort>this._trendDelayThreshold,u=this._delayAvgShort>this._highDelayThreshold;l||u?a=2:Math.abs(n)<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=${n} percent=${s} -> ${Li[a]} tr=${m} br=${t}`);let R=i-this._lastDown;if(a===2&&R>Xn){this._probing&&(this._upPenalty=Math.min(++this._upPenalty,to),this._probing=!1);let q=Ea*h*1e3;if(q>=this._targetBitrate&&(q=this._targetBitrate*Ea),q=Math.max(q,this._minBitrate),q<this._targetBitrate){let X=Math.round(q/1e3),pe=Math.round(this._upPenalty*Er/1e3);d.log(`#${r}: cc: delay=${e} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${n} percent=${s} -> ${Li[a]}`),d.log(`#${r}: cc: DOWN delay=${e} bitrate=${h} target=${m} -> newBitrate=${X} penalty=${pe}s`),this._setBitrate(q,!0),this._targetBitrate=q}this._lastDown=i}let v=i-this._lastUp,A=Zn+this._upPenalty*Er;if(a===1&&v>A&&R>A){let q=Math.min(this._targetBitrate*Qn,this._maxBitrate);if(q>this._targetBitrate){let X=Math.round(q/1e3),pe=Math.round(this._targetBitrate/1e3),ie=Math.round(this._upPenalty*Er/1e3);d.log(`#${r}: cc: delay=${e} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${n} percent=${s} -> ${Li[a]}`),d.log(`#${r}: cc: UP bitrate=${h} target=${pe} -> newBitrate=${X} penalty=${ie}s`),this._setBitrate(q,!1),this._targetBitrate=q,this._probing=!0,this._lastProbing=i,this._lastUp=i}}let F=i-this._lastProbing;this._probing&&F>eo&&(this._probing=!1);let O=i-this._lastDown;this._upPenalty>0&&O>3*A&&(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>io){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 ci=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 n=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++,n}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,n=this._tail;for(let s=0;s<this._maxSize;s++){n>0?--n:n=this._maxSize-1;let l=this._buffer[n];if(!l||(a===-1&&(a=l.ts2,t=0),a>=0&&(t+=l.size),i=l.ts2,a-i>=r)||n===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 n=0;n<this._maxSize;n++){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 Rr=65536,ao=50,no=400,oo=1e6,so=3e5,co=3e4,lo=2e3,po=5,Ni=0,Tt=class{constructor(r,e,t,i){this._destroyed=!1;this._needKeyframe=!0;this._frameNum=0;this._feedback=new ci(1024);this._lastSentFrameSeq=0;this._lastDeliveredFrameSeq=0;this._lastFrameDelay=0;this._lastFramerateReduced=Date.now();this._lastSharingStat=Date.now();this._queue=new oi;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:n,maxBitrate:s}=this._calcMinMaxBitrate(this._width,this._height),l=this._onCongestionCallback.bind(this);d.log(`ScreenCaptureSender: CongestionControl: enabled=${this._congestionControlEnabled} minBitrate=${Math.round(n/1e3)}k maxBitrate=${Math.round(s/1e3)}k delayThreshold=${p.screenShareCongestionControlThreshold}`),this._congestionControl=new si(l,n,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 R=this._sliceFrame(m);this._queue.merge(R),this._handleQueue(),this._sendSharingStat()};if(Rt.isBrowserSupported()){let m=this._fastSharing;this._encoder=new Rt(r,u,this._congestionControlEnabled,s,m,a)}else this._encoder=new Ft(r,u,this._congestionControlEnabled,s);this._datachannel.onmessage=m=>{Sa(m.data)&&(d.debug(`[${this._datachannel.label}] Requested keyframe`),this._needKeyframe=!0);let h=va(m.data);h!==null&&this._checkCcFeedback(h)},this._encoder.init().then(()=>this._handleQueue()).catch(m=>d.warn("ScreenCaptureSender init failed",m)),this._fpsMeter=new St(m=>d.log(`[ScreenCaptureSender] fps: ${m}`),5e3)}_handleQueue(){if(this._destroyed)return;let r=this._queue.shift();if(!r){if((this._lastSentFrameSeq-this._lastDeliveredFrameSeq+Rr)%Rr>po&&this._lastFrameDelay>this._maxFrameDelay){let i=Date.now();i-this._lastFramerateReduced>lo&&(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 oi;for(let a=0;a<t;a+=this.DATA_SIZE){let n=r.data.slice(a,a+this.DATA_SIZE),s=a===0,l=t<=a+n.byteLength,u=this._wrapHeader(r.timestamp,s,l,e,n);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 n=ga(r,e,t,i,Ni,this._encoder.isVP9(),a),s={sequence:Ni,data:n};return Ni=(Ni+1)%Rr,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 Rt.isBrowserSupported()||Ft.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),n=Math.round(i/1e3);d.log(`cc: resize to ${r}x${e}, minBitrate=${a} maxBitrate=${n}`),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(so,Math.min(oo,Math.round(t*ao))),a=Math.round(t*no);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>co){let t=this._congestionControl.getStat();t!==null&&(d.debug(`cc: send stats: ${JSON.stringify(t)}`),this._signaling.reportSharingStat(t)),this._lastSharingStat=r}}};var me=class{static get sessionKey(){return me._sessionKey}static set sessionKey(r){me._sessionKey=r}static get sessionSecretKey(){return me._sessionSecretKey}static set sessionSecretKey(r){me._sessionSecretKey=r}static get accessToken(){return me._accessToken}static set accessToken(r){me._accessToken=r}static isEmpty(){return!me._sessionKey}};var g=class{static set(r){r.hasOwnProperty("voiceParams")&&(Object.assign(g._params.voiceParams,r.voiceParams),delete r.voiceParams),r.hasOwnProperty("specListenerParams")&&(Object.assign(g._params.specListenerParams,r.specListenerParams),delete r.specListenerParams),r.hasOwnProperty("apiAuth")&&(me.accessToken=r.apiAuth.accessToken,me.sessionKey=r.apiAuth.sessionKey,me.sessionSecretKey=r.apiAuth.sessionSecretKey),Object.assign(g._params,E.objectFilterOutValues(r,void 0))}static get(r){return g._params[r]}static get appName(){return"ok.calls.sdk.js"}static get appVersion(){return 1.1}static get sdkVersion(){return"2.8.6-dev.77dd3c9d.0"}static get debug(){return g._params.debug}static get protocolVersion(){return g._params.joinFromMultipleDevices?6:5}static get platform(){return g._params.platform}static set platform(r){g._params.platform=r}static get clientStatsPlatform(){return g._params.clientStatsPlatform}static set clientStatsPlatform(r){g._params.clientStatsPlatform=r}static get clientType(){return g._params.clientType}static set clientType(r){g._params.clientType=r}static get externalUserType(){return g._params.externalUserType}static set externalUserType(r){g._params.externalUserType=r}static get device(){return g._params.device}static get apiKey(){return g._params.apiKey}static get apiEnv(){return g._params.apiEnv}static get apiBaseUrl(){return g._params.apiBaseUrl}static set apiBaseUrl(r){g._params.apiBaseUrl=r}static apiEndpoint(r){switch(r!=null?r:g.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 g._params.apiEnv}}static get authToken(){return g._params.authToken}static set authToken(r){g._params.authToken=r}static get anonymToken(){return g._params.anonymToken}static set anonymToken(r){g._params.anonymToken=r}static get domain(){return g._params.domain}static get externalDomain(){return g._params.externalDomain}static get iceServers(){return g._params.iceServers}static set iceServers(r){g._params.iceServers=r}static get wssBase(){return g._params.wssBase}static set wssBase(r){g._params.wssBase=r}static get wssToken(){return g._params.wssToken}static set wssToken(r){g._params.wssToken=r}static get signalingReconnectDelay(){return g._params.signalingReconnectDelay}static get signalingReconnectMaxDelay(){return g._params.signalingReconnectMaxDelay}static get signalingReconnectMaxCount(){return g._params.signalingReconnectMaxCount}static get waitConnectionDelay(){return g._params.waitConnectionDelay}static get waitResponseDelay(){return g._params.waitResponseDelay}static get waitMessageDelay(){return g._params.waitMessageDelay}static get waitAnotherTabDelay(){return g._params.waitAnotherTabDelay}static get debugLog(){return g._params.debugLog}static get forceRelayPolicy(){return g._params.forceRelayPolicy}static set forceRelayPolicy(r){g._params.forceRelayPolicy=r}static get videoMinWidth(){return g._params.videoMinWidth}static get videoMaxWidth(){return g._params.videoMaxWidth}static set videoMaxWidth(r){g._params.videoMaxWidth=r}static get videoMinHeight(){return g._params.videoMinHeight}static get videoMaxHeight(){return g._params.videoMaxHeight}static set videoMaxHeight(r){g._params.videoMaxHeight=r}static get videoAspectRatio(){return g._params.videoAspectRatio}static get videoFrameRate(){return g._params.videoFrameRate}static get videoFacingMode(){return g._params.videoFacingMode||(k.isMobile()?"user":null)}static set videoFacingMode(r){g._params.videoFacingMode=r}static get displaySurface(){return g._params.displaySurface}static get audioEffects(){return g._params.audioEffects}static set audioEffects(r){var e;g._params.audioEffects=r,(e=g._params.audioEffects)==null||e.setLogger((t,...i)=>d.send(t,...i))}static get videoEffects(){return g._params.videoEffects}static set videoEffects(r){var e;g._params.videoEffects=r,(e=g._params.videoEffects)==null||e.setLogger((t,...i)=>d.send(t,...i))}static get videoEffectMaxWidth(){return g._params.videoEffectMaxWidth}static set videoEffectMaxWidth(r){g._params.videoEffectMaxWidth=r}static get videoEffectMaxHeight(){return g._params.videoEffectMaxHeight}static set videoEffectMaxHeight(r){g._params.videoEffectMaxHeight=r}static get vmoji(){var r;return(r=g._params.vmoji)!=null&&r.isBrowserSupported()?g._params.vmoji:null}static set vmoji(r){g._params.vmoji=r}static get vmojiOptions(){return g._params.vmojiOptions||{protocolVersion:1,renderingOptions:{}}}static set vmojiOptions(r){g._params.vmojiOptions=r}static get voiceParams(){return g._params.voiceParams}static get specListenerParams(){return g._params.specListenerParams}static get iceRestartWaitTime(){return g._params.iceRestartWaitTime}static get transportConnectionWaitTime(){return g._params.transportConnectionWaitTime}static get statisticsInterval(){return g._params.statisticsInterval}static set statisticsInterval(r){g._params.statisticsInterval=r}static get networkStatisticsInterval(){return g._params.networkStatisticsInterval}static get perfStatReportEnabled(){return g._params.perfStatReportEnabled}static get callStatReportEnabled(){return g._params.callStatReportEnabled}static get clientEventsLoggingEnabled(){return g._params.clientEventsLoggingEnabled}static get enableLogPerfStatReport(){return g._params.enableLogPerfStatReport}static get producerNotificationDataChannel(){return g._params.producerNotificationDataChannel}static get producerCommandDataChannel(){return g._params.producerCommandDataChannel}static get consumerScreenDataChannel(){return g._params.consumerScreenDataChannel&&Tt.isBrowserSupported()}static get producerScreenDataChannel(){return g._params.producerScreenDataChannel&&g.producerNotificationDataChannel&&Et.isBrowserSupported()}static get asrDataChannel(){return g._params.asrDataChannel&&g.producerNotificationDataChannel}static get consumerScreenDataChannelPacketSize(){return g._params.consumerScreenDataChannelPacketSize}static get screenShareWebmBuilder(){return g._params.screenShareWebmBuilder}static get noiseSuppression(){return g._params.noiseSuppression}static set noiseSuppression(r){g._params.noiseSuppression=r}static get preferH264(){return g._params.preferH264}static get preferVP9(){return g._params.preferVP9}static get audioNack(){return g._params.audioNack}static get consumerScreenTrack(){return g._params.consumerScreenTrack&&g.consumerScreenDataChannel}static get producerScreenTrack(){return g._params.producerScreenTrack}static get movieShare(){return g._params.movieShare&&g.videoTracksCount>0}static get videoTracksCount(){return g.producerNotificationDataChannel?Number(g._params.videoTracksCount):0}static get breakVideoPayloadTypes(){return g._params.breakVideoPayloadTypes}static get useCallsToContacts(){return g._params.useCallsToContacts}static get useParticipantListChunk(){return g._params.useParticipantListChunk&&g.videoTracksCount>0}static get useRooms(){return g._params.useRooms}static get useChatRooms(){return g._params.useChatRooms}static get participantListChunkInitIndex(){var r;return(r=g._params.participantListChunkInitIndex)!=null?r:0}static get participantListChunkInitCount(){var r;return(r=g._params.participantListChunkInitCount)!=null?r:null}static get serverAudioRed(){return g._params.serverAudioRed}static get p2pAudioRed(){return g._params.p2pAudioRed}static get h264spsPpsIdrInKeyframe(){return g._params.h264spsPpsIdrInKeyframe}static get filterObservers(){return g._params.filterObservers}static get muteMode(){return g._params.muteMode}static get preserveAudioTracks(){return g._params.preserveAudioTracks}static get audioShare(){return k.isAudioShareSupported()&&g._params.audioShare}static get fastScreenShare(){return g._params.fastScreenShare}static get screenShareCongestionControl(){return g._params.screenShareCongestionControl}static get screenShareCongestionControlThreshold(){return g._params.screenShareCongestionControlThreshold}static get fastScreenShareWidth(){return g._params.fastScreenShareWidth}static get fastScreenShareHeight(){return g._params.fastScreenShareHeight}static get newMuteRules(){return g._params.newMuteRules}static get videoSuspend(){return g._params.videoSuspend}static get enumerateDevicesDelay(){return g._params.enumerateDevicesDelay}static getScreenFrameRate(r){return r?g._params.fastScreenShareFrameRate:g._params.screenFrameRate}static get switchVideoAtBadNetwork(){return g._params.switchVideoAtBadNetwork}static get enableVideoEffectsFpsDegradation(){return g._params.enableVideoEffectsFpsDegradation}static toJSON(){return{apiKey:g._params.apiKey,apiEnv:g._params.apiEnv,audioShare:g._params.audioShare,useCallsToContacts:g._params.useCallsToContacts,useParticipantListChunk:g._params.useParticipantListChunk,useRooms:g._params.useRooms,useChatRooms:g._params.useChatRooms,fastScreenShare:g._params.fastScreenShare,participantListChunkInitCount:g._params.participantListChunkInitCount,screenShareCongestionControl:g._params.screenShareCongestionControl,screenShareCongestionControlThreshold:g._params.screenShareCongestionControlThreshold,videoTracksCount:g._params.videoTracksCount,asrDataChannel:g._params.asrDataChannel,videoMaxHeight:g._params.videoMaxHeight,videoMaxWidth:g._params.videoMaxWidth,videoEffectMaxHeight:g._params.videoEffectMaxHeight,videoEffectMaxWidth:g._params.videoEffectMaxWidth,videoSuspend:g._params.videoSuspend,debugLog:g._params.debugLog,callStatReportEnabled:g._params.callStatReportEnabled,joinFromMultipleDevices:g._params.joinFromMultipleDevices,movieShare:g._params.movieShare,newMuteRules:g._params.newMuteRules,clientType:g._params.clientType,clientStatsPlatform:g._params.clientStatsPlatform,consumerScreenDataChannelPacketSize:g._params.consumerScreenDataChannelPacketSize,switchVideoAtBadNetwork:g._params.switchVideoAtBadNetwork}}},p=g;p._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};function Ra(o,r){return!(o.isAudioEnabled!==r.isAudioEnabled||o.isVideoEnabled!==r.isVideoEnabled||o.isScreenSharingEnabled!==r.isScreenSharingEnabled||o.isFastScreenSharingEnabled!==r.isFastScreenSharingEnabled||o.isAudioSharingEnabled!==r.isAudioSharingEnabled||o.isAnimojiEnabled!==r.isAnimojiEnabled)}function ve(o){return Object.assign({isAudioEnabled:!1,isVideoEnabled:!1,isScreenSharingEnabled:!1,isFastScreenSharingEnabled:!1,isAudioSharingEnabled:!1,isAnimojiEnabled:!1},o||{})}var Ta=o=>o.stop(),di=o=>o.getTracks().forEach(Ta),Ca=o=>o.getVideoTracks().forEach(Ta);function Ui(o,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 o.applyConstraints(ue(ue(ue({},r),e&&{width:{max:e,ideal:e}}),t&&{height:{max:t,ideal:t}}))}catch(e){d.warn("setVideoConstraints failed",e)}})}var Bi=class extends ne{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,n)=>a+n,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||{}),Vi=class extends ne{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=ve();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 Bi,this._videoEffectsFpsLimiter.addEventListener("fps-limit",this.handleVideoEffectsLowFps.bind(this)))}request(){return c(this,arguments,function*(e=[de.AUDIO],t=!0){var s,l,u;if(this._stream)return;let i=e.includes(de.VIDEO),a=e.includes(de.AUDIO),n=e.includes(de.ANIMOJI);if(!k.isBrowserSupported())throw new H(oe.UNSUPPORTED);try{this._stream=yield k.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=n&&!this._mediaSettings.isVideoEnabled||!1,this._animojiEnabled=n}catch(m){throw new H(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(),n=this.getSendAudioTrack(),s=this.getSendVideoTrack(i);if(!a||!n&&!s&&!t)throw new Error("No local stream found");n&&!t&&e.addTrack(n,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(oe.UNKNOWN)}})}stopVideoTrack(){var e;this._mediaSettings.isVideoEnabled&&(this._stopEffect(),this._stream&&Ca(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=k.getSavedMicrophone(),i=k.getSavedCamera(),a=this._mediaSettings.isAudioEnabled&&(t==null?void 0:t.groupId)!==((s=e.microphone)==null?void 0:s.groupId),n=this._mediaSettings.isVideoEnabled&&(i==null?void 0:i.groupId)!==((l=e.camera)==null?void 0:l.groupId);try{a&&(yield this._changeAudioInput()),n&&(yield this._changeVideoInput())}catch(u){}}),k.addEventListener("devicechange",this._onDeviceChange))}_destroyDeviceChangeListener(){this._onDeviceChange&&k.removeEventListener("devicechange",this._onDeviceChange)}_changeVideoInput(e){return c(this,null,function*(){var t;try{let i=e?"stream":"video",a=e||(yield k._getUserVideo(!!this._effect,this._frameRate));if((t=this._cameraVideoTrack)==null||t.stop(),this._cameraVideoTrack=a.getVideoTracks()[0],!this._stream)di(a);else{p.consumerScreenTrack||(yield this._disableScreenCapture());let n=yield this._setEffect(this._effect,this._cameraVideoTrack);T.log(C.DEVICE_CHANGED,i),d.log("Video stream changed"),yield this._replaceLocalTrack(n),this._mediaSettings.isVideoEnabled=!0,this._triggerEvent("SOURCE_CHANGED",{kind:"video"})}}catch(i){throw T.log(C.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 k.getUserAudio());if((t=this._micAudioTrack)==null||t.stop(),this._micAudioTrack=i.getAudioTracks()[0],!this._stream)di(i);else{let a=yield this._applyAudioEffect();T.log(C.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 T.log(C.ERROR,"change_audio"),d.error("Microphone change failed",i),i}})}_changeScreen(e,t,i){return c(this,null,function*(){try{if(i=i||(yield k.getScreenMedia(e,t)),!this._stream)di(i);else{let a=i.getVideoTracks()[0];if(a.addEventListener("ended",()=>{this._mediaSettings.isScreenSharingEnabled&&this.disableScreenCapturing()},!1),p.consumerScreenTrack||this._stopEffect(),T.log(C.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?k.getBlackMediaTrack(p.videoMinWidth,p.videoMinHeight):a,yield this._replaceLocalTrack(a,this._sendVideoTrack)),i.getAudioTracks().length>0){let n=i.getAudioTracks()[0];n.contentHint="music",this._audioShareTrack=n,yield this._replaceLocalTrack(n),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 T.log(C.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=k.getSilentMediaTrack();return e.contentHint="music",e.stop(),e}_replaceLocalTrack(e,t){return c(this,null,function*(){var a,n;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),(n=this._stream)==null||n.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,n;this._destroyDeviceChangeListener(),p.videoEffects&&(this._effect=null,p.videoEffects.destroy()),p.audioEffects&&p.audioEffects.destroy(),this._stream&&(di(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=k.getAudioContext();e==null||e.suspend().catch(s=>d.error(s)),(n=this._videoEffectsFpsLimiter)==null||n.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 k._getUserVideo(!!this._effect,this._frameRate);this._cameraVideoTrack=a.getVideoTracks()[0],t=yield this._setEffect(this._effect,this._cameraVideoTrack)}else t=k.getBlackMediaTrack(p.videoMinWidth,p.videoMinHeight),this._stopEffect();if(yield this._replaceLocalTrack(t),this._mediaSettings.isVideoEnabled=e,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 n=yield k.getUserAudio();this._micAudioTrack=n.getAudioTracks()[0],t=yield this._applyAudioEffect()}else(a=p.audioEffects)==null||a.pause(),t=k.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)})}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(T.log(C.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(),n=new MediaStream([a]);throw yield this._changeVideoInput(n),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(),n=new MediaStream([a]);yield this._changeAudioInput(n)}catch(a){this._audioEffectParams=i;let n=this._micAudioTrack.clone(),s=new MediaStream([n]);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 Ui(e,ue(ue({width:this._effect?p.videoEffectMaxWidth:p.videoMaxWidth,height:this._effect?p.videoEffectMaxHeight:p.videoMaxHeight},this._frameRate&&{frameRate:{ideal:this._frameRate}}),t))})}};var li=class{static isSupported(){return k.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 Cr=(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))(Cr||{});function j(o,...r){let e=p.get(o);typeof e=="function"&&setTimeout(e,0,...r)}function he(o,r,...e){if(p.filterObservers){if(Array.isArray(r)){if(r=r.filter(t=>!t.observer),!r.length)return}else if(r.observer)return}j(o,r,...e)}function Ie(o){return Object.assign({},o)}function Pt(o){return o.slice()}var Tr;(Hs=>{function o(f,D){j("onLocalStream",f,Ie(D))}Hs.onLocalStream=o;function r(f,D){j("onScreenStream",f,Ie(D))}Hs.onScreenStream=r;function e(f,D){j("onVmojiStream",f,Ie(D))}Hs.onVmojiStream=e;function t(f){j("onVmojiError",f)}Hs.onVmojiError=t;function i(f,D){j("onLocalStreamUpdate",Ie(f),D)}Hs.onLocalStreamUpdate=i;function a(f){d.debug("Local status:",f),j("onLocalStatus",f)}Hs.onLocalStatus=a;function n(f,D){he("onRemoteStream",f,D)}Hs.onRemoteStream=n;function s(f,D){he("onRemoteLive",f,D)}Hs.onRemoteLive=s;function l(f,D){he("onLocalLive",f,D)}Hs.onLocalLive=l;function u(f,D){he("onRemoteLiveUpdate",f,D)}Hs.onRemoteLiveUpdate=u;function m(f,D){he("onLocalLiveUpdate",f,D)}Hs.onLocalLiveUpdate=m;function h(f,D){he("onRemoteScreenStream",f,D)}Hs.onRemoteScreenStream=h;function R(f,D){he("onRemoteVmojiStream",f,D)}Hs.onRemoteVmojiStream=R;function v(f,D,$){he("onRemoteStreamSuspended",f,D,$)}Hs.onRemoteStreamSuspended=v;function A(f,D,$,Me,gt){he("onConversation",f,Ie(D),Ie($),Me,gt)}Hs.onConversation=A;function F(f){f&&j("onConversationParticipantListChunk",f)}Hs.onConversationParticipantListChunk=F;function O(f,D,$){he("onRemoteMediaSettings",f,Ie(D),$)}Hs.onRemoteMediaSettings=O;function q(f,D){he("onLocalMediaSettings",f,Ie(D))}Hs.onLocalMediaSettings=q;function X(f,D,$){he("onRemoteSharedMovieInfo",f,Ie(D),$)}Hs.onRemoteSharedMovieInfo=X;function pe(f,D,$){he("onRemoteSharedMovieStoppedInfo",f,Ie(D),$)}Hs.onRemoteSharedMovieStoppedInfo=pe;function ie(f,D,$){he("onLocalSharedMovieInfo",f,Ie(D),$)}Hs.onLocalSharedMovieInfo=ie;function z(f,D,$){he("onLocalSharedMovieStoppedInfo",f,Ie(D),$)}Hs.onLocalSharedMovieStoppedInfo=z;function _e(f,D,$){he("onRemoteSharedUrl",f,D,$)}Hs.onRemoteSharedUrl=_e;function Oe(f,D){he("onParticipantAdded",f,D)}Hs.onParticipantAdded=Oe;function Ai(f,D){he("onParticipantJoined",f,D)}Hs.onParticipantJoined=Ai;function ei(f){j("onLocalParticipantState",Ie(f))}Hs.onLocalParticipantState=ei;function re(f,D,$){he("onRemoteParticipantState",f,Ie(D),$)}Hs.onRemoteParticipantState=re;function ti(f,D){j("onRemoteParticipantsState",f,D)}Hs.onRemoteParticipantsState=ti;function $r(f,D,$=null){d.debug("Remote status:",D,f),he("onRemoteStatus",f,D,$)}Hs.onRemoteStatus=$r;function zr(){j("onPermissionsRequested")}Hs.onPermissionsRequested=zr;function Jr(f,D){j("onPermissionsError",f,D)}Hs.onPermissionsError=Jr;function Yr(f,D){he("onRemoteRemoved",f,D)}Hs.onRemoteRemoved=Yr;function pr(f,D,$){j("onCallState",f,D,Ie($))}Hs.onCallState=pr;function Di(f,D){j("onDeviceSwitched",f,D)}Hs.onDeviceSwitched=Di;function Qr(f,D,$,Me=!1,gt=!1,mr=null,hr=null,Pn,ia,yn=null){let bn=ia?Pt(ia):void 0;j("onMuteStates",Ie(f),Pt(D),Pt($),Me,gt,mr,hr,Pn,bn,yn)}Hs.onMuteStates=Qr;function Xr(f,D,$=!1){he("onRolesChanged",f,Pt(D),$)}Hs.onRolesChanged=Xr;function J(f,D=!1){j("onLocalRolesChanged",Pt(f),D)}Hs.onLocalRolesChanged=J;function Zr(f,D,$,Me){he("onPinnedParticipant",f,D,$,Me)}Hs.onPinnedParticipant=Zr;function ea(f,D){j("onLocalPin",f,D)}Hs.onLocalPin=ea;function ta(f){j("onOptionsChanged",Pt(f))}Hs.onOptionsChanged=ta;function fe(){j("onCallAccepted")}Hs.onCallAccepted=fe;function V(f){he("onAcceptedCall",f)}Hs.onAcceptedCall=V;function ee(){j("onRateNeeded")}Hs.onRateNeeded=ee;function ce(f){he("onSpeakerChanged",f)}Hs.onSpeakerChanged=ce;function Se(f){j("onVolumesDetected",Pt(f))}Hs.onVolumesDetected=Se;function Qe(f,D){j("onLocalVolume",f,D)}Hs.onLocalVolume=Qe;function Be(f,D){j("onJoinStatus",f,D)}Hs.onJoinStatus=Be;function _(f,D){j("onHangup",f,D)}Hs.onHangup=_;function P(f){j("onMultipartyChatCreated",Ie(f))}Hs.onMultipartyChatCreated=P;function b(){j("onDeviceChange")}Hs.onDeviceChange=b;function M(f){j("onFingerprintChange",f)}Hs.onFingerprintChange=M;function y(){j("onTokenExpired")}Hs.onTokenExpired=y;function S(f,D,$=!1){j("onChatMessage",f,D,$)}Hs.onChatMessage=S;function K(f,D,$=!1){j("onCustomData",f,D,$)}Hs.onCustomData=K;function G(f,D,$,Me,gt,mr,hr=null){j("onRecordStarted",f,D,$,Me,gt,mr,hr)}Hs.onRecordStarted=G;function le(f=null){j("onRecordStopped",f)}Hs.onRecordStopped=le;function ye(f){j("onLocalNetworkStatusChanged",f)}Hs.onLocalNetworkStatusChanged=ye;function L(f){j("onNetworkStatusChanged",f)}Hs.onNetworkStatusChanged=L;function Ve(f,...D){j("onDebugMessage",f,...D)}Hs.onDebugMessage=Ve;function Fe(f,D){let $=Object.assign({},f,{memory:D});j("onStatistics",$)}Hs.onStatistics=Fe;function be(){j("onAutoplayError")}Hs.onAutoplayError=be;function _t(f,D,$,Me,gt){j("onChatRoomUpdated",f,D,$,Me,gt)}Hs.onChatRoomUpdated=_t;function xe(f){j("onPromoted",f)}Hs.onPromoted=xe;function ur(f){j("onRemoteMixedAudioStream",f)}Hs.onRemoteMixedAudioStream=ur;function Cs(f){j("onJoinLinkChanged",f)}Hs.onJoinLinkChanged=Cs;function Ps(f){j("onRoomsUpdated",f)}Hs.onRoomsUpdated=Ps;function ys(f,D,$,Me){j("onRoomUpdated",f,D,$,Me)}Hs.onRoomUpdated=ys;function bs(f){j("onRoomParticipantsUpdated",f)}Hs.onRoomParticipantsUpdated=bs;function Ms(f){j("onRoomSwitched",f)}Hs.onRoomSwitched=Ms;function As(f){j("onRoomStart",f)}Hs.onRoomStart=As;function Ds(f,D=null){j("onFeedback",f,D)}Hs.onFeedback=Ds;function ks(f){j("onFeaturesPerRoleChanged",f)}Hs.onFeaturesPerRoleChanged=ks;function ws(f){j("onParticipantVmojiUpdate",f)}Hs.onParticipantVmojiUpdate=ws;function Os(f,D){j("onAsrSet",f,D)}Hs.onAsrSet=Os;function xs(f,D,$){j("onAsrStarted",f,D,$)}Hs.onAsrStarted=xs;function Ls(f){j("onAsrStopped",f)}Hs.onAsrStopped=Ls;function Ns(f,D,$,Me){j("onAsrTranscription",f,D,$,Me)}Hs.onAsrTranscription=Ns;function Us(f,D){j("onParticipantIdChanged",f,D)}Hs.onParticipantIdChanged=Us;function Bs(f){j("onVideoSuspendSuggest",f)}Hs.onVideoSuspendSuggest=Bs;function Vs(f){j("onSignalingMessage",typeof f=="string"?f:Ie(f))}Hs.onSignalingMessage=Vs;function Fs(f){j("onPromotionApproved",f)}Hs.onPromotionApproved=Fs;function js(){j("onPeerRegistered")}Hs.onPeerRegistered=js})(Tr||(Tr={}));var I=Tr;var yr="_okcls_",jt=(()=>{try{let o=Date.now().toString(),r=window.localStorage,e=!1;return r.setItem(o,o),e=r.getItem(o)===o,r.removeItem(o),e?r:null}catch(o){return null}})();function uo(o){let r=jt?jt.getItem(yr+o):null;if(r===null)return null;try{return JSON.parse(r)}catch(e){return null}}function mo(o,r){try{jt&&jt.setItem(yr+o,JSON.stringify(r))}catch(e){}}function ho(o){jt&&jt.removeItem(yr+o)}var Pr;(t=>{function o(i){return uo(i)||null}t.get=o;function r(i,a){mo(i,a)}t.set=r;function e(i){ho(i)}t.remove=e})(Pr||(Pr={}));var st=Pr;var yt=null,Ht=null,qt=null,qi=[],$i=[],Ki=[],De=null,ke=null,Wt=null,zi=!1,Ji=!1,Fi,Gt,ji,br=null,Mr="",Hi=[],Gi=null,Pa=navigator.appVersion,_o=navigator.appName,Ae=navigator.userAgent,Ze={},Ct=(e=>(e.USER="user",e.ENVIRONMENT="environment",e))(Ct||{});(r=>{function o(e){return Object.values(r).includes(e)}r.contains=o})(Ct||(Ct={}));var bt=class{constructor(r,e=!1,t=p.videoMaxWidth,i=p.videoMaxHeight,a=p.videoFrameRate){this.isVideoRequested=()=>this.needVideo;this.supportedConstraints=navigator.mediaDevices.getSupportedConstraints();let n=!1;if(r){n={noiseSuppression:p.noiseSuppression,echoCancellation:!0,autoGainControl:!0};let l=Ee.getMicrophones(),u,m;if(ke&&(m=ke.groupId,u=ke.deviceId),typeof r=="string"){let h=l.find(R=>R.deviceId===r);m=h==null?void 0:h.groupId,u=r}else if(!ke&&Ee.os()==="MacOS"&&l.find(h=>h.label.includes("iPhone"))){let h=l.find(R=>!R.label.includes("Virtual")&&!R.label.includes("iPhone"));h&&(m=h.groupId,u=h.deviceId)}m&&this.supportedConstraints.groupId?n.groupId={exact:m}:u&&(n.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=Ee.getCameras(),u,m;if(De&&(m=De.groupId,u=De.deviceId),typeof e=="string"){let h=l.find(R=>R.deviceId===e);m=h==null?void 0:h.groupId,u=e}else if(!De&&Ee.os()==="MacOS"&&l.find(h=>h.label.includes("iPhone"))){let h=l.find(R=>!R.label.includes("Virtual")&&!R.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=n,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}},Ar=class extends bt{constructor(e,t,i,a){super(!1,!0);if(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=e,this.video.height=t,this.video.frameRate=i,this.video.displaySurface=p.displaySurface,Ee.browserName()==="Safari"){let n=Number(Ee.browserVersion());n===16?(this.video.width={max:e},this.video.height={max:t}):n===17&&(delete this.video.width,delete this.video.height)}a&&(this.audio={noiseSuppression:!1,echoCancellation:!1,autoGainControl:!1})}getNative(){return Object.assign(super.getNative(),{systemAudio:"exclude",controller:this.captureController})}},Kt=class{constructor(){this._lockId=Math.round(Math.random()*99998)+1}busy(){if(Kt._lockId)throw T.log(C.ERROR,"change_device"),d.warn("Device change failed: MediaSource is busy"),new Error("MediaSource is busy");Kt._lockId=this._lockId}free(){Kt._lockId===this._lockId&&(Kt._lockId=0)}},ui=Kt;ui._lockId=0;function ya(){return c(this,null,function*(){Ji=!1,zi=!1,yt=null;let o={camera:Ee.getSavedCamera(),microphone:Ee.getSavedMicrophone(),output:Ee.getSavedOutput()};yield Dr(),go("devicechange",o),I.onDeviceChange()})}function go(o,...r){if(Ze[o])for(let e of Ze[o])e(...r)}function Dr(){return c(this,null,function*(){return yt||(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices?[]:(!Ht&&navigator.mediaDevices.addEventListener&&(Ht=E.debounce(ya,p.enumerateDevicesDelay),navigator.mediaDevices.addEventListener("devicechange",Ht)),!qt&&li.isSupported()&&(qt=new li,yield qt.init((o,r)=>{switch(r){case"denied":case"prompt":Ht==null||Ht();break}})),yt=navigator.mediaDevices.enumerateDevices().then(o=>{var i,a,n;qi=o.filter(s=>s.kind==="videoinput"?(s.label&&(zi=!0),!0):!1),$i=o.filter(s=>s.kind==="audioinput"?(s.label?Ji=!0:Ee.isMobile()&&Ee.browserName()==="Firefox"&&(Ji=zi),!0):!1),Ki=o.filter(s=>s.kind==="audiooutput");let r=(i=De==null?void 0:De.deviceId)!=null?i:st.get("videoinput"),e=(a=ke==null?void 0:ke.deviceId)!=null?a:st.get("audioinput"),t=(n=Wt==null?void 0:Wt.deviceId)!=null?n:st.get("audiooutput");return De=qi.find(s=>s.deviceId===r)||null,ke=$i.find(s=>s.deviceId===e)||null,Wt=Ki.find(s=>s.deviceId===t)||Ki[0]||null,yt=Promise.resolve(o),o}).catch(()=>(yt=null,[]))))})}function fo(o){if(De&&ke)return;let r=(e,t)=>{var a;let i=(a=t.getSettings())==null?void 0:a.deviceId;return e.find(n=>n.deviceId===i||n.label===t.label)||null};o==null||o.getTracks().forEach(e=>{!ke&&e.kind==="audio"?ke=r(Ee.getMicrophones(),e):!De&&e.kind==="video"&&(De=r(Ee.getCameras(),e))})}function pi(o,r){return c(this,null,function*(){d.debug("Try to get media",JSON.parse(JSON.stringify(o.getNative())));let e=(!o.isVideo()||Ee.hasCameraPermission())&&(!o.isAudio()||Ee.hasMicrophonePermission());!e&&!r&&I.onPermissionsRequested();let t=new ui;try{t.busy();let i=yield navigator.mediaDevices.getUserMedia(o.getNative());return t.free(),e||(yield ya()),fo(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=o.isVideoRequested()?oe.CAMERA_PERMISSION:oe.MIC_PERMISSION;break;case"OverconstrainedError":r=oe.OVERCONSTRAINED;break;case"TypeError":r=oe.UNKNOWN;break;case"AbortError":case"NotReadableError":r=o.isVideoRequested()?oe.CAMERA_ACCESS:oe.MIC_ACCESS;break;case"Error":if(i.message==="MediaSource is busy"){r=o.isVideoRequested()?oe.CAMERA_ACCESS:oe.MIC_ACCESS;break}}if(o.canSimplify())return pi(o.simplify(),r);let a=r||oe.UNKNOWN;throw I.onPermissionsError(a,i),a}})}function So(o){return c(this,null,function*(){var e;d.debug("Try to get screen",JSON.parse(JSON.stringify(o.getNative())));let r=new ui;try{r.busy();let t=yield navigator.mediaDevices.getDisplayMedia(o.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",o.captureController&&(a==="browser"||a==="window"))try{o.captureController.setFocusBehavior("no-focus-change")}catch(n){d.warn("Failed to set focus behavior",n)}}return t}catch(t){switch(t.name){case"PermissionDeniedError":case"NotAllowedError":case"SecurityError":throw oe.SCREEN_PERMISSION;default:throw oe.SCREEN_ACCESS}}finally{r.free()}})}function Wi(){return Hi.length||(Hi=(()=>{let o,r=!1,e=0,t="0",i=Ae.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];if(/trident/i.test(i[1]))return o=/\brv[ :]+(\d+)/g.exec(Ae),["IE",o&&o[1]||"Unknown",r,e,t];if(i[1]==="Safari"){if(o=Ae.match(/\bEdge\/(\d+)/),o)return["Edge",o[1]||"Unknown",r,e,t];if(o=Ae.match(/\bCriOS\/(\d+)/),o)return["Chrome",o[1],!0,Number(o[1]),t];if(o=Ae.match(/\bFxiOS\/(\d+)/),o)return["Firefox",o[1],!1,e,t];if(o=Ae.match(/\bYaBrowser\/(\d+)/),o)return["Yandex",o[1],!1,e,t];if(o=Ae.match(/\bOPT\/(\d+)/),o)return["Opera",o[1],!1,e,t]}if(i[1]==="Chrome"){if(r=!0,e=Number(i[2]),o=Ae.match(/\bOPR\/(\d+)/),o)return["Opera",o[1]||"Unknown",r,e,t];if(o=Ae.match(/\bYaBrowser\/(\d+)/),o)return["Yandex",o[1]||"Unknown",r,e,t];if(o=Ae.match(/\bSferum\/((\d+)(?:\.\d+)*)/),o)return["Sferum",o[1]||"Unknown",r,e,t];if(o=Ae.match(/\bEdge?\/(\d+)/),o)return["Edge",o[1]||"Unknown",r,e,t];if(typeof window.opr!="undefined"&&/^(.+\.)?ok.ru$/.test(window.location.host))return["Opera","Hidden",r,e,t]}return o=Ae.match(/version\/(\d+)(?:(?:\.)(\d+))?/i),o&&o[2]!==void 0&&(t=o[2]),[i[2]?i[1]:_o,o&&o[1]||i[2]||Pa,r,e,t]})()),Hi}var Ee;(fe=>{function o(){return c(this,null,function*(){if(yt)return;let V=()=>{fe.getSilentMediaTrack(),document.removeEventListener("click",V),document.removeEventListener("touchstart",V)};document.addEventListener("click",V),document.addEventListener("touchstart",V),yield Dr()})}fe.init=o;function r(){return qi}fe.getCameras=r;function e(){return $i}fe.getMicrophones=e;function t(){return Ki}fe.getOutput=t;function i(){return qi.length>0}fe.hasCamera=i;function a(){return $i.length>0}fe.hasMicrophone=a;function n(){return De}fe.getSavedCamera=n;function s(){return ke}fe.getSavedMicrophone=s;function l(){return Wt}fe.getSavedOutput=l;function u(){return p.videoFacingMode}fe.getVideoFacingMode=u;function m(){return zi}fe.hasCameraPermission=m;function h(){return Ji}fe.hasMicrophonePermission=h;function R(){var V;return(V=qt==null?void 0:qt.getPermissionState("microphone"))!=null?V:null}fe.getMicrophonePermissionState=R;function v(V=!1){return h()?i()&&V?m():!0:!1}fe.hasPermissions=v;function A(V=!1,ee=!0,ce=!0){return c(this,null,function*(){let Se=a()&&ee,Qe=i()&&V,Be;if(!Se&&!Qe)Be=new MediaStream;else try{Be=yield pi(new bt(Se,Qe))}catch(_){Be=new MediaStream}return!Be.getVideoTracks().length&&ce&&Be.addTrack(fe.getBlackMediaTrack()),!Be.getAudioTracks().length&&ce&&Be.addTrack(fe.getSilentMediaTrack()),Be})}fe.getUserMedia=A;function F(V,ee){return c(this,null,function*(){let ce=V?p.fastScreenShareWidth:window.screen.width,Se=V?p.fastScreenShareHeight:window.screen.height,Qe=p.getScreenFrameRate(V);return So(new Ar(ce,Se,Qe,ee))})}fe.getScreenMedia=F;function O(V=!1,ee){return c(this,null,function*(){let ce=V?p.videoEffectMaxWidth:p.videoMaxWidth,Se=V?p.videoEffectMaxHeight:p.videoMaxHeight;return pi(new bt(!1,!0,ce,Se,ee))})}fe._getUserVideo=O;function q(V,ee){return c(this,null,function*(){let ce=(ee==null?void 0:ee.width)||p.videoMaxWidth,Se=(ee==null?void 0:ee.height)||p.videoMaxHeight;return pi(new bt(!1,V||!0,ce,Se))})}fe.getUserVideo=q;function X(V){return c(this,null,function*(){return pi(new bt(V||!0,!1))})}fe.getUserAudio=X;function pe(V,ee){return c(this,null,function*(){let[ce]=V.getVideoTracks();if(!ce)throw new Error("Video track not found in stream");return Ui(ce,ee)})}fe.setResolution=pe;function ie(V,ee){return c(this,null,function*(){let Se=(yield Dr()).find(Qe=>Qe.kind===V&&Qe.deviceId===ee);return Se?(V==="videoinput"?De=Se:V==="audioinput"?ke=Se:V==="audiooutput"&&(Wt=Se),st.set(V,ee),Se):null})}fe._saveDeviceId=ie;function z(){if(!ji||ji.readyState==="ended"){let V=fe.getAudioContext(),ee=V.createMediaStreamDestination(),ce=V.createGain();ce.gain.value=1e-5,ce.connect(ee),ce.connect(V.destination);let Se=V.createOscillator();Se.type="sine",Se.frequency.value=0,Se.connect(ce),Se.start(),ji=ee.stream.getAudioTracks()[0]}return Object.assign(ji.clone(),{enabled:!1})}fe.getSilentMediaTrack=z;function _e(V=p.videoMinWidth,ee=p.videoMinHeight){Gt||(Gt=document.createElement("canvas")),Gt.width=V,Gt.height=ee;let ce=Gt.getContext("2d");return ce.rect(0,0,V,ee),ce.fillStyle="black",ce.fill(),(!Fi||Fi.readyState==="ended")&&(Fi=Gt.captureStream(p.videoFrameRate).getVideoTracks()[0]),Object.assign(Fi.clone(),{enabled:!1})}fe.getBlackMediaTrack=_e;function Oe(){if(pr()==="Edge"&&Number(Di())<70)return!1;try{let V=window;return"mediaDevices"in V.navigator&&"getUserMedia"in V.navigator.mediaDevices&&V.RTCPeerConnection&&V.RTCIceCandidate&&V.RTCSessionDescription&&V.HTMLCanvasElement&&V.HTMLCanvasElement.prototype.captureStream&&V.RTCRtpSender&&V.RTCRtpSender.prototype.replaceTrack&&V.RTCRtpSender.prototype.getParameters&&"sendBeacon"in navigator&&!0||!1}catch(V){return!1}}fe.isBrowserSupported=Oe;function Ai(){return!!navigator.mediaDevices.getDisplayMedia}fe.isScreenCapturingSupported=Ai;function ei(){let V=fe.browserName()==="Safari"&&fe.browserVersion()==="15"&&fe.browserSubVersion()==="1",ee=fe.browserName()==="Opera",ce=fe.browserName()==="Yandex";return V||ee||ce}fe.isBrokenH264Decoder=ei;function re(){return fe.browserName()==="Yandex"&&fe.os()==="Windows"}fe.isBrokenVP9Encoder=re;function ti(){return fe.browserName()==="Safari"&&Number(fe.browserVersion())===17&&[4,5,6].includes(Number(fe.browserSubVersion()))}fe.isBrokenVP9Decoder=ti;function $r(){return fe.browserName()==="Firefox"&&Number(fe.browserVersion())<60}fe.isOldDataChannelDescription=$r;function zr(){return!(fe.baseChromeVersion()&&fe.isMobile())}fe.canPreferH264=zr;function Jr(){return Mr||(Mr=(()=>{let V={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 V)if(V.hasOwnProperty(ee)&&V[ee].test(Ae))return ee;return"Unknown"})()),Mr}fe.os=Jr;function Yr(){return br===null&&(br=/Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(Pa)),br}fe.isMobile=Yr;function pr(){return Wi()[0]}fe.browserName=pr;function Di(){return Wi()[1]}fe.browserVersion=Di;function Qr(){return Wi()[3]}fe.baseChromeVersion=Qr;function Xr(){return Gi||(Gi=new(window.AudioContext||window.webkitAudioContext)),Gi.resume().catch(()=>{d.warn("Failed to resume AudioContext")}),Gi}fe.getAudioContext=Xr;function J(){return Wi()[4]}fe.browserSubVersion=J;function Zr(){return fe.baseChromeVersion()>=105&&!fe.isMobile()}fe.isAudioShareSupported=Zr;function ea(V,ee){Ze[V]||(Ze[V]=[]),Ze[V].push(ee)}fe.addEventListener=ea;function ta(V,ee){if(Ze[V])if(!ee)delete Ze[V];else{let ce=Ze[V].indexOf(ee);ce>-1&&Ze[V].splice(ce,1)}}fe.removeEventListener=ta})(Ee||(Ee={}));var k=Ee;var ze=class{static get startTime(){var r;return((r=ze._list[0])==null?void 0:r.t)||0}static get endTime(){var e;let r=ze._list;return((e=r[r.length-1])==null?void 0:e.t)||0}static startSession(){ze._list=[]}static get conversationId(){return ze._conversationId}static set conversationId(r){ze._conversationId=r}static add(r){ze._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: ${k.hasCameraPermission()}, Mic: ${k.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=ze._list;return r.length===0?[]:[...ze._createContextLogs(),...r]}},Re=ze;Re._list=[],Re._conversationId=null;var Yi=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 kr=2*1024*1024,ba=512*1024,$t=100*1024,vo=5,Or="_okcls_logs_session_",Io=3e4,xr=class{constructor(){this._items=[];this._itemsSize=0;this._storageSize=kr;try{let r=window.localStorage;for(let e of Object.keys(r)){if(e.indexOf(Or)!==0)continue;let t=r.getItem(e);if(!t){Ma(e);continue}let i=Da(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($t)}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,kr)}add(r,e){let t=parseInt(r.replace(Or,""),10);this._itemsSize+=e,this._items.push({key:r,size:e,date:t})}deleteOldestItem(){let r=this._items.shift();r&&(Ma(r.key),this._itemsSize-=r.size)}cleanup(r){for(;this.length&&(this.size>kr||this.length>vo-1||this.size+r>this.available);)this.deleteOldestItem()}};function Aa(){return`${Or}${Date.now()}`}function Da(o){return new Blob([o]).size}function Ma(o){try{window.localStorage.removeItem(o)}catch(r){console.error("Failed to remove log from storage",r)}}function Qi(){let o=ct.toString();if(!Pe.available||!o)return;let r=Da(o);if(r>ba){ct.bisect(),Qi();return}Pe.cleanup($t+r);try{window.localStorage.setItem(Xi,o)}catch(e){if(console.warn("Failed to write log to storage",e),Pe.storageSize=Pe.size+r,Pe.cleanup($t+r),Pe.available>=$t+r){Qi();return}if(r>$t){ct.bisect(),Qi();return}Pe.storageSize=0;return}r>ba&&(Pe.add(Xi,r),Xi=Aa(),ct.clear(),Pe.cleanup($t))}function Lr(){!Pe.available||!ct.length||Qi()}function Eo(o=!1){let r=[];try{let i=window.localStorage;for(let n of Pe.items){let s=i.getItem(n.key);r.push(s)}let a=ct.toString();a&&r.push(a)}catch(i){console.error("Storage is blocked",i)}let e=`[${r.join(",")}]`;if(o)return e;let t=`logs_${Date.now()}.json`;return Ro(e,t),t}function Ro(o,r){let e=document.createElement("a"),t=new Blob([o],{type:"text/json"});e.href=URL.createObjectURL(t),e.download=r,e.click()}function ka(o,r){if(!Pe.available)return;let e=new Date,t={t:e.getTime(),l:o,d:r,h:e.toLocaleString("ru-RU",{dateStyle:"short",timeStyle:"long"})};ct.push(t),Re.add(t),wr||(wr=window.setTimeout(()=>{wr=null,Lr()},Io))}function Nr(){Pe||(Pe=new xr,ct=new Yi,Xi=Aa(),window.addEventListener("beforeunload",Lr))}var Pe,ct,Xi,wr=null;window.__VKCallsSDKLogs__=(o=!1)=>(Pe||Nr(),Lr(),Eo(o));var wa=(i=>(i.DEBUG="DEBUG",i.LOG="LOG",i.WARN="WARN",i.ERROR="ERROR",i))(wa||{}),Ur;(ie=>{let o="📞",r=(z,..._e)=>{I.onDebugMessage(z,..._e)},e=!1,t=(z,_e)=>(...Oe)=>{z(...Oe),ka(_e,Oe)},i=console.debug.bind(console,o),a=console.log.bind(console,o),n=console.warn.bind(console,o),s=console.error.bind(console,o),l=r.bind(null,"DEBUG"),u=r.bind(null,"LOG"),m=r.bind(null,"WARN"),h=r.bind(null,"ERROR");ie.debug=l,ie.log=u,ie.warn=m,ie.error=h;function O(){return e}ie.enabled=O;function q(z){e=z,p.debugLog&&Nr(),z?(ie.debug=p.debugLog?t(i,"DEBUG"):i,ie.log=p.debugLog?t(a,"LOG"):a,ie.warn=p.debugLog?t(n,"WARN"):n,ie.error=p.debugLog?t(s,"ERROR"):s):(ie.debug=p.debugLog?t(l,"DEBUG"):l,ie.log=p.debugLog?t(u,"LOG"):u,ie.warn=p.debugLog?t(m,"WARN"):m,ie.error=p.debugLog?t(h,"ERROR"):h)}ie.toggle=q;function X(z,..._e){switch(z){case"DEBUG":(0,ie.debug)(..._e);break;case"LOG":(0,ie.log)(..._e);break;case"WARN":(0,ie.warn)(..._e);break;case"ERROR":(0,ie.error)(..._e);break}}ie.send=X;function pe(z,..._e){}ie.test=pe})(Ur||(Ur={}));var d=Ur;var Co="kf";function zt(o){return o.stopStream}function Br(o){return o.keyFrameRequested}function Oa(o){if(zt(o))return"ss";if(Br(o))return Co;let r="";return o.priority!==void 0&&(r+="p="+o.priority),o.width!==void 0&&o.height!==void 0&&(r!==""&&(r+=":"),r+="sz="+Math.round(o.width)+"x"+Math.round(o.height)),o.fit!==void 0&&(r!==""&&(r+=":"),r+="fit="+o.fit),r}var mi=(n=>(n.CAMERA="CAMERA",n.SCREEN="SCREEN",n.STREAM="STREAM",n.MOVIE="MOVIE",n.ANIMOJI="ANIMOJI",n.SHARED_URL="SHARED_URL",n))(mi||{}),xa="s",La="m";function Je(o){return o.participantId+(o.mediaType?Lt+xa+o.mediaType:"")+(o.streamName?Lt+La+o.streamName:"")}function hi(o){let r=o.split(Lt),e=r.shift();if(!e)throw new Error("Illegal stream description: "+o);let t=null,i,a=0;for(let s of r)switch(s.charAt(0)){case xa:t=Po(s.slice(1));break;case La:i=s.slice(1);break;case Oi:a=Number.parseInt(s.slice(1),10);break;default:throw new Error("Unexpected parameter type "+s.charAt(0)+" in stream description "+o)}return{participantId:E.compose(e,a),mediaType:t,streamName:i}}function Po(o){for(let r of Object.keys(mi))if(r===o)return mi[r];return null}function et(){let o=new DataView(new ArrayBuffer(64)),r=0;function e(t){if(r+t>o.byteLength){let i=new Uint8Array(Math.max(r+t,o.byteLength+64));i.set(new Uint8Array(o.buffer.slice(0,r))),o=new DataView(i.buffer)}}return{put(t){if(e(t.byteLength),yo(t)){let i=t.buffer;new Uint8Array(o.buffer).set(new Uint8Array(i),r)}else new Uint8Array(o.buffer).set(new Uint8Array(t),r);r+=t.byteLength},putI8(t){e(1),o.setInt8(r,t),++r},putI16(t){e(2),o.setInt16(r,t),r+=2},putI32(t){e(4),o.setInt32(r,t),r+=4},putI64(t){e(8);let i=t<0;i&&(t=-t);let a=t/4294967296|0,n=t%4294967296|0;i&&(n=~n+1|0,a=n===0?~a+1|0:~a),o.setUint32(r,a),o.setUint32(r+4,n),r+=8},putUi8(t){e(1),o.setUint8(r,t),++r},putUi16(t){e(2),o.setUint16(r,t),r+=2},putUi32(t){e(4),o.setUint32(r,t),r+=4},putUi64(t){e(8),o.setUint32(r,t/4294967296|0),o.setUint32(r+4,t%4294967296),r+=8},putF(t){e(8),o.setFloat64(r,t),r+=8},ui8array(){return new Uint8Array(o.buffer.slice(0,r))}}}function yo(o){return o.buffer!==void 0}function Zi(o){let r=ArrayBuffer.isView(o)?new DataView(o.buffer,o.byteOffset,o.byteLength):new DataView(o),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 Ua=0,Ba=1,Ao=2,Do=3,ko=4,wo=5,Oo=6,xo=0,Lo=1,No=2,dt=0,Uo=0,Bo=0,Vo=1,er=class{constructor(){this.participantIdRegistry=null}setParticipantIdRegistry(r){this.participantIdRegistry=r}serializeUpdateDisplayLayout(r,e){let t=et();W.enc(t,Ua),W.enc(t,dt),W.enc(t,r),Mt.enc(t,null);let i=[];for(let a in e)e.hasOwnProperty(a)&&this.writeLayout(e,a,i);return Na.enc(t,i),Mt.enc(t,null),t.ui8array()}writeLayout(r,e,t){let i=r[e],a=et();if(this.writeStreamDesc(e,a),zt(i))W.enc(a,Lo);else if(Br(i))W.enc(a,No);else if(W.enc(a,xo),i.priority!==void 0?W.enc(a,i.priority):Mt.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))):(Mt.enc(a,null),Mt.enc(a,null)),i.fit!==void 0)switch(i.fit){case"cv":W.enc(a,Bo);break;case"cn":W.enc(a,Vo);break;default:Mt.enc(a,null)}else Mt.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}}Mo.enc(e,r)}serializePerfStatReport(r,e){let t=et();return W.enc(t,Ba),W.enc(t,dt),W.enc(t,r),W.enc(t,e.framesDecoded),W.enc(t,e.framesReceived),t.ui8array()}serializeSharingStatReport(r,e){let t=et();return W.enc(t,Ao),W.enc(t,dt),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=et();return W.enc(t,Do),W.enc(t,dt),W.enc(t,r),Vr.enc(t,e.request),t.ui8array()}serializeNetworkStatReport(r,e){let t=et();return W.enc(t,ko),W.enc(t,dt),W.enc(t,r),W.enc(t,e.timestamp),W.enc(t,e.sendBitrate),t.ui8array()}serializeEnableVideoSuspend(r,e){let t=et();return W.enc(t,wo),W.enc(t,dt),W.enc(t,r),Vr.enc(t,e.enabled),t.ui8array()}serializeEnableVideoSuspendSuggest(r,e){let t=et();return W.enc(t,Oo),W.enc(t,dt),W.enc(t,r),Vr.enc(t,e.enabled),t.ui8array()}deserializeCommandResponse(r){return c(this,null,function*(){let e;if(r instanceof Blob){let n="arrayBuffer"in Blob.prototype?yield r.arrayBuffer():yield ha(r);e=Zi(n)}else e=Zi(r);let t=W.dec(e),i=W.dec(e);if(i!==dt){d.warn("Unsupported version for command type: "+t+", version "+i);return}if(W.dec(e)!==Uo){d.warn("Error code: "+t+"received for command type: "+t+", version "+i);return}switch(t){case Ua:return this.deserializeUpdateDisplayLayoutResponse(e);case Ba:return this.deserializeReportPerfStatResponse(e);default:d.warn("unsupported command response commandType: "+t);return}})}deserializeUpdateDisplayLayoutResponse(r){let e=W.dec(r),t=Na.dec(r),i={};return t.forEach(a=>{var l;let n=Zi(a),s=bo.dec(n);if(typeof s=="string")i[s]=W.dec(n);else{let u=s,m=Je((l=this.participantIdRegistry)==null?void 0:l.getStreamDescription(u));i[m]=W.dec(n)}}),{type:"response",sequence:e,response:x.UPDATE_DISPLAY_LAYOUT.toString(),errorCodeByParticipantId:i}}deserializeReportPerfStatResponse(r){let e=W.dec(r),t=W.dec(r);return{type:"response",sequence:e,response:x.REPORT_PERF_STAT.toString(),estimatedPerformanceIndex:t}}};var Va=(i=>(i.START="start",i.ACCEPT="accept",i.JOIN="join",i.RETRY="retry",i))(Va||{}),tt=Va;var Fa=(t=>(t.NOTIFICATION="NOTIFICATION",t.FAILED="FAILED",t.RECONNECT="RECONNECT",t))(Fa||{}),Te=Fa;var ja=(S=>(S.TRANSMITTED_DATA="transmitted-data",S.ACCEPTED_CALL="accepted-call",S.HUNGUP="hungup",S.PARTICIPANT_ADDED="participant-added",S.PARTICIPANT_JOINED="participant-joined",S.CLOSED_CONVERSATION="closed-conversation",S.MEDIA_SETTINGS_CHANGED="media-settings-changed",S.PARTICIPANT_STATE_CHANGED="participant-state-changed",S.PARTICIPANTS_STATE_CHANGED="participants-state-changed",S.RATE_CALL_DATA="rate-call-data",S.FEATURE_SET_CHANGED="feature-set-changed",S.TOPOLOGY_CHANGED="topology-changed",S.PRODUCER_UPDATED="producer-updated",S.CONSUMER_ANSWERED="consumer-answered",S.MULTIPARTY_CHAT_CREATED="multiparty-chat-created",S.FORCE_MEDIA_SETTINGS_CHANGE="force-media-settings-change",S.SETTINGS_UPDATE="settings-update",S.VIDEO_QUALITY_UPDATE="video-quality-update",S.REGISTERED_PEER="registered-peer",S.SWITCH_MICRO="switch-micro",S.RECORD_STARTED="record-started",S.RECORD_STOPPED="record-stopped",S.REALLOC_CON="realloc-con",S.AUDIO_ACTIVITY="audio-activity",S.SPEAKER_CHANGED="speaker-changed",S.STALLED_ACTIVITY="stalled-activity",S.CHAT_MESSAGE="chat-message",S.CUSTOM_DATA="custom-data",S.ROLES_CHANGED="roles-changed",S.MUTE_PARTICIPANT="mute-participant",S.PIN_PARTICIPANT="pin-participant",S.OPTIONS_CHANGED="options-changed",S.NETWORK_STATUS="network-status",S.PARTICIPANT_SOURCES_UPDATE="participant-sources-update",S.PROMOTE_PARTICIPANT="promote-participant",S.CHAT_ROOM_UPDATED="chat-room-updated",S.PROMOTION_APPROVED="promotion-approved",S.JOIN_LINK_CHANGED="join-link-changed",S.FEEDBACK="feedback",S.MOVIE_UPDATE_NOTIFICATION="movie-update-notification",S.MOVIE_SHARE_STARTED="movie-share-started",S.MOVIE_SHARE_STOPPED="movie-share-stopped",S.URL_SHARING_INFO_UPDATED="url-sharing-info-updated",S.ROOM_UPDATED="room-updated",S.ROOMS_UPDATED="rooms-updated",S.ROOM_PARTICIPANTS_UPDATED="room-participants-updated",S.FEATURES_PER_ROLE_CHANGED="features-per-role-changed",S.PARTICIPANT_ANIMOJI_CHANGED="participant-animoji-changed",S.ASR_STARTED="asr-started",S.ASR_STOPPED="asr-stopped",S.DECORATIVE_PARTICIPANT_ID_CHANGED="decorative-participant-id-changed",S.VIDEO_SUSPEND_SUGGEST="video-suspend-suggest",S))(ja||{}),U=ja;var Ha="open",Ga=[()=>p.producerScreenTrack,()=>p.videoTracksCount>0,()=>!0,()=>!0,()=>p.consumerScreenTrack,()=>!0,()=>p.movieShare,()=>p.useParticipantListChunk,()=>p.useRooms,()=>!!p.vmoji,()=>p.useCallsToContacts,()=>p.useChatRooms],Fo=10,jo=["service-unavailable","conversation-ended","invalid-token"],Ye=class extends ii{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="+Ye._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 er}static _getCapabilityFlags(){let e=0;for(let t=0;t<Ga.length;t++)Ga[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){T.log(C.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(n){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(n){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)===Ha&&this._handleCommandsQueue(this.datachannelCommandsQueue);else{if(!this.socket){T.log(C.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&&(T.log(C.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=(R,v=!1)=>{!a||v?u(R):(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===x.UPDATE_DISPLAY_LAYOUT||e===x.REPORT_PERF_STAT||e===x.REPORT_SHARING_STAT||e===x.REQUEST_ASR||e===x.ENABLE_VIDEO_SUSPEND||e===x.ENABLE_VIDEO_SUSPEND_SUGGEST||e===x.REPORT_NETWORK_STAT:!1}getNextCommandSequenceNumber(){return this.sequence}hangup(e){return c(this,null,function*(){return this._send(x.HANGUP,{reason:e}).catch(()=>{})})}sendCandidate(e,t){return c(this,null,function*(){return this._send(x.TRANSMIT_DATA,{participantId:e,data:{candidate:t}},!1)})}requestTestMode(e,t){return c(this,null,function*(){return this._send(x.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(x.TRANSMIT_DATA,{participantId:e,data:a})})}acceptCall(e){return c(this,null,function*(){return this._send(x.ACCEPT_CALL,{mediaSettings:e})})}changeMediaSettings(e){return c(this,null,function*(){return this._send(x.CHANGE_MEDIA_SETTINGS,{mediaSettings:e},!0,Fo)})}changeParticipantState(e,t){return c(this,null,function*(){let i={participantState:{state:e}};return t&&(i.participantId=t),this._sendRaw(x.CHANGE_PARTICIPANT_STATE,i)})}putHandsDown(){return c(this,null,function*(){return this._send(x.PUT_HANDS_DOWN)})}addParticipant(e,t){return c(this,null,function*(){return this._send(x.ADD_PARTICIPANT,ue({participantIds:e},t))})}removeParticipant(e,t=!1){return c(this,null,function*(){return this._send(x.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(x.ALLOCATE_CONSUMER,i)})}acceptProducer(e,t){return c(this,null,function*(){let i={description:e.sdp};return t&&(i.ssrcs=t),this._send(x.ACCEPT_PRODUCER,i)})}changePriorities(e){return c(this,null,function*(){return this._send(x.CHANGE_STREAM_PRIORITIES,{typedPriorities:e}).catch(()=>{})})}updateDisplayLayout(e){return c(this,null,function*(){return this._send(x.UPDATE_DISPLAY_LAYOUT,e)})}addMovie(e){return c(this,null,function*(){return this._send(x.ADD_MOVIE,e)})}updateMovie(e){return c(this,null,function*(){return this._send(x.UPDATE_MOVIE,e)})}removeMovie(e){return c(this,null,function*(){return this._send(x.REMOVE_MOVIE,e)})}startUrlSharing(e){return this._send(x.START_URL_SHARING,{sharedUrl:e})}stopUrlSharing(){return this._send(x.STOP_URL_SHARING)}updateRooms(e,t){return c(this,null,function*(){return this._send(x.UPDATE_ROOMS,{rooms:e,assignRandomly:t})})}activateRooms(e,t){return c(this,null,function*(){return this._send(x.ACTIVATE_ROOMS,{roomIds:e,deactivate:t})})}switchRoom(e,t){return c(this,null,function*(){return this._sendRaw(x.SWITCH_ROOM,{toRoomId:e,participantId:t})})}getRooms(e){return c(this,null,function*(){return this._sendRaw(x.GET_ROOMS,{withParticipants:e})})}removeRooms(e){return c(this,null,function*(){return this._send(x.REMOVE_ROOMS,{roomIds:e})})}startStream(e){return c(this,null,function*(){return this._send(x.RECORD_START,e)})}stopStream(){return c(this,arguments,function*(e={roomId:null}){return this._send(x.RECORD_STOP,e)})}publishStream(){return c(this,arguments,function*(e={roomId:null}){return this._send(x.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(x.RECORD_SET_CONF,t)})}getRecordStatus(){return c(this,null,function*(){return this._send(x.RECORD_GET_STATUS)})}switchTopology(e,t=!1){return c(this,null,function*(){return this._send(x.SWITCH_TOPOLOGY,{topology:e,force:t})})}requestRealloc(){return c(this,null,function*(){return this._send(x.REQUEST_REALLOC)})}reportPerfStat(e){return c(this,null,function*(){return this._send(x.REPORT_PERF_STAT,e)})}reportSharingStat(e){return c(this,null,function*(){return this._send(x.REPORT_SHARING_STAT,e,!1)})}reportNetworkStat(e){return c(this,null,function*(){return this._send(x.REPORT_NETWORK_STAT,e,!1)})}chatMessage(e,t=null){return c(this,null,function*(){return this._send(x.CHAT_MESSAGE,{message:e,participantId:t})})}chatHistory(e){return c(this,null,function*(){return this._send(x.CHAT_HISTORY,{count:e})})}customData(e,t){return c(this,null,function*(){return this._send(x.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(x.GRANT_ROLES,a)})}muteParticipant(e,t,i,a=null){return c(this,null,function*(){return this._sendRaw(x.MUTE_PARTICIPANT,{participantId:e,muteStates:t,requestedMedia:i,roomId:a})})}enableFeatureForRoles(e,t){return c(this,null,function*(){return this._sendRaw(x.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(x.PIN_PARTICIPANT,a)})}updateMediaModifiers(e){return c(this,null,function*(){return this._send(x.UPDATE_MEDIA_MODIFIERS,{mediaModifiers:e})})}enableVideoSuspend(e){return c(this,null,function*(){return this._send(x.ENABLE_VIDEO_SUSPEND,{enabled:e},!1)})}enableVideoSuspendSuggest(e){return c(this,null,function*(){return this._send(x.ENABLE_VIDEO_SUSPEND_SUGGEST,{enabled:e},!1)})}changeOptions(e){return c(this,null,function*(){return this._send(x.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(x.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(x.PROMOTE_PARTICIPANT,i)})}requestPromotion(e=!1){return c(this,null,function*(){let t={};return e&&(t.unrequest=e),this._send(x.REQUEST_PROMOTION,t)})}acceptPromotion(e=!1){return c(this,null,function*(){let t={};return e&&(t.reject=e),this._send(x.ACCEPT_PROMOTION,t)})}feedback(e){return c(this,null,function*(){return this._sendRaw(x.FEEDBACK,{key:e})})}getHandQueue(){return c(this,null,function*(){return this._send(x.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(x.GET_PARTICIPANT_LIST_CHUNK,e)})}getParticipants(e){return c(this,null,function*(){return this._send(x.GET_PARTICIPANTS,{externalIds:e})})}getPeerId(){return this.peerId}startAsr(e){return c(this,null,function*(){return this._send(x.ASR_START,e)})}stopAsr(e){return c(this,null,function*(){return this._send(x.ASR_STOP,e)})}requestAsr(e){return c(this,null,function*(){return this._send(x.REQUEST_ASR,{request:e},!1)})}_connect(e){if(this.socket&&this.socket.readyState<WebSocket.CLOSING)return;let t="";e&&(t+=`&tgt=${e}`),e===tt.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 n=p.participantListChunkInitIndex;a+=`&partIdx=${n}`;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"),T.log(C.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){T.log(C.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(Te.RECONNECT,e),e.conversation.topology&&this._triggerEvent(Te.NOTIFICATION,{type:"notification",notification:U.TOPOLOGY_CHANGED,topology:e.conversation.topology})),this.lastStamp&&this._handleCachedMessages(),(t=e.recoverMessages)==null||t.forEach(i=>this._handleMessage(i)),this._handleCommandsQueue(this.websocketCommandsQueue)):!this.connected||!this.listenersReady?this.incomingCache.push(e):this._triggerEvent(Te.NOTIFICATION,e);break;case"response":this._handleCommandResponse(!0,e);break;case"error":this._handleErrorMessage(e);break;default:T.log(C.SOCKET_ACTION,"unknown_message"),d.warn("[signaling] unhandled message",e)}this.lastStamp=e.stamp||this.lastStamp}_handleErrorMessage(e){var i;T.log(C.SOCKET_ACTION,`error-${e.error}`);let t=e.error?jo.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 H(e.reason||oe.SIGNALING_FAILED,{message:`Conversation ended: ${e.error}`,remote:!0})):this._triggerEvent(Te.NOTIFICATION,{notification:U.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 H(e.reason||oe.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(Te.FAILED,e)}_onError(e){T.log(C.SOCKET_ACTION,"error"),d.error("[signaling] signaling error",e)}_onClose(e){T.log(C.SOCKET_ACTION,"closed"),d.debug("[signaling] connection closed",{code:e.code,reason:e.reason}),this.connected=!1,this._stopDoctor(),this.socket&&this.reconnectCount++<Ye.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(Ye.RECONNECT_MAX_DELAY,Ye.RECONNECT_DELAY*Math.pow(2,this.reconnectCount-1));d.log(`[signaling] reconnect websocket after ${e}ms (${this.reconnectCount})`),T.log(C.SOCKET_ACTION,"reconnect"),this.reconnectTimer=window.setTimeout(this._connect.bind(this,tt.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],T.log(C.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],T.log(C.SOCKET_ACTION,"response-timeout"),i.reject(new Error(t.error||`Response timeout [${i.name}]`))):i.responseTimer=window.setTimeout(()=>this._handleCommandResponse(e,t),Ye.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)!==Ha){a.reject(new Error(`Invalid data channel state: ${(i=this.producerCommandDataChannel)==null?void 0:i.readyState}`));return}this._startResponseTimer(a);let n=this._serializeBinary(a);n!==null&&this.producerCommandDataChannel.send(n)}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"}),Ye.WAIT_RESPONSE_DELAY),this.responseHandlers[e.sequence]=e}_serializeBinary(e){switch(e.name){case x.UPDATE_DISPLAY_LAYOUT:return this.producerCommandSerializationService.serializeUpdateDisplayLayout(e.sequence,e.params);case x.REPORT_PERF_STAT:return this.producerCommandSerializationService.serializePerfStatReport(e.sequence,e.params);case x.REPORT_SHARING_STAT:return this.producerCommandSerializationService.serializeSharingStatReport(e.sequence,e.params);case x.REQUEST_ASR:return this.producerCommandSerializationService.serializeRequestAsr(e.sequence,e.params);case x.REPORT_NETWORK_STAT:return this.producerCommandSerializationService.serializeNetworkStatReport(e.sequence,e.params);case x.ENABLE_VIDEO_SUSPEND:return this.producerCommandSerializationService.serializeEnableVideoSuspend(e.sequence,e.params);case x.ENABLE_VIDEO_SUSPEND_SUGGEST:return this.producerCommandSerializationService.serializeEnableVideoSuspendSuggest(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===x.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]=Oa(t[a]));return{layouts:i}}_waitConnectionMessage(){this.connectionMessageWaitTimer=window.setTimeout(()=>{this.conversationReject&&this.conversationReject(new H(oe.SIGNALING_FAILED,{message:"Unable to connect to the signaling: connection timeout",remote:!0}))},Ye.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(tt.RETRY)},Ye.WAIT_MESSAGE_DELAY)}_stopDoctor(){window.clearTimeout(this.doctorTimer),this.doctorTimer=0}},Ne=Ye;Ne.RECONNECT_DELAY=p.signalingReconnectDelay,Ne.RECONNECT_MAX_DELAY=p.signalingReconnectMaxDelay,Ne.RECONNECT_MAX_COUNT=p.signalingReconnectMaxCount,Ne.WAIT_CONNECTION_DELAY=p.waitConnectionDelay,Ne.WAIT_RESPONSE_DELAY=p.waitResponseDelay,Ne.WAIT_MESSAGE_DELAY=p.waitMessageDelay;var Wa=(t=>(t.INCOMING="INCOMING",t.OUTGOING="OUTGOING",t.JOINING="JOINING",t))(Wa||{}),lt=Wa;var Ka=(t=>(t.USER="USER",t.GROUP="GROUP",t.CHAT="CHAT",t))(Ka||{}),it=Ka;var qa=(e=>(e.ATTENDEE="ATTENDEE",e.HAND_UP="HAND_UP",e))(qa||{}),Fr=qa;var $a=(t=>(t.ADD_PARTICIPANT="ADD_PARTICIPANT",t.RECORD="RECORD",t.MOVIE_SHARE="MOVIE_SHARE",t))($a||{}),jr=$a;var za=(n=>(n.REQUIRE_AUTH_TO_JOIN="REQUIRE_AUTH_TO_JOIN",n.AUDIENCE_MODE="AUDIENCE_MODE",n.WAITING_HALL="WAITING_HALL",n.ASR="ASR",n.FEEDBACK="FEEDBACK",n.RECURRING="RECURRING",n))(za||{}),Jt=za;function Ja(o,r){if(o.length!==r.length)return!1;for(let e of o)if(!r.includes(e))return!1;return!0}function Ya(o,r){let e=new Set(o);for(let[t,i]of Object.entries(r))i?e.add(t):e.delete(t);return Array.from(e)}var Qa=(t=>(t.UNMUTE="UNMUTE",t.MUTE="MUTE",t.MUTE_PERMANENT="MUTE_PERMANENT",t))(Qa||{}),Ue=Qa;var Xa=(i=>(i.CALLED="CALLED",i.ACCEPTED="ACCEPTED",i.REJECTED="REJECTED",i.HUNGUP="HUNGUP",i))(Xa||{}),Z=Xa;var Za=(i=>(i.UPDATE="UPDATE",i.REMOVE="REMOVE",i.ACTIVATE="ACTIVATE",i.TIMEOUT="TIMEOUT",i))(Za||{}),_i=Za;var en=(e=>(e.AUDIO_MIX="audio-mix",e.PARTICIPANT_AGNOSTIC_TRACK_PREFIX="pat",e))(en||{}),We=en;var tn=(e=>(e.NO_AVAILABLE_TRACKS="no-available-tracks",e.UNKNOWN_ERROR="unknown-error",e))(tn||{}),rn=tn;function an(o){switch(o){case 1:return"no-available-tracks";default:return"unknown-error"}}var nn=(e=>(e.CREATOR="CREATOR",e.ADMIN="ADMIN",e))(nn||{}),pt=nn;function gi(o,r){if(o.length!==r.length)return!1;for(let e of o)if(!r.includes(e))return!1;return!0}var Hr=(t=>(t.USER="USER",t.ANONYM="ANONYM",t.GROUP="GROUP",t))(Hr||{}),Y;(u=>{function o(m){return m.length?typeof m[0]=="object"?m:m.map(h=>r(h)):[]}u.fromIds=o;function r(m,h="USER",R=0){return{id:m,type:h,deviceIdx:R}}u.fromId=r;function e(m,h=!0){var A;let R=h?m.decorativeExternalUserId:m.externalId,v=(A=m.deviceIdx)!=null?A:0;if(R)return t(R,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",R=0){return i(r(m,h,R))}u.fromIdToString=a;function n(m){try{return JSON.parse(m)}catch(h){throw new Error(`Failed to parse ExternalId from string '${m}'`)}}u.fromString=n;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})(Y||(Y={}));function Gr(o,r){return o===null||r===null?o===null&&r===null:!(o.maxDimension!==r.maxDimension||o.maxBitrateK!==r.maxBitrateK||o.maxFramerate!==r.maxFramerate||o.degradationPreference!==r.degradationPreference||o.scalabilityMode!==r.scalabilityMode)}function tr(o,r){return!(!Gr(o.camera,r.camera)||!Gr(o.screenSharing,r.screenSharing))}function Wr(o,r){return{camera:Object.assign({},o.camera,r.camera),screenSharing:Object.assign({},o.screenSharing,r.screenSharing)}}function on(o){try{return btoa(JSON.stringify(o))}catch(r){d.warn("WaitingParticipant: failed convert to string",o,r)}return null}function sn(o){try{return JSON.parse(atob(o))}catch(r){d.warn("WaitingParticipant: failed convert from string",o,r)}return null}var ir=(o,r)=>E.objectReduce(o,(e,t,i)=>(t===r&&e.push(i),e),[]);function cn(o){var r;if((r=o.conversation)!=null&&r.muteStates)return o.conversation.muteStates;if(o.muteState&&o.muteOptions)return o.muteOptions.reduce((e,t)=>(e[t]=o.muteState,e),{})}function Ho(o,r){switch(o){case de.AUDIO:return!!r.isAudioEnabled;case de.AUDIO_SHARING:return!!r.isAudioSharingEnabled;case de.VIDEO:return!!r.isVideoEnabled;case de.SCREEN_SHARING:return!!r.isFastScreenSharingEnabled||!!r.isScreenSharingEnabled;default:return!1}}function dn(o,r){return E.objectReduce(o,(e,t,i)=>{switch(t){case Ue.MUTE:case Ue.MUTE_PERMANENT:{Ho(i,r)||(e[i]=t);break}default:e[i]=t;break}return e},{})}function ln(o){let{muteStates:r={},mediaSettings:e}=o;return dn(r,e)}function pn(o,r){let e=o.conversation.participants.find(i=>E.comparePeerId(i.peerId,o.peerId));if(!e)return r;let{mediaSettings:t}=e;return dn(r,t)}var Yt=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(C.ERROR,`audio_device_recover_${r.bandwidth?"success":"fail"}`);return}!this._fixNoPacketsApplied&&!r.bandwidth&&(this._fixNoPacketsApplied=!0,T.log(C.ERROR,"audio_device_recover"),d.log("[AudioFix] Trying to fix RV (no packets)"),this._toggleAudioPromise=this._mediaSource.toggleAudio(k.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"),T.log(C.ERROR,"audio_device_recover_rv_fail"),this._fixTooManyPacketsFailed=!0):t-this._fixTooManyPacketsTime>6e4&&(d.log("[AudioFix] Fixed RV"),T.log(C.ERROR,"audio_device_recover_rv_success"),this._fixTooManyPacketsSucceeded=!0):i>e&&(this._fixTooManyPacketsApplied=!0,T.log(C.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 fi=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 n;if(p.muteMode||!((n=this._output)!=null&&n.audioTrack))return;let r=k.browserName()!=="Safari"||k.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=k.getSavedOutput();i&&(yield(t=(e=this._output.audioElement).setSinkId)==null?void 0:t.call(e,i.deviceId))}catch(i){throw T.log(C.ERROR,"change_output"),d.error("[audio] Output change failed",i),i}})}};var Go=90,Wo=3,Si=class extends ne{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>Go?d.warn(`High memory usage: ${t}% (${i} MiB)`):(!this._lastMemoryStat.percent||Math.abs(t-this._lastMemoryStat.percent)>=Wo)&&(d.debug(`Memory usage: ${t}% (${i} MiB)`),this._lastMemoryStat.percent=t,this._lastMemoryStat.bytes=e.usedJSHeapSize)}};var Ko=44100,At=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=k.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=Ko/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,n)=>a+n,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 vi=class extends ne{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()}),i()}init(e){this._stopDetector(),this._detector=new At("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 un=(n=>(n.producerNotification="producerNotification",n.producerCommand="producerCommand",n.consumerScreenShare="consumerScreenShare",n.producerScreenShare="producerScreenShare",n.asr="asr",n.animoji="animoji",n))(un||{}),rt=un;var Dt=class extends ne{constructor(e,t){super();this._state="IDLE";this._pc=null;this._signaling=e,this._mediaSource=t}getState(){return this._state||"IDLE"}};var mn="videochat-epi",qo=5e3,$o=500,ut=class extends ne{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(mn)||"",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+qo<=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+$o<=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(mn,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 n;return i+((n=a.bandwidth)!=null?n:0)*8},0)};if(t.timestamp)try{yield this._signaling.reportNetworkStat(t)}catch(i){}})}_reportCallStats(e){var u,m,h,R;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:_n(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:_n(e.inbound.transport.remote),remote_connection_type:(R=e.inbound.transport.remote)==null?void 0:R.type};this._previousCallStatReport||(this._previousCallStatReport=Object.assign({},t));let i=!1,a=!1;for(e.inbound.rtps.reduce((v,A)=>(A.kind==="video"?(i=!0,A.framesReceived&&(v.jitter_video=v.jitter_video*v.inbound_video_count/(v.inbound_video_count+1)+A.jitter*1e3/(v.inbound_video_count+1),v.interframe_delay_variance=v.interframe_delay_variance*v.inbound_video_count/(v.inbound_video_count+1)+(A.interframeDelayVariance||0)*1e6/(v.inbound_video_count+1),v.inbound_video_count++),v.frames_dropped+=A.framesDropped||0,v.nack_sent+=A.nackCount,v.pli_sent+=A.pliCount,v.fir_sent+=A.firCount,v.freeze_count+=A.freezeCountDelta||0,v.total_freezes_duration+=A.totalFreezesDurationDelta||0):(a=!0,A.totalSamplesReceived&&(v.jitter_audio=v.jitter_audio*v.inbound_audio_count/(v.inbound_audio_count+1)+A.jitter*1e3/(v.inbound_audio_count+1),v.total_audio_energy=v.total_audio_energy*v.inbound_audio_count/(v.inbound_audio_count+1)+(A.totalAudioEnergy||0)/(v.inbound_audio_count+1),v.inbound_audio_count++),v.total_audio_samples_received+=A.totalSamplesReceived||0,v.inserted_audio_samples_for_deceleration+=A.insertedSamplesForDeceleration||0,v.removed_audio_samples_for_acceleration+=A.removedSamplesForAcceleration||0,v.concealed_audio_samples+=A.concealedSamples||0,v.silent_concealed_audio_samples+=A.silentConcealedSamples||0,v.audio_concealment_events+=A.concealmentEvents||0),v),t),e.outbound.rtps.reduce((v,A)=>(A.kind==="video"?(v.nack_received+=A.nackCount,v.pli_received+=A.pliCount,v.fir_received+=A.firCount,v.packets_sent_video+=A.packetsSent):v.packets_sent_audio+=A.packetsSent,v),t),e.remoteInbound.rtps.reduce((v,A)=>(A.kind==="video"?v.packets_lost_video+=A.packetsLost:v.packets_lost_audio+=A.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 n={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(i&&!ar(t.jitter_video)&&(n.jitter_video=Math.round(t.jitter_video)),a&&!ar(t.jitter_audio)&&(n.jitter_audio=Math.round(t.jitter_audio)),i&&!ar(t.interframe_delay_variance)&&(n.interframe_delay_variance=t.interframe_delay_variance),t.freeze_count&&t.total_freezes_duration&&(n.freeze_count=t.freeze_count,n.total_freezes_duration=Math.round(t.total_freezes_duration*1e3)),t.ss_freeze_count&&t.ss_total_freezes_duration&&(n.ss_freeze_count=t.ss_freeze_count,n.ss_total_freezes_duration=t.ss_total_freezes_duration),a&&!ar(t.total_audio_samples_received)){let v=Math.max(0,t.total_audio_samples_received-this._previousCallStatReport.total_audio_samples_received),A=Math.max(0,t.inserted_audio_samples_for_deceleration-this._previousCallStatReport.inserted_audio_samples_for_deceleration),F=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),q=Math.max(0,t.silent_concealed_audio_samples-this._previousCallStatReport.silent_concealed_audio_samples),X=Math.max(0,t.audio_concealment_events-this._previousCallStatReport.audio_concealment_events);n.inserted_audio_samples_for_deceleration=kt(A/v*1e3),n.removed_audio_samples_for_acceleration=kt(F/v*1e3),n.concealed_audio_samples=kt(O/v*1e3),n.concealed_silent_audio_samples=kt(q/v*1e3),n.concealment_audio_avg_size=kt(O/X),n.total_audio_energy=t.total_audio_energy}hn(t,"local_address","local_connection_type","network_type","transport")&&(n.local_address=t.local_address,n.local_connection_type=t.local_connection_type,n.network_type=t.network_type,n.transport=t.transport),hn(t,"remote_address","remote_connection_type")&&(n.remote_address=t.remote_address,n.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);n.video_loss=kt(v/s*100)}if(l>0){let v=Math.max(0,t.packets_lost_audio-this._previousCallStatReport.packets_lost_audio);n.audio_loss=kt(v/l*100)}Ce.logCallStat(n),p.enableLogPerfStatReport&&d.log("Sent call stats",n),this._previousCallStatReport=t}};function hn(o,...r){for(let e of r)if(!o.hasOwnProperty(e)||o[e]===void 0)return!1;return!0}function _n(o,r=!1){if(o!=null&&o.address)return o.address+(r?`:${o.port}`:"")}function ar(o){return o===void 0}function kt(o){return Number.isNaN(o)?0:o}var Ei=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 gn=.25,fn=.35,zo=85,Jo=.1,Yo=1.5,Qo=.1,Xo=1,Zo=.6,es=.3;var Ri=class extends ne{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 Ei(gn,gn),loss:new Ei(fn,fn),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)/zo);for(let n=0;n<a;n++)i*=1-Jo;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)/Yo);for(let n=0;n<a;n++)i*=1-Qo;return i}_calcBitrateRating(e,t){if(!e||!t)return 1;let a=1-(1-Math.min(e,t)/Math.max(e,t))*Xo;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>=Zo?"good":e>=es?"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((R,v)=>Math.max(R,v.packetLoss||0),0),n={rtt:this._localNetworkStat.rtt.update(i),loss:this._localNetworkStat.loss.update(a)};if(t){let R=e.outbound.rtps.reduce((v,A)=>{var F;return v+((F=A.bandwidth)!=null?F:0)*8},0);n.bitrate=R,this._localNetworkStat.bitrate=R}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"},n)},null).catch(R=>{d.warn("Unable to send [bad-net]",R)})),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 ts=30*1e3,at=class extends Dt{constructor(e,t,i,a,n){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=n,this._perfStatReporter=new ut(this,i,!0),this._directStatReporter=new Ri(i),this.subscribe(this._signaling,Te.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,rt.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){T.log(C.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){T.log(C.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){tr(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 U.TRANSMITTED_DATA:this._handleTransmittedData(e);break;case U.SETTINGS_UPDATE:this._directStatReporter.updateSettings(e.settings);break;case U.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 T.log(C.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=at._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 T.log(C.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(n=>this._signaling.sendSdp(this._participantId,n,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}),T.log(C.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&&(T.log(C.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?(T.log(C.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}),T.log(C.ERROR,"iceRestart-direct"),this._requestTopologySwitch()},p.iceRestartWaitTime)}_createOffer(e){return c(this,null,function*(){var a,n;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=at._patchLocalDescription(i)}catch(s){throw d.error("Unable to create offer",s,{participantId:this._participantId}),T.log(C.ERROR,"createOffer-direct"),s}try{return d.debug("Set local description",{participantId:this._participantId,offer:i}),this._calcFingerprint(i.sdp),yield(n=this._pc)==null?void 0:n.setLocalDescription(i),i}catch(s){throw d.error("Unable to set local description",s,{participantId:this._participantId}),T.log(C.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=at._patchLocalDescription(e)}catch(a){throw d.error("Unable to create answer",a,{participantId:this._participantId}),T.log(C.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}),T.log(C.ERROR,"setLocalDescription-direct"),a}})}static _patchLocalDescription(e){let t=!!k.baseChromeVersion();return e.sdp=E.patchLocalSDP(e.sdp,p.preferH264&&k.canPreferH264(),k.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,k.isBrokenVP9Encoder(),k.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}),T.log(C.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=>{var a;this._lastStat=t;let i={inbound:{topology:"DIRECT",transport:t.transport,rtps:t.rtps.filter(n=>n.type==="inbound-rtp"?(n.userId=this._participantId,!0):!1)},outbound:{topology:"DIRECT",transport:t.transport,rtps:t.rtps.filter(n=>n.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 n=i.getSettings();if(!n.width||!n.height||!n.frameRate)return!1;let s={type:k.browserName()==="Firefox"?"transmission":"webrtc",video:{contentType:a.mimeType,width:n.width,height:n.height,bitrate:a.bandwidth,framerate:n.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,n=t.currentRoundTripTime<this._networkLimitsForVideo.bad.rtt,s=this._videoMaxDimensionsForNet.good,l="L1T1";if(a?(this._lastBadConnection=Date.now(),n?(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>ts)||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 R=je(ue({},this._serverSettings),{camera:je(ue({},m),{scalabilityMode:l,maxDimension:this._lastVideoMaxDimension})});this.updateSettings(R)})}_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 n=a.readyState;n==="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 [${n}]`)}}};var is=16,Qt=class{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),n=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:n,timestamp:s,duration:l,data:r.slice(is)}}_onDataChannelMessage(r){var a,n;let e=Qt.parse(r),t=(n=(a=this._participantIdRegistry)==null?void 0:a.getStreamDescription(e.ssrc))==null?void 0:n.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 ht}from"messagepack";var nr=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,n;let e=new Uint8Array(r),t=e[0],i=e.subarray(1);switch(t){case 1:let s=ht(i);return Object.entries(s).forEach(([F,O])=>{let q=hi(F);this.streamDescriptionByCompactId.set(O,q),this.compactIdByStreamDescription.set(F,O)}),null;case 2:case 4:let l=ht(i),u=[];for(let F of l){let O=this.getStreamDescription(F);O&&u.push(O.participantId)}return t===2?{type:"notification",notification:U.AUDIO_ACTIVITY,activeParticipants:u}:{type:"notification",notification:U.STALLED_ACTIVITY,stalledParticipants:u};case 3:let m=ht(i);return{type:"notification",notification:U.SPEAKER_CHANGED,speaker:(a=this.getStreamDescription(m))==null?void 0:a.participantId};case 5:let h=ht(i);return{type:"notification",notification:U.VIDEO_QUALITY_UPDATE,quality:{maxBitrate:h[0],maxDimension:h[1]}};case 6:let R=ht(i),v={};for(let[F,O]of Object.entries(R)){let q=(n=this.getStreamDescription(Number(F)))==null?void 0:n.participantId;q&&(v[q]=O/100)}return{type:"notification",notification:U.NETWORK_STATUS,statuses:v};case 7:return this._createParticipantSourcesUpdateNotification(i);case 8:{let O=ht(i).map(q=>{var ei;let[X,pe,ie,z,_e,Oe,Ai]=q;return{participantId:(ei=this.getStreamDescription(X))==null?void 0:ei.participantId,gain:pe,pause:ie,offset:z,mute:_e,liveStatus:Oe,startTimeMs:Ai}});return{type:"notification",notification:U.MOVIE_UPDATE_NOTIFICATION,data:O}}case 9:let A=ht(i);return{type:"notification",notification:U.VIDEO_SUSPEND_SUGGEST,bandwidth:A};default:return d.debug("unsupported message type: "+t),null}}_createParticipantSourcesUpdateNotification(r){let e=ht(r),t=[];for(let[i,a]of Object.entries(e)){let n=a[0],s=a[1],l=a[2],u=!!a[3],m=a[4]!==null?!!a[4]:void 0,h;if(n!==null){if(h=this.getStreamDescription(n),!h){d.error(`could not uncompress participant ID ${n}`);continue}}else h=null;if(l===null){d.error("unexpected null sequenceNumber",i,a);continue}let R=We.PARTICIPANT_AGNOSTIC_TRACK_PREFIX+"-"+i,v=s?s>>>0:null;t.push({participantStreamDescription:h,streamId:R,rtpTimestamp:v,sequenceNumber:l,fastScreenShare:u,suspend:m})}return{type:"notification",notification:U.PARTICIPANT_SOURCES_UPDATE,participantUpdateInfos:t}}};var rs=90,as=4294967295,we=class extends Dt{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.subscribe(this._signaling,Te.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){tr(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}}_createPerfStatsReporter(){var e;(e=this._perfStatReporter)==null||e.destroy(),this._perfStatReporter=new ut(this,this._signaling)}_closeConnection(){this._stopStatInterval(),this._stopSettingsInterval(),this._removeAsrTrack(),this._removeCaptureSender(),this._removeCaptureReceiver(),this._pc&&(this._rtpReceiversByStreamId={},this._disabledSenders.forEach(e=>{var t;return(t=e.track)==null?void 0:t.stop()}),this._disabledSenders.clear(),this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.onsignalingstatechange=null,this._participantIdRegistry=null,we._closeDataChannel(this._producerNotification),we._closeDataChannel(this._producerCommand),we._closeDataChannel(this._producerScreen),we._closeDataChannel(this._consumerScreen),we._closeDataChannel(this._asr),we._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 n=a.readyState;n==="open"?(d.debug(`[${t}] data channel opened`),i(a)):d.error(`[${t}] data channel open failed, state [${n}]`)},a.onerror=n=>{let s=n.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=we._onSignalingStateChange.bind(this,this._pc),this._participantIdRegistry=new nr,this._signaling.setParticipantIdRegistry(this._participantIdRegistry),p.producerNotificationDataChannel&&this._createDataChannel(this._pc,rt.producerNotification,t=>{this._producerNotification=t,this._producerNotification.binaryType="arraybuffer",this._signaling.setProducerNotificationDataChannel(t)}),p.producerCommandDataChannel&&(this._signaling.useCommandDataChannel(!0),this._createDataChannel(this._pc,rt.producerCommand,t=>{this._producerCommand=t,this._signaling.setProducerCommandDataChannel(t)})),p.producerScreenDataChannel&&this._createDataChannel(this._pc,rt.producerScreenShare,t=>{this._producerScreen=t,this._producerScreen.binaryType="arraybuffer",this._createCaptureReceiver()}),p.asrDataChannel&&this._createDataChannel(this._pc,rt.asr,t=>{this._asr=t,this._asr.binaryType="arraybuffer",this._removeAsrTrack(),this._asrTrack=new Qt(t,this._participantIdRegistry,i=>{this._onAsrTranscription(i)})}),p.vmoji&&this._createDataChannel(this._pc,rt.animoji,t=>{var i,a,n,s;this._animojiDataChannel=t,this._animojiDataChannel.binaryType="arraybuffer",(i=this._animojiReceiver)==null||i.setDataChannel(t),(a=this._animojiReceiver)==null||a.setParticipantIdRegistry(this._participantIdRegistry),(n=this._animojiSender)==null||n.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),T.log(C.ERROR,"addTrack-single"),this.close(t);return}p.consumerScreenDataChannel&&this._createDataChannel(this._pc,rt.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)|(?:${We.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 Tt(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 Et(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),n=e.maxDimension!==0;if(a&&!n){d.log("Disabling video upload"),this._disabledSenders.add(i),i.replaceTrack(k.getBlackMediaTrack()).catch(l=>{d.error("Could not disable video upload",l)});return}let s=this._mediaSource.getSendVideoTrack();if(!a&&n&&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)}).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 ai(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=We.AUDIO_MIX,a=this._statBytes[i],n=!1;if(a){let s=t.bytesReceived-a.bytesReceived;s>=0&&s<=5&&(n=!0),a.stalled!==n&&this._triggerEvent("AUDIO_MIX_STALL",n)}this._statBytes[i]={bytesReceived:t.bytesReceived,stalled:n}}_allocateConsumer(){if(!this._signaling.ready)return;let e={estimatedPerformanceIndex:ut.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};!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");try{yield this._pc.setRemoteDescription(e)}catch(i){throw d.error("[single] unable to set remote offer",i),T.log(C.ERROR,"setRemoteDescription-single"),i}let t;try{if(yield this._handleTracks(),d.debug("[single] create local answer"),!this._pc)throw new Error("Interrupt allocation");t=yield this._pc.createAnswer()}catch(i){throw d.error("[single] unable to create answer",i),T.log(C.ERROR,"createAnswer-single"),i}try{if(!this._pc)throw new Error("Interrupt allocation");t.sdp=E.patchLocalSDP(t.sdp,!1,k.isBrokenH264Decoder(),!1,p.h264spsPpsIdrInKeyframe),d.debug("[single] set local answer",{answer:t}),yield this._pc.setLocalDescription(t)}catch(i){throw d.error("[single] unable to set local answer",i),T.log(C.ERROR,"setLocalDescription-single"),i}try{d.debug("[single] transmit local answer",{answer:t}),this._updateSSRCMap(e),yield this._signaling.acceptProducer(t,Object.keys(this._ssrcMap)),d.debug("[single] remote offer has been processed")}catch(i){d.warn("[single] unable to send local answer",i),T.log(C.ERROR,"acceptProducer")}})}_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,k.isOldDataChannelDescription(),!1,!1,!1,k.isBrokenVP9Encoder(),k.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),T.log(C.ERROR,"replaceTrack-single")}})}_onSignalingNotification(e){return c(this,null,function*(){if(this._isOpen)switch(e.notification){case U.PRODUCER_UPDATED:yield this._onProducerUpdated(e);break;case U.REALLOC_CON:this._reconnect();break;case U.AUDIO_ACTIVITY:this._signalActiveParticipants(e.activeParticipants);break;case U.SPEAKER_CHANGED:this._signalSpeakerChanged(e.speaker);break;case U.STALLED_ACTIVITY:this._signalStalledParticipants(e.stalledParticipants);break;case U.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=n=>{this._triggerEvent("REMOTE_TRACK_REMOVED",i.id,i,n.track)}),i.getTracks().find(n=>n.id===t.track.id)||i.addTrack(t.track),this._rtpReceiversByStreamId[i.id]=t.receiver,this._triggerEvent("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),T.log(C.ICE_CONNECTION_STATE,e.connectionState),e.connectionState){case"failed":this._reconnectionPrevented?this.close(new Error("Ice connection failed")):(T.logCustom(C.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&&(T.log(C.ICE_CONNECTION_TYPE,a.local.type),d.debug("Selected ICE candidates",a))}),T.logCustom(C.RECONNECT,{param:0});break}}_onReplacedTrack(e,t){var i;if(this._pc){p.consumerScreenDataChannel&&t&&(e=t);let a=(i=this._pc)==null?void 0:i.getSenders().find(n=>n.track&&n.track.kind===e.kind&&!this._disabledSenders.has(n)&&n.track.contentHint===e.contentHint);a!=null&&a.track?a.replaceTrack(e).catch(n=>{d.error("ServerTransport: Unable to replace track",n),T.log(C.ERROR,"replaceTrack-single")}):e.kind==="audio"&&e.contentHint==="music"&&(this._newAudioShareTrack=e)}this._applyConsumerSettings()}getStreamWaitingTimeMs(e,t){if(!this._pc)return T.log(C.PAT_WAITING_TIME_ERROR,"noConnection"),d.error("Cannot get stream waiting time, peer connection is not initialized"),0;if(!RTCRtpReceiver.prototype.getSynchronizationSources)return T.log(C.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 T.log(C.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 T.log(C.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&as,u=Math.ceil(l/rs);return Math.min(100,Math.max(0,u))}};var mt=(e=>(e.DIRECT="DIRECT",e.SERVER="SERVER",e))(mt||{}),or=class extends ne{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,Te.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 n=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),n=!0}n&&(this._topology==="DIRECT"&&this._directTransport&&this._directTransport.open(t),this._topology==="SERVER"&&this._serverTransport&&(this._serverTransport.open(i),this._setStates(e,this._serverTransport.getState()),this._setLocalState(this._serverTransport.getState())),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)}_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===U.TOPOLOGY_CHANGED)return this._onTopologyChanged(e)}_onTopologyChanged(e){var t;if(e.topology!==this._topology){if(d.log(`Topology changed ${this._topology} -> ${e.topology}`),T.log(C.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||[],n=e.offerToDeviceIdxs||[],s=i.length&&a.length?E.composeParticipantId(i[0],a[0],n[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 at(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 we(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 n=this._allocated.indexOf(t);n>=0&&this._allocated.splice(n,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"?(T.log(C.PAT_WAITING_TIME_ERROR,"wrongTopology"),d.error(`Cannot get stream waiting time, incorrect topology: ${this._topology}`),0):this._serverTransport?this._serverTransport.getStreamWaitingTimeMs(e,t):(T.log(C.PAT_WAITING_TIME_ERROR,"noTransport"),d.error("Cannot get stream waiting time, server transport is not initialized"),0)}};var sr=class extends ne{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 At(e,i),!this._interval)){let n=()=>{this._collectVolumes(),this._interval=window.setTimeout(n,p.voiceParams.interval)};this._interval=window.setTimeout(n,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===We.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 cr=class extends ne{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 n=e[a].smoothed;n>t&&n>p.voiceParams.threshold&&(t=n,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 Ti=class extends ne{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"),T.log(C.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"),T.log(C.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(C.CALL_SPEC_ERROR,`${this._transport.getTopology()}_VOLUME_TIMEOUT_${i}`))}),e.length&&d.warn("There is silent participant, send callSpecError"),this._volumeTimeout=0}};var dr=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,Xe(C.FIRST_MEDIA_RECEIVED))}measure(){this._isFinished||(this._isFinished=!0,this._callType&&Ce.logEventualStat({name:C.FIRST_MEDIA_RECEIVED,call_type:this._callType}))}};var ns=1e3,os=1e4;var ss=15,Q=class extends ne{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=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);T.create(e,t),Ce.create(),this._api=e,this._signaling=new Ne,this._onUnload=()=>{this._conversation&&this._api&&(this._api.hangupConversation(this._conversation.id),p.clientEventsLoggingEnabled&&T.logClientEvent({event_type:C.CALL_DECLINED_OR_HANGED_LOCALLY,reason:"none"},!0)),T.destroy(),Ce.destroy()},window.addEventListener("unload",this._onUnload),this._statFirstMediaReceived=new dr,this._audioOutput=new fi(this._statFirstMediaReceived),p.videoTracksCount>0&&(this._cooldownQueueCleanupTimer=window.setInterval(this._cleanupCooldownQueue.bind(this),ns))}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="",n=!1,s=!1,l){return c(this,null,function*(){if(Q._activationMutex)throw T.log(C.ERROR,"startCall"),d.warn("Conversation: there is already running activation"),new H(B.FAILED);Q._activationMutex=!0,Re.startSession();try{this._mediaSource=this._createMediaSource(),yield this._mediaSource.request(i);let u=this._mediaSource.getMediaSettings();t===it.CHAT||e.length>1?this._logWithMediaSettings(C.OUTGOING_MULTIPARTY_CALL,u):this._logWithMediaSettings(C.OUTGOING_CALL,u);let m=yield this._startConversation(e,t,lt.OUTGOING,i,a,n,s,l);if(!this._conversation)throw new H(B.UNKNOWN_ERROR);if(this._participantState=Z.ACCEPTED,this._changeMediaSettings(u),yield this._processConnection(m),this._allocateTransport(),this._createSpeakerDetector(),this._createSpecListener(),this._signaling.readyToSend(),Q._delayedHangup)throw new H(B.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(),this._getMainRoomParticipants()),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 T.log(C.ERROR,"joinCall"),d.warn("Conversation: there is already running activation"),new H(B.FAILED);Q._activationMutex=!0,this._state="PROCESSING",Re.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 H(B.UNSUPPORTED);this._mediaSource=this._createMediaSource(),yield this._mediaSource.request(e.mediaOptions,!i);let a=this._mediaSource.getMediaSettings();this._logWithMediaSettings(C.JOIN_CONVERSATION,a);let n=yield this._joinConversation(e);if(!this._conversation)throw new H(B.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(n)}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,n;d.debug("Join conversation part 2"),Q._activationMutex=!0;try{if(this._participantState=Z.ACCEPTED,!this._conversation||!this._mediaSource)throw new H(B.UNKNOWN_ERROR);if(this._statFirstMediaReceived.markOnJoin(this._conversation.topology),!this._conversation.observer&&!this._isAudienceModeListener()&&this._changeMediaSettings(this._mediaSource.getMediaSettings()),yield this._processConnection(e),this._allocateTransport(),this._createSpeakerDetector(),this._createSpecListener(),this._signaling.readyToSend(),this._state==="CLOSE")return this._conversation;if(Q._delayedHangup)throw new H(B.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(),this._getMainRoomParticipants(),s),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(this._participants),!1),this._conversation.audienceMode&&!this._conversation.restricted&&this._forceOpenTransportForAloneInCall(),this._conversation.recordsInfoByRoom.get((n=(a=e==null?void 0:e.rooms)==null?void 0:a.roomId)!=null?n: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=se.USER,i){if(Q._activationMutex)throw d.warn("Conversation: there is already running activation"),new H(B.REJECTED);Q._activationMutex=!0;try{let n=yield this._prepareConversation(e,t,i);if(this._mediaSource=this._createMediaSource(),!this._conversation)throw new H(B.UNKNOWN_ERROR);if(!n.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)"),T.log(C.PUSH,"rejected"),new H(B.REJECTED);if(Re.startSession(),yield this._processConnection(n),this._extractConnectionUrlSharingInfo(n),this._allocateTransport(),this._createSpeakerDetector(),this._createSpecListener(),this._processPinnedParticipants(n),this._signaling.readyToSend(),T.log(C.PUSH,"accepted"),Q._current=this,Q._delayedHangup)throw new H(B.CANCELED);Q._activationMutex=!1}catch(n){throw Q._activationMutex=!1,this._close(n,"Unable to handle inbound call push"),n}})}_isInWaitingHall(e){return!e.conversation||(e.conversation.options||[]).indexOf(Jt.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(Jt.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 H(B.UNKNOWN_ERROR);this._state="PROCESSING";let e=this._mediaSource.getMediaSettings();this._logWithMediaSettings(C.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(this._participants),!0)}catch(t){this._close(t,"Unable to accept concurrent call")}})}_getMainRoomParticipants(){return E.mapSharedParticipants(Object.values(this._participants).filter(e=>!e.isInRoom))}accept(e){return c(this,null,function*(){var t,i,a,n,s;if(this._state!=="IDLE")throw T.log(C.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 H(B.UNKNOWN_ERROR);this._state="PROCESSING",d.debug("Accept incoming call",e);try{yield this._mediaSource.request(e);let l=this._mediaSource.getMediaSettings();this._logWithMediaSettings(C.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());(t=h.rooms)!=null&&t.rooms&&h.rooms.rooms.forEach(v=>{var A;(A=v.participantIds)==null||A.forEach(F=>{this._participants[F]&&(this._participants[F].isInRoom=!0)})}),this._conversation.roomId=((i=h.rooms)==null?void 0:i.roomId)||null;let R=yield this._extractExternalRoomsData((a=h.rooms)==null?void 0:a.rooms,(n=h.rooms)==null?void 0:n.roomId);if(I.onCallAccepted(),I.onLocalStream(this._mediaSource.getStream(),l),I.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._getMuteStatesForCurrentRoom(),this._getMainRoomParticipants(),R),p.useParticipantListChunk){let v=yield this._getInitialParticiapntListChunk();(s=v==null?void 0:v.participants)==null||s.forEach(A=>{let F=E.composeId(A),O=this._participants[F];O&&(O.movieShareInfos=A.movieShareInfos)}),this._onConversationParticipantListChunk({participants:v})}return I.onLocalStatus("WAITING"),this._toggleJoinAvailability(),this._changeNeedRate(),this._state="ACTIVE",this._changeFeatureSet(),this._openTransport(Object.values(this._participants),!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 T.log(C.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(C.DECLINE_INCOMING,(e=this._mediaSource)==null?void 0:e.getMediaSettings()),this._participantState=Z.HUNGUP,this._signaling.ready&&(yield this._signaling.hangup(B.REJECTED)),this._close(new H(B.REJECTED))})}hangup(){return c(this,null,function*(){d.debug("Hangup");let e=this._state==="ACTIVE"?B.HUNGUP:B.CANCELED;T.log(C.HANGUP,e),this._signaling.ready?(yield this._signaling.hangup(e),this._close(new H(e))):I.onHangup(new H(B.HUNGUP),this._conversation&&this._conversation.id)})}addParticipant(e,t){return c(this,null,function*(){if(!this._signaling.ready){this._close(new H(B.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=B.UNKNOWN_ERROR);let n=i.participants;for(let s of n)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 n of e)(n.state===Z.CALLED||n.state===Z.ACCEPTED)&&(this._transport.isAllocated(n.id)||this._transport.allocate(n.id,t)),n.state===Z.ACCEPTED&&i.push(n.id);i.length&&this._transport.open(i,null,!!((a=this._conversation)!=null&&a.observer))}_close(e,t){t&&d.error(t,e),d.debug("Close conversation",e),this._signaling.readyToSend(!1),e.error?this._signaling.ready&&this._signaling.hangup(B.FAILED):T.log(C.ERROR,e.hangup),Q._activationMutex=!1;let i=this._conversation&&this._conversation.id;if([B.CANCELED,B.NOT_FRIENDS,B.CALLEE_IS_OFFLINE,B.CALLER_IS_BLOCKED,B.CALLER_IS_REJECTED].indexOf(e.hangup)!==-1||e.hangup===B.REJECTED&&!e.remote){I.onHangup(e,i),this.destroy();return}if(e.hangup===B.HUNGUP&&(!e.remote||this._isCalledState())){I.onHangup(e,i),this.destroy();return}if(e.hangup===B.MISSED&&!e.remote){I.onHangup(e,i),this.destroy();return}if(this._cooldownQueueCleanupTimer!==null&&(window.clearInterval(this._cooldownQueueCleanupTimer),this._cooldownQueueCleanupTimer=null),(e.hangup===B.SOCKET_CLOSED||e.hangup===B.NOT_FOUND)&&Q._current&&!this._conversation){this._cleanupSignaling(),this._cleanupMediaSource();return}if(e.hangup===B.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(),Ce.destroy(),this._conversation=null,this._myLastRequestedLayouts={},Q._current=null,Q._delayedHangup=!1,I.onHangup(e||new H(B.UNKNOWN_ERROR),i)}destroy(){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(),this._cleanupParticipants(),this._cleanupParticipantAgnosticStreams(),this._cleanupTransport(),this._cleanupSpeakerDetector(),this._cleanupSpecListener(),this._cleanupSignaling(),this._api.cleanup(),this._cleanupListeners(),T.destroy(),Ce.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:n}=t;if(n&&i.push(n),a){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,n="",s=!1,l=!1,u){return c(this,null,function*(){Xe(C.SIGNALING_CONNECTED);let m=E.uuid();d.debug("Conversation: start",{conversationId:m,opponentIds:e,opponentType:t,direction:i});let h=a.includes(de.VIDEO),R=yield this._api.startConversation(m,e,t,h,n,s,l,{onlyAdminCanShareMovie:u});d.debug("Api.startConversation",R);let v=yield this._getConversationParams(R.id);R.endpoint=this._addGeoParamsToEndpoint(R.endpoint,v);let A=yield this._connectSignaling(tt.START,R);return yield this._setConversation(R,A,i),A})}_joinConversation(e){return c(this,null,function*(){Xe(C.SIGNALING_CONNECTED);let{conversationId:t,mediaOptions:i,chatId:a,joinLink:n,observedIds:s,payload:l}=e;d.debug("Conversation: join",{conversationId:t,joinLink:n,observedIds:s});let u=i.includes(de.VIDEO),m;if(t)m=yield this._api.joinConversation(t,u,a);else if(n)m=yield this._api.joinConversationByLink(n,u,s,l);else throw new H(B.UNKNOWN_ERROR);d.debug("Api.joinConversation",m),yield this._getConversationParams(m.id);let h=yield this._connectSignaling(tt.JOIN,m);return yield this._setConversation(m,h,lt.JOINING),h})}_prepareConversation(a){return c(this,arguments,function*(e,t=se.USER,i){Xe(C.SIGNALING_CONNECTED),d.debug("Conversation: push",{conversationId:e,type:t,peerId:i});let n=this._api.getUserId();if(!n)throw new H(B.UNKNOWN_ERROR);let s=yield this._getConversationParams(e),l=s.device_idx||0,u=`${p.wssBase}?userId=${n}&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(tt.ACCEPT,m);return Q._current&&(Q._current._participantState===Z.ACCEPTED||Q._current._participantState===Z.CALLED)?(d.log("Push rejected (busy)"),T.log(C.PUSH,"busy"),this._signaling.ready&&this._signaling.hangup(B.BUSY),Promise.reject({hangup:B.BUSY})):(Q._current&&(Q._current.destroy(),Q._current=null),yield this._setConversation(m,h,lt.INCOMING,t),h)})}_createParticipant(e,t){return c(this,null,function*(){var a;let i=Object.assign({id:null,externalId:null,mediaSettings:ve(),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 H(B.NETWORK_ERROR),t),t}})}_setConversation(n,s,l){return c(this,arguments,function*(e,t,i,a=se.USER){var v;let{participants:u}=t.conversation;u.forEach(A=>{let F=E.composeId(A),O=Y.fromSignalingParticipant(A,!1);if(O){this._api.cacheExternalId(F,O);let q=E.composeDecorativeId(A),X=Y.fromSignalingParticipant(A);q&&X&&(this._api.cacheExternalId(q,X),this._api.mapDecorativeId(A.decorativeUserId,A.id))}});let m=this._api.getUserId(),h=e.device_idx||0;if(!m){let A=(t.conversation.participants||[]).find(F=>E.comparePeerId(F.peerId,t.peerId));if(!A)throw new H(B.UNKNOWN_ERROR);m=Number(A.id),A.idType&&(a=A.idType),A.deviceIdx&&(h=A.deviceIdx),this._api.setUserId(m)}let R=E.composeParticipantId(m,a,h);this._conversation={userId:m,compositeUserId:R,externalId:yield this._getExternalIdByParticipantId(R),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},Re.conversationId=t.conversation.id||e.id,this._signaling.setConversationId(this._conversation.id),e.p2p_forbidden&&(p.forceRelayPolicy=e.p2p_forbidden),T.log(C.RELAY_POLICY,p.forceRelayPolicy?"1":"0"),this._changeFeatureSet(),this._logDevices()})}_updateConversation(e){if(!this._conversation)throw new H(B.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 Vi;return this.subscribe(e,"SOURCE_CHANGED",this._onLocalMediaStreamChanged.bind(this)),this.subscribe(e,"SCREEN_STATUS",this._onScreenSharingStatus.bind(this)),this._audioFix=new Yt(e),e}_connectSignaling(e,t){return c(this,null,function*(){this._signaling.setEndpoint(t.endpoint),this.subscribe(this._signaling,Te.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._signaling,Te.FAILED,this._onSignalingFailed.bind(this)),this.subscribe(this._signaling,Te.RECONNECT,this._onSignalingReconnect.bind(this));let i=yield this._signaling.connect(e,t);return Ce.logEventualStat({name:C.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(Fr.ATTENDEE,e.chatRoom.totalCount,e.chatRoom.firstParticipants,null,null)})}_onConversationParticipantListChunk(e){let t=e.participants;t&&I.onConversationParticipantListChunk(this._participantListChunkToExternalChunk(this._createParticipantListChunk(t)))}_createParticipantListChunk(e){return ue(ue({},{participants:[],countBefore:0,countAfter:0,markerFound:!1}),e)}_participantListChunkToExternalChunk(e){let t=E.mapSharedParticipants(e.participants.reduce((i,a)=>{let n=E.composeId(a);return this._participants[n]&&i.push(this._participants[n]),i},[]));return je(ue({},e),{participants:t})}_registerConnectionParticipants(e){return c(this,null,function*(){var i,a,n,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=(n=e==null?void 0:e.rooms)==null?void 0:n.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)for(let i of e){let a=E.composeId(i);if(d.test("Conversation:RegisterParticipant",a),this._isMe(a)){this._conversation.roles=i.roles||[],this._conversation.roles.length&&(d.debug(`Local roles changed: ${i.roles}`),I.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],B.HUNGUP);continue}let n=E.composeDecorativeId(i),s=yield this._createParticipant({id:a,externalId:Y.fromSignalingParticipant(i),mediaSettings:ve(i.mediaSettings),participantState:E.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},n);this._registerParticipantInCache(s),i.roles&&i.roles.length&&(d.debug(`Roles for participant [${a}] changed: ${i.roles}`),I.onRolesChanged(this._participants[a].externalId,i.roles,!0))}})}_registerParticipantLocalMuteState({muteStates:e,unmuteOptions:t}){if(!e)return;let i=()=>c(this,null,function*(){let a=ir(e,Ue.MUTE),n=ir(e,Ue.MUTE_PERMANENT);for(let s of[a,n])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 t=this._participants[e];if(t)return t;let i=this._api.getDecorativeIdByInitialId(E.decomposeId(e).id),a=i?E.composeUserId(i):void 0;return this._createParticipant({id:e},a)})}_getExternalIdByParticipantId(e){return c(this,null,function*(){var t,i;if(this._isMe(e))return(t=this._conversation)==null?void 0:t.externalId;if(p.useParticipantListChunk)return(yield this._getExistedParticipantByIdOrCreate(e)).externalId;if((i=this._participants[e])!=null&&i.externalId)return this._participants[e].externalId;{let a=yield this._getParticipantId(e);return this._api.cacheExternalId(e,a),a}})}_registerParticipantAndSetMarkersIfChunkEnabled(e,t){return c(this,null,function*(){if(p.useParticipantListChunk){let i=this._registerParticipantInCache(yield this._getExistedParticipantByIdOrCreate(e));return i.markers=this._denormalizeMarkers(i.id,t),i}return this._participants[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,[n,s])=>(a[n]=je(ue(ue({},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=cn(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=pn(e,a));let n=Object.keys(a),s=(m=this._conversation)==null?void 0:m.roomId;n.length&&this._onMuteParticipant({muteStates:a,mediaOptions:n,muteAll:!0,stateUpdated:!0,roomId:s},t)}_processRecordInfos(e){var t,i,a,n,s;this._onRecordInfo((i=(t=e.conversation)==null?void 0:t.recordInfo)!=null?i:null);for(let l of(n=(a=e.rooms)==null?void 0:a.rooms)!=null?n:[])this._onRecordInfo((s=l.recordInfo)!=null?s:null,l.id)}_processPinnedParticipants(e){var t,i,a,n;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):(n=this._conversation)==null||n.pinnedParticipantIdByRoom.delete(s.id)}_allocateTransport(){if(!this._conversation||!this._mediaSource)return;this._transport=new or(this._conversation.topology,this._signaling,this._mediaSource,this._serverSettings),this._debugInfo=new Si,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===lt.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 sr(this._transport),this.subscribe(this._volumesDetector,"VOLUMES_DETECTED",this._onVolumesDetected.bind(this)),this._speakerDetector=new cr(this._volumesDetector,this._transport,this._conversation.topology),this.subscribe(this._speakerDetector,"SPEAKER_CHANGED",this._onSpeakerChanged.bind(this)),this._localVolumeDetector=new vi(this._mediaSource))}_createSpecListener(){this._transport&&this._volumesDetector&&(this._specListener=new Ti(this._transport,this._volumesDetector,this._participants))}_logDevices(){let e=k.getCameras().length,t=k.getMicrophones().length;d.debug("Cameras: "+e+(k.hasCameraPermission()?"✔":"✖")+", Microphones: "+t+(k.hasMicrophonePermission()?"✔":"✖")),T.log(C.DEVICES,`${e}_${t}`)}_logWithMediaSettings(e,t){T.log(e,[(t==null?void 0:t.isAudioEnabled)&&"audio",(t==null?void 0:t.isVideoEnabled)&&"video"].filter(Boolean).join("_"))}_removeParticipant(e,t){var i;if(!(e.state===Z.CALLED||e.state===Z.ACCEPTED||this._state==="CLOSE")&&(e.id===this._lastSignalledActiveSpeakerId&&(this._lastSignalledActiveSpeakerId=null),!!this._participants[e.id])){t===B.HUNGUP?this._setParticipantsStatus([e],"HANGUP"):this._setParticipantsStatus([e],"ERROR",t),(i=e.mediaSource)==null||i.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[a,n]of Object.entries(e.lastRequestedLayouts))this._streamIdByStreamDescription.delete(a),this._sequenceNumberByStreamDescription.delete(a),this._cooldownTimestampByStreamDescription.delete(a),this._streamWaitTimerByStreamDescription.has(a)&&(window.clearTimeout(this._streamWaitTimerByStreamDescription.get(a)),this._streamWaitTimerByStreamDescription.delete(a)),this._sendUpdateDisplayLayout({[a]:{stopStream:!0}});this._api.unmapDecorativeId(e.id),delete this._participants[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(){Object.values(this._participants).forEach(e=>{var t,i,a,n;(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()),(n=e.mediaSource)==null||n.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=this._participants[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 n=E.composeDecorativeId(t);a=this._registerParticipantInCache(yield this._createParticipant({id:e,externalId:Y.fromSignalingParticipant(t),mediaSettings:ve(t.mediaSettings),state:t.state,roles:t.roles||[],muteStates:t.muteStates||{},unmuteOptions:t.unmuteOptions||[],observedIds:t.observedIds||[]},n))}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(C.ADD_PARTICIPANT),this._invokeRolesChangedCallbackIfNeeded(a))})}_onRemoveParticipant(e){d.debug(`Remove participant [${e}]`);let t=[];for(let i=0;i<=ss;i++){let a=E.compose(e,i),n=this._participants[a];n&&t.push(n)}if(!t.length){this._warnParticipantNotInConversation(e);return}if(this._transport)for(let i of t)this._transport.close(i.id);T.log(C.REMOVE_PARTICIPANT)}changeDevice(e){return c(this,null,function*(){return e==="audiooutput"?this._audioOutput.changeOutput():this._mediaSource?this._mediaSource.changeDevice(e):Promise.reject(oe.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(oe.UNKNOWN)})}disableScreenCapturing(){return c(this,null,function*(){return this._mediaSource?this._mediaSource.disableScreenCapturing():Promise.reject(oe.UNKNOWN)})}toggleAnimojiCapturing(e){this._mediaSource&&this._mediaSource.toggleAnimojiCapturing(e)}setAnimojiSvg(e,t=null,i=null){if(!this._transport||!this._conversation)return;let a=!t,n=t!=null?t:this._conversation.compositeUserId;if(e instanceof ArrayBuffer){let s=i!=null?i:this._conversation.externalId.id;this._transport.setAnimojiSvg(n,{svg:e,userId:s,isMe:a});return}this._transport.setAnimojiSvg(n,{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 T.log(C.MEDIA_STATUS,e?"video_1":"video_0"),this._mediaSource.toggleVideo(e)})}toggleLocalAudio(e){return c(this,null,function*(){if(this._mediaSource)return T.log(C.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 a of e){let n=typeof a.uid=="object"?a.uid:Y.fromId(a.uid),s=Y.toString(n);i[s]=a.priority}for(let a of Object.values(this._participants)){let n=Y.toString(a.externalId);i.hasOwnProperty(n)&&(t[a.id]=i[n])}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[Je(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 a;if(e.length<1||!this._signaling.ready||((a=this._transport)==null?void 0:a.getTopology())!=="SERVER")return;d.log(`Update display layout request [${this._signaling.getNextCommandSequenceNumber()}]`,e);let t={};for(let n of e){let s=typeof n.uid=="object"?n.uid:Y.fromId(n.uid),l=this._api.getCachedOkIdByExternalId(s);if(!l){let h=Y.toString(s);d.log(`Unknown participant external ID ${h}`);continue}let u=Je({participantId:l,mediaType:n.mediaType,streamName:n.streamName}),m=this._participants[l];m?m.lastRequestedLayouts[u]=n:this._isMe(l)&&(this._myLastRequestedLayouts[u]=n),zt(n)?(this._isMe(l)&&delete this._myLastRequestedLayouts[u],this._streamIdByStreamDescription.has(u)&&!this._cooldownTimestampByStreamDescription.has(u)&&this._cooldownTimestampByStreamDescription.set(u,Date.now())):(this._cooldownTimestampByStreamDescription.delete(u),!this._streamIdByStreamDescription.has(u)&&p.videoTracksCount>0&&this._streamIdByStreamDescription.set(u,null),t[u]=n),n.mediaType==="SCREEN"&&!zt(n)&&Xe(Ut(l))}let i=this._cooldownTimestampByStreamDescription.keys();for(;this._streamIdByStreamDescription.size>p.videoTracksCount;){let n=i.next();if(n.done){d.error("Cannot accommodate all streaming requests: tracks available "+p.videoTracksCount+"; requested streams: "+Array.from(this._streamIdByStreamDescription.keys()));break}this._stopStreaming(n.value),t[n.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:C.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=ue({event_type:e},t);T.logClientEvent(a,i)}_stopStreaming(e){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=hi(e),n=this._participants[a.participantId],s=(i=this._conversation)==null?void 0:i.externalId,l=this._isMe(a.participantId);if(n||l){switch(a.mediaType){case"STREAM":case"MOVIE":{if(a.streamName){let u={stream:null,streamName:a.streamName,mediaType:a.mediaType};l?I.onLocalLive(s,u):I.onRemoteLive(n.externalId,u)}break}case"CAMERA":{I.onRemoteStream(n.externalId,null);break}case"SCREEN":{I.onRemoteScreenStream(n.externalId,null);break}}T.log(C.PAT_DEALLOCATED)}else d.log(`Cannot find participant to stop streaming: ${a.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=[];for(let[a,n]of Object.entries(t.errorCodeByParticipantId||{})){let s=hi(a),l=this._participants[s.participantId];if(l){let u;typeof n!="number"?(d.warn(`Unexpected error code ${n} received for participant ${s.participantId}`),u=rn.UNKNOWN_ERROR):u=an(n),i.push({externalId:l.externalId,errorReason:u})}}if(i&&i.length)throw new Ci("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]+os>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;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 H(B.REMOVED))):(this._updateConversation(e),yield this._onJoinPart2(e))),I.onPromoted(e.demote)})}_onChatRoomUpdated(s){return c(this,arguments,function*(e,t=0,i=[],a,n){d.log(`Chat room updated: ${e}`);let l=[],u=[],m=[],h=[],R=[];if(i.length&&i.forEach(F=>{if(F.externalId){let O=Y.fromSignaling(F.externalId);R.push(O),this._api.cacheExternalId(F.id.id,O)}else{let O=E.decomposeId(F.id.id).id;l.push(O),h.push(O)}}),a!=null&&a.length&&a.forEach(F=>{let O=E.decomposeId(F).id;l.push(O),u.push(O)}),n!=null&&n.length&&n.forEach(F=>{let O=E.decomposeId(F).id;l.push(O),m.push(O)}),!l.length){I.onChatRoomUpdated(e,t,R,[],[]);return}if(h.length){let F=yield this._api.getExternalIdsByOkIds(h);R.push(...F)}let v=yield this._api.getExternalIdsByOkIds(u),A=yield this._api.getExternalIdsByOkIds(m);I.onChatRoomUpdated(e,t,R,v,A)})}_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 n;if(!e)return;let i=(n=this._conversation)==null?void 0:n.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(n=>this._isMe(E.composeId(n)));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 n,s,l,u,m,h,R,v,A,F;let t=(s=e==null?void 0:e.conversation.asrInfo)!=null?s:(n=this._conversation)==null?void 0:n.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=(A=(v=(h=e==null?void 0:e.rooms)==null?void 0:h.roomId)!=null?v:(R=this._conversation)==null?void 0:R.roomId)!=null?A:null,a=(F=this._conversation)==null?void 0:F.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 n=yield this._getExternalIdByParticipantId(a.initiatorId);n&&I.onRemoteSharedUrl(n,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:n,roomId:s=null}=e,l={initiatorId:i,movieId:a,source:n};if(this._isMe(i))I.onLocalSharedMovieStoppedInfo(t,l,s);else{let h=yield this._getExternalIdByParticipantId(i);if(h){let R=this._participants[i];R!=null&&R.movieShareInfos&&(R.movieShareInfos=R.movieShareInfos.filter(v=>v&&v.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:n,roomId:s=null}=e;if(n?t.set(s,{sharedUrl:n,initiatorId:a}):t.delete(s),!(!n&&s!==i&&t.has(i))&&(!n||!this._isMe(a))){let l=yield this._getExternalIdByParticipantId(a);l&&I.onRemoteSharedUrl(l,n,s)}})}_onFeaturesPerRoleChanged(e){d.log(`Features per role changed: ${e.notification}`),I.onFeaturesPerRoleChanged(e.featuresPerRole)}_waitForStreamIfNeeded(e){var h,R,v;let t=this._matchStreamDescription(e.participantStreamDescription);if(!t)return;let{mediaType:i,participantId:a}=t;if(i==="ANIMOJI")return;let n=this._participants[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=Je(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}`),T.log(C.PAT_OUTDATED_RESPONSE);return}n&&e.suspend!==void 0&&i&&(d.debug(`participant-sources-update: mediaType=${i}, suspend=${e.suspend}`),I.onRemoteStreamSuspended(n.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 A=(h=this._conversation)==null?void 0:h.externalId,F=this._isMe(a);if(!n&&!F){T.log(C.PAT_ERROR,"participantMissing"),d.error(`Could not find participant by ID: ${a}`);return}let O=F?A:n.externalId,q=this._streamByStreamId.get(u);if(!q){T.log(C.PAT_ERROR,"streamNotFound"),d.error(`Could not find stream by ID: ${u}`);return}T.log(C.PAT_ALLOCATED),this._streamIdByStreamDescription.set(s,u);let X=(R=e.participantStreamDescription)==null?void 0:R.mediaType;if(X==="STREAM"||X==="MOVIE"){if((v=e.participantStreamDescription)!=null&&v.streamName){let pe={streamName:e.participantStreamDescription.streamName,stream:q,mediaType:X};F?I.onLocalLive(O,pe):I.onRemoteLive(O,pe)}}else if(p.producerScreenTrack&&X==="SCREEN")I.onRemoteScreenStream(n.externalId,q);else if(!F){let pe=(p.producerScreenTrack?null:n.secondStream)||q;I.onRemoteStream(n.externalId,pe)}}else{d.debug(`Waiting for ${m} until stream ${u} for ${s} is switched`);let A=window.setTimeout(this._waitForStreamIfNeeded.bind(this,e),m);this._streamWaitTimerByStreamDescription.set(s,A)}}_matchStreamDescription(e){if(!e)return null;if(this._streamIdByStreamDescription.has(Je(e)))return e;let t=e.participantId;if(e.mediaType){let i={participantId:t,mediaType:null};if(this._streamIdByStreamDescription.has(Je(i)))return i}else{let i={participantId:t,mediaType:"CAMERA"};if(this._streamIdByStreamDescription.has(Je(i)))return i;let a={participantId:t,mediaType:"SCREEN"};if(this._streamIdByStreamDescription.has(Je(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,[pt.ADMIN,pt.CREATOR]):!1}_checkAdminRole(){if(this._conversation&&!E.includesOneOf(this._conversation.roles,[pt.ADMIN,pt.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,n){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=Ya(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=sn(e),a)){let m=this._api.getDecorativeIdByInitialId(a.id);a.id=m?E.composeUserId(m):a.id}let n=yield this._signaling.getWaitingHall(a,t,i);if(n.error)return Promise.reject(n.message);let s=n.participants||[],{externalIds:l}=yield this._resolveWaitingHallExternalIds(s),u=null;return s.length&&n.hasMore&&(u=on(s[s.length-1].id)),{participants:l,pageMarker:u,totalCount:n.totalCount||0}})}_resolveWaitingHallExternalIds(e){return c(this,null,function*(){let t=new Map,i=[],a=[];if(e.length){let n=[];e.forEach(s=>{if(t.set(s.id.id,s.id.addedTs),s.externalId){let l=Y.fromSignaling(s.externalId);i.push(s.id.addedTs),a.push(l),this._api.cacheExternalId(s.id.id,l)}else n.push(E.decomposeId(s.id.id).id)}),n.length&&!a.length&&(a=yield this._api.getExternalIdsByOkIds(n),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,[Jt.WAITING_HALL,Jt.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(a){return c(this,arguments,function*({movieId:e,gain:t,metadata:i}){let n={movieId:e};(t||t===0)&&(n.gain=t),i&&(n.metadata=i);let s=yield this._signaling.addMovie(n);if(s.error)throw new Error(s.error);return{movieId:s.movieId,streamType:s.streamType}})}updateMovie(e){return 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",n=null,s=null){let l={movieId:i,name:t,privacy:a,groupId:n,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(n,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}){var a;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}return 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}`:"")),(a=this._mediaSource)==null?void 0:a.setResolution({video:e,effect:t})})}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,n=(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:Y.fromSignalingParticipant(l),mediaSettings:ve(l.mediaSettings),participantState:E.mapParticipantState(l),state:l.state,roles:l.roles||[],status:(m=this._getStatusByTransportState(n))!=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 s;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=i.participants.filter(l=>{let u=E.composeId(l);return!this._participants[u]});yield this._registerParticipants(a);let n=(s=this._transport)==null?void 0:s.getState();return i.participants.forEach(l=>{var h,R;let u=E.composeId(l),m=this._participants[u];m.status=(h=this._getStatusByTransportState(n))!=null?h:"WAITING",m.movieShareInfos=l.movieShareInfos,Object.assign(m.mediaSettings,ve(l.mediaSettings)),Object.assign(m.muteStates,l.muteStates),m.unmuteOptions=(R=l.unmuteOptions)!=null?R:m.unmuteOptions,this._openTransport([m],!0)}),this._participantListChunkToExternalChunk(i)})}_getInitialParticiapntListChunk(){return c(this,null,function*(){let e=p.participantListChunkInitIndex,t=p.participantListChunkInitCount,i="GRID",a=yield this._signaling.getParticipantListChunk({listType:i,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 Yt(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){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 n=this._participants[e];if(!n){this._warnParticipantNotInConversation(e);return}n.mediaSettings=t,this._state==="ACTIVE"&&I.onRemoteMediaSettings(n.externalId,t,n.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){d.debug(`Remote participant state changed [${e}]`,t);let i=this._participants[e];if(!i){this._warnParticipantNotInConversation(e);return}i.participantState=t||{},this._state==="ACTIVE"&&I.onRemoteParticipantState(i.externalId,i.participantState,i.markers)}_changeMultipleParticipantState(e,t){d.debug("Multiple participants state changed",e);let i=[],a;e.forEach((n,s)=>{if(this._isMe(s))a=n;else{let l=this._participants[s];if(!l){this._warnParticipantNotInConversation(s);return}l.participantState=n,i.push({externalId:l.externalId,participantState:ue({},n),markers:l.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 U.ACCEPTED_CALL:return this._onAcceptedCall(e);case U.HUNGUP:return this._onHungup(e);case U.PARTICIPANT_ADDED:return this._onAddedParticipant(e);case U.PARTICIPANT_JOINED:return this._onJoinedParticipant(e);case U.CLOSED_CONVERSATION:return this._onClosedConversation(e);case U.MEDIA_SETTINGS_CHANGED:return this._onMediaSettingsChanged(e);case U.PARTICIPANT_STATE_CHANGED:return this._onParticipantStateChanged(e);case U.PARTICIPANTS_STATE_CHANGED:return this._onParticipantsStateChanged(e);case U.RATE_CALL_DATA:return this._onNeedRate();case U.FEATURE_SET_CHANGED:return this._onFeatureSetChanged(e);case U.MULTIPARTY_CHAT_CREATED:return this._onMultipartyChatCreated(e);case U.FORCE_MEDIA_SETTINGS_CHANGE:return this._onForceMediaSettingsChange(e);case U.SETTINGS_UPDATE:return this._onSettingsUpdate(e);case U.VIDEO_QUALITY_UPDATE:return this._onVideoQualityUpdate(e);case U.REGISTERED_PEER:return this._onPeerRegistered(e);case U.SWITCH_MICRO:return this._onMicSwitched(e);case U.CHAT_MESSAGE:return this._onChatMessage(e);case U.CUSTOM_DATA:return this._onCustomData(e);case U.RECORD_STARTED:return this._onRecordInfo(e.recordInfo,e.roomId);case U.RECORD_STOPPED:return this._onRecordInfo(null,e.roomId);case U.ROLES_CHANGED:return this._onRolesChanged(e.participantId,e.roles||[]);case U.MUTE_PARTICIPANT:return this._onMuteParticipant(e);case U.PIN_PARTICIPANT:return this._onPinParticipant(e.participantId,e.unpin,e.markers,e.roomId);case U.OPTIONS_CHANGED:return this._onOptionsChanged(e.options||[]);case U.PARTICIPANT_SOURCES_UPDATE:return this._onParticipantSourcesUpdate(e);case U.PROMOTE_PARTICIPANT:return this._onParticipantPromoted(e);case U.CHAT_ROOM_UPDATED:return this._onChatRoomUpdated(e.eventType,e.totalCount,e.firstParticipants,e.addedParticipantIds,e.removedParticipantIds);case U.JOIN_LINK_CHANGED:return this._onJoinLinkChanged(e);case U.FEEDBACK:return this._onFeedback(e);case U.MOVIE_UPDATE_NOTIFICATION:return this._onSharedMovieUpdate(e);case U.MOVIE_SHARE_STARTED:return this._onSharedMovieInfoStarted(e);case U.MOVIE_SHARE_STOPPED:return this._onSharedMovieInfoStopped(e);case U.URL_SHARING_INFO_UPDATED:return this._onUrlSharingInfoUpdated(e);case U.ROOMS_UPDATED:return this._onRoomsUpdated(e);case U.ROOM_UPDATED:return this._onRoomUpdated(e);case U.ROOM_PARTICIPANTS_UPDATED:return this._onRoomParticipantsUpdated(e);case U.FEATURES_PER_ROLE_CHANGED:return this._onFeaturesPerRoleChanged(e);case U.PARTICIPANT_ANIMOJI_CHANGED:return this._onParticipantAnimojiChanged(e);case U.ASR_STARTED:return this._onAsrStart(e);case U.ASR_STOPPED:return this._onAsrStop(e);case U.PROMOTION_APPROVED:return this._onPromotionApproved(e);case U.DECORATIVE_PARTICIPANT_ID_CHANGED:return this._onDecorativeParticipantIdChanged(e);case U.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 n,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(this._participants),u=[];for(let m of e.conversation.participants){let h=E.composeId(m),R=m.roles||[];if(this._isMe(h)){gi(this._conversation.roles,R)||this._onRolesChanged(h,R),t=()=>{this._registerParticipantLocalMuteState({muteStates:ln(m),unmuteOptions:m.unmuteOptions})};continue}u.push(h);let v=this._participants[h];if(!v)yield this._onJoinedParticipant({participantId:m.id,participant:m,mediaSettings:m.mediaSettings});else{let A=ve(m.mediaSettings);Ra(A,v.mediaSettings)||this._changeRemoteMediaSettings(h,A);let F=E.mapParticipantState(m),O=v.participantState;E.isEqualParticipantState(F,O)||this._changeRemoteParticipantState(h,F),gi(R,v.roles)||this._onRolesChanged(v.id,R)}}for(let m of l)u.indexOf(m)<0&&this._removeParticipant(this._participants[m],B.HUNGUP)}let i=(s=(n=e.rooms)==null?void 0:n.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 H(B.MISSED),"Call accepted on other device");return}let a=this._participants[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:ve(e.mediaSettings)},u))}a.state=Z.ACCEPTED,a.mediaSettings=ve(e.mediaSettings),this._logWithMediaSettings(C.ACCEPTED_OUTGOING,a.mediaSettings),this._conversation&&this._conversation.direction===lt.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 n=Object.keys(a.muteStates);n.length&&this._onMuteParticipant({muteStates:a.muteStates,mediaOptions:n,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 H(e.reason,{remote:!0}));return}yield this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers);let i=this._participants[t];if(!i){this._warnParticipantNotInConversation(t);return}this._transport&&this._transport.close(t),i.state=e.reason===B.REJECTED?Z.REJECTED:Z.HUNGUP,this._state!=="CLOSE"&&this._removeParticipant(i,B.HUNGUP)})}_onAddedParticipant(e){return c(this,null,function*(){var a,n;d.debug(`Participant added [${e.participantId}]`);let t=E.composeMessageId(e),i=this._participants[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,u=yield this._createParticipant({id:t,externalId:Y.fromSignalingParticipant(s),mediaSettings:ve(s.mediaSettings),state:s.state,participantState:E.mapParticipantState(s),roles:s.roles||[],muteStates:s.muteStates||{},unmuteOptions:s.unmuteOptions||[],observedIds:s.observedIds||[]},l);i=this._registerParticipantInCache(u)}i.state=Z.CALLED,i.mediaSettings=ve((a=e.participant)==null?void 0:a.mediaSettings),i.participantState=E.mapParticipantState(e.participant),i.roles=((n=e.participant)==null?void 0:n.roles)||[],this._setParticipantsStatus([i],"WAITING"),this._state!=="IDLE"&&this._transport&&this._transport.allocate(i.id,!0),I.onParticipantAdded(i.externalId,i.markers),this._changeRemoteMediaSettings(t,i.mediaSettings),this._changeRemoteParticipantState(t,i.participantState),this._invokeRolesChangedCallbackIfNeeded(i)})}_onJoinedParticipant(e){return c(this,null,function*(){var n,s,l;d.debug(`Participant joined [${e.participantId}]`),this._statFirstMediaReceived.markParticipantJoined((n=this._transport)==null?void 0:n.getTopology());let t=E.composeMessageId(e),i=this._participants[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,h=yield this._createParticipant({id:t,externalId:Y.fromSignalingParticipant(u),mediaSettings:ve(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=this._registerParticipantInCache(h)}this._conversation&&this._conversation.direction===lt.OUTGOING&&(this._state==="IDLE"||this._state==="PROCESSING")&&(this._state="ACTIVE",this._changeFeatureSet()),i.state=Z.ACCEPTED,i.mediaSettings=ve(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),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}),yield this._processSharedMovieInfos(i.movieShareInfos)})}_onClosedConversation(e){this._toggleJoinAvailability(),this._close(new H(e.reason,{remote:!0}))}_onMediaSettingsChanged(e){return c(this,null,function*(){let t=E.composeMessageId(e);yield this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers),this._changeRemoteMediaSettings(t,ve(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),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 n=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&&n.set(u,m)}),this._changeMultipleParticipantState(n,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=ve(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=Wr(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=Wr(this._serverSettings,a),this._transport&&this._transport.updateSettings(this._serverSettings)}_onPeerRegistered(e){let t=E.composeMessageId(e);this._participants[t]&&(this._participants[t].clientType=e.clientType,this._participants[t].platform=e.platform),I.onPeerRegistered()}_onMicSwitched(e){return c(this,null,function*(){I.onDeviceSwitched(de.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),n=!1;if(!a!=!e?n=!0:a&&e&&(n=a.recordMovieId!==e.recordMovieId||a.recordStartTime!==e.recordStartTime),n)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){if(this._conversation&&this._isMe(e)&&!gi(this._conversation.roles,t)){d.debug(`Local roles changed: ${t}`),this._conversation.roles=t,I.onLocalRolesChanged(t),this._processMuteState({mediaOptions:ir(this._getMuteStatesForCurrentRoom(),Ue.MUTE_PERMANENT),stateUpdated:!0}),E.includesOneOf(t,[pt.ADMIN,pt.CREATOR])?this._refreshRooms(!0):t.length||this._onRoomSwitched(null);return}let i=this._participants[e];i&&!gi(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:n=[],mediaOptions:s=[],roomId:l=null}=e,u=e.adminId?this._participants[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=this._participants[e.participantId];h&&(d.debug(`Mute states for participant [${e.participantId}] changed`,a),I.onMuteStates(a,n,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,n,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:n,muteStates:a})})}_changeMuteStatesForRoom(e,t){if(!this._conversation)return;let i=this._getMuteStatesForRoomId(t),a=this._getMuteStatesForRoomId(e),n=Object.keys(i),s=Object.keys(a);this._processMuteState({mediaOptions:Array.from(new Set([...n,...s])),roomId:e,muteAll:!0,stateUpdated:!0})}_processMuteState(e){return c(this,null,function*(){var A;if(!this._conversation||!this._mediaSource||this._participantState!==Z.ACCEPTED)return;let{mediaOptions:t=[],muteAll:i,unmute:a,stateUpdated:n,requestedMedia:s,roomId:l=null,unmuteOptions:u=[]}=e,m=e.adminId?this._participants[e.adminId]:null,h=Object.assign({},(A=e.muteStates)!=null?A:this._getMuteStatesForRoomId(l)),R=this._mediaSource.getMediaSettings(),v=Object.entries(h);for(let[F,O]of v){let q=p.newMuteRules&&this._isCallAdmin()&&i;if(!(O!==Ue.MUTE&&O!==Ue.MUTE_PERMANENT||q)&&(this._isCallAdmin()&&O===Ue.MUTE_PERMANENT&&!i&&(h[F]=Ue.MUTE),!(!t.includes(F)||a)))switch(F){case de.VIDEO:R.isVideoEnabled&&(I.onDeviceSwitched(de.VIDEO,!1),yield this.toggleLocalVideo(!1));break;case de.AUDIO:R.isAudioEnabled&&(I.onDeviceSwitched(de.AUDIO,!1),yield this.toggleLocalAudio(!1));break;case de.SCREEN_SHARING:R.isScreenSharingEnabled&&(I.onDeviceSwitched(de.SCREEN_SHARING,!1),yield this.disableScreenCapturing());break;case de.AUDIO_SHARING:R.isAudioSharingEnabled&&(I.onDeviceSwitched(de.AUDIO_SHARING,!1),yield this.toggleScreenCapturing({captureScreen:R.isScreenSharingEnabled,fastScreenSharing:R.isFastScreenSharingEnabled,captureAudio:!1}));break}}I.onMuteStates(h,u,t,i,a,null,m==null?void 0:m.externalId,n,s,l)})}_onPinParticipant(n){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&&!Ja(this._conversation.options,e)&&(this._conversation.options=e,I.onOptionsChanged(e))}_onNetworkStatus(e){if(this._conversation){let t=[];for(let[i,a]of Object.entries(e)){let n;if(this._isMe(i)||i==="")n=this._conversation.networkRating;else if(this._participants[i])n=this._participants[i].networkRating;else continue;if(n!==a)if(this._isMe(i)||i==="")this._conversation.networkRating=a,I.onLocalNetworkStatusChanged(a);else{let s=this._participants[i];s.networkRating=a,t.push({uid:s.externalId,rating:a})}}if(t.length===0)return;d.log("Received network status update: ",e),I.onNetworkStatusChanged(t)}}_onRemoteStreamSecond(e,t){let i=this._participants[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 n=this._streamIdByStreamDescription.get(a);if(!n||this._streamWaitTimerByStreamDescription.has(a)){d.log("Delaying secondary stream start/stop until main stream becomes available",a);return}let s=this._streamByStreamId.get(n);if(!s){T.log(C.PAT_ERROR,"streamNotFound"),d.error(`Could not find stream by ID: ${n}`);return}I.onRemoteStream(i.externalId,i.secondStream||s)}else{let a=t||i.remoteStream;a&&I.onRemoteStream(i.externalId,a)}}}_onAnimojiStream(e,t){if(this._isMe(e)&&this._mediaSource){I.onVmojiStream(t,this._mediaSource.getMediaSettings());return}let i=this._participants[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(je(ue({},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(jr.ADD_PARTICIPANT);I.onCallState(e,t,this._conversation)}}_changeNeedRate(){this._conversation&&this._conversation.needRate&&I.onRateNeeded()}_onVolumesDetected(e){let t=[];for(let[i,a]of Object.entries(e)){let n=this._participants[i];n&&n.externalId&&t.push({uid:n.externalId,volume:a.real})}I.onVolumesDetected(t)}_onSpeakerChanged(e){this._activeSpeakerId=e,this._participants[e]&&this._lastSignalledActiveSpeakerId!==e&&(I.onSpeakerChanged(this._participants[e].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=e.reduce((n,s)=>{if(s in this._participants){let l=this._participants[s];n.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 n},[]);a.length&&this._setParticipantsStatus(a,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(B.FAILED)),this._close(new H(B.FAILED),"Transport failed"))})}_onRemoteTrackAdded(e,t,i){return c(this,null,function*(){if(e.endsWith(We.AUDIO_MIX))d.debug("Remote audio mix track added"),this._audioOutput.add(i),I.onRemoteMixedAudioStream(t);else if(e.startsWith(We.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=this._participants[e];if(!a){let n=this._api.getDecorativeIdByInitialId(e),s=n?E.composeUserId(n):void 0;d.warn(`Conversation: track added before participant [id: ${e}, decorativeId: ${s}]`),a=this._registerParticipantInCache(yield this._createParticipant({id:e},s)),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){if(e!==We.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,d.debug("Audio mix stalled:",e),I.onLocalStatus(e?"RECONNECT":"CONNECTED"))}_onRemoteSignalledStall(e){let t={},i=[],a=[];d.debug("Participants stalled:",e);for(let n of e){if(t[n]=!0,!this._lastStalled[n]){let s=this._participants[n];s&&i.push(s)}delete this._lastStalled[n]}for(let n of Object.keys(this._lastStalled)){let s=this._participants[n];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){var t;!k.hasMicrophone()||!this._audioFix||!((t=this._mediaSource)!=null&&t.getMediaSettings().isAudioEnabled)||this._audioFix.fix(e)}_fixVideoDevice(e){var t;!k.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=this._participants[e];t&&t.lastRequestedLayouts&&Object.keys(t.lastRequestedLayouts).length&&(yield this.updateDisplayLayout(Object.values(t.lastRequestedLayouts)))})}_setParticipantsStatus(e,t,i=null){if(!e.length)return;let a=e.reduce((n,s)=>(s.status!==t&&(s.status=t,n.push(s.externalId)),n),[]);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(_i)){let n=e.updates[a];n&&(t[a]={rooms:yield Promise.all(((i=n==null?void 0:n.rooms)==null?void 0:i.map(this._convertRoomToExternal.bind(this)))||[]),roomIds:n==null?void 0:n.roomIds,deactivated:n==null?void 0:n.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(n=>n===_i.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(R=>this._getExternalIdByParticipantId(R)))||[]),i=yield Promise.all(((l=e.addParticipantIds)==null?void 0:l.map(R=>this._getExternalIdByParticipantId(R)))||[]),a=yield Promise.all(((m=(u=e.removeParticipantIds)==null?void 0:u.map)==null?void 0:m.call(u,R=>this._getExternalIdByParticipantId(R)))||[]),n=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?this._participantListChunkToExternalChunk(e.participants):void 0,active:e.active,muteStates:e.muteStates,pinnedParticipantId:n,countdownSec:e.countdownSec,timeoutMs:e.timeoutMs}})}_onRoomParticipantsUpdated(e){return c(this,null,function*(){var v,A,F,O,q,X,pe,ie;let t=(v=this._transport)==null?void 0:v.getState(),i=(A=e.roomId)!=null?A:null,a=((F=e.addedParticipantIds)==null?void 0:F.map(z=>E.decomposeId(z).id))||[],n=yield this._api.getExternalIdsByOkIds(a),s=e.addedParticipants;if(n.length&&(s==null?void 0:s.length)!==n.length&&!this._isCalledState()){let z=this._convertExternalIdsToServerExternalIds(n);s=(yield this._signaling.getParticipants(z)).participants}let l=yield Promise.all((s==null?void 0:s.map(z=>c(this,null,function*(){var Oe;let _e=E.composeId(z);return this._createParticipant({id:_e,externalId:Y.fromSignalingParticipant(z),mediaSettings:ve(z.mediaSettings),participantState:E.mapParticipantState(z),state:z.state,roles:z.roles||[],status:(Oe=this._getStatusByTransportState(t))!=null?Oe:"WAITING",muteStates:z.muteStates||{},unmuteOptions:z.unmuteOptions||[],observedIds:z.observedIds||[],markers:this._denormalizeMarkers(_e,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);((q=this._transport)==null?void 0:q.getState())==="IDLE"&&!this._isCalledState()&&this._openTransport(l,!0);let m=[],h=[];if(e!=null&&e.removedParticipantMarkers){for(let z of e.removedParticipantMarkers)if((X=z.GRID)!=null&&X.id){let _e=this._getExternalIdByParticipantId(z.GRID.id);h.push(_e)}m=yield Promise.all(h)}if(u&&(yield this._onRoomSwitched(i)),m){let z=(pe=this._conversation)==null?void 0:pe.pinnedParticipantIdByRoom.get(i);if(z){let _e=yield this._getExternalIdByParticipantId(z);if(_e){for(let Oe of m)if(Y.compare(_e,Oe)){(ie=this._conversation)==null||ie.pinnedParticipantIdByRoom.delete(i);break}}}}let R={roomId:i,participantCount:e.participantCount,addedParticipantIds:n,addedParticipants:E.mapSharedParticipants(l),removedParticipantMarkers:e==null?void 0:e.removedParticipantMarkers,removedParticipantIds:m};this._isCalledState()||I.onRoomParticipantsUpdated(R)})}_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 n,s,l,u,m,h,R,v,A,F,O,q;let t;this._isCalledState()||(t=yield this._signaling.getRooms(e));let i=(s=(n=t==null?void 0:t.rooms)==null?void 0:n.rooms)!=null?s:[],a=[];for(let X of i){let pe=(l=X.id)!=null?l:null;if(this._setMuteStatesForRoomId(X.muteStates,pe),(m=this._conversation)==null||m.recordsInfoByRoom.set(pe,(u=X.recordInfo)!=null?u:null),(R=this._conversation)==null||R.pinnedParticipantIdByRoom.set(pe,(h=X.pinnedParticipantId)!=null?h:null),X.asrInfo&&((v=this._conversation)==null||v.asrInfoByRoom.set(pe,X.asrInfo)),X.urlSharingInfo?(A=this._conversation)==null||A.urlSharingInfoByRoom.set(pe,X.urlSharingInfo):(F=this._conversation)==null||F.urlSharingInfoByRoom.delete(pe),e){yield this._registerParticipants(((q=(O=X==null?void 0:X.participants)==null?void 0:O.participants)==null?void 0:q.filter(z=>!this._participants[E.composeId(z)]))||[],!0);let ie=yield this._convertRoomToExternal(X);ie&&a.push(ie)}}a.length&&!this._isCalledState()&&I.onRoomsUpdated({[_i.UPDATE]:{rooms:a}})})}_onFeedback(e){return c(this,null,function*(){let t=[];for(let i of e.feedback){let a=je(ue({},i),{items:[]});for(let n of i.items){let s=yield this._getExternalIdByParticipantId(n.participantId);s?a.items.push(je(ue({},n),{participantId:s})):this._warnParticipantNotInConversation(n.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,n=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=Y.fromSignaling(a,s.deviceIdx);I.onParticipantIdChanged(s,l),this._api.cacheExternalId(i,l),this._api.mapDecorativeId(i,t),n?this._conversation.externalId=l:this._participants[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)}},N=Q;N._delayedHangup=!1;var Ci=class extends Error{constructor(e,t){super(e);Object.setPrototypeOf(this,Ci.prototype),this.participantErrors=t}};var Ot=null,Xt=null;function vn(){Ot=null,Xt=null}function lr(o=null,r){return c(this,null,function*(){var t;let e=o!=null?o:p.apiBaseUrl;if(e)return e;if((r!=null?r:p.apiEnv)!=="AUTO")return p.apiEndpoint(r);try{let i=atob("aHR0cHM6Ly9kbnMuZ29vZ2xlL3Jlc29sdmU/bmFtZT12aWRlby5fZW5kcG9pbnQub2sucnUmdHlwZT1UWFQ="),n=yield(yield fetch(i,{method:"GET",mode:"cors",cache:"no-cache"})).json(),s=(t=n==null?void 0:n.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 In(){return c(this,null,function*(){return Ot||Xt||(Xt=lr(),Ot=yield Xt,Xt=null,Ot)})}function Zt(t){return c(this,arguments,function*(o,r={},e=!1){if(!window.Blob||!window.navigator.sendBeacon)return;yield In();let i=Rn(o,r,e),a=new window.Blob([i],{type:"application/x-www-form-urlencoded"});window.navigator.sendBeacon(`${Ot}/fb.do`,a)})}function Pi(i){return c(this,arguments,function*(o,r={},e=!1,t){yield In();let a=Rn(o,r,e);return cs(a,t)})}function cs(o,r){return c(this,null,function*(){return new Promise((e,t)=>{let i=new XMLHttpRequest;i.open("POST",`${r!=null?r:Ot}/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(n){a={result:i.responseText}}i.status!==200||a.hasOwnProperty("error_msg")?t(a):e(a)},i.send(o)})})}function En(o,r){return c(this,null,function*(){try{let e=yield fetch(o,{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 Rn(o,r={},e=!1){r.method=o,r.format="JSON",r.application_key||(r.application_key=p.apiKey),e||(me.sessionKey?r.session_key=me.sessionKey:me.accessToken&&(r.access_token=me.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{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 ls=10,ps=700,us=3e3,bi=class extends yi{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 n=s=>c(this,null,function*(){try{return yield Pi(e,t,i)}catch(l){if(!l.hasOwnProperty("error_msg")&&(s++,d.debug(`${e} network error, attempt ${s}...`),s<ls))return yield E.delay(Math.min(s*ps,us)),n(s);throw d.warn(e,"error",l),l}});return n(0)})}_call(a){return c(this,arguments,function*(e,t={},i=!1){try{return yield this._callUnsafe(e,t,i)}catch(n){d.warn("Api call error",n);let s=oe.API;switch(n.error_code){case 102:case 103:case 104:return yield this.authorize(),this._callUnsafe(e,t,i)}let l={message:n.error_msg,code:n.error_code};switch(n.custom_error&&(l.custom_error=n.custom_error),n.error_code){case 1101:s=B.SERVICE_DISABLED;break;case 300:s=B.NOT_FOUND;break;case 1102:s=B.CALLEE_IS_OFFLINE;break;case 1103:s=B.NOT_FRIENDS;break;case 1104:case 1106:s=B.EXTERNAL_API_ERROR;break;case 1113:s=B.CALLER_IS_REJECTED;break;case 1114:s=B.VCHAT_DETAILED_ERROR;break}throw new H(s,l)}})}userId(e){return c(this,null,function*(){let t=E.extractOkId(e);if(me.isEmpty())return Y.fromId(String(t));this._externalUidsCache.has(t)||(yield this._getExternalIdsByOkIds([t]));let i=this.getDecorativeIdByInitialId(t);return i&&(t=i),Y.fromString(this._externalUidsCache.get(t))})}authorize(){return c(this,null,function*(){if(this._ensureUuid(),!p.apiKey)throw new H(oe.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)),me.sessionKey=t.session_key,me.sessionSecretKey=t.session_secret_key}).catch(t=>{throw t.error_code===401&&I.onTokenExpired(),new H(oe.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})};Zt("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)};Zt("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)};Zt("vchat.clientEvents",i)}uploadDebugLogs(e,t,i,a){return c(this,null,function*(){let n={conversationId:e,webrtcPlatform:p.platform,startTime:t,endTime:i},s=yield this._callUnsafe("vchat.getLogUploadUrl",n),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()),En(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:n,audioOnly:s}={},l){let m=this._preareStartConversationData({conversationId:e,isVideo:!1,joiningAllowed:!0,payload:t,requireAuthToJoin:i,onlyAdminCanShareMovie:a,audienceMode:n,audioOnly:s,speakerIds:l});return this._startConversation(m)})}startConversation(m,h,R){return c(this,arguments,function*(e,t,i,a=!1,n="",s=!1,l=!1,{onlyAdminCanShareMovie:u}={}){let v=this._preareStartConversationData({conversationId:e,isVideo:a,joiningAllowed:s,payload:n,requireAuthToJoin:l,onlyAdminCanShareMovie:u});if(t&&t.length)switch(i){case it.USER:v.uids=t.join(",");break;case it.GROUP:v.gid=t[0];break;case it.CHAT:v.chatId=t[0];break}return this._startConversation(v)})}_ensureUuid(){if(!this._uuid){let e=st.get("uuid");e||(e=E.uuid(),st.set("uuid",e)),this._uuid=String(e)}}_preareStartConversationData({conversationId:e,isVideo:t,payload:i="",joiningAllowed:a=!1,requireAuthToJoin:n=!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),n&&(h.requireAuthToJoin=!0),s!==void 0&&(h.onlyAdminCanShareMovie=s),l&&(h.audienceMode=l),u&&(h.audioOnly=u),m.length){let R=m.map(v=>E.composeUserId(v));h.speakerIds=R.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 n={joinLink:e,isVideo:t,protocolVersion:p.protocolVersion};return i!=null&&i.length&&(n.observedIds=i.join(",")),p.anonymToken&&(n.anonymToken=p.anonymToken),a&&(n.payload=a),this._call("vchat.joinConversationByLink",n)})}getOkIdsByExternalIds(e){return c(this,null,function*(){let t=[],i=[],a=new Map,n=Array.from(this._externalUidsCache.keys()),s=Array.from(this._externalUidsCache.values());for(let u of e){let m=Y.toString(u),h=s.indexOf(m);h>-1?t.push(this.replaceByInitialIdIdIfExists(n[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),R=String(u.external_user_id.id);a.has(R)&&(this.cacheExternalId(h,Y.fromString(a.get(R))),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 n of e){let s=Y.toString(n),l=a.indexOf(s);if(l>-1){let u=E.composeParticipantId(this.replaceByInitialIdIdIfExists(i[l]),se.USER,n.deviceIdx);t.set(n,u)}}return t})}getExternalIdsByOkIds(e){return c(this,null,function*(){let t=[],i=[];for(let n of e)if(this._externalUidsCache.has(n)){let s=this.getDecorativeIdByInitialId(n),l=this._externalUidsCache.get(s!=null?s:n);t.push(Y.fromString(l))}else i.push(n);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=Y.toString(e),n=i.indexOf(a);return n>-1?E.composeParticipantId(this.replaceByInitialIdIdIfExists(t[n]),se.USER,e.deviceIdx):n>-1?E.composeParticipantId(t[n],se.USER,e.deviceIdx):null}cacheExternalId(e,t){let i=E.extractOkId(e);this._externalUidsCache.set(i,Y.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:B.HUNGUP};p.anonymToken&&(t.anonymToken=p.anonymToken),Zt("vchat.hangupConversation",t)}sendUserFeedbackStats(e,t,i,a){let n={collector:"app.vchat.events.product",data:JSON.stringify({application:`${p.appName}:${p.sdkVersion}`,platform:p.platform,items:[{type:1,operation:C.USER_FEEDBACK_RECEIVED,timestamp:Date.now(),custom:{vcid:e,user_response:t,reason:i,group_call_users_count:a}}]})};Zt("log.externalLog",n)}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=(n,s)=>{for(let[l,u]of Object.entries(n)){let m=Number(l),h=Y.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 n of e){let s=Number(n);if(!t.has(s)){let l=Y.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 Tn=(e=>(e.KING="KING",e.PAWN="PAWN",e))(Tn||{}),ms=Tn;var Kr=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 qr=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 lr(this._baseApiUrl,this._apiEnv),t=yield Pi("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:B.HUNGUP,application_key:this._apiKey,session_key:this._sessionKey},t=yield lr(this._baseApiUrl,this._apiEnv);yield Pi("vchat.hangupConversation",e,!0,t)})}};var ae,Mi=null,vS={getCameras:k.getCameras,getMicrophones:k.getMicrophones,getOutput:k.getOutput,getVideoFacingMode:k.getVideoFacingMode,hasCamera:k.hasCamera,hasMicrophone:k.hasMicrophone,getSavedCamera:k.getSavedCamera,getSavedMicrophone:k.getSavedMicrophone,getSavedOutput:k.getSavedOutput,hasCameraPermission:k.hasCameraPermission,hasMicrophonePermission:k.hasMicrophonePermission,hasPermissions:k.hasPermissions,getUserMedia:k.getUserMedia,getUserVideo:k.getUserVideo,getUserAudio:k.getUserAudio,setResolution:k.setResolution,isBrowserSupported:k.isBrowserSupported,isScreenCapturingSupported:k.isScreenCapturingSupported,os:k.os,isMobile:k.isMobile,browserName:k.browserName,browserVersion:k.browserVersion,baseChromeVersion:k.baseChromeVersion,getAudioContext:k.getAudioContext,isAudioShareSupported:k.isAudioShareSupported},IS={participantMarkerCompare:E.participantMarkerCompare};function ES(o){Mi=o}function RS(o){p.videoEffects=o}function TS(o){p.audioEffects=o}function CS(o,r=null,e={},t=1){p.vmoji=o,p.vmojiOptions={protocolVersion:t,renderingOptions:e},r&&o.setSDK(r)}function PS(o){return c(this,null,function*(){if(p.set(o),ae||(ae=new bi),Cn.disableLog(!p.debug),d.toggle(p.debug),d.log(`Calls SDK ${p.sdkVersion}`,o),yield k.init(),!k.isBrowserSupported())throw new H(oe.UNSUPPORTED);d.log("UserAgent:",navigator.userAgent),d.log("Screen resolution:",`${window.screen.width}x${window.screen.height}`),d.log("Permissions:",`Camera: ${k.hasCameraPermission()}, Mic: ${k.hasMicrophonePermission()}`)})}function yS(n){return c(this,arguments,function*(o,r=[de.AUDIO],e="",t=!1,i=!1,a){let s=[],l=[];if(Array.isArray(o)?s=o.length?o:[]:o&&(s=[o]),s.length&&(l=yield ae.getOkIdsByExternalIds(s),!l.length))throw new H(B.CALLEE_IS_OFFLINE);return hs(l,it.USER,r,e,t,i,a)})}function hs(s){return c(this,arguments,function*(o,r=it.USER,e,t="",i=!1,a=!1,n){if(N.current())throw d.error("There is already active call"),new H(B.FAILED);return new N(ae,Mi).onStart(o,r,e,t,i,a,n)})}function bS(o){return c(this,null,function*(){return _s(o)})}function _s(t){return c(this,arguments,function*(o,r=se.USER,e){if(o===N.id())throw new Error("Push has already been processed");return new N(ae,Mi).onPush(o,r,e)})}function MS(o,r){return c(this,null,function*(){return o&&(p.authToken=o),r!==void 0&&p.apiBaseUrl!==r&&(p.apiBaseUrl=r,vn()),ae.authorize()})}function AS(){return c(this,arguments,function*(o=[de.AUDIO]){return Ke().accept(o)})}function DS(){return c(this,null,function*(){let o=N.current();if(o)return o.decline()})}function kS(e){return c(this,arguments,function*(o,r=[de.AUDIO]){return gs(o,r)})}function gs(o,r,e){return c(this,null,function*(){if(N.current())throw d.error("There is already active call"),new H(B.FAILED);return new N(ae,Mi).onJoin({conversationId:o,mediaOptions:r,chatId:e})})}function wS(a){return c(this,arguments,function*(o,r=[de.AUDIO],e,t,i){if(N.current())throw d.error("There is already active call"),new H(B.FAILED);return e&&(p.anonymToken=e),new N(ae,Mi).onJoin({joinLink:o,mediaOptions:r,observedIds:t,payload:i})})}function OS(){return c(this,null,function*(){let o=N.current();if(o)return o.hangup();N.hangupAfterInit()})}function xS(o,r){return c(this,null,function*(){Array.isArray(o)||(o=[o]);let e=yield ae.getOkIdsByExternalIds(o);if(!e.length)throw new Error("User not found");return fs(e,r)})}function fs(o,r){return c(this,null,function*(){let e=N.current();if(e){let t=o.map(i=>E.composeUserId(i));yield e.addParticipant(t,r)}})}function LS(o,r=!1){return c(this,null,function*(){let e=yield ae.getOkIdsByExternalIds([o]);return Ss(e[0],r)})}function Ss(o,r=!1){return c(this,null,function*(){let e=N.current();if(e)try{yield e.removeParticipant(E.composeUserId(o),r)}catch(t){d.warn(`Failed to remove participant ${o}. Perhaps he is no longer on the call. ${t}`)}})}function NS(o,r){return c(this,null,function*(){let e=N.current();if(o==="videoinput"&&Ct.contains(r))return p.videoFacingMode=r,e?(k.isMobile()&&e.stopVideoTrack(),e.changeDevice(o)):void 0;if(!(yield k._saveDeviceId(o,r)))throw new Error(`Device not found: ${r}`);if(e)return e.changeDevice(o)})}function US(o){return c(this,null,function*(){let r=typeof o=="object"?je(ue({},o),{fastScreenSharing:o.captureScreen&&o.fastScreenSharing,captureAudio:o.captureScreen&&o.captureAudio&&p.audioShare}):{captureScreen:o,fastScreenSharing:!1,captureAudio:!1},e=N.current();return e?e.toggleScreenCapturing(r):Promise.reject()})}function BS(o){let r=N.current();r&&r.toggleAnimojiCapturing(o)}function VS(o,r=!1){return c(this,null,function*(){let e=N.current();e&&(yield e.setVideoStream(o,r))})}function FS(o){return c(this,null,function*(){let r=N.current();r&&(yield r.toggleLocalVideo(o))})}function jS(o){return c(this,null,function*(){let r=N.current();r&&(yield r.toggleLocalAudio(o))})}function HS(o){return c(this,null,function*(){let r=N.current();if(r)return r.setLocalResolution(o)})}function GS(o){return c(this,null,function*(){let r=N.current();r&&(yield r.changePriorities(o))})}function WS(o,r){return c(this,null,function*(){let e=N.current();if(e){let t;if(r){let[i]=yield ae.getOkIdsByExternalIds([r]);t=E.composeParticipantId(i,se.USER,r.deviceIdx)}yield e.changeParticipantState(o,t)}})}function KS(){return c(this,null,function*(){let o=N.current();o&&(yield o.putHandsDown())})}function qS(o){return c(this,null,function*(){let r=N.current();r&&(yield r.updateDisplayLayout(o))})}function $S(o,r,e=!1){return c(this,null,function*(){let t=yield ae.getOkIdsByExternalIds([o]);return vs(t[0],Y.getDeviceIdx(o),r,e)})}function vs(o,r,e,t=!1){return c(this,null,function*(){let i=N.current();i&&(yield i.grantRoles(E.composeParticipantId(o,se.USER,r),e,t))})}function zS(i){return c(this,arguments,function*({externalId:o=null,muteStates:r,requestedMedia:e=[],roomId:t=null}){let a=null;return o&&(a=(yield ae.getOkIdsByExternalIds([o]))[0]),Is({uid:a,muteStates:r,requestedMedia:e,deviceIdx:Y.getDeviceIdx(o),roomId:t})})}function Is(a){return c(this,arguments,function*({uid:o=null,muteStates:r,requestedMedia:e=[],deviceIdx:t=0,roomId:i=null}){let n=N.current();if(n){let s=o?E.composeParticipantId(o,se.USER,t):null;yield n.muteParticipant(s,r,e,i)}})}function JS(o,r=!1,e=null){return c(this,null,function*(){let t=yield ae.getOkIdsByExternalIds([o]);return Es(t[0],r,Y.getDeviceIdx(o),e)})}function Es(o,r=!1,e=0,t=null){return c(this,null,function*(){let i=N.current();i&&(yield i.pinParticipant(E.composeParticipantId(o,se.USER,e),r,t))})}function YS(o){return c(this,null,function*(){let r=N.current();r&&(yield r.updateMediaModifiers(o))})}function QS(o){return c(this,null,function*(){let r=N.current();r&&(yield r.enableVideoSuspend(o))})}function XS(o){return c(this,null,function*(){let r=N.current();r&&(yield r.enableVideoSuspendSuggest(o))})}function ZS(o){return c(this,null,function*(){let r=N.current();r&&(yield r.changeOptions(o))})}function ev(o,r=null){return c(this,null,function*(){let e=null;return r&&(e=(yield ae.getOkIdsByExternalIds([r]))[0]),Rs(o,e)})}function Rs(o,r=null){return c(this,null,function*(){let e=N.current();if(e){let t=r?E.composeUserId(r):null;yield e.chatMessage(o,t)}})}function tv(o=10){return c(this,null,function*(){let r=N.current();if(r)return r.chatHistory(o)})}function iv(o,r=null){return c(this,null,function*(){let e=null;return r&&(e=(yield ae.getOkIdsByExternalIds([r]))[0]),Ts(o,e,Y.getDeviceIdx(r))})}function Ts(o,r=null,e=0){return c(this,null,function*(){let t=N.current();if(t){let i=r?E.composeParticipantId(r,se.USER,e):null;yield t.customData(o,i)}})}function rv(){return c(this,arguments,function*(o="",r=!1,{onlyAdminCanShareMovie:e=!1}={}){return(yield ae.createConversation(E.uuid(),o,r,{onlyAdminCanShareMovie:e})).join_link})}function av(){return c(this,arguments,function*(o="",r=!1,{onlyAdminCanShareMovie:e=!1,audioOnly:t=!1}={},i){let a=Y.fromIds(i),n=yield ae.getOkIdsByExternalIds(a);return(yield ae.createConversation(E.uuid(),o,r,{onlyAdminCanShareMovie:e,audienceMode:!0,audioOnly:t},n)).join_link})}function nv(){return c(this,null,function*(){let o=N.current();return o?o.createJoinLink():Promise.reject()})}function ov(){return c(this,null,function*(){let o=N.current();return o?o.removeJoinLink():Promise.reject()})}function sv(o,r){return c(this,null,function*(){return ae.getAnonymTokenByLink(o,r)})}function cv(o){let r=N.current();r&&r.setVolume(o)}function dv(o){p.forceRelayPolicy=o}function lv(o=!1,r=null,e=null,t="DIRECT_LINK",i=null,a=null){return c(this,null,function*(){let n=N.current();return n?n.startStream(o,r,e,t,i,a):Promise.reject()})}function pv(o=null){return c(this,null,function*(){let r=N.current();return r?r.stopStream(o):Promise.reject()})}function uv(o=null){return c(this,null,function*(){let r=N.current();return r?r.publishStream(o):Promise.reject()})}function mv(o,r,e=!1,t=null){return c(this,null,function*(){let i=N.current();if(!i)return Promise.reject();let a,n,s=[];if(r!=null&&r.length&&s.push(...r),o&&s.push(o),s.length){let l=yield ae.getParticipantIdsByExternalIds(s);o&&(a=l.get(o),l.delete(o)),n=Array.from(l.values())}return i.recordSetConf(a,n,e,t)})}function hv(){return c(this,null,function*(){let o=N.current();return o?o.getStreamInfo():Promise.reject()})}function _v(o){return c(this,null,function*(){let r=N.current();return r?r.addMovie(o):Promise.reject()})}function gv(o){return c(this,null,function*(){let r=N.current();return r?r.updateMovie(o):Promise.reject()})}function fv(o){return c(this,null,function*(){let r=N.current();return r?r.removeMovie(o):Promise.reject()})}function Sv(o,r){return c(this,null,function*(){let e=N.current();if(e){let t=[];for(let i of o){let a,n;i.addParticipantIds&&(a=(yield ae.getOkIdsByExternalIds(i.addParticipantIds)).map(s=>E.composeUserId(s))),i.removeParticipantIds&&(n=(yield ae.getOkIdsByExternalIds(i.removeParticipantIds)).map(s=>E.composeUserId(s))),t.push({id:i.id,name:i.name,participantCount:i.participantCount,addParticipantIds:a,removeParticipantIds:n,countdownSec:i.countdownSec})}return e.updateRooms(t,r)}return Promise.reject()})}function vv(o,r){return c(this,null,function*(){let e=N.current();return e?e.activateRooms(o,r):Promise.reject()})}function Iv(o=null,r=null){return c(this,null,function*(){let e=N.current();if(!e)return Promise.reject();let t;if(r){let i=yield ae.getOkIdsByExternalIds([r]),a=Y.getDeviceIdx(r);t=E.composeParticipantId(i[0],se.USER,a)}return e.switchRoom(o,t)})}function Ev(o){return c(this,null,function*(){let r=N.current();return r?r.removeRooms(o):Promise.reject()})}function Rv(o){p.statisticsInterval=o;let r=N.current();if(r)return r.updateStatisticsInterval()}function Tv(o){Cn.disableLog(!o),d.toggle(o)}function Cv(o,...r){p.debugLog&&d.send(o,"[external]",...r)}function Pv(){return c(this,null,function*(){let o=Re.conversationId;if(!o)throw d.error("[uploadDebugLogs]","No conversation id found"),new Error("No conversation id found");let r=Re.collectLogs();if(r.length===0)throw d.error("[uploadDebugLogs]","No logs found"),new Error("No logs found");let e=Re.startTime,t=Re.endTime;try{return ae==null?void 0:ae.uploadDebugLogs(o,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 yv(o){return c(this,null,function*(){let r=N.current();if(r)return r.videoEffect(o)})}function bv(o,r){return c(this,null,function*(){let e=N.current();if(e)return e.audioEffect(o.length>0?o:null,r)})}function Mv(o){return c(this,null,function*(){let r=N.current();r&&(yield r.setAudioStream(o))})}function Av(o,r=null,e=null){return c(this,null,function*(){let t=N.current();if(!t)return;let i=e!=null?e:r==null?void 0:r.id,a=null;if(r){let s=(yield ae.getOkIdsByExternalIds([r]))[0];if(!s)throw new Error("Could not get user id to set animoji svg");a=E.composeParticipantId(s,se.USER,Y.getDeviceIdx(r))}t.setAnimojiSvg(o,a,i)})}function Dv(o){let r=N.current();r&&r.setAnimojiFill(o)}function kv(o=null,r,e=!1){return c(this,null,function*(){return Ke().getWaitingHall(o,r,e)})}function wv(){return c(this,null,function*(){return Ke().getAudienceModeHands()})}function Ov(o,r=!1){return c(this,null,function*(){let e=Ke(),t;if(o){let[i]=yield ae.getOkIdsByExternalIds([o]);t=E.composeUserId(i)}return e.promoteParticipant(t,r)})}function xv(o=!1){return c(this,null,function*(){return Ke().requestPromotion(o)})}function Lv(o=!1){return c(this,null,function*(){return Ke().acceptPromotion(o)})}function Nv(o){return c(this,null,function*(){return Ke().getParticipantListChunk(o)})}function Uv(o){return c(this,null,function*(){return Ke().getParticipants(o)})}function Bv(o){return c(this,null,function*(){return Ke().feedback(o)})}function Vv(o,r,e){return Ke().userFeedbackStats(o,r,e)}function Fv(o,r={},e=!1){let t=N.current();t&&t.sendClientEvent(o,r,e)}function jv(o,r){return c(this,null,function*(){return Ke().enableFeatureForRoles(o,r)})}function Ke(){let o=N.current();if(!o)throw new Error("Conversation not found");return o}function Hv(o){return c(this,null,function*(){yield ae.removeHistoryRecords(o)})}function Gv(o){return c(this,null,function*(){let r=N.current();r&&(yield r.startAsr(o))})}function Wv(o){return c(this,null,function*(){let r=N.current();r&&(yield r.stopAsr(o))})}function Kv(o){return c(this,null,function*(){let r=N.current();r&&(yield r.requestAsr(o))})}function qv(o){return c(this,null,function*(){let r=N.current();return r?r.startUrlSharing(o):Promise.reject()})}function $v(){return c(this,null,function*(){let o=N.current();return o?o.stopUrlSharing():Promise.reject()})}function zv(){return p.sdkVersion}export{bi as Api,qr as ApiExternal,Kr as ArrayDequeue,me as AuthData,xt as BaseLogger,lt as CallDirection,it as CallType,Fr as ChatRoomEventType,jr as ConversationFeature,Jt as ConversationOption,wa as DebugMessageType,Hr as ExternalIdType,Ct as FacingMode,oe as FatalError,H as HangupReason,B as HangupType,de as MediaOption,Ge as MediaTrackKind,mi as MediaType,Ue as MuteState,Z as ParticipantState,Cr as ParticipantStatus,ms as RecordRole,_i as RoomsEventType,Ne as Signaling,x as SignalingCommandType,tt as SignalingConnectionType,U as SignalingNotification,mt as TransportTopology,pt as UserRole,se as UserType,At as VolumeDetector,AS as acceptCall,Lv as acceptPromotion,vv as activateRooms,_v as addMovie,xS as addParticipant,fs as addParticipantInternal,MS as authorize,vS as browser,hs as callInternal,yS as callTo,US as captureScreen,BS as captureVmoji,bv as changeAudioEffect,ZS as changeConversationOptions,NS as changeDevice,WS as changeParticipantState,GS as changePriorities,yv as changeVideoEffect,tv as chatHistory,ev as chatMessage,Rs as chatMessageInternal,nv as createJoinLink,iv as customData,Ts as customDataInternal,Tv as debug,Cv as debugMessage,DS as declineCall,jv as enableFeatureForRoles,QS as enableVideoSuspend,XS as enableVideoSuspendSuggest,Bv as feedback,dv as forceRelayPolicy,sv as getAnonymTokenByLink,wv as getAudienceModeHands,Nv as getParticipantListChunk,Uv as getParticipants,hv as getStreamInfo,kv as getWaitingHall,$S as grantRoles,vs as grantRolesInternal,OS as hangup,PS as init,kS as joinCall,wS as joinCallByLink,gs as joinCallInternal,Fv as logClientEvent,zS as muteParticipant,Is as muteParticipantInternal,JS as pinParticipant,Es as pinParticipantInternal,bS as processPush,_s as processPushInternal,Ov as promoteParticipant,uv as publishStream,KS as putHandsDown,mv as recordSetConf,Hv as removeHistoryRecords,ov as removeJoinLink,fv as removeMovie,LS as removeParticipant,Ss as removeParticipantInternal,Ev as removeRooms,Kv as requestAsr,xv as requestPromotion,TS as setAudioEffects,Mv as setAudioStream,HS as setLocalResolution,ES as setLogger,YS as setMediaModifiers,Rv as setStatisticsInterval,RS as setVideoEffects,VS as setVideoStream,CS as setVmoji,Dv as setVmojiFill,Av as setVmojiSvg,cv as setVolume,Gv as startAsr,av as startAudienceConversation,rv as startConversation,lv as startStream,qv as startUrlSharing,Wv as stopAsr,pv as stopStream,$v as stopUrlSharing,Iv as switchRoom,jS as toggleLocalAudio,FS as toggleLocalVideo,qS as updateDisplayLayout,gv as updateMovie,Sv as updateRooms,Pv as uploadDebugLogs,Vv as userFeedbackStats,IS as utils,zv as version};
7
+ var Zn=Object.defineProperty;var es=(n,r,e)=>r in n?Zn(n,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[r]=e;var c=(n,r,e)=>es(n,typeof r!="symbol"?r+"":r,e);import Jn from"webrtc-adapter";var xt=class{log(r,e,t=!1){}destroy(){}};var ie=class{constructor(){c(this,"_handlers",{});c(this,"_listeners",[])}_triggerEvent(r,...e){if(Object.hasOwn(this._handlers,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 Object.hasOwn(this._handlers,r)||(this._handlers[r]=[]),this._handlers[r].push(e),{dispose:this.removeEventListener.bind(this,r,e)}}removeEventListener(r,e){if(!Object.hasOwn(this._handlers,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 ii=class extends ie{get ready(){return!0}setParticipantIdRegistry(r){}requestRealloc(){}setEndpoint(r){}setWebTransportEndpoint(r){}setConversationId(r){}readyToSend(r=!0){}cleanup(){}requestTestMode(r,e){}getNextCommandSequenceNumber(){return 0}};var va=(Z=>(Z.CANCELED="CANCELED",Z.REJECTED="REJECTED",Z.REMOVED="REMOVED",Z.HUNGUP="HUNGUP",Z.MISSED="MISSED",Z.BUSY="BUSY",Z.FAILED="FAILED",Z.NETWORK_ERROR="NETWORK_ERROR",Z.KILLED="KILLED",Z.BANNED="BANNED",Z.HAS_ACTIVE_CALL="HAS_ACTIVE_CALL",Z.CALLER_IS_BLOCKED="CALLER_IS_BLOCKED",Z.NOT_FRIENDS="NOT_FRIENDS",Z.CALLEE_IS_OFFLINE="CALLEE_IS_OFFLINE",Z.CALLER_IS_REJECTED="CALLER_IS_REJECTED",Z.UNKNOWN_ERROR="UNKNOWN_ERROR",Z.UNSUPPORTED="UNSUPPORTED",Z.OLD_VERSION="OLD_VERSION",Z.SERVICE_DISABLED="SERVICE_DISABLED",Z.EXTERNAL_API_ERROR="EXTERNAL_API_ERROR",Z.SOCKET_CLOSED="SOCKET_CLOSED",Z.ENDED="ENDED",Z.KILLED_WITHOUT_DELETE="KILLED_WITHOUT_DELETE",Z.ANOTHER_DEVICE="ANOTHER_DEVICE",Z.NOT_FOUND="NOT_FOUND",Z.VCHAT_DETAILED_ERROR="VCHAT_DETAILED_ERROR",Z))(va||{}),k=va;var G=class n extends Error{constructor(e,t){super();c(this,"message");c(this,"hangup");c(this,"error");c(this,"code");c(this,"remote");c(this,"custom_error");this.name="HangupReason",this.code=t&&t.code||0,this.remote=t&&t.remote||!1,this.custom_error=t?.custom_error??null,Object.values(k).indexOf(e)>-1?this.hangup=e:this.error=e;let i=[];this.error&&i.push("error"),this.remote&&i.push("remote"),this.code&&i.push(`code: ${this.code}`),t&&t.message&&i.push(`message: '${t.message}'`),this.message=e+(i.length?` (${i.join(", ")})`:""),Error.captureStackTrace&&Error.captureStackTrace(this,n)}};var _e=class _e extends xt{constructor(e,t){super();c(this,"_externalLogger");c(this,"_api");c(this,"_batchInterval",3e3);c(this,"_batchedLogItems",[]);c(this,"_batchedClientStats",[]);c(this,"_batchedClientEvents",[]);c(this,"_batchTimeout",null);c(this,"_serverTimeDelta",0);this._api=e,this._externalLogger=t,this._calculateServerTimeDelta()}static setConversationIdProvider(e){_e._conversationIdProvider=e}_getConversationId(){if(_e._conversationIdProvider)try{return _e._conversationIdProvider()}catch{return null}return null}_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:this._getConversationId(),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:this._getConversationId(),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:this._getConversationId()}),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){_e._instance||(_e._instance=new _e(e,t))}static log(e,t,i=!1){_e._instance&&_e._instance.log(e,t,i)}static logCustom(e,t,i=!1){_e._instance&&_e._instance.logCustom(e,t,i)}static logClientStats(e,t=!1){_e._instance&&_e._instance.logClientStats(e,t)}static logClientEvent(e,t=!1){_e._instance&&_e._instance.logClientEvent(e,t)}static destroy(){_e._instance&&_e._instance.destroy(),_e._instance=null}};c(_e,"_instance"),c(_e,"_conversationIdProvider",null);var P=_e;import{Any as Js,Arr as rn,Int as H,Nil as bt,Str as an,Bool as Yr}from"messagepack";var Ia=(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))(Ia||{}),N=Ia;var Ea=(z=>(z.MIC_CAMERA_PERMISSION="mic_camera",z.CAMERA_PERMISSION="camera",z.MIC_PERMISSION="mic",z.CAMERA_ACCESS="cameralock",z.MIC_ACCESS="miclock",z.MIC_NOT_FOUND="nomic",z.SCREEN_PERMISSION="screenpermission",z.SCREEN_ACCESS="screenlock",z.CONNECTION="connection",z.NETWORK="network",z.UNKNOWN="unknown",z.UNSUPPORTED="unsupported",z.SIGNALING_FAILED="signalingfailed",z.API="api",z.AUTH="auth",z.OVERCONSTRAINED="overconstrained",z))(Ea||{}),re=Ea;var Ta=(s=>(s.AUDIO="AUDIO",s.VIDEO="VIDEO",s.SCREEN_SHARING="SCREEN_SHARING",s.MOVIE_SHARING="MOVIE_SHARING",s.AUDIO_SHARING="AUDIO_SHARING",s.ANIMOJI="ANIMOJI",s))(Ta||{}),se=Ta;var Ra=(v=>(v.ERROR="callError",v.DEVICES="callDevices",v.CALL_SPEC_ERROR="callSpecError",v.ICE_CONNECTION_STATE="callIceConnectionState",v.ICE_CONNECTION_TYPE="callIceConnectionType",v.ICE_RESTART="callIceRestart",v.PUSH="callPush",v.OUTGOING_CALL="callStart",v.CALL_FINISH="call_finish",v.OUTGOING_MULTIPARTY_CALL="callStartMultiparty",v.JOIN_CONVERSATION="callJoinConversation",v.ACCEPTED_OUTGOING="callAcceptedOutgoing",v.ACCEPT_INCOMING="callAcceptIncoming",v.DECLINE_INCOMING="callDeclineIncoming",v.ACCEPT_CONCURRENT="callAcceptConcurrent",v.HANGUP="callHangup",v.CODEC_USAGE="codec_usage",v.MEDIA_STATUS="callMediaStatus",v.DEVICE_CHANGED="callDeviceChanged",v.SOCKET_ACTION="callSocketAction",v.ADD_PARTICIPANT="callAddParticipant",v.REMOVE_PARTICIPANT="callRemoveParticipant",v.POOR_CONNECTION="callPoorConnection",v.TOPOLOGY_CHANGE_REQUESTED="callTopologyChangeRequested",v.RELAY_POLICY="callForceRelay",v.PAT_ALLOCATED="patAllocate",v.PAT_DEALLOCATED="patDeallocate",v.PAT_ERROR="patError",v.PAT_WAITING_TIME_ERROR="patWaitingTimeError",v.PAT_OUTDATED_RESPONSE="patOutdatedResponse",v.SIGNALING_CONNECTED="signaling_connected",v.RECONNECT="callReconnect",v.SCREENSHARE_FIRST_FRAME="screen_share_first_frame",v.SCREENSHARE_FREEZE_DURATION="callScreenshareFreezeDuration",v.FIRST_MEDIA_RECEIVED="first_media_received",v.CALL_EVENTUAL_STAT="callEventualStat",v.CALL_DECLINED_OR_HANGED_LOCALLY="CallDeclinedOrHangedLocally",v.USER_FEEDBACK_RECEIVED="UserFeedbackReceived",v.CALL_START="call_start",v.WEBSOCKET_CONNECTED="websocket_connected",v.WEBSOCKET_RECONNECTED="websocket_reconnected",v.WEBSOCKET_FAILED_PINGS="websocket_failed_pings",v.WEBSOCKET_FAILED_EXCEPTION="websocket_failed_exception",v.WEBSOCKET_TIMEOUT="websocket_timeout",v.WEBSOCKET_RESTART="websocket_restart",v.WEBTRANSPORT_CONNECTED="webtransport_connected",v.WEBTRANSPORT_RECONNECTED="webtransport_reconnected",v.WEBTRANSPORT_FAILED_PINGS="webtransport_failed_pings",v.WEBTRANSPORT_FAILED_EXCEPTION="webtransport_failed_exception",v.WEBTRANSPORT_TIMEOUT="webtransport_timeout",v.WEBTRANSPORT_RESTART="webtransport_restart",v))(Ra||{}),T=Ra;import Ca from"@vkontakte/libvpx";var Ve=class{constructor(){c(this,"_worker",null)}async _createWorker(r,e,t=[],i={},a=[]){return new Promise((s,o)=>{let u=t.join(","),p=new Blob([r,`exports.default(${u});`],{type:"application/javascript; charset=utf-8"}),m=window.URL.createObjectURL(p);this._worker=new Worker(m),this._worker.onmessage=h=>{switch(h.data.type){case"ready":s();break;case"error":o(h.data.error);break;case"frame":e(h.data);break;case"debug":d.debug(h.data.message);break;case"log_error":P.log(T.ERROR,h.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 gt=class extends Ve{async init(r,e){d.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)d.warn("LibVPxDecoder",t.error),e(t.error);else{let i=new ImageData(new Uint8ClampedArray(t.data),t.width,t.height);r(i)}},[Ca,Ca.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 Ve{async init(r,e){d.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?(d.warn("WebCodecsDecoder",t.error),e(t.error)):(r(t.data),t.data.close())},[b.baseChromeVersion()>=92||b.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&&!b.isBrokenVP9Decoder()&&b.browserName()!=="Firefox"}};var _t=class{constructor(r=null,e=0){c(this,"_counter",0);c(this,"_interval",0);c(this,"_lastCalculationTime",Date.now());c(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 us}from"bit-buffer";var Pa=(e=>(e.USER="USER",e.GROUP="GROUP",e))(Pa||{}),te=Pa;var nt={HEIGHT:720,WIDTH:1280,BITRATE:1e6},ri="L1T2",ba=[{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}],ts={h:1,m:2,l:4};function Ma(n,r){return!n||!r?n===r:n.streams.length===r.streams.length?n.streams.every((e,t)=>I.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:ba[0].bitrate}function ai(n=nt.WIDTH,r=nt.HEIGHT,e=ba){let t=["h","m","l"],i=Math.max(n,r),a=1;i>=960?a=3:i>=480&&(a=2);let s={streams:[]},o=30,u=ya(i,e)??nt.BITRATE;for(let p=0;p<a;p++){let m=t[p];s.streams.push({rid:m,width:n,height:r,fps:o,bitrate:u}),n=Math.round(n/2),r=Math.round(r/2),u=ya(Math.max(n,r),e)??Math.round(u/2)}return s}function Ai(n){return n?ts[n]??1:1}var Aa=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 Da(n){return new Promise((r,e)=>{let t=new FileReader;t.onload=i=>{r(i.target?.result)},t.onerror=e,t.readAsArrayBuffer(n)})}var Nt=":",wi="d",is=533,Di="a=fmtp:",rs="sps-pps-idr-in-keyframe=1",Pr;(Fe=>{let n=/[\r\n]+/,r=`\r
8
+ `;function e(g,C){let y=new RegExp("a=rtpmap:(\\d+) ([a-zA-Z0-9-]+)\\/\\d+"),v,f=[];for(v=0;v<g.length;++v){let D=g[v].match(y);D&&D.length===3&&D[2]===C&&f.push(D[1])}return f}function t(g,C,y){let v=g.split(" "),f=v.slice(0,3),D;for(D=3;D<v.length;D++)y.includes(v[D])&&f.push(v[D]);for(D=3;D<v.length;D++)!y.includes(v[D])&&!C.includes(v[D])&&f.push(v[D]);return f.join(" ")}function i(g,C,y,v){let f,D="m="+C;for(f=0;f<g.length;++f)g[f].startsWith(D)&&(g[f]=t(g[f],y,v))}function a(g,C){let y=new RegExp(Di+"(\\d+)");for(let v=0;v<g.length;++v){let f=g[v].match(y);if(f&&f.length===2&&C.includes(f[1])){let D=g[v].trim()===Di+f[1]?" ":";";g[v]+=D+rs}}}function s(g,C){let y=e(g,C);if(!y.length)return;let v=y.slice(0),f=new RegExp(Di+"(\\d+) apt=(\\d+)"),D;for(D=0;D<g.length;++D){let B=g[D].match(f);B&&B.length===3&&v.includes(B[2])&&v.push(B[1])}let W=new RegExp("a=(rtpmap|rtcp-fb|fmtp):(\\d+) .*");for(D=g.length;D--;){let B=g[D].match(W);B&&B.length===3&&v.includes(B[2])&&g.splice(D,1)}i(g,"video",v,[])}function o(g,C,y,v){let f=new RegExp("a=rtpmap:(\\d+) ([a-zA-Z0-9-]+)\\/\\d+"),D,W=[];for(D=C;D<y;++D){let Y=g[D].match(f);Y&&Y.length===3&&Y[2]===v&&W.push(Y[1])}if(!W.length)return W;let B=new RegExp(Di+"(\\d+) apt=(\\d+)");for(D=C;D<y;++D){let Y=g[D].match(B);Y&&Y.length===3&&W.includes(Y[2])&&W.push(Y[1])}return W}function u(g,C,y,v){let f=o(g,C,y,v);if(!f.length)return y+1;let D=new RegExp("a=(rtpmap|rtcp-fb|fmtp):(\\d+) .*"),W=0,B=y;for(;B>=C;){let Y=g[B].match(D);Y&&Y.length===3&&f.includes(Y[2])&&(g.splice(B,1),W++),B--}return g[C]=t(g[C],f,[]),y-W+1}function p(g,C,y,v){let f=-1,D=-1,W=!1;for(let B=0;B<g.length;++B)if(f>=0&&g[B].startsWith("m=")&&(D=B-1,W&&(B=u(g,f,D,C)),f=-1,D=-1,W=!1),g[B].startsWith("m=video")&&(f=B),f>=0){let Y=y==="remote"&&v==="encoder"||y==="local"&&v==="decoder"?"recvonly":"sendonly";(g[B].startsWith(`a=${Y}`)||g[B].startsWith("a=sendrecv"))&&(W=!0)}D=g.length-1,f>=0&&W&&u(g,f,D,C)}function m(g,C,y){let v=e(g,"H264");C&&i(g,"video",[],v),y&&a(g,v)}function h(g){let C=e(g,"VP9");i(g,"video",[],C)}function R(g,C,y,v,f,D=!1,W=!1){if(!C&&!y&&!v&&!W&&!D&&!f)return g;function B(x){let fe=["a=rtcp-fb:111 nack","a=rtcp-fb:111 nack pli"],he="a=rtcp-fb:111",Se=x.findIndex(de=>de.startsWith(he));return~Se&&(x[Se]=x[Se]+r+fe.join(r)),x}function Y(x){let fe=e(x,"red");fe.length>0&&i(x,"audio",[],fe)}let ge=g.split(n);return y?p(ge,"H264","local","decoder"):(C||f)&&m(ge,C,f),v&&h(ge),W&&Y(ge),D&&B(ge),ge.join(r)}Fe.patchLocalSDP=R;function M(g,C,y,v,f,D,W){C&&(g=g.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 B=g.split(n);return v?s(B,"H264"):y&&m(B,y,!1),D&&W?s(B,"VP9"):D?p(B,"VP9","remote","encoder"):W?p(B,"VP9","remote","decoder"):f&&h(B),B.join(r)}Fe.patchRemoteSDP=M;function w(g){return g?`${g.type||"WEB_SOCKET"}_${g.id}`:"_"}Fe.getPeerIdString=w;function j(g,C){return g&&g.id===C.id&&(g.type||"WEB_SOCKET")===(C.type||"WEB_SOCKET")}Fe.comparePeerId=j;async function z(g){let C={local:null,remote:null};if(!g||!g.getStats)return C;try{let y=await g.getStats(null),v=null;if(y.forEach(f=>{f.type==="transport"&&f.selectedCandidatePairId?v=y.get(f.selectedCandidatePairId):f.type==="candidate-pair"&&f.state==="succeeded"&&!v&&(!Object.hasOwn(f,"selected")||f.selected)&&(v=f)}),v?.localCandidateId){let f=y.get(v.localCandidateId);f&&(C.local={type:f.candidateType,ip:f.ip||f.ipAddress,port:f.port||f.portNumber})}if(v?.remoteCandidateId){let f=y.get(v.remoteCandidateId);f&&(C.remote={type:f.candidateType,ip:f.ip||f.ipAddress,port:f.port||f.portNumber})}return C}catch{return C}}Fe.getPeerConnectionHostInfo=z;let ae=/^[0-9]+$/,ve=/^([gu])([0-9]+)$/;function ye(g,C=te.USER){let y=String(g);return ve.test(y)?(d.warn(`Already composite id [${g}] type supplied [${C}]`),y):C===te.GROUP?"g"+y:C===te.USER?"u"+y:(d.warn(`Unknown type [${C}] for id [${g}]`),y.match(ae)?"u"+y:y)}Fe.composeUserId=ye;function X(g,C,y=0){let v=ye(g,C);return be(v,y)}Fe.composeParticipantId=X;function be(g,C){return C?g+Nt+wi+C:g}Fe.compose=be;function Me(g){return X(g.id,g.idType||te.USER,g.deviceIdx)}Fe.composeId=Me;function Zt(g){if(g.decorativeUserId)return X(g.decorativeUserId,g.idType||te.USER,g.deviceIdx)}Fe.composeDecorativeId=Zt;function na(g){return g.participant?Me(g.participant):X(g.participantId,g.participantType||te.USER,g.deviceIdx)}Fe.composeMessageId=na;function sa(g){return typeof g=="string"?Z(ei(g).compositeUserId).id:g}Fe.extractOkId=sa;function Z(g){let C=String(g),y=C.match(ve);return y?{id:Number(y[2]),type:y[1]==="g"?te.GROUP:te.USER}:(d.warn(`Unsupported compositeId [${g}]`),{id:Number(C),type:te.USER})}Fe.decomposeId=Z;function ei(g){let C=g.split(Nt+wi);return{compositeUserId:C[0],deviceIdx:C.length>1?parseInt(C[1],10):0}}Fe.decomposeParticipantId=ei;function oa(){let g=window.crypto?.randomUUID?.();if(g)return g;let C="0123456789abcdefghijklmnopqrstuvwxyz".split(""),y=new Array(36),v=0,f,D;for(D=0;D<36;D++)D===8||D===13||D===18||D===23?y[D]="-":D===14?y[D]="4":(v<=2&&(v=33554432+Math.random()*16777216|0),f=v&15,v=v>>4,y[D]=C[D===19?f&3|8:f]);return y.join("")}Fe.uuid=oa;function ca(g,C){let y;function v(...f){let D=this;y&&window.clearTimeout(y),y=window.setTimeout(()=>{g.apply(D,f)},C)}return v}Fe.debounce=ca;function da(g){if(!window.BigInt)return null;let C="",y=g.split(`
9
+ `);for(let D of y)if(D.startsWith("a=fingerprint")){let W=D.split(" ");if(W.length===2){C=W[1];break}}if(!C)return BigInt(-1);let v=C.split(":"),f=BigInt(0);for(let D=Math.min(7,v.length-1);D>=0;D--){let W=BigInt(parseInt(v[D],16));f<<=BigInt(8),f|=W}return BigInt.asIntN(64,f)}Fe.sdpFingerprint=da;async function la(g){return new Promise(C=>window.setTimeout(C,g))}Fe.delay=la;function pa(g,C,y){let v=[];return g.getSenders().forEach(f=>bi(C,f,f.track,y,v)),v}Fe.applySettings=pa;function bi(g,C,y,v,f){if(!RTCRtpSender.prototype.getParameters||!RTCRtpSender.prototype.setParameters||!g||!y||y.kind!=="video")return;let D=y.getSettings();if(!D)return;let W=g.maxBitrateK?g.maxBitrateK*1024:null,B=D.width,Y=D.height,ge=B&&Y&&g.maxDimension?Math.max(1,Math.max(B,Y)/g.maxDimension):null,x=g.maxFramerate||null;if(B&&Y&&g.maxDimension&&g.maxDimension>Math.max(B,Y)){let de=Math.round(B*Y/256),De=(Math.round(de*is/1e4)+1)*1e4;W=W===null?De:Math.min(De,W)}let fe=g.degradationPreference||"balanced",he=v[y.id];if(he&&he.bitrate===W&&he.scaleResolutionDownBy===ge&&he.maxFramerate===x&&he.degradationPreference===fe){f[y.id]=he;return}f[y.id]={bitrate:W,scaleResolutionDownBy:ge,maxFramerate:x,degradationPreference:fe};let Se=C.getParameters();if(Se.encodings||(Se.encodings=[{}]),Se.encodings.length>1&&B&&Y&&g.maxDimension){let de=Math.round(g.maxDimension*1.35),De=Math.max(B,Y),mt=ai(B,Y,g?.bitrates?.generic),Ot=mt.streams.length;d.log(`applyVideoTrackSettings: maxDim=${g.maxDimension} targetDim=${de} track=${B}x${Y} sim=${JSON.stringify(mt)}`),Se.encodings.forEach((ze,ti)=>{ze.scaleResolutionDownBy=Ai(ze.rid);let fa=Math.round(De/ze.scaleResolutionDownBy);ti<Ot-1?ze.active=fa<de:ti>=Ot?ze.active=!1:ze.active=!0,ti<Ot?ze.maxBitrate=mt.streams[ti].bitrate:ze.maxBitrate=0,ze.scalabilityMode=ri})}else Se.encodings.forEach(de=>{g?.scalabilityMode&&(de.scalabilityMode=g.scalabilityMode),W?de.maxBitrate=W:delete de.maxBitrate,ge?de.scaleResolutionDownBy=ge:delete de.scaleResolutionDownBy,x?de.maxFramerate=x:delete de.maxFramerate});if(Se.degradationPreference=fe,Se.encodings.length>0){C.setParameters?.(Se).catch(De=>{d.error("Failed to set sender parameters",Se,De)});let de=C.getParameters();d.log(`applyVideoTrackSettings: actual encodings= ${JSON.stringify(de.encodings)}`)}}Fe.applyVideoTrackSettings=bi;function Er(g,C){Array.isArray(C)||(C=[C]);for(let y of C)if(g.includes(y))return!0;return!1}Fe.includesOneOf=Er;function ua(g){return Object.entries(g.participantState?.state||{}).reduce((C,[y,v])=>(g.participantState&&(C[y]={ts:g.participantState.stateUpdateTs[y],state:v}),C),{})}Fe.mapParticipantState=ua;function ma(g){let C=g.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 l.filterObservers?C.filter(y=>!y.uid.observer):C}Fe.mapSharedParticipants=ma;function ha(g,C){let y=Object.keys(g),v=Object.keys(C);if(y.length!==v.length)return!1;for(let f of y)if(!Object.hasOwn(v,f)||g[f].state!==C[f].state||g[f].ts!==C[f].ts)return!1;return!0}Fe.isEqualParticipantState=ha;function Tr(g,C,y=!1){let v=Object.keys(g),f=Object.keys(C);if(v.length!==f.length)return!1;for(let D of v){if(!Object.hasOwn(C,D))return!1;let W=g[D],B=C[D];if(y&&ue(W)&&ue(B))return Tr(W,B,y);if(W!==B)return!1}return!0}Fe.isObjectsEquals=Tr;function ga(g,C){if(g.length!==C.length)return!1;for(let y of g)if(C.indexOf(y)<0)return!1;return!0}Fe.isArraysEquals=ga;function _a(g){return!Object.keys(g).length}Fe.isEmptyObject=_a;function me(g,C){if(!g&&!C)return 0;if(!g||!C)return g?-1:1;return v(C.rank,g.rank)||v(g.ts,C.ts)||y(g,C);function y(f,D){let W={[te.USER]:0,[te.GROUP]:1},{compositeUserId:B,deviceIdx:Y}=ei(f.id),{compositeUserId:ge,deviceIdx:x}=ei(D.id),{id:fe,type:he}=Z(B),{id:Se,type:de}=Z(ge);return v(W[he],W[de])||v(fe,Se)||v(Y,x)}function v(f,D){return f<D?-1:f===D?0:1}}Fe.participantMarkerCompare=me;function F(g,C){let y=Object.entries(g).filter(([,v])=>Array.isArray(C)?!C.includes(v):v!==C);return Aa(y)}Fe.objectFilterOutValues=F;function ee(g,C,y){let v=y;for(let f in g)Object.hasOwn(g,f)&&(v=C(v,g[f],f));return v}Fe.objectReduce=ee,Fe.setImmediate=(()=>{let g=1,C={},y=null;return typeof MessageChannel<"u"&&(y=new MessageChannel,y.port1.onmessage=v=>{let f=v.data;C[f]&&(C[f](),delete C[f])}),function(v){if(y&&document.visibilityState==="hidden"){let D=g;return g=g>=Number.MAX_SAFE_INTEGER?1:g+1,C[D]=v,y.port2.postMessage(D),()=>{C[D]&&delete C[D]}}let f=setTimeout(v,0);return()=>clearTimeout(f)}})();function ue(g){return g!==null&&typeof g=="object"&&!Array.isArray(g)}Fe.isObject=ue;function et(g,C,y,v){function f(B,Y){let ge=0,x=B.length,fe=!1;for(let he=0;he<B.length;he++)if(B[he].startsWith("m=video")&&(ge=he),B[he].startsWith("a=mid:"+Y)&&(fe=!0),fe&&B[he].startsWith("m=")){x=he;break}return{start:ge,end:x}}function D(B,Y,ge,x,fe,he,Se){let de="a=rid:"+x+" send";for(let De=Y;De<ge;De++)if(B[De]===de){let Ot=de+" max-width="+he+";max-height="+Se+";max-br="+fe;B[De]=Ot}}let W=C?.sender;if(W&&W.track&&C.mid){let B=g.split(n),{start:Y,end:ge}=f(B,C.mid),x=W.getParameters();if(x.encodings)return x.encodings.forEach(fe=>{let he=fe.rid,Se=fe.maxBitrate,de=fe.scaleResolutionDownBy;if(y&&v&&de){let De=""+Math.round(y/de),mt=""+Math.round(v/de);D(B,Y,ge,he,Se,De,mt)}}),B.join(r)}return g}Fe.patchSimulcastAnswerSdp=et})(Pr||(Pr={}));var I=Pr;var as=1e3;function oe(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 st(n,r){return e=>e[n]===r}function ns(n){return(r,e)=>e[n]-r[n]}function ni(n,r){return r.reduce((e,t)=>(e[t[n]]=t,e),{})}function wa(n){let r={},e=[];for(let t of n)r[t.id]||(r[t.id]=!0,e.push(t));return e}function Mr(n){return Object.keys(n).filter(r=>n[r]!==void 0).map(r=>[r,n[r]]).reduce((r,e)=>(r[e[0]]=I.isObject(e[1])?Mr(e[1]):e[1],r),{})}function ka(n){let r=[];for(let e of n)e.forEach(t=>r.push(t));return r}async function ss(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(ka).then(wa)}function Oa(n){let r=n.filter(st("type","candidate-pair")).sort(ns("priority")).find(yr(st("nominated",!0),st("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(st("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(st("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}}),Mr(e)}function br(n,r,e=!1){let t=ni("id",n),i=e?n.filter(yr(st("type","remote-inbound-rtp"))):n.filter(yr(st("type","inbound-rtp"),st("type","outbound-rtp")));return b.browserName()==="Firefox"&&(i=Object.values(i.reduce((a,s)=>{if(!a[s.ssrc])a[s.ssrc]=s;else{let o=Object.assign({},a[s.ssrc],s),u=a[s.ssrc].isRemote?s:a[s.ssrc];o.id=u.id,o.type=u.type,delete o.isRemote,delete o.remoteId,a[o.ssrc]=o}return a},{}))),i.map(a=>{let s=Number(a.ssrc),o=a.mediaType||a.kind,u=a.remoteId||a.trackId,p=a.type,m=a.codecId;if(!p||!s||!o)return null;let h={ssrc:s,type:p,kind:o,bytesReceived:oe(a,"bytesReceived"),bytesSent:oe(a,"bytesSent"),headerBytesReceived:oe(a,"headerBytesReceived"),headerBytesSent:oe(a,"headerBytesSent"),jitter:oe(a,"jitter"),packetsLost:oe(a,"packetsLost"),packetsReceived:oe(a,"packetsReceived"),packetsSent:oe(a,"packetsSent"),fractionLost:oe(a,"fractionLost"),pliCount:oe(a,"pliCount"),firCount:oe(a,"firCount"),nackCount:oe(a,"nackCount"),userId:r[s],freezeCount:oe(a,"freezeCount",0),totalFreezesDuration:oe(a,"totalFreezesDuration",0)},R="mid"in a&&typeof a.mid=="string"?a.mid:void 0,M="rid"in a&&typeof a.rid=="string"?a.rid:void 0;if(R&&(h.mid=R),M&&(h.rid=M),o==="video"){let w=oe(a,"framesDecoded"),j=oe(a,"totalInterFrameDelay"),z=oe(a,"totalSquaredInterFrameDelay"),ae=oe(a,"encoderImplementation"),ve=oe(a,"decoderImplementation");ae&&(h.encoderImplementation=ae),ve&&(h.decoderImplementation=ve),h.interframeDelayVariance=(z-j*j/w)/w}if(o==="video"&&h.type==="outbound-rtp"&&(h.totalEncodeTime=oe(a,"totalEncodeTime")??0),o==="audio"&&(h.totalSamplesReceived=oe(a,"totalSamplesReceived"),h.concealedSamples=oe(a,"concealedSamples"),h.insertedSamplesForDeceleration=oe(a,"insertedSamplesForDeceleration"),h.removedSamplesForAcceleration=oe(a,"removedSamplesForAcceleration"),h.silentConcealedSamples=oe(a,"silentConcealedSamples"),h.concealmentEvents=oe(a,"concealmentEvents"),h.totalAudioEnergy=oe(a,"totalAudioEnergy")),m&&t[m]){let w=t[m];h.clockRate=w.clockRate,h.mimeType=w.mimeType,o==="audio"&&w.sdpFmtpLine&&(h.sdpFmtpLine=w.sdpFmtpLine)}if(u&&t[u]){let w=t[u];h.frameHeight=w.frameHeight,h.frameWidth=w.frameWidth,h.framesDecoded=w.framesDecoded,h.framesReceived=w.framesReceived,h.framesDropped=w.framesDropped}return Mr(h)}).filter(a=>!!a)}function xa(n,r,e=!1){if(!r||!r.rtps||!n.rtps)return n;let t,i;e&&(t=ni("ssrc",n?.remoteRtps||[]),i=ni("ssrc",r?.remoteRtps||[]));let a=ni("ssrc",n.rtps),s=ni("ssrc",r.rtps),o=(n.timestamp-r.timestamp)/1e3;return!a||!s||Object.keys(a).forEach(u=>{let p=a[u],m=s[u];if(!(!p||!m)){if(p.bytesReceived&&p.bytesReceived>m.bytesReceived&&(p.bandwidth=Math.round((p.bytesReceived-m.bytesReceived)/o),p.bandwidth+=Math.round((p.headerBytesReceived-m.headerBytesReceived)/o)),p.bytesSent&&p.bytesSent>m.bytesSent&&(p.bandwidth=Math.round((p.bytesSent-m.bytesSent)/o),p.bandwidth+=Math.round((p.headerBytesSent-m.headerBytesSent)/o)),p.packetsReceived)if(p.packetsReceived>m.packetsReceived||p.packetsLost>m.packetsLost){let h=p.packetsLost-m.packetsLost,R=p.packetsReceived-m.packetsReceived;p.packetLoss=parseFloat((100*h/(h+R)).toFixed(2))}else p.packetLoss=0;if(p.freezeCount>m.freezeCount&&(p.freezeCountDelta=p.freezeCount-m.freezeCount),p.totalFreezesDuration>m.totalFreezesDuration){let h=p.totalFreezesDuration-m.totalFreezesDuration;p.totalFreezesDurationDelta=h}if(p.framesDropped&&m.framesDropped&&p.framesDropped>m.framesDropped&&(p.framesDroppedDelta=parseFloat(((p.framesDropped-m.framesDropped)/o).toFixed(0))),e&&p.type==="outbound-rtp"&&p.kind==="video"){let h=t?.[u],R=i?.[u],M=z=>z??0,w=Math.max(0,M(h?.packetsLost)-M(R?.packetsLost)),j=Math.max(1,p.packetsSent-m.packetsSent);n.transport.averageNetStat={currentRoundTripTime:(n.transport.currentRoundTripTime+r.transport.currentRoundTripTime)/2*1e3,lostPercent:Math.round(w/j*100)}}}}),n}async function Na(n,r,e={},t=!1){let i=await ss(n),a={timestamp:Date.now(),transport:Oa(i),rtps:br(i,e)};return t&&(a.remoteRtps=br(i,e,!0)),r?xa(a,r,t):(await I.delay(as),Na(n,a,e,t))}function os(n){performance.clearMarks(n),performance.mark(n)}function cs(n){performance.clearMarks(n)}function ds(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 ls(n){return`${T.SCREENSHARE_FIRST_FRAME}_${ps(n)}`}function ps(n){return typeof n=="string"?n:JSON.stringify(n)}var le={distinctById:wa,rtcStatsToArray:ka,extractTransport:Oa,extractRtps:br,delta:xa,collectStats:Na,setMark:os,clearMark:cs,measureMark:ds,getMarkNameScreenshareFirstFrame:ls};var He=class He{constructor(){c(this,"_eventualLogs",new Set)}static create(){He._instance=new He}static logCallStat(r){if(He._instance?._eventualLogs.size){for(let e of He._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}),P.logClientStats(e);He._instance._eventualLogs.clear()}P.logClientStats(r)}static logEventualStat(r){r.value===void 0&&(r.value=le.measureMark(r.name)),r.value!==null&&He._instance?._eventualLogs.add(r)}static destroy(){He._instance?._destroy(),He._instance=null}_destroy(){this._eventualLogs.clear()}};c(He,"_instance",null);var Re=He;var ki=class{constructor(r){c(this,"_participantId");c(this,"_firstFrameReceived",!1);this._participantId=r}measure(r,e){if(this._firstFrameReceived)return;this._firstFrameReceived=!0;let t=le.getMarkNameScreenshareFirstFrame(this._participantId),i=le.measureMark(t);i!==null&&Re.logEventualStat({name:T.SCREENSHARE_FIRST_FRAME,value:i,width:r,height:e})}};var ms=65536,Lt=class n{constructor(r,e,t){c(this,"_participantId");c(this,"_onStream");c(this,"_onStat");c(this,"_statScreenShareFirstFrame");c(this,"_chunks",[]);this._participantId=r,this._onStream=e,this._onStat=t,this._statScreenShareFirstFrame=new ki(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)%ms!==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(){le.clearMark(T.SCREENSHARE_FREEZE_DURATION),le.clearMark(le.getMarkNameScreenshareFirstFrame(this._participantId)),this._chunks=[]}_processFrameData(){let r=this._chunks;this._chunks=[];let e=r.reduce((a,s)=>a+s.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 us(r.buffer);t.bigEndian=!0,t.index+=2;let i=t.readBits(1),s=t.readBits(1)<<1|i;return s===3&&t.index++,t.readBits(1)===1||t.readBits(1)!==0||(t.index++,t.index++,t.index+=24,s>=2&&t.index++,t.readBits(3)!==7?(t.index++,(s===1||s===3)&&(t.index+=3)):(s===1||s===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){le.setMark(T.SCREENSHARE_FREEZE_DURATION);return}let e=le.measureMark(T.SCREENSHARE_FREEZE_DURATION);e!==null&&e>1e3&&this._onStat({freeze_duration:e})}};var ft=class{constructor(r){c(this,"_onStream");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 Ut=class extends ft{constructor(e){super(e);c(this,"_useImageBitmap");c(this,"_canvas",null);c(this,"_canvasContext",null);c(this,"_stream",null);c(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{}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(),d.debug("CanvasRenderer destroyed")}static isBrowserSupported(){return("CanvasCaptureMediaStream"in window||"CanvasCaptureMediaStreamTrack"in window)&&!(b.browserName()==="Safari"&&Number(b.browserVersion())===15)&&!(b.browserName()==="Firefox"&&Number(b.browserVersion())<60)}};var St=class extends ft{constructor(e){super(e);c(this,"_generator");c(this,"_writer");c(this,"_stream");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)}async drawFrame(e){await this._writer.write(e)}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 Bt=class extends Lt{constructor(e,t,i){super(e,t,i);c(this,"_renderer");c(this,"_decoder");c(this,"_decoderReady",!1);c(this,"_decoderBusy",!1);c(this,"_decoderQueue",[]);c(this,"_fpsMeter");d.debug(`StreamBuilder started for participant [${e}]`),St.isBrowserSupported()?this._renderer=new St(t):this._renderer=new Ut(t),Je.isBrowserSupported()?this._decoder=new Je:this._decoder=new gt;let a=async o=>{this._decoderBusy=!1,"VideoFrame"in window&&o instanceof VideoFrame?await this._renderer.drawFrame(o):await this._renderer.drawImage(o),this._fpsMeter.increment(),this._decodeQueue()},s=o=>{this._decoderBusy=!1,this._decodeQueue()};this._decoder.init(a,s).then(()=>{this._decoderReady=!0,this._decodeQueue()}),this._fpsMeter=new _t(o=>d.log(`[StreamBuilder][${e}] fps: ${o}`),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 Ut.isBrowserSupported()||St.isBrowserSupported()}};function La(n,r,e,t,i,a,s){let o=0;r&&(o|=1),e&&(o|=2),t&&(o|=4),s||(o|=8);let u=new ArrayBuffer(11),p=new DataView(u);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,o),!s)return u;let m=new Uint8Array(u.byteLength+s.byteLength);return m.set(new Uint8Array(u),0),m.set(new Uint8Array(s),u.byteLength),m.buffer}function Ua(n){let r=new DataView(n),e=r.getUint8(0),t=r.getUint16(1),i=r.getUint32(3),a=r.getUint8(7)===1,s=r.getUint16(8),o=r.getUint8(10),u=!!(o&1),p=!!(o&2),m=!!(o&4),h=!!(o&8);if(e!==1)throw new Error(`Unexpected protocol version. Got ${e}, expected 1`);return{timestamp:i,start:u,end:p,keyframe:m,sequence:t,isVP9:a,ssrc:s,eos:h,data:n.slice(11)}}function Ba(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 Fa(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),s=r.getUint32(6);return{seq:a,ts2:s}}import*as O from"simple-ebml-builder";var hs=2**15-1,Ar=1,gs=5,_s=5;var Dr=class n{constructor(r){c(this,"_mediaSource");c(this,"_codec");c(this,"_sourceBuffer",null);c(this,"_queue",[]);c(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 O.build(r[0])}else return new Uint8Array;let e=r.reduce((a,s)=>a+s.countSize(),0),t=new Uint8Array(e),i=0;for(let a of r){let s=O.build(a);t.set(s,i),i+=s.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)-gs);i-t>_s&&(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}},vt=class n extends Lt{constructor(e,t,i){super(e,t,i);c(this,"_mediaBuffer",null);c(this,"_video",null);c(this,"_stream",null);c(this,"_earliestTimestamp",0);c(this,"_clusterStartTime",0);c(this,"_lastFrameTimestamp",0);d.debug(`[WebmBuilder] started for participant [${e}]`)}static _intToU16BE(e){return new Uint8Array([e>>8,e])}static _genWebmHeader(){return O.element(O.ID.EBML,[O.element(O.ID.EBMLVersion,O.number(1)),O.element(O.ID.EBMLReadVersion,O.number(1)),O.element(O.ID.EBMLMaxIDLength,O.number(4)),O.element(O.ID.EBMLMaxSizeLength,O.number(8)),O.element(O.ID.DocType,O.string("webm")),O.element(O.ID.DocTypeVersion,O.number(2)),O.element(O.ID.DocTypeReadVersion,O.number(2))])}static _genSegmentHeader(e,t,i){let a=O.element(O.ID.Info,[O.element(O.ID.TimecodeScale,O.number(1e6)),O.element(O.ID.MuxingApp,O.string("vk-webm-builder")),O.element(O.ID.WritingApp,O.string("vk-webm-builder"))]),s=[O.element(O.ID.PixelWidth,O.number(e)),O.element(O.ID.PixelHeight,O.number(t))],o=O.element(O.ID.Tracks,O.element(O.ID.TrackEntry,[O.element(O.ID.TrackNumber,O.number(Ar)),O.element(O.ID.TrackUID,O.number(Ar)),O.element(O.ID.TrackType,O.number(1)),O.element(O.ID.FlagLacing,O.number(0)),O.element(O.ID.DefaultDuration,O.number(1e9)),O.element(O.ID.CodecID,O.string(`V_${i.toUpperCase()}`)),O.element(O.ID.Video,s)]));return O.unknownSizeElement(O.ID.Segment,[a,o])}static _genClusterHeader(e){return O.unknownSizeElement(O.ID.Cluster,[O.element(O.ID.Timecode,O.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=()=>{if(this._video?.src){d.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=()=>d.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,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,this._mediaBuffer?.cleanup(),d.debug(`[WebmBuilder] Segment header for participant [${this._participantId}]`);let o=n._genWebmHeader();this._mediaBuffer?.append(o);let u=n._genSegmentHeader(e.width,e.height,t);this._mediaBuffer?.append(u)}let a=Math.round(i-this._clusterStartTime);if(a>hs&&(this._clusterStartTime=i,a=0),a===0){d.debug(`[WebmBuilder] Cluster header for participant [${this._participantId}]`);let o=n._genClusterHeader(this._clusterStartTime);this._mediaBuffer?.append(o)}let s=O.element(O.ID.SimpleBlock,[O.vintEncodedNumber(Ar),O.bytes(n._intToU16BE(a)),O.number((e.keyframe?1:0)<<7),O.bytes(e.frameData)]);this._mediaBuffer?.append(s,!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(){return"captureStream"in window.HTMLVideoElement?.prototype&&window.MediaSource?.isTypeSupported('video/webm; codecs="vp8"')&&window.MediaSource?.isTypeSupported('video/webm; codecs="vp9"')}};var It=class{constructor(r,e,t,i,a){c(this,"_datachannel");c(this,"_participantIdRegistry",null);c(this,"_streamBuilders",{});c(this,"_onStream",()=>{});c(this,"_onEos",()=>{});c(this,"_onStat");d.debug("ScreenCaptureReceiver started"),this._datachannel=r,this._participantIdRegistry=e,this._onStream=t,this._onEos=i,this._onStat=a,this._datachannel.onmessage=s=>this._onDataChannelMessage(s.data)}_onDataChannelMessage(r){let e=Ua(r),t=this._participantIdRegistry?.getStreamDescription(e.ssrc)?.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 a=s=>this._onStream(t,s);l.screenShareWebmBuilder&&vt.isBrowserSupported()?i=new vt(t,a,this._onStat):i=new Bt(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,d.debug("ScreenCaptureReceiver destroyed")}static isBrowserSupported(){return(Je.isBrowserSupported()||gt.isBrowserSupported())&&(Bt.isBrowserSupported()||vt.isBrowserSupported())}};var wr=class{constructor(r,e,t){c(this,"_prev");c(this,"_next");c(this,"_data");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}},si=class{constructor(){c(this,"_head",null);c(this,"_tail",null);c(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(){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 Va from"@vkontakte/libvpx";var fs=1e3,Ft=class extends Ve{constructor(e,t,i,a){super();c(this,"_sourceTrack");c(this,"_onFrame");c(this,"_useCongestionControl");c(this,"_maxBitrate");c(this,"_useImageCapture");c(this,"_video",null);c(this,"_imageCapture",null);c(this,"_canvas",null);c(this,"_canvasCtx",null);c(this,"_frameReadTimeout",0);c(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=u=>t(),a.onerror=()=>i(new Error("Video element error"));let s=a.play(),o=()=>i(new Error("Autoplay is disabled"));s?s.catch(o):o()}})}_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;d.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})},[Va,Va.getUrl,this._useCongestionControl,this._maxBitrate],{isVP9:this.isVP9(),debug:d.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)},fs),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(),d.debug("LibVPxEncoder destroyed")}static isBrowserSupported(){return"WebAssembly"in window&&"Worker"in window&&("CanvasCaptureMediaStream"in window||"CanvasCaptureMediaStreamTrack"in window)}};var Et=class extends Ve{constructor(e,t,i,a,s,o){super();c(this,"_sourceTrack");c(this,"_trackProcessor");c(this,"_onFrame");c(this,"_useCongestionControl");c(this,"_maxBitrate");c(this,"_useCbr");c(this,"_frameRate");this._sourceTrack=e,this._onFrame=t,this._useCongestionControl=i,this._maxBitrate=a,this._useCbr=s,this._frameRate=o,this._trackProcessor=new MediaStreamTrackProcessor({track:e})}async init(){let e=this._sourceTrack.getSettings().width,t=this._sourceTrack.getSettings().height,i=this._trackProcessor.readable;d.debug(`WebCodecsEncoder started ${e}x${t}, 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
+ `,a=>{a.error?this._onFrame(null,a.error):this._onFrame({type:a.frameType,timestamp:a.timestamp,duration:a.duration,data:a.data,byteLength:a.data?.byteLength,width:a.width,height:a.height})},[],{readable:i,width:e,height:t,isVP9:this.isVP9(),framerate:this._frameRate,useCongestionControl:this._useCongestionControl,maxBitrate:this._maxBitrate,useCbr:this._useCbr},[i])}requestFrame(e=!1){this._sendToWorker("frame",{keyFrame:e})}setBitrate(e,t,i){this._sendToWorker("set_bitrate",{bitrate:e,useCbr:t,fps:i})}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 Ss=2100,vs=600,Is=1.2,ja=.8,Es=2e3,Ts=8e3,kr=8e3,Rs=16e3,Cs=4,Ps=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,s,o){c(this,"_onCongestion");c(this,"_ccEnabled");c(this,"_fastSharing");c(this,"_trendDelayThreshold");c(this,"_highDelayThreshold");c(this,"_targetFps");c(this,"_minBitrate");c(this,"_maxBitrate");c(this,"_targetBitrate");c(this,"_lastDown");c(this,"_lastUp");c(this,"_lastProbing");c(this,"_lastCheckDelay");c(this,"_upPenalty",0);c(this,"_probing");c(this,"_delayAvgShort",-1);c(this,"_delayAvgLong",-1);c(this,"_minDelay",Number.MAX_VALUE);c(this,"_maxDelay",0);c(this,"_largeDelayDuration",0);c(this,"_lastFpsCalcMs");c(this,"_frames",0);c(this,"_fps",0);this._onCongestion=r,this._ccEnabled=i,this._minBitrate=e,this._maxBitrate=t,this._fastSharing=a,this._targetFps=o,s>0?this._highDelayThreshold=s:this._highDelayThreshold=Ss,a&&(this._highDelayThreshold=vs),this._trendDelayThreshold=Math.round(this._highDelayThreshold/3),this._targetBitrate=this._maxBitrate,this._probing=!1;let u=Date.now();this._lastDown=0,this._lastUp=u,this._lastProbing=u,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,s=this._delayAvgShort-this._delayAvgLong,o=Math.round(Math.abs(s)*100/this._delayAvgLong),u=s>40&&o>30&&this._delayAvgShort>this._trendDelayThreshold,p=this._delayAvgShort>this._highDelayThreshold;u||p?a=2:Math.abs(s)<40&&o<10&&!p&&(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=${s} percent=${o} -> ${Oi[a]} tr=${m} br=${t}`);let R=i-this._lastDown;if(a===2&&R>Es){this._probing&&(this._upPenalty=Math.min(++this._upPenalty,Cs),this._probing=!1);let ae=ja*h*1e3;if(ae>=this._targetBitrate&&(ae=this._targetBitrate*ja),ae=Math.max(ae,this._minBitrate),ae<this._targetBitrate){let ve=Math.round(ae/1e3),ye=Math.round(this._upPenalty*kr/1e3);d.log(`#${r}: cc: delay=${e} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${s} percent=${o} -> ${Oi[a]}`),d.log(`#${r}: cc: DOWN delay=${e} bitrate=${h} target=${m} -> newBitrate=${ve} penalty=${ye}s`),this._setBitrate(ae,!0),this._targetBitrate=ae}this._lastDown=i}let M=i-this._lastUp,w=Ts+this._upPenalty*kr;if(a===1&&M>w&&R>w){let ae=Math.min(this._targetBitrate*Is,this._maxBitrate);if(ae>this._targetBitrate){let ve=Math.round(ae/1e3),ye=Math.round(this._targetBitrate/1e3),X=Math.round(this._upPenalty*kr/1e3);d.log(`#${r}: cc: delay=${e} short=${this._delayAvgShort} long=${this._delayAvgLong} delta=${s} percent=${o} -> ${Oi[a]}`),d.log(`#${r}: cc: UP bitrate=${h} target=${ye} -> newBitrate=${ve} penalty=${X}s`),this._setBitrate(ae,!1),this._targetBitrate=ae,this._probing=!0,this._lastProbing=i,this._lastUp=i}}let j=i-this._lastProbing;this._probing&&j>Rs&&(this._probing=!1);let z=i-this._lastDown;this._upPenalty>0&&z>3*w&&(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>Ps){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 ci=class{constructor(r){c(this,"_maxSize");c(this,"_size",0);c(this,"_buffer");c(this,"_head",0);c(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 s=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++,s}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,s=this._tail;for(let o=0;o<this._maxSize;o++){s>0?--s:s=this._maxSize-1;let u=this._buffer[s];if(!u||(a===-1&&(a=u.ts2,t=0),a>=0&&(t+=u.size),i=u.ts2,a-i>=r)||s===this._head)break}if(i>=0&&a>=0){let o=a-i;e=Math.round(o>0?t*8/o: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 s=0;s<this._maxSize;s++){a>0?--a:a=this._maxSize-1;let o=this._buffer[a];if(o){if(i===-1&&o.end&&!o.start&&(i=o.ts2,e=0),t===-1&&i>=0&&o.start&&!o.end&&(t=o.ts2),t>=0&&i>=0){let u=i-t;r=u>0?e*8/u:0;break}if(i>=0&&(e+=o.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,bs=50,Ms=400,As=1e6,Ds=3e5,ws=3e4,ks=2e3,Os=5,xi=0,Tt=class{constructor(r,e,t,i){c(this,"_encoder");c(this,"_datachannel");c(this,"_signaling");c(this,"_fastSharing");c(this,"_destroyed",!1);c(this,"_needKeyframe",!0);c(this,"DATA_SIZE");c(this,"_congestionControl");c(this,"_frameNum",0);c(this,"_width");c(this,"_height");c(this,"_feedback",new ci(1024));c(this,"_lastSentFrameSeq",0);c(this,"_lastDeliveredFrameSeq",0);c(this,"_lastFrameDelay",0);c(this,"_lastFramerateReduced",Date.now());c(this,"_lastSharingStat",Date.now());c(this,"_congestionControlEnabled");c(this,"_queue",new si);c(this,"_fpsMeter");c(this,"_maxFrameDelay");d.debug("ScreenCaptureSender started"),this.DATA_SIZE=l.consumerScreenDataChannelPacketSize-11,this._datachannel=e,this._signaling=t,this._fastSharing=i,this._congestionControlEnabled=l.screenShareCongestionControl||this._fastSharing,this._width=r.getSettings().width,this._height=r.getSettings().height,this._maxFrameDelay=this._fastSharing?l.screenShareCongestionControlThreshold:l.screenShareCongestionControlThreshold*2;let a=l.getScreenFrameRate(this._fastSharing),{minBitrate:s,maxBitrate:o}=this._calcMinMaxBitrate(this._width,this._height),u=this._onCongestionCallback.bind(this);d.log(`ScreenCaptureSender: CongestionControl: enabled=${this._congestionControlEnabled} minBitrate=${Math.round(s/1e3)}k maxBitrate=${Math.round(o/1e3)}k delayThreshold=${l.screenShareCongestionControlThreshold}`),this._congestionControl=new oi(u,s,o,this._congestionControlEnabled,this._fastSharing,l.screenShareCongestionControlThreshold,a);let p=(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 R=this._sliceFrame(m);this._queue.merge(R),this._handleQueue(),this._sendSharingStat()};if(Et.isBrowserSupported()){let m=this._fastSharing;this._encoder=new Et(r,p,this._congestionControlEnabled,o,m,a)}else this._encoder=new Ft(r,p,this._congestionControlEnabled,o);this._datachannel.onmessage=m=>{Ba(m.data)&&(d.debug(`[${this._datachannel.label}] Requested keyframe`),this._needKeyframe=!0);let h=Fa(m.data);h!==null&&this._checkCcFeedback(h)},this._encoder.init().then(()=>this._handleQueue()).catch(m=>d.warn("ScreenCaptureSender init failed",m)),this._fpsMeter=new _t(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>Os&&this._lastFrameDelay>this._maxFrameDelay){let i=Date.now();i-this._lastFramerateReduced>ks&&(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(),I.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 I.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 si;for(let a=0;a<t;a+=this.DATA_SIZE){let s=r.data.slice(a,a+this.DATA_SIZE),o=a===0,u=t<=a+s.byteLength,p=this._wrapHeader(r.timestamp,o,u,e,s);i.push({data:p.data,sequence:p.sequence,frameSize:t,isFirst:o,isLast:u,isKey:e,timestamp:r.timestamp})}return i}_wrapHeader(r,e,t,i,a){let s=La(r,e,t,i,xi,this._encoder.isVP9(),a),o={sequence:xi,data:s};return xi=(xi+1)%Or,o}_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 Et.isBrowserSupported()||Ft.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),s=Math.round(i/1e3);d.log(`cc: resize to ${r}x${e}, minBitrate=${a} maxBitrate=${s}`),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(Ds,Math.min(As,Math.round(t*bs))),a=Math.round(t*Ms);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>ws){let t=this._congestionControl.getStat();t!==null&&(d.debug(`cc: send stats: ${JSON.stringify(t)}`),this._signaling.reportSharingStat(t)),this._lastSharingStat=r}}};var Ne=class Ne{static get sessionKey(){return Ne._sessionKey}static set sessionKey(r){Ne._sessionKey=r}static get sessionSecretKey(){return Ne._sessionSecretKey}static set sessionSecretKey(r){Ne._sessionSecretKey=r}static get accessToken(){return Ne._accessToken}static set accessToken(r){Ne._accessToken=r}static isEmpty(){return!Ne._sessionKey}};c(Ne,"_sessionKey"),c(Ne,"_sessionSecretKey"),c(Ne,"_accessToken");var Ce=Ne;var _=class _{static set(r){Object.hasOwn(r,"voiceParams")&&(Object.assign(_._params.voiceParams,r.voiceParams),delete r.voiceParams),Object.hasOwn(r,"specListenerParams")&&(Object.assign(_._params.specListenerParams,r.specListenerParams),delete r.specListenerParams),Object.hasOwn(r,"apiAuth")&&(Ce.accessToken=r.apiAuth.accessToken,Ce.sessionKey=r.apiAuth.sessionKey,Ce.sessionSecretKey=r.apiAuth.sessionSecretKey),Object.assign(_._params,I.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.785c0ce9.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 wtsBase(){return _._params.wtsBase}static set wtsBase(r){_._params.wtsBase=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||(b.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)=>d.send(e,...t))}static get videoEffects(){return _._params.videoEffects}static set videoEffects(r){_._params.videoEffects=r,_._params.videoEffects?.setLogger((e,...t)=>d.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&&Tt.isBrowserSupported()}static get producerScreenDataChannel(){return _._params.producerScreenDataChannel&&_.producerNotificationDataChannel&&It.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 b.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 consumerFastScreenShare(){return _._params.consumerFastScreenShare}static get consumerFastScreenShareQualityOnDemand(){return _._params.consumerFastScreenShareQualityOnDemand}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 get webtransport(){return _._params.webtransport}static set webtransport(r){_._params.webtransport=r}static get webtransportFF(){return _._params.webtransportFF}static set webtransportFF(r){_._params.webtransportFF=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,simulcast:_._params.simulcast,webtransport:_._params.webtransport,webtransportFF:_._params.webtransportFF}}};c(_,"_params",{platform:"WEB",clientStatsPlatform:"",clientType:"PORTAL",externalUserType:"",device:"browser",apiKey:"",authToken:"",anonymToken:"",apiEnv:"AUTO",apiBaseUrl:null,domain:"",externalDomain:"",iceServers:[],wssBase:"",wtsBase:"",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,consumerFastScreenShare:!1,consumerFastScreenShareQualityOnDemand:!1,fastScreenShareFrameRate:24,fastScreenShareWidth:1280,fastScreenShareHeight:720,newMuteRules:!1,videoSuspend:!1,enumerateDevicesDelay:2e3,switchVideoAtBadNetwork:!1,enableVideoEffectsFpsDegradation:!1,simulcast:!1,webtransport:!1,webtransportFF:!1});var l=_;function Ha(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 Ie(n){return Object.assign({isAudioEnabled:!1,isVideoEnabled:!1,isScreenSharingEnabled:!1,isFastScreenSharingEnabled:!1,isAudioSharingEnabled:!1,isAnimojiEnabled:!1},n||{})}var Ga=n=>n.stop(),di=n=>n.getTracks().forEach(Ga),Wa=n=>n.getVideoTracks().forEach(Ga);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){d.warn("setVideoConstraints failed",e)}}var Li=class extends ie{constructor(){super(...arguments);c(this,"FPS_LIMITS",[13,20,Math.max(l.videoFrameRate,25)]);c(this,"THRESHOLD",.8);c(this,"HISTORY_LENGTH",10);c(this,"_fpsMeterUnsubscribe",null);c(this,"_fpsHistory",{cursor:0,arr:[]});c(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,s)=>a+s,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 je=(i=>(i.audio="audio",i.video="video",i.screen="screen",i.audioshare="audioshare",i))(je||{});var Ui=class extends ie{constructor(){super();c(this,"_stream",null);c(this,"_screenTrack",null);c(this,"_audioShareTrack",null);c(this,"_screenShareTrack",null);c(this,"_sendVideoTrack",null);c(this,"_cameraVideoTrack",null);c(this,"_micAudioTrack",null);c(this,"_audioEffectsTrack",null);c(this,"_mediaSettings",Ie());c(this,"_videoStatusOnScreenCapturingEnabled",!1);c(this,"_effect",null);c(this,"_audioEffectParams",null);c(this,"_onDeviceChange");c(this,"_animojiEnabled",!1);c(this,"_videoEffectsFpsLimiter");c(this,"_deviceChangeListener",null);this._initDeviceChangeListener(),l.audioShare&&(this._audioShareTrack=this.getSilentAudioShareTrack()),l.enableVideoEffectsFpsDegradation&&(this._videoEffectsFpsLimiter=new Li,this._videoEffectsFpsLimiter.addEventListener("fps-limit",this.handleVideoEffectsLowFps.bind(this))),!this._deviceChangeListener&&navigator.mediaDevices.addEventListener&&(this._deviceChangeListener=()=>{this._replaceLocalTrack(b.getSilentMediaTrack())},navigator.mediaDevices.addEventListener("devicechange",this._deviceChangeListener)),l.consumerFastScreenShare&&(this._screenShareTrack=this.getBlackScreenShareTrack())}async request(e=[se.AUDIO],t=!0){if(this._stream)return;let i=e.includes(se.VIDEO),a=e.includes(se.AUDIO),s=e.includes(se.ANIMOJI);if(!b.isBrowserSupported())throw new G(re.UNSUPPORTED);try{this._stream=await b.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(o=>o.enabled).length>0||!1,this._mediaSettings.isAudioEnabled=a&&this._stream.getAudioTracks().filter(o=>o.enabled).length>0||!1,this._mediaSettings.isAnimojiEnabled=s&&!this._mediaSettings.isVideoEnabled||!1,this._animojiEnabled=s,this._triggerEvent("SOURCE_READY")}catch(o){throw new G(o)}}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(),s=this.getSendAudioTrack(),o=this.getSendVideoTrack(i);if(!a||!s&&!o&&!t)throw new Error("No local stream found");s&&!t&&e.addTrack(s,a),o&&!t&&e.addTrack(o,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(re.UNKNOWN)}}stopVideoTrack(){this._mediaSettings.isVideoEnabled&&(this._stopEffect(),this._stream&&Wa(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=b.getSavedMicrophone(),i=b.getSavedCamera(),a=this._mediaSettings.isAudioEnabled&&t?.groupId!==e.microphone?.groupId,s=this._mediaSettings.isVideoEnabled&&i?.groupId!==e.camera?.groupId;try{a&&await this._changeAudioInput(),s&&await this._changeVideoInput()}catch{}},b.addEventListener("devicechange",this._onDeviceChange))}_destroyDeviceChangeListener(){this._onDeviceChange&&b.removeEventListener("devicechange",this._onDeviceChange)}async _changeVideoInput(e){try{let t=e?"stream":"video",i=e||await b._getUserVideo(!!this._effect,this._frameRate);if(this._cameraVideoTrack?.stop(),this._cameraVideoTrack=i.getVideoTracks()[0],!this._stream)di(i);else{l.consumerScreenTrack||await this._disableScreenCapture();let a=await this._setEffect(this._effect,this._cameraVideoTrack);P.log(T.DEVICE_CHANGED,t),d.log("Video stream changed"),await this._replaceLocalTrack(a),this._mediaSettings.isVideoEnabled=!0,this._triggerEvent("SOURCE_CHANGED",{kind:"video"})}}catch(t){throw P.log(T.ERROR,"change_video"),d.warn("Camera change failed",t),t}}async setAudioStream(e){return this._changeAudioInput(e)}async _changeAudioInput(e=null){try{let t=e||await b.getUserAudio();if(this._micAudioTrack?.stop(),this._micAudioTrack=t.getAudioTracks()[0],!this._stream)di(t);else{let i=await this._applyAudioEffect();P.log(T.DEVICE_CHANGED,"audio"),d.log("Audio stream changed",i),await this._replaceLocalTrack(i),this._mediaSettings.isAudioEnabled=!0,this._triggerEvent("SOURCE_CHANGED",{kind:"audio"})}}catch(t){throw P.log(T.ERROR,"change_audio"),d.error("Microphone change failed",t),t}}async _changeScreen(e,t,i){try{if(i=i||await b.getScreenMedia(e,t),!this._stream)di(i);else{let a=i.getVideoTracks()[0];if(a.addEventListener("ended",()=>{this._mediaSettings.isScreenSharingEnabled&&this.disableScreenCapturing()},!1),l.consumerScreenTrack||this._stopEffect(),P.log(T.DEVICE_CHANGED,"screen"),d.log("Screen capturing started"),this._screenTrack=a,this._mediaSettings.isScreenSharingEnabled=!0,this._mediaSettings.isFastScreenSharingEnabled=e,l.consumerScreenTrack||(this._videoStatusOnScreenCapturingEnabled=this._mediaSettings.isVideoEnabled,this._mediaSettings.isVideoEnabled=!0,this._sendVideoTrack=l.consumerScreenDataChannel?b.getBlackMediaTrack(l.videoMinWidth,l.videoMinHeight):a,await this._replaceLocalTrack(a,this._sendVideoTrack)),l.consumerFastScreenShare&&this._mediaSettings.isFastScreenSharingEnabled&&(a.contentHint="motion",this._screenShareTrack=a),i.getAudioTracks().length>0){let s=i.getAudioTracks()[0];s.contentHint="music",this._audioShareTrack=s,await this._replaceLocalTrack(s),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(T.ERROR,"screen"),d.warn("Screen capturing failed",a),a}}async _disableScreenCapture(){this._sendVideoTrack&&(this._sendVideoTrack.stop(),this._sendVideoTrack=null),this._screenTrack&&(this._screenTrack.stop(),this._screenTrack=null),this._screenShareTrack&&(this._screenShareTrack.stop(),this._screenShareTrack=this.getBlackScreenShareTrack()),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(!l.audioEffects||!this._audioEffectParams)return l.audioEffects?.pause(),this._micAudioTrack;l.audioEffects.isInitialized||await l.audioEffects.init(),l.audioEffects.resume(),l.audioEffects.setEffects(this._audioEffectParams.effects,this._audioEffectParams.isPreset),l.audioEffects.setSource(this._micAudioTrack);let e=l.audioEffects.outputStream.getAudioTracks()[0];return(!this._audioEffectsTrack||this._audioEffectsTrack.id!==e.id)&&(this._audioEffectsTrack=e),this._audioEffectsTrack}getSilentAudioShareTrack(){let e=b.getSilentMediaTrack();return e.contentHint="music",e.stop(),e}getBlackScreenShareTrack(){let e=b.getBlackMediaTrack();return e.contentHint="motion",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(l.videoEffects),!l.videoEffects)return t;try{return l.videoEffects.setEffect(e,t)}catch(i){return d.warn("Video effect failed",i),t}}_stopEffect(){if(l.videoEffects)try{l.videoEffects.stopEffect()}catch(e){d.warn("Video effect failed",e)}}destroy(){this._destroyDeviceChangeListener(),l.videoEffects&&(this._effect=null,l.videoEffects.destroy()),l.audioEffects&&l.audioEffects.destroy(),this._stream&&(di(this._stream),this._stream=null),this._cameraVideoTrack?.stop(),this._micAudioTrack?.stop(),this._audioEffectsTrack?.stop(),this._disableScreenCapture(),b.getAudioContext()?.suspend().catch(t=>d.error(t)),this._videoEffectsFpsLimiter?.destroy()}async toggleScreenCapturing(e){if(e.captureScreen){await this._changeScreen(e.fastScreenSharing,e.captureAudio);return}return l.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;l.consumerScreenTrack||await this._disableScreenCapture(),this._cameraVideoTrack?.stop();let t;if(e){let i=await b._getUserVideo(!!this._effect,this._frameRate);this._cameraVideoTrack=i.getVideoTracks()[0],t=await this._setEffect(this._effect,this._cameraVideoTrack)}else t=b.getBlackMediaTrack(l.videoMinWidth,l.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=async(i,a)=>{await this._replaceLocalTrack(i),this._mediaSettings.isAudioEnabled=a,this._triggerEvent("SOURCE_CHANGED",{kind:"audio"})};if(e)try{let i=await b.getUserAudio();this._micAudioTrack=i.getAudioTracks()[0],t(await this._applyAudioEffect(),!0)}catch(i){throw l.audioEffects?.pause(),t(b.getSilentMediaTrack(),!1),typeof i=="string"?new Error(i):i}else l.audioEffects?.pause(),t(b.getSilentMediaTrack(),!1)}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(!l.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:l.noiseSuppression})}async videoEffect(e){if(!l.videoEffects)throw new Error("Video Effects library is not set");if(!l.consumerScreenTrack&&this._mediaSettings.isScreenSharingEnabled)throw new Error("Can't apply effect to screensharing");if(P.log(T.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(),s=new MediaStream([a]);throw await this._changeVideoInput(s),i}}}async audioEffect(e){if(!l.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||!I.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(),s=new MediaStream([a]);throw await this._changeAudioInput(s),i}}}getAudioShareTrack(){return this._audioShareTrack}handleVideoEffectsLowFps(e){this._mediaSettings.isVideoEnabled&&this._cameraVideoTrack&&e<l.videoFrameRate&&this._applyVideoConstraints(this._cameraVideoTrack).catch(t=>{d.warn("MediaSource handleVideoEffectsLowFps error",t)})}get _frameRate(){let e=this._videoEffectsFpsLimiter?.fpsLimit??l.videoFrameRate;return this._effect?Math.min(e,l.videoFrameRate):void 0}async _applyVideoConstraints(e,t){await Ni(e,{width:this._effect?l.videoEffectMaxWidth:l.videoMaxWidth,height:this._effect?l.videoEffectMaxHeight:l.videoMaxHeight,...this._frameRate&&{frameRate:{ideal:this._frameRate}},...t})}getScreenShareTrack(){return this._screenShareTrack}};var li=class{constructor(){c(this,"_cameraPermissionStatus");c(this,"_microphonePermissionStatus");c(this,"_listener")}static isSupported(){return b.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){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 Nr=(u=>(u.WAITING_HALL="WAITING_HALL",u.WAITING="WAITING",u.CONNECTING="CONNECTING",u.CONNECTED="CONNECTED",u.RECONNECT="RECONNECT",u.ERROR="ERROR",u.HANGUP="HANGUP",u.PERMISSIONS="PERMISSIONS",u))(Nr||{});function V(n,...r){let e=l.get(n);typeof e=="function"&&setTimeout(e,0,...r)}function pe(n,r,...e){if(l.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 Ee(n){return Object.assign({},n)}function Ct(n){return n.slice()}var xr;(lc=>{function n(S,A){V("onLocalStream",S,Ee(A))}lc.onLocalStream=n;function r(S,A){V("onScreenStream",S,Ee(A))}lc.onScreenStream=r;function e(S,A){V("onVmojiStream",S,Ee(A))}lc.onVmojiStream=e;function t(S){V("onVmojiError",S)}lc.onVmojiError=t;function i(S,A){V("onLocalStreamUpdate",Ee(S),A)}lc.onLocalStreamUpdate=i;function a(S){d.debug("Local status:",S),V("onLocalStatus",S)}lc.onLocalStatus=a;function s(S,A){pe("onRemoteStream",S,A)}lc.onRemoteStream=s;function o(S,A){pe("onRemoteLive",S,A)}lc.onRemoteLive=o;function u(S,A){pe("onLocalLive",S,A)}lc.onLocalLive=u;function p(S,A){pe("onRemoteLiveUpdate",S,A)}lc.onRemoteLiveUpdate=p;function m(S,A){pe("onLocalLiveUpdate",S,A)}lc.onLocalLiveUpdate=m;function h(S,A){pe("onRemoteScreenStream",S,A)}lc.onRemoteScreenStream=h;function R(S,A){pe("onRemoteVmojiStream",S,A)}lc.onRemoteVmojiStream=R;function M(S,A,K){pe("onRemoteStreamSuspended",S,A,K)}lc.onRemoteStreamSuspended=M;function w(S,A,K,Oe,ht){pe("onConversation",S,Ee(A),Ee(K),Oe,ht)}lc.onConversation=w;function j(S){S&&V("onConversationParticipantListChunk",S)}lc.onConversationParticipantListChunk=j;function z(S,A,K){pe("onRemoteMediaSettings",S,Ee(A),K)}lc.onRemoteMediaSettings=z;function ae(S,A){pe("onLocalMediaSettings",S,Ee(A))}lc.onLocalMediaSettings=ae;function ve(S,A,K){pe("onRemoteSharedMovieInfo",S,Ee(A),K)}lc.onRemoteSharedMovieInfo=ve;function ye(S,A,K){pe("onRemoteSharedMovieStoppedInfo",S,Ee(A),K)}lc.onRemoteSharedMovieStoppedInfo=ye;function X(S,A,K){pe("onLocalSharedMovieInfo",S,Ee(A),K)}lc.onLocalSharedMovieInfo=X;function be(S,A,K){pe("onLocalSharedMovieStoppedInfo",S,Ee(A),K)}lc.onLocalSharedMovieStoppedInfo=be;function Me(S,A,K){pe("onRemoteSharedUrl",S,A,K)}lc.onRemoteSharedUrl=Me;function Zt(S,A){pe("onParticipantAdded",S,A)}lc.onParticipantAdded=Zt;function na(S,A){pe("onParticipantJoined",S,A)}lc.onParticipantJoined=na;function sa(S){V("onLocalParticipantState",Ee(S))}lc.onLocalParticipantState=sa;function Z(S,A,K){pe("onRemoteParticipantState",S,Ee(A),K)}lc.onRemoteParticipantState=Z;function ei(S,A){V("onRemoteParticipantsState",S,A)}lc.onRemoteParticipantsState=ei;function oa(S,A,K=null){d.debug("Remote status:",A,S),pe("onRemoteStatus",S,A,K)}lc.onRemoteStatus=oa;function ca(){V("onPermissionsRequested")}lc.onPermissionsRequested=ca;function da(S,A){V("onPermissionsError",S,A)}lc.onPermissionsError=da;function la(S,A){pe("onRemoteRemoved",S,A)}lc.onRemoteRemoved=la;function pa(S,A,K){V("onCallState",S,A,Ee(K))}lc.onCallState=pa;function bi(S,A){V("onDeviceSwitched",S,A)}lc.onDeviceSwitched=bi;function Er(S,A,K,Oe=!1,ht=!1,Rr=null,Cr=null,Yn,Sa,Qn=null){let Xn=Sa?Ct(Sa):void 0;V("onMuteStates",Ee(S),Ct(A),Ct(K),Oe,ht,Rr,Cr,Yn,Xn,Qn)}lc.onMuteStates=Er;function ua(S,A,K=!1){pe("onRolesChanged",S,Ct(A),K)}lc.onRolesChanged=ua;function ma(S,A=!1){V("onLocalRolesChanged",Ct(S),A)}lc.onLocalRolesChanged=ma;function ha(S,A,K,Oe){pe("onPinnedParticipant",S,A,K,Oe)}lc.onPinnedParticipant=ha;function Tr(S,A){V("onLocalPin",S,A)}lc.onLocalPin=Tr;function ga(S){V("onOptionsChanged",Ct(S))}lc.onOptionsChanged=ga;function _a(){V("onCallAccepted")}lc.onCallAccepted=_a;function me(S){pe("onAcceptedCall",S)}lc.onAcceptedCall=me;function F(){V("onRateNeeded")}lc.onRateNeeded=F;function ee(S){pe("onSpeakerChanged",S)}lc.onSpeakerChanged=ee;function ne(S){V("onVolumesDetected",Ct(S))}lc.onVolumesDetected=ne;function ue(S,A){V("onLocalVolume",S,A)}lc.onLocalVolume=ue;function et(S,A){V("onJoinStatus",S,A)}lc.onJoinStatus=et;function Fe(S,A){V("onHangup",S,A)}lc.onHangup=Fe;function g(S){V("onMultipartyChatCreated",Ee(S))}lc.onMultipartyChatCreated=g;function C(){V("onDeviceChange")}lc.onDeviceChange=C;function y(S){V("onFingerprintChange",S)}lc.onFingerprintChange=y;function v(){V("onTokenExpired")}lc.onTokenExpired=v;function f(S,A,K=!1){V("onChatMessage",S,A,K)}lc.onChatMessage=f;function D(S,A,K=!1){V("onCustomData",S,A,K)}lc.onCustomData=D;function W(S,A,K,Oe,ht,Rr,Cr=null){V("onRecordStarted",S,A,K,Oe,ht,Rr,Cr)}lc.onRecordStarted=W;function B(S=null){V("onRecordStopped",S)}lc.onRecordStopped=B;function Y(S){V("onLocalNetworkStatusChanged",S)}lc.onLocalNetworkStatusChanged=Y;function ge(S){V("onNetworkStatusChanged",S)}lc.onNetworkStatusChanged=ge;function x(S,...A){V("onDebugMessage",S,...A)}lc.onDebugMessage=x;function fe(S,A){let K=Object.assign({},S,{memory:A});V("onStatistics",K)}lc.onStatistics=fe;function he(){V("onAutoplayError")}lc.onAutoplayError=he;function Se(S,A,K,Oe,ht){V("onChatRoomUpdated",S,A,K,Oe,ht)}lc.onChatRoomUpdated=Se;function de(S){V("onPromoted",S)}lc.onPromoted=de;function De(S){V("onRemoteMixedAudioStream",S)}lc.onRemoteMixedAudioStream=De;function mt(S){V("onJoinLinkChanged",S)}lc.onJoinLinkChanged=mt;function Ot(S){V("onRoomsUpdated",S)}lc.onRoomsUpdated=Ot;function ze(S,A,K,Oe){V("onRoomUpdated",S,A,K,Oe)}lc.onRoomUpdated=ze;function ti(S){V("onRoomParticipantsUpdated",S)}lc.onRoomParticipantsUpdated=ti;function fa(S){V("onRoomSwitched",S)}lc.onRoomSwitched=fa;function Qo(S){V("onRoomStart",S)}lc.onRoomStart=Qo;function Xo(S,A=null){V("onFeedback",S,A)}lc.onFeedback=Xo;function Zo(S){V("onFeaturesPerRoleChanged",S)}lc.onFeaturesPerRoleChanged=Zo;function ec(S){V("onParticipantVmojiUpdate",S)}lc.onParticipantVmojiUpdate=ec;function tc(S,A){V("onAsrSet",S,A)}lc.onAsrSet=tc;function ic(S,A,K){V("onAsrStarted",S,A,K)}lc.onAsrStarted=ic;function rc(S){V("onAsrStopped",S)}lc.onAsrStopped=rc;function ac(S,A,K,Oe){V("onAsrTranscription",S,A,K,Oe)}lc.onAsrTranscription=ac;function nc(S,A){V("onParticipantIdChanged",S,A)}lc.onParticipantIdChanged=nc;function sc(S){V("onVideoSuspendSuggest",S)}lc.onVideoSuspendSuggest=sc;function oc(S){V("onSignalingMessage",typeof S=="string"?S:Ee(S))}lc.onSignalingMessage=oc;function cc(S){V("onPromotionApproved",S)}lc.onPromotionApproved=cc;function dc(){V("onPeerRegistered")}lc.onPeerRegistered=dc})(xr||(xr={}));var E=xr;var Ur="_okcls_",Vt=(()=>{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 xs(n){let r=Vt?Vt.getItem(Ur+n):null;if(r===null)return null;try{return JSON.parse(r)}catch{return null}}function Ns(n,r){try{Vt&&Vt.setItem(Ur+n,JSON.stringify(r))}catch{}}function Ls(n){Vt&&Vt.removeItem(Ur+n)}var Lr;(t=>{function n(i){return xs(i)||null}t.get=n;function r(i,a){Ns(i,a)}t.set=r;function e(i){Ls(i)}t.remove=e})(Lr||(Lr={}));var ot=Lr;var Ht=null,Bi=null,Wi=null,$i=[],qi=[],Ki=[],Ge=null,We=null,zi=null,Ji=!1,Yi=!1,Fi,jt,Vi,Br=null,Fr="",ji=[],Hi=null,Ka=navigator.appVersion,Us=navigator.appName,xe=navigator.userAgent,tt={},Rt=(e=>(e.USER="user",e.ENVIRONMENT="environment",e))(Rt||{});(r=>{function n(e){return Object.values(r).includes(e)}r.contains=n})(Rt||(Rt={}));var yt=class{constructor(r,e=!1,t=l.videoMaxWidth,i=l.videoMaxHeight,a=l.videoFrameRate){c(this,"audio");c(this,"video");c(this,"needVideo");c(this,"lastSimplifyWasReached");c(this,"supportedConstraints");c(this,"isVideoRequested",()=>this.needVideo);this.supportedConstraints=navigator.mediaDevices.getSupportedConstraints();let s=!1;if(r){s={noiseSuppression:l.noiseSuppression,echoCancellation:!0,autoGainControl:!0};let u=Te.getMicrophones(),p,m;if(We&&(m=We.groupId,p=We.deviceId),typeof r=="string")m=u.find(R=>R.deviceId===r)?.groupId,p=r;else if(!We&&Te.os()==="MacOS"&&u.find(h=>h.label.includes("iPhone"))){let h=u.find(R=>!R.label.includes("Virtual")&&!R.label.includes("iPhone"));h&&(m=h.groupId,p=h.deviceId)}m&&this.supportedConstraints.groupId?s.groupId={exact:m}:p&&(s.deviceId={exact:p})}let o=!1;if(e){o={width:{min:l.videoMinWidth,max:t,ideal:t},height:{min:l.videoMinHeight,max:i,ideal:i},aspectRatio:{ideal:l.videoAspectRatio},frameRate:{ideal:a}};let u=Te.getCameras(),p,m;if(Ge&&(m=Ge.groupId,p=Ge.deviceId),typeof e=="string")m=u.find(R=>R.deviceId===e)?.groupId,p=e;else if(!Ge&&Te.os()==="MacOS"&&u.find(h=>h.label.includes("iPhone"))){let h=u.find(R=>!R.label.includes("Virtual")&&!R.label.includes("iPhone"));h&&(m=h.groupId,p=h.deviceId)}m&&this.supportedConstraints.groupId?o.groupId={exact:m}:p&&(o.deviceId={exact:p}),l.videoFacingMode&&(o.facingMode={ideal:l.videoFacingMode},delete o.deviceId,delete o.groupId)}this.audio=s,this.video=o,this.needVideo=!!o,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 yt{constructor(e,t,i,a){super(!1,!0);c(this,"captureController");if(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=e,this.video.height=t,this.video.frameRate=i,this.video.displaySurface=l.displaySurface,Te.browserName()==="Safari"){let s=Number(Te.browserVersion());s===16?(this.video.width={max:e},this.video.height={max:t}):s===17&&(delete this.video.width,delete this.video.height)}a&&(this.audio={noiseSuppression:!1,echoCancellation:!1,autoGainControl:!1})}getNative(){return Object.assign(super.getNative(),{systemAudio:"exclude",controller:this.captureController})}},Pt=class Pt{constructor(){c(this,"_lockId",Math.round(Math.random()*99998)+1)}busy(){if(Pt._lockId)throw P.log(T.ERROR,"change_device"),d.warn("Device change failed: MediaSource is busy"),new Error("MediaSource is busy");Pt._lockId=this._lockId}free(){Pt._lockId===this._lockId&&(Pt._lockId=0)}};c(Pt,"_lockId",0);var Qi=Pt;async function $a(){Yi=!1,Ji=!1,Ht=null;let n={camera:Te.getSavedCamera(),microphone:Te.getSavedMicrophone(),output:Te.getSavedOutput()};await jr(),Bs("devicechange",n),E.onDeviceChange()}function Bs(n,...r){if(tt[n])for(let e of tt[n])e(...r)}async function jr(){return Ht||(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices?[]:(!Bi&&navigator.mediaDevices.addEventListener&&(Bi=I.debounce($a,l.enumerateDevicesDelay),navigator.mediaDevices.addEventListener("devicechange",Bi)),!Wi&&li.isSupported()&&(Wi=new li,await Wi.init((n,r)=>{switch(r){case"denied":case"prompt":Bi?.();break}})),Ht=navigator.mediaDevices.enumerateDevices().then(n=>{$i=n.filter(i=>i.kind==="videoinput"?(i.label&&(Ji=!0),!0):!1),qi=n.filter(i=>i.kind==="audioinput"?(i.label?Yi=!0:Te.isMobile()&&Te.browserName()==="Firefox"&&(Yi=Ji),!0):!1),Ki=n.filter(i=>i.kind==="audiooutput");let r=Ge?.deviceId??ot.get("videoinput"),e=We?.deviceId??ot.get("audioinput"),t=zi?.deviceId??ot.get("audiooutput");return Ge=$i.find(i=>i.deviceId===r)||null,We=qi.find(i=>i.deviceId===e)||null,zi=Ki.find(i=>i.deviceId===t)||Ki[0]||null,Ht=Promise.resolve(n),n}).catch(()=>(Ht=null,[]))))}function Fs(n){if(Ge&&We)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=>{!We&&e.kind==="audio"?We=r(Te.getMicrophones(),e):!Ge&&e.kind==="video"&&(Ge=r(Te.getCameras(),e))})}async function pi(n,r){d.debug("Try to get media",JSON.parse(JSON.stringify(n.getNative())));let e=(!n.isVideo()||Te.hasCameraPermission())&&(!n.isAudio()||Te.hasMicrophonePermission());!e&&!r&&E.onPermissionsRequested();let t=new Qi;try{t.busy();let i=await navigator.mediaDevices.getUserMedia(n.getNative());return t.free(),e||await $a(),Fs(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()?re.CAMERA_PERMISSION:re.MIC_PERMISSION;break;case"OverconstrainedError":r=re.OVERCONSTRAINED;break;case"TypeError":r=re.UNKNOWN;break;case"AbortError":case"NotReadableError":r=n.isVideoRequested()?re.CAMERA_ACCESS:re.MIC_ACCESS;break;case"Error":if(i.message==="MediaSource is busy"){r=n.isVideoRequested()?re.CAMERA_ACCESS:re.MIC_ACCESS;break}}if(n.canSimplify())return pi(n.simplify(),r);let a=r||re.UNKNOWN;throw E.onPermissionsError(a,i),a}}async function Vs(n){d.debug("Try to get screen",JSON.parse(JSON.stringify(n.getNative())));let r=new Qi;try{r.busy();let e=await navigator.mediaDevices.getDisplayMedia(n.getNative()),t=e?.getVideoTracks()[0];if(t){let i=t.getSettings()?.displaySurface;if(d.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){d.warn("Failed to set focus behavior",a)}}return e}catch(e){switch(e.name){case"PermissionDeniedError":case"NotAllowedError":case"SecurityError":throw re.SCREEN_PERMISSION;default:throw re.SCREEN_ACCESS}}finally{r.free()}}function Gi(){return ji.length||(ji=(()=>{let n,r=!1,e=0,t="0",i=xe.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];if(/trident/i.test(i[1]))return n=/\brv[ :]+(\d+)/g.exec(xe),["IE",n&&n[1]||"Unknown",r,e,t];if(i[1]==="Safari"){if(n=xe.match(/\bEdge\/(\d+)/),n)return["Edge",n[1]||"Unknown",r,e,t];if(n=xe.match(/\bCriOS\/(\d+)/),n)return["Chrome",n[1],!0,Number(n[1]),t];if(n=xe.match(/\bFxiOS\/(\d+)/),n)return["Firefox",n[1],!1,e,t];if(n=xe.match(/\bYaBrowser\/(\d+)/),n)return["Yandex",n[1],!1,e,t];if(n=xe.match(/\bOPT\/(\d+)/),n)return["Opera",n[1],!1,e,t]}if(i[1]==="Chrome"){if(r=!0,e=Number(i[2]),n=xe.match(/\bOPR\/(\d+)/),n)return["Opera",n[1]||"Unknown",r,e,t];if(n=xe.match(/\bYaBrowser\/(\d+)/),n)return["Yandex",n[1]||"Unknown",r,e,t];if(n=xe.match(/\bSferum\/((\d+)(?:\.\d+)*)/),n)return["Sferum",n[1]||"Unknown",r,e,t];if(n=xe.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=xe.match(/version\/(\d+)(?:(?:\.)(\d+))?/i),n&&n[2]!==void 0&&(t=n[2]),[i[2]?i[1]:Us,n&&n[1]||i[2]||Ka,r,e,t]})()),ji}var Te;(me=>{async function n(){await jr()}me.init=n;function r(){return $i}me.getCameras=r;function e(){return qi}me.getMicrophones=e;function t(){return Ki}me.getOutput=t;function i(){return $i.length>0}me.hasCamera=i;function a(){return qi.length>0}me.hasMicrophone=a;function s(){return Ge}me.getSavedCamera=s;function o(){return We}me.getSavedMicrophone=o;function u(){return zi}me.getSavedOutput=u;function p(){return l.videoFacingMode}me.getVideoFacingMode=p;function m(){return Ji}me.hasCameraPermission=m;function h(){return Yi}me.hasMicrophonePermission=h;function R(){return Wi?.getPermissionState("microphone")??null}me.getMicrophonePermissionState=R;function M(F=!1){return h()?i()&&F?m():!0:!1}me.hasPermissions=M;async function w(F=!1,ee=!0,ne=!0){let ue=a()&&ee,et=i()&&F,Fe;if(!ue&&!et)Fe=new MediaStream;else try{Fe=await pi(new yt(ue,et))}catch{Fe=new MediaStream}return!Fe.getVideoTracks().length&&ne&&Fe.addTrack(me.getBlackMediaTrack()),!Fe.getAudioTracks().length&&ne&&Fe.addTrack(me.getSilentMediaTrack()),Fe}me.getUserMedia=w;async function j(F,ee){let ne=F&&!l.consumerFastScreenShare?l.fastScreenShareWidth:window.screen.width,ue=F&&!l.consumerFastScreenShare?l.fastScreenShareHeight:window.screen.height,et=l.getScreenFrameRate(F);return Vs(new Vr(ne,ue,et,ee))}me.getScreenMedia=j;async function z(F=!1,ee){let ne=F?l.videoEffectMaxWidth:l.videoMaxWidth,ue=F?l.videoEffectMaxHeight:l.videoMaxHeight;return pi(new yt(!1,!0,ne,ue,ee))}me._getUserVideo=z;async function ae(F,ee){let ne=ee?.width||l.videoMaxWidth,ue=ee?.height||l.videoMaxHeight;return pi(new yt(!1,F||!0,ne,ue))}me.getUserVideo=ae;async function ve(F){return pi(new yt(F||!0,!1))}me.getUserAudio=ve;async function ye(F,ee){let[ne]=F.getVideoTracks();if(!ne)throw new Error("Video track not found in stream");return Ni(ne,ee)}me.setResolution=ye;async function X(F,ee){let ue=(await jr()).find(et=>et.kind===F&&et.deviceId===ee);return ue?(F==="videoinput"?Ge=ue:F==="audioinput"?We=ue:F==="audiooutput"&&(zi=ue),ot.set(F,ee),ue):null}me._saveDeviceId=X;function be(){if(!Vi||Vi.readyState==="ended"){let F=me.getAudioContext(),ee=F.createMediaStreamDestination(),ne=F.createGain();ne.gain.value=1e-5,ne.connect(ee),ne.connect(F.destination);let ue=F.createOscillator();ue.type="sine",ue.frequency.value=0,ue.connect(ne),ue.start(),Vi=ee.stream.getAudioTracks()[0]}return Object.assign(Vi.clone(),{enabled:!1})}me.getSilentMediaTrack=be;function Me(F=l.videoMinWidth,ee=l.videoMinHeight){jt||(jt=document.createElement("canvas")),jt.width=F,jt.height=ee;let ne=jt.getContext("2d");return ne.rect(0,0,F,ee),ne.fillStyle="black",ne.fill(),(!Fi||Fi.readyState==="ended")&&(Fi=jt.captureStream(l.videoFrameRate).getVideoTracks()[0]),Object.assign(Fi.clone(),{enabled:!1})}me.getBlackMediaTrack=Me;function Zt(){if(bi()==="Edge"&&Number(Er())<70)return!1;try{let F=window;return"mediaDevices"in F.navigator&&"getUserMedia"in F.navigator.mediaDevices&&F.RTCPeerConnection&&F.RTCIceCandidate&&F.RTCSessionDescription&&F.HTMLCanvasElement&&F.HTMLCanvasElement.prototype.captureStream&&F.RTCRtpSender&&F.RTCRtpSender.prototype.replaceTrack&&F.RTCRtpSender.prototype.getParameters&&"sendBeacon"in navigator&&!0||!1}catch{return!1}}me.isBrowserSupported=Zt;function na(){return!!navigator.mediaDevices.getDisplayMedia}me.isScreenCapturingSupported=na;function sa(){let F=me.browserName()==="Safari"&&me.browserVersion()==="15"&&me.browserSubVersion()==="1",ee=me.browserName()==="Opera",ne=me.browserName()==="Yandex";return F||ee||ne}me.isBrokenH264Decoder=sa;function Z(){return me.browserName()==="Yandex"&&me.os()==="Windows"||l.simulcast}me.isBrokenVP9Encoder=Z;function ei(){return me.browserName()==="Safari"&&Number(me.browserVersion())===17&&[4,5,6].includes(Number(me.browserSubVersion()))}me.isBrokenVP9Decoder=ei;function oa(){return me.browserName()==="Firefox"&&Number(me.browserVersion())<60}me.isOldDataChannelDescription=oa;function ca(){return!(me.baseChromeVersion()&&me.isMobile())}me.canPreferH264=ca;function da(){return!(me.browserName()==="Firefox"||me.browserName()==="Safari")}me.isSimulcastSupportedByBrowser=da;function la(){return Fr||(Fr=(()=>{let F={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 F)if(Object.hasOwn(F,ee)&&F[ee].test(xe))return ee;return"Unknown"})()),Fr}me.os=la;function pa(){return Br===null&&(Br=/Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(Ka)),Br}me.isMobile=pa;function bi(){return Gi()[0]}me.browserName=bi;function Er(){return Gi()[1]}me.browserVersion=Er;function ua(){return Gi()[3]}me.baseChromeVersion=ua;function ma(){return Hi||(Hi=new(window.AudioContext||window.webkitAudioContext)),Hi.resume().catch(()=>{d.warn("Failed to resume AudioContext")}),Hi}me.getAudioContext=ma;function ha(){return Gi()[4]}me.browserSubVersion=ha;function Tr(){return me.baseChromeVersion()>=105&&!me.isMobile()}me.isAudioShareSupported=Tr;function ga(F,ee){tt[F]||(tt[F]=[]),tt[F].push(ee)}me.addEventListener=ga;function _a(F,ee){if(tt[F])if(!ee)delete tt[F];else{let ne=tt[F].indexOf(ee);ne>-1&&tt[F].splice(ne,1)}}me.removeEventListener=_a})(Te||(Te={}));var b=Te;var Le=class Le{static get startTime(){return Le._list[0]?.t||0}static get endTime(){let r=Le._list;return r[r.length-1]?.t||0}static startSession(){Le._list=[]}static get conversationId(){return Le._conversationId}static set conversationId(r){Le._conversationId=r}static add(r){Le._list.push(r)}static _createContextLogs(){let r=[[`Calls SDK ${l.sdkVersion}`,l.toJSON()],["UserAgent:",navigator.userAgent],["Screen resolution:",`${window.screen.width}x${window.screen.height}`],["Permissions:",`Camera: ${b.hasCameraPermission()}, Mic: ${b.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=Le._list;return r.length===0?[]:[...Le._createContextLogs(),...r]}};c(Le,"_list",[]),c(Le,"_conversationId",null);var we=Le;var Xi=class{constructor(){c(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,qa=512*1024,Gt=100*1024,js=5,Wr="_okcls_logs_session_",Hs=3e4,Kr=class{constructor(){c(this,"_items",[]);c(this,"_itemsSize",0);c(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){za(e);continue}let i=Ya(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(Gt)}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&&(za(r.key),this._itemsSize-=r.size)}cleanup(r){for(;this.length&&(this.size>Hr||this.length>js-1||this.size+r>this.available);)this.deleteOldestItem()}};function Ja(){return`${Wr}${Date.now()}`}function Ya(n){return new Blob([n]).size}function za(n){try{window.localStorage.removeItem(n)}catch(r){console.error("Failed to remove log from storage",r)}}function Zi(){let n=ct.toString();if(!Ae.available||!n)return;let r=Ya(n);if(r>qa){ct.bisect(),Zi();return}Ae.cleanup(Gt+r);try{window.localStorage.setItem(er,n)}catch(e){if(console.warn("Failed to write log to storage",e),Ae.storageSize=Ae.size+r,Ae.cleanup(Gt+r),Ae.available>=Gt+r){Zi();return}if(r>Gt){ct.bisect(),Zi();return}Ae.storageSize=0;return}r>qa&&(Ae.add(er,r),er=Ja(),ct.clear(),Ae.cleanup(Gt))}function $r(){!Ae.available||!ct.length||Zi()}function Gs(n=!1){let r=[];try{let i=window.localStorage;for(let s of Ae.items){let o=i.getItem(s.key);r.push(o)}let a=ct.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 Ws(e,t),t}function Ws(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 Qa(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"})};ct.push(t),we.add(t),Gr||(Gr=window.setTimeout(()=>{Gr=null,$r()},Hs))}function qr(){Ae||(Ae=new Kr,ct=new Xi,er=Ja(),window.addEventListener("beforeunload",$r))}var Ae,ct,er,Gr=null;window.__VKCallsSDKLogs__=(n=!1)=>(Ae||qr(),$r(),Gs(n));var Xa=(i=>(i.DEBUG="DEBUG",i.LOG="LOG",i.WARN="WARN",i.ERROR="ERROR",i))(Xa||{}),zr;(X=>{let n="📞",r=(be,...Me)=>{E.onDebugMessage(be,...Me)},e=!1,t=(be,Me)=>(...Zt)=>{be(...Zt),Qa(Me,Zt)},i=console.debug.bind(console,n),a=console.log.bind(console,n),s=console.warn.bind(console,n),o=console.error.bind(console,n),u=r.bind(null,"DEBUG"),p=r.bind(null,"LOG"),m=r.bind(null,"WARN"),h=r.bind(null,"ERROR");X.debug=u,X.log=p,X.warn=m,X.error=h;function z(){return e}X.enabled=z;function ae(be){e=be,l.debugLog&&qr(),be?(X.debug=l.debugLog?t(i,"DEBUG"):i,X.log=l.debugLog?t(a,"LOG"):a,X.warn=l.debugLog?t(s,"WARN"):s,X.error=l.debugLog?t(o,"ERROR"):o):(X.debug=l.debugLog?t(u,"DEBUG"):u,X.log=l.debugLog?t(p,"LOG"):p,X.warn=l.debugLog?t(m,"WARN"):m,X.error=l.debugLog?t(h,"ERROR"):h)}X.toggle=ae;function ve(be,...Me){switch(be){case"DEBUG":(0,X.debug)(...Me);break;case"LOG":(0,X.log)(...Me);break;case"WARN":(0,X.warn)(...Me);break;case"ERROR":(0,X.error)(...Me);break}}X.send=ve;function ye(be,...Me){}X.test=ye})(zr||(zr={}));var d=zr;var $s="kf";function Wt(n){return n.stopStream}function Jr(n){return n.keyFrameRequested}function Za(n){if(Wt(n))return"ss";if(Jr(n))return $s;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 Kt=(s=>(s.CAMERA="CAMERA",s.SCREEN="SCREEN",s.STREAM="STREAM",s.MOVIE="MOVIE",s.ANIMOJI="ANIMOJI",s.SHARED_URL="SHARED_URL",s))(Kt||{}),en="s",tn="m";function Ye(n){return n.participantId+(n.mediaType?Nt+en+n.mediaType:"")+(n.streamName?Nt+tn+n.streamName:"")}function $t(n){let r=n.split(Nt),e=r.shift();if(!e)throw new Error("Illegal stream description: "+n);let t=null,i,a=0;for(let o of r)switch(o.charAt(0)){case en:t=qs(o.slice(1));break;case tn:i=o.slice(1);break;case wi:a=Number.parseInt(o.slice(1),10);break;default:throw new Error("Unexpected parameter type "+o.charAt(0)+" in stream description "+n)}return{participantId:I.compose(e,a),mediaType:t,streamName:i}}function qs(n){for(let r of Object.keys(Kt))if(r===n)return Kt[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),zs(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,s=t%4294967296|0;i&&(s=~s+1|0,a=s===0?~a+1|0:~a),n.setUint32(r,a),n.setUint32(r+4,s),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 zs(n){return n.buffer!==void 0}function tr(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 nn=0,sn=1,Ys=2,Qs=3,Xs=4,Zs=5,eo=6,to=7,io=0,ro=1,ao=2,it=0,no=0,so=0,oo=1,ir=class{constructor(){c(this,"participantIdRegistry",null)}setParticipantIdRegistry(r){this.participantIdRegistry=r}serializeUpdateDisplayLayout(r,e){let t=Qe();H.enc(t,nn),H.enc(t,it),H.enc(t,r),bt.enc(t,null);let i=[];for(let a in e)Object.hasOwn(e,a)&&this.writeLayout(e,a,i);return rn.enc(t,i),bt.enc(t,null),t.ui8array().buffer}writeLayout(r,e,t){let i=r[e],a=Qe();if(this.writeStreamDesc(e,a),Wt(i))H.enc(a,ro);else if(Jr(i))H.enc(a,ao);else if(H.enc(a,io),i.priority!==void 0?H.enc(a,i.priority):bt.enc(a,null),i.width!==void 0&&i.height!==void 0?(H.enc(a,Math.round(i.width)),H.enc(a,Math.round(i.height))):(bt.enc(a,null),bt.enc(a,null)),i.fit!==void 0)switch(i.fit){case"cv":H.enc(a,so);break;case"cn":H.enc(a,oo);break;default:bt.enc(a,null)}else bt.enc(a,null);t.push(a.ui8array().buffer)}writeStreamDesc(r,e){if(this.participantIdRegistry){let t=this.participantIdRegistry.getCompactId(r);if(t!==void 0){H.enc(e,t);return}}an.enc(e,r)}serializePerfStatReport(r,e){let t=Qe();return H.enc(t,sn),H.enc(t,it),H.enc(t,r),H.enc(t,e.framesDecoded),H.enc(t,e.framesReceived),t.ui8array().buffer}serializeSharingStatReport(r,e){let t=Qe();return H.enc(t,Ys),H.enc(t,it),H.enc(t,r),H.enc(t,e.minDelay),H.enc(t,e.maxDelay),H.enc(t,e.avgDelay),H.enc(t,e.largeDelayDuration),t.ui8array().buffer}serializeRequestAsr(r,e){let t=Qe();return H.enc(t,Qs),H.enc(t,it),H.enc(t,r),Yr.enc(t,e.request),t.ui8array().buffer}serializeNetworkStatReport(r,e){let t=Qe();return H.enc(t,Xs),H.enc(t,it),H.enc(t,r),H.enc(t,e.timestamp),H.enc(t,e.sendBitrate),t.ui8array().buffer}serializeEnableVideoSuspend(r,e){let t=Qe();return H.enc(t,Zs),H.enc(t,it),H.enc(t,r),Yr.enc(t,e.enabled),t.ui8array().buffer}serializeEnableVideoSuspendSuggest(r,e){let t=Qe();return H.enc(t,eo),H.enc(t,it),H.enc(t,r),Yr.enc(t,e.enabled),t.ui8array().buffer}serializeChangeSimulcast(r,e){let t=Qe();H.enc(t,to),H.enc(t,it),H.enc(t,r);let i=e.simulcastInfo.streams.length;H.enc(t,e.mediaSource),H.enc(t,i);for(let a of e.simulcastInfo.streams)an.enc(t,a.rid),H.enc(t,a.width),H.enc(t,a.height),H.enc(t,a.fps),H.enc(t,a.bitrate/1e3);return t.ui8array().buffer}async deserializeCommandResponse(r){let e;if(r instanceof Blob){let s="arrayBuffer"in Blob.prototype?await r.arrayBuffer():await Da(r);e=tr(s)}else e=tr(r);let t=H.dec(e),i=H.dec(e);if(i!==it){d.warn("Unsupported version for command type: "+t+", version "+i);return}if(H.dec(e)!==no){d.warn("Error code: "+t+"received for command type: "+t+", version "+i);return}switch(t){case nn:return this.deserializeUpdateDisplayLayoutResponse(e);case sn:return this.deserializeReportPerfStatResponse(e);default:d.warn("unsupported command response commandType: "+t);return}}deserializeUpdateDisplayLayoutResponse(r){let e=H.dec(r),t=rn.dec(r),i={};return t.forEach(a=>{let s=tr(a),o=Js.dec(s);if(typeof o=="string")i[o]=H.dec(s);else{let u=o,p=Ye(this.participantIdRegistry?.getStreamDescription(u));i[p]=H.dec(s)}}),{type:"response",sequence:e,response:N.UPDATE_DISPLAY_LAYOUT.toString(),errorCodeByParticipantId:i}}deserializeReportPerfStatResponse(r){let e=H.dec(r),t=H.dec(r);return{type:"response",sequence:e,response:N.REPORT_PERF_STAT.toString(),estimatedPerformanceIndex:t}}};var on=(i=>(i.START="start",i.ACCEPT="accept",i.JOIN="join",i.RETRY="retry",i))(on||{}),Ke=on;var cn=(t=>(t.NOTIFICATION="NOTIFICATION",t.FAILED="FAILED",t.RECONNECT="RECONNECT",t))(cn||{}),Pe=cn;var dn=(f=>(f.TRANSMITTED_DATA="transmitted-data",f.ACCEPTED_CALL="accepted-call",f.HUNGUP="hungup",f.PARTICIPANT_ADDED="participant-added",f.PARTICIPANT_JOINED="participant-joined",f.CLOSED_CONVERSATION="closed-conversation",f.MEDIA_SETTINGS_CHANGED="media-settings-changed",f.PARTICIPANT_STATE_CHANGED="participant-state-changed",f.PARTICIPANTS_STATE_CHANGED="participants-state-changed",f.RATE_CALL_DATA="rate-call-data",f.FEATURE_SET_CHANGED="feature-set-changed",f.TOPOLOGY_CHANGED="topology-changed",f.PRODUCER_UPDATED="producer-updated",f.CONSUMER_ANSWERED="consumer-answered",f.MULTIPARTY_CHAT_CREATED="multiparty-chat-created",f.FORCE_MEDIA_SETTINGS_CHANGE="force-media-settings-change",f.SETTINGS_UPDATE="settings-update",f.VIDEO_QUALITY_UPDATE="video-quality-update",f.REGISTERED_PEER="registered-peer",f.SWITCH_MICRO="switch-micro",f.RECORD_STARTED="record-started",f.RECORD_STOPPED="record-stopped",f.REALLOC_CON="realloc-con",f.AUDIO_ACTIVITY="audio-activity",f.SPEAKER_CHANGED="speaker-changed",f.STALLED_ACTIVITY="stalled-activity",f.CHAT_MESSAGE="chat-message",f.CUSTOM_DATA="custom-data",f.ROLES_CHANGED="roles-changed",f.MUTE_PARTICIPANT="mute-participant",f.PIN_PARTICIPANT="pin-participant",f.OPTIONS_CHANGED="options-changed",f.NETWORK_STATUS="network-status",f.PARTICIPANT_SOURCES_UPDATE="participant-sources-update",f.PROMOTE_PARTICIPANT="promote-participant",f.CHAT_ROOM_UPDATED="chat-room-updated",f.PROMOTION_APPROVED="promotion-approved",f.JOIN_LINK_CHANGED="join-link-changed",f.FEEDBACK="feedback",f.MOVIE_UPDATE_NOTIFICATION="movie-update-notification",f.MOVIE_SHARE_STARTED="movie-share-started",f.MOVIE_SHARE_STOPPED="movie-share-stopped",f.URL_SHARING_INFO_UPDATED="url-sharing-info-updated",f.ROOM_UPDATED="room-updated",f.ROOMS_UPDATED="rooms-updated",f.ROOM_PARTICIPANTS_UPDATED="room-participants-updated",f.FEATURES_PER_ROLE_CHANGED="features-per-role-changed",f.PARTICIPANT_ANIMOJI_CHANGED="participant-animoji-changed",f.ASR_STARTED="asr-started",f.ASR_STOPPED="asr-stopped",f.DECORATIVE_PARTICIPANT_ID_CHANGED="decorative-participant-id-changed",f.VIDEO_SUSPEND_SUGGEST="video-suspend-suggest",f))(dn||{}),L=dn;var Qr={connected:{wt:T.WEBTRANSPORT_CONNECTED,ws:T.WEBSOCKET_CONNECTED},reconnected:{wt:T.WEBTRANSPORT_RECONNECTED,ws:T.WEBSOCKET_RECONNECTED},failed_pings:{wt:T.WEBTRANSPORT_FAILED_PINGS,ws:T.WEBSOCKET_FAILED_PINGS},failed_exception:{wt:T.WEBTRANSPORT_FAILED_EXCEPTION,ws:T.WEBSOCKET_FAILED_EXCEPTION},timeout:{wt:T.WEBTRANSPORT_TIMEOUT,ws:T.WEBSOCKET_TIMEOUT},restart:{wt:T.WEBTRANSPORT_RESTART,ws:T.WEBSOCKET_RESTART}};import*as Ue from"fflate";var co=63n,lo=16383n;var po=4611686018427387903n,rr=class{encode(r){let e=typeof r=="number"?BigInt(r):r;if(e<=co)return new Uint8Array([Number(e)]);if(e<=lo)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<=po)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")}},ar=class{decode(r){let e=this.getNumBytesForLengthInteger(r);if(e<0)throw new Error("Invalid length prefix");if(r.length<e)return null;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 nr=class{constructor(r){c(this,"encoder");c(this,"compression");c(this,"lengthEncoder");this.encoder=new TextEncoder,this.lengthEncoder=new rr,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 Ue.gzipSync(r);case"deflate":return Ue.zlibSync(r);case"deflate-raw":return Ue.deflateSync(r);default:return r}}},sr=class{constructor(r){c(this,"decoder");c(this,"compression");c(this,"lengthDecoder");c(this,"buffer");c(this,"expectedLength");c(this,"offset");c(this,"lengthPrefixLength");this.decoder=new TextDecoder,this.lengthDecoder=new ar,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");let e=this.lengthDecoder.decode(r.subarray(0,this.lengthPrefixLength));return e===null?null:Number(e)}decompress(r){if(!this.compression)return r;switch(this.compression){case"gzip":return Ue.gunzipSync(r);case"deflate":return Ue.unzlibSync(r);case"deflate-raw":return Ue.inflateSync(r);default:return r}}};var qt=class{constructor(r,e={}){c(this,"webTransport");c(this,"stream",null);c(this,"writer",null);c(this,"reader",null);c(this,"url");c(this,"options");c(this,"compression");c(this,"encoder");c(this,"decoder");c(this,"onopen",null);c(this,"onmessage",null);c(this,"onerror",null);c(this,"onclose",null);c(this,"readyState",WebSocket.CONNECTING);this.url=r,this.options=e,this.readyState=WebSocket.CONNECTING,this.compression=this.getCompressionTypeFromUrl(r),this.encoder=new nr(this.compression),this.decoder=new sr(this.compression),this.connect()}getCompressionTypeFromUrl(r){try{let t=new URL(r).searchParams.get("compression");switch(t){case"gzip":case"deflate":case"deflate-raw":return t;default:return null}}catch(e){return d.log("Exception while parsing compression",e),null}}async connect(){try{this.webTransport=new WebTransport(this.url,{...this.options}),await this.webTransport.ready,d.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){d.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){d.error("[WebTransport] Stream read failed",r),this.readyState=WebSocket.CLOSED,this.onerror?.(new Event("error"))}}async send(r){if(this.readyState!==WebSocket.OPEN){d.warn("[WebTransport] Attempt to send data before webtransport is open");return}if(!this.writer){d.warn("[WebTransport] Attempt to send data before stream is ready");return}try{await this.writer.ready;let e=this.encoder.encode(r);await this.writer.write(e)}catch(e){d.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,this.reader?.cancel();try{this.webTransport.close()}catch(t){d.warn("[WebTransport] already closed. Did we get a STOP_SENDING? ignore",t)}this.readyState=WebSocket.CLOSED,this.onclose?.(new CloseEvent("close",{code:r,reason:e})),this.webTransport.closed.then(()=>{this.writer=null,this.reader=null,this.stream=null})}}static isBrowserSupported(){return"WebTransport"in window&&typeof WebTransport=="function"?b.browserName()==="Firefox"?l.webtransportFF:b.browserName()!=="Safari":!1}};var ln="open",pn=[()=>l.producerScreenTrack,()=>l.videoTracksCount>0,()=>!0,()=>!0,()=>l.consumerScreenTrack,()=>!0,()=>l.movieShare,()=>l.useParticipantListChunk,()=>l.useRooms,()=>!!l.vmoji,()=>l.useCallsToContacts,()=>l.useChatRooms],uo=10,mo=["service-unavailable","conversation-ended","invalid-token"],zt=class n extends ii{constructor(){super(...arguments);c(this,"socket",null);c(this,"sequence",1);c(this,"lastStamp",0);c(this,"websocketCommandsQueue",[]);c(this,"datachannelCommandsQueue",[]);c(this,"incomingCache",[]);c(this,"responseHandlers",{});c(this,"connectionType");c(this,"reconnectCount",0);c(this,"endpoint");c(this,"wtEndpoint",null);c(this,"conversationResolve",null);c(this,"conversationReject",null);c(this,"connected",!1);c(this,"listenersReady",!1);c(this,"postfix","&platform="+l.platform+"&appVersion="+l.appVersion+"&version="+l.protocolVersion+"&device="+l.device+"&capabilities="+n._getCapabilityFlags());c(this,"peerId",null);c(this,"conversationId",null);c(this,"reconnectTimer",0);c(this,"connectionMessageWaitTimer",0);c(this,"doctorTimer",0);c(this,"participantIdRegistry",null);c(this,"producerNotificationDataChannel",null);c(this,"producerCommandDataChannel",null);c(this,"producerCommandDataChannelEnabled",!1);c(this,"producerCommandSerializationService",new ir)}static get RECONNECT_DELAY(){return l.signalingReconnectDelay}static get RECONNECT_MAX_DELAY(){return l.signalingReconnectMaxDelay}static get RECONNECT_MAX_COUNT(){return l.signalingReconnectMaxCount}static get WAIT_CONNECTION_DELAY(){return l.waitConnectionDelay}static get WAIT_RESPONSE_DELAY(){return l.waitResponseDelay}static get WAIT_MESSAGE_DELAY(){return l.waitMessageDelay}static _getCapabilityFlags(){let e=0;for(let t=0;t<pn.length;t++)pn[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=>{d.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=${l.clientType}`,new Promise((t,i)=>{if(this.socket&&this.socket.readyState<WebSocket.CLOSING){P.log(T.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.isWebTransportAvailable())})}async _send(e,t={},i=!0,a=0){if(t.participantId){let s=I.decomposeParticipantId(t.participantId),o=I.decomposeId(s.compositeUserId);t=Object.assign({},t,{participantId:o.id,participantType:o.type}),s.deviceIdx&&(t.deviceIdx=s.deviceIdx)}return this._sendRaw(e,t,i,a)}async _sendRaw(e,t={},i=!0,a=0){let s=o=>{if(this._isDataChannelCommand(e))this.datachannelCommandsQueue.push(o),this.producerCommandDataChannel?.readyState===ln&&this._handleCommandsQueue(this.datachannelCommandsQueue);else{if(!this.socket){P.log(T.SOCKET_ACTION,"not_opened"),d.warn("[signaling] socket is not opened"),o.reject(new Error(`Socket not opened [${e}]`),!0);return}this.socket.readyState>WebSocket.OPEN&&(P.log(T.SOCKET_ACTION,"invalid_state"),d.warn(`[signaling] socket is not opened, state ${this.socket.readyState}`)),this.websocketCommandsQueue.push(o),this.socket&&this.socket.readyState===WebSocket.OPEN&&this._handleCommandsQueue(this.websocketCommandsQueue)}};return new Promise((o,u)=>{let p=(h,R=!1)=>{!a||R?u(h):(d.debug("[signaling] resending a signaling message",e,m.sequence),a--,s(m))},m={sequence:this.sequence++,name:e,params:t,responseTimer:0,needResponse:i,resolve:o,reject:p};s(m)})}_isDataChannelCommand(e){return this.producerCommandDataChannelEnabled?e===N.UPDATE_DISPLAY_LAYOUT||e===N.REPORT_PERF_STAT||e===N.REPORT_SHARING_STAT||e===N.REQUEST_ASR||e===N.ENABLE_VIDEO_SUSPEND||e===N.ENABLE_VIDEO_SUSPEND_SUGGEST||e===N.REPORT_NETWORK_STAT||e===N.CHANGE_SIMULCAST:!1}getNextCommandSequenceNumber(){return this.sequence}async hangup(e){return this._send(N.HANGUP,{reason:e}).catch(()=>{})}async sendCandidate(e,t){return this._send(N.TRANSMIT_DATA,{participantId:e,data:{candidate:t}},!1)}async requestTestMode(e,t){return this._send(N.REQUEST_TEST_MODE,{consumer:e,producer:t})}async sendSdp(e,t,i){let a=Object.assign({sdp:t},i);return this._send(N.TRANSMIT_DATA,{participantId:e,data:a})}async acceptCall(e){return this._send(N.ACCEPT_CALL,{mediaSettings:e})}async changeMediaSettings(e){return this._send(N.CHANGE_MEDIA_SETTINGS,{mediaSettings:e},!0,uo)}async changeParticipantState(e,t){let i={participantState:{state:e}};return t&&(i.participantId=t),this._sendRaw(N.CHANGE_PARTICIPANT_STATE,i)}async putHandsDown(){return this._send(N.PUT_HANDS_DOWN)}async addParticipant(e,t){return this._send(N.ADD_PARTICIPANT,{externalIds:e,...t})}async addParticipantLegacy(e,t){return this._send(N.ADD_PARTICIPANT,{participantIds:e,...t})}async removeParticipant(e,t=!1){return this._send(N.REMOVE_PARTICIPANT,{participantId:e,ban:t})}async allocateConsumer(e,t){let i={capabilities:t};return e&&(i.description=e.sdp),this._send(N.ALLOCATE_CONSUMER,i)}async acceptProducer(e,t){let i={description:e.sdp};return t&&(i.ssrcs=t),this._send(N.ACCEPT_PRODUCER,i)}async changePriorities(e){return this._send(N.CHANGE_STREAM_PRIORITIES,{typedPriorities:e}).catch(()=>{})}async updateDisplayLayout(e){return this._send(N.UPDATE_DISPLAY_LAYOUT,e)}async addMovie(e){return this._send(N.ADD_MOVIE,e)}async updateMovie(e){return this._send(N.UPDATE_MOVIE,e)}async removeMovie(e){return this._send(N.REMOVE_MOVIE,e)}startUrlSharing(e){return this._send(N.START_URL_SHARING,{sharedUrl:e})}stopUrlSharing(){return this._send(N.STOP_URL_SHARING)}async updateRooms(e,t){return this._send(N.UPDATE_ROOMS,{rooms:e,assignRandomly:t})}async activateRooms(e,t){return this._send(N.ACTIVATE_ROOMS,{roomIds:e,deactivate:t})}async switchRoom(e,t){return this._sendRaw(N.SWITCH_ROOM,{toRoomId:e,participantId:t})}async getRooms(e){return this._sendRaw(N.GET_ROOMS,{withParticipants:e})}async removeRooms(e){return this._send(N.REMOVE_ROOMS,{roomIds:e})}async startStream(e){return this._send(N.RECORD_START,e)}async stopStream(e={roomId:null}){return this._send(N.RECORD_STOP,e)}async publishStream(e={roomId:null}){return this._send(N.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(N.RECORD_SET_CONF,t)}async getRecordStatus(){return this._send(N.RECORD_GET_STATUS)}async switchTopology(e,t=!1){return this._send(N.SWITCH_TOPOLOGY,{topology:e,force:t})}async requestRealloc(){return this._send(N.REQUEST_REALLOC)}async reportPerfStat(e){return this._send(N.REPORT_PERF_STAT,e)}async reportSharingStat(e){return this._send(N.REPORT_SHARING_STAT,e,!1)}async reportNetworkStat(e){return this._send(N.REPORT_NETWORK_STAT,e,!1)}async chatMessage(e,t=null){return this._send(N.CHAT_MESSAGE,{message:e,participantId:t})}async chatHistory(e){return this._send(N.CHAT_HISTORY,{count:e})}async customData(e,t){return this._send(N.CUSTOM_DATA,{data:e,participantId:t})}async grantRoles(e,t,i){let a={participantId:e,roles:t};return i&&(a.revoke=!0),this._sendRaw(N.GRANT_ROLES,a)}async muteParticipant(e,t,i,a=null){return this._sendRaw(N.MUTE_PARTICIPANT,{participantId:e,muteStates:t,requestedMedia:i,roomId:a})}async enableFeatureForRoles(e,t){return this._sendRaw(N.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(N.PIN_PARTICIPANT,a)}async updateMediaModifiers(e){return this._send(N.UPDATE_MEDIA_MODIFIERS,{mediaModifiers:e})}async enableVideoSuspend(e){return this._send(N.ENABLE_VIDEO_SUSPEND,{enabled:e},!1)}async enableVideoSuspendSuggest(e){return this._send(N.ENABLE_VIDEO_SUSPEND_SUGGEST,{enabled:e},!1)}async changeSimulcast(e){return this._send(N.CHANGE_SIMULCAST,e,!1)}async changeOptions(e){return this._send(N.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(N.GET_WAITING_HALL,a)}async promoteParticipant(e,t=!1){let i={};return e&&(i.participantId=e),t&&(i.demote=t),this._sendRaw(N.PROMOTE_PARTICIPANT,i)}async requestPromotion(e=!1){let t={};return e&&(t.unrequest=e),this._send(N.REQUEST_PROMOTION,t)}async acceptPromotion(e=!1){let t={};return e&&(t.reject=e),this._send(N.ACCEPT_PROMOTION,t)}async feedback(e){return this._sendRaw(N.FEEDBACK,{key:e})}async getHandQueue(){return this._send(N.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(N.GET_PARTICIPANT_LIST_CHUNK,e)}async getParticipants(e){return this._send(N.GET_PARTICIPANTS,{externalIds:e})}getPeerId(){return this.peerId}async startAsr(e){return this._send(N.ASR_START,e)}async stopAsr(e){return this._send(N.ASR_STOP,e)}async requestAsr(e){return this._send(N.REQUEST_ASR,{request:e},!1)}_connect(e,t){if(this.socket&&this.socket.readyState<WebSocket.CLOSING)return;this.connectionType=e;let i="";e&&(i+=`&tgt=${e}`),e===Ke.RETRY&&this.lastStamp&&(i+=`&recoverTs=${this.lastStamp}`),i=a(i),t?(i+="&compression=deflate-raw",d.debug("[signaling] connecting to wt "+this.wtEndpoint+this.postfix+i),this.socket=new qt(this.wtEndpoint+this.postfix+i)):(d.debug("[signaling] connecting to ws "+this.endpoint+this.postfix+i),this.socket=new WebSocket(this.endpoint+this.postfix+i)),this._markTransportStat(e===Ke.RETRY?"reconnected":"connected"),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(s){if(!l.useParticipantListChunk)return s;let o=l.participantListChunkInitIndex;s+=`&partIdx=${o}`;let u=l.participantListChunkInitCount;return u!==null&&(s+=`&partCount=${u}`),s}}_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(T.SOCKET_ACTION,"opened"),this._waitConnectionMessage(),this._startDoctor(),this._logTransportStat(this.connectionType===Ke.RETRY?"reconnected":"connected")}_onMessage(e){if(this._startDoctor(),e.data==="ping"){this._markTransportStat("failed_pings"),E.onSignalingMessage(e.data),this.socket&&this.socket.readyState===WebSocket.OPEN&&this.socket.send("pong");return}try{let t=JSON.parse(e.data);E.onSignalingMessage(t),this._handleMessage(t)}catch(t){P.log(T.SOCKET_ACTION,"parse_error"),d.error("[signaling] unable to parse message",t,e.data)}}_handleMessage(e){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._logTransportStat("restart"),this._triggerEvent(Pe.RECONNECT,e),e.conversation.topology&&this._triggerEvent(Pe.NOTIFICATION,{type:"notification",notification:L.TOPOLOGY_CHANGED,topology:e.conversation.topology})),this.lastStamp&&this._handleCachedMessages(),e.recoverMessages?.forEach(t=>{t.notification===L.ACCEPTED_CALL&&t.peerId.id===this.peerId&&t.peerId.type==="WEB_TRANSPORT"||this._handleMessage(t)}),this._handleCommandsQueue(this.websocketCommandsQueue)):!this.connected||!this.listenersReady?this.incomingCache.push(e):this._triggerEvent(Pe.NOTIFICATION,e);break;case"response":this._handleCommandResponse(!0,e);break;case"error":this._handleErrorMessage(e);break;default:P.log(T.SOCKET_ACTION,"unknown_message"),d.warn("[signaling] unhandled message",e)}this.lastStamp=e.stamp||this.lastStamp}_handleErrorMessage(e){P.log(T.SOCKET_ACTION,`error-${e.error}`);let t=e.error?mo.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 G(e.reason||re.SIGNALING_FAILED,{message:`Conversation ended: ${e.error}`,remote:!0})):this._triggerEvent(Pe.NOTIFICATION,{notification:L.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 G(e.reason||re.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(Pe.FAILED,e)}_onError(e){P.log(T.SOCKET_ACTION,"error"),d.error("[signaling] signaling error",e),this._logTransportStat("failed_exception",{string_value:JSON.stringify(e)})}_onClose(e){P.log(T.SOCKET_ACTION,"closed"),d.debug("[signaling] connection closed",{code:e.code,reason:e.reason}),this.connected=!1,this._stopDoctor(),this.socket&&this.reconnectCount++<n.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(n.RECONNECT_MAX_DELAY,n.RECONNECT_DELAY*Math.pow(2,this.reconnectCount-1));d.log(`[signaling] reconnect websocket after ${e}ms (${this.reconnectCount})`),P.log(T.SOCKET_ACTION,"reconnect"),this.reconnectTimer=window.setTimeout(this._connect.bind(this,Ke.RETRY,!1),e)}_handleCommandResponse(e,t){if(!Object.hasOwn(this.responseHandlers,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(T.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],P.log(T.SOCKET_ACTION,"response-timeout"),i.reject(new Error(t.error||`Response timeout [${i.name}]`))):i.responseTimer=window.setTimeout(()=>this._handleCommandResponse(e,t),n.WAIT_RESPONSE_DELAY)}_handleCommandsQueue(e){for(;e.length>0;){let t=e.shift();if(d.debug(`[signaling] command send [${t.sequence}]`,`'${t.name}'`,t.params),this._isDataChannelCommand(t.name)){if(this.producerCommandDataChannel?.readyState!==ln){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"}),n.WAIT_RESPONSE_DELAY),this.responseHandlers[e.sequence]=e}_serializeBinary(e){switch(e.name){case N.UPDATE_DISPLAY_LAYOUT:return this.producerCommandSerializationService.serializeUpdateDisplayLayout(e.sequence,e.params);case N.REPORT_PERF_STAT:return this.producerCommandSerializationService.serializePerfStatReport(e.sequence,e.params);case N.REPORT_SHARING_STAT:return this.producerCommandSerializationService.serializeSharingStatReport(e.sequence,e.params);case N.REQUEST_ASR:return this.producerCommandSerializationService.serializeRequestAsr(e.sequence,e.params);case N.REPORT_NETWORK_STAT:return this.producerCommandSerializationService.serializeNetworkStatReport(e.sequence,e.params);case N.ENABLE_VIDEO_SUSPEND:return this.producerCommandSerializationService.serializeEnableVideoSuspend(e.sequence,e.params);case N.ENABLE_VIDEO_SUSPEND_SUGGEST:return this.producerCommandSerializationService.serializeEnableVideoSuspendSuggest(e.sequence,e.params);case N.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===N.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)Object.hasOwn(t,a)&&(i[a]=Za(t[a]));return{layouts:i}}_waitConnectionMessage(){this.connectionMessageWaitTimer=window.setTimeout(()=>{this.conversationReject&&this.conversationReject(new G(re.SIGNALING_FAILED,{message:"Unable to connect to the signaling: connection timeout",remote:!0}))},n.WAIT_CONNECTION_DELAY)}_stopWaitConnectionMessage(){window.clearTimeout(this.connectionMessageWaitTimer),this.connectionMessageWaitTimer=0}_startDoctor(){this._stopDoctor(),this.doctorTimer=window.setTimeout(()=>{this.isWebTransportAvailable()?d.warn("[signaling] socket is dead. Fallback to WebSocket. Trying to connect"):d.warn("[signaling] socket is dead, trying to reconnect"),this._logTransportStat("failed_pings"),this._disconnect(4e3),this._connect(Ke.RETRY,!1)},n.WAIT_MESSAGE_DELAY)}_stopDoctor(){window.clearTimeout(this.doctorTimer),this.doctorTimer=0}isWebTransportAvailable(){return qt.isBrowserSupported()&&this.wtEndpoint!==null&&l.webtransport}_getSocketType(){return this.socket instanceof qt?"wt":"ws"}_markTransportStat(e){let t=this._getSocketType(),i=Qr[e][t];le.setMark(i)}_logTransportStat(e,t){let i=this._getSocketType(),a=Qr[e][i];Re.logEventualStat({name:a,...t})}};var un=(t=>(t.INCOMING="INCOMING",t.OUTGOING="OUTGOING",t.JOINING="JOINING",t))(un||{}),ke=un;var mn=(t=>(t.USER="USER",t.GROUP="GROUP",t.CHAT="CHAT",t))(mn||{}),rt=mn;var hn=(e=>(e.ATTENDEE="ATTENDEE",e.HAND_UP="HAND_UP",e))(hn||{}),Xr=hn;var gn=(t=>(t.ADD_PARTICIPANT="ADD_PARTICIPANT",t.RECORD="RECORD",t.MOVIE_SHARE="MOVIE_SHARE",t))(gn||{}),Zr=gn;var _n=(s=>(s.REQUIRE_AUTH_TO_JOIN="REQUIRE_AUTH_TO_JOIN",s.AUDIENCE_MODE="AUDIENCE_MODE",s.WAITING_HALL="WAITING_HALL",s.ASR="ASR",s.FEEDBACK="FEEDBACK",s.RECURRING="RECURRING",s))(_n||{}),Jt=_n;function fn(n,r){if(n.length!==r.length)return!1;for(let e of n)if(!r.includes(e))return!1;return!0}function Sn(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 vn=(t=>(t.UNMUTE="UNMUTE",t.MUTE="MUTE",t.MUTE_PERMANENT="MUTE_PERMANENT",t))(vn||{}),Be=vn;var In=(i=>(i.CALLED="CALLED",i.ACCEPTED="ACCEPTED",i.REJECTED="REJECTED",i.HUNGUP="HUNGUP",i))(In||{}),J=In;var En=(i=>(i.UPDATE="UPDATE",i.REMOVE="REMOVE",i.ACTIVATE="ACTIVATE",i.TIMEOUT="TIMEOUT",i))(En||{}),ui=En;var Tn=(e=>(e.AUDIO_MIX="audio-mix",e.PARTICIPANT_AGNOSTIC_TRACK_PREFIX="pat",e))(Tn||{}),$e=Tn;var Rn=(e=>(e.NO_AVAILABLE_TRACKS="no-available-tracks",e.UNKNOWN_ERROR="unknown-error",e))(Rn||{}),Cn=Rn;function Pn(n){switch(n){case 1:return"no-available-tracks";default:return"unknown-error"}}var yn=(e=>(e.CREATOR="CREATOR",e.ADMIN="ADMIN",e))(yn||{}),dt=yn;function mi(n,r){if(n.length!==r.length)return!1;for(let e of n)if(!r.includes(e))return!1;return!0}var ea=(t=>(t.USER="USER",t.ANONYM="ANONYM",t.GROUP="GROUP",t))(ea||{}),q;(m=>{function n(h){return h.length?typeof h[0]=="object"?h:h.map(R=>r(R)):[]}m.fromIds=n;function r(h,R="USER",M=0){return{id:h,type:R,deviceIdx:M}}m.fromId=r;function e(h,R=!0){let M=R?h.decorativeExternalUserId:h.externalId,w=h.deviceIdx??0;if(M)return t(M,w)}m.fromSignalingParticipant=e;function t(h,R=0){return{id:h.id,type:h.type==="ANONYM"?"ANONYM":"USER",deviceIdx:R}}m.fromSignaling=t;function i(h){return h.id}m.toSignaling=i;function a(h){let R=h.deviceIdx||0;return`{"id":"${h.id}","type":"${h.type}","deviceIdx":${R}}`}m.toString=a;function s(h,R="USER",M=0){return a(r(h,R,M))}m.fromIdToString=s;function o(h){try{return JSON.parse(h)}catch{throw new Error(`Failed to parse ExternalId from string '${h}'`)}}m.fromString=o;function u(h,R){return h.id===R.id&&h.type===R.type&&h.deviceIdx===R.deviceIdx}m.compare=u;function p(h){return h?.deviceIdx||0}m.getDeviceIdx=p})(q||(q={}));var{isObject:bn,isObjectsEquals:ho}=I;function or(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||bn(n.bitrates)&&bn(r.bitrates)&&!ho(n.bitrates,r.bitrates,!0)?!1:n.bitrates===r.bitrates}function cr(n,r){return!(!or(n.camera,r.camera)||!or(n.screenSharing,r.screenSharing)||!or(n.fastScreenSharing,r.fastScreenSharing))}function ta(n,r){return{camera:Object.assign({},n.camera,r.camera),screenSharing:Object.assign({},n.screenSharing,r.screenSharing),fastScreenSharing:Object.assign({},n.fastScreenSharing,r.fastScreenSharing)}}function Mn(){return{camera:null,screenSharing:null,fastScreenSharing:null}}function An(n){try{return btoa(JSON.stringify(n))}catch(r){d.warn("WaitingParticipant: failed convert to string",n,r)}return null}function Dn(n){try{return JSON.parse(atob(n))}catch(r){d.warn("WaitingParticipant: failed convert from string",n,r)}return null}var dr=(n,r)=>I.objectReduce(n,(e,t,i)=>(t===r&&e.push(i),e),[]);function wn(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 go(n,r){switch(n){case se.AUDIO:return!!r.isAudioEnabled;case se.AUDIO_SHARING:return!!r.isAudioSharingEnabled;case se.VIDEO:return!!r.isVideoEnabled;case se.SCREEN_SHARING:return!!r.isFastScreenSharingEnabled||!!r.isScreenSharingEnabled;default:return!1}}function kn(n,r){return I.objectReduce(n,(e,t,i)=>{switch(t){case Be.MUTE:case Be.MUTE_PERMANENT:{go(i,r)||(e[i]=t);break}default:e[i]=t;break}return e},{})}function On(n){let{muteStates:r={},mediaSettings:e}=n;return kn(r,e)}function xn(n,r){let e=n.conversation.participants.find(i=>I.comparePeerId(i.peerId,n.peerId));if(!e)return r;let{mediaSettings:t}=e;return kn(r,t)}function Nn(n,r){let e=new Uint8Array(r),t=0,i=0;for(;t<n.length&&i<r;){let a=n[t++],s=a>>4,o=a&15;if(s===15){let m;do m=n[t++],s+=m;while(m===255)}for(let m=0;m<s&&!(i>=r);m++)e[i++]=n[t++];if(t>=n.length||i>=r)break;let u=n[t]|n[t+1]<<8;if(t+=2,o===15){let m;do m=n[t++],o+=m;while(m===255)}o+=4;let p=i-u;for(let m=0;m<o&&!(i>=r);m++)e[i++]=e[p+m]}return e}var Yt=class{constructor(r){c(this,"_fixNoPacketsApplied",!1);c(this,"_fixNoPacketsChecked",!1);c(this,"_fixTooManyPacketsApplied",!1);c(this,"_fixTooManyPacketsSucceeded",!1);c(this,"_fixTooManyPacketsFailed",!1);c(this,"_fixTooManyPacketsTime");c(this,"_mediaSource");c(this,"_lastPacketsSent");c(this,"_lastPacketsSentTime");c(this,"_toggleAudioPromise",null);c(this,"_fixNoPacketsAppliedVideo",!1);this._mediaSource=r}_fixAudioDeviceNoPackets(r){if(!(this._fixNoPacketsApplied&&this._fixNoPacketsChecked)){if(this._fixNoPacketsApplied&&!this._fixNoPacketsChecked){this._fixNoPacketsChecked=!0,P.log(T.ERROR,`audio_device_recover_${r.bandwidth?"success":"fail"}`);return}!this._fixNoPacketsApplied&&!r.bandwidth&&(this._fixNoPacketsApplied=!0,P.log(T.ERROR,"audio_device_recover"),d.log("[AudioFix] Trying to fix RV (no packets)"),this._toggleAudioPromise=this._mediaSource.toggleAudio(b.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(T.ERROR,"audio_device_recover_rv_fail"),this._fixTooManyPacketsFailed=!0):t-this._fixTooManyPacketsTime>6e4&&(d.log("[AudioFix] Fixed RV"),P.log(T.ERROR,"audio_device_recover_rv_success"),this._fixTooManyPacketsSucceeded=!0):i>e&&(this._fixTooManyPacketsApplied=!0,P.log(T.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 hi=class{constructor(r){c(this,"_output",null);c(this,"_volume",1);c(this,"_features",{setSinkId:!!Audio.prototype.setSinkId});c(this,"_statFirstMediaReceived");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(l.muteMode||!this._output?.audioTrack)return;let r=b.browserName()!=="Safari"||b.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"),E.onAutoplayError()},i=s=>{e.srcObject=new MediaStream([s]),e.load();let o=e.play();o&&o.catch(t)},a=()=>{d.debug("[audio] Recover audio playback");let s=this._output?.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(){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=b.getSavedOutput();r&&await this._output.audioElement.setSinkId?.(r.deviceId)}catch(r){throw P.log(T.ERROR,"change_output"),d.error("[audio] Output change failed",r),r}}};var _o=90,fo=3,gi=class extends ie{constructor(){super(...arguments);c(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}),E.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>_o?d.warn(`High memory usage: ${t}% (${i} MiB)`):(!this._lastMemoryStat.percent||Math.abs(t-this._lastMemoryStat.percent)>=fo)&&(d.debug(`Memory usage: ${t}% (${i} MiB)`),this._lastMemoryStat.percent=t,this._lastMemoryStat.bytes=e.usedJSHeapSize)}};var So=44100,Mt=class{constructor(r,e){c(this,"_analyser",null);c(this,"_gainNode",null);c(this,"_fftBins",null);c(this,"_mediaStreamSource",null);c(this,"_lastSmoothedLevel",0);c(this,"_trackId");c(this,"_track");c(this,"_stream");this._trackId=r,this._track=e,this._stream=new MediaStream([e]);try{let t=b.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=So/this._fftBins.length,e=Math.ceil(l.voiceParams.minFreq/r),t=Math.floor(l.voiceParams.maxFreq/r);return this._fftBins.subarray(e,t)}getLevel(){let r=this._getBins(),t=r.reduce((a,s)=>a+s,0)/r.length/255,i=this._lastSmoothedLevel*l.voiceParams.smoothing+t*(1-l.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 _i=class extends ie{constructor(e){super();c(this,"_detector",null);c(this,"_interval",null);let t=()=>{this._detector&&E.onLocalVolume(this._detector.getLevel().real,e.getMediaSettings().isAudioEnabled),this._interval=window.setTimeout(t,l.voiceParams.interval)};this._interval=window.setTimeout(t,l.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 pr=class{constructor(r){this.processor=r;c(this,"queue",[]);c(this,"isProcessing",!1)}add(r){this.queue.push(r),this.processQueue()}async processQueue(){if(!this.isProcessing){for(this.isProcessing=!0;this.queue.length;){let r=this.queue.shift();if(r)try{await this.processor(r)}catch{d.error(`Can't process message ${JSON.stringify(r)}`)}}this.isProcessing=!1}}};var Ln=(s=>(s.producerNotification="producerNotification",s.producerCommand="producerCommand",s.consumerScreenShare="consumerScreenShare",s.producerScreenShare="producerScreenShare",s.asr="asr",s.animoji="animoji",s))(Ln||{}),at=Ln;var lt=class lt{constructor(){c(this,"_codecUsages",new Map);c(this,"getCurrentTransportTopology",()=>{})}static create(r){let e=new lt;e.getCurrentTransportTopology=r,lt._instance=e}static reportUsage(r){let e=lt._instance,t=e?.getCurrentTransportTopology();if(!e||!t)return;let i=r.rtps.filter(a=>a.type==="outbound-rtp"&&!a.mid?.endsWith("s"));l.simulcast&&(i=i.reduce((a,s)=>{if(s.kind!=="video")return a.concat(s);let o=a.find(u=>u.kind==="video");return o?o.totalEncodeTime=(o.totalEncodeTime??0)+(s.totalEncodeTime??0):a.push(s),a},[])),i.forEach(a=>{let s=a.kind,o=a.mimeType;if((s==="audio"||s==="video")&&o){let u=a.encoderImplementation,p=[o,"encoder",u].filter(Boolean).join("/");e.saveUsage({kind:s,codecName:p,totalEncodeTime:(a.totalEncodeTime??0)*1e3,audioCodecParams:a.sdpFmtpLine,topology:t})}})}saveUsage({kind:r,codecName:e,totalEncodeTime:t,audioCodecParams:i,topology:a}){let s=this._codecUsages.get(r);if(s&&s.codecName!==e&&this.report(s),s&&s.codecName===e){this._codecUsages.set(r,{...s,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:T.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(){lt._instance?._destroy(),lt._instance=null}_destroy(){this._codecUsages.forEach(r=>{this.report(r)}),this._codecUsages.clear()}};c(lt,"_instance",null);var Xe=lt;var At=class extends ie{constructor(e,t){super();c(this,"_signaling");c(this,"_mediaSource");c(this,"_state","IDLE");c(this,"_pc",null);this._signaling=e,this._mediaSource=t}getState(){return this._state||"IDLE"}};var Un="videochat-epi",vo=5e3,Io=500,pt=class extends ie{constructor(e,t,i=!1){super();c(this,"_previousPerfStatReportTimestamp",0);c(this,"_previousNetworkStatReportTimestamp",Date.now());c(this,"_previousCallStatReportTimestamp",Date.now());c(this,"_previousCallStatReport",null);c(this,"_screenShareStats",[]);c(this,"_signaling");c(this,"_directTopology");c(this,"_handleScreenSharingStat",e=>{this._screenShareStats.push(e)});c(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(Un)||"",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&&l.perfStatReportEnabled&&this._previousPerfStatReportTimestamp+vo<=t&&(await this.reportPerfStats(e),this._previousPerfStatReportTimestamp=t);let i=e.outbound.transport.local?.protocol==="tcp";!this._directTopology&&i&&this._previousNetworkStatReportTimestamp+Io<=t&&(await this.reportNetworkStats(e),this._previousNetworkStatReportTimestamp=t),l.callStatReportEnabled&&this._previousCallStatReportTimestamp+l.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(Un,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:Fn(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:Fn(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,m)=>(m.kind==="video"?(i=!0,m.framesReceived&&(p.jitter_video=p.jitter_video*p.inbound_video_count/(p.inbound_video_count+1)+m.jitter*1e3/(p.inbound_video_count+1),p.interframe_delay_variance=p.interframe_delay_variance*p.inbound_video_count/(p.inbound_video_count+1)+(m.interframeDelayVariance||0)*1e6/(p.inbound_video_count+1),p.inbound_video_count++),p.frames_dropped+=m.framesDropped||0,p.nack_sent+=m.nackCount,p.pli_sent+=m.pliCount,p.fir_sent+=m.firCount,p.freeze_count+=m.freezeCountDelta||0,p.total_freezes_duration+=m.totalFreezesDurationDelta||0):(a=!0,m.totalSamplesReceived&&(p.jitter_audio=p.jitter_audio*p.inbound_audio_count/(p.inbound_audio_count+1)+m.jitter*1e3/(p.inbound_audio_count+1),p.total_audio_energy=p.total_audio_energy*p.inbound_audio_count/(p.inbound_audio_count+1)+(m.totalAudioEnergy||0)/(p.inbound_audio_count+1),p.inbound_audio_count++),p.total_audio_samples_received+=m.totalSamplesReceived||0,p.inserted_audio_samples_for_deceleration+=m.insertedSamplesForDeceleration||0,p.removed_audio_samples_for_acceleration+=m.removedSamplesForAcceleration||0,p.concealed_audio_samples+=m.concealedSamples||0,p.silent_concealed_audio_samples+=m.silentConcealedSamples||0,p.audio_concealment_events+=m.concealmentEvents||0),p),t),e.outbound.rtps.reduce((p,m)=>(m.kind==="video"?(p.nack_received+=m.nackCount,p.pli_received+=m.pliCount,p.fir_received+=m.firCount,p.packets_sent_video+=m.packetsSent):p.packets_sent_audio+=m.packetsSent,p),t),e.remoteInbound.rtps.reduce((p,m)=>(m.kind==="video"?p.packets_lost_video+=m.packetsLost:p.packets_lost_audio+=m.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 s={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&&(s.cpu_hardware_concurrency=navigator.hardwareConcurrency),i&&!ur(t.jitter_video)&&(s.jitter_video=Math.round(t.jitter_video)),a&&!ur(t.jitter_audio)&&(s.jitter_audio=Math.round(t.jitter_audio)),i&&!ur(t.interframe_delay_variance)&&(s.interframe_delay_variance=t.interframe_delay_variance),t.freeze_count&&t.total_freezes_duration&&(s.freeze_count=t.freeze_count,s.total_freezes_duration=Math.round(t.total_freezes_duration*1e3)),t.ss_freeze_count&&t.ss_total_freezes_duration&&(s.ss_freeze_count=t.ss_freeze_count,s.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),m=Math.max(0,t.inserted_audio_samples_for_deceleration-this._previousCallStatReport.inserted_audio_samples_for_deceleration),h=Math.max(0,t.removed_audio_samples_for_acceleration-this._previousCallStatReport.removed_audio_samples_for_acceleration),R=Math.max(0,t.concealed_audio_samples-this._previousCallStatReport.concealed_audio_samples),M=Math.max(0,t.silent_concealed_audio_samples-this._previousCallStatReport.silent_concealed_audio_samples),w=Math.max(0,t.audio_concealment_events-this._previousCallStatReport.audio_concealment_events);s.inserted_audio_samples_for_deceleration=Dt(m/p*1e3),s.removed_audio_samples_for_acceleration=Dt(h/p*1e3),s.concealed_audio_samples=Dt(R/p*1e3),s.concealed_silent_audio_samples=Dt(M/p*1e3),s.concealment_audio_avg_size=Dt(R/w),s.total_audio_energy=t.total_audio_energy}Bn(t,"local_address","local_connection_type","network_type","transport")&&(s.local_address=t.local_address,s.local_connection_type=t.local_connection_type,s.network_type=t.network_type,s.transport=t.transport),Bn(t,"remote_address","remote_connection_type")&&(s.remote_address=t.remote_address,s.remote_connection_type=t.remote_connection_type);let o=Math.max(0,t.packets_sent_video-this._previousCallStatReport.packets_sent_video),u=Math.max(0,t.packets_sent_audio-this._previousCallStatReport.packets_sent_audio);if(o>0){let p=Math.max(0,t.packets_lost_video-this._previousCallStatReport.packets_lost_video);s.video_loss=Dt(p/o*100)}if(u>0){let p=Math.max(0,t.packets_lost_audio-this._previousCallStatReport.packets_lost_audio);s.audio_loss=Dt(p/u*100)}Re.logCallStat(s),l.enableLogPerfStatReport&&d.log("Sent call stats",s),this._previousCallStatReport=t}};function Bn(n,...r){for(let e of r)if(!Object.hasOwn(n,e)||n[e]===void 0)return!1;return!0}function Fn(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 Si=class{constructor(r,e=null){c(this,"weightUp");c(this,"weightDown");c(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 Vn=.25,jn=.35,Eo=85,To=.1,Ro=1.5,Co=.1,Po=1,yo=.6,bo=.3;var vi=class extends ie{constructor(e){super();c(this,"_signaling");c(this,"_localNetworkStat");c(this,"_remoteNetworkStat");c(this,"_lastNetworkStat");c(this,"_networkLimits",{badNet:{loss:3,rtt:1e3},goodNet:{loss:.5,rtt:600}});c(this,"_lastStatSentTimestamp",0);c(this,"_currentState","good");this._signaling=e,this._localNetworkStat={rtt:new Si(Vn,Vn),loss:new Si(jn,jn),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)/Eo);for(let s=0;s<a;s++)i*=1-To;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)/Ro);for(let s=0;s<a;s++)i*=1-Co;return i}_calcBitrateRating(e,t){if(!e||!t)return 1;let a=1-(1-Math.min(e,t)/Math.max(e,t))*Po;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>=yo?"good":e>=bo?"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((h,R)=>Math.max(h,R.packetLoss||0),0),s={rtt:this._localNetworkStat.rtt.update(i),loss:this._localNetworkStat.loss.update(a)};if(t){let h=e.outbound.rtps.reduce((R,M)=>R+(M.bandwidth??0)*8,0);s.bitrate=h,this._localNetworkStat.bitrate=h}let o=Date.now(),u=this._calcRating(this._localNetworkStat,this._remoteNetworkStat,t),p=Math.max(Math.round(u*10)/10,.1),m=this._getNetworkState(p);(t||m!==this._currentState||o-this._lastStatSentTimestamp>l.networkStatisticsInterval)&&(this._lastStatSentTimestamp=o,this._signaling.customData({sdk:Object.assign({type:"bad-net"},s)},null).catch(h=>{d.warn("Unable to send [bad-net]",h)})),this._currentState=m,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 Mo=30*1e3,Ii=class n extends At{constructor(e,t,i,a,s){super(i,a);c(this,"_participantId");c(this,"_isMaster");c(this,"_remoteSDP",{});c(this,"_remoteCandidates",{});c(this,"_lastRemoteSDP",null);c(this,"_animojiDataChannel",null);c(this,"_animojiReceiver",null);c(this,"_animojiSender",null);c(this,"_remoteAnimojiVersion",1);c(this,"_isOpen",!1);c(this,"_remotePeerId",null);c(this,"_statInterval",null);c(this,"_settingsInterval",null);c(this,"_failedOnCreate",null);c(this,"_remoteStream",null);c(this,"_iceRestartTimeout",null);c(this,"_reconnectionTimeout",null);c(this,"_reconnectionPrevented",!1);c(this,"_lastStat");c(this,"_fingerprint",null);c(this,"_neverConnected",!0);c(this,"_serverSettings");c(this,"_prevConsumerSettings",{});c(this,"_networkLimitsForVideo",{bad:{loss:4,rtt:1e3},good:{loss:2,rtt:700}});c(this,"_videoMaxDimensionsForNet",{worst:320,bad:640,good:1280});c(this,"_lastVideoMaxDimension",this._videoMaxDimensionsForNet.good);c(this,"_lastBadConnection",0);c(this,"_perfStatReporter");c(this,"_directStatReporter");if(this._participantId=e,this._isMaster=t,this._serverSettings=s,this._perfStatReporter=new pt(this,i,!0),this._directStatReporter=new vi(i),this.subscribe(this._signaling,Pe.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:l.iceServers,iceTransportPolicy:l.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={},l.vmoji&&this._createDataChannel(this._pc,at.animoji,o=>{this._animojiDataChannel=o,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(o){P.log(T.ERROR,"addTrack-direct"),d.error("Unable to add media source tracks",o,{participantId:this._participantId}),this._failedOnCreate=o;return}this._createOffer(!1).catch(o=>{this._state==="IDLE"?this._failedOnCreate=o:this.close(o)})}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){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(T.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{await this._setRemoteDescription(t,this._remoteSDP[t])}catch{this.close();return}this._remoteSDP={},this._remoteCandidates={}}updateSettings(e){cr(e,this._serverSettings)||(this._serverSettings=e,this._applySettings())}preventRestart(){this._reconnectionPrevented=!0}allowRestart(){this._reconnectionPrevented=!1}setAnimojiTransport(e,t){if(l.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){switch(e.notification){case L.TRANSMITTED_DATA:this._handleTransmittedData(e);break;case L.SETTINGS_UPDATE:this._directStatReporter.updateSettings(e.settings);break;case L.CUSTOM_DATA:Object.hasOwn(e.data,"sdk")&&this._directStatReporter.reportRemote(e.data?.sdk);break}}_handleTransmittedData(e){let t=e.data,i=I.getPeerIdString(e.peerId);I.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){d.debug("Add remote ice candidate",{participantId:this._participantId,candidate:t});try{await this._pc.addIceCandidate(new RTCIceCandidate(t))}catch(i){throw P.log(T.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)}async _setRemoteCandidates(e){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{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),d.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 P.log(T.ERROR,"setRemoteDescription-direct"),d.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,l.vmojiOptions?.protocolVersion||1);this._animojiSender?.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)}async _handleIceCandidate(e){e.candidate&&this._signaling.ready&&(d.debug("Local ice candidate",{participantId:this._participantId,candidate:e.candidate}),await this._signaling.sendCandidate(this._participantId,e.candidate))}_onSignalingStateChange(){d.debug(`DirectTransport: Signaling state changed to ${this._pc?.signalingState}`,{participantId:this._participantId});let e={animojiVersion:l.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(d.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(d.debug(`DirectTransport: Connection state changed to ${this._pc?.connectionState}`,{participantId:this._participantId}),P.log(T.ICE_CONNECTION_STATE,this._pc?.connectionState),this._pc?.connectionState){case"connected":this._neverConnected=!1,this._setState("CONNECTED"),this._stopReconnection(),I.getPeerConnectionHostInfo(this._pc).then(e=>{e?.local&&(P.log(T.ICE_CONNECTION_TYPE,e.local.type),d.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||(d.log("Waiting for reconnection...",{participantId:this._participantId}),this._reconnectionTimeout=window.setTimeout(()=>{this._reconnectionTimeout=null,this._neverConnected?this._requestTopologySwitch():this._startIceRestart()},l.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(T.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(T.ERROR,"iceRestart-direct"),this._requestTopologySwitch()},l.iceRestartWaitTime)}async _createOffer(e){let t={iceRestart:e,offerToReceiveAudio:!0,offerToReceiveVideo:!0};d.debug("Create offer",{participantId:this._participantId,options:t});let i;try{i=await this._pc?.createOffer(t),d.debug("Created offer",{participantId:this._participantId,offer:i}),i=n._patchLocalDescription(i)}catch(a){throw d.error("Unable to create offer",a,{participantId:this._participantId}),P.log(T.ERROR,"createOffer-direct"),a}try{return d.debug("Set local description",{participantId:this._participantId,offer:i}),this._calcFingerprint(i.sdp),await this._pc?.setLocalDescription(i),i}catch(a){throw d.error("Unable to set local description",a,{participantId:this._participantId}),P.log(T.ERROR,"setLocalDescription-direct"),a}}async _createAnswer(){d.debug("Create answer",{participantId:this._participantId});let e;try{e=await this._pc?.createAnswer(),d.debug("Created answer",{participantId:this._participantId,answer:e}),e=n._patchLocalDescription(e)}catch(t){throw d.error("Unable to create answer",t,{participantId:this._participantId}),P.log(T.ERROR,"createAnswer-direct"),t}try{return d.debug("Set local description",{participantId:this._participantId,answer:e}),this._calcFingerprint(e.sdp),await this._pc?.setLocalDescription(e),e}catch(t){throw d.error("Unable to set local description",t,{participantId:this._participantId}),P.log(T.ERROR,"setLocalDescription-direct"),t}}static _patchLocalDescription(e){let t=!!b.baseChromeVersion();return e.sdp=I.patchLocalSDP(e.sdp,l.preferH264&&b.canPreferH264(),b.isBrokenH264Decoder(),l.preferVP9,l.h264spsPpsIdrInKeyframe,t&&l.audioNack,l.p2pAudioRed),e}static _patchRemoteDescription(e){return e.sdp=I.patchRemoteSDP(e.sdp,!1,!1,!1,l.preferVP9,b.isBrokenVP9Encoder(),b.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(T.ERROR,"replaceTrack-direct")})}),this._applySettings())}_startStatInterval(){if(this._statInterval)return;let e=()=>{if(this._isDeadConnection()){this._stopStatInterval();return}le.collectStats(this._pc,this._lastStat,void 0,!0).then(t=>{this._lastStat=t,Xe.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,l.statisticsInterval)})};this._statInterval=window.setTimeout(e,l.statisticsInterval)}async _isSVCSupported(e,t){let i=this._mediaSource.getSendVideoTrack(),a=e.outbound.rtps.find(u=>u.kind==="video");if(!a?.mimeType||!a?.bandwidth||!i)return!1;let s=i.getSettings();if(!s.width||!s.height||!s.frameRate)return!1;let o={type:b.browserName()==="Firefox"?"transmission":"webrtc",video:{contentType:a.mimeType,width:s.width,height:s.height,bitrate:a.bandwidth,framerate:s.frameRate,scalabilityMode:t}};try{return(await navigator.mediaCapabilities.encodingInfo(o)).supported||!1}catch(u){return d.warn("Failed to get encodingInfo",o,u),!1}}async _checkPPTNetwork(e){if(!l.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,s=t.currentRoundTripTime<this._networkLimitsForVideo.bad.rtt,o=this._videoMaxDimensionsForNet.good,u="L1T1";if(a?(this._lastBadConnection=Date.now(),s?(o=this._videoMaxDimensionsForNet.bad,u="L1T2"):(o=this._videoMaxDimensionsForNet.worst,u="L1T3")):i&&(o=this._videoMaxDimensionsForNet.good,u="L1T1"),!(o<this._lastVideoMaxDimension||Date.now()-this._lastBadConnection>Mo)||this._lastVideoMaxDimension===o)return;let m=this._serverSettings.camera;if(!m||!await this._isSVCSupported(e,u))return;d.debug("Switch outbound video frame size and scalabilityMode",{scalabilityMode:u,averageNetStat:t,nextVideoMaxDimension:o}),this._lastVideoMaxDimension=o;let R={...this._serverSettings,camera:{...m,scalabilityMode:u,maxDimension:this._lastVideoMaxDimension}};this.updateSettings(R)}_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=I.sdpFingerprint(e);if(t===null){d.warn("Fingerprint calculation is unsupported");return}this._fingerprint===null?this._fingerprint=t:(E.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=I.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 s=a.readyState;s==="open"?(d.debug(`[${t}] data channel opened`),a.onerror=o=>{d.error(`[${t}] data channel error`,o)},i(a)):d.error(`[${t}] data channel open failed, state [${s}]`)}}};var Ao=16,mr=class n{constructor(r,e,t){c(this,"_datachannel");c(this,"_participantIdRegistry");c(this,"_asrCallback");c(this,"_textDecoder");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),s=e.getUint32(4),o=e.getUint32(8),u=e.getUint32(12);if(t!==1)throw new Error(`Unexpected protocol version. Got ${t}, expected 1`);return{sequence:a,ssrc:s,timestamp:o,duration:u,data:r.slice(Ao)}}_onDataChannelMessage(r){let e=n.parse(r),t=this._participantIdRegistry?.getStreamDescription(e.ssrc)?.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 ut}from"messagepack";var hr=class{constructor(){c(this,"streamDescriptionByCompactId",new Map);c(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=ut(i);return Object.entries(a).forEach(([M,w])=>{let j=$t(M);this.streamDescriptionByCompactId.set(w,j),this.compactIdByStreamDescription.set(M,w)}),null;case 2:case 4:let s=ut(i),o=[];for(let M of s){let w=this.getStreamDescription(M);w&&o.push(w.participantId)}return t===2?{type:"notification",notification:L.AUDIO_ACTIVITY,activeParticipants:o}:{type:"notification",notification:L.STALLED_ACTIVITY,stalledParticipants:o};case 3:let u=ut(i);return{type:"notification",notification:L.SPEAKER_CHANGED,speaker:this.getStreamDescription(u)?.participantId};case 5:let p=ut(i);return{type:"notification",notification:L.VIDEO_QUALITY_UPDATE,quality:{maxBitrate:p[0],maxDimension:p[1]},mediaType:this._decodeMediaType(p[2])};case 6:let m=ut(i),h={};for(let[M,w]of Object.entries(m)){let j=this.getStreamDescription(Number(M))?.participantId;j&&(h[j]=w/100)}return{type:"notification",notification:L.NETWORK_STATUS,statuses:h};case 7:return this._createParticipantSourcesUpdateNotification(i);case 8:{let w=ut(i).map(j=>{let[z,ae,ve,ye,X,be,Me]=j;return{participantId:this.getStreamDescription(z)?.participantId,gain:ae,pause:ve,offset:ye,mute:X,liveStatus:be,startTimeMs:Me}});return{type:"notification",notification:L.MOVIE_UPDATE_NOTIFICATION,data:w}}case 9:let R=ut(i);return{type:"notification",notification:L.VIDEO_SUSPEND_SUGGEST,bandwidth:R};default:return d.debug("unsupported message type: "+t),null}}_decodeMediaType(r){if(r===null)return null;switch(r){case 0:return"CAMERA";case 1:return"SCREEN";default:throw new Error(`Unsupported media type: ${r}`)}}_createParticipantSourcesUpdateNotification(r){let e=ut(r),t=[];for(let[i,a]of Object.entries(e)){let s=a[0],o=a[1],u=a[2],p=!!a[3],m=a[4]!==null?!!a[4]:void 0,h;if(s!==null){if(h=this.getStreamDescription(s),!h){d.error(`could not uncompress participant ID ${s}`);continue}}else h=null;if(u===null){d.error("unexpected null sequenceNumber",i,a);continue}let R=$e.PARTICIPANT_AGNOSTIC_TRACK_PREFIX+"-"+i,M=o?o>>>0:null;t.push({participantStreamDescription:h,streamId:R,rtpTimestamp:M,sequenceNumber:u,fastScreenShare:p,suspend:m})}return{type:"notification",notification:L.PARTICIPANT_SOURCES_UPDATE,participantUpdateInfos:t}}};var Do=90,wo=4294967295,Ei=class n extends At{constructor(e,t,i){super(e,t);c(this,"_producerNotification",null);c(this,"_producerCommand",null);c(this,"_producerScreen",null);c(this,"_consumerScreen",null);c(this,"_asr",null);c(this,"_animojiDataChannel",null);c(this,"_animojiReceiver",null);c(this,"_animojiSender",null);c(this,"_isOpen",!1);c(this,"_observer",!1);c(this,"_reconnectionPrevented",!1);c(this,"_statInterval",null);c(this,"_settingsInterval",null);c(this,"_statBytes",{});c(this,"_ssrcMap",{});c(this,"_ssrcMapUpdated",!1);c(this,"_perfStatReporter");c(this,"_producerOfferIsProcessing",!1);c(this,"_producerNextOffer",null);c(this,"_lastStat",null);c(this,"_serverSettings");c(this,"_prevConsumerSettings",{});c(this,"_prevConsumerFastSharingSettings",{});c(this,"_asrTrack",null);c(this,"_captureSender",null);c(this,"_captureReceiver",null);c(this,"_participantIdRegistry",null);c(this,"_disabledSenders",new Set);c(this,"_rtpReceiversByStreamId",{});c(this,"_producerSessionId","");c(this,"_newAudioShareTrack",null);c(this,"_simulcastInfo",null);this.subscribe(this._signaling,Pe.NOTIFICATION,this._onSignalingNotification.bind(this)),this.subscribe(this._mediaSource,"TRACK_REPLACED",this._onReplacedTrack.bind(this)),this.subscribe(this._mediaSource,"SOURCE_CHANGED",this._onSourcesChanged.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){this._captureReceiver?.close(e)}preventRestart(){this._reconnectionPrevented=!0}allowRestart(){this._reconnectionPrevented=!1}updateSettings(e){cr(e,this._serverSettings)||(this._serverSettings=e,this._applyConsumerSettings())}setAnimojiTransport(e,t){if(l.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(){l.simulcast&&b.isSimulcastSupportedByBrowser()&&await this._changeSimulcastInfo(!0,!1)}_createPerfStatsReporter(){this._perfStatReporter?.destroy(),this._perfStatReporter=new pt(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){d.debug(`[${t}] data channel opening`);let a=e.createDataChannel(t,{ordered:!0});a.onopen=()=>{let s=a.readyState;s==="open"?(d.debug(`[${t}] data channel opened`),i(a)):d.error(`[${t}] data channel open failed, state [${s}]`)},a.onerror=s=>{let o=s.error;d.error(`[${t}] data channel error`,o?.errorDetail,o?.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=I.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),l.producerNotificationDataChannel&&this._createDataChannel(this._pc,at.producerNotification,t=>{this._producerNotification=t,this._producerNotification.binaryType="arraybuffer",this._signaling.setProducerNotificationDataChannel(t)}),l.producerCommandDataChannel&&(this._signaling.useCommandDataChannel(!0),this._createDataChannel(this._pc,at.producerCommand,t=>{this._producerCommand=t,this._signaling.setProducerCommandDataChannel(t)})),l.producerScreenDataChannel&&this._createDataChannel(this._pc,at.producerScreenShare,t=>{this._producerScreen=t,this._producerScreen.binaryType="arraybuffer",this._createCaptureReceiver()}),l.asrDataChannel&&this._createDataChannel(this._pc,at.asr,t=>{this._asr=t,this._asr.binaryType="arraybuffer",this._removeAsrTrack(),this._asrTrack=new mr(t,this._participantIdRegistry,i=>{this._onAsrTranscription(i)})}),l.vmoji&&this._createDataChannel(this._pc,at.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(l.vmojiOptions.protocolVersion||1)}),this._newAudioShareTrack=this._mediaSource.getAudioShareTrack();try{this._mediaSource.addTrackToPeerConnection(this._pc,this._observer,!1),this._prevConsumerSettings={},this._prevConsumerFastSharingSettings={},this._applyConsumerSettings()}catch(t){d.error("ServerTransport: Unable to add media source tracks",t),P.log(T.ERROR,"addTrack-single"),this.close(t);return}l.consumerScreenDataChannel&&this._createDataChannel(this._pc,at.consumerScreenShare,t=>{this._consumerScreen=t,this._consumerScreen.binaryType="arraybuffer";let i=this._mediaSource.getScreenTrack();i&&(!l.consumerFastScreenShare||!this._mediaSource.getMediaSettings().isFastScreenSharingEnabled)&&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)|(?:${$e.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||!l.consumerScreenDataChannel||!this._consumerScreen||!t.isScreenSharingEnabled||(this._captureSender&&this._removeCaptureSender(),this._captureSender=new Tt(e,this._consumerScreen,this._signaling,t.isFastScreenSharingEnabled))}_removeCaptureSender(){this._captureSender?.destroy(),this._captureSender=null}_createCaptureReceiver(){!l.producerScreenDataChannel||!this._producerScreen||(this._captureReceiver&&this._removeCaptureReceiver(),this._captureReceiver=new It(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&&!l.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"||i.track.contentHint==="motion")return;let a=!this._disabledSenders.has(i),s=e.maxDimension!==0;if(a&&!s){d.log("Disabling video upload"),this._disabledSenders.add(i),i.replaceTrack(b.getBlackMediaTrack()).catch(u=>{d.error("Could not disable video upload",u)});return}let o=this._mediaSource.getSendVideoTrack();if(!a&&s&&o){d.log("Enabling video upload"),this._disabledSenders.delete(i);let u=i.track;u.enabled=o.enabled,i.replaceTrack(o).then(()=>u.stop()).catch(p=>{d.error("Could not enable video upload",p)})}I.applyVideoTrackSettings(e,i,o??i.track,this._prevConsumerSettings,t)}),this._prevConsumerSettings=t}if(this._mediaSource.getMediaSettings().isFastScreenSharingEnabled&&l.consumerFastScreenShare){let t=this._serverSettings.fastScreenSharing;if(t&&this._pc){let i=[];this._pc.getSenders().forEach(a=>{!a.track||a.track.kind!=="video"||a.track.contentHint==="motion"&&I.applyVideoTrackSettings(t,a,a.track,this._prevConsumerFastSharingSettings,i)}),this._prevConsumerFastSharingSettings=i}}}_onScreenSharingStatus(e){e.track?(!l.consumerFastScreenShare||!this._mediaSource.getMediaSettings().isFastScreenSharingEnabled)&&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,l.statisticsInterval)};this._statInterval=window.setTimeout(e,l.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 le.collectStats(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(o=>o.type==="inbound-rtp"&&o.kind==="audio"&&this._ssrcMap[o.ssrc]==="mix");if(!t)return;let i=$e.AUDIO_MIX,a=this._statBytes[i],s=!1;if(a){let o=t.bytesReceived-a.bytesReceived;o>=0&&o<=5&&(s=!0),a.stalled!==s&&this._triggerEvent("AUDIO_MIX_STALL",s)}this._statBytes[i]={bytesReceived:t.bytesReceived,stalled:s}}_allocateConsumer(){if(!this._signaling.ready)return;let e={estimatedPerformanceIndex:pt.getEstimatedPerformanceIndex(),audioMix:!0,consumerUpdate:!0,producerNotificationDataChannelVersion:l.producerNotificationDataChannel?8:0,producerCommandDataChannelVersion:l.producerCommandDataChannel?3:0,consumerScreenDataChannelVersion:l.consumerScreenDataChannel?1:0,producerScreenDataChannelVersion:l.producerScreenDataChannel?1:0,asrDataChannelVersion:l.asrDataChannel?1:0,animojiDataChannelVersion:l.vmoji?l.vmojiOptions.protocolVersion:1,animojiBackendRender:!l.vmojiOptions.renderingOptions.useFullClientRendering,onDemandTracks:!0,unifiedPlan:!0,singleSession:!0,videoTracksCount:l.videoTracksCount,red:l.serverAudioRed,audioShare:l.audioShare,fastScreenShare:l.fastScreenShare,videoSuspend:l.videoSuspend,simulcast:l.simulcast&&b.isSimulcastSupportedByBrowser(),consumerFastScreenShare:l.consumerFastScreenShare,consumerFastScreenShareQualityOnDemand:l.consumerFastScreenShareQualityOnDemand};!l.videoTracksCount&&!this._observer&&d.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=l.simulcast&&b.isSimulcastSupportedByBrowser(),i=t;try{await this._pc.setRemoteDescription(e)}catch(o){throw d.error("[single] unable to set remote offer",o),P.log(T.ERROR,"setRemoteDescription-single"),o}let a=this._findFirstSimTransceiver();if(t)if(a){d.log(`_processOffer: caps.simulcast=${l.simulcast} mid=${a.mid} dir=${a.direction}`);let o=this._mediaSource.getStream(),u=await this._setupSimulcastTransceiver(o,a);d.log("_processOffer: simulcastInfo",u),u||(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 s;try{if(await this._handleTracks(),d.debug("[single] create local answer"),!this._pc)throw new Error("Interrupt allocation");s=await this._pc.createAnswer()}catch(o){throw d.error("[single] unable to create answer",o),P.log(T.ERROR,"createAnswer-single"),o}try{if(!this._pc)throw new Error("Interrupt allocation");s.sdp=I.patchLocalSDP(s.sdp,!1,b.isBrokenH264Decoder(),!1,l.h264spsPpsIdrInKeyframe),d.debug("[single] set local answer",{answer:s}),await this._pc.setLocalDescription(s)}catch(o){throw d.error("[single] unable to set local answer",o),P.log(T.ERROR,"setLocalDescription-single"),o}if(i&&a){s.sdp=I.patchSimulcastAnswerSdp(s.sdp,a,nt.WIDTH,nt.HEIGHT);for(let o of this._pc.getTransceivers())o.mid===null&&o.stop()}try{d.debug("[single] transmit local answer",{answer:s}),this._updateSSRCMap(e),await this._signaling.acceptProducer(s,Object.keys(this._ssrcMap)),d.debug("[single] remote offer has been processed")}catch(o){d.warn("[single] unable to send local answer",o),P.log(T.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 d.log(`_setup:sim: mid=${t.mid} dir=${t.direction}: wrong encodings:${JSON.stringify(a.encodings)}`),null;let s=ai(nt.WIDTH,nt.HEIGHT,this._serverSettings.camera?.bitrates?.generic),o=0,u=1;for(let m of a.encodings)m.scalabilityMode=ri,m.active=!0,o>=s.streams.length?m.maxBitrate=0:m.maxBitrate=s.streams[o].bitrate,m.scaleResolutionDownBy=u,u=u*2,o++;await t.sender.setParameters(a);let p=i.getSettings();return d.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,d.debug("[single] wait until other remote offer is processed");return}this._producerOfferIsProcessing=!0;let t={type:"offer",sdp:I.patchRemoteSDP(e,b.isOldDataChannelDescription(),!1,!1,!1,b.isBrokenVP9Encoder(),b.isBrokenVP9Decoder())};if(d.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){d.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 _replaceScreenShareTrack(){let e=this._pc?.getTransceivers().find(t=>t.mid?.endsWith("s")&&t?.receiver?.track.kind==="video");if(!e||!e.sender){d.warn("Cannot find screenshare transceiver");return}try{e.direction="sendonly",await e.sender.replaceTrack(this._mediaSource.getScreenShareTrack())}catch(t){d.error("ServerTransport: Unable to replace track",t),P.log(T.ERROR,"replaceTrack-single")}}async _handleTracks(){if(!this._newAudioShareTrack||this._observer)return;let e=this._pc?.getTransceivers().find(t=>t.mid?.endsWith("s")&&t?.receiver?.track.kind==="audio");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",await e.sender.replaceTrack(this._newAudioShareTrack),this._newAudioShareTrack=null}catch(t){d.error("ServerTransport: Unable to replace track",t),P.log(T.ERROR,"replaceTrack-single")}await this._replaceScreenShareTrack()}async _onSignalingNotification(e){if(this._isOpen)switch(e.notification){case L.PRODUCER_UPDATED:await this._onProducerUpdated(e);break;case L.REALLOC_CON:this._reconnect();break;case L.AUDIO_ACTIVITY:this._signalActiveParticipants(e.activeParticipants);break;case L.SPEAKER_CHANGED:this._signalSpeakerChanged(e.speaker);break;case L.STALLED_ACTIVITY:this._signalStalledParticipants(e.stalledParticipants);break;case L.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(),l.breakVideoPayloadTypes&&(d.log("test mode enabled, video switched off"),this._signaling.requestTestMode("breakVideoPayloadTypes",null)),this._producerSessionId=e.sessionId,await 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=s=>{this._triggerEvent("REMOTE_TRACK_REMOVED",i.id,i,s.track)}),i.getTracks().find(s=>s.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(T.ICE_CONNECTION_STATE,e.connectionState),e.connectionState){case"failed":this._reconnectionPrevented?this.close(new Error("Ice connection failed")):(P.logCustom(T.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"),I.getPeerConnectionHostInfo(e).then(a=>{a?.local&&(P.log(T.ICE_CONNECTION_TYPE,a.local.type),d.debug("Selected ICE candidates",a))}),P.logCustom(T.RECONNECT,{param:0});break}}_onReplacedTrack(e,t){if(this._pc){l.consumerScreenDataChannel&&t&&(e=t);let i=(a,s)=>{a.replaceTrack(s).catch(o=>{d.error("ServerTransport: Unable to replace track",o),P.log(T.ERROR,"replaceTrack-single")})};if(d.log(`_onReplacedTrack: newTrack=${e.getSettings().width}x${e.getSettings().height}`),l.simulcast&&b.isSimulcastSupportedByBrowser()&&e.kind==="video"){let s=this._pc?.getTransceivers().find(o=>o.direction==="sendonly"&&o.sender?.track?.kind==="video")?.sender;s?.track?(i(s,e),e.getSettings().width&&e.getSettings().height&&this._changeSimulcastInfo(!1,!1)):d.warn("_onReplacedTrack: simulcast video transceiver not found")}else{let a=this._pc?.getSenders().find(s=>s.track&&s.track.kind===e.kind&&!this._disabledSenders.has(s)&&s.track.contentHint===e.contentHint);a?.track?i(a,e):e.kind==="audio"&&e.contentHint==="music"&&(this._newAudioShareTrack=e)}}this._applyConsumerSettings()}async _onSourcesChanged({kind:e}){e==="screen"&&l.consumerFastScreenShare&&this._mediaSource.getMediaSettings().isFastScreenSharingEnabled&&await this._replaceScreenShareTrack(),this._applyConsumerSettings()}getStreamWaitingTimeMs(e,t){if(!this._pc)return P.log(T.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(T.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(T.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 o=a[0].rtpTimestamp;if(!Number.isInteger(o))return P.log(T.PAT_WAITING_TIME_ERROR,"timestampNotInteger"),d.error(`Cannot get stream waiting time, ${e} receiver's RTP timestamp is not an integer: ${o}`),0;let u=t-o&wo,p=Math.ceil(u/Do);return Math.min(100,Math.max(0,p))}async _changeSimulcastInfo(e,t){let i=this._mediaSource.getMediaSettings().isVideoEnabled,a=this._findFirstSimTransceiver();if(!l.simulcast||!b.isSimulcastSupportedByBrowser()||!i||!a||!a.sender)return;let s=this._mediaSource.getStream();if(!s)return;let o=s.getVideoTracks()[0],u=o.getSettings().width,p=o.getSettings().height,m=ai(u,p,this._serverSettings.camera?.bitrates?.generic),h=t||!Ma(this._simulcastInfo,m);if(!m.streams.length||!h)return;let R=a.sender.getParameters();if(R.encodings||(R.encodings=[{}]),!(R.encodings.length<=1)){if(d.log(`_changeSimulcastInfo: ${u}x${p} command: ${JSON.stringify(m)} `),e){let M=0;for(let w of R.encodings)w.scaleResolutionDownBy=Ai(w.rid),w.scalabilityMode=ri,M>=m.streams.length?(w.maxBitrate=0,w.active=!1):(w.active=!0,w.maxBitrate=m.streams[M].bitrate),M++;await a.sender.setParameters?.(R).catch(w=>{d.error("Failed to set sender parameters",R,w)}),d.log(`_changeSimulcastInfo: actual encodings: ${JSON.stringify(R.encodings)} `)}if(this._simulcastInfo=m,m.streams){let M={mediaSource:1,simulcastInfo:m};await this._signaling.changeSimulcast(M)}}}};var Ze=(e=>(e.DIRECT="DIRECT",e.SERVER="SERVER",e))(Ze||{}),gr=class extends ie{constructor(e,t,i,a){super();c(this,"_signaling");c(this,"_mediaSource");c(this,"_topology");c(this,"_allocated",[]);c(this,"_opened",[]);c(this,"_directTransport",null);c(this,"_serverTransport",null);c(this,"_serverSettings");c(this,"_dtListeners",[]);c(this,"_stListeners",[]);c(this,"_states",{});c(this,"_localState","IDLE");c(this,"_animojiReceiver",null);c(this,"_animojiSender",null);this._signaling=t,this._mediaSource=i,this._topology=e,this._serverSettings=a,this.subscribe(this._signaling,Pe.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 s=a;for(let o of e){if(this._opened.indexOf(o)!==-1){d.warn(`The participant [${o}] has already had opened transport`);continue}if(this._allocated.indexOf(o)===-1){d.warn(`The participant [${o}] has no allocated transport`);continue}this._opened.push(o),s=!0}s&&(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){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"&&(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(),l.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){l.vmoji&&t.isMe&&l.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===L.TOPOLOGY_CHANGED)return this._onTopologyChanged(e)}_onTopologyChanged(e){if(e.topology!==this._topology){if(d.log(`Topology changed ${this._topology} -> ${e.topology}`),P.log(T.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||[],s=t.length&&i.length?I.composeParticipantId(t[0],i[0],a[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 o=this._allocated[0];if(this._directTransport)this._directTransport.allowRestart();else{let u=s===o;this._directTransport=this._createDirectTransport(o,u)}this._opened.indexOf(o)>=0&&this._directTransport.open()}this._triggerEvent("TOPOLOGY_CHANGED",this._topology)}}_createDirectTransport(e,t=!1){let i=new Ii(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 Ei(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(){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){l.noiseSuppression!==e&&(l.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(!l.vmoji)return;this._animojiReceiver=new l.vmoji.AnimojiReceiver((t,i)=>this._onAnimojiStream(t,i),t=>this._onAnimojiStream(t,null),t=>{this._triggerEvent("ANIMOJI_ERROR",t)},l.vmojiOptions.renderingOptions);let e=this._mediaSource.getStream();this._animojiSender=new l.vmoji.AnimojiSender(e,this._signaling.getPeerId(),l.vmojiOptions.protocolVersion,{requested:this._mediaSource.isAnimojiRequested,useAI:l.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"?(P.log(T.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(T.PAT_WAITING_TIME_ERROR,"noTransport"),d.error("Cannot get stream waiting time, server transport is not initialized"),0)}};var _r=class extends ie{constructor(e){super();c(this,"_detector",null);c(this,"_interval",null);c(this,"_activeParticipants");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,l.voiceParams.interval)};this._interval=window.setTimeout(a,l.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===$e.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 ie{constructor(e,t,i){super();c(this,"_speakerId",null);c(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 s=e[a].smoothed;s>t&&s>l.voiceParams.threshold&&(t=s,i=a)}),i&&i!==this._speakerId){let a=this._speakerId&&Object.hasOwn(e,this._speakerId)?e[this._speakerId].smoothed:0;t>a*l.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 Ti=class extends ie{constructor(e,t,i){super();c(this,"_transport");c(this,"_volumes",{});c(this,"_participants",{});c(this,"_connectionTimeout",0);c(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),l.specListenerParams.connectionTimeout)),this._volumeTimeout||(this._volumeTimeout=window.setTimeout(this._onVolumeTimeout.bind(this),l.specListenerParams.volumeTimeout))),t==="FAILED"&&this._connectionTimeout&&(d.warn("Transport failed, send callSpecError"),P.log(T.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(T.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(T.CALL_SPEC_ERROR,`${this._transport.getTopology()}_VOLUME_TIMEOUT_${i}`))}),e.length&&d.warn("There is silent participant, send callSpecError"),this._volumeTimeout=0}};var Sr=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){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=r.custom_error?.vchat_detailed_api_error.code;P.logClientStats({name:T.CALL_FINISH,reason:n.correctHangupReason(r.hangup),call_topology:e==="DIRECT"?"D":"S",...i&&{string_value:i}})}};var vr=class{constructor(){c(this,"_isCallMarked",!1);c(this,"_isFinished",!1);c(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,le.setMark(T.FIRST_MEDIA_RECEIVED))}measure(){this._isFinished||(this._isFinished=!0,this._callType&&Re.logEventualStat({name:T.FIRST_MEDIA_RECEIVED,call_type:this._callType}))}};var ko=1e3,Oo=1e4;var xo=15,$=class $ extends ie{constructor(e,t){super();c(this,"_api");c(this,"_signaling");c(this,"_signalingActor");c(this,"_mediaSource",null);c(this,"_conversation",null);c(this,"_myLastRequestedLayouts",{});c(this,"_state","IDLE");c(this,"_participantState",J.CALLED);c(this,"_participants",{});c(this,"_pendingParticipants",new Map);c(this,"_transport",null);c(this,"_debugInfo",null);c(this,"_volumesDetector",null);c(this,"_speakerDetector",null);c(this,"_localVolumeDetector",null);c(this,"_specListener",null);c(this,"_activeSpeakerId",null);c(this,"_lastSignalledActiveSpeakerId",null);c(this,"_isRealTimeAsrRequested",!1);c(this,"_serverSettings",Mn());c(this,"_onUnload");c(this,"_audioOutput");c(this,"_lastStalled",{});c(this,"_audioMixStalled",!1);c(this,"_audioFix",null);c(this,"_streamByStreamId",new Map);c(this,"_streamIdByStreamDescription",new Map);c(this,"_streamWaitTimerByStreamDescription",new Map);c(this,"_sequenceNumberByStreamDescription",new Map);c(this,"_cooldownTimestampByStreamDescription",new Map);c(this,"_cooldownQueueCleanupTimer",null);c(this,"_statFirstMediaReceived");c(this,"_changeMediaSettings",I.debounce(async e=>{if(this._signaling.ready)try{await 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),P.setConversationIdProvider(()=>this._conversation?.id||null),Re.create(),Xe.create(()=>this._transport?.getTopology()),this._api=e,this._signaling=new zt,this._signalingActor=new pr(this._onSignalingNotification.bind(this)),this._onUnload=()=>{this._conversation&&this._api&&(this._api.hangupConversation(this._conversation.id),l.clientEventsLoggingEnabled&&P.logClientEvent({event_type:T.CALL_DECLINED_OR_HANGED_LOCALLY,reason:"none"},!0)),P.destroy(),Re.destroy(),Xe.destroy()},window.addEventListener("unload",this._onUnload),this._statFirstMediaReceived=new vr,this._audioOutput=new hi(this._statFirstMediaReceived),l.videoTracksCount>0&&(this._cooldownQueueCleanupTimer=window.setInterval(this._cleanupCooldownQueue.bind(this),ko))}static current(){return $._current}static hangupAfterInit(){$._activationMutex&&!$._current&&($._delayedHangup=!0)}static id(){return $._current?._conversation?.id||null}async onStart({opponentIds:e,opponentType:t,mediaOptions:i,payload:a="",joiningAllowed:s=!1,requireAuthToJoin:o=!1,onlyAdminCanShareMovie:u,externalIds:p,onFastStart:m}){if($._activationMutex)throw P.log(T.ERROR,"startCall"),d.warn("Conversation: there is already running activation"),new G(k.FAILED);let h=Date.now();$._activationMutex=!0,we.startSession();try{this._mediaSource=this._createMediaSource(),await this._mediaSource.request(i);let R=this._mediaSource.getMediaSettings();t===rt.CHAT||e&&e.length>1?this._logWithMediaSettings(T.OUTGOING_MULTIPARTY_CALL,R):this._logWithMediaSettings(T.OUTGOING_CALL,R);let M=await this._startConversation({opponentIds:e,opponentType:t,direction:ke.OUTGOING,mediaOptions:i,payload:a,joiningAllowed:s,requireAuthToJoin:o,onlyAdminCanShareMovie:u,externalIds:p,startedTime:h,onFastStart:m});if(!this._conversation)throw new G(k.UNKNOWN_ERROR);if(this._participantState=J.ACCEPTED,this._changeMediaSettings(R),await this._processConnection(M),await this._allocateTransport(),this._createSpeakerDetector(),await this._createSpecListener(),this._signaling.readyToSend(),$._delayedHangup)throw new G(k.CANCELED);return d.debug("Outgoing call",{opponentIds:e,opponentType:t,mediaOptions:i}),await this._processConnectionSharedMovieInfo(M),await this._processConversationUrlSharingInfo(M),E.onLocalStream(this._mediaSource.getStream(),this._mediaSource.getMediaSettings()),E.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._getMuteStatesForCurrentRoom(),await this._getMainRoomParticipants()),await this._onConversationParticipantListChunk(M),await this._processPinnedParticipants(M),E.onLocalStatus("WAITING"),this._toggleJoinAvailability(),this._changeFeatureSet(),this._changeNeedRate(),$._current=this,this._conversation.concurrent&&await this._acceptConcurrent(),this._conversation}catch(R){throw this._close(R,"Unable to start conversation"),R}finally{$._activationMutex=!1}}async onJoin(e){if($._activationMutex)throw P.log(T.ERROR,"joinCall"),d.warn("Conversation: there is already running activation"),new G(k.FAILED);let t=Date.now();$._activationMutex=!0,this._state="PROCESSING",we.startSession();try{let i=!!e.observedIds?.length;if(i&&l.videoTracksCount>0)throw d.error("Observer mode: please set videoTracksCount=0"),new G(k.UNSUPPORTED);this._mediaSource=this._createMediaSource(),await this._mediaSource.request(e.mediaOptions,!i);let a=this._mediaSource.getMediaSettings();this._logWithMediaSettings(T.JOIN_CONVERSATION,a);let s=await this._joinConversation(e,t);if(!this._conversation)throw new G(k.UNKNOWN_ERROR);return this._conversation.observer=i,E.onLocalStream(this._mediaSource.getStream(),a),this._conversation.waitingHall?(d.log("In waiting hall"),$._current=this,$._activationMutex=!1,this._signaling.readyToSend(),E.onLocalStatus("WAITING_HALL"),this._conversation):this._onJoinPart2(s)}catch(i){throw $._activationMutex=!1,this._close(i,"Unable to join conversation"),i}}async _onJoinPart2(e){d.debug("Join conversation part 2"),$._activationMutex=!0;try{if(this._participantState=J.ACCEPTED,!this._conversation||!this._mediaSource)throw new G(k.UNKNOWN_ERROR);if(this._statFirstMediaReceived.markOnJoin(this._conversation.topology),!this._conversation.observer&&!this._isAudienceModeListener()&&this._changeMediaSettings(this._mediaSource.getMediaSettings()),await this._processConnection(e),await this._allocateTransport(),this._createSpeakerDetector(),await this._createSpecListener(),this._signaling.readyToSend(),this._state==="CLOSE")return this._conversation;if($._delayedHangup)throw new G(k.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 E.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._getMuteStatesForCurrentRoom(),await this._getMainRoomParticipants(),t),await this._onConversationParticipantListChunk(e),await this._processPinnedParticipants(e),E.onLocalStatus("WAITING"),this._toggleJoinAvailability(),this._changeNeedRate(),this._state="ACTIVE",this._changeFeatureSet(),$._current=this,this._openTransport(Object.values(await this._getParticipants()),!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{$._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=te.USER,i,a,s){if($._activationMutex)throw d.warn("Conversation: there is already running activation"),new G(k.REJECTED);$._activationMutex=!0;try{let o=Date.now(),u=await this._prepareConversation(e,t,i,a,s);if(this._mediaSource=this._createMediaSource(),!this._conversation)throw new G(k.UNKNOWN_ERROR);if(!u.conversation.participants.find(m=>m.state===J.CALLED&&m.id===this._conversation?.userId))throw d.log("Push rejected (there is an active call)"),P.log(T.PUSH,"rejected"),new G(k.REJECTED);if(we.startSession(),await this._processConnection(u),this._extractConnectionUrlSharingInfo(u),await this._allocateTransport(),this._createSpeakerDetector(),await this._createSpecListener(),await this._processPinnedParticipants(u),this._signaling.readyToSend(),this._logCallStartEvent(o,ke.INCOMING),P.log(T.PUSH,"accepted"),$._current=this,$._delayedHangup)throw new G(k.CANCELED);$._activationMutex=!1}catch(o){throw $._activationMutex=!1,this._close(o,"Unable to handle inbound call push"),o}}_isInWaitingHall(e){return!e.conversation||(e.conversation.options||[]).indexOf(Jt.WAITING_HALL)<0?!1:this._isRestricted(e)}_isRestricted(e){let t=(e.conversation.participants||[]).find(i=>I.comparePeerId(i.peerId,e.peerId));return t&&t.restricted||!1}_isAudienceMode(e){return e.conversation?.options?.includes(Jt.AUDIENCE_MODE)||!1}_isAudienceModeListener(){return this._conversation?.audienceMode&&this._conversation?.restricted}async _acceptConcurrent(){if(!this._mediaSource||!this._conversation||!this._transport)throw new G(k.UNKNOWN_ERROR);this._state="PROCESSING";let e=this._mediaSource.getMediaSettings();this._logWithMediaSettings(T.ACCEPT_CONCURRENT,e),d.debug("Concurrent call",{conversationId:this._conversation.id});try{this._statFirstMediaReceived.markAcceptCall(this._transport.getTopology()),await this._signaling.acceptCall(this._mediaSource.getMediaSettings()),E.onCallAccepted(),this._state="ACTIVE",this._participantState=J.ACCEPTED,this._changeFeatureSet(),this._openTransport(Object.values(await this._getParticipants()),!0)}catch(t){this._close(t,"Unable to accept concurrent call")}}async _getMainRoomParticipants(){let e=await this._getParticipants();return I.mapSharedParticipants(Object.values(e).filter(t=>!t.isInRoom))}_decodeExternalConversationParams(e){let[t,i]=e.split(":"),a=parseInt(t,10);if(isNaN(a))throw new Error("Invalid original length in prefix");let s=atob(i),o=new Uint8Array(s.length);for(let u=0;u<s.length;u++)o[u]=s.charCodeAt(u);try{let p=Nn(o,a).reduce((ve,ye)=>(ve+=String.fromCharCode(ye),ve),""),{srcp:m,stne:h,tkn:R,trne:M,trnp:w,trnu:j,wse:z,wte:ae}=JSON.parse(p);return{token:R,endpoint:z,wt_endpoint:ae,turn_server:{urls:M.split(","),username:j,credential:w},stun_server:{urls:h.split(",")},client_type:m}}catch(u){throw this._close(u,"Can't decompress conversation params"),u}}_logCallStartEvent(e,t){let i={[ke.OUTGOING]:"outgoing",[ke.INCOMING]:"incoming",[ke.JOINING]:"join"};Re.logEventualStat({name:T.CALL_START,value:Date.now()-e,string_value:JSON.stringify({labels:[i[t],"warmup_start"]})})}async accept(e){if(this._state!=="IDLE")throw P.log(T.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 G(k.UNKNOWN_ERROR);this._state="PROCESSING",d.debug("Accept incoming call",e);try{await this._mediaSource.request(e);let t=this._mediaSource.getMediaSettings();this._logWithMediaSettings(T.ACCEPT_INCOMING,t),this._changeMediaSettings(t),this._statFirstMediaReceived.markAcceptCall(this._transport.getTopology()),await this._signaling.acceptCall(t),this._participantState=J.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 s=await this._signaling.getRooms(this._isCallAdmin());if(s.rooms?.rooms){let u=await this._getParticipants();s.rooms.rooms.forEach(p=>{p.participantIds?.forEach(m=>{u[m]&&(u[m].isInRoom=!0)})})}this._conversation.roomId=s.rooms?.roomId||null;let o=await this._extractExternalRoomsData(s.rooms?.rooms,s.rooms?.roomId);if(E.onCallAccepted(),E.onLocalStream(this._mediaSource.getStream(),t),E.onConversation(this._conversation.externalId,this._conversation.mediaModifiers,this._getMuteStatesForCurrentRoom(),await this._getMainRoomParticipants(),o),l.useParticipantListChunk){let u=await this._getInitialParticiapntListChunk(),p=await this._getParticipants();u?.participants?.forEach(m=>{let h=I.composeId(m),R=p[h];R&&(R.movieShareInfos=m.movieShareInfos)}),await this._onConversationParticipantListChunk({participants:u})}return E.onLocalStatus("WAITING"),this._toggleJoinAvailability(),this._changeNeedRate(),this._state="ACTIVE",this._changeFeatureSet(),this._openTransport(Object.values(await this._getParticipants()),!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 P.log(T.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(T.DECLINE_INCOMING,this._mediaSource?.getMediaSettings()),this._participantState=J.HUNGUP,this._signaling.ready&&await this._signaling.hangup(k.REJECTED),this._close(new G(k.REJECTED))}async hangup(){d.debug("Hangup");let e=this._state==="ACTIVE"?k.HUNGUP:k.CANCELED;P.log(T.HANGUP,e),this._signaling.ready?(await this._signaling.hangup(e),this._close(new G(e))):E.onHangup(new G(k.HUNGUP),this._conversation&&this._conversation.id)}async addParticipant(e,t){if(!this._signaling.ready){this._close(new G(k.UNKNOWN_ERROR),"Unable to add participant");return}let i=await this._signaling.addParticipant(e.map(q.toSignaling),t),a=null;i.type==="error"&&(i.error==="call-unfeasible"?a=i.status:a=k.UNKNOWN_ERROR);let s=i.participants;for(let o of s)await this._onAddParticipant(I.composeId(o),o,a)}async addParticipantLegacy(e,t){if(!this._signaling.ready){this._close(new G(k.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=k.UNKNOWN_ERROR);let s=i.participants;for(let o of s)await this._onAddParticipant(I.composeId(o),o,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===J.CALLED||a.state===J.ACCEPTED)&&(this._transport.isAllocated(a.id)||this._transport.allocate(a.id,t)),a.state===J.ACCEPTED&&i.push(a.id);i.length&&this._transport.open(i,null,!!this._conversation?.observer)}async _close(e,t){t&&d.error(t,e),d.debug("Close conversation",e),Sr.sendHangupEvent(e,this._transport?.getTopology()),Xe.destroy(),this._signaling.readyToSend(!1),e.error?this._signaling.ready&&this._signaling.hangup(k.FAILED):P.log(T.ERROR,e.hangup),$._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){E.onHangup(e,i),this.destroy();return}if(e.hangup===k.HUNGUP&&(!e.remote||this._isCalledState())){E.onHangup(e,i),this.destroy();return}if(e.hangup===k.MISSED&&!e.remote){E.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)&&$._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=J.HUNGUP,this._changeFeatureSet(),this._cleanupMediaSource(),await this._cleanupParticipants(),this._cleanupParticipantAgnosticStreams(),this._cleanupTransport(),this._cleanupSpeakerDetector(),this._cleanupSpecListener(),this._cleanupSignaling(),this._api.cleanup(),P.destroy(),Re.destroy(),this._conversation=null,this._myLastRequestedLayouts={},$._current=null,$._delayedHangup=!1,E.onHangup(e||new G(k.UNKNOWN_ERROR),i)}async destroy(){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=J.HUNGUP,this._cleanupMediaSource(),await this._cleanupParticipants(),this._cleanupParticipantAgnosticStreams(),this._cleanupTransport(),this._cleanupSpeakerDetector(),this._cleanupSpecListener(),this._cleanupSignaling(),this._api.cleanup(),this._cleanupListeners(),P.destroy(),Re.destroy(),this._conversation=null,this._myLastRequestedLayouts={},$._current=null,$._delayedHangup=!1}async _getConversationParams(e){let t=await this._api.getConversationParams(e);d.debug("Api.getConversationParams",t);let i=[],{turn_server:a,stun_server:s}=t;if(s&&i.push(s),a&&a.urls){let o=a.urls.filter((u,p,m)=>m.indexOf(u)===p);o.push(`${o[o.length-1]}?transport=tcp`),i.push({urls:o,username:a.username,credential:a.credential})}return l.iceServers=i,l.wssBase=t.endpoint,t.wt_endpoint&&(l.wtsBase=t.wt_endpoint),l.wssToken=t.token,t.client_type&&(l.clientType=t.client_type),t.external_user_type&&(l.externalUserType=t.external_user_type),t}_setConversationParams({turn_server:e,stun_server:t,endpoint:i,wt_endpoint:a,token:s,client_type:o}){let u=[];if(t&&u.push(t),e&&e.urls){let p=e.urls.filter((m,h,R)=>R.indexOf(m)===h);p.push(`${p[p.length-1]}?transport=tcp`),u.push({urls:p,username:e.username,credential:e.credential})}l.iceServers=u,l.wssBase=i,l.wssToken=s,a&&(l.wtsBase=a),o&&(l.clientType=o)}_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({opponentIds:e,opponentType:t,direction:i,mediaOptions:a,payload:s="",joiningAllowed:o=!1,requireAuthToJoin:u=!1,onlyAdminCanShareMovie:p,externalIds:m,startedTime:h,onFastStart:R}){le.setMark(T.SIGNALING_CONNECTED);let M=I.uuid();d.debug("Conversation: start",{conversationId:M,opponentIds:e,opponentType:t,direction:i});let w=a.includes(se.VIDEO),j;if(R)try{let ae={deviceId:this._api.deviceId(),sdkVersion:l.sdkVersion,clientAppKey:l.apiKey,platform:l.platform,protocolVersion:l.protocolVersion,domainId:l.domain},ve=JSON.stringify(ae),ye=await R({internalParams:ve,conversationId:M,externalIds:m,opponentType:t,mediaOptions:a,isVideo:w,joiningAllowed:o,requireAuthToJoin:u}),X=JSON.parse(ye.internalCallerParams);j={endpoint:X.endpoint,wt_endpoint:X.wtEndpoint,id:M,is_concurrent:X.isConcurrent,client_type:X.clientType,rejected_participants:ye.rejectedParticipants,stun_server:X.stun,turn_server:X.turn,token:new URL(X.endpoint).searchParams.get("token")??""},d.debug("FastStart",j)}catch{throw new G(k.UNKNOWN_ERROR,{message:"Cannot parse internal params"})}else j=await this._api.startConversation(M,e,t,w,s,o,u,{onlyAdminCanShareMovie:p},m),d.debug("Api.startConversation",j);this._setConversationParams(j);let z=await this._connectSignaling(Ke.START,j);return await this._setConversation(j,z,i),this._logCallStartEvent(h,ke.OUTGOING),z}async _joinConversation(e,t){le.setMark(T.SIGNALING_CONNECTED);let{conversationId:i,mediaOptions:a,chatId:s,joinLink:o,observedIds:u,payload:p}=e;d.debug("Conversation: join",{conversationId:i,joinLink:o,observedIds:u});let m=a.includes(se.VIDEO),h;if(i)h=await this._api.joinConversation(i,m,s);else if(o)h=await this._api.joinConversationByLink(o,m,u,p);else throw new G(k.UNKNOWN_ERROR);d.debug("Api.joinConversation",h),this._setConversationParams(h);let R=await this._connectSignaling(Ke.JOIN,h);return await this._setConversation(h,R,ke.JOINING),this._logCallStartEvent(t,ke.JOINING),R}async _prepareConversation(e,t=te.USER,i,a,s){le.setMark(T.SIGNALING_CONNECTED),d.debug("Conversation: push",{conversationId:e,type:t,peerId:i});let o=this._api.getUserId();if(!o)throw new G(k.UNKNOWN_ERROR);let u=0,p="",m="",h={id:e,peerId:i,endpoint:p,wt_endpoint:m,is_concurrent:!1,p2p_forbidden:!1,device_idx:0,token:""};if(a){let M=this._decodeExternalConversationParams(a);this._setConversationParams(M),p=s??`${l.wssBase}?userId=${o}&entityType=${t}&deviceIdx=${u}&conversationId=${e}&token=${l.wssToken}`,h.token=M.token,h.endpoint=p,l.wtsBase&&(m=`${l.wtsBase}?userId=${o}&entityType=${t}&deviceIdx=${u}&conversationId=${e}&token=${l.wssToken}`,h.wt_endpoint=m)}else{let M=await this._getConversationParams(e);u=M.device_idx||0,p=s??`${l.wssBase}?userId=${o}&entityType=${t}&deviceIdx=${u}&conversationId=${e}&token=${l.wssToken}`,p=this._addGeoParamsToEndpoint(p,M),h.token=M.token,h.endpoint=p,h.device_idx=u,l.wtsBase&&(m=`${l.wtsBase}?userId=${o}&entityType=${t}&deviceIdx=${u}&conversationId=${e}&token=${l.wssToken}`,m=this._addGeoParamsToEndpoint(m,M),h.wt_endpoint=m)}let R=await this._connectSignaling(Ke.ACCEPT,h);return $._current&&($._current._participantState===J.ACCEPTED||$._current._participantState===J.CALLED)?(d.log("Push rejected (busy)"),P.log(T.PUSH,"busy"),this._signaling.ready&&this._signaling.hangup(k.BUSY),Promise.reject(new G(k.BUSY))):($._current&&($._current.destroy(),$._current=null),await this._setConversation(h,R,ke.INCOMING,t),R)}async _createParticipant(e,t){let i=Object.assign({id:null,externalId:null,mediaSettings:Ie(),participantState:{},state:J.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 G(k.NETWORK_ERROR),t),t}}async _setConversation(e,t,i,a=te.USER){let{participants:s}=t.conversation;s.forEach(m=>{let h=I.composeId(m),R=q.fromSignalingParticipant(m,!1);if(R){this._api.cacheExternalId(h,R);let M=I.composeDecorativeId(m),w=q.fromSignalingParticipant(m);M&&w&&(this._api.cacheExternalId(M,w),this._api.mapDecorativeId(m.decorativeUserId,m.id))}});let o=this._api.getUserId(),u=e.device_idx||0;if(!o){let m=(t.conversation.participants||[]).find(h=>I.comparePeerId(h.peerId,t.peerId));if(!m)throw new G(k.UNKNOWN_ERROR);o=Number(m.id),m.idType&&(a=m.idType),m.deviceIdx&&(u=m.deviceIdx),this._api.setUserId(o)}let p=I.composeParticipantId(o,a,u);this._conversation={userId:o,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??t.conversation.joinLink,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},we.conversationId=t.conversation.id||e.id,this._signaling.setConversationId(this._conversation.id),e.p2p_forbidden&&(l.forceRelayPolicy=e.p2p_forbidden),P.log(T.RELAY_POLICY,l.forceRelayPolicy?"1":"0"),this._changeFeatureSet(),this._logDevices()}_updateConversation(e){if(!this._conversation)throw new G(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 Ui;return this.subscribe(e,"SOURCE_CHANGED",this._onLocalMediaStreamChanged.bind(this)),this.subscribe(e,"SCREEN_STATUS",this._onScreenSharingStatus.bind(this)),this._audioFix=new Yt(e),e}async _connectSignaling(e,t){this._signaling.setEndpoint(t.endpoint),this._signaling.setWebTransportEndpoint(t.wt_endpoint??null),this.subscribe(this._signaling,Pe.NOTIFICATION,a=>this._signalingActor.add(a)),this.subscribe(this._signaling,Pe.FAILED,this._onSignalingFailed.bind(this)),this.subscribe(this._signaling,Pe.RECONNECT,this._onSignalingReconnect.bind(this));let i=await this._signaling.connect(e,t);return Re.logEventualStat({name:T.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(Xr.ATTENDEE,e.chatRoom.totalCount,e.chatRoom.firstParticipants,null,null)}async _onConversationParticipantListChunk(e){let t=e.participants;t&&E.onConversationParticipantListChunk(await this._participantListChunkToExternalChunk(this._createParticipantListChunk(t)))}_createParticipantListChunk(e){return{...{participants:[],countBefore:0,countAfter:0,markerFound:!1},...e}}async _participantListChunkToExternalChunk(e){let t=await this._getParticipants(),i=I.mapSharedParticipants(e.participants.reduce((a,s)=>{let o=I.composeId(s);return t[o]&&a.push(t[o]),a},[]));return{...e,participants:i}}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)return;let i=e[0]?.externalId?.type;i&&(l.externalUserType=i);let a=await this._getParticipants();for(let s of e){let o=I.composeId(s);if(d.test("Conversation:RegisterParticipant",o),this._isMe(o)){this._conversation.roles=s.roles||[],this._conversation.roles.length&&(d.debug(`Local roles changed: ${s.roles}`),E.onLocalRolesChanged(this._conversation.roles,!0)),this._registerParticipantLocalMuteState(s);continue}if(s.state===J.HUNGUP||s.state===J.REJECTED){a[s.id]&&await this._removeParticipant(a[s.id],k.HUNGUP);continue}let u=I.composeDecorativeId(s);this._registerParticipant({id:o,externalId:q.fromSignalingParticipant(s),mediaSettings:Ie(s.mediaSettings),participantState:I.mapParticipantState(s),state:s.state,roles:s.roles||[],status:"WAITING",muteStates:s.muteStates||{},unmuteOptions:s.unmuteOptions||[],observedIds:s.observedIds||[],markers:this._denormalizeMarkers(o,s.markers),movieShareInfos:s.movieShareInfos,isInRoom:t},u);let p=await this._getParticipant(o);p&&s.roles&&s.roles.length&&(d.debug(`Roles for participant [${o}] changed: ${s.roles}`),E.onRolesChanged(p.externalId,s.roles,!0))}}_registerParticipantLocalMuteState({muteStates:e,unmuteOptions:t}){if(!e)return;let i=async()=>{let a=dr(e,Be.MUTE),s=dr(e,Be.MUTE_PERMANENT);for(let o of[a,s])o.length&&await this._onMuteParticipant({muteStates:e,unmuteOptions:t,mediaOptions:o,stateUpdated:!0})};I.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}async _getExistedParticipantByIdOrCreate(e){let i=(await this._getParticipants())[e];if(i)return i;let a=this._api.getDecorativeIdByInitialId(I.decomposeId(e).id),s=a?I.composeUserId(a):void 0;return this._createParticipant({id:e},s)}async _getExternalIdByParticipantId(e){if(this._isMe(e))return this._conversation?.externalId;if(l.useParticipantListChunk)return(await this._getExistedParticipantByIdOrCreate(e)).externalId;let t=await this._getParticipants();if(t[e]?.externalId)return t[e].externalId;{let i=await this._getParticipantId(e);return this._api.cacheExternalId(e,i),i}}async _registerParticipantAndSetMarkersIfChunkEnabled(e,t){if(l.useParticipantListChunk){let a=this._registerParticipantInCache(await this._getExistedParticipantByIdOrCreate(e));return a.markers=this._denormalizeMarkers(a.id,t),a}return(await 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,[s,o])=>(a[s]={...i,...o,id:e},a),{})}_processRooms(e){let t=e.rooms?.roomId??null;this._onRoomSwitched(t,!0)}_processMuteStates(e,t=!1){let i=wn(e);this._setMuteStatesForRoomId(i,null);for(let u of e.rooms?.rooms??[])this._setMuteStatesForRoomId(u.muteStates,u.id);let a=this._getMuteStatesForCurrentRoom();t&&(a=xn(e,a));let s=Object.keys(a),o=this._conversation?.roomId;s.length&&this._onMuteParticipant({muteStates:a,mediaOptions:s,muteAll:!0,stateUpdated:!0,roomId:o},t)}_processRecordInfos(e){this._onRecordInfo(e.conversation?.recordInfo??null);for(let t of e.rooms?.rooms??[])this._onRecordInfo(t.recordInfo??null,t.id)}async _processPinnedParticipants(e){e.conversation.pinnedParticipantId?await this._onPinParticipant(e.conversation.pinnedParticipantId):this._conversation?.pinnedParticipantIdByRoom.delete(null);for(let t of e.rooms?.rooms??[])t.pinnedParticipantId?await this._onPinParticipant(t.pinnedParticipantId,!1,void 0,t.id):this._conversation?.pinnedParticipantIdByRoom.delete(t.id)}async _allocateTransport(){if(!this._conversation||!this._mediaSource)return;this._transport=new gr(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===ke.OUTGOING&&!this._conversation.concurrent,t=await this._getParticipants();for(let i of Object.values(t))(i.state===J.ACCEPTED||i.state===J.CALLED)&&this._transport.allocate(i.id,e)}_createSpeakerDetector(){this._transport&&this._conversation&&(this._volumesDetector=new _r(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 _i(this._mediaSource))}async _createSpecListener(){this._transport&&this._volumesDetector&&(this._specListener=new Ti(this._transport,this._volumesDetector,await this._getParticipants()))}_logDevices(){let e=b.getCameras().length,t=b.getMicrophones().length;d.debug("Cameras: "+e+(b.hasCameraPermission()?"✔":"✖")+", Microphones: "+t+(b.hasMicrophonePermission()?"✔":"✖")),P.log(T.DEVICES,`${e}_${t}`)}_logWithMediaSettings(e,t){P.log(e,[t?.isAudioEnabled&&"audio",t?.isVideoEnabled&&"video"].filter(Boolean).join("_"))}async _removeParticipant(e,t){if(e.state===J.CALLED||e.state===J.ACCEPTED||this._state==="CLOSE")return;e.id===this._lastSignalledActiveSpeakerId&&(this._lastSignalledActiveSpeakerId=null);let i=await this._getParticipants();if(i[e.id]){t===k.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[a,s]of Object.entries(e.lastRequestedLayouts))this._streamIdByStreamDescription.delete(a),this._sequenceNumberByStreamDescription.delete(a),this._cooldownTimestampByStreamDescription.delete(a),this._streamWaitTimerByStreamDescription.has(a)&&(window.clearTimeout(this._streamWaitTimerByStreamDescription.get(a)),this._streamWaitTimerByStreamDescription.delete(a)),this._sendUpdateDisplayLayout({[a]:{stopStream:!0}});this._api.unmapDecorativeId(e.id),delete i[e.id],E.onRemoteRemoved(e.externalId,e.markers)}}_cleanupListeners(){this.unsubscribe(),window.removeEventListener("unload",this._onUnload)}_cleanupMediaSource(){this._mediaSource&&(this._mediaSource.destroy(),this._mediaSource=null)}async _cleanupParticipants(){Object.values(await this._getParticipants()).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(){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()}async _onAddParticipant(e,t,i){d.debug(`Add new participant [${e}]`);let a=await this._getParticipant(e);if(a&&(a.state===J.ACCEPTED||a.state===J.CALLED)){d.warn(`Participant [${a.id}:${a.state}] is already in conversation`);return}if(!a){let s=I.composeDecorativeId(t);this._registerParticipant({id:e,externalId:q.fromSignalingParticipant(t),mediaSettings:Ie(t.mediaSettings),state:t.state,roles:t.roles||[],muteStates:t.muteStates||{},unmuteOptions:t.unmuteOptions||[],observedIds:t.observedIds||[]},s),a=await this._getParticipant(e)}this._setParticipantsStatus([a],"WAITING"),i?(a.state=J.HUNGUP,await this._removeParticipant(a,i)):this._transport&&(a.state=J.CALLED,this._transport.allocate(a.id,!0),P.log(T.ADD_PARTICIPANT),this._invokeRolesChangedCallbackIfNeeded(a))}async _onRemoveParticipant(e){d.debug(`Remove participant [${e}]`);let t=[],i=await this._getParticipants();for(let a=0;a<=xo;a++){let s=I.compose(e,a),o=i[s];o&&t.push(o)}if(!t.length){this._warnParticipantNotInConversation(e);return}if(this._transport)for(let a of t)this._transport.close(a.id);P.log(T.REMOVE_PARTICIPANT)}async changeDevice(e){return e==="audiooutput"?this._audioOutput.changeOutput():this._mediaSource?this._mediaSource.changeDevice(e):Promise.reject(re.UNKNOWN)}stopVideoTrack(){return this._mediaSource?.stopVideoTrack()}async toggleScreenCapturing(e){return this._mediaSource?this._mediaSource.toggleScreenCapturing(e):Promise.reject(re.UNKNOWN)}async disableScreenCapturing(){return this._mediaSource?this._mediaSource.disableScreenCapturing():Promise.reject(re.UNKNOWN)}toggleAnimojiCapturing(e){this._mediaSource&&this._mediaSource.toggleAnimojiCapturing(e)}setAnimojiSvg(e,t=null,i=null){if(!this._transport||!this._conversation)return;let a=!t,s=t??this._conversation.compositeUserId;if(e instanceof ArrayBuffer){let o=i??this._conversation.externalId.id;this._transport.setAnimojiSvg(s,{svg:e,userId:o,isMe:a});return}this._transport.setAnimojiSvg(s,{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 P.log(T.MEDIA_STATUS,e?"video_1":"video_0"),this._mediaSource.toggleVideo(e)}async toggleLocalAudio(e){if(this._mediaSource)return P.log(T.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 s of e){let o=typeof s.uid=="object"?s.uid:q.fromId(s.uid),u=q.toString(o);i[u]=s.priority}let a=await this._getParticipants();for(let s of Object.values(a)){let o=q.toString(s.externalId);Object.hasOwn(i,o)&&(t[s.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[Ye(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;d.log(`Update display layout request [${this._signaling.getNextCommandSequenceNumber()}]`,e);let t={},i=await this._getParticipants();for(let s of e){let o=typeof s.uid=="object"?s.uid:q.fromId(s.uid),u=this._api.getCachedOkIdByExternalId(o);if(!u){let h=q.toString(o);d.log(`Unknown participant external ID ${h}`);continue}let p=Ye({participantId:u,mediaType:s.mediaType,streamName:s.streamName}),m=i[u];m?m.lastRequestedLayouts[p]=s:this._isMe(u)&&(this._myLastRequestedLayouts[p]=s),Wt(s)?(this._isMe(u)&&delete this._myLastRequestedLayouts[p],this._streamIdByStreamDescription.has(p)&&!this._cooldownTimestampByStreamDescription.has(p)&&this._cooldownTimestampByStreamDescription.set(p,Date.now())):(this._cooldownTimestampByStreamDescription.delete(p),!this._streamIdByStreamDescription.has(p)&&l.videoTracksCount>0&&this._streamIdByStreamDescription.set(p,null),t[p]=s),s.mediaType==="SCREEN"&&!Wt(s)&&le.setMark(le.getMarkNameScreenshareFirstFrame(u))}let a=this._cooldownTimestampByStreamDescription.keys();for(;this._streamIdByStreamDescription.size>l.videoTracksCount;){let s=a.next();if(s.done){d.error("Cannot accommodate all streaming requests: tracks available "+l.videoTracksCount+"; requested streams: "+Array.from(this._streamIdByStreamDescription.keys()));break}await this._stopStreaming(s.value),t[s.value]={stopStream:!0}}await this._sendUpdateDisplayLayout(t)}async feedback(e){return this._signaling.feedback(e)}userFeedbackStats(e,t,i){if(this._conversation)if(!l.clientEventsLoggingEnabled)this._api.sendUserFeedbackStats(this._conversation.id,e,t,i);else{let a={event_type:T.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={event_type:e,...t};P.logClientEvent(a,i)}async _stopStreaming(e){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 i=await this._getParticipants(),a=$t(e),s=i[a.participantId],o=this._conversation?.externalId,u=this._isMe(a.participantId);if(s||u){switch(a.mediaType){case"STREAM":case"MOVIE":{if(a.streamName){let p={stream:null,streamName:a.streamName,mediaType:a.mediaType};u?E.onLocalLive(o,p):E.onRemoteLive(s.externalId,p)}break}case"CAMERA":{E.onRemoteStream(s.externalId,null);break}case"SCREEN":{E.onRemoteScreenStream(s.externalId,null);break}}P.log(T.PAT_DEALLOCATED)}else d.log(`Cannot find participant to stop streaming: ${a.participantId}`)}this._streamIdByStreamDescription.delete(e)}async _sendUpdateDisplayLayout(e){if(Object.keys(e).length===0)return;d.log(`Update display layout send [${this._signaling.getNextCommandSequenceNumber()}]`,e);let t=await this._signaling.updateDisplayLayout(e);if(!t)return;let i=[],a=await this._getParticipants();for(let[s,o]of Object.entries(t.errorCodeByParticipantId||{})){let u=$t(s),p=a[u.participantId];if(p){let m;typeof o!="number"?(d.warn(`Unexpected error code ${o} received for participant ${u.participantId}`),m=Cn.UNKNOWN_ERROR):m=Pn(o),i.push({externalId:p.externalId,errorReason:m})}}if(i&&i.length)throw new ia("Could not allocate one or more participants",i)}async _cleanupCooldownQueue(){let e={},t=this._cooldownTimestampByStreamDescription.entries();do{let i=t.next();if(i.done)break;let a=i.value;if(a[1]+Oo>Date.now())break;let o=a[0];await this._stopStreaming(o),e[o]={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)}}async _onParticipantPromoted(e){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 G(k.REMOVED))):(this._updateConversation(e),await this._onJoinPart2(e))),E.onPromoted(e.demote)}async _onChatRoomUpdated(e,t=0,i=[],a,s){d.log(`Chat room updated: ${e}`);let o=[],u=[],p=[],m=[],h=[];if(i.length&&i.forEach(w=>{if(w.externalId){let j=q.fromSignaling(w.externalId);h.push(j),this._api.cacheExternalId(w.id.id,j)}else{let j=I.decomposeId(w.id.id).id;o.push(j),m.push(j)}}),a?.length&&a.forEach(w=>{let j=I.decomposeId(w).id;o.push(j),u.push(j)}),s?.length&&s.forEach(w=>{let j=I.decomposeId(w).id;o.push(j),p.push(j)}),!o.length){E.onChatRoomUpdated(e,t,h,[],[]);return}if(m.length){let w=await this._api.getExternalIdsByOkIds(m);h.push(...w)}let R=await this._api.getExternalIdsByOkIds(u),M=await this._api.getExternalIdsByOkIds(p);E.onChatRoomUpdated(e,t,h,R,M)}async _onSharedMovieUpdate(e){let t=this._conversation?.externalId;for(let i of e.data)if(this._isMe(i.participantId))E.onLocalLiveUpdate(t,i);else{let s=await this._getExternalIdByParticipantId(i.participantId);s&&E.onRemoteLiveUpdate(s,i)}}async _onSharedMovieInfoStarted(e){d.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))E.onLocalSharedMovieInfo(i,e,t);else{let s=await this._getExternalIdByParticipantId(e.initiatorId);s&&E.onRemoteSharedMovieInfo(s,e,t)}this._forceOpenTransportForAloneInCall()}async _processConnectionSharedMovieInfo(e){let t=e.conversation.participants.find(i=>this._isMe(I.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 s of e.rooms.rooms)s.asrInfo&&this._conversation?.asrInfoByRoom.set(s.id,s.asrInfo);let i=e?.rooms?.roomId??this._conversation?.roomId??null,a=this._conversation?.asrInfoByRoom.get(i);if(a){let s=await this._getExternalIdByParticipantId(a.initiatorId);s&&E.onAsrSet({externalId:s,movieId:a.movieId},i)}else i&&E.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 s=await this._getExternalIdByParticipantId(a.initiatorId);s&&E.onRemoteSharedUrl(s,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){d.log(`Shared movie stopped data received: ${e.notification}`);let t=this._conversation?.externalId,{initiatorId:i,movieId:a,source:s,roomId:o=null}=e,u={initiatorId:i,movieId:a,source:s};if(this._isMe(i))E.onLocalSharedMovieStoppedInfo(t,u,o);else{let m=await this._getExternalIdByParticipantId(i);if(m){let R=(await this._getParticipants())[i];R?.movieShareInfos&&(R.movieShareInfos=R.movieShareInfos.filter(M=>M&&M.movieId!==a)),E.onRemoteSharedMovieStoppedInfo(m,u,o)}}}async _onUrlSharingInfoUpdated(e){if(d.log(`Shared URL data received: ${e.notification}`),!this._conversation)return;let{urlSharingInfoByRoom:t,roomId:i}=this._conversation,{initiatorId:a,sharedUrl:s,roomId:o=null}=e;if(s?t.set(o,{sharedUrl:s,initiatorId:a}):t.delete(o),!(!s&&o!==i&&t.has(i))&&(!s||!this._isMe(a))){let u=await this._getExternalIdByParticipantId(a);u&&E.onRemoteSharedUrl(u,s,o)}}_onFeaturesPerRoleChanged(e){d.log(`Features per role changed: ${e.notification}`),E.onFeaturesPerRoleChanged(e.featuresPerRole)}async _waitForStreamIfNeeded(e){let t=this._matchStreamDescription(e.participantStreamDescription);if(!t){if(e.fastScreenShare){let h=this._getStreamDescriptionById(e.streamId);if(h){let R=$t(h),M=this._participants[R.participantId];E.onRemoteScreenStream(M.externalId,null)}}return}let{mediaType:i,participantId:a}=t;if(i==="ANIMOJI")return;let s=await this._getParticipant(a);if(l.producerScreenDataChannel&&i==="SCREEN"&&!e.fastScreenShare){d.log("skipping participant-sources-update notification since screenshare will be received over datachannel");return}let o=Ye(t),u=this._sequenceNumberByStreamDescription.get(o);if(u&&u>e.sequenceNumber){d.warn(`Participant ${a} received outdated PAT response: sequence number ${e.sequenceNumber}; last sent sequence number for given participant is ${u}`),P.log(T.PAT_OUTDATED_RESPONSE);return}s&&e.suspend!==void 0&&i&&(d.debug(`participant-sources-update: mediaType=${i}, suspend=${e.suspend}`),E.onRemoteStreamSuspended(s.externalId,i,e.suspend));let p=e.streamId,m=e.rtpTimestamp?this._getWaitingTime(p,e.rtpTimestamp):0;if(m<=0){this._streamWaitTimerByStreamDescription.delete(o);let h=this._conversation?.externalId,R=this._isMe(a);if(!s&&!R){P.log(T.PAT_ERROR,"participantMissing"),d.error(`Could not find participant by ID: ${a}`);return}let M=R?h:s.externalId,w=this._streamByStreamId.get(p);if(!w){P.log(T.PAT_ERROR,"streamNotFound"),d.error(`Could not find stream by ID: ${p}`);return}P.log(T.PAT_ALLOCATED),this._streamIdByStreamDescription.set(o,p);let j=e.participantStreamDescription?.mediaType;if(j==="STREAM"||j==="MOVIE"){if(e.participantStreamDescription?.streamName){let z={streamName:e.participantStreamDescription.streamName,stream:w,mediaType:j};R?E.onLocalLive(M,z):E.onRemoteLive(M,z)}}else if(l.producerScreenTrack&&j==="SCREEN")E.onRemoteScreenStream(s.externalId,w);else if(!R){let z=(l.producerScreenTrack?null:s.secondStream)||w;E.onRemoteStream(s.externalId,z)}}else{d.debug(`Waiting for ${m} until stream ${p} for ${o} is switched`);let h=window.setTimeout(this._waitForStreamIfNeeded.bind(this,e),m);this._streamWaitTimerByStreamDescription.set(o,h)}}_getStreamDescriptionById(e){for(let[t,i]of this._streamIdByStreamDescription.entries())if(i===e)return t;return null}_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?I.includesOneOf(this._conversation.roles,[dt.ADMIN,dt.CREATOR]):!1}_checkAdminRole(){if(this._conversation&&!I.includesOneOf(this._conversation.roles,[dt.ADMIN,dt.CREATOR]))throw new Error("You don't have the required permission")}_isCalledState(){return this._participantState===J.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=Sn(this._conversation.options,e);this._onOptionsChanged(t)}}async getWaitingHall(e,t,i){if(!this._signaling)return Promise.reject();let a=null;if(e&&(a=Dn(e),a)){let m=this._api.getDecorativeIdByInitialId(a.id);a.id=m?I.composeUserId(m):a.id}let s=await this._signaling.getWaitingHall(a,t,i);if(s.error)return Promise.reject(s.message);let o=s.participants||[],{externalIds:u}=await this._resolveWaitingHallExternalIds(o),p=null;return o.length&&s.hasMore&&(p=An(o[o.length-1].id)),{participants:u,pageMarker:p,totalCount:s.totalCount||0}}async _resolveWaitingHallExternalIds(e){let t=new Map,i=[],a=[];if(e.length){let s=[];e.forEach(o=>{if(t.set(o.id.id,o.id.addedTs),o.externalId){let u=q.fromSignaling(o.externalId);i.push(o.id.addedTs),a.push(u),this._api.cacheExternalId(o.id.id,u)}else s.push(I.decomposeId(o.id.id).id)}),s.length&&!a.length&&(a=await this._api.getExternalIdsByOkIds(s),i=a.map(o=>{let u=this._api.getCachedOkIdByExternalId(o);return(u?t.get(u):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(!I.includesOneOf(this._conversation.options,[Jt.WAITING_HALL,Jt.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 d.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 s={movieId:e,lang:a};(t||t===0)&&(s.gain=t),i&&(s.metadata=i);let o=await this._signaling.addMovie(s);if(o.error)throw new Error(o.error);return{movieId:o.movieId,streamType:o.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",s=null,o=null){let u={movieId:i,name:t,privacy:a,groupId:s,roomId:o,streamMovie:!e},p=await this._signaling.startStream(u);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 s=await this._signaling.recordSetConf({king:e,pawns:t,hideParticipantCount:i,roomId:a});if(s.error)throw new Error(s.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<l.videoMinWidth||e.height<l.videoMinHeight)throw new Error("Sizes received are less than the `videoMinWidth` or `videoMinHeight`");if(t){if(t.width<l.videoMinWidth||t.height<l.videoMinHeight)throw new Error("Sizes of effect received are less than the `videoMinWidth` or `videoMinHeight`");l.videoEffectMaxHeight=t.height,l.videoEffectMaxWidth=t.width}l.videoMaxWidth=e.width,l.videoMaxHeight=e.height,d.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:l.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,s=this._transport?.getState();return Promise.all(a.map(async o=>{let u=I.composeId(o);return this._createParticipant({id:u,externalId:q.fromSignalingParticipant(o),mediaSettings:Ie(o.mediaSettings),participantState:I.mapParticipantState(o),state:o.state,roles:o.roles||[],status:this._getStatusByTransportState(s)??"WAITING",muteStates:o.muteStates||{},unmuteOptions:o.unmuteOptions||[],observedIds:o.observedIds||[],markers:this._denormalizeMarkers(u,o.markers)},o.decorativeUserId)})).then(I.mapSharedParticipants)}async getParticipantListChunk(e){d.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=await this._getParticipants(),s=i.participants.filter(u=>{let p=I.composeId(u);return!a[p]});await this._registerParticipants(s);let o=this._transport?.getState();return i.participants.forEach(u=>{let p=I.composeId(u),m=a[p];m.status=this._getStatusByTransportState(o)??"WAITING",m.movieShareInfos=u.movieShareInfos,Object.assign(m.mediaSettings,Ie(u.mediaSettings)),Object.assign(m.muteStates,u.muteStates),m.unmuteOptions=u.unmuteOptions??m.unmuteOptions,this._openTransport([m],!0)}),this._participantListChunkToExternalChunk(i)}async _getInitialParticiapntListChunk(){let e=l.participantListChunkInitIndex,t=l.participantListChunkInitCount,a=await this._signaling.getParticipantListChunk({listType:"GRID",fromIdx:e,count:t});return d.debug("Get initial participant list chunk",a.chunk),a.chunk}_onLocalMediaStreamChanged(e){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 Yt(this._mediaSource)),E.onLocalStreamUpdate(t,e.kind),!this._conversation?.waitingHall&&!this._conversation?.observer&&!this._isAudienceModeListener()&&this._changeMediaSettings(t)}_onScreenSharingStatus(e){let t=this._mediaSource?.getMediaSettings();if(d.log("Screen sharing changed",e.track,t),l.consumerScreenTrack){let i=e.track?new MediaStream([e.track]):null;E.onScreenStream(i,t)}}async _changeRemoteMediaSettings(e,t){d.debug(`Remote media settings changed [${e}]`,t);let i=this._conversation?.externalId;if(this._isMe(e)&&i){E.onLocalMediaSettings(i,t);return}let s=await this._getParticipant(e);if(!s){this._warnParticipantNotInConversation(e);return}s.mediaSettings=t,this._state==="ACTIVE"&&E.onRemoteMediaSettings(s.externalId,t,s.markers),this._specListener&&this._specListener.onChangeRemoteMediaSettings(e,t)}_changeLocalParticipantState(e){d.debug("Local participant state force changed by admin",e),this._state==="ACTIVE"&&E.onLocalParticipantState(e)}async _changeRemoteParticipantState(e,t){d.debug(`Remote participant state changed [${e}]`,t);let i=await this._getParticipant(e);if(!i){this._warnParticipantNotInConversation(e);return}i.participantState=t||{},this._state==="ACTIVE"&&E.onRemoteParticipantState(i.externalId,i.participantState,i.markers)}async _changeMultipleParticipantState(e,t){d.debug("Multiple participants state changed",e);let i=[],a,s=await this._getParticipants();e.forEach((o,u)=>{if(this._isMe(u))a=o;else{let p=s[u];if(!p){this._warnParticipantNotInConversation(u);return}p.participantState=o,i.push({externalId:p.externalId,participantState:{...o},markers:p.markers})}}),this._state==="ACTIVE"&&(a&&E.onLocalParticipantState(a),i.length&&E.onRemoteParticipantsState(i,t))}_invokeRolesChangedCallbackIfNeeded(e){this._state==="ACTIVE"&&e.roles&&e.roles.length&&(d.debug(`Roles for participant [${e.id}] changed: ${e.roles}`),E.onRolesChanged(e.externalId,e.roles,!0))}_onSignalingNotification(e){switch(e.notification){case L.ACCEPTED_CALL:return this._onAcceptedCall(e);case L.HUNGUP:return this._onHungup(e);case L.PARTICIPANT_ADDED:return this._onAddedParticipant(e);case L.PARTICIPANT_JOINED:return this._onJoinedParticipant(e);case L.CLOSED_CONVERSATION:return this._onClosedConversation(e);case L.MEDIA_SETTINGS_CHANGED:return this._onMediaSettingsChanged(e);case L.PARTICIPANT_STATE_CHANGED:return this._onParticipantStateChanged(e);case L.PARTICIPANTS_STATE_CHANGED:return this._onParticipantsStateChanged(e);case L.RATE_CALL_DATA:return this._onNeedRate();case L.FEATURE_SET_CHANGED:return this._onFeatureSetChanged(e);case L.MULTIPARTY_CHAT_CREATED:return this._onMultipartyChatCreated(e);case L.FORCE_MEDIA_SETTINGS_CHANGE:return this._onForceMediaSettingsChange(e);case L.SETTINGS_UPDATE:return this._onSettingsUpdate(e);case L.VIDEO_QUALITY_UPDATE:return this._onVideoQualityUpdate(e);case L.REGISTERED_PEER:return this._onPeerRegistered(e);case L.SWITCH_MICRO:return this._onMicSwitched(e);case L.CHAT_MESSAGE:return this._onChatMessage(e);case L.CUSTOM_DATA:return this._onCustomData(e);case L.RECORD_STARTED:return this._onRecordInfo(e.recordInfo,e.roomId);case L.RECORD_STOPPED:return this._onRecordInfo(null,e.roomId);case L.ROLES_CHANGED:return this._onRolesChanged(e.participantId,e.roles||[]);case L.MUTE_PARTICIPANT:return this._onMuteParticipant(e);case L.PIN_PARTICIPANT:return this._onPinParticipant(e.participantId,e.unpin,e.markers,e.roomId);case L.OPTIONS_CHANGED:return this._onOptionsChanged(e.options||[]);case L.PARTICIPANT_SOURCES_UPDATE:return this._onParticipantSourcesUpdate(e);case L.PROMOTE_PARTICIPANT:return this._onParticipantPromoted(e);case L.CHAT_ROOM_UPDATED:return this._onChatRoomUpdated(e.eventType,e.totalCount,e.firstParticipants,e.addedParticipantIds,e.removedParticipantIds);case L.JOIN_LINK_CHANGED:return this._onJoinLinkChanged(e);case L.FEEDBACK:return this._onFeedback(e);case L.MOVIE_UPDATE_NOTIFICATION:return this._onSharedMovieUpdate(e);case L.MOVIE_SHARE_STARTED:return this._onSharedMovieInfoStarted(e);case L.MOVIE_SHARE_STOPPED:return this._onSharedMovieInfoStopped(e);case L.URL_SHARING_INFO_UPDATED:return this._onUrlSharingInfoUpdated(e);case L.ROOMS_UPDATED:return this._onRoomsUpdated(e);case L.ROOM_UPDATED:return this._onRoomUpdated(e);case L.ROOM_PARTICIPANTS_UPDATED:return this._onRoomParticipantsUpdated(e);case L.FEATURES_PER_ROLE_CHANGED:return this._onFeaturesPerRoleChanged(e);case L.PARTICIPANT_ANIMOJI_CHANGED:return this._onParticipantAnimojiChanged(e);case L.ASR_STARTED:return this._onAsrStart(e);case L.ASR_STOPPED:return this._onAsrStop(e);case L.PROMOTION_APPROVED:return this._onPromotionApproved(e);case L.DECORATIVE_PARTICIPANT_ID_CHANGED:return this._onDecorativeParticipantIdChanged(e);case L.VIDEO_SUSPEND_SUGGEST:return this._onVideoSuspendSuggest(e)}}async _onPromotionApproved(e){let t=await this._getExternalIdByParticipantId(e.adminId);if(!t){this._warnParticipantNotInConversation(e.adminId);return}E.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()),await this._processPinnedParticipants(e),e.conversation.state;let t=null;if(e.conversation.participants){let s=Object.keys(await this._getParticipants()),o=[];for(let p of e.conversation.participants){let m=I.composeId(p),h=p.roles||[];if(this._isMe(m)){mi(this._conversation.roles,h)||this._onRolesChanged(m,h),t=()=>{this._registerParticipantLocalMuteState({muteStates:On(p),unmuteOptions:p.unmuteOptions})};continue}o.push(m);let R=await this._getParticipant(m);if(!R)await this._onJoinedParticipant({participantId:p.id,participant:p,mediaSettings:p.mediaSettings});else{let M=Ie(p.mediaSettings);Ha(M,R.mediaSettings)||await this._changeRemoteMediaSettings(m,M);let w=I.mapParticipantState(p),j=R.participantState;I.isEqualParticipantState(w,j)||await this._changeRemoteParticipantState(m,w),mi(h,R.roles)||this._onRolesChanged(R.id,h)}}let u=await this._getParticipants();for(let p of s)o.indexOf(p)<0&&this._removeParticipant(u[p],k.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){d.error("Signaling failed",e),this._close(e)}async _onAcceptedCall(e){let t=I.composeMessageId(e),i=I.getPeerIdString(e.peerId);if(d.debug(`Participant accepted call [${t}]`),this._statFirstMediaReceived.markAcceptedCall(this._transport?.getTopology()),this._conversation&&this._isMe(t)){this._close(new G(k.MISSED),"Call accepted on other device");return}let a=await this._getParticipant(t);if(!a){let o=this._api.getDecorativeIdByInitialId(t),u=o?I.composeUserId(o,e.participantType):void 0;a=this._registerParticipantInCache(await this._createParticipant({id:t,mediaSettings:Ie(e.mediaSettings)},u))}a.state=J.ACCEPTED,a.mediaSettings=Ie(e.mediaSettings),this._logWithMediaSettings(T.ACCEPTED_OUTGOING,a.mediaSettings),this._conversation&&this._conversation.direction===ke.OUTGOING&&(this._state==="IDLE"||this._state==="PROCESSING")&&(this._state="ACTIVE",this._changeFeatureSet()),this._state==="ACTIVE"&&this._transport&&this._transport.open([a.id],i),await this._changeRemoteMediaSettings(t,a.mediaSettings),await this._changeRemoteParticipantState(t);let s=Object.keys(a.muteStates);s.length&&this._onMuteParticipant({muteStates:a.muteStates,mediaOptions:s,stateUpdated:!0,participantId:t}),this._state==="ACTIVE"&&E.onAcceptedCall(a.externalId)}async _onHungup(e){d.debug(`Participant hungup [${e.participantId}]`,{reason:e.reason});let t=I.composeMessageId(e);if(this._conversation&&this._isMe(t)){this._close(new G(e.reason,{remote:!0}));return}await this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers);let i=await this._getParticipant(t);if(!i){this._warnParticipantNotInConversation(t);return}this._transport&&this._transport.close(t),i.state=e.reason===k.REJECTED?J.REJECTED:J.HUNGUP,this._state!=="CLOSE"&&this._removeParticipant(i,k.HUNGUP)}async _onAddedParticipant(e){d.debug(`Participant added [${e.participantId}]`);let t=I.composeMessageId(e),i=await this._getParticipant(t);if(i&&i.state!==J.HUNGUP&&i.state!==J.REJECTED){d.debug(`Participant [${t}] is already in conversation and is active`);return}if(!i){let{participant:a}=e,s=a.decorativeUserId;this._registerParticipant({id:t,externalId:q.fromSignalingParticipant(a),mediaSettings:Ie(a.mediaSettings),state:a.state,participantState:I.mapParticipantState(a),roles:a.roles||[],muteStates:a.muteStates||{},unmuteOptions:a.unmuteOptions||[],observedIds:a.observedIds||[]},s),i=await this._getParticipant(t)}i.state=J.CALLED,i.mediaSettings=Ie(e.participant?.mediaSettings),i.participantState=I.mapParticipantState(e.participant),i.roles=e.participant?.roles||[],this._setParticipantsStatus([i],"WAITING"),this._state!=="IDLE"&&this._transport&&this._transport.allocate(i.id,!0),E.onParticipantAdded(i.externalId,i.markers),await this._changeRemoteMediaSettings(t,i.mediaSettings),await this._changeRemoteParticipantState(t,i.participantState),this._invokeRolesChangedCallbackIfNeeded(i)}async _onJoinedParticipant(e){d.debug(`Participant joined [${e.participantId}]`),this._statFirstMediaReceived.markParticipantJoined(this._transport?.getTopology());let t=I.composeMessageId(e),i=await this._getParticipant(t);if(i&&i.state===J.ACCEPTED){d.warn(`Participant [${t}] is already in conversation and is active`);return}if(!i){let{participant:s}=e,o=s.decorativeUserId;this._registerParticipant({id:t,externalId:q.fromSignalingParticipant(s),mediaSettings:Ie(s.mediaSettings),state:s.state,participantState:I.mapParticipantState(s),roles:s.roles||[],muteStates:s.muteStates||{},movieShareInfos:s.movieShareInfos,unmuteOptions:s.unmuteOptions||[],observedIds:s.observedIds||[],markers:this._denormalizeMarkers(t,s.markers)},o),i=await this._getParticipant(t)}this._conversation&&this._conversation.direction===ke.OUTGOING&&(this._state==="IDLE"||this._state==="PROCESSING")&&(this._state="ACTIVE",this._changeFeatureSet()),i.state=J.ACCEPTED,i.mediaSettings=Ie(e.mediaSettings),i.participantState=I.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)),E.onParticipantJoined(i.externalId,i.markers),await this._changeRemoteMediaSettings(t,i.mediaSettings),await 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 G(e.reason,{remote:!0}))}async _onMediaSettingsChanged(e){let t=I.composeMessageId(e);await this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers),await this._changeRemoteMediaSettings(t,Ie(e.mediaSettings))}async _onParticipantStateChanged(e){let t=I.composeMessageId(e),i=I.mapParticipantState(e);this._isMe(t)?this._changeLocalParticipantState(i):(await this._registerParticipantAndSetMarkersIfChunkEnabled(t,e.markers),await this._changeRemoteParticipantState(t,i))}async _onParticipantsStateChanged(e){let{participants:t,roomId:i}=e,a=t.map(({id:u,markers:p})=>this._registerParticipantAndSetMarkersIfChunkEnabled(u,p));await Promise.all(a);let s=new Map,o=t.map(({id:u,participantState:p})=>this._getExternalIdByParticipantId(u).then(m=>[u,m&&I.mapParticipantState({participantState:p})]));try{(await Promise.all(o)).forEach(([p,m])=>{m&&s.set(p,m)}),await this._changeMultipleParticipantState(s,i)}catch(u){d.warn(`_onParticipantsStateChanged: Failed to get external ids. ${u}`)}}_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(),E.onMultipartyChatCreated(this._conversation))}async _onForceMediaSettingsChange(e){if(!this._mediaSource)return;let t=this._mediaSource.getMediaSettings(),i=Ie(e.mediaSettings);t.isAudioEnabled!==i.isAudioEnabled&&await this._mediaSource.toggleAudio(i.isAudioEnabled),t.isVideoEnabled!==i.isVideoEnabled&&await this._mediaSource.toggleVideo(i.isVideoEnabled),l.consumerScreenTrack&&t.isScreenSharingEnabled!==i.isScreenSharingEnabled&&await 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,fastScreenSharing:e.fastScreenSharing};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={maxBitrateK:t,maxDimension:i},s;e.mediaType&&e.mediaType==="SCREEN"?s={camera:null,screenSharing:null,fastScreenSharing:Object.assign({},this._serverSettings.fastScreenSharing,a)}:s={camera:Object.assign({},this._serverSettings.camera,a),screenSharing:null,fastScreenSharing:null},this._serverSettings=ta(this._serverSettings,s),this._transport&&this._transport.updateSettings(this._serverSettings)}async _onPeerRegistered(e){let t=I.composeMessageId(e),i=await this._getParticipant(t);i&&(i.clientType=e.clientType,i.platform=e.platform),E.onPeerRegistered()}async _onMicSwitched(e){E.onDeviceSwitched(se.AUDIO,!e.mute),await this.toggleLocalAudio(!e.mute)}async _onChatMessage(e){let t=I.composeMessageId(e),i=await this._getExternalIdByParticipantId(t);if(!i){this._warnParticipantNotInConversation(t);return}E.onChatMessage(e.message,i,e.direct)}async _onCustomData(e){if(Object.hasOwn(e.data,"sdk"))return;let t=I.composeMessageId(e),i=await this._getExternalIdByParticipantId(t);if(!i){this._warnParticipantNotInConversation(t);return}E.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 s=await this._getExternalIdByParticipantId(e.initiator);s?E.onRecordStarted(s,e.recordMovieId,e.recordStartTime,e.recordType,e.recordExternalMovieId,e.recordExternalOwnerId,t):this._warnParticipantNotInConversation(e.initiator)}else E.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&&E.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?E.onRecordStarted(i,t.recordMovieId,t.recordStartTime,t.recordType,t.recordExternalMovieId,t.recordExternalOwnerId,e):this._warnParticipantNotInConversation(t.initiator)}else E.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&&E.onAsrSet({externalId:i,movieId:t.movieId},e)}else E.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&&E.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}E.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}E.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),E.onAsrStopped(t)}async _onAsrTranscription(e){if(!this._conversation)return;let t=await this._getExternalIdByParticipantId(e.participantId);if(!t){this._warnParticipantNotInConversation(e.participantId);return}E.onAsrTranscription(t,e.text,e.timestamp,e.duration)}async _onRolesChanged(e,t){if(this._conversation&&this._isMe(e)&&!mi(this._conversation.roles,t)){d.debug(`Local roles changed: ${t}`),this._conversation.roles=t,E.onLocalRolesChanged(t),this._processMuteState({mediaOptions:dr(this._getMuteStatesForCurrentRoom(),Be.MUTE_PERMANENT),stateUpdated:!0}),I.includesOneOf(t,[dt.ADMIN,dt.CREATOR])?this._refreshRooms(!0):t.length||this._onRoomSwitched(null);return}let i=await this._getParticipant(e);i&&!mi(i.roles,t)&&(d.debug(`Roles for participant [${e}] changed: ${t}`),i.roles=t,E.onRolesChanged(i.externalId,t))}async _onMuteParticipant(e,t=!1){if(!this._conversation)return;let{muteAll:i,muteStates:a={},unmuteOptions:s=[],mediaOptions:o=[],roomId:u=null}=e,p=e.adminId?await 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 m=await this._getParticipant(e.participantId);m&&(d.debug(`Mute states for participant [${e.participantId}] changed`,a),E.onMuteStates(a,s,o,i,e.unmute,m.externalId,p?.externalId,e.stateUpdated,e.requestedMedia,e.roomId));return}if(e.requestedMedia?.length||(i&&!t?this._setMuteStatesForRoomId(a,u):i||(this._conversation.muteStatesPersonal=a)),e.adminId&&this._isMe(e.adminId)){i&&E.onMuteStates(a,s,o,i,e.unmute,null,this._conversation.externalId,e.stateUpdated,e.requestedMedia,e.roomId);return}await this._processMuteState({mediaOptions:o,muteAll:i,unmute:e.unmute,adminId:e.adminId,stateUpdated:e.stateUpdated,requestedMedia:e.requestedMedia,roomId:e.roomId,unmuteOptions:s,muteStates:a})}_changeMuteStatesForRoom(e,t){if(!this._conversation)return;let i=this._getMuteStatesForRoomId(t),a=this._getMuteStatesForRoomId(e),s=Object.keys(i),o=Object.keys(a);this._processMuteState({mediaOptions:Array.from(new Set([...s,...o])),roomId:e,muteAll:!0,stateUpdated:!0})}async _processMuteState(e){if(!this._conversation||!this._mediaSource||this._participantState!==J.ACCEPTED)return;let{mediaOptions:t=[],muteAll:i,unmute:a,stateUpdated:s,requestedMedia:o,roomId:u=null,unmuteOptions:p=[]}=e,m=e.adminId?await this._getParticipant(e.adminId):null,h=Object.assign({},e.muteStates??this._getMuteStatesForRoomId(u)),R=this._mediaSource.getMediaSettings(),M=Object.entries(h);for(let[w,j]of M){let z=l.newMuteRules&&this._isCallAdmin()&&i;if(!(j!==Be.MUTE&&j!==Be.MUTE_PERMANENT||z)&&(this._isCallAdmin()&&j===Be.MUTE_PERMANENT&&!i&&(h[w]=Be.MUTE),!(!t.includes(w)||a)))switch(w){case se.VIDEO:R.isVideoEnabled&&(E.onDeviceSwitched(se.VIDEO,!1),await this.toggleLocalVideo(!1));break;case se.AUDIO:R.isAudioEnabled&&(E.onDeviceSwitched(se.AUDIO,!1),await this.toggleLocalAudio(!1));break;case se.SCREEN_SHARING:R.isScreenSharingEnabled&&(E.onDeviceSwitched(se.SCREEN_SHARING,!1),await this.disableScreenCapturing());break;case se.AUDIO_SHARING:R.isAudioSharingEnabled&&(E.onDeviceSwitched(se.AUDIO_SHARING,!1),await this.toggleScreenCapturing({captureScreen:R.isScreenSharingEnabled,fastScreenSharing:R.isFastScreenSharingEnabled,captureAudio:!1}));break}}E.onMuteStates(h,p,t,i,a,null,m?.externalId,s,o,u)}async _onPinParticipant(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))E.onLocalPin(!0,a);else{let o=await this._getExternalIdByParticipantId(s);o&&E.onPinnedParticipant(o,!0,this._denormalizeMarkers(e,i),a)}if(this._isMe(e))E.onLocalPin(t,a);else{let o=await this._getExternalIdByParticipantId(e);o&&E.onPinnedParticipant(o,t,this._denormalizeMarkers(e,i),a)}this._conversation.pinnedParticipantIdByRoom.set(a,t?null:e)}_onOptionsChanged(e){this._conversation&&!fn(this._conversation.options,e)&&(this._conversation.options=e,E.onOptionsChanged(e))}async _onNetworkStatus(e){if(this._conversation){let t=[],i=await this._getParticipants();for(let[a,s]of Object.entries(e)){let o;if(this._isMe(a)||a==="")o=this._conversation.networkRating;else if(i[a])o=i[a].networkRating;else continue;if(o!==s)if(this._isMe(a)||a==="")this._conversation.networkRating=s,E.onLocalNetworkStatusChanged(s);else{let u=i[a];u.networkRating=s,t.push({uid:u.externalId,rating:s})}}if(t.length===0)return;d.log("Received network status update: ",e),E.onNetworkStatusChanged(t)}}async _onRemoteStreamSecond(e,t){let i=await this._getParticipant(e);if(i){if(l.producerScreenTrack){E.onRemoteScreenStream(i.externalId,t);return}if(i.secondStream=t,l.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 s=this._streamIdByStreamDescription.get(a);if(!s||this._streamWaitTimerByStreamDescription.has(a)){d.log("Delaying secondary stream start/stop until main stream becomes available",a);return}let o=this._streamByStreamId.get(s);if(!o){P.log(T.PAT_ERROR,"streamNotFound"),d.error(`Could not find stream by ID: ${s}`);return}E.onRemoteStream(i.externalId,i.secondStream||o)}else{let a=t||i.remoteStream;a&&E.onRemoteStream(i.externalId,a)}}}async _onAnimojiStream(e,t){if(this._isMe(e)&&this._mediaSource){E.onVmojiStream(t,this._mediaSource.getMediaSettings());return}let i=await this._getParticipant(e);i&&E.onRemoteVmojiStream(i.externalId,t)}async _onAnimojiError(e){try{let t=await this._getExternalIdByParticipantId(e.participantId);t&&(delete e.participantId,E.onVmojiError({...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(Zr.ADD_PARTICIPANT);E.onCallState(e,t,this._conversation)}}_changeNeedRate(){this._conversation&&this._conversation.needRate&&E.onRateNeeded()}async _onVolumesDetected(e){let t=[];for(let[i,a]of Object.entries(e)){let s=await this._getParticipant(i);s&&s.externalId&&t.push({uid:s.externalId,volume:a.real})}E.onVolumesDetected(t)}async _onSpeakerChanged(e){this._activeSpeakerId=e;let t=await this._getParticipant(e);t&&this._lastSignalledActiveSpeakerId!==e&&(E.onSpeakerChanged(t.externalId),this._lastSignalledActiveSpeakerId=e)}async _onTransportStateChanged(e,t){d.debug(`Transport state has changed: ${t}`,e);let i=this._getStatusByTransportState(t);if(!i)return;let a=await this._getParticipants(),s=e.reduce((o,u)=>{if(u in a){let p=a[u];o.push(p),t==="CONNECTED"&&(p.remoteStream||(p.mediaSettings&&this._changeRemoteMediaSettings(u,p.mediaSettings),this._changeRemoteParticipantState(u,p.participantState)),this._updateDisplayLayoutFromCache(u))}else this._warnParticipantNotInConversation(u);return o},[]);s.length&&this._setParticipantsStatus(s,i)}async _onTransportLocalStateChanged(e){if(d.debug(`Local transport state has changed: ${e}`),e==="CONNECTED"&&(E.onLocalStatus("CONNECTED"),this._transport?.getTopology()==="SERVER")){let t=Object.values(this._myLastRequestedLayouts);await this.updateDisplayLayout(t)}e==="CONNECTING"&&E.onLocalStatus("CONNECTING"),e==="RECONNECTING"&&E.onLocalStatus("RECONNECT"),e==="FAILED"&&this._transport&&this._transport.allocated().length===0&&(this._signaling.ready&&await this._signaling.hangup(k.FAILED),this._close(new G(k.FAILED),"Transport failed"))}async _onRemoteTrackAdded(e,t,i){if(e.endsWith($e.AUDIO_MIX))d.debug("Remote audio mix track added"),this._audioOutput.add(i),E.onRemoteMixedAudioStream(t);else if(e.startsWith($e.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=await this._getParticipant(e);if(!a){let s=this._api.getDecorativeIdByInitialId(e),o=s?I.composeUserId(s):void 0;d.warn(`Conversation: track added before participant [id: ${e}, decorativeId: ${o}]`),this._registerParticipant({id:e},o),a=await this._getParticipant(e),this._setParticipantsStatus([a],"WAITING"),this._activeSpeakerId===e&&this._lastSignalledActiveSpeakerId!==e&&(E.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),l.preserveAudioTracks||(a.remoteAudioTrack=i,t.removeTrack(i))),a.remoteStream!==t&&t.getTracks().length){if(a.remoteStream=t,a.secondStream)return;E.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}}async _removeAudioTrack(e,t,i){if(e!==$e.AUDIO_MIX){let a=await 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),E.onLocalStatus(e?"RECONNECT":"CONNECTED"))}async _onRemoteSignalledStall(e){let t={},i=[],a=[];d.debug("Participants stalled:",e);let s=await this._getParticipants();for(let o of e){if(t[o]=!0,!this._lastStalled[o]){let u=s[o];u&&i.push(u)}delete this._lastStalled[o]}for(let o of Object.keys(this._lastStalled)){let u=s[o];u&&a.push(u)}i.length&&this._setParticipantsStatus(i,"RECONNECT"),a.length&&this._setParticipantsStatus(a,"CONNECTED"),this._lastStalled=t}async _onRemoteDataStats(e){this._debugInfo&&this._debugInfo.onRemoteDataStats(e,await this._getParticipants()),this._fixAudioDevice(e.outbound.rtps),this._fixVideoDevice(e.outbound.rtps)}_fixAudioDevice(e){!b.hasMicrophone()||!this._audioFix||!this._mediaSource?.getMediaSettings().isAudioEnabled||this._audioFix.fix(e)}_fixVideoDevice(e){!b.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&&(d.debug("Toggle join availability",{available:t,chatId:e}),E.onJoinStatus(t,e))}async _updateDisplayLayoutFromCache(e){if(this._transport?.getTopology()!=="SERVER")return;let t=await this._getParticipant(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((s,o)=>(o.status!==t&&(o.status=t,s.push(o.externalId)),s),[]);a.length&&E.onRemoteStatus(a,t,i)}_onJoinLinkChanged(e){E.onJoinLinkChanged(e.joinLink)}async _onRoomsUpdated(e){if(this._isCalledState())return;let t={};for(let i of Object.keys(ui)){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})}E.onRoomsUpdated(t)}async _onRoomUpdated(e){let t=await this._convertRoomToExternal(e.room||null);e.events.some(i=>i===ui.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()||E.onRoomUpdated(e.events,e.roomId,t,e.deactivate||null)}async _convertRoomToExternal(e){if(!e)return null;let t=await Promise.all(e.participantIds?.map(o=>this._getExternalIdByParticipantId(o))||[]),i=await Promise.all(e.addParticipantIds?.map(o=>this._getExternalIdByParticipantId(o))||[]),a=await Promise.all(e.removeParticipantIds?.map?.(o=>this._getExternalIdByParticipantId(o))||[]),s=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?await this._participantListChunkToExternalChunk(e.participants):void 0,active:e.active,muteStates:e.muteStates,pinnedParticipantId:s,countdownSec:e.countdownSec,timeoutMs:e.timeoutMs}}async _onRoomParticipantsUpdated(e){let t=this._transport?.getState(),i=e.roomId??null,a=e.addedParticipantIds?.map(M=>I.decomposeId(M).id)||[],s=await this._api.getExternalIdsByOkIds(a),o=e.addedParticipants;if(s.length&&o?.length!==s.length&&!this._isCalledState()){let M=this._convertExternalIdsToServerExternalIds(s);o=(await this._signaling.getParticipants(M)).participants}let u=await Promise.all(o?.map(async M=>{let w=I.composeId(M);return this._createParticipant({id:w,externalId:q.fromSignalingParticipant(M),mediaSettings:Ie(M.mediaSettings),participantState:I.mapParticipantState(M),state:M.state,roles:M.roles||[],status:this._getStatusByTransportState(t)??"WAITING",muteStates:M.muteStates||{},unmuteOptions:M.unmuteOptions||[],observedIds:M.observedIds||[],markers:this._denormalizeMarkers(w,M.markers),isInRoom:i!==null},M.decorativeUserId)})||[]),p=!1;for(let M of u)M.id===this._conversation?.compositeUserId&&(p=!0),this._registerParticipantInCache(M);this._transport?.getState()==="IDLE"&&!this._isCalledState()&&this._openTransport(u,!0);let m=[],h=[];if(e?.removedParticipantMarkers){for(let M of e.removedParticipantMarkers)if(M.GRID?.id){let w=this._getExternalIdByParticipantId(M.GRID.id);h.push(w)}m=await Promise.all(h)}if(p&&await this._onRoomSwitched(i),m){let M=this._conversation?.pinnedParticipantIdByRoom.get(i);if(M){let w=await this._getExternalIdByParticipantId(M);if(w){for(let j of m)if(q.compare(w,j)){this._conversation?.pinnedParticipantIdByRoom.delete(i);break}}}}let R={roomId:i,participantCount:e.participantCount,addedParticipantIds:s,addedParticipants:I.mapSharedParticipants(u),removedParticipantMarkers:e?.removedParticipantMarkers,removedParticipantIds:m};this._isCalledState()||E.onRoomParticipantsUpdated(R)}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()){E.onRoomStart(e);return}this._isCalledState()||E.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 s of i){let o=s.id??null;if(this._setMuteStatesForRoomId(s.muteStates,o),this._conversation?.recordsInfoByRoom.set(o,s.recordInfo??null),this._conversation?.pinnedParticipantIdByRoom.set(o,s.pinnedParticipantId??null),s.asrInfo&&this._conversation?.asrInfoByRoom.set(o,s.asrInfo),s.urlSharingInfo?this._conversation?.urlSharingInfoByRoom.set(o,s.urlSharingInfo):this._conversation?.urlSharingInfoByRoom.delete(o),e){let u=await this._getParticipants();await this._registerParticipants(s?.participants?.participants?.filter(m=>!u[I.composeId(m)])||[],!0);let p=await this._convertRoomToExternal(s);p&&a.push(p)}}a.length&&!this._isCalledState()&&E.onRoomsUpdated({[ui.UPDATE]:{rooms:a}})}async _onFeedback(e){let t=[];for(let i of e.feedback){let a={...i,items:[]};for(let s of i.items){let o=await this._getExternalIdByParticipantId(s.participantId);o?a.items.push({...s,participantId:o}):this._warnParticipantNotInConversation(s.participantId)}t.push(a)}E.onFeedback(t,e.roomId)}async _onDecorativeParticipantIdChanged(e){if(!this._conversation||!e.decorativeParticipantId||!e.decorativeExternalParticipantId)return;let{participantId:t,decorativeParticipantId:i,decorativeExternalParticipantId:a}=e,s=this._isMe(t);d.debug(`Decorative participant id changed [${t}]`,e);let o=await this._getExternalIdByParticipantId(t);if(!o){this._warnParticipantNotInConversation(t);return}let u=q.fromSignaling(a,o.deviceIdx);if(E.onParticipantIdChanged(o,u),this._api.cacheExternalId(i,u),this._api.mapDecorativeId(i,t),s)this._conversation.externalId=u;else{let p=await this._getParticipants();p[t].externalId=u}}_onVideoSuspendSuggest(e){!this._conversation||this._conversation.topology!=="SERVER"||(d.debug("Video suspend suggested",e),E.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)}_registerParticipant(e,t){this._pendingParticipants.set(e.id,this._createParticipant(e,t))}async _getParticipants(){if(this._pendingParticipants.size)for(let e of this._pendingParticipants.values()){let t=await e;this._pendingParticipants.delete(t.id),this._participants[t.id]=t}return this._participants}async _getParticipant(e){return(await this._getParticipants())[e]}};c($,"_current"),c($,"_activationMutex"),c($,"_delayedHangup",!1);var U=$,ia=class n extends Error{constructor(e,t){super(e);c(this,"participantErrors");Object.setPrototypeOf(this,n.prototype),this.participantErrors=t}};var kt=null,Qt=null;function Gn(){kt=null,Qt=null}function No(n){return n?.endsWith("/")?n.slice(0,-1):n}async function Ir(n=null,r){let e=No(n??l.apiBaseUrl);if(e)return e;if((r??l.apiEnv)!=="AUTO")return l.apiEndpoint(r);try{let t=atob("aHR0cHM6Ly9kbnMuZ29vZ2xlL3Jlc29sdmU/bmFtZT12aWRlby5fZW5kcG9pbnQub2sucnUmdHlwZT1UWFQ="),s=(await(await fetch(t,{method:"GET",mode:"cors",cache:"no-cache"})).json())?.Answer[0]?.data;if(!s)throw new Error("Wrong DNS response");return d.debug("Resolved API endpoint",s),s}catch(t){return d.warn("Failed to resolve API endpoint using DNS, default is used",t),l.apiEndpoint(r)}}async function Wn(){return kt||Qt||(Qt=Ir(),kt=await Qt,Qt=null,kt)}async function Xt(n,r={},e=!1){if(!window.Blob||!window.navigator.sendBeacon)return;await Wn();let t=$n(n,r,e),i=new window.Blob([t],{type:"application/x-www-form-urlencoded"});window.navigator.sendBeacon(`${kt}/fb.do`,i)}async function Ri(n,r={},e=!1,t){await Wn();let i=$n(n,r,e);return Lo(i,t)}async function Lo(n,r){let e=`${r??kt}/fb.do`,t=await fetch(e,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:n}),i=await t.text(),a;try{a=JSON.parse(i)}catch{a={result:i}}if(!t.ok||Object.hasOwn(a,"error_msg"))throw a;return a}async function Kn(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();d.debug("Form data sent successfully",t)}catch(e){throw d.warn("Failed to send form data",e),e}}function $n(n,r={},e=!1){r.method=n,r.format="JSON",r.application_key||(r.application_key=l.apiKey),e||(Ce.sessionKey?r.session_key=Ce.sessionKey:Ce.accessToken&&(r.access_token=Ce.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 Ci=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 Bo=10,Fo=700,Vo=3e3,Pi=class extends Ci{constructor(){super(...arguments);c(this,"_userId",null);c(this,"_uuid");c(this,"_externalUidsCache",new Map);c(this,"_decorativeIdToInitialId",new Map);c(this,"_initialIdToDecorativeId",new Map)}async _callUnsafe(e,t={},i=!1){let a=async s=>{try{return await Ri(e,t,i)}catch(o){if(!Object.hasOwn(o,"error_msg")&&(s++,d.debug(`${e} network error, attempt ${s}...`),s<Bo))return await I.delay(Math.min(s*Fo,Vo)),a(s);throw d.warn(e,"error",o),o}};return a(0)}async _call(e,t={},i=!1){try{return await this._callUnsafe(e,t,i)}catch(a){d.warn("Api call error",a);let s=re.API;switch(a.error_code){case 102:case 103:case 104:return await this.authorize(),this._callUnsafe(e,t,i)}let o={message:a.error_msg,code:a.error_code};switch(a.custom_error&&(o.custom_error=a.custom_error),a.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 G(s,o)}}async userId(e){let t=I.extractOkId(e);if(Ce.isEmpty())return q.fromId(String(t));this._externalUidsCache.has(t)||await this._getExternalIdsByOkIds([t]);let i=this.getDecorativeIdByInitialId(t);return i&&(t=i),q.fromString(this._externalUidsCache.get(t))}async authorize(){if(this._ensureUuid(),!l.apiKey)throw new G(re.API,{message:"Required argument apiAppKey not passed"});let e={session_data:{version:2,device_id:this._uuid,client_version:l.appVersion,client_type:"SDK_JS"}};return l.authToken&&(e.session_data.auth_token=l.authToken,e.session_data.version=3),this._callUnsafe("auth.anonymLogin",e,!0).then(t=>{t.uid&&(this._userId=Number(t.uid)),Ce.sessionKey=t.session_key,Ce.sessionSecretKey=t.session_secret_key}).catch(t=>{throw t.error_code===401&&E.onTokenExpired(),new G(re.AUTH,{message:t.error_msg,code:t.error_code})})}log(e){let t={collector:"ok.mobile.apps.video",data:JSON.stringify({application:`${l.appName}:${l.sdkVersion}`,platform:l.platform,items:e})};Xt("log.externalLog",t)}logClientStats(e){let t={app_version:String(l.appVersion),sdk_type:"WEB",sdk_version:l.sdkVersion,version:1,items:e};l.clientStatsPlatform&&(t.platform=l.clientStatsPlatform);let i={data:JSON.stringify(t)};Xt("vchat.clientStats",i)}logClientEvents(e){let t={app_version:String(l.appVersion),sdk_type:"WEB",sdk_version:l.sdkVersion,version:1,items:e};l.clientStatsPlatform&&(t.platform=l.clientStatsPlatform);let i={data:JSON.stringify(t)};Xt("vchat.clientEvents",i)}async uploadDebugLogs(e,t,i,a){let s={conversationId:e,webrtcPlatform:l.platform,startTime:t,endTime:i},o=await this._callUnsafe("vchat.getLogUploadUrl",s),u=new FormData,p=new Blob([a],{type:"application/json"});u.append("file",p,"log.json");let m=new URL(o.upload_url);return m.searchParams.append("size",p.size.toString()),Kn(m.toString(),u)}async joinConversation(e,t=!1,i){let a={conversationId:e,isVideo:t,protocolVersion:l.protocolVersion};return i&&(a.chatId=i),this._call("vchat.joinConversation",a)}async createConversation(e,t="",i=!1,{onlyAdminCanShareMovie:a,audienceMode:s,audioOnly:o}={},u){let p=this._preareStartConversationData({conversationId:e,isVideo:!1,joiningAllowed:!0,payload:t,requireAuthToJoin:i,onlyAdminCanShareMovie:a,audienceMode:s,audioOnly:o,speakerIds:u});return this._startConversation(p)}async startConversation(e,t,i,a=!1,s="",o=!1,u=!1,{onlyAdminCanShareMovie:p}={},m){let h=this._preareStartConversationData({conversationId:e,isVideo:a,joiningAllowed:o,payload:s,requireAuthToJoin:u,onlyAdminCanShareMovie:p,externalIds:m});if(t&&t.length)switch(i){case rt.USER:h.uids=t.join(",");break;case rt.GROUP:h.gid=t[0];break;case rt.CHAT:h.chatId=t[0];break}return this._startConversation(h)}_ensureUuid(){if(!this._uuid){let e=ot.get("uuid");e||(e=I.uuid(),ot.set("uuid",e)),this._uuid=String(e)}}deviceId(){return this._ensureUuid(),this._uuid}_preareStartConversationData({conversationId:e,isVideo:t,payload:i="",joiningAllowed:a=!1,requireAuthToJoin:s=!1,onlyAdminCanShareMovie:o,audienceMode:u=!1,audioOnly:p=!1,speakerIds:m=[],externalIds:h}){let R={conversationId:e,isVideo:t,protocolVersion:l.protocolVersion};if(a&&(R.createJoinLink=!0),i&&(R.payload=i),l.domain&&(R.domainId=l.domain),l.externalDomain&&(R.externalDomain=l.externalDomain),s&&(R.requireAuthToJoin=!0),o!==void 0&&(R.onlyAdminCanShareMovie=o),u&&(R.audienceMode=u),p&&(R.audioOnly=p),m.length){let M=m.map(w=>I.composeUserId(w));R.speakerIds=M.join(",")}return h&&(R.externalIds=h.map(q.toSignaling).join(",")),R}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 s={joinLink:e,isVideo:t,protocolVersion:l.protocolVersion};return i?.length&&(s.observedIds=i.join(",")),l.anonymToken&&(s.anonymToken=l.anonymToken),a&&(s.payload=a),this._call("vchat.joinConversationByLink",s)}async getOkIdsByExternalIds(e){let t=[],i=[],a=new Map,s=Array.from(this._externalUidsCache.keys()),o=Array.from(this._externalUidsCache.values());for(let p of e){let m=q.toString(p),h=o.indexOf(m);h>-1?t.push(this.replaceByInitialIdIdIfExists(s[h])):(a.set(String(p.id),m),i.push({id:p.id,ok_anonym:p.type==="ANONYM"}))}return i.length&&(await this._call("vchat.getOkIdsByExternalIds",{externalIds:i})).ids.forEach((p,m)=>{let h=Number(p.ok_user_id),R=String(p.external_user_id.id);a.has(R)&&(this.cacheExternalId(h,q.fromString(a.get(R))),t.push(h))}),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 s of e){let o=q.toString(s),u=a.indexOf(o);if(u>-1){let p=I.composeParticipantId(this.replaceByInitialIdIdIfExists(i[u]),te.USER,s.deviceIdx);t.set(s,p)}}return t}async getExternalIdsByOkIds(e){let t=[],i=[];for(let s of e)if(this._externalUidsCache.has(s)){let o=this.getDecorativeIdByInitialId(s),u=this._externalUidsCache.get(o??s);t.push(q.fromString(u))}else i.push(s);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=q.toString(e),s=i.indexOf(a);return s>-1?I.composeParticipantId(this.replaceByInitialIdIdIfExists(t[s]),te.USER,e.deviceIdx):s>-1?I.composeParticipantId(t[s],te.USER,e.deviceIdx):null}cacheExternalId(e,t){let i=I.extractOkId(e);this._externalUidsCache.set(i,q.toString(t))}mapDecorativeId(e,t){let i=I.extractOkId(e),a=I.extractOkId(t);this._decorativeIdToInitialId.set(i,a),this._initialIdToDecorativeId.set(a,i)}unmapDecorativeId(e){let t=I.extractOkId(e),i=this.getDecorativeIdByInitialId(t);i&&this._decorativeIdToInitialId.delete(i),this._initialIdToDecorativeId.delete(t)}getDecorativeIdByInitialId(e){let t=I.extractOkId(e);return this._initialIdToDecorativeId.get(t)}replaceByInitialIdIdIfExists(e){let t=I.extractOkId(e);return this._decorativeIdToInitialId.get(t)??t}async getConversationParams(e){let t={};return l.anonymToken&&(t.anonymToken=l.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};l.anonymToken&&(t.anonymToken=l.anonymToken),Xt("vchat.hangupConversation",t)}sendUserFeedbackStats(e,t,i,a){let s={collector:"app.vchat.events.product",data:JSON.stringify({application:`${l.appName}:${l.sdkVersion}`,platform:l.platform,items:[{type:1,operation:T.USER_FEEDBACK_RECEIVED,timestamp:Date.now(),custom:{vcid:e,user_response:t,reason:i,group_call_users_count:a}}]})};Xt("log.externalLog",s)}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=(s,o)=>{for(let[u,p]of Object.entries(s)){let m=Number(u),h=q.fromId(p,o);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 s of e){let o=Number(s);if(!t.has(o)){let u=q.fromId(String(o));t.set(o,u),this.cacheExternalId(o,u)}}return t}catch{return t}}async getServerTime(){return(await this._call("system.getInfo")).serverTime}};var qn=(e=>(e.KING="KING",e.PAWN="PAWN",e))(qn||{}),jo=qn;var zn=(e=>(e.OFF="0",e.ON="1",e))(zn||{});var ra=class{constructor(r){c(this,"_queue");c(this,"_readCursor");c(this,"_writeCursor");c(this,"_moveReadCursor");c(this,"_left");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){c(this,"_uuid");c(this,"_apiKey");c(this,"_callToken");c(this,"_apiEnv");c(this,"_baseApiUrl");c(this,"_sessionKey");this._uuid=I.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:l.appVersion,client_type:"SDK_JS",auth_token:this._callToken,version:3},application_key:this._apiKey},e=await Ir(this._baseApiUrl,this._apiEnv),t=await Ri("auth.anonymLogin",r,!0,e);return I.isObject(t)&&!("error_msg"in t)?(this._sessionKey=t.session_key,!0):!1}async hangupConversation(r){let e={conversationId:r,reason:k.HUNGUP,application_key:this._apiKey,session_key:this._sessionKey},t=await Ir(this._baseApiUrl,this._apiEnv);await Ri("vchat.hangupConversation",e,!0,t)}};var ce,yi=null,hI={getCameras:b.getCameras,getMicrophones:b.getMicrophones,getOutput:b.getOutput,getVideoFacingMode:b.getVideoFacingMode,hasCamera:b.hasCamera,hasMicrophone:b.hasMicrophone,getSavedCamera:b.getSavedCamera,getSavedMicrophone:b.getSavedMicrophone,getSavedOutput:b.getSavedOutput,hasCameraPermission:b.hasCameraPermission,hasMicrophonePermission:b.hasMicrophonePermission,hasPermissions:b.hasPermissions,getUserMedia:b.getUserMedia,getUserVideo:b.getUserVideo,getUserAudio:b.getUserAudio,setResolution:b.setResolution,isBrowserSupported:b.isBrowserSupported,isScreenCapturingSupported:b.isScreenCapturingSupported,os:b.os,isMobile:b.isMobile,browserName:b.browserName,browserVersion:b.browserVersion,baseChromeVersion:b.baseChromeVersion,getAudioContext:b.getAudioContext,isAudioShareSupported:b.isAudioShareSupported},gI={participantMarkerCompare:I.participantMarkerCompare};function _I(n){yi=n}function fI(n){l.videoEffects=n}function SI(n){l.audioEffects=n}function vI(n,r=null,e={},t=1){l.vmoji=n,l.vmojiOptions={protocolVersion:t,renderingOptions:e},r&&n.setSDK(r)}async function II(n){if(l.set(n),ce||(ce=new Pi),Jn.disableLog(!l.debug),d.toggle(l.debug),d.log(`Calls SDK ${l.sdkVersion}`,n),await b.init(),!b.isBrowserSupported())throw new G(re.UNSUPPORTED);d.log("UserAgent:",navigator.userAgent),d.log("Screen resolution:",`${window.screen.width}x${window.screen.height}`),d.log("Permissions:",`Camera: ${b.hasCameraPermission()}, Mic: ${b.hasMicrophonePermission()}`),d.log("Simulcast:",`${n.simulcast} => ${l.simulcast}`)}async function EI(n,r=[se.AUDIO],e="",t=!1,i=!1,a,s){let o=[];return Array.isArray(n)?o=n.length?n:[]:n&&(o=[n]),Ho([],rt.USER,r,e,t,i,a,o,s)}async function Ho(n,r=rt.USER,e,t="",i=!1,a=!1,s,o,u){if(U.current())throw d.error("There is already active call"),new G(k.FAILED);return new U(ce,yi).onStart({opponentIds:n,opponentType:r,mediaOptions:e,payload:t,joiningAllowed:i,requireAuthToJoin:a,onlyAdminCanShareMovie:s,externalIds:o,onFastStart:u})}async function TI(n,r){return Go(n,te.USER,void 0,r)}async function Go(n,r=te.USER,e,t,i,a){if(n===U.id())throw new Error("Push has already been processed");return a&&ce.setUserId(a),new U(ce,yi).onPush(n,r,e,t,i)}async function RI(n,r){return n&&(l.authToken=n),r!==void 0&&l.apiBaseUrl!==r&&(l.apiBaseUrl=r,Gn()),ce.authorize()}async function CI(n=[se.AUDIO]){return qe().accept(n)}async function PI(){let n=U.current();if(n)return n.decline()}async function yI(n,r=[se.AUDIO]){return Wo(n,r)}async function Wo(n,r,e){if(U.current())throw d.error("There is already active call"),new G(k.FAILED);return new U(ce,yi).onJoin({conversationId:n,mediaOptions:r,chatId:e})}async function bI(n,r=[se.AUDIO],e,t,i){if(U.current())throw d.error("There is already active call"),new G(k.FAILED);return e&&(l.anonymToken=e),new U(ce,yi).onJoin({joinLink:n,mediaOptions:r,observedIds:t,payload:i})}async function MI(){let n=U.current();if(n)return n.hangup();U.hangupAfterInit()}async function AI(n,r){let e=Array.isArray(n)?n:[n],t=U.current();t&&await t.addParticipant(e,r)}async function DI(n,r){let e=U.current();if(e){let t=n.map(i=>I.composeUserId(i));await e.addParticipantLegacy(t,r)}}async function wI(n,r=!1){let e=await ce.getOkIdsByExternalIds([n]);return Ko(e[0],r)}async function Ko(n,r=!1){let e=U.current();if(e)try{await e.removeParticipant(I.composeUserId(n),r)}catch(t){d.warn(`Failed to remove participant ${n}. Perhaps he is no longer on the call. ${t}`)}}async function kI(n,r){let e=U.current();if(n==="videoinput"&&Rt.contains(r))return l.videoFacingMode=r,e?(b.isMobile()&&e.stopVideoTrack(),e.changeDevice(n)):void 0;if(!await b._saveDeviceId(n,r))throw new Error(`Device not found: ${r}`);if(e)return e.changeDevice(n)}async function OI(n){let r=typeof n=="object"?{...n,fastScreenSharing:n.captureScreen&&n.fastScreenSharing,captureAudio:n.captureScreen&&n.captureAudio&&l.audioShare}:{captureScreen:n,fastScreenSharing:!1,captureAudio:!1},e=U.current();return e?e.toggleScreenCapturing(r):Promise.reject()}function xI(n){let r=U.current();r&&r.toggleAnimojiCapturing(n)}async function NI(n,r=!1){let e=U.current();e&&await e.setVideoStream(n,r)}async function LI(n){let r=U.current();r&&await r.toggleLocalVideo(n)}async function UI(n){let r=U.current();r&&await r.toggleLocalAudio(n)}async function BI(n){let r=U.current();if(r)return r.setLocalResolution(n)}async function FI(n){let r=U.current();r&&await r.changePriorities(n)}async function VI(n,r){let e=U.current();if(e){let t;if(r){let[i]=await ce.getOkIdsByExternalIds([r]);t=I.composeParticipantId(i,te.USER,r.deviceIdx)}await e.changeParticipantState(n,t)}}async function jI(){let n=U.current();n&&await n.putHandsDown()}async function HI(n){let r=U.current();r&&await r.updateDisplayLayout(n)}async function GI(n,r,e=!1){let t=await ce.getOkIdsByExternalIds([n]);return $o(t[0],q.getDeviceIdx(n),r,e)}async function $o(n,r,e,t=!1){let i=U.current();i&&await i.grantRoles(I.composeParticipantId(n,te.USER,r),e,t)}async function WI({externalId:n=null,muteStates:r,requestedMedia:e=[],roomId:t=null}){let i=null;return n&&(i=(await ce.getOkIdsByExternalIds([n]))[0]),qo({uid:i,muteStates:r,requestedMedia:e,deviceIdx:q.getDeviceIdx(n),roomId:t})}async function qo({uid:n=null,muteStates:r,requestedMedia:e=[],deviceIdx:t=0,roomId:i=null}){let a=U.current();if(a){let s=n?I.composeParticipantId(n,te.USER,t):null;await a.muteParticipant(s,r,e,i)}}async function KI(n,r=!1,e=null){let t=await ce.getOkIdsByExternalIds([n]);return zo(t[0],r,q.getDeviceIdx(n),e)}async function zo(n,r=!1,e=0,t=null){let i=U.current();i&&await i.pinParticipant(I.composeParticipantId(n,te.USER,e),r,t)}async function $I(n){let r=U.current();r&&await r.updateMediaModifiers(n)}async function qI(n){let r=U.current();r&&await r.enableVideoSuspend(n)}async function zI(n){let r=U.current();r&&await r.enableVideoSuspendSuggest(n)}async function JI(n){let r=U.current();r&&await r.changeOptions(n)}async function YI(n,r=null){let e=null;return r&&(e=(await ce.getOkIdsByExternalIds([r]))[0]),Jo(n,e)}async function Jo(n,r=null){let e=U.current();if(e){let t=r?I.composeUserId(r):null;await e.chatMessage(n,t)}}async function QI(n=10){let r=U.current();if(r)return r.chatHistory(n)}async function XI(n,r=null){let e=null;return r&&(e=(await ce.getOkIdsByExternalIds([r]))[0]),Yo(n,e,q.getDeviceIdx(r))}async function Yo(n,r=null,e=0){let t=U.current();if(t){let i=r?I.composeParticipantId(r,te.USER,e):null;await t.customData(n,i)}}async function ZI(n="",r=!1,{onlyAdminCanShareMovie:e=!1}={}){return(await ce.createConversation(I.uuid(),n,r,{onlyAdminCanShareMovie:e})).join_link}async function eE(n="",r=!1,{onlyAdminCanShareMovie:e=!1,audioOnly:t=!1}={},i){let a=q.fromIds(i),s=await ce.getOkIdsByExternalIds(a);return(await ce.createConversation(I.uuid(),n,r,{onlyAdminCanShareMovie:e,audienceMode:!0,audioOnly:t},s)).join_link}async function tE(){let n=U.current();return n?n.createJoinLink():Promise.reject()}async function iE(){let n=U.current();return n?n.removeJoinLink():Promise.reject()}async function rE(n,r){return ce.getAnonymTokenByLink(n,r)}function aE(n){let r=U.current();r&&r.setVolume(n)}function nE(n){l.forceRelayPolicy=n}async function sE(n=!1,r=null,e=null,t="DIRECT_LINK",i=null,a=null){let s=U.current();return s?s.startStream(n,r,e,t,i,a):Promise.reject()}async function oE(n=null){let r=U.current();return r?r.stopStream(n):Promise.reject()}async function cE(n=null){let r=U.current();return r?r.publishStream(n):Promise.reject()}async function dE(n,r,e=!1,t=null){let i=U.current();if(!i)return Promise.reject();let a,s,o=[];if(r?.length&&o.push(...r),n&&o.push(n),o.length){let u=await ce.getParticipantIdsByExternalIds(o);n&&(a=u.get(n),u.delete(n)),s=Array.from(u.values())}return i.recordSetConf(a,s,e,t)}async function lE(){let n=U.current();return n?n.getStreamInfo():Promise.reject()}async function pE(n){let r=U.current();return r?r.addMovie(n):Promise.reject()}async function uE(n){let r=U.current();return r?r.updateMovie(n):Promise.reject()}async function mE(n){let r=U.current();return r?r.removeMovie(n):Promise.reject()}async function hE(n,r){let e=U.current();if(e){let t=[];for(let i of n){let a,s;i.addParticipantIds&&(a=(await ce.getOkIdsByExternalIds(i.addParticipantIds)).map(o=>I.composeUserId(o))),i.removeParticipantIds&&(s=(await ce.getOkIdsByExternalIds(i.removeParticipantIds)).map(o=>I.composeUserId(o))),t.push({id:i.id,name:i.name,participantCount:i.participantCount,addParticipantIds:a,removeParticipantIds:s,countdownSec:i.countdownSec})}return e.updateRooms(t,r)}return Promise.reject()}async function gE(n,r){let e=U.current();return e?e.activateRooms(n,r):Promise.reject()}async function _E(n=null,r=null){let e=U.current();if(!e)return Promise.reject();let t;if(r){let i=await ce.getOkIdsByExternalIds([r]),a=q.getDeviceIdx(r);t=I.composeParticipantId(i[0],te.USER,a)}return e.switchRoom(n,t)}async function fE(n){let r=U.current();return r?r.removeRooms(n):Promise.reject()}function SE(n){l.statisticsInterval=n;let r=U.current();if(r)return r.updateStatisticsInterval()}function vE(n){Jn.disableLog(!n),d.toggle(n)}function IE(n,...r){l.debugLog&&d.send(n,"[external]",...r)}async function EE(){let n=we.conversationId;if(!n)throw d.error("[uploadDebugLogs]","No conversation id found"),new Error("No conversation id found");let r=we.collectLogs();if(r.length===0)throw d.error("[uploadDebugLogs]","No logs found"),new Error("No logs found");let e=we.startTime,t=we.endTime;try{return ce?.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})}}async function TE(n){let r=U.current();if(r)return r.videoEffect(n)}async function RE(n,r){let e=U.current();if(e)return e.audioEffect(n.length>0?n:null,r)}async function CE(n){let r=U.current();r&&await r.setAudioStream(n)}async function PE(n,r=null,e=null){let t=U.current();if(!t)return;let i=e??r?.id,a=null;if(r){let o=(await ce.getOkIdsByExternalIds([r]))[0];if(!o)throw new Error("Could not get user id to set animoji svg");a=I.composeParticipantId(o,te.USER,q.getDeviceIdx(r))}t.setAnimojiSvg(n,a,i)}function yE(n){let r=U.current();r&&r.setAnimojiFill(n)}async function bE(n=null,r,e=!1){return qe().getWaitingHall(n,r,e)}async function ME(){return qe().getAudienceModeHands()}async function AE(n,r=!1){let e=qe(),t;if(n){let[i]=await ce.getOkIdsByExternalIds([n]);t=I.composeUserId(i)}return e.promoteParticipant(t,r)}async function DE(n=!1){return qe().requestPromotion(n)}async function wE(n=!1){return qe().acceptPromotion(n)}async function kE(n){return qe().getParticipantListChunk(n)}async function OE(n){return qe().getParticipants(n)}async function xE(n){return qe().feedback(n)}function NE(n,r,e){return qe().userFeedbackStats(n,r,e)}function LE(n,r={},e=!1){let t=U.current();t&&t.sendClientEvent(n,r,e)}async function UE(n,r){return qe().enableFeatureForRoles(n,r)}function qe(){let n=U.current();if(!n)throw new Error("Conversation not found");return n}async function BE(n){await ce.removeHistoryRecords(n)}async function FE(n){let r=U.current();r&&await r.startAsr(n)}async function VE(n){let r=U.current();r&&await r.stopAsr(n)}async function jE(n){let r=U.current();r&&await r.requestAsr(n)}async function HE(n){let r=U.current();return r?r.startUrlSharing(n):Promise.reject()}async function GE(){let n=U.current();return n?n.stopUrlSharing():Promise.reject()}function WE(){return l.sdkVersion}export{Pi as Api,aa as ApiExternal,ra as ArrayDequeue,Ce as AuthData,xt as BaseLogger,ke as CallDirection,rt as CallType,Xr as ChatRoomEventType,Zr as ConversationFeature,Jt as ConversationOption,Xa as DebugMessageType,ea as ExternalIdType,Rt as FacingMode,re as FatalError,G as HangupReason,k as HangupType,se as MediaOption,je as MediaTrackKind,Kt as MediaType,Be as MuteState,J as ParticipantState,zn as ParticipantStateDataValue,Nr as ParticipantStatus,jo as RecordRole,ui as RoomsEventType,zt as Signaling,N as SignalingCommandType,Ke as SignalingConnectionType,L as SignalingNotification,Ze as TransportTopology,dt as UserRole,te as UserType,Mt as VolumeDetector,CI as acceptCall,wE as acceptPromotion,gE as activateRooms,pE as addMovie,AI as addParticipant,DI as addParticipantInternal,RI as authorize,hI as browser,Ho as callInternal,EI as callTo,OI as captureScreen,xI as captureVmoji,RE as changeAudioEffect,JI as changeConversationOptions,kI as changeDevice,VI as changeParticipantState,FI as changePriorities,TE as changeVideoEffect,QI as chatHistory,YI as chatMessage,Jo as chatMessageInternal,tE as createJoinLink,XI as customData,Yo as customDataInternal,vE as debug,IE as debugMessage,PI as declineCall,UE as enableFeatureForRoles,qI as enableVideoSuspend,zI as enableVideoSuspendSuggest,xE as feedback,nE as forceRelayPolicy,rE as getAnonymTokenByLink,ME as getAudienceModeHands,kE as getParticipantListChunk,OE as getParticipants,lE as getStreamInfo,bE as getWaitingHall,GI as grantRoles,$o as grantRolesInternal,MI as hangup,II as init,yI as joinCall,bI as joinCallByLink,Wo as joinCallInternal,LE as logClientEvent,WI as muteParticipant,qo as muteParticipantInternal,KI as pinParticipant,zo as pinParticipantInternal,TI as processPush,Go as processPushInternal,AE as promoteParticipant,cE as publishStream,jI as putHandsDown,dE as recordSetConf,BE as removeHistoryRecords,iE as removeJoinLink,mE as removeMovie,wI as removeParticipant,Ko as removeParticipantInternal,fE as removeRooms,jE as requestAsr,DE as requestPromotion,SI as setAudioEffects,CE as setAudioStream,BI as setLocalResolution,_I as setLogger,$I as setMediaModifiers,SE as setStatisticsInterval,fI as setVideoEffects,NI as setVideoStream,vI as setVmoji,yE as setVmojiFill,PE as setVmojiSvg,aE as setVolume,FE as startAsr,eE as startAudienceConversation,ZI as startConversation,sE as startStream,HE as startUrlSharing,VE as stopAsr,oE as stopStream,GE as stopUrlSharing,_E as switchRoom,UI as toggleLocalAudio,LI as toggleLocalVideo,HI as updateDisplayLayout,uE as updateMovie,hE as updateRooms,EE as uploadDebugLogs,NE as userFeedbackStats,gI as utils,WE as version};