@signalwire/js 3.21.0-dev.202306211756.f3711f1.0 → 3.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -1418,7 +1418,7 @@ var JWTSession = class extends BaseJWTSession {
1418
1418
  this.options = options;
1419
1419
  __publicField(this, "WebSocketConstructor", WebSocket);
1420
1420
  __publicField(this, "CloseEventConstructor", CloseEvent);
1421
- __publicField(this, "agent", "@signalwire/js/browser/3.21.0-dev.202306211756.f3711f1.0");
1421
+ __publicField(this, "agent", "@signalwire/js/browser/3.21.0");
1422
1422
  }
1423
1423
  get allowReattach() {
1424
1424
  var _a;
package/dist/index.js CHANGED
@@ -1421,7 +1421,7 @@ var JWTSession = class extends import_core14.BaseJWTSession {
1421
1421
  this.options = options;
1422
1422
  __publicField(this, "WebSocketConstructor", WebSocket);
1423
1423
  __publicField(this, "CloseEventConstructor", CloseEvent);
1424
- __publicField(this, "agent", "@signalwire/js/browser/3.21.0-dev.202306211756.f3711f1.0");
1424
+ __publicField(this, "agent", "@signalwire/js/browser/3.21.0");
1425
1425
  }
1426
1426
  get allowReattach() {
1427
1427
  var _a;
package/dist/index.umd.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * SignalWire JS SDK v3.21.0-dev.202306211756.f3711f1.0 (https://signalwire.com)
2
+ * SignalWire JS SDK v3.21.0 (https://signalwire.com)
3
3
  * Copyright 2018-2023 SignalWire
4
4
  * Licensed under MIT(https://github.com/signalwire/signalwire-js/blob/main/LICENSE)
5
5
  */
@@ -17,5 +17,5 @@
17
17
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
18
18
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19
19
  PERFORMANCE OF THIS SOFTWARE.
20
- ***************************************************************************** */const Ki=e=>gr(e.type),Qi=function*(e){hr().debug("vertoEventWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n}=t,{rtcPeerId:s}=o;if(!s)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const i=jo.createCatchableSaga((function*(e){const{id:t,method:o,params:n={}}=e.payload,{callID:s,nodeId:i}=n,a=r.getRTCPeerById(s);if(!a)return void hr().warn(`RTCPeer '${s}' not found for method: '${o}'`,n);const c=r.peer;switch(o){case"verto.media":case"verto.answer":a.uuid===(null==c?void 0:c.uuid)&&r.setState("verto.media"===o?"early":"active"),(null==n?void 0:n.sdp)&&a.onRemoteSdp(n.sdp),yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Gr(t,o),node_id:i}});break;case"verto.bye":yield Fe([r,r.onVertoBye],{rtcPeerId:s,byeCause:null==n?void 0:n.cause,byeCauseCode:null==n?void 0:n.causeCode,redirectDestination:null==n?void 0:n.redirectDestination}),yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Gr(t,o),node_id:i}});break;case"verto.ping":{const{nodeId:e}=n,t=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(o=Object.getOwnPropertySymbols(e);n<o.length;n++)t.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(r[o[n]]=e[o[n]])}return r}(n,["nodeId"]);yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Qr(t),node_id:e}});break}case"verto.mediaParams":{if(!s||!n.mediaParams){hr().warn("Invalid mediaParams event",n);break}const{audio:e,video:t}=n.mediaParams;a&&t&&a.applyMediaConstraints("video",t),a&&e&&a.applyMediaConstraints("audio",e);break}default:return hr().warn(`Unknown Verto method: ${o}`,n)}}),(e=>{hr().error("Verto Error",e)}));for(;;){const e=yield $e(n,(e=>{var t;return!!Ki(e)&&(null===(t=e.payload.params)||void 0===t?void 0:t.callID)===s}));yield ze(i,e)}hr().trace("vertoEventWorker ended")},Gi=function*(e){hr().debug("roomSubscribedWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n,pubSubChannel:s}=t,{rtcPeerId:i}=o;if(!i)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const a=yield $e(n,(e=>"video.room.subscribed"===e.type&&e.payload.call_id===i));r._attachListeners(a.payload.room_session.id),r.applyEmitterTransforms(),r.setActiveRTCPeer(i),yield Ue(xo.upsert({id:a.payload.call_id,roomId:a.payload.room_session.room_id,roomSessionId:a.payload.room_session.id,memberId:a.payload.member_id,previewUrl:a.payload.room_session.preview_url})),yield Ue(s,{type:"video.room.joined",payload:a.payload}),hr().debug("roomSubscribedWorker ended",i)},Ji=function*(e){hr().debug("promoteDemoteWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n}=t,{rtcPeerId:s}=o;if(!s)throw new Error("Missing rtcPeerId for promoteDemoteWorker");const i=yield $e(n,(e=>("video.member.promoted"===e.type||"video.member.demoted"===e.type)&&e.payload.member_id===r.memberId));hr().debug("promoteDemoteWorker:",i.type,i.payload),yield Ue(Eo.updateAuthState(i.payload.authorization));const a=yield He(di.getAuthState);if(!a)throw new Error(`Invalid authState for '${i.type}'`);const{audio_allowed:c,video_allowed:d}=a;switch(i.type){case"video.member.promoted":r.updateMediaOptions({audio:"both"===c,video:"both"===d,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d});break;case"video.member.demoted":r.updateMediaOptions({audio:!1,video:!1,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d})}r._triggerNewRTCPeer(),hr().debug("promoteDemoteWorker ended",s)},Xi=function*(e){hr().debug("sessionAuthWorker started");const{instance:t}=e;switch((yield $e([Jr.authSuccessAction.type,Jr.authErrorAction.type])).type){case Jr.authSuccessAction.type:yield Fe([t,t.resume]);break;case Jr.authErrorAction.type:yield Fe([t,t.setState],"hangup")}hr().debug("sessionAuthWorker ended")},Yi={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},Zi=Object.assign(Object.assign({},Yi),{noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1}),ea={width:{ideal:1280,min:320},height:{ideal:720,min:180},aspectRatio:{ideal:16/9}},ta={destinationNumber:"room",remoteCallerName:"Outbound Call",remoteCallerNumber:"",callerName:"",callerNumber:"",audio:Yi,video:ea,useStereo:!1,attach:!1,screenShare:!1,additionalDevice:!1,userVariables:{},requestTimeout:1e4,autoApplyMediaParams:!0,iceGatheringTimeout:2e3,maxIceGatheringTimeout:5e3,maxConnectionStateTimeout:3e3,watchMediaPackets:!0,watchMediaPacketsTimeout:2e3};class ra extends cn{constructor(e){super(e),this.leaveReason=void 0,this.gotEarly=!1,this.doReinvite=!1,this._eventsPrefix="video",this.state="new",this.prevState="new",this.rtcPeerMap=new Map,this.resuming=!1,this.onVertoBye=e=>{const{rtcPeerId:t,byeCause:r="NORMAL_CLEARING",byeCauseCode:o="16",redirectDestination:n}=e;this.cause=String(r),this.causeCode=String(o);const s=this.getRTCPeerById(t);return s?n&&s.localSdp?(this.logger.debug("Redirect Destination to:",n,"for RTCPeer:",s.uuid),void this.executeInvite(s.localSdp,s.uuid,n)):(s.onRemoteBye({code:this.causeCode,message:this.cause}),void(this.activeRTCPeerId===(null==s?void 0:s.uuid)&&this.setState("hangup"))):this.logger.warn("Invalid RTCPeer to hangup",e)},this.options=Object.assign(Object.assign({},ta),e),this._checkDefaultMediaConstraints(),this.setState("new"),this.logger.trace("New Call with Options:",this.options),this.applyEmitterTransforms({local:!0})}get id(){return this.__uuid}get active(){return"active"===this.state}get trying(){return"trying"===this.state}get memberId(){return this.component.memberId}get previewUrl(){return this.component.previewUrl}get roomId(){return this.component.roomId}get roomSessionId(){return this.component.roomSessionId}get callId(){var e;return(null===(e=this.peer)||void 0===e?void 0:e.uuid)||""}get localStream(){var e;return null===(e=this.peer)||void 0===e?void 0:e.localStream}set localStream(e){this.peer&&(this.peer.localStream=e)}get remoteStream(){var e;return null===(e=this.peer)||void 0===e?void 0:e.remoteStream}get iceServers(){var e,t;return null!==(t=null===(e=this.options)||void 0===e?void 0:e.iceServers)&&void 0!==t?t:this.select(di.getIceServers)}get component(){return this.select((e=>pn.getComponent(e,this.callId)))||{}}dialogParams(e){const{destinationNumber:t,attach:r,callerName:o,callerNumber:n,remoteCallerName:s,remoteCallerNumber:i,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:u=!0}=this.options;return{dialogParams:{id:e,destinationNumber:t,attach:r,callerName:o,callerNumber:n,remoteCallerName:s,remoteCallerNumber:i,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:u,version:1e3}}}get cameraId(){return this.peer?this.peer.getDeviceId("video"):null}get cameraLabel(){return this.peer?this.peer.getDeviceLabel("video"):null}get microphoneId(){return this.peer?this.peer.getDeviceId("audio"):null}get microphoneLabel(){return this.peer?this.peer.getDeviceLabel("audio"):null}get withAudio(){var e;return Boolean(null===(e=this.peer)||void 0===e?void 0:e.hasAudioReceiver)}get withVideo(){var e;return Boolean(null===(e=this.peer)||void 0===e?void 0:e.hasVideoReceiver)}get localVideoTrack(){return this.peer?this.peer.localVideoTrack:null}get localAudioTrack(){return this.peer?this.peer.localAudioTrack:null}get peer(){return this.getRTCPeerById(this.activeRTCPeerId)}set peer(e){if(e){if(this.logger.debug("Set RTCPeer",e.uuid,e),this.rtcPeerMap.set(e.uuid,e),this.peer&&this.callId!==e.uuid){const e=this.peer.uuid;this.logger.debug(">>> Stop old RTCPeer",e),this.hangup(e).catch(console.error),this.peer.detachAndStop()}this.logger.debug(">>> Replace RTCPeer with",e.uuid),this.activeRTCPeerId=e.uuid}else this.logger.warn("Invalid RTCPeer",e)}getRTCPeerById(e){return this.rtcPeerMap.get(e)}appendRTCPeer(e){return this.rtcPeerMap.set(e.uuid,e)}setActiveRTCPeer(e){this.peer=this.getRTCPeerById(e)}setLocalStream(e){return new Promise((async(t,r)=>{try{if(!this.peer||!this.localStream)return r(new Error("Invalid RTCPeerConnection."));if(!pi(e))return r(new Error("Invalid stream provided."));const o=this.localStream.getAudioTracks(),n=e.getAudioTracks();n.length<=0?this.logger.info("No audio track found in the stream provided. Audio will be unaffected."):(o.forEach((e=>{var t;vi(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e)})),n.forEach((e=>{var t;null===(t=this.localStream)||void 0===t||t.addTrack(e)})));const s=this.localStream.getVideoTracks(),i=e.getVideoTracks();i.length<=0?this.logger.info("No video track found in the stream provided. Video will be unaffected."):(s.forEach((e=>{var t;vi(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e)})),i.forEach((e=>{var t;null===(t=this.localStream)||void 0===t||t.addTrack(e)}))),await this.updateStream(this.localStream),this.logger.debug("setLocalStream done"),t(this.localStream)}catch(e){this.logger.error("setLocalStream",e),r(e)}}))}vertoExecute(e){return this.execute({method:this._getRPCMethod(),params:e})}_getRPCMethod(){const e=this.select(di.getAuthState);return e&&Dr(e)?"webrtc.verto":"video.message"}async _triggerNewRTCPeer(){this.logger.debug("_triggerNewRTCPeer Start");try{this.logger.debug("Build a new RTCPeer");const e=new qi(this,"offer");this.appendRTCPeer(e),this.logger.debug("Run workers for the new RTCPeer",e.uuid),this.runRTCPeerWorkers(e.uuid),this.logger.debug("Trigger start for the new RTCPeer!"),await e.start()}catch(e){this.logger.error("Error building new RTCPeer to promote/demote",e)}}updateCamera(e){return this.updateConstraints({video:Object.assign({aspectRatio:16/9},e)})}updateMicrophone(e){return this.updateConstraints({audio:e})}manageSendersWithConstraints(e){return!1===e.audio&&(this.logger.info("Switching off the microphone"),this.stopOutboundAudio()),!1===e.video&&(this.logger.info("Switching off the camera"),this.stopOutboundVideo()),e.audio||e.video}updateConstraints(e,{attempt:t=0}={}){return t>1?Promise.reject(new Error("Failed to update constraints")):new Promise((async(r,o)=>{var n;try{if(!this.peer)return o(new Error("Invalid RTCPeerConnection."));if(!Object.keys(e).length)return o(new Error("Invalid audio/video constraints."));if(this.logger.debug("updateConstraints trying constraints",this.__uuid,e),!this.manageSendersWithConstraints(e))return void this.logger.debug("Either `video` and `audio` (or both) constraints were set to `false` so their corresponding senders (if any) were stopped");let s;try{s=await Ti(e)}catch(s){if(s instanceof DOMException&&"Concurrent mic process limit."===s.message){let o={};null===(n=this.localStream)||void 0===n||n.getTracks().forEach((t=>{var r;o[t.kind]=t.getConstraints(),void 0!==e[t.kind]&&(this.logger.debug("updateConstraints stop old tracks to retrieve new ones"),vi(t),null===(r=this.localStream)||void 0===r||r.removeTrack(t))}));try{return r(this.updateConstraints(e,{attempt:t+1}))}catch(e){return this.logger.error("Restoring previous constraints"),r(this.updateConstraints(o,{attempt:t+1}))}}return this.logger.error("updateConstraints",s),o(s)}await this.updateStream(s),this.logger.debug("updateConstraints done"),r()}catch(e){this.logger.error("updateConstraints",e),o(e)}}))}async updateStream(e){if(!this.peer)throw new Error("Invalid RTCPeerConnection.");this.logger.debug("updateStream got stream",e),this.localStream||(this.localStream=new MediaStream);const{instance:t}=this.peer,r=e.getTracks();this.logger.debug(`updateStream got ${r.length} tracks`);for(let e=0;e<r.length;e++){const o=r[e];this.logger.debug("updateStream apply track: ",o);const n=t.getTransceivers().find((({mid:e,sender:t,receiver:r})=>t.track&&t.track.kind===o.kind?(this.logger.debug("Found transceiver by sender"),!0):r.track&&r.track.kind===o.kind?(this.logger.debug("Found transceiver by receiver"),!0):null===e&&(this.logger.debug("Found disassociated transceiver"),!0)));n&&n.sender?(this.logger.debug("updateStream got transceiver",n.currentDirection,n.mid),await n.sender.replaceTrack(o),this.logger.debug("updateStream replaceTrack"),n.direction="sendrecv",this.logger.debug("updateStream set to sendrecv"),this.localStream.getTracks().forEach((e=>{var t;e.kind===o.kind&&e.id!==o.id&&(this.logger.debug("updateStream stop old track and apply new one - "),vi(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e))})),this.localStream.addTrack(o)):(this.logger.debug("updateStream no transceiver found. addTrack and start dancing!"),this.peer.type="offer",this.doReinvite=!0,this.localStream.addTrack(o),t.addTrack(o,this.localStream)),this.logger.debug("updateStream simply update mic/cam"),"audio"===o.kind?this.options.micId=o.getSettings().deviceId:"video"===o.kind&&(this.options.camId=o.getSettings().deviceId)}this.logger.debug("updateStream done")}runRTCPeerWorkers(e){this.runWorker("vertoEventWorker",{worker:Qi,initialState:{rtcPeerId:e}}),!this.options.additionalDevice&&!this.options.screenShare&&(this.runWorker("roomSubscribedWorker",{worker:Gi,initialState:{rtcPeerId:e}}),this.runWorker("promoteDemoteWorker",{worker:Ji,initialState:{rtcPeerId:e}}))}invite(){return new Promise((async(e,t)=>{this.direction="outbound",this.peer=new qi(this,"offer");try{this.runRTCPeerWorkers(this.peer.uuid),await this.peer.start(),e(this)}catch(e){this.logger.error("Invite error",e),t(e)}}))}answer(){return new Promise((async(e,t)=>{this.direction="inbound",this.peer=new qi(this,"answer");try{await this.peer.start(),e(this)}catch(e){this.logger.error("Answer error",e),t(e)}}))}onLocalSDPReady(e){if(!e.instance.localDescription)throw this.logger.error("Missing localDescription",e),new Error("Invalid RTCPeerConnection localDescription");const{type:t,sdp:r}=e.instance.localDescription,o=this._mungeSDP(r);switch(this.logger.debug("LOCAL SDP \n",`Type: ${t}`,"\n\n",o),t){case"offer":return this._watchSessionAuth(),!this.resuming&&e.instance.remoteDescription?this.executeUpdateMedia(o,e.uuid):this.executeInvite(o,e.uuid);case"answer":this.logger.warn("Unhandled verto.answer");break;default:return this.logger.error(`Unknown SDP type: '${t}' on call ${this.id}`)}}_closeWSConnection(){this._watchSessionAuth(),this.store.dispatch(Jr.sessionForceCloseAction())}_watchSessionAuth(){this.sessionAuthTask&&this.sessionAuthTask.cancel(),this.sessionAuthTask=this.runWorker("sessionAuthWorker",{worker:Xi})}async resume(){var e;if(this.logger.debug(`[resume] Call ${this.id}`),null===(e=this.peer)||void 0===e?void 0:e.instance){const{connectionState:e}=this.peer.instance;this.logger.debug(`[resume] connectionState for ${this.id} is '${e}'`),"closed"!==e&&(this.resuming=!0,this.peer.restartIce())}}async executeInvite(e,t,r){const o=this.getRTCPeerById(t);if(!o||o.instance.remoteDescription&&!this.resuming)throw new Error(`RTCPeer '${t}' already has a remoteDescription. Invalid invite.`);"new"===this.state&&this.setState("requesting");try{const o=this.options.screenShare?{layout:this.options.layout,positions:this.options.positions}:{},n=zr(Object.assign(Object.assign(Object.assign({},this.dialogParams(t)),o),{sdp:e}));let s=[];s=this.options.screenShare?["video.room.screenshare"]:this.options.additionalDevice?["video.room.additionaldevice"]:this.getSubscriptions();const i=await this.vertoExecute({message:n,callID:t,node_id:r,subscribe:s});this.logger.debug("Invite response",i),this.resuming=!1}catch(e){throw this.setState("hangup"),e}}async executeUpdateMedia(e,t){try{const r=qr(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e,action:"updateMedia"})),o=await this.vertoExecute({message:r,callID:t});if(o.sdp||this.logger.error("UpdateMedia invalid SDP answer",o),this.logger.debug("UpdateMedia response",o),!this.peer)return this.logger.error("Invalid RTCPeer to updateMedia");await this.peer.onRemoteSdp(o.sdp)}catch(e){throw this.logger.error("UpdateMedia error",e),e}}async hangup(e){const t=null!=e?e:this.callId;if(!t)throw new Error("Invalid RTCPeer ID to hangup");try{const e=Hr(this.dialogParams(t));await this.vertoExecute({message:e,callID:t})}catch(e){this.logger.error("Hangup error:",e)}finally{if(t!==this.callId)return this.logger.warn("Prevent setState hangup",t,this.callId);this.setState("hangup")}}dtmf(e){const t=this.callId;if(!t)throw new Error("Invalid RTCPeer ID to send DTMF");const r=Kr(Object.assign(Object.assign({},this.dialogParams(t)),{dtmf:e}));this.vertoExecute({message:r,callID:t})}doReinviteWithRelayOnly(){this.peer&&this.active&&this.peer.restartIceWithRelayOnly()}stopOutboundAudio(){this.peer&&this.active&&this.peer.stopTrackSender("audio")}restoreOutboundAudio(){this.peer&&this.active&&this.peer.restoreTrackSender("audio")}stopOutboundVideo(){this.peer&&this.active&&this.peer.stopTrackSender("video")}restoreOutboundVideo(){this.peer&&this.active&&this.peer.restoreTrackSender("video")}setState(e){switch(this.prevState=this.state,this.state=e,this.logger.trace(`Call ${this.id} state change from ${this.prevState} to ${this.state}`),this.emit(this.state,this),e){case"purge":case"destroy":this._finalize();break;case"hangup":this.setState("destroy")}}updateMediaOptions(e){this.logger.debug("updateMediaOptions",Object.assign({},e)),this.options=Object.assign(Object.assign({},this.options),e),this._checkDefaultMediaConstraints()}_mungeSDP(e){return(e=>{const t=/^a=candidate.*.local\ .*/;return e.split("\r\n").filter((e=>!t.test(e))).join("\r\n")})(e)}_checkDefaultMediaConstraints(){!0===this.options.video&&(this.options.video=ea),!0===this.options.audio&&(this.options.audio=this.options.screenShare?Zi:Yi)}_finalize(){this.rtcPeerMap.forEach((e=>{e.stop()})),this.rtcPeerMap.clear()}}const oa=()=>{const e=document.createElement("video");return e.muted=!0,e.autoplay=!0,e.playsInline=!0,e.addEventListener("pause",(()=>{e.play().catch((t=>{hr().error("Video Element Paused",e,t)}))})),e},na=({element:e})=>new Promise((t=>{e.addEventListener("canplay",(function r(){e.removeEventListener("canplay",r),t()})),e.addEventListener("resize",(function r(){e.removeEventListener("resize",r),t()}))})),sa=({x:e,y:t,width:r,height:o})=>({top:`${t}%`,left:`${e}%`,width:`${r}%`,height:`${o}%`}),ia=({track:e,element:t})=>{t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))},aa=({video:e,rootElement:t,paddingWrapper:r})=>{const o=e.videoHeight/e.videoWidth*100,n=function(e,t=0,r){let o=null,n=null;const s=function(){o&&(clearTimeout(o),n=null,o=null)},i=function(){if(!t)return e.apply(this,arguments);const i=this,a=arguments,c=r&&!o;return s(),n=function(){e.apply(i,a)},o=setTimeout((function(){if(o=null,!c){const e=n;return n=null,null==e?void 0:e()}}),t),c&&n?n():void 0};return i.cancel=s,i.flush=function(){const e=n;s(),e&&e()},i}((({width:t,height:n})=>{if(r){const s=n/t*100;r.style.paddingBottom=`${s>o?o:s}%`,r.style.width=((t,r)=>{const o=e.videoWidth/e.videoHeight;return o>t/r?"100%":r*o+"px"})(t,n)}}),100),s=new ResizeObserver((e=>{e.forEach((e=>{if(e.contentBoxSize){const{inlineSize:t,blockSize:r}=Array.isArray(e.contentBoxSize)?e.contentBoxSize[0]:e.contentBoxSize;n({width:t,height:r})}else e.contentRect&&n({width:e.contentRect.width,height:e.contentRect.height})}))}));return{start:()=>s.observe(t),stop:()=>s.disconnect()}},ca=({track:e,element:t})=>(t.autoplay=!0,t.playsinline=!0,t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()})),t),da=Jr.createAction("swJs/audioSetSpeakerAction"),ua=({rootElement:e,applyLocalVideoOverlay:t})=>function*({instance:r,runSaga:o}){try{const n=new Map,s=oa(),i={status:"hidden",get id(){return`sw-sdk-${r.id}`},get domElement(){return n.get(this.id)},set domElement(e){e?(hr().debug("Set localOverlay",e),n.set(this.id,e)):(hr().debug("Remove localOverlay"),n.delete(this.id))},hide(){if(!this.domElement)return hr().warn("Missing localOverlay to hide");this.domElement.style.opacity="0"},show(){return this.domElement?"hidden"===this.status?hr().info("localOverlay not visible"):void(this.domElement.style.opacity="1"):hr().warn("Missing localOverlay to show")},setLocalOverlayMediaStream(e){if(!this.domElement)return hr().warn("Missing localOverlay to set the local overlay stream");const t=this.domElement.querySelector("video");t&&(t.srcObject=e)},setLocalOverlayMirror(e){if(!this.domElement||!this.domElement.firstChild)return hr().warn("Missing localOverlay to set the mirror");const t=this.domElement.firstChild;e??r.localOverlay.mirrored?(t.style.transform="scale(-1, 1)",t.style.webkitTransform="scale(-1, 1)"):(t.style.transform="scale(1, 1)",t.style.webkitTransform="scale(1, 1)")}},a=(({localOverlay:e,rootElement:t})=>async({layout:r,myMemberId:o,localStream:n})=>{hr().debug("Process layout.changed");try{const{layers:s=[]}=r,i=s.find((({member_id:e})=>e===o));let a=e.domElement;if(e.status=i?"visible":"hidden",!i)return hr().debug("Location not found"),void(a&&(hr().debug("Current layer not visible"),e.hide()));if(!a){hr().debug("Build myLayer"),a=(({location:e})=>{const{top:t,left:r,width:o,height:n}=sa(e),s=document.createElement("div");return s.style.position="absolute",s.style.overflow="hidden",s.style.top=t,s.style.left=r,s.style.width=o,s.style.height=n,s})({location:i}),a.id=e.id;const r=oa();r.srcObject=n,r.disablePictureInPicture=!0,r.style.width="100%",r.style.height="100%",r.style.pointerEvents="none",a.appendChild(r);const o=t.querySelector(".mcuLayers"),s=o?.querySelector(`#${a.id}`);return o&&!s?(hr().debug("Build myLayer append it"),o.appendChild(a),e.domElement=a,void e.setLocalOverlayMirror()):void hr().debug("Build myLayer >> wait next")}const{top:c,left:d,width:u,height:l}=sa(i);hr().debug("Update myLayer:",c,d,u,l);const h=n.getVideoTracks().filter((e=>e.enabled&&"live"===e.readyState)).length>0;h&&e.setLocalOverlayMediaStream(n),a.style.opacity=h?"1":"0",a.style.top=c,a.style.left=d,a.style.width=u,a.style.height=l}catch(e){hr().error("Layout Changed Error",e)}})({rootElement:e,localOverlay:i});let c=!1,d=null;const u=e=>{r.peer?.hasVideoSender&&r.localStream?a({layout:e.layout,localStream:r.localStream,myMemberId:r.memberId}):i.hide()};let l;r.on("_internal.mirror.video",(e=>{i.setLocalOverlayMirror(e)})),r.on("layout.changed",(e=>{hr().debug("Received layout.changed - videoTrack",c),c?u(e):d=e})),r.on("room.subscribed",(e=>{const t=e.room_session.members?.find((e=>e.id===r.memberId));if(t?.audio_muted)try{r.stopOutboundAudio()}catch(e){hr().error("Error handling audio_muted",e)}if(t?.video_muted)try{r.stopOutboundVideo()}catch(e){hr().error("Error handling video_muted",e)}r.localStream&&i.setLocalOverlayMediaStream(r.localStream)})),r.on("member.updated.video_muted",(e=>{try{const{member:t}=e;t.id===r.memberId&&"video_muted"in t&&(t.video_muted?i.hide():i.show())}catch(e){hr().error("Error handling video_muted",e)}})),r.on("track",(function(r){"video"===r.track.kind&&(l=o(pa,{applyLocalVideoOverlay:t,rootElement:e,track:r.track,element:s}),c=!0,d&&u(d))})),r.once("destroy",(()=>{(e=>{for(;e.firstChild;)e.removeChild(e.firstChild)})(e),n.clear(),l?.cancel()}))}catch(e){hr().error("videoElementSaga",e)}};function*la({element:e,room:t}){const r=Jr.getCustomSagaActionType(t.__uuid,da);for(;;){const o=yield $e([r]);try{if(o.type===r){const r=yield Fe(gi,e,o.payload);t.settleCustomSagaTrigger({dispatchId:o.dispatchId,payload:r,kind:"resolve"})}}catch(e){t.settleCustomSagaTrigger({dispatchId:o.dispatchId,payload:e,kind:"reject"}),hr().error(e)}}}function*ha({track:e,element:t,speakerId:r,room:o}){ca({track:e,element:t}),r&&gi(t,r).catch((()=>{})),yield ze(la,{element:t,room:o})}function*pa({rootElement:e,applyLocalVideoOverlay:t=!0,track:r,element:o}){try{if(ia({element:o,track:r}),o.style.width="100%",o.style.maxHeight="100%",!t)return void e.appendChild(o);if(e.querySelector(".mcuContent"))return void hr().debug("MCU Content already there");const n=document.createElement("div");n.style.position="absolute",n.style.top="0",n.style.left="0",n.style.right="0",n.style.bottom="0",n.appendChild(o);const s=document.createElement("div");s.classList.add("paddingWrapper"),s.style.paddingBottom="56.25%",s.style.position="relative",s.style.width="100%",s.appendChild(n);const i=document.createElement("div");i.classList.add("mcuLayers"),i.style.display="none",s.appendChild(i);const a=document.createElement("div");a.classList.add("mcuContent"),a.style.position="relative",a.style.width="100%",a.style.height="100%",a.style.margin="0 auto",a.style.display="flex",a.style.alignItems="center",a.style.justifyContent="center",a.appendChild(s),e.style.width="100%",e.style.height="100%",e.appendChild(a),hr().debug("MCU readyState 1 >>",o.readyState),o.readyState===HTMLMediaElement.HAVE_NOTHING&&(hr().debug("Wait for the MCU to be ready"),yield Fe(na,{element:o})),hr().debug("MCU is ready..");const c=aa({rootElement:e,video:o,paddingWrapper:s});c.start(),r.addEventListener("ended",(()=>{c&&c.stop()})),i.style.display="block"}catch(e){hr().error("Handle video track error",e)}}const ma={echoCancellation:!0,noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1},ga=Er(class extends ra{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:vn.audioMuteMember,audioUnmute:vn.audioUnmuteMember,videoMute:vn.videoMuteMember,videoUnmute:vn.videoUnmuteMember,setMicrophoneVolume:vn.setInputVolumeMember,setInputVolume:vn.setInputVolumeMember,setInputSensitivity:vn.setInputSensitivityMember}),fa=Er(class extends ra{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:vn.audioMuteMember,audioUnmute:vn.audioUnmuteMember,videoMute:vn.videoMuteMember,videoUnmute:vn.videoUnmuteMember,setInputVolume:vn.setInputVolumeMember,setMicrophoneVolume:vn.setInputVolumeMember,setInputSensitivity:vn.setInputSensitivityMember}),va=()=>{},ya="video.memberList.updated",ba=Sr({event:ya}),_a=(e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(er),e)),[]).join(".")})(ba),Sa=["video.room.joined","video.member.joined","video.member.left","video.member.updated"],wa=e=>Sa.includes(e),ka=({action:e,memberList:t})=>{const r=(e=>"video.room.joined"===e.type?e.payload.room_session.members:[e.payload.member])(e);return r.forEach("video.member.left"===e.type?e=>{t.delete(e.id)}:e=>{t.set(e.id,e)}),Array.from(t.values())};function*Ea({pubSubChannel:e}){const t=new Map;function*r(r){const o={room_session_id:"video.room.joined"===r.type?r.payload.room_session.id:r.payload.room_session_id,members:ka({action:r,memberList:t})};yield Ue(e,{type:_a,payload:o})}for(;;){const t=yield $e(e,(({type:e})=>wa(e)));yield ze(r,t)}}const Ca=function*({channels:{pubSubChannel:e},instance:t}){const r=t.getSubscriptions();if(!(e=>e.some((e=>e.includes(ba))))(r))return;const{cleanup:o}=((e,t)=>{const r=(e=>Ar(Sa).filter((t=>!e.includes(t))))(t);r.forEach((t=>{e.once(t,va)}));const o=({members:t})=>{e.emit(ya,{members:t})};return e.on(_a,o),{cleanup:()=>{e.off(_a,o)}}})(t,r);yield ze(Ea,{pubSubChannel:e}),t.once("destroy",(()=>{o()}))},Ta=function*(e){if(!e.initialState)throw new Error("[memberPositionWorker] Missing initialState");yield ze(Hs.memberPositionWorker,e)},Pa=function*(e){hr().trace("childMemberJoinedWorker started");const{channels:t,instance:r,initialState:o,onDone:n,onFail:s}=e,{swEventChannel:i}=t,{parentId:a}=o;if(!a)throw new Error("Missing parentId for childMemberJoinedWorker");const c=yield $e(i,(e=>"video.member.joined"===e.type&&e.payload.member.parent_id===a)),{member:d}=c.payload;if(d?.parent_id){const e=yield He(pn.getComponentsById);Object.values(e).find((e=>"memberId"in e&&e.memberId===d.parent_id))?(r._attachListeners(d.id),r.applyEmitterTransforms(),yield Ue(xo.upsert({id:r.callId,roomId:c.payload.room_id,roomSessionId:c.payload.room_session_id,memberId:d.id})),n?.()):s?.({error:new Error("Unknown parent_id")})}hr().trace("childMemberJoinedWorker ended")},Ia=Er(class extends ra{_screenShareList=new Set;_deviceList=new Set;_mirrored;constructor(e){super(e),this._mirrored=e.mirrorLocalVideoOverlay}get screenShareList(){return Array.from(this._screenShareList)}get deviceList(){return Array.from(this._deviceList)}get interactivityMode(){return this.select((({session:e})=>{const{authState:t}=e;return t?.join_as??""}))}get permissions(){return this.select((({session:e})=>{const{authState:t}=e;return t?.room?.scopes??[]}))}getEmitterTransforms(){return new Map([[["video.room.joined"],{type:"roomSession",instanceFactory:()=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{recordings:{eventTransformType:"roomSessionRecording",processInstancePayload:e=>({recording:e})},playbacks:{eventTransformType:"roomSessionPlayback",processInstancePayload:e=>({playback:e})},streams:{eventTransformType:"roomSessionStream",processInstancePayload:e=>({stream:e})}}}],[[Lr("video.recording.list")],{type:"roomSessionRecordingList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{recordings:{eventTransformType:"roomSessionRecording",processInstancePayload:e=>({recording:e})}}}],[[Lr("video.playback.list")],{type:"roomSessionPlaybackList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{playbacks:{eventTransformType:"roomSessionPlayback",processInstancePayload:e=>({playback:e})}}}],[[Lr("video.recording.start"),"video.recording.started","video.recording.updated","video.recording.ended"],{type:"roomSessionRecording",instanceFactory:e=>vn.createRoomSessionRecordingObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.recording,room_session_id:this.roomSessionId})}],[[Lr("video.playback.start"),"video.playback.started","video.playback.updated","video.playback.ended"],{type:"roomSessionPlayback",instanceFactory:e=>vn.createRoomSessionPlaybackObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.playback,room_session_id:this.roomSessionId})}],[[Lr("video.stream.list")],{type:"roomSessionStreamList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{streams:{eventTransformType:"roomSessionStream",processInstancePayload:e=>({stream:e})}}}],[[Lr("video.stream.start"),"video.stream.started","video.stream.ended"],{type:"roomSessionStream",instanceFactory:e=>vn.createRoomSessionStreamObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.stream,room_session_id:this.roomSessionId})}]])}getCompoundEvents(){return new Map([...Hs.MEMBER_POSITION_COMPOUND_EVENTS])}attachPreConnectWorkers(){this.runWorker("memberListUpdated",{worker:Ca})}attachOnSubscribedWorkers(e){this.runWorker("memberPositionWorker",{worker:Ta,initialState:e})}async createScreenShareObject(e={}){return this.startScreenShare(e)}async startScreenShare(e={}){return new Promise((async(t,r)=>{const{autoJoin:o=!0,audio:n=!1,video:s=!0,layout:i,positions:a}=e,c=await Pi({audio:!0===n?ma:n,video:s}),d={...this.options,screenShare:!0,recoverCall:!1,localStream:c,remoteStream:void 0,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId},layout:i,positions:a},u=rn({store:this.store,Component:ga})(d);c.getVideoTracks().forEach((e=>{e.addEventListener("ended",(()=>{u&&u.active&&u.leave()}))})),u.once("destroy",(()=>{u.emit("room.left"),this._screenShareList.delete(u)}));try{return u.runWorker("childMemberJoinedWorker",{worker:Pa,onDone:()=>t(u),onFail:r,initialState:{parentId:this.memberId}}),this._screenShareList.add(u),o?await u.join():t(u)}catch(e){this.logger.error("ScreenShare Error",e),r(e)}}))}addCamera(e={}){const{autoJoin:t=!0,...r}=e;return this.addDevice({autoJoin:t,video:r})}addMicrophone(e={}){const{autoJoin:t=!0,...r}=e;return this.addDevice({autoJoin:t,audio:r})}async addDevice(e={}){return new Promise((async(t,r)=>{const{autoJoin:o=!0,audio:n=!1,video:s=!1}=e;if(!n&&!s)throw new TypeError("At least one of `audio` or `video` must be requested.");const i={...this.options,localStream:void 0,remoteStream:void 0,audio:n,video:s,additionalDevice:!0,recoverCall:!1,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId}},a=rn({store:this.store,Component:fa})(i);a.once("destroy",(()=>{a.emit("room.left"),this._deviceList.delete(a)}));try{return a.runWorker("childMemberJoinedWorker",{worker:Pa,onDone:()=>t(a),onFail:r,initialState:{parentId:this.memberId}}),this._deviceList.add(a),o?await a.join():t(a)}catch(e){this.logger.error("RoomDevice Error",e),r(e)}}))}join(){return super.invite()}leave(){return this.hangup()}updateSpeaker({deviceId:e}){return this.triggerCustomSaga(da(e))}async hangup(e){return this._screenShareList.forEach((e=>{e.leave()})),this._deviceList.forEach((e=>{e.leave()})),super.hangup(e)}_finalize(){this._screenShareList.clear(),this._deviceList.clear(),super._finalize()}getLayoutList(){return this.getLayouts()}getMemberList(){return this.getMembers()}get localOverlay(){return{mirrored:this._mirrored,setMirrored:e=>{this._mirrored=e,this.emit("_internal.mirror.video",this._mirrored)}}}},{audioMute:vn.audioMuteMember,audioUnmute:vn.audioUnmuteMember,videoMute:vn.videoMuteMember,videoUnmute:vn.videoUnmuteMember,deaf:vn.deafMember,undeaf:vn.undeafMember,setInputVolume:vn.setInputVolumeMember,setOutputVolume:vn.setOutputVolumeMember,setMicrophoneVolume:vn.setInputVolumeMember,setSpeakerVolume:vn.setOutputVolumeMember,setInputSensitivity:vn.setInputSensitivityMember,removeMember:vn.removeMember,removeAllMembers:vn.removeAllMembers,getMembers:vn.getMembers,getLayouts:vn.getLayouts,setLayout:vn.setLayout,setPositions:vn.setPositions,setMemberPosition:vn.setMemberPosition,hideVideoMuted:vn.hideVideoMuted,showVideoMuted:vn.showVideoMuted,getRecordings:vn.getRecordings,startRecording:vn.startRecording,getPlaybacks:vn.getPlaybacks,play:vn.play,setHideVideoMuted:vn.setHideVideoMuted,getMeta:vn.getMeta,setMeta:vn.setMeta,updateMeta:vn.updateMeta,deleteMeta:vn.deleteMeta,getMemberMeta:vn.getMemberMeta,setMemberMeta:vn.setMemberMeta,updateMemberMeta:vn.updateMemberMeta,deleteMemberMeta:vn.deleteMemberMeta,promote:vn.promote,demote:vn.demote,getStreams:vn.getStreams,startStream:vn.startStream}),Ma=function*(e){hr().trace("videoManagerWorker started");const{channels:t}=e,{swEventChannel:r,pubSubChannel:o}=t;for(;;){const e=yield $e(r,(e=>e.type.startsWith("video-manager.")));yield Ue(o,e)}};class Ra extends un{_eventsPrefix="video-manager";constructor(e){super(e),this.runWorker("videoManagerWorker",{worker:Ma})}getEmitterTransforms(){return new Map([[["video-manager.rooms.subscribed"],{type:"roomSession",instanceFactory:({rooms:e})=>({rooms:e.map((e=>br(e)))}),payloadTransform:({rooms:e})=>({rooms:e.map((e=>br(e)))})}],[["video-manager.room.started","video-manager.room.added","video-manager.room.updated","video-manager.room.ended","video-manager.room.deleted"],{type:"roomSession",instanceFactory:e=>br(e),payloadTransform:e=>br(e)}]])}}class xa extends dn{_videoManager;_chat;_pubSub;get rooms(){return{makeRoomObject:e=>{const{rootElement:t,applyLocalVideoOverlay:r=!0,stopCameraWhileMuted:o=!0,stopMicrophoneWhileMuted:n=!0,...s}=e,i=[];i.push((({speakerId:e})=>function*({instance:t,runSaga:r}){if("undefined"!=typeof Audio)try{const o=new Audio;let n;t.on("track",(function(s){"audio"===s.track.kind&&(n=r(ha,{track:s.track,element:o,speakerId:e,room:t}))})),t.once("destroy",(()=>{n?.cancel()}))}catch(e){hr().error("audioElementSaga",e)}else hr().warn("`Audio` is not supported on this environment.")})({speakerId:s.speakerId})),t&&i.push(ua({rootElement:t,applyLocalVideoOverlay:r}));const a=(c={...s,store:this.store,emitter:this.emitter,customSagas:i},rn({store:c.store,customSagas:c.customSagas,Component:Ia})(c));var c;return n&&a.on("member.updated.audio_muted",(({member:e})=>{try{e.id===a.memberId&&"audio_muted"in e&&(e.audio_muted?a.stopOutboundAudio():a.restoreOutboundAudio())}catch(e){this.logger.error("Error handling audio_muted",e)}})),o&&a.on("member.updated.video_muted",(({member:e})=>{try{e.id===a.memberId&&"video_muted"in e&&(e.video_muted?a.stopOutboundVideo():a.restoreOutboundVideo())}catch(e){this.logger.error("Error handling video_muted",e)}})),a}}}get chat(){return this._chat||(this._chat=ws.createBaseChatObject({store:this.store,emitter:this.options.emitter})),this._chat}get pubSub(){return this._pubSub||(this._pubSub=Os.createBasePubSubObject({store:this.store,emitter:this.options.emitter})),this._pubSub}get videoManager(){return this._videoManager||(this._videoManager=(e=>{const t=rn({store:e.store,Component:Ra})(e);return new Proxy(t,{get:(e,t,r)=>"_eventsNamespace"===t?"":"eventChannel"===t?"video-manager.rooms":Reflect.get(e,t,r)})})(this.options)),this._videoManager}reauthenticate(e){this.store.dispatch(Jr.reauthAction({token:e}))}}function Oa(e){this.message=e}(Oa.prototype=new Error).name="InvalidCharacterError";var Aa="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new Oa("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,o,n=0,s=0,i="";o=t.charAt(s++);~o&&(r=n%4?64*r+o:o,n++%4)?i+=String.fromCharCode(255&r>>(-2*n&6)):0)o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(o);return i};function ja(e){var t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(Aa(e).replace(/(.)/g,(function(e,t){var r=t.charCodeAt(0).toString(16).toUpperCase();return r.length<2&&(r="0"+r),"%"+r})))}(t)}catch(e){return Aa(t)}}function La(e){this.message=e}function Da(e,t){if("string"!=typeof e)throw new La("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(ja(e.split(".")[r]))}catch(e){throw new La("Invalid token specified: "+e.message)}}(La.prototype=new Error).name="InvalidTokenError";const Na="callId",Wa=()=>{if(window&&window.sessionStorage)return window.sessionStorage};class Va extends Io{options;WebSocketConstructor=WebSocket;CloseEventConstructor=CloseEvent;agent="@signalwire/js/browser/3.21.0-dev.202306211756.f3711f1.0";constructor(e){let t;try{t=Da(e.token,{header:!0})}catch(e){}super({...e,host:e.host||t?.ch}),this.options=e}get allowReattach(){return!1!==this.options?.reattach}async retrieveRelayProtocol(){if(!this.allowReattach)return"";const e=this.getProtocolSessionStorageKey();return e?(this.logger.trace("Hijacking: search protocol for",e),Wa()?.getItem(e)??""):""}async persistRelayProtocol(){if(!this.allowReattach)return;const e=this.getProtocolSessionStorageKey();e&&(this.logger.trace("Hijacking: persist protocol",e,this.relayProtocol),Wa()?.setItem(e,this.relayProtocol))}async retrieveSwAuthorizationState(){const e=this.getAuthStateSessionStorageKey();return e?Wa()?.getItem(e)??"":""}async persistSwAuthorizationState(e){if(!this.allowReattach)return;const t=this.getAuthStateSessionStorageKey();t&&(this.logger.trace("Hijacking: persist auth state",t,e),Wa()?.setItem(t,e))}_onSocketClose(e){if("unknown"===this.status){this.logger.trace("Hijacking: invalid values - cleaning up storage");const e=this.getProtocolSessionStorageKey();e&&Wa()?.removeItem(e);const t=this.getAuthStateSessionStorageKey();t&&Wa()?.removeItem(t),Wa()?.removeItem(Na)}super._onSocketClose(e)}getAuthStateSessionStorageKey(){return`as-${this.getSessionStorageKey()}`}getProtocolSessionStorageKey(){return`pt-${this.getSessionStorageKey()}`}getSessionStorageKey(){try{const e=Da(this.options.token);return`${e?.r}`}catch(e){return""}}}const $a=e=>{const t={...e,emitter:new Dt},r=on({userOptions:t,SessionConstructor:Va});return rn({store:r,Component:xa})(t)},Ua=["subscribe","publish","getMessages","getMembers","getMemberState","getAllowedChannels","setMemberState"];var Ba=Object.freeze({__proto__:null,ChatMember:ws.ChatMember,ChatMessage:ws.ChatMessage,Client:function(e){const t=$a(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.chat,{get:(e,o,n)=>o in r?r[o]:Ua.includes(o)?(e=>async(...r)=>(await t.connect(),t.chat[e](...r)))(o):Reflect.get(e,o,n)})}});const Fa=["getAllowedChannels","subscribe","publish"];var za=Object.freeze({__proto__:null,PubSubMessage:Os.PubSubMessage,Client:function(e){const t=$a(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.pubSub,{get:(e,o,n)=>o in r?r[o]:Fa.includes(o)?(e=>async(...r)=>(await t.connect(),t.pubSub[e](...r)))(o):Reflect.get(e,o,n)})}});async function Ha(e,t){const r=await fetch(e,t);if(!r.ok){if(401===r.status)throw new zo(r.status,"Unauthorized");let e;try{e=await r.json()}catch(e){}const t=e?.errors?JSON.stringify(e.errors):"Not Found";throw new Ho(r.status,t,e)}try{r.parsedBody=await r.json()}catch(e){}return r}const qa=({baseUrl:e,timeout:t=3e4,...r},o=Ha)=>async(n,s)=>{const i={...s?.body?{"Content-Type":"application/json"}:{},...r.headers,...s?.headers},a=Ka({...r,...s,headers:i});let c;if(t){const e=new AbortController;a.signal=e.signal,c=setTimeout((()=>{e.abort()}),t)}try{return{body:(await o(Qa({path:n,baseUrl:e,searchParams:s?.searchParams}),a)).parsedBody}}catch(e){throw e}finally{c&&clearTimeout(c)}},Ka=e=>Object.entries(e).reduce(((e,[t,r])=>{return"body"===t?{...e,body:(o=r,"string"==typeof o?o:JSON.stringify(o))}:null!=r?{...e,[t]:r}:e;var o}),{}),Qa=({path:e,baseUrl:t,searchParams:r})=>{const o=new URL(e,t);return r&&Object.entries(r).forEach((([e,t])=>{null!=t&&o.searchParams.append(e,t)})),o.toString()},Ga={aspectRatio:{ideal:16/9}},Ja=e=>new Promise((async(t,r)=>{const{audio:o=!0,video:n=!0,iceServers:s,rootElementId:i,applyLocalVideoOverlay:a=!0,autoJoin:c=!1,stopCameraWhileMuted:d=!0,stopMicrophoneWhileMuted:u=!0,speakerId:l,...h}=e,p=$a({...h});if(await p.connect(),!p)return;let m;if(i){const e=document.getElementById(i);e?m=e:(m=document.body,hr().warn(`We couldn't find an element with id: ${i}: using 'document.body' instead.`))}const g=p.rooms.makeRoomObject({audio:o,video:!0===n?Ga:n,negotiateAudio:!0,negotiateVideo:!0,iceServers:s,rootElement:m,applyLocalVideoOverlay:a,stopCameraWhileMuted:d,stopMicrophoneWhileMuted:u,speakerId:l});g.once("destroy",(()=>{g.emit("room.left"),p.disconnect()}));const f=()=>new Promise((async(e,t)=>{try{g.once("room.subscribed",(t=>{e(g)})),await g.join()}catch(e){hr().error("Join",e),p.disconnect(),t(e)}})),v=new Proxy(g,{get:(e,t,r)=>"join"===t?f:Reflect.get(e,t,r)});if(c)try{await v.join(),t(v)}catch(e){r(e)}else t(v)})),Xa=["audioMute","audioUnmute","deaf","getLayouts","getMembers","getRecordings","hideVideoMuted","leave","removerMember","restoreOutboundAudio","restoreOutboundVideo","setInputSensitivity","setInputVolume","setLayout","setPositions","setMemberPosition","setOutputVolume","showVideoMuted","startRecording","stopOutboundAudio","stopOutboundVideo","undeaf","videoMute","videoUnmute","setMicrophoneVolume","setSpeakerVolume","getMeta","setMeta","updateMeta","deleteMeta","getMemberMeta","setMemberMeta","updateMemberMeta","deleteMemberMeta","promote","demote"],Ya=["member.joined","layout.changed"],Za=()=>{},ec=function(e){const{audio:t=!0,video:r=!0,iceServers:o,rootElement:n,applyLocalVideoOverlay:s=!0,mirrorLocalVideoOverlay:i=!1,stopCameraWhileMuted:a=!0,stopMicrophoneWhileMuted:c=!0,speakerId:d,destinationNumber:u,localStream:l,...h}=e;["audio","video"].forEach((t=>{t in e&&hr().warn(`The '${t}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`)}));const p=$a(h),m=p.rooms.makeRoomObject({negotiateAudio:!0,negotiateVideo:!0,iceServers:o,rootElement:n,applyLocalVideoOverlay:s,mirrorLocalVideoOverlay:i,stopCameraWhileMuted:a,stopMicrophoneWhileMuted:c,speakerId:d,destinationNumber:u,localStream:l}),g=!1!==e?.reattach,f={joined:({call_id:e})=>{g&&Wa()?.setItem(Na,e)},init:()=>{if(!g)return;m.on("room.subscribed",f.joined);const e=Wa()?.getItem(Na);e&&(m.options.prevCallId=e)},destroy:()=>{g&&(m.off("room.subscribed",f.joined),Wa()?.removeItem(Na))}};m.once("destroy",(()=>{m.emit("room.left",{reason:m.leaveReason}),f.destroy(),p.disconnect()})),p.once("session.disconnected",(()=>{m.destroy()}));const v={join:e=>new Promise((async(o,n)=>{try{m.attachPreConnectWorkers(),await p.connect();const s=e?.audio??t,i=e?.video??r,a=p._sessionAuthState,c=(e=>{const{authState:t,audio:r=!0,video:o=!0,sendAudio:n,sendVideo:s,receiveAudio:i,receiveVideo:a}=e;hr().debug("getJoinMediaParams options",{...e});const{audio_allowed:c,video_allowed:d,join_as:u}=t,l="member"===(u??"member"),h=l&&"both"===c,p=l&&"both"===d,m="none"!==c,g="none"!==d,f=Boolean(n??r),v=Boolean(s??o),y=Boolean(i??r),b=Boolean(a??o);return!h&&f&&hr().info("Not allowed to send audio on this room. Default values will be used."),!p&&v&&hr().info("Not allowed to send video on this room. Default values will be used."),!m&&y&&hr().info("Not allowed to receive video from the room. Default values will be used."),!g&&b&&hr().info("Not allowed to receive video from the room. Default values will be used."),{mustSendAudio:h&&f,mustSendVideo:p&&v,mustRecvAudio:m&&y,mustRecvVideo:g&&b}})({authState:a,sendAudio:Boolean(s),sendVideo:Boolean(i),...e});if(!Object.values(c).some(Boolean))return p.disconnect(),n(new Error(`Invalid arguments to join the room. The token used has join_as: '${a.join_as}'. \n${JSON.stringify(e,null,2)}\n`));hr().debug("Set mediaOptions",c),m.updateMediaOptions({audio:!!c.mustSendAudio&&(s||!0),video:!!c.mustSendVideo&&(i||!0),negotiateAudio:c.mustRecvAudio,negotiateVideo:c.mustRecvVideo}),m.once("room.subscribed",(e=>{m.attachOnSubscribedWorkers(e),o(m)})),f.init(),Ya.forEach((e=>m.once(e,Za))),await m.join()}catch(e){hr().error("RoomSession Join",e),p.disconnect(),n(e)}}))};return new Proxy(m,{get(e,t,r){if(t in v)return v[t];if(!e.active&&Xa.includes(t))throw new Error(`Tried to access the property/method "${t}" before the room was connected. Please call roomSession.join() first.`);return Reflect.get(e,t,r)}})};var tc=Object.freeze({__proto__:null,RoomSession:ec,createRoomObject:Ja,joinRoom:e=>Ja({...e,autoJoin:!0}),createClient:$a}),rc=Object.freeze({__proto__:null,getAddresses:async({spaceHost:e,accessToken:t})=>{const r="/addresses",o=qa({baseUrl:`https://${e}`,headers:{Authorization:`Bearer ${t}`}}),{body:n}=await o(r),s=async e=>{const{search:t}=new URL(e),{body:n}=await o(`${r}${t}`);return i(n)},i=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?s(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?s(t):void 0}});return i(n)},Client:class{options;httpClient;constructor(e){this.options=e,this.httpClient=qa({baseUrl:`https://${this.host}`,headers:{Authorization:`Bearer ${this.options.accessToken}`}})}get host(){return this.options.host??"fabric.signalwire.com"}async getAddresses(){const e="/addresses",{body:t}=await this.httpClient(e),r=async t=>{const{search:r}=new URL(t),{body:n}=await this.httpClient(`${e}${r}`);return o(n)},o=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?r(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?r(t):void 0}});return o(t)}async createCall({uri:e,...t}){const{body:r}=await this.httpClient("/call",{method:"POST",body:{uri:e}});return console.log("Dial Response",r),(({strategy:e,params:t,userParams:r})=>{let o,n;if("room"!==e)throw new Error(`Unknown strategy: '${e}'`);o=new ec({token:t.token,...r}),n=e=>new Promise(((t,r)=>(o.on("room.joined",(e=>t(e))),o.join(e).catch((e=>r(e))))));const s={start:n};return new Proxy(o,{get:(e,t,r)=>t in s?s[t]:Reflect.get(e,t,r)})})({...r,userParams:{host:this.host.includes("swire")?"relay.swire.io":void 0,...t}})}async createSATCall(e){return console.log("createSATCall to",e),new ec({host:this.host.includes("swire")?"relay.swire.io":void 0,token:this.options.accessToken,...e})}},registerDevice:async({host:e="fabric.signalwire.com",deviceType:t,deviceToken:r,accessToken:o})=>{const n=qa({baseUrl:`https://${e}`,headers:{Authorization:`Bearer ${o}`}}),{body:s}=await n("/subscriber/devices",{method:"POST",body:{device_type:t,device_token:r}});return s},unregisterDevice:async({host:e="fabric.signalwire.com",accessToken:t,id:r})=>{const o=`/subscriber/devices/${r}`,n=qa({baseUrl:`https://${e}`,headers:{Authorization:`Bearer ${t}`}});return await n(o,{method:"DELETE"})}}),oc=Object.freeze({__proto__:null,getDevices:Ri,getCameraDevices:()=>Ri("camera"),getMicrophoneDevices:()=>Ri("microphone"),getSpeakerDevices:()=>Ri("speaker"),getDevicesWithPermissions:Ii,getCameraDevicesWithPermissions:()=>Ii("camera"),getMicrophoneDevicesWithPermissions:()=>Ii("microphone"),getSpeakerDevicesWithPermissions:()=>Ii("speaker"),checkPermissions:wi,checkCameraPermissions:ki,checkMicrophonePermissions:Ei,checkSpeakerPermissions:Ci,requestPermissions:async e=>{try{const t=await Ti(e);fi(t)}catch(e){throw e}},createDeviceWatcher:Ni,createCameraDeviceWatcher:()=>Ni({targets:["camera"]}),createMicrophoneDeviceWatcher:()=>Ni({targets:["microphone"]}),createSpeakerDeviceWatcher:()=>Ni({targets:["speaker"]}),supportsMediaDevices:ui,supportsGetUserMedia:()=>"function"==typeof li().getUserMedia,supportsGetDisplayMedia:()=>"function"==typeof li().getDisplayMedia,getUserMedia:Ti,getDisplayMedia:Pi,enumerateDevices:_i,getSupportedConstraints:hi,supportsMediaOutput:mi,setMediaElementSinkId:gi,stopStream:fi,stopTrack:vi,createMicrophoneAnalyzer:async e=>{const t=await(async e=>{if(Wi(e))return e;let t;return t="string"==typeof e?{audio:{deviceId:e}}:{audio:e},Ti(t)})(e);if(!t)throw new Error("Failed to get the audio stream");const r=new Dt,o=new(window.AudioContext||window.webkitAudioContext),n=(e=>{const t=e.createAnalyser();return t.fftSize=64,t.minDecibels=-90,t.maxDecibels=-10,t.smoothingTimeConstant=.85,t})(o);let s,i;try{o.createMediaStreamSource(t).connect(n)}catch(e){throw new Error("No audio track found")}t.getAudioTracks().forEach((e=>{e.addEventListener("ended",(()=>{r.emit("destroyed","disconnected")}))}));const a=()=>{try{const e=new Uint8Array(n.frequencyBinCount);n.getByteFrequencyData(e);const t=e.reduce(((e,t)=>e+t),0)/20;i!==t&&(i=t,r.emit("volumeChanged",Math.min(i,100))),s=requestAnimationFrame(a)}catch(e){r.emit("destroyed","error")}};s=requestAnimationFrame(a);const c=()=>{s&&cancelAnimationFrame(s),"closed"!==o.state&&o.close().catch((e=>{hr().error("Error closing the AudioContext",e)})),Wi(e)||t.getTracks().forEach((e=>e.stop())),r.emit("destroyed",null),r.removeAllListeners()};return new Proxy(r,{get:(e,t,r)=>"destroy"===t?c:Reflect.get(e,t,r)})}});e.Chat=Ba,e.Fabric=rc,e.PubSub=za,e.Video=tc,e.WebRTC=oc,Object.defineProperty(e,"__esModule",{value:!0})}));
20
+ ***************************************************************************** */const Ki=e=>gr(e.type),Qi=function*(e){hr().debug("vertoEventWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n}=t,{rtcPeerId:s}=o;if(!s)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const i=jo.createCatchableSaga((function*(e){const{id:t,method:o,params:n={}}=e.payload,{callID:s,nodeId:i}=n,a=r.getRTCPeerById(s);if(!a)return void hr().warn(`RTCPeer '${s}' not found for method: '${o}'`,n);const c=r.peer;switch(o){case"verto.media":case"verto.answer":a.uuid===(null==c?void 0:c.uuid)&&r.setState("verto.media"===o?"early":"active"),(null==n?void 0:n.sdp)&&a.onRemoteSdp(n.sdp),yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Gr(t,o),node_id:i}});break;case"verto.bye":yield Fe([r,r.onVertoBye],{rtcPeerId:s,byeCause:null==n?void 0:n.cause,byeCauseCode:null==n?void 0:n.causeCode,redirectDestination:null==n?void 0:n.redirectDestination}),yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Gr(t,o),node_id:i}});break;case"verto.ping":{const{nodeId:e}=n,t=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(o=Object.getOwnPropertySymbols(e);n<o.length;n++)t.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(r[o[n]]=e[o[n]])}return r}(n,["nodeId"]);yield Fe([r,r.execute],{method:r._getRPCMethod(),params:{message:Qr(t),node_id:e}});break}case"verto.mediaParams":{if(!s||!n.mediaParams){hr().warn("Invalid mediaParams event",n);break}const{audio:e,video:t}=n.mediaParams;a&&t&&a.applyMediaConstraints("video",t),a&&e&&a.applyMediaConstraints("audio",e);break}default:return hr().warn(`Unknown Verto method: ${o}`,n)}}),(e=>{hr().error("Verto Error",e)}));for(;;){const e=yield $e(n,(e=>{var t;return!!Ki(e)&&(null===(t=e.payload.params)||void 0===t?void 0:t.callID)===s}));yield ze(i,e)}hr().trace("vertoEventWorker ended")},Gi=function*(e){hr().debug("roomSubscribedWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n,pubSubChannel:s}=t,{rtcPeerId:i}=o;if(!i)throw new Error("Missing rtcPeerId for roomSubscribedWorker");const a=yield $e(n,(e=>"video.room.subscribed"===e.type&&e.payload.call_id===i));r._attachListeners(a.payload.room_session.id),r.applyEmitterTransforms(),r.setActiveRTCPeer(i),yield Ue(xo.upsert({id:a.payload.call_id,roomId:a.payload.room_session.room_id,roomSessionId:a.payload.room_session.id,memberId:a.payload.member_id,previewUrl:a.payload.room_session.preview_url})),yield Ue(s,{type:"video.room.joined",payload:a.payload}),hr().debug("roomSubscribedWorker ended",i)},Ji=function*(e){hr().debug("promoteDemoteWorker started");const{channels:t,instance:r,initialState:o}=e,{swEventChannel:n}=t,{rtcPeerId:s}=o;if(!s)throw new Error("Missing rtcPeerId for promoteDemoteWorker");const i=yield $e(n,(e=>("video.member.promoted"===e.type||"video.member.demoted"===e.type)&&e.payload.member_id===r.memberId));hr().debug("promoteDemoteWorker:",i.type,i.payload),yield Ue(Eo.updateAuthState(i.payload.authorization));const a=yield He(di.getAuthState);if(!a)throw new Error(`Invalid authState for '${i.type}'`);const{audio_allowed:c,video_allowed:d}=a;switch(i.type){case"video.member.promoted":r.updateMediaOptions({audio:"both"===c,video:"both"===d,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d});break;case"video.member.demoted":r.updateMediaOptions({audio:!1,video:!1,negotiateAudio:"none"!==c,negotiateVideo:"none"!==d})}r._triggerNewRTCPeer(),hr().debug("promoteDemoteWorker ended",s)},Xi=function*(e){hr().debug("sessionAuthWorker started");const{instance:t}=e;switch((yield $e([Jr.authSuccessAction.type,Jr.authErrorAction.type])).type){case Jr.authSuccessAction.type:yield Fe([t,t.resume]);break;case Jr.authErrorAction.type:yield Fe([t,t.setState],"hangup")}hr().debug("sessionAuthWorker ended")},Yi={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},Zi=Object.assign(Object.assign({},Yi),{noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1}),ea={width:{ideal:1280,min:320},height:{ideal:720,min:180},aspectRatio:{ideal:16/9}},ta={destinationNumber:"room",remoteCallerName:"Outbound Call",remoteCallerNumber:"",callerName:"",callerNumber:"",audio:Yi,video:ea,useStereo:!1,attach:!1,screenShare:!1,additionalDevice:!1,userVariables:{},requestTimeout:1e4,autoApplyMediaParams:!0,iceGatheringTimeout:2e3,maxIceGatheringTimeout:5e3,maxConnectionStateTimeout:3e3,watchMediaPackets:!0,watchMediaPacketsTimeout:2e3};class ra extends cn{constructor(e){super(e),this.leaveReason=void 0,this.gotEarly=!1,this.doReinvite=!1,this._eventsPrefix="video",this.state="new",this.prevState="new",this.rtcPeerMap=new Map,this.resuming=!1,this.onVertoBye=e=>{const{rtcPeerId:t,byeCause:r="NORMAL_CLEARING",byeCauseCode:o="16",redirectDestination:n}=e;this.cause=String(r),this.causeCode=String(o);const s=this.getRTCPeerById(t);return s?n&&s.localSdp?(this.logger.debug("Redirect Destination to:",n,"for RTCPeer:",s.uuid),void this.executeInvite(s.localSdp,s.uuid,n)):(s.onRemoteBye({code:this.causeCode,message:this.cause}),void(this.activeRTCPeerId===(null==s?void 0:s.uuid)&&this.setState("hangup"))):this.logger.warn("Invalid RTCPeer to hangup",e)},this.options=Object.assign(Object.assign({},ta),e),this._checkDefaultMediaConstraints(),this.setState("new"),this.logger.trace("New Call with Options:",this.options),this.applyEmitterTransforms({local:!0})}get id(){return this.__uuid}get active(){return"active"===this.state}get trying(){return"trying"===this.state}get memberId(){return this.component.memberId}get previewUrl(){return this.component.previewUrl}get roomId(){return this.component.roomId}get roomSessionId(){return this.component.roomSessionId}get callId(){var e;return(null===(e=this.peer)||void 0===e?void 0:e.uuid)||""}get localStream(){var e;return null===(e=this.peer)||void 0===e?void 0:e.localStream}set localStream(e){this.peer&&(this.peer.localStream=e)}get remoteStream(){var e;return null===(e=this.peer)||void 0===e?void 0:e.remoteStream}get iceServers(){var e,t;return null!==(t=null===(e=this.options)||void 0===e?void 0:e.iceServers)&&void 0!==t?t:this.select(di.getIceServers)}get component(){return this.select((e=>pn.getComponent(e,this.callId)))||{}}dialogParams(e){const{destinationNumber:t,attach:r,callerName:o,callerNumber:n,remoteCallerName:s,remoteCallerNumber:i,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:u=!0}=this.options;return{dialogParams:{id:e,destinationNumber:t,attach:r,callerName:o,callerNumber:n,remoteCallerName:s,remoteCallerNumber:i,userVariables:a,screenShare:c,additionalDevice:d,pingSupported:u,version:1e3}}}get cameraId(){return this.peer?this.peer.getDeviceId("video"):null}get cameraLabel(){return this.peer?this.peer.getDeviceLabel("video"):null}get microphoneId(){return this.peer?this.peer.getDeviceId("audio"):null}get microphoneLabel(){return this.peer?this.peer.getDeviceLabel("audio"):null}get withAudio(){var e;return Boolean(null===(e=this.peer)||void 0===e?void 0:e.hasAudioReceiver)}get withVideo(){var e;return Boolean(null===(e=this.peer)||void 0===e?void 0:e.hasVideoReceiver)}get localVideoTrack(){return this.peer?this.peer.localVideoTrack:null}get localAudioTrack(){return this.peer?this.peer.localAudioTrack:null}get peer(){return this.getRTCPeerById(this.activeRTCPeerId)}set peer(e){if(e){if(this.logger.debug("Set RTCPeer",e.uuid,e),this.rtcPeerMap.set(e.uuid,e),this.peer&&this.callId!==e.uuid){const e=this.peer.uuid;this.logger.debug(">>> Stop old RTCPeer",e),this.hangup(e).catch(console.error),this.peer.detachAndStop()}this.logger.debug(">>> Replace RTCPeer with",e.uuid),this.activeRTCPeerId=e.uuid}else this.logger.warn("Invalid RTCPeer",e)}getRTCPeerById(e){return this.rtcPeerMap.get(e)}appendRTCPeer(e){return this.rtcPeerMap.set(e.uuid,e)}setActiveRTCPeer(e){this.peer=this.getRTCPeerById(e)}setLocalStream(e){return new Promise((async(t,r)=>{try{if(!this.peer||!this.localStream)return r(new Error("Invalid RTCPeerConnection."));if(!pi(e))return r(new Error("Invalid stream provided."));const o=this.localStream.getAudioTracks(),n=e.getAudioTracks();n.length<=0?this.logger.info("No audio track found in the stream provided. Audio will be unaffected."):(o.forEach((e=>{var t;vi(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e)})),n.forEach((e=>{var t;null===(t=this.localStream)||void 0===t||t.addTrack(e)})));const s=this.localStream.getVideoTracks(),i=e.getVideoTracks();i.length<=0?this.logger.info("No video track found in the stream provided. Video will be unaffected."):(s.forEach((e=>{var t;vi(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e)})),i.forEach((e=>{var t;null===(t=this.localStream)||void 0===t||t.addTrack(e)}))),await this.updateStream(this.localStream),this.logger.debug("setLocalStream done"),t(this.localStream)}catch(e){this.logger.error("setLocalStream",e),r(e)}}))}vertoExecute(e){return this.execute({method:this._getRPCMethod(),params:e})}_getRPCMethod(){const e=this.select(di.getAuthState);return e&&Dr(e)?"webrtc.verto":"video.message"}async _triggerNewRTCPeer(){this.logger.debug("_triggerNewRTCPeer Start");try{this.logger.debug("Build a new RTCPeer");const e=new qi(this,"offer");this.appendRTCPeer(e),this.logger.debug("Run workers for the new RTCPeer",e.uuid),this.runRTCPeerWorkers(e.uuid),this.logger.debug("Trigger start for the new RTCPeer!"),await e.start()}catch(e){this.logger.error("Error building new RTCPeer to promote/demote",e)}}updateCamera(e){return this.updateConstraints({video:Object.assign({aspectRatio:16/9},e)})}updateMicrophone(e){return this.updateConstraints({audio:e})}manageSendersWithConstraints(e){return!1===e.audio&&(this.logger.info("Switching off the microphone"),this.stopOutboundAudio()),!1===e.video&&(this.logger.info("Switching off the camera"),this.stopOutboundVideo()),e.audio||e.video}updateConstraints(e,{attempt:t=0}={}){return t>1?Promise.reject(new Error("Failed to update constraints")):new Promise((async(r,o)=>{var n;try{if(!this.peer)return o(new Error("Invalid RTCPeerConnection."));if(!Object.keys(e).length)return o(new Error("Invalid audio/video constraints."));if(this.logger.debug("updateConstraints trying constraints",this.__uuid,e),!this.manageSendersWithConstraints(e))return void this.logger.debug("Either `video` and `audio` (or both) constraints were set to `false` so their corresponding senders (if any) were stopped");let s;try{s=await Ti(e)}catch(s){if(s instanceof DOMException&&"Concurrent mic process limit."===s.message){let o={};null===(n=this.localStream)||void 0===n||n.getTracks().forEach((t=>{var r;o[t.kind]=t.getConstraints(),void 0!==e[t.kind]&&(this.logger.debug("updateConstraints stop old tracks to retrieve new ones"),vi(t),null===(r=this.localStream)||void 0===r||r.removeTrack(t))}));try{return r(this.updateConstraints(e,{attempt:t+1}))}catch(e){return this.logger.error("Restoring previous constraints"),r(this.updateConstraints(o,{attempt:t+1}))}}return this.logger.error("updateConstraints",s),o(s)}await this.updateStream(s),this.logger.debug("updateConstraints done"),r()}catch(e){this.logger.error("updateConstraints",e),o(e)}}))}async updateStream(e){if(!this.peer)throw new Error("Invalid RTCPeerConnection.");this.logger.debug("updateStream got stream",e),this.localStream||(this.localStream=new MediaStream);const{instance:t}=this.peer,r=e.getTracks();this.logger.debug(`updateStream got ${r.length} tracks`);for(let e=0;e<r.length;e++){const o=r[e];this.logger.debug("updateStream apply track: ",o);const n=t.getTransceivers().find((({mid:e,sender:t,receiver:r})=>t.track&&t.track.kind===o.kind?(this.logger.debug("Found transceiver by sender"),!0):r.track&&r.track.kind===o.kind?(this.logger.debug("Found transceiver by receiver"),!0):null===e&&(this.logger.debug("Found disassociated transceiver"),!0)));n&&n.sender?(this.logger.debug("updateStream got transceiver",n.currentDirection,n.mid),await n.sender.replaceTrack(o),this.logger.debug("updateStream replaceTrack"),n.direction="sendrecv",this.logger.debug("updateStream set to sendrecv"),this.localStream.getTracks().forEach((e=>{var t;e.kind===o.kind&&e.id!==o.id&&(this.logger.debug("updateStream stop old track and apply new one - "),vi(e),null===(t=this.localStream)||void 0===t||t.removeTrack(e))})),this.localStream.addTrack(o)):(this.logger.debug("updateStream no transceiver found. addTrack and start dancing!"),this.peer.type="offer",this.doReinvite=!0,this.localStream.addTrack(o),t.addTrack(o,this.localStream)),this.logger.debug("updateStream simply update mic/cam"),"audio"===o.kind?this.options.micId=o.getSettings().deviceId:"video"===o.kind&&(this.options.camId=o.getSettings().deviceId)}this.logger.debug("updateStream done")}runRTCPeerWorkers(e){this.runWorker("vertoEventWorker",{worker:Qi,initialState:{rtcPeerId:e}}),!this.options.additionalDevice&&!this.options.screenShare&&(this.runWorker("roomSubscribedWorker",{worker:Gi,initialState:{rtcPeerId:e}}),this.runWorker("promoteDemoteWorker",{worker:Ji,initialState:{rtcPeerId:e}}))}invite(){return new Promise((async(e,t)=>{this.direction="outbound",this.peer=new qi(this,"offer");try{this.runRTCPeerWorkers(this.peer.uuid),await this.peer.start(),e(this)}catch(e){this.logger.error("Invite error",e),t(e)}}))}answer(){return new Promise((async(e,t)=>{this.direction="inbound",this.peer=new qi(this,"answer");try{await this.peer.start(),e(this)}catch(e){this.logger.error("Answer error",e),t(e)}}))}onLocalSDPReady(e){if(!e.instance.localDescription)throw this.logger.error("Missing localDescription",e),new Error("Invalid RTCPeerConnection localDescription");const{type:t,sdp:r}=e.instance.localDescription,o=this._mungeSDP(r);switch(this.logger.debug("LOCAL SDP \n",`Type: ${t}`,"\n\n",o),t){case"offer":return this._watchSessionAuth(),!this.resuming&&e.instance.remoteDescription?this.executeUpdateMedia(o,e.uuid):this.executeInvite(o,e.uuid);case"answer":this.logger.warn("Unhandled verto.answer");break;default:return this.logger.error(`Unknown SDP type: '${t}' on call ${this.id}`)}}_closeWSConnection(){this._watchSessionAuth(),this.store.dispatch(Jr.sessionForceCloseAction())}_watchSessionAuth(){this.sessionAuthTask&&this.sessionAuthTask.cancel(),this.sessionAuthTask=this.runWorker("sessionAuthWorker",{worker:Xi})}async resume(){var e;if(this.logger.debug(`[resume] Call ${this.id}`),null===(e=this.peer)||void 0===e?void 0:e.instance){const{connectionState:e}=this.peer.instance;this.logger.debug(`[resume] connectionState for ${this.id} is '${e}'`),"closed"!==e&&(this.resuming=!0,this.peer.restartIce())}}async executeInvite(e,t,r){const o=this.getRTCPeerById(t);if(!o||o.instance.remoteDescription&&!this.resuming)throw new Error(`RTCPeer '${t}' already has a remoteDescription. Invalid invite.`);"new"===this.state&&this.setState("requesting");try{const o=this.options.screenShare?{layout:this.options.layout,positions:this.options.positions}:{},n=zr(Object.assign(Object.assign(Object.assign({},this.dialogParams(t)),o),{sdp:e}));let s=[];s=this.options.screenShare?["video.room.screenshare"]:this.options.additionalDevice?["video.room.additionaldevice"]:this.getSubscriptions();const i=await this.vertoExecute({message:n,callID:t,node_id:r,subscribe:s});this.logger.debug("Invite response",i),this.resuming=!1}catch(e){throw this.setState("hangup"),e}}async executeUpdateMedia(e,t){try{const r=qr(Object.assign(Object.assign({},this.dialogParams(t)),{sdp:e,action:"updateMedia"})),o=await this.vertoExecute({message:r,callID:t});if(o.sdp||this.logger.error("UpdateMedia invalid SDP answer",o),this.logger.debug("UpdateMedia response",o),!this.peer)return this.logger.error("Invalid RTCPeer to updateMedia");await this.peer.onRemoteSdp(o.sdp)}catch(e){throw this.logger.error("UpdateMedia error",e),e}}async hangup(e){const t=null!=e?e:this.callId;if(!t)throw new Error("Invalid RTCPeer ID to hangup");try{const e=Hr(this.dialogParams(t));await this.vertoExecute({message:e,callID:t})}catch(e){this.logger.error("Hangup error:",e)}finally{if(t!==this.callId)return this.logger.warn("Prevent setState hangup",t,this.callId);this.setState("hangup")}}dtmf(e){const t=this.callId;if(!t)throw new Error("Invalid RTCPeer ID to send DTMF");const r=Kr(Object.assign(Object.assign({},this.dialogParams(t)),{dtmf:e}));this.vertoExecute({message:r,callID:t})}doReinviteWithRelayOnly(){this.peer&&this.active&&this.peer.restartIceWithRelayOnly()}stopOutboundAudio(){this.peer&&this.active&&this.peer.stopTrackSender("audio")}restoreOutboundAudio(){this.peer&&this.active&&this.peer.restoreTrackSender("audio")}stopOutboundVideo(){this.peer&&this.active&&this.peer.stopTrackSender("video")}restoreOutboundVideo(){this.peer&&this.active&&this.peer.restoreTrackSender("video")}setState(e){switch(this.prevState=this.state,this.state=e,this.logger.trace(`Call ${this.id} state change from ${this.prevState} to ${this.state}`),this.emit(this.state,this),e){case"purge":case"destroy":this._finalize();break;case"hangup":this.setState("destroy")}}updateMediaOptions(e){this.logger.debug("updateMediaOptions",Object.assign({},e)),this.options=Object.assign(Object.assign({},this.options),e),this._checkDefaultMediaConstraints()}_mungeSDP(e){return(e=>{const t=/^a=candidate.*.local\ .*/;return e.split("\r\n").filter((e=>!t.test(e))).join("\r\n")})(e)}_checkDefaultMediaConstraints(){!0===this.options.video&&(this.options.video=ea),!0===this.options.audio&&(this.options.audio=this.options.screenShare?Zi:Yi)}_finalize(){this.rtcPeerMap.forEach((e=>{e.stop()})),this.rtcPeerMap.clear()}}const oa=()=>{const e=document.createElement("video");return e.muted=!0,e.autoplay=!0,e.playsInline=!0,e.addEventListener("pause",(()=>{e.play().catch((t=>{hr().error("Video Element Paused",e,t)}))})),e},na=({element:e})=>new Promise((t=>{e.addEventListener("canplay",(function r(){e.removeEventListener("canplay",r),t()})),e.addEventListener("resize",(function r(){e.removeEventListener("resize",r),t()}))})),sa=({x:e,y:t,width:r,height:o})=>({top:`${t}%`,left:`${e}%`,width:`${r}%`,height:`${o}%`}),ia=({track:e,element:t})=>{t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()}))},aa=({video:e,rootElement:t,paddingWrapper:r})=>{const o=e.videoHeight/e.videoWidth*100,n=function(e,t=0,r){let o=null,n=null;const s=function(){o&&(clearTimeout(o),n=null,o=null)},i=function(){if(!t)return e.apply(this,arguments);const i=this,a=arguments,c=r&&!o;return s(),n=function(){e.apply(i,a)},o=setTimeout((function(){if(o=null,!c){const e=n;return n=null,null==e?void 0:e()}}),t),c&&n?n():void 0};return i.cancel=s,i.flush=function(){const e=n;s(),e&&e()},i}((({width:t,height:n})=>{if(r){const s=n/t*100;r.style.paddingBottom=`${s>o?o:s}%`,r.style.width=((t,r)=>{const o=e.videoWidth/e.videoHeight;return o>t/r?"100%":r*o+"px"})(t,n)}}),100),s=new ResizeObserver((e=>{e.forEach((e=>{if(e.contentBoxSize){const{inlineSize:t,blockSize:r}=Array.isArray(e.contentBoxSize)?e.contentBoxSize[0]:e.contentBoxSize;n({width:t,height:r})}else e.contentRect&&n({width:e.contentRect.width,height:e.contentRect.height})}))}));return{start:()=>s.observe(t),stop:()=>s.disconnect()}},ca=({track:e,element:t})=>(t.autoplay=!0,t.playsinline=!0,t.srcObject=new MediaStream([e]),e.addEventListener("ended",(()=>{t.srcObject=null,t.remove()})),t),da=Jr.createAction("swJs/audioSetSpeakerAction"),ua=({rootElement:e,applyLocalVideoOverlay:t})=>function*({instance:r,runSaga:o}){try{const n=new Map,s=oa(),i={status:"hidden",get id(){return`sw-sdk-${r.id}`},get domElement(){return n.get(this.id)},set domElement(e){e?(hr().debug("Set localOverlay",e),n.set(this.id,e)):(hr().debug("Remove localOverlay"),n.delete(this.id))},hide(){if(!this.domElement)return hr().warn("Missing localOverlay to hide");this.domElement.style.opacity="0"},show(){return this.domElement?"hidden"===this.status?hr().info("localOverlay not visible"):void(this.domElement.style.opacity="1"):hr().warn("Missing localOverlay to show")},setLocalOverlayMediaStream(e){if(!this.domElement)return hr().warn("Missing localOverlay to set the local overlay stream");const t=this.domElement.querySelector("video");t&&(t.srcObject=e)},setLocalOverlayMirror(e){if(!this.domElement||!this.domElement.firstChild)return hr().warn("Missing localOverlay to set the mirror");const t=this.domElement.firstChild;e??r.localOverlay.mirrored?(t.style.transform="scale(-1, 1)",t.style.webkitTransform="scale(-1, 1)"):(t.style.transform="scale(1, 1)",t.style.webkitTransform="scale(1, 1)")}},a=(({localOverlay:e,rootElement:t})=>async({layout:r,myMemberId:o,localStream:n})=>{hr().debug("Process layout.changed");try{const{layers:s=[]}=r,i=s.find((({member_id:e})=>e===o));let a=e.domElement;if(e.status=i?"visible":"hidden",!i)return hr().debug("Location not found"),void(a&&(hr().debug("Current layer not visible"),e.hide()));if(!a){hr().debug("Build myLayer"),a=(({location:e})=>{const{top:t,left:r,width:o,height:n}=sa(e),s=document.createElement("div");return s.style.position="absolute",s.style.overflow="hidden",s.style.top=t,s.style.left=r,s.style.width=o,s.style.height=n,s})({location:i}),a.id=e.id;const r=oa();r.srcObject=n,r.disablePictureInPicture=!0,r.style.width="100%",r.style.height="100%",r.style.pointerEvents="none",a.appendChild(r);const o=t.querySelector(".mcuLayers"),s=o?.querySelector(`#${a.id}`);return o&&!s?(hr().debug("Build myLayer append it"),o.appendChild(a),e.domElement=a,void e.setLocalOverlayMirror()):void hr().debug("Build myLayer >> wait next")}const{top:c,left:d,width:u,height:l}=sa(i);hr().debug("Update myLayer:",c,d,u,l);const h=n.getVideoTracks().filter((e=>e.enabled&&"live"===e.readyState)).length>0;h&&e.setLocalOverlayMediaStream(n),a.style.opacity=h?"1":"0",a.style.top=c,a.style.left=d,a.style.width=u,a.style.height=l}catch(e){hr().error("Layout Changed Error",e)}})({rootElement:e,localOverlay:i});let c=!1,d=null;const u=e=>{r.peer?.hasVideoSender&&r.localStream?a({layout:e.layout,localStream:r.localStream,myMemberId:r.memberId}):i.hide()};let l;r.on("_internal.mirror.video",(e=>{i.setLocalOverlayMirror(e)})),r.on("layout.changed",(e=>{hr().debug("Received layout.changed - videoTrack",c),c?u(e):d=e})),r.on("room.subscribed",(e=>{const t=e.room_session.members?.find((e=>e.id===r.memberId));if(t?.audio_muted)try{r.stopOutboundAudio()}catch(e){hr().error("Error handling audio_muted",e)}if(t?.video_muted)try{r.stopOutboundVideo()}catch(e){hr().error("Error handling video_muted",e)}r.localStream&&i.setLocalOverlayMediaStream(r.localStream)})),r.on("member.updated.video_muted",(e=>{try{const{member:t}=e;t.id===r.memberId&&"video_muted"in t&&(t.video_muted?i.hide():i.show())}catch(e){hr().error("Error handling video_muted",e)}})),r.on("track",(function(r){"video"===r.track.kind&&(l=o(pa,{applyLocalVideoOverlay:t,rootElement:e,track:r.track,element:s}),c=!0,d&&u(d))})),r.once("destroy",(()=>{(e=>{for(;e.firstChild;)e.removeChild(e.firstChild)})(e),n.clear(),l?.cancel()}))}catch(e){hr().error("videoElementSaga",e)}};function*la({element:e,room:t}){const r=Jr.getCustomSagaActionType(t.__uuid,da);for(;;){const o=yield $e([r]);try{if(o.type===r){const r=yield Fe(gi,e,o.payload);t.settleCustomSagaTrigger({dispatchId:o.dispatchId,payload:r,kind:"resolve"})}}catch(e){t.settleCustomSagaTrigger({dispatchId:o.dispatchId,payload:e,kind:"reject"}),hr().error(e)}}}function*ha({track:e,element:t,speakerId:r,room:o}){ca({track:e,element:t}),r&&gi(t,r).catch((()=>{})),yield ze(la,{element:t,room:o})}function*pa({rootElement:e,applyLocalVideoOverlay:t=!0,track:r,element:o}){try{if(ia({element:o,track:r}),o.style.width="100%",o.style.maxHeight="100%",!t)return void e.appendChild(o);if(e.querySelector(".mcuContent"))return void hr().debug("MCU Content already there");const n=document.createElement("div");n.style.position="absolute",n.style.top="0",n.style.left="0",n.style.right="0",n.style.bottom="0",n.appendChild(o);const s=document.createElement("div");s.classList.add("paddingWrapper"),s.style.paddingBottom="56.25%",s.style.position="relative",s.style.width="100%",s.appendChild(n);const i=document.createElement("div");i.classList.add("mcuLayers"),i.style.display="none",s.appendChild(i);const a=document.createElement("div");a.classList.add("mcuContent"),a.style.position="relative",a.style.width="100%",a.style.height="100%",a.style.margin="0 auto",a.style.display="flex",a.style.alignItems="center",a.style.justifyContent="center",a.appendChild(s),e.style.width="100%",e.style.height="100%",e.appendChild(a),hr().debug("MCU readyState 1 >>",o.readyState),o.readyState===HTMLMediaElement.HAVE_NOTHING&&(hr().debug("Wait for the MCU to be ready"),yield Fe(na,{element:o})),hr().debug("MCU is ready..");const c=aa({rootElement:e,video:o,paddingWrapper:s});c.start(),r.addEventListener("ended",(()=>{c&&c.stop()})),i.style.display="block"}catch(e){hr().error("Handle video track error",e)}}const ma={echoCancellation:!0,noiseSuppression:!1,autoGainControl:!1,googAutoGainControl:!1},ga=Er(class extends ra{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:vn.audioMuteMember,audioUnmute:vn.audioUnmuteMember,videoMute:vn.videoMuteMember,videoUnmute:vn.videoUnmuteMember,setMicrophoneVolume:vn.setInputVolumeMember,setInputVolume:vn.setInputVolumeMember,setInputSensitivity:vn.setInputSensitivityMember}),fa=Er(class extends ra{join(){return super.invite()}leave(){return super.hangup()}},{audioMute:vn.audioMuteMember,audioUnmute:vn.audioUnmuteMember,videoMute:vn.videoMuteMember,videoUnmute:vn.videoUnmuteMember,setInputVolume:vn.setInputVolumeMember,setMicrophoneVolume:vn.setInputVolumeMember,setInputSensitivity:vn.setInputSensitivityMember}),va=()=>{},ya="video.memberList.updated",ba=Sr({event:ya}),_a=(e=>{const t=e.split(".")[0];return e.split(".").reduce(((e,r)=>(e.push(r),r===t&&e.push(er),e)),[]).join(".")})(ba),Sa=["video.room.joined","video.member.joined","video.member.left","video.member.updated"],wa=e=>Sa.includes(e),ka=({action:e,memberList:t})=>{const r=(e=>"video.room.joined"===e.type?e.payload.room_session.members:[e.payload.member])(e);return r.forEach("video.member.left"===e.type?e=>{t.delete(e.id)}:e=>{t.set(e.id,e)}),Array.from(t.values())};function*Ea({pubSubChannel:e}){const t=new Map;function*r(r){const o={room_session_id:"video.room.joined"===r.type?r.payload.room_session.id:r.payload.room_session_id,members:ka({action:r,memberList:t})};yield Ue(e,{type:_a,payload:o})}for(;;){const t=yield $e(e,(({type:e})=>wa(e)));yield ze(r,t)}}const Ca=function*({channels:{pubSubChannel:e},instance:t}){const r=t.getSubscriptions();if(!(e=>e.some((e=>e.includes(ba))))(r))return;const{cleanup:o}=((e,t)=>{const r=(e=>Ar(Sa).filter((t=>!e.includes(t))))(t);r.forEach((t=>{e.once(t,va)}));const o=({members:t})=>{e.emit(ya,{members:t})};return e.on(_a,o),{cleanup:()=>{e.off(_a,o)}}})(t,r);yield ze(Ea,{pubSubChannel:e}),t.once("destroy",(()=>{o()}))},Ta=function*(e){if(!e.initialState)throw new Error("[memberPositionWorker] Missing initialState");yield ze(Hs.memberPositionWorker,e)},Pa=function*(e){hr().trace("childMemberJoinedWorker started");const{channels:t,instance:r,initialState:o,onDone:n,onFail:s}=e,{swEventChannel:i}=t,{parentId:a}=o;if(!a)throw new Error("Missing parentId for childMemberJoinedWorker");const c=yield $e(i,(e=>"video.member.joined"===e.type&&e.payload.member.parent_id===a)),{member:d}=c.payload;if(d?.parent_id){const e=yield He(pn.getComponentsById);Object.values(e).find((e=>"memberId"in e&&e.memberId===d.parent_id))?(r._attachListeners(d.id),r.applyEmitterTransforms(),yield Ue(xo.upsert({id:r.callId,roomId:c.payload.room_id,roomSessionId:c.payload.room_session_id,memberId:d.id})),n?.()):s?.({error:new Error("Unknown parent_id")})}hr().trace("childMemberJoinedWorker ended")},Ia=Er(class extends ra{_screenShareList=new Set;_deviceList=new Set;_mirrored;constructor(e){super(e),this._mirrored=e.mirrorLocalVideoOverlay}get screenShareList(){return Array.from(this._screenShareList)}get deviceList(){return Array.from(this._deviceList)}get interactivityMode(){return this.select((({session:e})=>{const{authState:t}=e;return t?.join_as??""}))}get permissions(){return this.select((({session:e})=>{const{authState:t}=e;return t?.room?.scopes??[]}))}getEmitterTransforms(){return new Map([[["video.room.joined"],{type:"roomSession",instanceFactory:()=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{recordings:{eventTransformType:"roomSessionRecording",processInstancePayload:e=>({recording:e})},playbacks:{eventTransformType:"roomSessionPlayback",processInstancePayload:e=>({playback:e})},streams:{eventTransformType:"roomSessionStream",processInstancePayload:e=>({stream:e})}}}],[[Lr("video.recording.list")],{type:"roomSessionRecordingList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{recordings:{eventTransformType:"roomSessionRecording",processInstancePayload:e=>({recording:e})}}}],[[Lr("video.playback.list")],{type:"roomSessionPlaybackList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{playbacks:{eventTransformType:"roomSessionPlayback",processInstancePayload:e=>({playback:e})}}}],[[Lr("video.recording.start"),"video.recording.started","video.recording.updated","video.recording.ended"],{type:"roomSessionRecording",instanceFactory:e=>vn.createRoomSessionRecordingObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.recording,room_session_id:this.roomSessionId})}],[[Lr("video.playback.start"),"video.playback.started","video.playback.updated","video.playback.ended"],{type:"roomSessionPlayback",instanceFactory:e=>vn.createRoomSessionPlaybackObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.playback,room_session_id:this.roomSessionId})}],[[Lr("video.stream.list")],{type:"roomSessionStreamList",instanceFactory:e=>({}),payloadTransform:e=>e,nestedFieldsToProcess:{streams:{eventTransformType:"roomSessionStream",processInstancePayload:e=>({stream:e})}}}],[[Lr("video.stream.start"),"video.stream.started","video.stream.ended"],{type:"roomSessionStream",instanceFactory:e=>vn.createRoomSessionStreamObject({store:this.store,emitter:this.emitter}),payloadTransform:e=>br({...e.stream,room_session_id:this.roomSessionId})}]])}getCompoundEvents(){return new Map([...Hs.MEMBER_POSITION_COMPOUND_EVENTS])}attachPreConnectWorkers(){this.runWorker("memberListUpdated",{worker:Ca})}attachOnSubscribedWorkers(e){this.runWorker("memberPositionWorker",{worker:Ta,initialState:e})}async createScreenShareObject(e={}){return this.startScreenShare(e)}async startScreenShare(e={}){return new Promise((async(t,r)=>{const{autoJoin:o=!0,audio:n=!1,video:s=!0,layout:i,positions:a}=e,c=await Pi({audio:!0===n?ma:n,video:s}),d={...this.options,screenShare:!0,recoverCall:!1,localStream:c,remoteStream:void 0,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId},layout:i,positions:a},u=rn({store:this.store,Component:ga})(d);c.getVideoTracks().forEach((e=>{e.addEventListener("ended",(()=>{u&&u.active&&u.leave()}))})),u.once("destroy",(()=>{u.emit("room.left"),this._screenShareList.delete(u)}));try{return u.runWorker("childMemberJoinedWorker",{worker:Pa,onDone:()=>t(u),onFail:r,initialState:{parentId:this.memberId}}),this._screenShareList.add(u),o?await u.join():t(u)}catch(e){this.logger.error("ScreenShare Error",e),r(e)}}))}addCamera(e={}){const{autoJoin:t=!0,...r}=e;return this.addDevice({autoJoin:t,video:r})}addMicrophone(e={}){const{autoJoin:t=!0,...r}=e;return this.addDevice({autoJoin:t,audio:r})}async addDevice(e={}){return new Promise((async(t,r)=>{const{autoJoin:o=!0,audio:n=!1,video:s=!1}=e;if(!n&&!s)throw new TypeError("At least one of `audio` or `video` must be requested.");const i={...this.options,localStream:void 0,remoteStream:void 0,audio:n,video:s,additionalDevice:!0,recoverCall:!1,userVariables:{...this.options?.userVariables||{},memberCallId:this.callId,memberId:this.memberId}},a=rn({store:this.store,Component:fa})(i);a.once("destroy",(()=>{a.emit("room.left"),this._deviceList.delete(a)}));try{return a.runWorker("childMemberJoinedWorker",{worker:Pa,onDone:()=>t(a),onFail:r,initialState:{parentId:this.memberId}}),this._deviceList.add(a),o?await a.join():t(a)}catch(e){this.logger.error("RoomDevice Error",e),r(e)}}))}join(){return super.invite()}leave(){return this.hangup()}updateSpeaker({deviceId:e}){return this.triggerCustomSaga(da(e))}async hangup(e){return this._screenShareList.forEach((e=>{e.leave()})),this._deviceList.forEach((e=>{e.leave()})),super.hangup(e)}_finalize(){this._screenShareList.clear(),this._deviceList.clear(),super._finalize()}getLayoutList(){return this.getLayouts()}getMemberList(){return this.getMembers()}get localOverlay(){return{mirrored:this._mirrored,setMirrored:e=>{this._mirrored=e,this.emit("_internal.mirror.video",this._mirrored)}}}},{audioMute:vn.audioMuteMember,audioUnmute:vn.audioUnmuteMember,videoMute:vn.videoMuteMember,videoUnmute:vn.videoUnmuteMember,deaf:vn.deafMember,undeaf:vn.undeafMember,setInputVolume:vn.setInputVolumeMember,setOutputVolume:vn.setOutputVolumeMember,setMicrophoneVolume:vn.setInputVolumeMember,setSpeakerVolume:vn.setOutputVolumeMember,setInputSensitivity:vn.setInputSensitivityMember,removeMember:vn.removeMember,removeAllMembers:vn.removeAllMembers,getMembers:vn.getMembers,getLayouts:vn.getLayouts,setLayout:vn.setLayout,setPositions:vn.setPositions,setMemberPosition:vn.setMemberPosition,hideVideoMuted:vn.hideVideoMuted,showVideoMuted:vn.showVideoMuted,getRecordings:vn.getRecordings,startRecording:vn.startRecording,getPlaybacks:vn.getPlaybacks,play:vn.play,setHideVideoMuted:vn.setHideVideoMuted,getMeta:vn.getMeta,setMeta:vn.setMeta,updateMeta:vn.updateMeta,deleteMeta:vn.deleteMeta,getMemberMeta:vn.getMemberMeta,setMemberMeta:vn.setMemberMeta,updateMemberMeta:vn.updateMemberMeta,deleteMemberMeta:vn.deleteMemberMeta,promote:vn.promote,demote:vn.demote,getStreams:vn.getStreams,startStream:vn.startStream}),Ma=function*(e){hr().trace("videoManagerWorker started");const{channels:t}=e,{swEventChannel:r,pubSubChannel:o}=t;for(;;){const e=yield $e(r,(e=>e.type.startsWith("video-manager.")));yield Ue(o,e)}};class Ra extends un{_eventsPrefix="video-manager";constructor(e){super(e),this.runWorker("videoManagerWorker",{worker:Ma})}getEmitterTransforms(){return new Map([[["video-manager.rooms.subscribed"],{type:"roomSession",instanceFactory:({rooms:e})=>({rooms:e.map((e=>br(e)))}),payloadTransform:({rooms:e})=>({rooms:e.map((e=>br(e)))})}],[["video-manager.room.started","video-manager.room.added","video-manager.room.updated","video-manager.room.ended","video-manager.room.deleted"],{type:"roomSession",instanceFactory:e=>br(e),payloadTransform:e=>br(e)}]])}}class xa extends dn{_videoManager;_chat;_pubSub;get rooms(){return{makeRoomObject:e=>{const{rootElement:t,applyLocalVideoOverlay:r=!0,stopCameraWhileMuted:o=!0,stopMicrophoneWhileMuted:n=!0,...s}=e,i=[];i.push((({speakerId:e})=>function*({instance:t,runSaga:r}){if("undefined"!=typeof Audio)try{const o=new Audio;let n;t.on("track",(function(s){"audio"===s.track.kind&&(n=r(ha,{track:s.track,element:o,speakerId:e,room:t}))})),t.once("destroy",(()=>{n?.cancel()}))}catch(e){hr().error("audioElementSaga",e)}else hr().warn("`Audio` is not supported on this environment.")})({speakerId:s.speakerId})),t&&i.push(ua({rootElement:t,applyLocalVideoOverlay:r}));const a=(c={...s,store:this.store,emitter:this.emitter,customSagas:i},rn({store:c.store,customSagas:c.customSagas,Component:Ia})(c));var c;return n&&a.on("member.updated.audio_muted",(({member:e})=>{try{e.id===a.memberId&&"audio_muted"in e&&(e.audio_muted?a.stopOutboundAudio():a.restoreOutboundAudio())}catch(e){this.logger.error("Error handling audio_muted",e)}})),o&&a.on("member.updated.video_muted",(({member:e})=>{try{e.id===a.memberId&&"video_muted"in e&&(e.video_muted?a.stopOutboundVideo():a.restoreOutboundVideo())}catch(e){this.logger.error("Error handling video_muted",e)}})),a}}}get chat(){return this._chat||(this._chat=ws.createBaseChatObject({store:this.store,emitter:this.options.emitter})),this._chat}get pubSub(){return this._pubSub||(this._pubSub=Os.createBasePubSubObject({store:this.store,emitter:this.options.emitter})),this._pubSub}get videoManager(){return this._videoManager||(this._videoManager=(e=>{const t=rn({store:e.store,Component:Ra})(e);return new Proxy(t,{get:(e,t,r)=>"_eventsNamespace"===t?"":"eventChannel"===t?"video-manager.rooms":Reflect.get(e,t,r)})})(this.options)),this._videoManager}reauthenticate(e){this.store.dispatch(Jr.reauthAction({token:e}))}}function Oa(e){this.message=e}(Oa.prototype=new Error).name="InvalidCharacterError";var Aa="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new Oa("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,o,n=0,s=0,i="";o=t.charAt(s++);~o&&(r=n%4?64*r+o:o,n++%4)?i+=String.fromCharCode(255&r>>(-2*n&6)):0)o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(o);return i};function ja(e){var t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(Aa(e).replace(/(.)/g,(function(e,t){var r=t.charCodeAt(0).toString(16).toUpperCase();return r.length<2&&(r="0"+r),"%"+r})))}(t)}catch(e){return Aa(t)}}function La(e){this.message=e}function Da(e,t){if("string"!=typeof e)throw new La("Invalid token specified");var r=!0===(t=t||{}).header?0:1;try{return JSON.parse(ja(e.split(".")[r]))}catch(e){throw new La("Invalid token specified: "+e.message)}}(La.prototype=new Error).name="InvalidTokenError";const Na="callId",Wa=()=>{if(window&&window.sessionStorage)return window.sessionStorage};class Va extends Io{options;WebSocketConstructor=WebSocket;CloseEventConstructor=CloseEvent;agent="@signalwire/js/browser/3.21.0";constructor(e){let t;try{t=Da(e.token,{header:!0})}catch(e){}super({...e,host:e.host||t?.ch}),this.options=e}get allowReattach(){return!1!==this.options?.reattach}async retrieveRelayProtocol(){if(!this.allowReattach)return"";const e=this.getProtocolSessionStorageKey();return e?(this.logger.trace("Hijacking: search protocol for",e),Wa()?.getItem(e)??""):""}async persistRelayProtocol(){if(!this.allowReattach)return;const e=this.getProtocolSessionStorageKey();e&&(this.logger.trace("Hijacking: persist protocol",e,this.relayProtocol),Wa()?.setItem(e,this.relayProtocol))}async retrieveSwAuthorizationState(){const e=this.getAuthStateSessionStorageKey();return e?Wa()?.getItem(e)??"":""}async persistSwAuthorizationState(e){if(!this.allowReattach)return;const t=this.getAuthStateSessionStorageKey();t&&(this.logger.trace("Hijacking: persist auth state",t,e),Wa()?.setItem(t,e))}_onSocketClose(e){if("unknown"===this.status){this.logger.trace("Hijacking: invalid values - cleaning up storage");const e=this.getProtocolSessionStorageKey();e&&Wa()?.removeItem(e);const t=this.getAuthStateSessionStorageKey();t&&Wa()?.removeItem(t),Wa()?.removeItem(Na)}super._onSocketClose(e)}getAuthStateSessionStorageKey(){return`as-${this.getSessionStorageKey()}`}getProtocolSessionStorageKey(){return`pt-${this.getSessionStorageKey()}`}getSessionStorageKey(){try{const e=Da(this.options.token);return`${e?.r}`}catch(e){return""}}}const $a=e=>{const t={...e,emitter:new Dt},r=on({userOptions:t,SessionConstructor:Va});return rn({store:r,Component:xa})(t)},Ua=["subscribe","publish","getMessages","getMembers","getMemberState","getAllowedChannels","setMemberState"];var Ba=Object.freeze({__proto__:null,ChatMember:ws.ChatMember,ChatMessage:ws.ChatMessage,Client:function(e){const t=$a(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.chat,{get:(e,o,n)=>o in r?r[o]:Ua.includes(o)?(e=>async(...r)=>(await t.connect(),t.chat[e](...r)))(o):Reflect.get(e,o,n)})}});const Fa=["getAllowedChannels","subscribe","publish"];var za=Object.freeze({__proto__:null,PubSubMessage:Os.PubSubMessage,Client:function(e){const t=$a(e),r={_session:t,disconnect:()=>t.disconnect()};return new Proxy(t.pubSub,{get:(e,o,n)=>o in r?r[o]:Fa.includes(o)?(e=>async(...r)=>(await t.connect(),t.pubSub[e](...r)))(o):Reflect.get(e,o,n)})}});async function Ha(e,t){const r=await fetch(e,t);if(!r.ok){if(401===r.status)throw new zo(r.status,"Unauthorized");let e;try{e=await r.json()}catch(e){}const t=e?.errors?JSON.stringify(e.errors):"Not Found";throw new Ho(r.status,t,e)}try{r.parsedBody=await r.json()}catch(e){}return r}const qa=({baseUrl:e,timeout:t=3e4,...r},o=Ha)=>async(n,s)=>{const i={...s?.body?{"Content-Type":"application/json"}:{},...r.headers,...s?.headers},a=Ka({...r,...s,headers:i});let c;if(t){const e=new AbortController;a.signal=e.signal,c=setTimeout((()=>{e.abort()}),t)}try{return{body:(await o(Qa({path:n,baseUrl:e,searchParams:s?.searchParams}),a)).parsedBody}}catch(e){throw e}finally{c&&clearTimeout(c)}},Ka=e=>Object.entries(e).reduce(((e,[t,r])=>{return"body"===t?{...e,body:(o=r,"string"==typeof o?o:JSON.stringify(o))}:null!=r?{...e,[t]:r}:e;var o}),{}),Qa=({path:e,baseUrl:t,searchParams:r})=>{const o=new URL(e,t);return r&&Object.entries(r).forEach((([e,t])=>{null!=t&&o.searchParams.append(e,t)})),o.toString()},Ga={aspectRatio:{ideal:16/9}},Ja=e=>new Promise((async(t,r)=>{const{audio:o=!0,video:n=!0,iceServers:s,rootElementId:i,applyLocalVideoOverlay:a=!0,autoJoin:c=!1,stopCameraWhileMuted:d=!0,stopMicrophoneWhileMuted:u=!0,speakerId:l,...h}=e,p=$a({...h});if(await p.connect(),!p)return;let m;if(i){const e=document.getElementById(i);e?m=e:(m=document.body,hr().warn(`We couldn't find an element with id: ${i}: using 'document.body' instead.`))}const g=p.rooms.makeRoomObject({audio:o,video:!0===n?Ga:n,negotiateAudio:!0,negotiateVideo:!0,iceServers:s,rootElement:m,applyLocalVideoOverlay:a,stopCameraWhileMuted:d,stopMicrophoneWhileMuted:u,speakerId:l});g.once("destroy",(()=>{g.emit("room.left"),p.disconnect()}));const f=()=>new Promise((async(e,t)=>{try{g.once("room.subscribed",(t=>{e(g)})),await g.join()}catch(e){hr().error("Join",e),p.disconnect(),t(e)}})),v=new Proxy(g,{get:(e,t,r)=>"join"===t?f:Reflect.get(e,t,r)});if(c)try{await v.join(),t(v)}catch(e){r(e)}else t(v)})),Xa=["audioMute","audioUnmute","deaf","getLayouts","getMembers","getRecordings","hideVideoMuted","leave","removerMember","restoreOutboundAudio","restoreOutboundVideo","setInputSensitivity","setInputVolume","setLayout","setPositions","setMemberPosition","setOutputVolume","showVideoMuted","startRecording","stopOutboundAudio","stopOutboundVideo","undeaf","videoMute","videoUnmute","setMicrophoneVolume","setSpeakerVolume","getMeta","setMeta","updateMeta","deleteMeta","getMemberMeta","setMemberMeta","updateMemberMeta","deleteMemberMeta","promote","demote"],Ya=["member.joined","layout.changed"],Za=()=>{},ec=function(e){const{audio:t=!0,video:r=!0,iceServers:o,rootElement:n,applyLocalVideoOverlay:s=!0,mirrorLocalVideoOverlay:i=!1,stopCameraWhileMuted:a=!0,stopMicrophoneWhileMuted:c=!0,speakerId:d,destinationNumber:u,localStream:l,...h}=e;["audio","video"].forEach((t=>{t in e&&hr().warn(`The '${t}' parameter on the RoomSession constructor is deprecated. Set it on the '.join()' function instead.`)}));const p=$a(h),m=p.rooms.makeRoomObject({negotiateAudio:!0,negotiateVideo:!0,iceServers:o,rootElement:n,applyLocalVideoOverlay:s,mirrorLocalVideoOverlay:i,stopCameraWhileMuted:a,stopMicrophoneWhileMuted:c,speakerId:d,destinationNumber:u,localStream:l}),g=!1!==e?.reattach,f={joined:({call_id:e})=>{g&&Wa()?.setItem(Na,e)},init:()=>{if(!g)return;m.on("room.subscribed",f.joined);const e=Wa()?.getItem(Na);e&&(m.options.prevCallId=e)},destroy:()=>{g&&(m.off("room.subscribed",f.joined),Wa()?.removeItem(Na))}};m.once("destroy",(()=>{m.emit("room.left",{reason:m.leaveReason}),f.destroy(),p.disconnect()})),p.once("session.disconnected",(()=>{m.destroy()}));const v={join:e=>new Promise((async(o,n)=>{try{m.attachPreConnectWorkers(),await p.connect();const s=e?.audio??t,i=e?.video??r,a=p._sessionAuthState,c=(e=>{const{authState:t,audio:r=!0,video:o=!0,sendAudio:n,sendVideo:s,receiveAudio:i,receiveVideo:a}=e;hr().debug("getJoinMediaParams options",{...e});const{audio_allowed:c,video_allowed:d,join_as:u}=t,l="member"===(u??"member"),h=l&&"both"===c,p=l&&"both"===d,m="none"!==c,g="none"!==d,f=Boolean(n??r),v=Boolean(s??o),y=Boolean(i??r),b=Boolean(a??o);return!h&&f&&hr().info("Not allowed to send audio on this room. Default values will be used."),!p&&v&&hr().info("Not allowed to send video on this room. Default values will be used."),!m&&y&&hr().info("Not allowed to receive video from the room. Default values will be used."),!g&&b&&hr().info("Not allowed to receive video from the room. Default values will be used."),{mustSendAudio:h&&f,mustSendVideo:p&&v,mustRecvAudio:m&&y,mustRecvVideo:g&&b}})({authState:a,sendAudio:Boolean(s),sendVideo:Boolean(i),...e});if(!Object.values(c).some(Boolean))return p.disconnect(),n(new Error(`Invalid arguments to join the room. The token used has join_as: '${a.join_as}'. \n${JSON.stringify(e,null,2)}\n`));hr().debug("Set mediaOptions",c),m.updateMediaOptions({audio:!!c.mustSendAudio&&(s||!0),video:!!c.mustSendVideo&&(i||!0),negotiateAudio:c.mustRecvAudio,negotiateVideo:c.mustRecvVideo}),m.once("room.subscribed",(e=>{m.attachOnSubscribedWorkers(e),o(m)})),f.init(),Ya.forEach((e=>m.once(e,Za))),await m.join()}catch(e){hr().error("RoomSession Join",e),p.disconnect(),n(e)}}))};return new Proxy(m,{get(e,t,r){if(t in v)return v[t];if(!e.active&&Xa.includes(t))throw new Error(`Tried to access the property/method "${t}" before the room was connected. Please call roomSession.join() first.`);return Reflect.get(e,t,r)}})};var tc=Object.freeze({__proto__:null,RoomSession:ec,createRoomObject:Ja,joinRoom:e=>Ja({...e,autoJoin:!0}),createClient:$a}),rc=Object.freeze({__proto__:null,getAddresses:async({spaceHost:e,accessToken:t})=>{const r="/addresses",o=qa({baseUrl:`https://${e}`,headers:{Authorization:`Bearer ${t}`}}),{body:n}=await o(r),s=async e=>{const{search:t}=new URL(e),{body:n}=await o(`${r}${t}`);return i(n)},i=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?s(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?s(t):void 0}});return i(n)},Client:class{options;httpClient;constructor(e){this.options=e,this.httpClient=qa({baseUrl:`https://${this.host}`,headers:{Authorization:`Bearer ${this.options.accessToken}`}})}get host(){return this.options.host??"fabric.signalwire.com"}async getAddresses(){const e="/addresses",{body:t}=await this.httpClient(e),r=async t=>{const{search:r}=new URL(t),{body:n}=await this.httpClient(`${e}${r}`);return o(n)},o=e=>({addresses:e.data,nextPage:async()=>{const{next:t}=e.links;return t?r(t):void 0},prevPage:async()=>{const{prev:t}=e.links;return t?r(t):void 0}});return o(t)}async createCall({uri:e,...t}){const{body:r}=await this.httpClient("/call",{method:"POST",body:{uri:e}});return console.log("Dial Response",r),(({strategy:e,params:t,userParams:r})=>{let o,n;if("room"!==e)throw new Error(`Unknown strategy: '${e}'`);o=new ec({token:t.token,...r}),n=e=>new Promise(((t,r)=>(o.on("room.joined",(e=>t(e))),o.join(e).catch((e=>r(e))))));const s={start:n};return new Proxy(o,{get:(e,t,r)=>t in s?s[t]:Reflect.get(e,t,r)})})({...r,userParams:{host:this.host.includes("swire")?"relay.swire.io":void 0,...t}})}async createSATCall(e){return console.log("createSATCall to",e),new ec({host:this.host.includes("swire")?"relay.swire.io":void 0,token:this.options.accessToken,...e})}},registerDevice:async({host:e="fabric.signalwire.com",deviceType:t,deviceToken:r,accessToken:o})=>{const n=qa({baseUrl:`https://${e}`,headers:{Authorization:`Bearer ${o}`}}),{body:s}=await n("/subscriber/devices",{method:"POST",body:{device_type:t,device_token:r}});return s},unregisterDevice:async({host:e="fabric.signalwire.com",accessToken:t,id:r})=>{const o=`/subscriber/devices/${r}`,n=qa({baseUrl:`https://${e}`,headers:{Authorization:`Bearer ${t}`}});return await n(o,{method:"DELETE"})}}),oc=Object.freeze({__proto__:null,getDevices:Ri,getCameraDevices:()=>Ri("camera"),getMicrophoneDevices:()=>Ri("microphone"),getSpeakerDevices:()=>Ri("speaker"),getDevicesWithPermissions:Ii,getCameraDevicesWithPermissions:()=>Ii("camera"),getMicrophoneDevicesWithPermissions:()=>Ii("microphone"),getSpeakerDevicesWithPermissions:()=>Ii("speaker"),checkPermissions:wi,checkCameraPermissions:ki,checkMicrophonePermissions:Ei,checkSpeakerPermissions:Ci,requestPermissions:async e=>{try{const t=await Ti(e);fi(t)}catch(e){throw e}},createDeviceWatcher:Ni,createCameraDeviceWatcher:()=>Ni({targets:["camera"]}),createMicrophoneDeviceWatcher:()=>Ni({targets:["microphone"]}),createSpeakerDeviceWatcher:()=>Ni({targets:["speaker"]}),supportsMediaDevices:ui,supportsGetUserMedia:()=>"function"==typeof li().getUserMedia,supportsGetDisplayMedia:()=>"function"==typeof li().getDisplayMedia,getUserMedia:Ti,getDisplayMedia:Pi,enumerateDevices:_i,getSupportedConstraints:hi,supportsMediaOutput:mi,setMediaElementSinkId:gi,stopStream:fi,stopTrack:vi,createMicrophoneAnalyzer:async e=>{const t=await(async e=>{if(Wi(e))return e;let t;return t="string"==typeof e?{audio:{deviceId:e}}:{audio:e},Ti(t)})(e);if(!t)throw new Error("Failed to get the audio stream");const r=new Dt,o=new(window.AudioContext||window.webkitAudioContext),n=(e=>{const t=e.createAnalyser();return t.fftSize=64,t.minDecibels=-90,t.maxDecibels=-10,t.smoothingTimeConstant=.85,t})(o);let s,i;try{o.createMediaStreamSource(t).connect(n)}catch(e){throw new Error("No audio track found")}t.getAudioTracks().forEach((e=>{e.addEventListener("ended",(()=>{r.emit("destroyed","disconnected")}))}));const a=()=>{try{const e=new Uint8Array(n.frequencyBinCount);n.getByteFrequencyData(e);const t=e.reduce(((e,t)=>e+t),0)/20;i!==t&&(i=t,r.emit("volumeChanged",Math.min(i,100))),s=requestAnimationFrame(a)}catch(e){r.emit("destroyed","error")}};s=requestAnimationFrame(a);const c=()=>{s&&cancelAnimationFrame(s),"closed"!==o.state&&o.close().catch((e=>{hr().error("Error closing the AudioContext",e)})),Wi(e)||t.getTracks().forEach((e=>e.stop())),r.emit("destroyed",null),r.removeAllListeners()};return new Proxy(r,{get:(e,t,r)=>"destroy"===t?c:Reflect.get(e,t,r)})}});e.Chat=Ba,e.Fabric=rc,e.PubSub=za,e.Video=tc,e.WebRTC=oc,Object.defineProperty(e,"__esModule",{value:!0})}));
21
21
  //# sourceMappingURL=index.umd.js.map