obi-sdk 0.3.3 → 0.3.5
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/modular/chunks/{obi-widget-93253f25.js → obi-widget-83402e4d.js} +2 -2
- package/dist/modular/chunks/obi-widget-83402e4d.js.map +1 -0
- package/dist/modular/index.js +1 -1
- package/dist/modular/ui.js +10 -10
- package/dist/obi-sdk.es.js +2 -2
- package/dist/obi-sdk.standalone.iife.js +1 -1
- package/dist/obi-sdk.standalone.iife.js.map +1 -1
- package/dist/obi-sdk.umd.js +1 -1
- package/package.json +1 -2
- package/dist/modular/chunks/obi-widget-93253f25.js.map +0 -1
package/dist/obi-sdk.umd.js
CHANGED
|
@@ -35,7 +35,7 @@ a=extmap-allow-mixed`)!==-1){const r=i.sdp.split(`
|
|
|
35
35
|
`).filter(s=>s.trim()!=="a=extmap-allow-mixed").join(`
|
|
36
36
|
`);t.RTCSessionDescription&&i instanceof t.RTCSessionDescription?arguments[0]=new t.RTCSessionDescription({type:i.type,sdp:r}):i.sdp=r}return A.apply(this,arguments)}}function Ei(t,e){if(!(t.RTCPeerConnection&&t.RTCPeerConnection.prototype))return;const A=t.RTCPeerConnection.prototype.addIceCandidate;!A||A.length===0||(t.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?(e.browser==="chrome"&&e.version<78||e.browser==="firefox"&&e.version<68||e.browser==="safari")&&arguments[0]&&arguments[0].candidate===""?Promise.resolve():A.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function Si(t,e){if(!(t.RTCPeerConnection&&t.RTCPeerConnection.prototype))return;const A=t.RTCPeerConnection.prototype.setLocalDescription;!A||A.length===0||(t.RTCPeerConnection.prototype.setLocalDescription=function(){let i=arguments[0]||{};if(typeof i!="object"||i.type&&i.sdp)return A.apply(this,arguments);if(i={type:i.type,sdp:i.sdp},!i.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":i.type="offer";break;default:i.type="answer";break}return i.sdp||i.type!=="offer"&&i.type!=="answer"?A.apply(this,[i]):(i.type==="offer"?this.createOffer:this.createAnswer).apply(this).then(s=>A.apply(this,[s]))})}var Gg=Object.freeze({__proto__:null,removeExtmapAllowMixed:Qs,shimAddIceCandidateNullOrEmpty:Ei,shimConnectionState:Us,shimMaxMessageSize:Ui,shimParameterlessSetLocalDescription:Si,shimRTCIceCandidate:bi,shimRTCIceCandidateRelayProtocol:bs,shimSendThrowTypeError:Qi});function jg(){let{window:t}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{shimChrome:!0,shimFirefox:!0,shimSafari:!0};const A=Vc,n=Mg(t),i={browserDetails:n,commonShim:Gg,extractVersion:yi,disableLog:Hg,disableWarnings:Og,sdp:Vg};switch(n.browser){case"chrome":if(!tl||!Cs||!e.shimChrome)return A("Chrome shim is not included in this adapter release."),i;if(n.version===null)return A("Chrome shim can not determine version, not shimming."),i;A("adapter.js shimming chrome."),i.browserShim=tl,Ei(t,n),Si(t),Xc(t,n),$c(t),Cs(t,n),Yc(t),el(t,n),qc(t),zc(t),Al(t,n),bi(t),bs(t),Us(t),Ui(t,n),Qi(t),Qs(t,n);break;case"firefox":if(!hl||!ws||!e.shimFirefox)return A("Firefox shim is not included in this adapter release."),i;A("adapter.js shimming firefox."),i.browserShim=hl,Ei(t,n),Si(t),nl(t,n),ws(t,n),il(t),ol(t),rl(t),sl(t),al(t),cl(t),ll(t),ul(t),dl(t),bi(t),Us(t),Ui(t,n),Qi(t);break;case"safari":if(!bl||!e.shimSafari)return A("Safari shim is not included in this adapter release."),i;A("adapter.js shimming safari."),i.browserShim=bl,Ei(t,n),Si(t),vl(t),wl(t),pl(t),fl(t),gl(t),Cl(t),ml(t),yl(t),bi(t),bs(t),Ui(t,n),Qi(t),Qs(t,n);break;default:A("Unsupported browser!");break}return i}jg({window:typeof window>"u"?void 0:window});const Wg=10,Ti="lk_e2ee",Jg={sharedKey:!1,ratchetSalt:"LKFrameEncryptionKey",ratchetWindowSize:8,failureTolerance:Wg,keyringSize:16};var KA;(function(t){t.SetKey="setKey",t.RatchetRequest="ratchetRequest",t.KeyRatcheted="keyRatcheted"})(KA||(KA={}));var El;(function(t){t.KeyRatcheted="keyRatcheted"})(El||(El={}));var VA;(function(t){t.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",t.EncryptionError="encryptionError"})(VA||(VA={}));var Sl;(function(t){t.Error="cryptorError"})(Sl||(Sl={}));function Xg(){return $g()||Es()}function Es(){return typeof window.RTCRtpScriptTransform<"u"}function $g(){return typeof window.RTCRtpSender<"u"&&typeof window.RTCRtpSender.prototype.createEncodedStreams<"u"}class CU extends mA.EventEmitter{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(),this.onKeyRatcheted=(A,n,i)=>{K.debug("key ratcheted event received",{ratchetResult:A,participantId:n,keyIndex:i})},this.keyInfoMap=new Map,this.options=Object.assign(Object.assign({},Jg),e),this.on(KA.KeyRatcheted,this.onKeyRatcheted)}onSetEncryptionKey(e,A,n){const i={key:e,participantIdentity:A,keyIndex:n};if(!this.options.sharedKey&&!A)throw new Error("participant identity needs to be passed for encryption key if sharedKey option is false");this.keyInfoMap.set("".concat(A??"shared","-").concat(n??0),i),this.emit(KA.SetKey,i)}getKeys(){return Array.from(this.keyInfoMap.values())}getOptions(){return this.options}ratchetKey(e,A){this.emit(KA.RatchetRequest,e,A)}}class GA extends Error{constructor(e,A){super(A||"an error has occured"),this.name="LiveKitError",this.code=e}}var G;(function(t){t[t.NotAllowed=0]="NotAllowed",t[t.ServerUnreachable=1]="ServerUnreachable",t[t.InternalError=2]="InternalError",t[t.Cancelled=3]="Cancelled",t[t.LeaveRequest=4]="LeaveRequest"})(G||(G={}));class z extends GA{constructor(e,A,n,i){super(1,e),this.name="ConnectionError",this.status=n,this.reason=A,this.context=i,this.reasonName=G[A]}}class Ss extends GA{constructor(e){super(21,e??"device is unsupported"),this.name="DeviceUnsupportedError"}}class FA extends GA{constructor(e){super(20,e??"track is invalid"),this.name="TrackInvalidError"}}class Yg extends GA{constructor(e){super(10,e??"unsupported server"),this.name="UnsupportedServer"}}class Be extends GA{constructor(e){super(12,e??"unexpected connection state"),this.name="UnexpectedConnectionState"}}class Ts extends GA{constructor(e){super(13,e??"unable to negotiate"),this.name="NegotiationError"}}class Fs extends GA{constructor(e,A){super(15,e),this.name="PublishTrackError",this.status=A}}class Tl extends GA{constructor(e,A){super(15,e),this.reason=A,this.reasonName=typeof A=="string"?A:ps[A]}}var Fi;(function(t){t.PermissionDenied="PermissionDenied",t.NotFound="NotFound",t.DeviceInUse="DeviceInUse",t.Other="Other"})(Fi||(Fi={})),function(t){function e(A){if(A&&"name"in A)return A.name==="NotFoundError"||A.name==="DevicesNotFoundError"?t.NotFound:A.name==="NotAllowedError"||A.name==="PermissionDeniedError"?t.PermissionDenied:A.name==="NotReadableError"||A.name==="TrackStartError"?t.DeviceInUse:t.Other}t.getFailure=e}(Fi||(Fi={}));var Fl;(function(t){t[t.InvalidKey=0]="InvalidKey",t[t.MissingKey=1]="MissingKey",t[t.InternalError=2]="InternalError"})(Fl||(Fl={}));var T;(function(t){t.Connected="connected",t.Reconnecting="reconnecting",t.SignalReconnecting="signalReconnecting",t.Reconnected="reconnected",t.Disconnected="disconnected",t.ConnectionStateChanged="connectionStateChanged",t.Moved="moved",t.MediaDevicesChanged="mediaDevicesChanged",t.ParticipantConnected="participantConnected",t.ParticipantDisconnected="participantDisconnected",t.TrackPublished="trackPublished",t.TrackSubscribed="trackSubscribed",t.TrackSubscriptionFailed="trackSubscriptionFailed",t.TrackUnpublished="trackUnpublished",t.TrackUnsubscribed="trackUnsubscribed",t.TrackMuted="trackMuted",t.TrackUnmuted="trackUnmuted",t.LocalTrackPublished="localTrackPublished",t.LocalTrackUnpublished="localTrackUnpublished",t.LocalAudioSilenceDetected="localAudioSilenceDetected",t.ActiveSpeakersChanged="activeSpeakersChanged",t.ParticipantMetadataChanged="participantMetadataChanged",t.ParticipantNameChanged="participantNameChanged",t.ParticipantAttributesChanged="participantAttributesChanged",t.ParticipantActive="participantActive",t.RoomMetadataChanged="roomMetadataChanged",t.DataReceived="dataReceived",t.SipDTMFReceived="sipDTMFReceived",t.TranscriptionReceived="transcriptionReceived",t.ConnectionQualityChanged="connectionQualityChanged",t.TrackStreamStateChanged="trackStreamStateChanged",t.TrackSubscriptionPermissionChanged="trackSubscriptionPermissionChanged",t.TrackSubscriptionStatusChanged="trackSubscriptionStatusChanged",t.AudioPlaybackStatusChanged="audioPlaybackChanged",t.VideoPlaybackStatusChanged="videoPlaybackChanged",t.MediaDevicesError="mediaDevicesError",t.ParticipantPermissionsChanged="participantPermissionsChanged",t.SignalConnected="signalConnected",t.RecordingStatusChanged="recordingStatusChanged",t.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",t.EncryptionError="encryptionError",t.DCBufferStatusChanged="dcBufferStatusChanged",t.ActiveDeviceChanged="activeDeviceChanged",t.ChatMessage="chatMessage",t.LocalTrackSubscribed="localTrackSubscribed",t.MetricsReceived="metricsReceived"})(T||(T={}));var x;(function(t){t.TrackPublished="trackPublished",t.TrackSubscribed="trackSubscribed",t.TrackSubscriptionFailed="trackSubscriptionFailed",t.TrackUnpublished="trackUnpublished",t.TrackUnsubscribed="trackUnsubscribed",t.TrackMuted="trackMuted",t.TrackUnmuted="trackUnmuted",t.LocalTrackPublished="localTrackPublished",t.LocalTrackUnpublished="localTrackUnpublished",t.ParticipantMetadataChanged="participantMetadataChanged",t.ParticipantNameChanged="participantNameChanged",t.DataReceived="dataReceived",t.SipDTMFReceived="sipDTMFReceived",t.TranscriptionReceived="transcriptionReceived",t.IsSpeakingChanged="isSpeakingChanged",t.ConnectionQualityChanged="connectionQualityChanged",t.TrackStreamStateChanged="trackStreamStateChanged",t.TrackSubscriptionPermissionChanged="trackSubscriptionPermissionChanged",t.TrackSubscriptionStatusChanged="trackSubscriptionStatusChanged",t.MediaDevicesError="mediaDevicesError",t.AudioStreamAcquired="audioStreamAcquired",t.ParticipantPermissionsChanged="participantPermissionsChanged",t.PCTrackAdded="pcTrackAdded",t.AttributesChanged="attributesChanged",t.LocalTrackSubscribed="localTrackSubscribed",t.ChatMessage="chatMessage",t.Active="active"})(x||(x={}));var I;(function(t){t.TransportsCreated="transportsCreated",t.Connected="connected",t.Disconnected="disconnected",t.Resuming="resuming",t.Resumed="resumed",t.Restarting="restarting",t.Restarted="restarted",t.SignalResumed="signalResumed",t.SignalRestarted="signalRestarted",t.Closing="closing",t.MediaTrackAdded="mediaTrackAdded",t.ActiveSpeakersUpdate="activeSpeakersUpdate",t.DataPacketReceived="dataPacketReceived",t.RTPVideoMapUpdate="rtpVideoMapUpdate",t.DCBufferStatusChanged="dcBufferStatusChanged",t.ParticipantUpdate="participantUpdate",t.RoomUpdate="roomUpdate",t.SpeakersChanged="speakersChanged",t.StreamStateChanged="streamStateChanged",t.ConnectionQualityUpdate="connectionQualityUpdate",t.SubscriptionError="subscriptionError",t.SubscriptionPermissionUpdate="subscriptionPermissionUpdate",t.RemoteMute="remoteMute",t.SubscribedQualityUpdate="subscribedQualityUpdate",t.LocalTrackUnpublished="localTrackUnpublished",t.LocalTrackSubscribed="localTrackSubscribed",t.Offline="offline",t.SignalRequestResponse="signalRequestResponse",t.SignalConnected="signalConnected",t.RoomMoved="roomMoved"})(I||(I={}));var k;(function(t){t.Message="message",t.Muted="muted",t.Unmuted="unmuted",t.Restarted="restarted",t.Ended="ended",t.Subscribed="subscribed",t.Unsubscribed="unsubscribed",t.UpdateSettings="updateSettings",t.UpdateSubscription="updateSubscription",t.AudioPlaybackStarted="audioPlaybackStarted",t.AudioPlaybackFailed="audioPlaybackFailed",t.AudioSilenceDetected="audioSilenceDetected",t.VisibilityChanged="visibilityChanged",t.VideoDimensionsChanged="videoDimensionsChanged",t.VideoPlaybackStarted="videoPlaybackStarted",t.VideoPlaybackFailed="videoPlaybackFailed",t.ElementAttached="elementAttached",t.ElementDetached="elementDetached",t.UpstreamPaused="upstreamPaused",t.UpstreamResumed="upstreamResumed",t.SubscriptionPermissionChanged="subscriptionPermissionChanged",t.SubscriptionStatusChanged="subscriptionStatusChanged",t.SubscriptionFailed="subscriptionFailed",t.TrackProcessorUpdate="trackProcessorUpdate",t.AudioTrackFeatureUpdate="audioTrackFeatureUpdate",t.TranscriptionReceived="transcriptionReceived",t.TimeSyncUpdate="timeSyncUpdate"})(k||(k={}));function qg(t){return typeof t>"u"?t:typeof structuredClone=="function"?structuredClone(t):JSON.parse(JSON.stringify(t))}const zg=/version\/(\d+(\.?_?\d+)+)/i;let ks;function oA(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(typeof t>"u"&&typeof navigator>"u")return;const A=(t??navigator.userAgent).toLowerCase();if(ks===void 0||e){const n=Zg.find(i=>{let{test:r}=i;return r.test(A)});ks=n==null?void 0:n.describe(A)}return ks}const Zg=[{test:/firefox|iceweasel|fxios/i,describe(t){return{name:"Firefox",version:ki(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,t),os:t.toLowerCase().includes("fxios")?"iOS":void 0,osVersion:Is(t)}}},{test:/chrom|crios|crmo/i,describe(t){return{name:"Chrome",version:ki(/(?:chrome|chromium|crios|crmo)\/(\d+(\.?_?\d+)+)/i,t),os:t.toLowerCase().includes("crios")?"iOS":void 0,osVersion:Is(t)}}},{test:/safari|applewebkit/i,describe(t){return{name:"Safari",version:ki(zg,t),os:t.includes("mobile/")?"iOS":"macOS",osVersion:Is(t)}}}];function ki(t,e){let A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1;const n=e.match(t);return n&&n.length>=A&&n[A]||""}function Is(t){return t.includes("mac os")?ki(/\(.+?(\d+_\d+(:?_\d+)?)/,t,1).replace(/_/g,"."):void 0}var ep="2.13.0";const Ap=ep,tp=16;class ye{}ye.setTimeout=function(){return setTimeout(...arguments)},ye.setInterval=function(){return setInterval(...arguments)},ye.clearTimeout=function(){return clearTimeout(...arguments)},ye.clearInterval=function(){return clearInterval(...arguments)};const np=5e3,wn=[];var $e;(function(t){t[t.LOW=0]="LOW",t[t.MEDIUM=1]="MEDIUM",t[t.HIGH=2]="HIGH"})($e||($e={}));class E extends mA.EventEmitter{constructor(e,A){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};var i;super(),this.attachedElements=[],this.isMuted=!1,this.streamState=E.StreamState.Active,this.isInBackground=!1,this._currentBitrate=0,this.log=K,this.appVisibilityChangedListener=()=>{this.backgroundTimeout&&clearTimeout(this.backgroundTimeout),document.visibilityState==="hidden"?this.backgroundTimeout=setTimeout(()=>this.handleAppVisibilityChanged(),np):this.handleAppVisibilityChanged()},this.log=TA((i=n.loggerName)!==null&&i!==void 0?i:sA.Track),this.loggerContextCb=n.loggerContextCb,this.setMaxListeners(100),this.kind=A,this._mediaStreamTrack=e,this._mediaStreamID=e.id,this.source=E.Source.Unknown}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),X(this))}get currentBitrate(){return this._currentBitrate}get mediaStreamTrack(){return this._mediaStreamTrack}get mediaStreamID(){return this._mediaStreamID}attach(e){let A="audio";this.kind===E.Kind.Video&&(A="video"),this.attachedElements.length===0&&this.kind===E.Kind.Video&&this.addAppVisibilityListener(),e||(A==="audio"&&(wn.forEach(r=>{r.parentElement===null&&!e&&(e=r)}),e&&wn.splice(wn.indexOf(e),1)),e||(e=document.createElement(A))),this.attachedElements.includes(e)||this.attachedElements.push(e),Gt(this.mediaStreamTrack,e);const n=e.srcObject.getTracks(),i=n.some(r=>r.kind==="audio");return e.play().then(()=>{this.emit(i?k.AudioPlaybackStarted:k.VideoPlaybackStarted)}).catch(r=>{r.name==="NotAllowedError"?this.emit(i?k.AudioPlaybackFailed:k.VideoPlaybackFailed,r):r.name==="AbortError"?K.debug("".concat(i?"audio":"video"," playback aborted, likely due to new play request")):K.warn("could not playback ".concat(i?"audio":"video"),r),i&&e&&n.some(s=>s.kind==="video")&&r.name==="NotAllowedError"&&(e.muted=!0,e.play().catch(()=>{}))}),this.emit(k.ElementAttached,e),e}detach(e){try{if(e){jt(this.mediaStreamTrack,e);const n=this.attachedElements.indexOf(e);return n>=0&&(this.attachedElements.splice(n,1),this.recycleElement(e),this.emit(k.ElementDetached,e)),e}const A=[];return this.attachedElements.forEach(n=>{jt(this.mediaStreamTrack,n),A.push(n),this.recycleElement(n),this.emit(k.ElementDetached,n)}),this.attachedElements=[],A}finally{this.attachedElements.length===0&&this.removeAppVisibilityListener()}}stop(){this.stopMonitor(),this._mediaStreamTrack.stop()}enable(){this._mediaStreamTrack.enabled=!0}disable(){this._mediaStreamTrack.enabled=!1}stopMonitor(){this.monitorInterval&&clearInterval(this.monitorInterval),this.timeSyncHandle&&cancelAnimationFrame(this.timeSyncHandle)}updateLoggerOptions(e){e.loggerName&&(this.log=TA(e.loggerName)),e.loggerContextCb&&(this.loggerContextCb=e.loggerContextCb)}recycleElement(e){if(e instanceof HTMLAudioElement){let A=!0;e.pause(),wn.forEach(n=>{n.parentElement||(A=!1)}),A&&wn.push(e)}}handleAppVisibilityChanged(){return m(this,void 0,void 0,function*(){this.isInBackground=document.visibilityState==="hidden",!this.isInBackground&&this.kind===E.Kind.Video&&setTimeout(()=>this.attachedElements.forEach(e=>e.play().catch(()=>{})),0)})}addAppVisibilityListener(){Me()?(this.isInBackground=document.visibilityState==="hidden",document.addEventListener("visibilitychange",this.appVisibilityChangedListener)):this.isInBackground=!1}removeAppVisibilityListener(){Me()&&document.removeEventListener("visibilitychange",this.appVisibilityChangedListener)}}function Gt(t,e){let A;e.srcObject instanceof MediaStream?A=e.srcObject:A=new MediaStream;let n;t.kind==="audio"?n=A.getAudioTracks():n=A.getVideoTracks(),n.includes(t)||(n.forEach(i=>{A.removeTrack(i)}),A.addTrack(t)),(!jA()||!(e instanceof HTMLVideoElement))&&(e.autoplay=!0),e.muted=A.getAudioTracks().length===0,e instanceof HTMLVideoElement&&(e.playsInline=!0),e.srcObject!==A&&(e.srcObject=A,(jA()||Wt())&&e instanceof HTMLVideoElement&&setTimeout(()=>{e.srcObject=A,e.play().catch(()=>{})},0))}function jt(t,e){if(e.srcObject instanceof MediaStream){const A=e.srcObject;A.removeTrack(t),A.getTracks().length>0?e.srcObject=A:e.srcObject=null}}(function(t){let e;(function(c){c.Audio="audio",c.Video="video",c.Unknown="unknown"})(e=t.Kind||(t.Kind={}));let A;(function(c){c.Camera="camera",c.Microphone="microphone",c.ScreenShare="screen_share",c.ScreenShareAudio="screen_share_audio",c.Unknown="unknown"})(A=t.Source||(t.Source={}));let n;(function(c){c.Active="active",c.Paused="paused",c.Unknown="unknown"})(n=t.StreamState||(t.StreamState={}));function i(c){switch(c){case e.Audio:return tA.AUDIO;case e.Video:return tA.VIDEO;default:return tA.DATA}}t.kindToProto=i;function r(c){switch(c){case tA.AUDIO:return e.Audio;case tA.VIDEO:return e.Video;default:return e.Unknown}}t.kindFromProto=r;function s(c){switch(c){case A.Camera:return ge.CAMERA;case A.Microphone:return ge.MICROPHONE;case A.ScreenShare:return ge.SCREEN_SHARE;case A.ScreenShareAudio:return ge.SCREEN_SHARE_AUDIO;default:return ge.UNKNOWN}}t.sourceToProto=s;function o(c){switch(c){case ge.CAMERA:return A.Camera;case ge.MICROPHONE:return A.Microphone;case ge.SCREEN_SHARE:return A.ScreenShare;case ge.SCREEN_SHARE_AUDIO:return A.ScreenShareAudio;default:return A.Unknown}}t.sourceFromProto=o;function a(c){switch(c){case cs.ACTIVE:return n.Active;case cs.PAUSED:return n.Paused;default:return n.Unknown}}t.streamStateFromProto=a})(E||(E={}));class q{constructor(e,A,n,i,r){if(typeof e=="object")this.width=e.width,this.height=e.height,this.aspectRatio=e.aspectRatio,this.encoding={maxBitrate:e.maxBitrate,maxFramerate:e.maxFramerate,priority:e.priority};else if(A!==void 0&&n!==void 0)this.width=e,this.height=A,this.aspectRatio=e/A,this.encoding={maxBitrate:n,maxFramerate:i,priority:r};else throw new TypeError("Unsupported options: provide at least width, height and maxBitrate")}get resolution(){return{width:this.width,height:this.height,frameRate:this.encoding.maxFramerate,aspectRatio:this.aspectRatio}}}const ip=["vp8","h264"],rp=["vp8","h264","vp9","av1"];function sp(t){return!!ip.find(e=>e===t)}var kl;(function(t){t[t.PREFER_REGRESSION=0]="PREFER_REGRESSION",t[t.SIMULCAST=1]="SIMULCAST",t[t.REGRESSION=2]="REGRESSION"})(kl||(kl={}));var Rs;(function(t){t.telephone={maxBitrate:12e3},t.speech={maxBitrate:24e3},t.music={maxBitrate:48e3},t.musicStereo={maxBitrate:64e3},t.musicHighQuality={maxBitrate:96e3},t.musicHighQualityStereo={maxBitrate:128e3}})(Rs||(Rs={}));const yn={h90:new q(160,90,9e4,20),h180:new q(320,180,16e4,20),h216:new q(384,216,18e4,20),h360:new q(640,360,45e4,20),h540:new q(960,540,8e5,25),h720:new q(1280,720,17e5,30),h1080:new q(1920,1080,3e6,30),h1440:new q(2560,1440,5e6,30),h2160:new q(3840,2160,8e6,30)},xs={h120:new q(160,120,7e4,20),h180:new q(240,180,125e3,20),h240:new q(320,240,14e4,20),h360:new q(480,360,33e4,20),h480:new q(640,480,5e5,20),h540:new q(720,540,6e5,25),h720:new q(960,720,13e5,30),h1080:new q(1440,1080,23e5,30),h1440:new q(1920,1440,38e5,30)},Ps={h360fps3:new q(640,360,2e5,3,"medium"),h360fps15:new q(640,360,4e5,15,"medium"),h720fps5:new q(1280,720,8e5,5,"medium"),h720fps15:new q(1280,720,15e5,15,"medium"),h720fps30:new q(1280,720,2e6,30,"medium"),h1080fps15:new q(1920,1080,25e5,15,"medium"),h1080fps30:new q(1920,1080,5e6,30,"medium"),original:new q(0,0,7e6,30,"medium")},op="|",Il="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension";function ap(t){const e=t.split(op);return e.length>1?[e[0],t.substr(e[0].length+1)]:[t,""]}function Oe(t){return m(this,void 0,void 0,function*(){return new Promise(e=>ye.setTimeout(e,t))})}function Ls(){return"addTransceiver"in RTCPeerConnection.prototype}function Ds(){return"addTrack"in RTCPeerConnection.prototype}function cp(){if(!("getCapabilities"in RTCRtpSender)||jA())return!1;const t=RTCRtpSender.getCapabilities("video");let e=!1;if(t){for(const A of t.codecs)if(A.mimeType==="video/AV1"){e=!0;break}}return e}function lp(){if(!("getCapabilities"in RTCRtpSender)||Wt())return!1;if(jA()){const A=oA();if(A!=null&&A.version&&Ct(A.version,"16")<0)return!1}const t=RTCRtpSender.getCapabilities("video");let e=!1;if(t){for(const A of t.codecs)if(A.mimeType==="video/VP9"){e=!0;break}}return e}function bn(t){return t==="av1"||t==="vp9"}function _s(t){return document?(t||(t=document.createElement("audio")),"setSinkId"in t):!1}function up(){return typeof RTCPeerConnection>"u"?!1:Ls()||Ds()}function Wt(){var t;return((t=oA())===null||t===void 0?void 0:t.name)==="Firefox"}function jA(){var t;return((t=oA())===null||t===void 0?void 0:t.name)==="Safari"}function dp(){const t=oA();return(t==null?void 0:t.name)==="Safari"&&t.version.startsWith("17.")}function Rl(){var t,e;return Me()?(e=(t=navigator.userAgentData)===null||t===void 0?void 0:t.mobile)!==null&&e!==void 0?e:/Tablet|iPad|Mobile|Android|BlackBerry/.test(navigator.userAgent):!1}function hp(){const t=oA(),e="17.2";if(t)return t.name!=="Safari"&&t.os!=="iOS"||t.os==="iOS"&&t.osVersion&&Ct(e,t.osVersion)>=0?!0:t.name==="Safari"&&Ct(e,t.version)>=0}function Me(){return typeof document<"u"}function BA(){return navigator.product=="ReactNative"}function Hs(t){return t.hostname.endsWith(".livekit.cloud")||t.hostname.endsWith(".livekit.run")}function xl(){if(global&&global.LiveKitReactNativeGlobal)return global.LiveKitReactNativeGlobal}function Pl(){if(!BA())return;let t=xl();if(t)return t.platform}function Ll(){if(Me())return window.devicePixelRatio;if(BA()){let t=xl();if(t)return t.devicePixelRatio}return 1}function Ct(t,e){const A=t.split("."),n=e.split("."),i=Math.min(A.length,n.length);for(let r=0;r<i;++r){const s=parseInt(A[r],10),o=parseInt(n[r],10);if(s>o)return 1;if(s<o)return-1;if(r===i-1&&s===o)return 0}return t===""&&e!==""?-1:e===""?1:A.length==n.length?0:A.length<n.length?-1:1}function fp(t){for(const e of t)e.target.handleResize(e)}function gp(t){for(const e of t)e.target.handleVisibilityChanged(e)}let Os=null;const Dl=()=>(Os||(Os=new ResizeObserver(fp)),Os);let Ms=null;const _l=()=>(Ms||(Ms=new IntersectionObserver(gp,{root:null,rootMargin:"0px"})),Ms);function pp(){var t;const e=new rg({sdk:wc.JS,protocol:tp,version:Ap});return BA()&&(e.os=(t=Pl())!==null&&t!==void 0?t:""),e}function Hl(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:16,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:16,A=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;const i=document.createElement("canvas");i.width=t,i.height=e;const r=i.getContext("2d");r==null||r.fillRect(0,0,i.width,i.height),n&&r&&(r.beginPath(),r.arc(t/2,e/2,50,0,Math.PI*2,!0),r.closePath(),r.fillStyle="grey",r.fill());const s=i.captureStream(),[o]=s.getTracks();if(!o)throw Error("Could not get empty media stream video track");return o.enabled=A,o}let Un;function Ns(){if(!Un){const t=new AudioContext,e=t.createOscillator(),A=t.createGain();A.gain.setValueAtTime(0,0);const n=t.createMediaStreamDestination();if(e.connect(A),A.connect(n),e.start(),[Un]=n.stream.getAudioTracks(),!Un)throw Error("Could not get empty media stream audio track");Un.enabled=!1}return Un.clone()}class Ks{constructor(e,A){this.onFinally=A,this.promise=new Promise((n,i)=>m(this,void 0,void 0,function*(){this.resolve=n,this.reject=i,e&&(yield e(n,i))})).finally(()=>{var n;return(n=this.onFinally)===null||n===void 0?void 0:n.call(this)})}}function mp(t){return rp.includes(t)}function WA(t){if(typeof t=="string"||typeof t=="number")return t;if(Array.isArray(t))return t[0];if(t.exact)return Array.isArray(t.exact)?t.exact[0]:t.exact;if(t.ideal)return Array.isArray(t.ideal)?t.ideal[0]:t.ideal;throw Error("could not unwrap constraint")}function Bp(t){return t.startsWith("http")?t.replace(/^(http)/,"ws"):t}function Vs(t){return t.startsWith("ws")?t.replace(/^(ws)/,"http"):t}function vp(t,e){return t.segments.map(A=>{let{id:n,text:i,language:r,startTime:s,endTime:o,final:a}=A;var c;const l=(c=e.get(n))!==null&&c!==void 0?c:Date.now(),u=Date.now();return a?e.delete(n):e.set(n,l),{id:n,text:i,startTime:Number.parseInt(s.toString()),endTime:Number.parseInt(o.toString()),final:a,language:r,firstReceivedTime:l,lastReceivedTime:u}})}function Cp(t){const{id:e,timestamp:A,message:n,editTimestamp:i}=t;return{id:e,timestamp:Number.parseInt(A.toString()),editTimestamp:i?Number.parseInt(i.toString()):void 0,message:n}}function Ol(t){switch(t.reason){case G.LeaveRequest:return t.context;case G.Cancelled:return nA.CLIENT_INITIATED;case G.NotAllowed:return nA.USER_REJECTED;case G.ServerUnreachable:return nA.JOIN_FAILURE;default:return nA.UNKNOWN_REASON}}function Ii(t){return t!==void 0?Number(t):void 0}function wt(t){return t!==void 0?BigInt(t):void 0}function Jt(t){return!!t&&!(t instanceof MediaStreamTrack)&&t.isLocal}function kA(t){return!!t&&t.kind==E.Kind.Audio}function Xt(t){return!!t&&t.kind==E.Kind.Video}function JA(t){return Jt(t)&&Xt(t)}function yt(t){return Jt(t)&&kA(t)}function Gs(t){return!!t&&!t.isLocal}function wp(t){return!!t&&!t.isLocal}function js(t){return Gs(t)&&Xt(t)}function yp(t){return t.isLocal}function bp(t,e){const A=[];let n=new TextEncoder().encode(t);for(;n.length>e;){let i=e;for(;i>0;){const r=n[i];if(r!==void 0&&(r&192)!==128)break;i--}A.push(n.slice(0,i)),n=n.slice(i)}return n.length>0&&A.push(n),A}function Ml(t,e,A){var n,i,r,s;const{optionsWithoutProcessor:o,audioProcessor:a,videoProcessor:c}=Gl(t??{}),l=e==null?void 0:e.processor,u=A==null?void 0:A.processor,d=o??{};return d.audio===!0&&(d.audio={}),d.video===!0&&(d.video={}),d.audio&&(Ws(d.audio,e),(n=(r=d.audio).deviceId)!==null&&n!==void 0||(r.deviceId={ideal:"default"}),(a||l)&&(d.audio.processor=a??l)),d.video&&(Ws(d.video,A),(i=(s=d.video).deviceId)!==null&&i!==void 0||(s.deviceId={ideal:"default"}),(c||u)&&(d.video.processor=c??u)),d}function Ws(t,e){return Object.keys(e).forEach(A=>{t[A]===void 0&&(t[A]=e[A])}),t}function Js(t){var e,A,n,i;const r={};if(t.video)if(typeof t.video=="object"){const s={},o=s,a=t.video;Object.keys(a).forEach(c=>{switch(c){case"resolution":Ws(o,a.resolution);break;default:o[c]=a[c]}}),r.video=s,(e=(n=r.video).deviceId)!==null&&e!==void 0||(n.deviceId={ideal:"default"})}else r.video=t.video?{deviceId:{ideal:"default"}}:!1;else r.video=!1;return t.audio?typeof t.audio=="object"?(r.audio=t.audio,(A=(i=r.audio).deviceId)!==null&&A!==void 0||(i.deviceId={ideal:"default"})):r.audio={deviceId:{ideal:"default"}}:r.audio=!1,r}function Nl(t){return m(this,arguments,void 0,function(e){let A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:200;return function*(){const n=Kl();if(n){const i=n.createAnalyser();i.fftSize=2048;const r=i.frequencyBinCount,s=new Uint8Array(r);n.createMediaStreamSource(new MediaStream([e.mediaStreamTrack])).connect(i),yield Oe(A),i.getByteTimeDomainData(s);const a=s.some(c=>c!==128&&c!==0);return n.close(),!a}return!1}()})}function Kl(){var t;const e=typeof window<"u"&&(window.AudioContext||window.webkitAudioContext);if(e){const A=new e({latencyHint:"interactive"});if(A.state==="suspended"&&typeof window<"u"&&(!((t=window.document)===null||t===void 0)&&t.body)){const n=()=>m(this,void 0,void 0,function*(){var i;try{A.state==="suspended"&&(yield A.resume())}catch(r){console.warn("Error trying to auto-resume audio context",r)}(i=window.document.body)===null||i===void 0||i.removeEventListener("click",n)});window.document.body.addEventListener("click",n)}return A}}function Up(t){return t==="audioinput"?E.Source.Microphone:t==="videoinput"?E.Source.Camera:E.Source.Unknown}function Vl(t){return t===E.Source.Microphone?"audioinput":t===E.Source.Camera?"videoinput":void 0}function Qp(t){var e,A;let n=(e=t.video)!==null&&e!==void 0?e:!0;return t.resolution&&t.resolution.width>0&&t.resolution.height>0&&(n=typeof n=="boolean"?{}:n,jA()?n=Object.assign(Object.assign({},n),{width:{max:t.resolution.width},height:{max:t.resolution.height},frameRate:t.resolution.frameRate}):n=Object.assign(Object.assign({},n),{width:{ideal:t.resolution.width},height:{ideal:t.resolution.height},frameRate:t.resolution.frameRate})),{audio:(A=t.audio)!==null&&A!==void 0?A:!1,video:n,controller:t.controller,selfBrowserSurface:t.selfBrowserSurface,surfaceSwitching:t.surfaceSwitching,systemAudio:t.systemAudio,preferCurrentTab:t.preferCurrentTab}}function Ri(t){return t.split("/")[1].toLowerCase()}function Ep(t){const e=[];return t.forEach(A=>{A.track!==void 0&&e.push(new fs({cid:A.track.mediaStreamID,track:A.trackInfo}))}),e}function X(t){return"mediaStreamTrack"in t?{trackID:t.sid,source:t.source,muted:t.isMuted,enabled:t.mediaStreamTrack.enabled,kind:t.kind,streamID:t.mediaStreamID,streamTrackID:t.mediaStreamTrack.id}:{trackID:t.trackSid,enabled:t.isEnabled,muted:t.isMuted,trackInfo:Object.assign({mimeType:t.mimeType,name:t.trackName,encrypted:t.isEncrypted,kind:t.kind,source:t.source},t.track?X(t.track):{})}}function Sp(){return typeof RTCRtpReceiver<"u"&&"getSynchronizationSources"in RTCRtpReceiver}function Tp(t,e){var A;t===void 0&&(t={}),e===void 0&&(e={});const n=[...Object.keys(e),...Object.keys(t)],i={};for(const r of n)t[r]!==e[r]&&(i[r]=(A=e[r])!==null&&A!==void 0?A:"");return i}function Gl(t){const e=Object.assign({},t);let A,n;return typeof e.audio=="object"&&e.audio.processor&&(A=e.audio.processor,e.audio=Object.assign(Object.assign({},e.audio),{processor:void 0})),typeof e.video=="object"&&e.video.processor&&(n=e.video.processor,e.video=Object.assign(Object.assign({},e.video),{processor:void 0})),{audioProcessor:A,videoProcessor:n,optionsWithoutProcessor:qg(e)}}function Fp(t){switch(t){case ge.CAMERA:return E.Source.Camera;case ge.MICROPHONE:return E.Source.Microphone;case ge.SCREEN_SHARE:return E.Source.ScreenShare;case ge.SCREEN_SHARE_AUDIO:return E.Source.ScreenShareAudio;default:return E.Source.Unknown}}class kp extends mA.EventEmitter{constructor(e){super(),this.onWorkerMessage=A=>{var n,i;const{kind:r,data:s}=A.data;switch(r){case"error":K.error(s.error.message),this.emit(VA.EncryptionError,s.error);break;case"initAck":s.enabled&&this.keyProvider.getKeys().forEach(o=>{this.postKey(o)});break;case"enable":if(s.enabled&&this.keyProvider.getKeys().forEach(o=>{this.postKey(o)}),this.encryptionEnabled!==s.enabled&&s.participantIdentity===((n=this.room)===null||n===void 0?void 0:n.localParticipant.identity))this.emit(VA.ParticipantEncryptionStatusChanged,s.enabled,this.room.localParticipant),this.encryptionEnabled=s.enabled;else if(s.participantIdentity){const o=(i=this.room)===null||i===void 0?void 0:i.getParticipantByIdentity(s.participantIdentity);if(!o)throw TypeError("couldn't set encryption status, participant not found".concat(s.participantIdentity));this.emit(VA.ParticipantEncryptionStatusChanged,s.enabled,o)}break;case"ratchetKey":this.keyProvider.emit(KA.KeyRatcheted,s.ratchetResult,s.participantIdentity,s.keyIndex);break}},this.onWorkerError=A=>{K.error("e2ee worker encountered an error:",{error:A.error}),this.emit(VA.EncryptionError,A.error)},this.keyProvider=e.keyProvider,this.worker=e.worker,this.encryptionEnabled=!1}setup(e){if(!Xg())throw new Ss("tried to setup end-to-end encryption on an unsupported browser");if(K.info("setting up e2ee"),e!==this.room){this.room=e,this.setupEventListeners(e,this.keyProvider);const A={kind:"init",data:{keyProviderOptions:this.keyProvider.getOptions(),loglevel:xg.getLevel()}};this.worker&&(K.info("initializing worker",{worker:this.worker}),this.worker.onmessage=this.onWorkerMessage,this.worker.onerror=this.onWorkerError,this.worker.postMessage(A))}}setParticipantCryptorEnabled(e,A){K.debug("set e2ee to ".concat(e," for participant ").concat(A)),this.postEnable(e,A)}setSifTrailer(e){!e||e.length===0?K.warn("ignoring server sent trailer as it's empty"):this.postSifTrailer(e)}setupEngine(e){e.on(I.RTPVideoMapUpdate,A=>{this.postRTPMap(A)})}setupEventListeners(e,A){e.on(T.TrackPublished,(n,i)=>this.setParticipantCryptorEnabled(n.trackInfo.encryption!==je.NONE,i.identity)),e.on(T.ConnectionStateChanged,n=>{n===J.Connected&&e.remoteParticipants.forEach(i=>{i.trackPublications.forEach(r=>{this.setParticipantCryptorEnabled(r.trackInfo.encryption!==je.NONE,i.identity)})})}).on(T.TrackUnsubscribed,(n,i,r)=>{var s;const o={kind:"removeTransform",data:{participantIdentity:r.identity,trackId:n.mediaStreamID}};(s=this.worker)===null||s===void 0||s.postMessage(o)}).on(T.TrackSubscribed,(n,i,r)=>{this.setupE2EEReceiver(n,r.identity,i.trackInfo)}).on(T.SignalConnected,()=>{if(!this.room)throw new TypeError("expected room to be present on signal connect");A.getKeys().forEach(n=>{this.postKey(n)}),this.setParticipantCryptorEnabled(this.room.localParticipant.isE2EEEnabled,this.room.localParticipant.identity)}),e.localParticipant.on(x.LocalTrackPublished,n=>m(this,void 0,void 0,function*(){this.setupE2EESender(n.track,n.track.sender)})),A.on(KA.SetKey,n=>this.postKey(n)).on(KA.RatchetRequest,(n,i)=>this.postRatchetRequest(n,i))}postRatchetRequest(e,A){if(!this.worker)throw Error("could not ratchet key, worker is missing");const n={kind:"ratchetRequest",data:{participantIdentity:e,keyIndex:A}};this.worker.postMessage(n)}postKey(e){let{key:A,participantIdentity:n,keyIndex:i}=e;var r;if(!this.worker)throw Error("could not set key, worker is missing");const s={kind:"setKey",data:{participantIdentity:n,isPublisher:n===((r=this.room)===null||r===void 0?void 0:r.localParticipant.identity),key:A,keyIndex:i}};this.worker.postMessage(s)}postEnable(e,A){if(this.worker){const n={kind:"enable",data:{enabled:e,participantIdentity:A}};this.worker.postMessage(n)}else throw new ReferenceError("failed to enable e2ee, worker is not ready")}postRTPMap(e){var A;if(!this.worker)throw TypeError("could not post rtp map, worker is missing");if(!(!((A=this.room)===null||A===void 0)&&A.localParticipant.identity))throw TypeError("could not post rtp map, local participant identity is missing");const n={kind:"setRTPMap",data:{map:e,participantIdentity:this.room.localParticipant.identity}};this.worker.postMessage(n)}postSifTrailer(e){if(!this.worker)throw Error("could not post SIF trailer, worker is missing");const A={kind:"setSifTrailer",data:{trailer:e}};this.worker.postMessage(A)}setupE2EEReceiver(e,A,n){if(e.receiver){if(!(n!=null&&n.mimeType)||n.mimeType==="")throw new TypeError("MimeType missing from trackInfo, cannot set up E2EE cryptor");this.handleReceiver(e.receiver,e.mediaStreamID,A,e.kind==="video"?Ri(n.mimeType):void 0)}}setupE2EESender(e,A){if(!Jt(e)||!A){A||K.warn("early return because sender is not ready");return}this.handleSender(A,e.mediaStreamID,void 0)}handleReceiver(e,A,n,i){return m(this,void 0,void 0,function*(){if(this.worker){if(Es()){const r={kind:"decode",participantIdentity:n,trackId:A,codec:i};e.transform=new RTCRtpScriptTransform(this.worker,r)}else{if(Ti in e&&i){const a={kind:"updateCodec",data:{trackId:A,codec:i,participantIdentity:n}};this.worker.postMessage(a);return}let r=e.writableStream,s=e.readableStream;if(!r||!s){const a=e.createEncodedStreams();e.writableStream=a.writable,r=a.writable,e.readableStream=a.readable,s=a.readable}const o={kind:"decode",data:{readableStream:s,writableStream:r,trackId:A,codec:i,participantIdentity:n}};this.worker.postMessage(o,[s,r])}e[Ti]=!0}})}handleSender(e,A,n){var i;if(!(Ti in e||!this.worker)){if(!(!((i=this.room)===null||i===void 0)&&i.localParticipant.identity)||this.room.localParticipant.identity==="")throw TypeError("local identity needs to be known in order to set up encrypted sender");if(Es()){K.info("initialize script transform");const r={kind:"encode",participantIdentity:this.room.localParticipant.identity,trackId:A,codec:n};e.transform=new RTCRtpScriptTransform(this.worker,r)}else{K.info("initialize encoded streams");const r=e.createEncodedStreams(),s={kind:"encode",data:{readableStream:r.readable,writableStream:r.writable,codec:n,trackId:A,participantIdentity:this.room.localParticipant.identity}};this.worker.postMessage(s,[r.readable,r.writable])}e[Ti]=!0}}}const Xs="default";class Ce{constructor(){this._previousDevices=[]}static getInstance(){return this.instance===void 0&&(this.instance=new Ce),this.instance}get previousDevices(){return this._previousDevices}getDevices(e){return m(this,arguments,void 0,function(A){var n=this;let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var r;if(((r=Ce.userMediaPromiseMap)===null||r===void 0?void 0:r.size)>0){K.debug("awaiting getUserMedia promise");try{A?yield Ce.userMediaPromiseMap.get(A):yield Promise.all(Ce.userMediaPromiseMap.values())}catch{K.warn("error waiting for media permissons")}}let s=yield navigator.mediaDevices.enumerateDevices();if(i&&!(jA()&&n.hasDeviceInUse(A))&&(s.filter(a=>a.kind===A).length===0||s.some(a=>{const c=a.label==="",l=A?a.kind===A:!0;return c&&l}))){const a={video:A!=="audioinput"&&A!=="audiooutput",audio:A!=="videoinput"&&{deviceId:{ideal:"default"}}},c=yield navigator.mediaDevices.getUserMedia(a);s=yield navigator.mediaDevices.enumerateDevices(),c.getTracks().forEach(l=>{l.stop()})}return n._previousDevices=s,A&&(s=s.filter(o=>o.kind===A)),s}()})}normalizeDeviceId(e,A,n){return m(this,void 0,void 0,function*(){if(A!==Xs)return A;const i=yield this.getDevices(e),r=i.find(o=>o.deviceId===Xs);if(!r){K.warn("could not reliably determine default device");return}const s=i.find(o=>o.deviceId!==Xs&&o.groupId===(n??r.groupId));if(!s){K.warn("could not reliably determine default device");return}return s==null?void 0:s.deviceId})}hasDeviceInUse(e){return e?Ce.userMediaPromiseMap.has(e):Ce.userMediaPromiseMap.size>0}}Ce.mediaDeviceKinds=["audioinput","audiooutput","videoinput"],Ce.userMediaPromiseMap=new Map;var Qn;(function(t){t[t.WAITING=0]="WAITING",t[t.RUNNING=1]="RUNNING",t[t.COMPLETED=2]="COMPLETED"})(Qn||(Qn={}));class Ip{constructor(){this.pendingTasks=new Map,this.taskMutex=new De,this.nextTaskIndex=0}run(e){return m(this,void 0,void 0,function*(){const A={id:this.nextTaskIndex++,enqueuedAt:Date.now(),status:Qn.WAITING};this.pendingTasks.set(A.id,A);const n=yield this.taskMutex.lock();try{return A.executedAt=Date.now(),A.status=Qn.RUNNING,yield e()}finally{A.status=Qn.COMPLETED,this.pendingTasks.delete(A.id),n()}})}flush(){return m(this,void 0,void 0,function*(){return this.run(()=>m(this,void 0,void 0,function*(){}))})}snapshot(){return Array.from(this.pendingTasks.values())}}function Rp(t,e){const A=new URL(Bp(t));return e.forEach((n,i)=>{A.searchParams.set(i,n)}),jl(A,"rtc")}function xp(t){const e=new URL(Vs(t));return jl(e,"validate")}function Pp(t){return t.endsWith("/")?t:"".concat(t,"/")}function jl(t,e){return t.pathname="".concat(Pp(t.pathname)).concat(e),t.toString()}const Lp=["syncState","trickle","offer","answer","simulate","leave"];function Dp(t){const e=Lp.indexOf(t.case)>=0;return K.trace("request allowed to bypass queue:",{canPass:e,req:t}),e}var Ae;(function(t){t[t.CONNECTING=0]="CONNECTING",t[t.CONNECTED=1]="CONNECTED",t[t.RECONNECTING=2]="RECONNECTING",t[t.DISCONNECTING=3]="DISCONNECTING",t[t.DISCONNECTED=4]="DISCONNECTED"})(Ae||(Ae={}));class $s{get currentState(){return this.state}get isDisconnected(){return this.state===Ae.DISCONNECTING||this.state===Ae.DISCONNECTED}get isEstablishingConnection(){return this.state===Ae.CONNECTING||this.state===Ae.RECONNECTING}getNextRequestId(){return this._requestId+=1,this._requestId}constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var n;this.rtt=0,this.state=Ae.DISCONNECTED,this.log=K,this._requestId=0,this.resetCallbacks=()=>{this.onAnswer=void 0,this.onLeave=void 0,this.onLocalTrackPublished=void 0,this.onLocalTrackUnpublished=void 0,this.onNegotiateRequested=void 0,this.onOffer=void 0,this.onRemoteMuteChanged=void 0,this.onSubscribedQualityUpdate=void 0,this.onTokenRefresh=void 0,this.onTrickle=void 0,this.onClose=void 0},this.log=TA((n=A.loggerName)!==null&&n!==void 0?n:sA.Signal),this.loggerContextCb=A.loggerContextCb,this.useJSON=e,this.requestQueue=new Ip,this.queuedRequests=[],this.closingLock=new De,this.connectionLock=new De,this.state=Ae.DISCONNECTED}get logContext(){var e,A;return(A=(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this))!==null&&A!==void 0?A:{}}join(e,A,n,i){return m(this,void 0,void 0,function*(){return this.state=Ae.CONNECTING,this.options=n,yield this.connect(e,A,n,i)})}reconnect(e,A,n,i){return m(this,void 0,void 0,function*(){if(!this.options){this.log.warn("attempted to reconnect without signal options being set, ignoring",this.logContext);return}return this.state=Ae.RECONNECTING,this.clearPingInterval(),yield this.connect(e,A,Object.assign(Object.assign({},this.options),{reconnect:!0,sid:n,reconnectReason:i}))})}connect(e,A,n,i){this.connectOptions=n;const r=pp(),s=_p(A,r,n),o=Rp(e,s),a=xp(o);return new Promise((c,l)=>m(this,void 0,void 0,function*(){const u=yield this.connectionLock.lock();try{const d=()=>m(this,void 0,void 0,function*(){this.close(),clearTimeout(h),l(new z("room connection has been cancelled (signal)",G.Cancelled))}),h=setTimeout(()=>{this.close(),l(new z("room connection has timed out (signal)",G.ServerUnreachable))},n.websocketTimeout);i!=null&&i.aborted&&d(),i==null||i.addEventListener("abort",d);const g=new URL(o);g.searchParams.has("access_token")&&g.searchParams.set("access_token","<redacted>"),this.log.debug("connecting to ".concat(g),Object.assign({reconnect:n.reconnect,reconnectReason:n.reconnectReason},this.logContext)),this.ws&&(yield this.close(!1)),this.ws=new WebSocket(o),this.ws.binaryType="arraybuffer",this.ws.onopen=()=>{clearTimeout(h)},this.ws.onerror=f=>m(this,void 0,void 0,function*(){if(this.state!==Ae.CONNECTED){this.state=Ae.DISCONNECTED,clearTimeout(h);try{const p=yield fetch(a);if(p.status.toFixed(0).startsWith("4")){const B=yield p.text();l(new z(B,G.NotAllowed,p.status))}else l(new z("Encountered unknown websocket error during connection: ".concat(f.toString()),G.InternalError,p.status))}catch(p){l(new z(p instanceof Error?p.message:"server was not reachable",G.ServerUnreachable))}return}this.handleWSError(f)}),this.ws.onmessage=f=>m(this,void 0,void 0,function*(){var p,B,y;let b;if(typeof f.data=="string"){const v=JSON.parse(f.data);b=Sc.fromJson(v,{ignoreUnknownFields:!0})}else if(f.data instanceof ArrayBuffer)b=Sc.fromBinary(new Uint8Array(f.data));else{this.log.error("could not decode websocket message: ".concat(typeof f.data),this.logContext);return}if(this.state!==Ae.CONNECTED){let v=!1;if(((p=b.message)===null||p===void 0?void 0:p.case)==="join"?(this.state=Ae.CONNECTED,i==null||i.removeEventListener("abort",d),this.pingTimeoutDuration=b.message.value.pingTimeout,this.pingIntervalDuration=b.message.value.pingInterval,this.pingTimeoutDuration&&this.pingTimeoutDuration>0&&(this.log.debug("ping config",Object.assign(Object.assign({},this.logContext),{timeout:this.pingTimeoutDuration,interval:this.pingIntervalDuration})),this.startPingInterval()),c(b.message.value)):this.state===Ae.RECONNECTING&&b.message.case!=="leave"?(this.state=Ae.CONNECTED,i==null||i.removeEventListener("abort",d),this.startPingInterval(),((B=b.message)===null||B===void 0?void 0:B.case)==="reconnect"?c(b.message.value):(this.log.debug("declaring signal reconnected without reconnect response received",this.logContext),c(void 0),v=!0)):this.isEstablishingConnection&&b.message.case==="leave"?l(new z("Received leave request while trying to (re)connect",G.LeaveRequest,void 0,b.message.value.reason)):n.reconnect||l(new z("did not receive join response, got ".concat((y=b.message)===null||y===void 0?void 0:y.case," instead"),G.InternalError)),!v)return}this.signalLatency&&(yield Oe(this.signalLatency)),this.handleSignalResponse(b)}),this.ws.onclose=f=>{this.isEstablishingConnection&&l(new z("Websocket got closed during a (re)connection attempt",G.InternalError)),this.log.warn("websocket closed",Object.assign(Object.assign({},this.logContext),{reason:f.reason,code:f.code,wasClean:f.wasClean,state:this.state})),this.handleOnClose(f.reason)}}finally{u()}}))}close(){return m(this,arguments,void 0,function(){var e=this;let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){const n=yield e.closingLock.lock();try{if(e.clearPingInterval(),A&&(e.state=Ae.DISCONNECTING),e.ws){e.ws.onmessage=null,e.ws.onopen=null,e.ws.onclose=null;const i=new Promise(r=>{e.ws?e.ws.onclose=()=>{r()}:r()});e.ws.readyState<e.ws.CLOSING&&(e.ws.close(),yield Promise.race([i,Oe(250)])),e.ws=void 0}}finally{A&&(e.state=Ae.DISCONNECTED),n()}}()})}sendOffer(e){this.log.debug("sending offer",Object.assign(Object.assign({},this.logContext),{offerSdp:e.sdp})),this.sendRequest({case:"offer",value:xi(e)})}sendAnswer(e){return this.log.debug("sending answer",Object.assign(Object.assign({},this.logContext),{answerSdp:e.sdp})),this.sendRequest({case:"answer",value:xi(e)})}sendIceCandidate(e,A){return this.log.debug("sending ice candidate",Object.assign(Object.assign({},this.logContext),{candidate:e})),this.sendRequest({case:"trickle",value:new ds({candidateInit:JSON.stringify(e),target:A})})}sendMuteTrack(e,A){return this.sendRequest({case:"mute",value:new hs({sid:e,muted:A})})}sendAddTrack(e){return this.sendRequest({case:"addTrack",value:e})}sendUpdateLocalMetadata(e,A){return m(this,arguments,void 0,function(n,i){var r=this;let s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return function*(){const o=r.getNextRequestId();return yield r.sendRequest({case:"updateMetadata",value:new Ic({requestId:o,metadata:n,name:i,attributes:s})}),o}()})}sendUpdateTrackSettings(e){this.sendRequest({case:"trackSetting",value:e})}sendUpdateSubscription(e){return this.sendRequest({case:"subscription",value:e})}sendSyncState(e){return this.sendRequest({case:"syncState",value:e})}sendUpdateVideoLayers(e,A){return this.sendRequest({case:"updateLayers",value:new kc({trackSid:e,layers:A})})}sendUpdateSubscriptionPermissions(e,A){return this.sendRequest({case:"subscriptionPermission",value:new Pc({allParticipants:e,trackPermissions:A})})}sendSimulateScenario(e){return this.sendRequest({case:"simulate",value:e})}sendPing(){return Promise.all([this.sendRequest({case:"ping",value:re.parse(Date.now())}),this.sendRequest({case:"pingReq",value:new _c({timestamp:re.parse(Date.now()),rtt:re.parse(this.rtt)})})])}sendUpdateLocalAudioTrack(e,A){return this.sendRequest({case:"updateAudioTrack",value:new Fc({trackSid:e,features:A})})}sendLeave(){return this.sendRequest({case:"leave",value:new Bi({reason:nA.CLIENT_INITIATED,action:Kt.DISCONNECT})})}sendRequest(e){return m(this,arguments,void 0,function(A){var n=this;let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return function*(){if(!i&&!Dp(A)&&n.state===Ae.RECONNECTING){n.queuedRequests.push(()=>m(n,void 0,void 0,function*(){yield this.sendRequest(A,!0)}));return}if(i||(yield n.requestQueue.flush()),n.signalLatency&&(yield Oe(n.signalLatency)),!n.ws||n.ws.readyState!==n.ws.OPEN){n.log.error("cannot send signal request before connected, type: ".concat(A==null?void 0:A.case),n.logContext);return}const s=new ag({message:A});try{n.useJSON?n.ws.send(s.toJsonString()):n.ws.send(s.toBinary())}catch(o){n.log.error("error sending signal message",Object.assign(Object.assign({},n.logContext),{error:o}))}}()})}handleSignalResponse(e){var A,n;const i=e.message;if(i==null){this.log.debug("received unsupported message",this.logContext);return}let r=!1;if(i.case==="answer"){const s=Wl(i.value);this.onAnswer&&this.onAnswer(s)}else if(i.case==="offer"){const s=Wl(i.value);this.onOffer&&this.onOffer(s)}else if(i.case==="trickle"){const s=JSON.parse(i.value.candidateInit);this.onTrickle&&this.onTrickle(s,i.value.target)}else i.case==="update"?this.onParticipantUpdate&&this.onParticipantUpdate((A=i.value.participants)!==null&&A!==void 0?A:[]):i.case==="trackPublished"?this.onLocalTrackPublished&&this.onLocalTrackPublished(i.value):i.case==="speakersChanged"?this.onSpeakersChanged&&this.onSpeakersChanged((n=i.value.speakers)!==null&&n!==void 0?n:[]):i.case==="leave"?this.onLeave&&this.onLeave(i.value):i.case==="mute"?this.onRemoteMuteChanged&&this.onRemoteMuteChanged(i.value.sid,i.value.muted):i.case==="roomUpdate"?this.onRoomUpdate&&i.value.room&&this.onRoomUpdate(i.value.room):i.case==="connectionQuality"?this.onConnectionQuality&&this.onConnectionQuality(i.value):i.case==="streamStateUpdate"?this.onStreamStateUpdate&&this.onStreamStateUpdate(i.value):i.case==="subscribedQualityUpdate"?this.onSubscribedQualityUpdate&&this.onSubscribedQualityUpdate(i.value):i.case==="subscriptionPermissionUpdate"?this.onSubscriptionPermissionUpdate&&this.onSubscriptionPermissionUpdate(i.value):i.case==="refreshToken"?this.onTokenRefresh&&this.onTokenRefresh(i.value):i.case==="trackUnpublished"?this.onLocalTrackUnpublished&&this.onLocalTrackUnpublished(i.value):i.case==="subscriptionResponse"?this.onSubscriptionError&&this.onSubscriptionError(i.value):i.case==="pong"||(i.case==="pongResp"?(this.rtt=Date.now()-Number.parseInt(i.value.lastPingTimestamp.toString()),this.resetPingTimeout(),r=!0):i.case==="requestResponse"?this.onRequestResponse&&this.onRequestResponse(i.value):i.case==="trackSubscribed"?this.onLocalTrackSubscribed&&this.onLocalTrackSubscribed(i.value.trackSid):i.case==="roomMoved"?(this.onTokenRefresh&&this.onTokenRefresh(i.value.token),this.onRoomMoved&&this.onRoomMoved(i.value)):this.log.debug("unsupported message",Object.assign(Object.assign({},this.logContext),{msgCase:i.case})));r||this.resetPingTimeout()}setReconnected(){for(;this.queuedRequests.length>0;){const e=this.queuedRequests.shift();e&&this.requestQueue.run(e)}}handleOnClose(e){return m(this,void 0,void 0,function*(){if(this.state===Ae.DISCONNECTED)return;const A=this.onClose;yield this.close(),this.log.debug("websocket connection closed: ".concat(e),Object.assign(Object.assign({},this.logContext),{reason:e})),A&&A(e)})}handleWSError(e){this.log.error("websocket error",Object.assign(Object.assign({},this.logContext),{error:e}))}resetPingTimeout(){if(this.clearPingTimeout(),!this.pingTimeoutDuration){this.log.warn("ping timeout duration not set",this.logContext);return}this.pingTimeout=ye.setTimeout(()=>{this.log.warn("ping timeout triggered. last pong received at: ".concat(new Date(Date.now()-this.pingTimeoutDuration*1e3).toUTCString()),this.logContext),this.handleOnClose("ping timeout")},this.pingTimeoutDuration*1e3)}clearPingTimeout(){this.pingTimeout&&ye.clearTimeout(this.pingTimeout)}startPingInterval(){if(this.clearPingInterval(),this.resetPingTimeout(),!this.pingIntervalDuration){this.log.warn("ping interval duration not set",this.logContext);return}this.log.debug("start ping interval",this.logContext),this.pingInterval=ye.setInterval(()=>{this.sendPing()},this.pingIntervalDuration*1e3)}clearPingInterval(){this.log.debug("clearing ping interval",this.logContext),this.clearPingTimeout(),this.pingInterval&&ye.clearInterval(this.pingInterval)}}function Wl(t){const e={type:"offer",sdp:t.sdp};switch(t.type){case"answer":case"offer":case"pranswer":case"rollback":e.type=t.type;break}return e}function xi(t){return new Bt({sdp:t.sdp,type:t.type})}function _p(t,e,A){var n;const i=new URLSearchParams;return i.set("access_token",t),A.reconnect&&(i.set("reconnect","1"),A.sid&&i.set("sid",A.sid)),i.set("auto_subscribe",A.autoSubscribe?"1":"0"),i.set("sdk",BA()?"reactnative":"js"),i.set("version",e.version),i.set("protocol",e.protocol.toString()),e.deviceModel&&i.set("device_model",e.deviceModel),e.os&&i.set("os",e.os),e.osVersion&&i.set("os_version",e.osVersion),e.browser&&i.set("browser",e.browser),e.browserVersion&&i.set("browser_version",e.browserVersion),A.adaptiveStream&&i.set("adaptive_stream","1"),A.reconnectReason&&i.set("reconnect_reason",A.reconnectReason.toString()),!((n=navigator.connection)===null||n===void 0)&&n.type&&i.set("network",navigator.connection.type),i}var aA={},Ys={},qs={exports:{}},Jl;function zs(){if(Jl)return qs.exports;Jl=1;var t=qs.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(e){return e.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(e){return e.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(e){return"extmap:%d"+(e.direction?"/%s":"%v")+(e["encrypt-uri"]?" %s":"%v")+" %s"+(e.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return e.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(e){var A="candidate:%s %d %s %d %s %d typ %s";return A+=e.raddr!=null?" raddr %s rport %d":"%v%v",A+=e.tcptype!=null?" tcptype %s":"%v",e.generation!=null&&(A+=" generation %d"),A+=e["network-id"]!=null?" network-id %d":"%v",A+=e["network-cost"]!=null?" network-cost %d":"%v",A}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(e){var A="ssrc:%d";return e.attribute!=null&&(A+=" %s",e.value!=null&&(A+=":%s")),A}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(e){return e.maxMessageSize!=null?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(e){return e.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(e){return"imageattr:%s %s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(e){return"ts-refclk:%s"+(e.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(e){var A="mediaclk:";return A+=e.id!=null?"id=%s %s":"%v%s",A+=e.mediaClockValue!=null?"=%s":"",A+=e.rateNumerator!=null?" rate=%s":"",A+=e.rateDenominator!=null?"/%s":"",A}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};return Object.keys(t).forEach(function(e){var A=t[e];A.forEach(function(n){n.reg||(n.reg=/(.*)/),n.format||(n.format="%s")})}),qs.exports}var Xl;function Hp(){return Xl||(Xl=1,function(t){var e=function(o){return String(Number(o))===o?Number(o):o},A=function(o,a,c,l){if(l&&!c)a[l]=e(o[1]);else for(var u=0;u<c.length;u+=1)o[u+1]!=null&&(a[c[u]]=e(o[u+1]))},n=function(o,a,c){var l=o.name&&o.names;o.push&&!a[o.push]?a[o.push]=[]:l&&!a[o.name]&&(a[o.name]={});var u=o.push?{}:l?a[o.name]:a;A(c.match(o.reg),u,o.names,o.name),o.push&&a[o.push].push(u)},i=zs(),r=RegExp.prototype.test.bind(/^([a-z])=(.*)/);t.parse=function(o){var a={},c=[],l=a;return o.split(/(\r\n|\r|\n)/).filter(r).forEach(function(u){var d=u[0],h=u.slice(2);d==="m"&&(c.push({rtp:[],fmtp:[]}),l=c[c.length-1]);for(var g=0;g<(i[d]||[]).length;g+=1){var f=i[d][g];if(f.reg.test(h))return n(f,l,h)}}),a.media=c,a};var s=function(o,a){var c=a.split(/=(.+)/,2);return c.length===2?o[c[0]]=e(c[1]):c.length===1&&a.length>1&&(o[c[0]]=void 0),o};t.parseParams=function(o){return o.split(/;\s?/).reduce(s,{})},t.parseFmtpConfig=t.parseParams,t.parsePayloads=function(o){return o.toString().split(" ").map(Number)},t.parseRemoteCandidates=function(o){for(var a=[],c=o.split(" ").map(e),l=0;l<c.length;l+=3)a.push({component:c[l],ip:c[l+1],port:c[l+2]});return a},t.parseImageAttributes=function(o){return o.split(" ").map(function(a){return a.substring(1,a.length-1).split(",").reduce(s,{})})},t.parseSimulcastStreamList=function(o){return o.split(";").map(function(a){return a.split(",").map(function(c){var l,u=!1;return c[0]!=="~"?l=e(c):(l=e(c.substring(1,c.length)),u=!0),{scid:l,paused:u}})})}}(Ys)),Ys}var Zs,$l;function Op(){if($l)return Zs;$l=1;var t=zs(),e=/%[sdv%]/g,A=function(s){var o=1,a=arguments,c=a.length;return s.replace(e,function(l){if(o>=c)return l;var u=a[o];switch(o+=1,l){case"%%":return"%";case"%s":return String(u);case"%d":return Number(u);case"%v":return""}})},n=function(s,o,a){var c=o.format instanceof Function?o.format(o.push?a:a[o.name]):o.format,l=[s+"="+c];if(o.names)for(var u=0;u<o.names.length;u+=1){var d=o.names[u];o.name?l.push(a[o.name][d]):l.push(a[o.names[u]])}else l.push(a[o.name]);return A.apply(null,l)},i=["v","o","s","i","u","e","p","c","b","t","r","z","a"],r=["i","c","b","a"];return Zs=function(s,o){o=o||{},s.version==null&&(s.version=0),s.name==null&&(s.name=" "),s.media.forEach(function(u){u.payloads==null&&(u.payloads="")});var a=o.outerOrder||i,c=o.innerOrder||r,l=[];return a.forEach(function(u){t[u].forEach(function(d){d.name in s&&s[d.name]!=null?l.push(n(u,d,s)):d.push in s&&s[d.push]!=null&&s[d.push].forEach(function(h){l.push(n(u,d,h))})})}),s.media.forEach(function(u){l.push(n("m",t.m[0],u)),c.forEach(function(d){t[d].forEach(function(h){h.name in u&&u[h.name]!=null?l.push(n(d,h,u)):h.push in u&&u[h.push]!=null&&u[h.push].forEach(function(g){l.push(n(d,h,g))})})})}),l.join(`\r
|
|
37
37
|
`)+`\r
|
|
38
|
-
`},Zs}var Yl;function Mp(){if(Yl)return aA;Yl=1;var t=Hp(),e=Op(),A=zs();return aA.grammar=A,aA.write=e,aA.parse=t.parse,aA.parseParams=t.parseParams,aA.parseFmtpConfig=t.parseFmtpConfig,aA.parsePayloads=t.parsePayloads,aA.parseRemoteCandidates=t.parseRemoteCandidates,aA.parseImageAttributes=t.parseImageAttributes,aA.parseSimulcastStreamList=t.parseSimulcastStreamList,aA}var XA=Mp();function eo(t,e,A){var n,i,r;e===void 0&&(e=50),A===void 0&&(A={});var s=(n=A.isImmediate)!=null&&n,o=(i=A.callback)!=null&&i,a=A.maxWait,c=Date.now(),l=[];function u(){if(a!==void 0){var h=Date.now()-c;if(h+e>=a)return a-h}return e}var d=function(){var h=[].slice.call(arguments),g=this;return new Promise(function(f,p){var B=s&&r===void 0;if(r!==void 0&&clearTimeout(r),r=setTimeout(function(){if(r=void 0,c=Date.now(),!s){var b=t.apply(g,h);o&&o(b),l.forEach(function(v){return(0,v.resolve)(b)}),l=[]}},u()),B){var y=t.apply(g,h);return o&&o(y),f(y)}l.push({resolve:f,reject:p})})};return d.cancel=function(h){r!==void 0&&clearTimeout(r),l.forEach(function(g){return(0,g.reject)(h)}),l=[]},d}const Np=.7,Kp=20,$t={NegotiationStarted:"negotiationStarted",NegotiationComplete:"negotiationComplete",RTPVideoPayloadTypes:"rtpVideoPayloadTypes"};class ql extends mA.EventEmitter{get pc(){return this._pc||(this._pc=this.createPC()),this._pc}constructor(e){let A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var n;super(),this.log=K,this.ddExtID=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=eo(i=>m(this,void 0,void 0,function*(){this.emit($t.NegotiationStarted);try{yield this.createAndSendOffer()}catch(r){if(i)i(r);else throw r}}),Kp),this.close=()=>{this._pc&&(this._pc.close(),this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc.onicegatheringstatechange=null,this._pc.ondatachannel=null,this._pc.onnegotiationneeded=null,this._pc.onsignalingstatechange=null,this._pc.onicecandidate=null,this._pc.ondatachannel=null,this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc=null)},this.log=TA((n=A.loggerName)!==null&&n!==void 0?n:sA.PCTransport),this.loggerOptions=A,this.config=e,this._pc=this.createPC()}createPC(){const e=new RTCPeerConnection(this.config);return e.onicecandidate=A=>{var n;A.candidate&&((n=this.onIceCandidate)===null||n===void 0||n.call(this,A.candidate))},e.onicecandidateerror=A=>{var n;(n=this.onIceCandidateError)===null||n===void 0||n.call(this,A)},e.oniceconnectionstatechange=()=>{var A;(A=this.onIceConnectionStateChange)===null||A===void 0||A.call(this,e.iceConnectionState)},e.onsignalingstatechange=()=>{var A;(A=this.onSignalingStatechange)===null||A===void 0||A.call(this,e.signalingState)},e.onconnectionstatechange=()=>{var A;(A=this.onConnectionStateChange)===null||A===void 0||A.call(this,e.connectionState)},e.ondatachannel=A=>{var n;(n=this.onDataChannel)===null||n===void 0||n.call(this,A)},e.ontrack=A=>{var n;(n=this.onTrack)===null||n===void 0||n.call(this,A)},e}get logContext(){var e,A;return Object.assign({},(A=(e=this.loggerOptions).loggerContextCb)===null||A===void 0?void 0:A.call(e))}get isICEConnected(){return this._pc!==null&&(this.pc.iceConnectionState==="connected"||this.pc.iceConnectionState==="completed")}addIceCandidate(e){return m(this,void 0,void 0,function*(){if(this.pc.remoteDescription&&!this.restartingIce)return this.pc.addIceCandidate(e);this.pendingCandidates.push(e)})}setRemoteDescription(e){return m(this,void 0,void 0,function*(){var A;let n;if(e.type==="offer"){let{stereoMids:i,nackMids:r}=Vp(e);this.remoteStereoMids=i,this.remoteNackMids=r}else if(e.type==="answer"){const i=XA.parse((A=e.sdp)!==null&&A!==void 0?A:"");i.media.forEach(r=>{r.type==="audio"&&this.trackBitrates.some(s=>{if(!s.transceiver||r.mid!=s.transceiver.mid)return!1;let o=0;if(r.rtp.some(c=>c.codec.toUpperCase()===s.codec.toUpperCase()?(o=c.payload,!0):!1),o===0)return!0;let a=!1;for(const c of r.fmtp)if(c.payload===o){c.config=c.config.split(";").filter(l=>!l.includes("maxaveragebitrate")).join(";"),s.maxbr>0&&(c.config+=";maxaveragebitrate=".concat(s.maxbr*1e3)),a=!0;break}return a||s.maxbr>0&&r.fmtp.push({payload:o,config:"maxaveragebitrate=".concat(s.maxbr*1e3)}),!0})}),n=XA.write(i)}yield this.setMungedSDP(e,n,!0),this.pendingCandidates.forEach(i=>{this.pc.addIceCandidate(i)}),this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate?(this.renegotiate=!1,yield this.createAndSendOffer()):e.type==="answer"&&(this.emit($t.NegotiationComplete),e.sdp&&XA.parse(e.sdp).media.forEach(r=>{r.type==="video"&&this.emit($t.RTPVideoPayloadTypes,r.rtp)}))})}createAndSendOffer(e){return m(this,void 0,void 0,function*(){var A;if(this.onOffer===void 0)return;if(e!=null&&e.iceRestart&&(this.log.debug("restarting ICE",this.logContext),this.restartingIce=!0),this._pc&&this._pc.signalingState==="have-local-offer"){const r=this._pc.remoteDescription;if(e!=null&&e.iceRestart&&r)yield this._pc.setRemoteDescription(r);else{this.renegotiate=!0;return}}else if(!this._pc||this._pc.signalingState==="closed"){this.log.warn("could not createOffer with closed peer connection",this.logContext);return}this.log.debug("starting to negotiate",this.logContext);const n=yield this.pc.createOffer(e);this.log.debug("original offer",Object.assign({sdp:n.sdp},this.logContext));const i=XA.parse((A=n.sdp)!==null&&A!==void 0?A:"");i.media.forEach(r=>{Zl(r),r.type==="audio"?zl(r,[],[]):r.type==="video"&&this.trackBitrates.some(s=>{if(!r.msid||!s.cid||!r.msid.includes(s.cid))return!1;let o=0;if(r.rtp.some(c=>c.codec.toUpperCase()===s.codec.toUpperCase()?(o=c.payload,!0):!1),o===0||(bn(s.codec)&&this.ensureVideoDDExtensionForSVC(r,i),s.codec!=="av1"))return!0;const a=Math.round(s.maxbr*Np);for(const c of r.fmtp)if(c.payload===o){c.config.includes("x-google-start-bitrate")||(c.config+=";x-google-start-bitrate=".concat(a));break}return!0})}),yield this.setMungedSDP(n,XA.write(i)),this.onOffer(n)})}createAndSetAnswer(){return m(this,void 0,void 0,function*(){var e;const A=yield this.pc.createAnswer(),n=XA.parse((e=A.sdp)!==null&&e!==void 0?e:"");return n.media.forEach(i=>{Zl(i),i.type==="audio"&&zl(i,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(A,XA.write(n)),A})}createDataChannel(e,A){return this.pc.createDataChannel(e,A)}addTransceiver(e,A){return this.pc.addTransceiver(e,A)}addTrack(e){if(!this._pc)throw new Be("PC closed, cannot add track");return this._pc.addTrack(e)}setTrackCodecBitrate(e){this.trackBitrates.push(e)}setConfiguration(e){var A;if(!this._pc)throw new Be("PC closed, cannot configure");return(A=this._pc)===null||A===void 0?void 0:A.setConfiguration(e)}canRemoveTrack(){var e;return!!(!((e=this._pc)===null||e===void 0)&&e.removeTrack)}removeTrack(e){var A;return(A=this._pc)===null||A===void 0?void 0:A.removeTrack(e)}getConnectionState(){var e,A;return(A=(e=this._pc)===null||e===void 0?void 0:e.connectionState)!==null&&A!==void 0?A:"closed"}getICEConnectionState(){var e,A;return(A=(e=this._pc)===null||e===void 0?void 0:e.iceConnectionState)!==null&&A!==void 0?A:"closed"}getSignallingState(){var e,A;return(A=(e=this._pc)===null||e===void 0?void 0:e.signalingState)!==null&&A!==void 0?A:"closed"}getTransceivers(){var e,A;return(A=(e=this._pc)===null||e===void 0?void 0:e.getTransceivers())!==null&&A!==void 0?A:[]}getSenders(){var e,A;return(A=(e=this._pc)===null||e===void 0?void 0:e.getSenders())!==null&&A!==void 0?A:[]}getLocalDescription(){var e;return(e=this._pc)===null||e===void 0?void 0:e.localDescription}getRemoteDescription(){var e;return(e=this.pc)===null||e===void 0?void 0:e.remoteDescription}getStats(){return this.pc.getStats()}getConnectedAddress(){return m(this,void 0,void 0,function*(){var e;if(!this._pc)return;let A="";const n=new Map,i=new Map;if((yield this._pc.getStats()).forEach(o=>{switch(o.type){case"transport":A=o.selectedCandidatePairId;break;case"candidate-pair":A===""&&o.selected&&(A=o.id),n.set(o.id,o);break;case"remote-candidate":i.set(o.id,"".concat(o.address,":").concat(o.port));break}}),A==="")return;const s=(e=n.get(A))===null||e===void 0?void 0:e.remoteCandidateId;if(s!==void 0)return i.get(s)})}setMungedSDP(e,A,n){return m(this,void 0,void 0,function*(){if(A){const i=e.sdp;e.sdp=A;try{this.log.debug("setting munged ".concat(n?"remote":"local"," description"),this.logContext),n?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e);return}catch(r){this.log.warn("not able to set ".concat(e.type,", falling back to unmodified sdp"),Object.assign(Object.assign({},this.logContext),{error:r,sdp:A})),e.sdp=i}}try{n?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e)}catch(i){let r="unknown error";i instanceof Error?r=i.message:typeof i=="string"&&(r=i);const s={error:r,sdp:e.sdp};throw!n&&this.pc.remoteDescription&&(s.remoteSdp=this.pc.remoteDescription),this.log.error("unable to set ".concat(e.type),Object.assign(Object.assign({},this.logContext),{fields:s})),new Ts(r)}})}ensureVideoDDExtensionForSVC(e,A){var n,i;if(!((n=e.ext)===null||n===void 0?void 0:n.some(s=>s.uri===Il))){if(this.ddExtID===0){let s=0;A.media.forEach(o=>{var a;o.type==="video"&&((a=o.ext)===null||a===void 0||a.forEach(c=>{c.value>s&&(s=c.value)}))}),this.ddExtID=s+1}(i=e.ext)===null||i===void 0||i.push({value:this.ddExtID,uri:Il})}}}function zl(t,e,A){let n=0;t.rtp.some(i=>i.codec==="opus"?(n=i.payload,!0):!1),n>0&&(t.rtcpFb||(t.rtcpFb=[]),A.includes(t.mid)&&!t.rtcpFb.some(i=>i.payload===n&&i.type==="nack")&&t.rtcpFb.push({payload:n,type:"nack"}),e.includes(t.mid)&&t.fmtp.some(i=>i.payload===n?(i.config.includes("stereo=1")||(i.config+=";stereo=1"),!0):!1))}function Vp(t){var e;const A=[],n=[],i=XA.parse((e=t.sdp)!==null&&e!==void 0?e:"");let r=0;return i.media.forEach(s=>{var o;s.type==="audio"&&(s.rtp.some(a=>a.codec==="opus"?(r=a.payload,!0):!1),!((o=s.rtcpFb)===null||o===void 0)&&o.some(a=>a.payload===r&&a.type==="nack")&&n.push(s.mid),s.fmtp.some(a=>a.payload===r?(a.config.includes("sprop-stereo=1")&&A.push(s.mid),!0):!1))}),{stereoMids:A,nackMids:n}}function Zl(t){if(t.connection){const e=t.connection.ip.indexOf(":")>=0;(t.connection.version===4&&e||t.connection.version===6&&!e)&&(t.connection.ip="0.0.0.0",t.connection.version=4)}}const Ao="vp8",Gp={audioPreset:Rs.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:Ps.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:Ao,backupCodec:!0},eu={deviceId:{ideal:"default"},autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},Au={deviceId:{ideal:"default"},resolution:yn.h720.resolution},jp={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new Lg,disconnectOnPageLeave:!0,webAudioMix:!1},to={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};var ce;(function(t){t[t.NEW=0]="NEW",t[t.CONNECTING=1]="CONNECTING",t[t.CONNECTED=2]="CONNECTED",t[t.FAILED=3]="FAILED",t[t.CLOSING=4]="CLOSING",t[t.CLOSED=5]="CLOSED"})(ce||(ce={}));class Wp{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}constructor(e,A,n){var i;this.peerConnectionTimeout=to.peerConnectionTimeout,this.log=K,this.updateState=()=>{var r;const s=this.state,o=this.requiredTransports.map(a=>a.getConnectionState());o.every(a=>a==="connected")?this.state=ce.CONNECTED:o.some(a=>a==="failed")?this.state=ce.FAILED:o.some(a=>a==="connecting")?this.state=ce.CONNECTING:o.every(a=>a==="closed")?this.state=ce.CLOSED:o.some(a=>a==="closed")?this.state=ce.CLOSING:o.every(a=>a==="new")&&(this.state=ce.NEW),s!==this.state&&(this.log.debug("pc state change: from ".concat(ce[s]," to ").concat(ce[this.state]),this.logContext),(r=this.onStateChange)===null||r===void 0||r.call(this,this.state,this.publisher.getConnectionState(),this.subscriber.getConnectionState()))},this.log=TA((i=n.loggerName)!==null&&i!==void 0?i:sA.PCManager),this.loggerOptions=n,this.isPublisherConnectionRequired=!A,this.isSubscriberConnectionRequired=A,this.publisher=new ql(e,n),this.subscriber=new ql(e,n),this.publisher.onConnectionStateChange=this.updateState,this.subscriber.onConnectionStateChange=this.updateState,this.publisher.onIceConnectionStateChange=this.updateState,this.subscriber.onIceConnectionStateChange=this.updateState,this.publisher.onSignalingStatechange=this.updateState,this.subscriber.onSignalingStatechange=this.updateState,this.publisher.onIceCandidate=r=>{var s;(s=this.onIceCandidate)===null||s===void 0||s.call(this,r,rA.PUBLISHER)},this.subscriber.onIceCandidate=r=>{var s;(s=this.onIceCandidate)===null||s===void 0||s.call(this,r,rA.SUBSCRIBER)},this.subscriber.onDataChannel=r=>{var s;(s=this.onDataChannel)===null||s===void 0||s.call(this,r)},this.subscriber.onTrack=r=>{var s;(s=this.onTrack)===null||s===void 0||s.call(this,r)},this.publisher.onOffer=r=>{var s;(s=this.onPublisherOffer)===null||s===void 0||s.call(this,r)},this.state=ce.NEW,this.connectionLock=new De,this.remoteOfferLock=new De}get logContext(){var e,A;return Object.assign({},(A=(e=this.loggerOptions).loggerContextCb)===null||A===void 0?void 0:A.call(e))}requirePublisher(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.isPublisherConnectionRequired=e,this.updateState()}requireSubscriber(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.isSubscriberConnectionRequired=e,this.updateState()}createAndSendPublisherOffer(e){return this.publisher.createAndSendOffer(e)}setPublisherAnswer(e){return this.publisher.setRemoteDescription(e)}removeTrack(e){return this.publisher.removeTrack(e)}close(){return m(this,void 0,void 0,function*(){if(this.publisher&&this.publisher.getSignallingState()!=="closed"){const e=this.publisher;for(const A of e.getSenders())try{e.canRemoveTrack()&&e.removeTrack(A)}catch(n){this.log.warn("could not removeTrack",Object.assign(Object.assign({},this.logContext),{error:n}))}}yield Promise.all([this.publisher.close(),this.subscriber.close()]),this.updateState()})}triggerIceRestart(){return m(this,void 0,void 0,function*(){this.subscriber.restartingIce=!0,this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))})}addIceCandidate(e,A){return m(this,void 0,void 0,function*(){A===rA.PUBLISHER?yield this.publisher.addIceCandidate(e):yield this.subscriber.addIceCandidate(e)})}createSubscriberAnswerFromOffer(e){return m(this,void 0,void 0,function*(){this.log.debug("received server offer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type,sdp:e.sdp,signalingState:this.subscriber.getSignallingState().toString()}));const A=yield this.remoteOfferLock.lock();try{return yield this.subscriber.setRemoteDescription(e),yield this.subscriber.createAndSetAnswer()}finally{A()}})}updateConfiguration(e,A){this.publisher.setConfiguration(e),this.subscriber.setConfiguration(e),A&&this.triggerIceRestart()}ensurePCTransportConnection(e,A){return m(this,void 0,void 0,function*(){var n;const i=yield this.connectionLock.lock();try{this.isPublisherConnectionRequired&&this.publisher.getConnectionState()!=="connected"&&this.publisher.getConnectionState()!=="connecting"&&(this.log.debug("negotiation required, start negotiating",this.logContext),this.publisher.negotiate()),yield Promise.all((n=this.requiredTransports)===null||n===void 0?void 0:n.map(r=>this.ensureTransportConnected(r,e,A)))}finally{i()}})}negotiate(e){return m(this,void 0,void 0,function*(){return new Promise((A,n)=>m(this,void 0,void 0,function*(){const i=setTimeout(()=>{n("negotiation timed out")},this.peerConnectionTimeout),r=()=>{clearTimeout(i),n("negotiation aborted")};e.signal.addEventListener("abort",r),this.publisher.once($t.NegotiationStarted,()=>{e.signal.aborted||this.publisher.once($t.NegotiationComplete,()=>{clearTimeout(i),A()})}),yield this.publisher.negotiate(s=>{clearTimeout(i),n(s)})}))})}addPublisherTransceiver(e,A){return this.publisher.addTransceiver(e,A)}addPublisherTrack(e){return this.publisher.addTrack(e)}createPublisherDataChannel(e,A){return this.publisher.createDataChannel(e,A)}getConnectedAddress(e){return e===rA.PUBLISHER?this.publisher.getConnectedAddress():e===rA.SUBSCRIBER?this.publisher.getConnectedAddress():this.requiredTransports[0].getConnectedAddress()}get requiredTransports(){const e=[];return this.isPublisherConnectionRequired&&e.push(this.publisher),this.isSubscriberConnectionRequired&&e.push(this.subscriber),e}ensureTransportConnected(e,A){return m(this,arguments,void 0,function(n,i){var r=this;let s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.peerConnectionTimeout;return function*(){if(n.getConnectionState()!=="connected")return new Promise((a,c)=>m(r,void 0,void 0,function*(){const l=()=>{this.log.warn("abort transport connection",this.logContext),ye.clearTimeout(u),c(new z("room connection has been cancelled",G.Cancelled))};i!=null&&i.signal.aborted&&l(),i==null||i.signal.addEventListener("abort",l);const u=ye.setTimeout(()=>{i==null||i.signal.removeEventListener("abort",l),c(new z("could not establish pc connection",G.InternalError))},s);for(;this.state!==ce.CONNECTED;)if(yield Oe(50),i!=null&&i.signal.aborted){c(new z("room connection has been cancelled",G.Cancelled));return}ye.clearTimeout(u),i==null||i.signal.removeEventListener("abort",l),a()}))}()})}}class le extends Error{constructor(e,A,n){super(A),this.code=e,this.message=nu(A,le.MAX_MESSAGE_BYTES),this.data=n?nu(n,le.MAX_DATA_BYTES):void 0}static fromProto(e){return new le(e.code,e.message,e.data)}toProto(){return new Bc({code:this.code,message:this.message,data:this.data})}static builtIn(e,A){return new le(le.ErrorCode[e],le.ErrorMessage[e],A)}}le.MAX_MESSAGE_BYTES=256,le.MAX_DATA_BYTES=15360,le.ErrorCode={APPLICATION_ERROR:1500,CONNECTION_TIMEOUT:1501,RESPONSE_TIMEOUT:1502,RECIPIENT_DISCONNECTED:1503,RESPONSE_PAYLOAD_TOO_LARGE:1504,SEND_FAILED:1505,UNSUPPORTED_METHOD:1400,RECIPIENT_NOT_FOUND:1401,REQUEST_PAYLOAD_TOO_LARGE:1402,UNSUPPORTED_SERVER:1403,UNSUPPORTED_VERSION:1404},le.ErrorMessage={APPLICATION_ERROR:"Application error in method handler",CONNECTION_TIMEOUT:"Connection timeout",RESPONSE_TIMEOUT:"Response timeout",RECIPIENT_DISCONNECTED:"Recipient disconnected",RESPONSE_PAYLOAD_TOO_LARGE:"Response payload too large",SEND_FAILED:"Failed to send",UNSUPPORTED_METHOD:"Method not supported at destination",RECIPIENT_NOT_FOUND:"Recipient not found",REQUEST_PAYLOAD_TOO_LARGE:"Request payload too large",UNSUPPORTED_SERVER:"RPC not supported by server",UNSUPPORTED_VERSION:"Unsupported RPC version"};const tu=15360;function no(t){return new TextEncoder().encode(t).length}function nu(t,e){if(no(t)<=e)return t;let A=0,n=t.length;const i=new TextEncoder;for(;A<n;){const r=Math.floor((A+n+1)/2);i.encode(t.slice(0,r)).length<=e?A=r:n=r-1}return t.slice(0,A)}const io=2e3;function Pi(t,e){if(!e)return 0;let A,n;return"bytesReceived"in t?(A=t.bytesReceived,n=e.bytesReceived):"bytesSent"in t&&(A=t.bytesSent,n=e.bytesSent),A===void 0||n===void 0||t.timestamp===void 0||e.timestamp===void 0?0:(A-n)*8*1e3/(t.timestamp-e.timestamp)}const Jp=1e3;class iu extends E{get sender(){return this._sender}set sender(e){this._sender=e}get constraints(){return this._constraints}constructor(e,A,n){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,r=arguments.length>4?arguments[4]:void 0;super(e,A,r),this.manuallyStopped=!1,this._isUpstreamPaused=!1,this.handleTrackMuteEvent=()=>this.debouncedTrackMuteHandler().catch(()=>this.log.debug("track mute bounce got cancelled by an unmute event",this.logContext)),this.debouncedTrackMuteHandler=eo(()=>m(this,void 0,void 0,function*(){yield this.pauseUpstream()}),5e3),this.handleTrackUnmuteEvent=()=>m(this,void 0,void 0,function*(){this.debouncedTrackMuteHandler.cancel("unmute"),yield this.resumeUpstream()}),this.handleEnded=()=>{this.isInBackground&&(this.reacquireTrack=!0),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent),this.emit(k.Ended,this)},this.reacquireTrack=!1,this.providedByUser=i,this.muteLock=new De,this.pauseUpstreamLock=new De,this.processorLock=new De,this.restartLock=new De,this.setMediaStreamTrack(e,!0),this._constraints=e.getConstraints(),n&&(this._constraints=n)}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==E.Kind.Video)return;const{width:e,height:A}=this._mediaStreamTrack.getSettings();if(e&&A)return{width:e,height:A}}get isUpstreamPaused(){return this._isUpstreamPaused}get isUserProvided(){return this.providedByUser}get mediaStreamTrack(){var e,A;return(A=(e=this.processor)===null||e===void 0?void 0:e.processedTrack)!==null&&A!==void 0?A:this._mediaStreamTrack}get isLocal(){return!0}getSourceTrackSettings(){return this._mediaStreamTrack.getSettings()}setMediaStreamTrack(e,A){return m(this,void 0,void 0,function*(){var n;if(e===this._mediaStreamTrack&&!A)return;this._mediaStreamTrack&&(this.attachedElements.forEach(r=>{jt(this._mediaStreamTrack,r)}),this.debouncedTrackMuteHandler.cancel("new-track"),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent)),this.mediaStream=new MediaStream([e]),e&&(e.addEventListener("ended",this.handleEnded),e.addEventListener("mute",this.handleTrackMuteEvent),e.addEventListener("unmute",this.handleTrackUnmuteEvent),this._constraints=e.getConstraints());let i;if(this.processor&&e){const r=yield this.processorLock.lock();try{if(this.log.debug("restarting processor",this.logContext),this.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");this.processorElement&&(Gt(e,this.processorElement),this.processorElement.muted=!0),yield this.processor.restart({track:e,kind:this.kind,element:this.processorElement}),i=this.processor.processedTrack}finally{r()}}this.sender&&((n=this.sender.transport)===null||n===void 0?void 0:n.state)!=="closed"&&(yield this.sender.replaceTrack(i??e)),!this.providedByUser&&this._mediaStreamTrack!==e&&this._mediaStreamTrack.stop(),this._mediaStreamTrack=e,e&&(this._mediaStreamTrack.enabled=!this.isMuted,yield this.resumeUpstream(),this.attachedElements.forEach(r=>{Gt(i??e,r)}))})}waitForDimensions(){return m(this,arguments,void 0,function(){var e=this;let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Jp;return function*(){var n;if(e.kind===E.Kind.Audio)throw new Error("cannot get dimensions for audio tracks");((n=oA())===null||n===void 0?void 0:n.os)==="iOS"&&(yield Oe(10));const i=Date.now();for(;Date.now()-i<A;){const r=e.dimensions;if(r)return r;yield Oe(50)}throw new FA("unable to get track dimensions after timeout")}()})}setDeviceId(e){return m(this,void 0,void 0,function*(){return this._constraints.deviceId===e&&this._mediaStreamTrack.getSettings().deviceId===WA(e)||(this._constraints.deviceId=e,this.isMuted)?!0:(yield this.restartTrack(),WA(e)===this._mediaStreamTrack.getSettings().deviceId)})}getDeviceId(){return m(this,arguments,void 0,function(){var e=this;let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){if(e.source===E.Source.ScreenShare)return;const{deviceId:n,groupId:i}=e._mediaStreamTrack.getSettings(),r=e.kind===E.Kind.Audio?"audioinput":"videoinput";return A?Ce.getInstance().normalizeDeviceId(r,n,i):n}()})}mute(){return m(this,void 0,void 0,function*(){return this.setTrackMuted(!0),this})}unmute(){return m(this,void 0,void 0,function*(){return this.setTrackMuted(!1),this})}replaceTrack(e,A){return m(this,void 0,void 0,function*(){if(!this.sender)throw new FA("unable to replace an unpublished track");let n,i;return typeof A=="boolean"?n=A:A!==void 0&&(n=A.userProvidedTrack,i=A.stopProcessor),this.providedByUser=n??!0,this.log.debug("replace MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(e),i&&this.processor&&(yield this.stopProcessor()),this})}restart(e){return m(this,void 0,void 0,function*(){this.manuallyStopped=!1;const A=yield this.restartLock.lock();try{e||(e=this._constraints);const{deviceId:n,facingMode:i}=e,r=Dg(e,["deviceId","facingMode"]);this.log.debug("restarting track with constraints",Object.assign(Object.assign({},this.logContext),{constraints:e}));const s={audio:!1,video:!1};this.kind===E.Kind.Video?s.video=n||i?{deviceId:n,facingMode:i}:!0:s.audio=n?{deviceId:n}:!0,this.attachedElements.forEach(c=>{jt(this.mediaStreamTrack,c)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();const a=(yield navigator.mediaDevices.getUserMedia(s)).getTracks()[0];return yield a.applyConstraints(r),a.addEventListener("ended",this.handleEnded),this.log.debug("re-acquired MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(a),this._constraints=e,this.emit(k.Restarted,this),this.manuallyStopped&&(this.log.warn("track was stopped during a restart, stopping restarted track",this.logContext),this.stop()),this}finally{A()}})}setTrackMuted(e){this.log.debug("setting ".concat(this.kind," track ").concat(e?"muted":"unmuted"),this.logContext),!(this.isMuted===e&&this._mediaStreamTrack.enabled!==e)&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?k.Muted:k.Unmuted,this))}get needsReAcquisition(){return this._mediaStreamTrack.readyState!=="live"||this._mediaStreamTrack.muted||!this._mediaStreamTrack.enabled||this.reacquireTrack}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return m(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),Rl()&&(this.log.debug("visibility changed, is in Background: ".concat(this.isInBackground),this.logContext),!this.isInBackground&&this.needsReAcquisition&&!this.isUserProvided&&!this.isMuted&&(this.log.debug("track needs to be reacquired, restarting ".concat(this.source),this.logContext),yield this.restart(),this.reacquireTrack=!1))})}stop(){var e;this.manuallyStopped=!0,super.stop(),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent),(e=this.processor)===null||e===void 0||e.destroy(),this.processor=void 0}pauseUpstream(){return m(this,void 0,void 0,function*(){var e;const A=yield this.pauseUpstreamLock.lock();try{if(this._isUpstreamPaused===!0)return;if(!this.sender){this.log.warn("unable to pause upstream for an unpublished track",this.logContext);return}this._isUpstreamPaused=!0,this.emit(k.UpstreamPaused,this);const n=oA();if((n==null?void 0:n.name)==="Safari"&&Ct(n.version,"12.0")<0)throw new Ss("pauseUpstream is not supported on Safari < 12.");((e=this.sender.transport)===null||e===void 0?void 0:e.state)!=="closed"&&(yield this.sender.replaceTrack(null))}finally{A()}})}resumeUpstream(){return m(this,void 0,void 0,function*(){var e;const A=yield this.pauseUpstreamLock.lock();try{if(this._isUpstreamPaused===!1)return;if(!this.sender){this.log.warn("unable to resume upstream for an unpublished track",this.logContext);return}this._isUpstreamPaused=!1,this.emit(k.UpstreamResumed,this),((e=this.sender.transport)===null||e===void 0?void 0:e.state)!=="closed"&&(yield this.sender.replaceTrack(this.mediaStreamTrack))}finally{A()}})}getRTCStatsReport(){return m(this,void 0,void 0,function*(){var e;return!((e=this.sender)===null||e===void 0)&&e.getStats?yield this.sender.getStats():void 0})}setProcessor(e){return m(this,arguments,void 0,function(A){var n=this;let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var r;const s=yield n.processorLock.lock();try{n.log.debug("setting up processor",n.logContext);const o=document.createElement(n.kind),a={kind:n.kind,track:n._mediaStreamTrack,element:o,audioContext:n.audioContext};if(yield A.init(a),n.log.debug("processor initialized",n.logContext),n.processor&&(yield n.stopProcessor()),n.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");if(Gt(n._mediaStreamTrack,o),o.muted=!0,o.play().catch(c=>n.log.error("failed to play processor element",Object.assign(Object.assign({},n.logContext),{error:c}))),n.processor=A,n.processorElement=o,n.processor.processedTrack){for(const c of n.attachedElements)c!==n.processorElement&&i&&(jt(n._mediaStreamTrack,c),Gt(n.processor.processedTrack,c));yield(r=n.sender)===null||r===void 0?void 0:r.replaceTrack(n.processor.processedTrack)}n.emit(k.TrackProcessorUpdate,n.processor)}finally{s()}}()})}getProcessor(){return this.processor}stopProcessor(){return m(this,arguments,void 0,function(){var e=this;let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var n,i;e.processor&&(e.log.debug("stopping processor",e.logContext),(n=e.processor.processedTrack)===null||n===void 0||n.stop(),yield e.processor.destroy(),e.processor=void 0,A||((i=e.processorElement)===null||i===void 0||i.remove(),e.processorElement=void 0),yield e._mediaStreamTrack.applyConstraints(e._constraints),yield e.setMediaStreamTrack(e._mediaStreamTrack,!0),e.emit(k.TrackProcessorUpdate))}()})}}class Li extends iu{get enhancedNoiseCancellation(){return this.isKrispNoiseFilterEnabled}constructor(e,A){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,i=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;super(e,E.Kind.Audio,A,n,r),this.stopOnMute=!1,this.isKrispNoiseFilterEnabled=!1,this.monitorSender=()=>m(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let s;try{s=yield this.getSenderStats()}catch(o){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:o}));return}s&&this.prevStats&&(this._currentBitrate=Pi(s,this.prevStats)),this.prevStats=s}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(k.AudioTrackFeatureUpdate,this,iA.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(k.AudioTrackFeatureUpdate,this,iA.TF_ENHANCED_NOISE_CANCELLATION,!1)},this.audioContext=i,this.checkForSilence()}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return m(this,void 0,void 0,function*(){const A=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===E.Source.Microphone&&this.stopOnMute&&!this.isUserProvided&&(this.log.debug("stopping mic track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{A()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return m(this,void 0,void 0,function*(){const A=yield this.muteLock.lock();try{if(!this.isMuted)return this.log.debug("Track already unmuted",this.logContext),this;const n=this._constraints.deviceId&&this._mediaStreamTrack.getSettings().deviceId!==WA(this._constraints.deviceId);return this.source===E.Source.Microphone&&(this.stopOnMute||this._mediaStreamTrack.readyState==="ended"||n)&&!this.isUserProvided&&(this.log.debug("reacquiring mic track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this}finally{A()}})}restartTrack(e){return m(this,void 0,void 0,function*(){let A;if(e){const n=Js({audio:e});typeof n.audio!="boolean"&&(A=n.audio)}yield this.restart(A)})}restart(e){const A=Object.create(null,{restart:{get:()=>super.restart}});return m(this,void 0,void 0,function*(){const n=yield A.restart.call(this,e);return this.checkForSilence(),n})}startMonitor(){Me()&&(this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},io)))}setProcessor(e){return m(this,void 0,void 0,function*(){var A;const n=yield this.processorLock.lock();try{if(!BA()&&!this.audioContext)throw Error("Audio context needs to be set on LocalAudioTrack in order to enable processors");this.processor&&(yield this.stopProcessor());const i={kind:this.kind,track:this._mediaStreamTrack,audioContext:this.audioContext};this.log.debug("setting up audio processor ".concat(e.name),this.logContext),yield e.init(i),this.processor=e,this.processor.processedTrack&&(yield(A=this.sender)===null||A===void 0?void 0:A.replaceTrack(this.processor.processedTrack),this.processor.processedTrack.addEventListener("enable-lk-krisp-noise-filter",this.handleKrispNoiseFilterEnable),this.processor.processedTrack.addEventListener("disable-lk-krisp-noise-filter",this.handleKrispNoiseFilterDisable)),this.emit(k.TrackProcessorUpdate,this.processor)}finally{n()}})}setAudioContext(e){this.audioContext=e}getSenderStats(){return m(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return;const A=yield this.sender.getStats();let n;return A.forEach(i=>{i.type==="outbound-rtp"&&(n={type:"audio",streamId:i.id,packetsSent:i.packetsSent,packetsLost:i.packetsLost,bytesSent:i.bytesSent,timestamp:i.timestamp,roundTripTime:i.roundTripTime,jitter:i.jitter})}),n})}checkForSilence(){return m(this,void 0,void 0,function*(){const e=yield Nl(this);return e&&(this.isMuted||this.log.warn("silence detected on local audio track",this.logContext),this.emit(k.AudioSilenceDetected)),e})}}function Xp(t,e,A){switch(t.kind){case"audio":return new Li(t,e,!1,void 0,A);case"video":return new _i(t,e,!1,A);default:throw new FA("unsupported track type: ".concat(t.kind))}}const $p=Object.values(yn),Yp=Object.values(xs),qp=Object.values(Ps),zp=[yn.h180,yn.h360],Zp=[xs.h180,xs.h360],em=t=>[{scaleResolutionDownBy:2,fps:t.encoding.maxFramerate}].map(A=>{var n,i;return new q(Math.floor(t.width/A.scaleResolutionDownBy),Math.floor(t.height/A.scaleResolutionDownBy),Math.max(15e4,Math.floor(t.encoding.maxBitrate/(Math.pow(A.scaleResolutionDownBy,2)*(((n=t.encoding.maxFramerate)!==null&&n!==void 0?n:30)/((i=A.fps)!==null&&i!==void 0?i:30))))),A.fps,t.encoding.priority)}),ro=["q","h","f"];function so(t,e,A,n){var i,r;let s=n==null?void 0:n.videoEncoding;t&&(s=n==null?void 0:n.screenShareEncoding);const o=n==null?void 0:n.simulcast,a=n==null?void 0:n.scalabilityMode,c=n==null?void 0:n.videoCodec;if(!s&&!o&&!a||!e||!A)return[{}];s||(s=tm(t,e,A,c),K.debug("using video encoding",s));const l=s.maxFramerate,u=new q(e,A,s.maxBitrate,s.maxFramerate,s.priority);if(a&&bn(c)){const g=new Di(a),f=[];if(g.spatial>3)throw new Error("unsupported scalabilityMode: ".concat(a));const p=oA();if(jA()||BA()||(p==null?void 0:p.name)==="Chrome"&&Ct(p==null?void 0:p.version,"113")<0){const B=g.suffix=="h"?2:3;for(let y=0;y<g.spatial;y+=1)f.push({rid:ro[2-y],maxBitrate:s.maxBitrate/Math.pow(B,y),maxFramerate:u.encoding.maxFramerate});f[0].scalabilityMode=a}else f.push({maxBitrate:s.maxBitrate,maxFramerate:u.encoding.maxFramerate,scalabilityMode:a});return u.encoding.priority&&(f[0].priority=u.encoding.priority,f[0].networkPriority=u.encoding.priority),K.debug("using svc encoding",{encodings:f}),f}if(!o)return[s];let d=[];t?d=(i=su(n==null?void 0:n.screenShareSimulcastLayers))!==null&&i!==void 0?i:ru(t,u):d=(r=su(n==null?void 0:n.videoSimulcastLayers))!==null&&r!==void 0?r:ru(t,u);let h;if(d.length>0){const g=d[0];d.length>1&&([,h]=d);const f=Math.max(e,A);if(f>=960&&h)return oo(e,A,[g,h,u],l);if(f>=480)return oo(e,A,[g,u],l)}return oo(e,A,[u])}function Am(t,e,A){var n,i,r,s;if(!A.backupCodec||A.backupCodec===!0||A.backupCodec.codec===A.videoCodec)return;e!==A.backupCodec.codec&&K.warn("requested a different codec than specified as backup",{serverRequested:e,backup:A.backupCodec.codec}),A.videoCodec=e,A.videoEncoding=A.backupCodec.encoding;const o=t.mediaStreamTrack.getSettings(),a=(n=o.width)!==null&&n!==void 0?n:(i=t.dimensions)===null||i===void 0?void 0:i.width,c=(r=o.height)!==null&&r!==void 0?r:(s=t.dimensions)===null||s===void 0?void 0:s.height;return t.source===E.Source.ScreenShare&&A.simulcast&&(A.simulcast=!1),so(t.source===E.Source.ScreenShare,a,c,A)}function tm(t,e,A,n){const i=nm(t,e,A);let{encoding:r}=i[0];const s=Math.max(e,A);for(let o=0;o<i.length;o+=1){const a=i[o];if(r=a.encoding,a.width>=s)break}if(n)switch(n){case"av1":r=Object.assign({},r),r.maxBitrate=r.maxBitrate*.7;break;case"vp9":r=Object.assign({},r),r.maxBitrate=r.maxBitrate*.85;break}return r}function nm(t,e,A){if(t)return qp;const n=e>A?e/A:A/e;return Math.abs(n-16/9)<Math.abs(n-4/3)?$p:Yp}function ru(t,e){if(t)return em(e);const{width:A,height:n}=e,i=A>n?A/n:n/A;return Math.abs(i-16/9)<Math.abs(i-4/3)?zp:Zp}function oo(t,e,A,n){const i=[];if(A.forEach((r,s)=>{if(s>=ro.length)return;const o=Math.min(t,e),c={rid:ro[s],scaleResolutionDownBy:Math.max(1,o/Math.min(r.width,r.height)),maxBitrate:r.encoding.maxBitrate},l=n&&r.encoding.maxFramerate?Math.min(n,r.encoding.maxFramerate):r.encoding.maxFramerate;l&&(c.maxFramerate=l);const u=Wt()||s===0;r.encoding.priority&&u&&(c.priority=r.encoding.priority,c.networkPriority=r.encoding.priority),i.push(c)}),BA()&&Pl()==="ios"){let r;i.forEach(o=>{r?o.maxFramerate&&o.maxFramerate>r&&(r=o.maxFramerate):r=o.maxFramerate});let s=!0;i.forEach(o=>{var a;o.maxFramerate!=r&&(s&&(s=!1,K.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),K.info('Setting framerate of encoding "'.concat((a=o.rid)!==null&&a!==void 0?a:"",'" to ').concat(r)),o.maxFramerate=r)})}return i}function su(t){if(t)return t.sort((e,A)=>{const{encoding:n}=e,{encoding:i}=A;return n.maxBitrate>i.maxBitrate?1:n.maxBitrate<i.maxBitrate?-1:n.maxBitrate===i.maxBitrate&&n.maxFramerate&&i.maxFramerate?n.maxFramerate>i.maxFramerate?1:-1:0})}class Di{constructor(e){const A=e.match(/^L(\d)T(\d)(h|_KEY|_KEY_SHIFT){0,1}$/);if(!A)throw new Error("invalid scalability mode");if(this.spatial=parseInt(A[1]),this.temporal=parseInt(A[2]),A.length>3)switch(A[3]){case"h":case"_KEY":case"_KEY_SHIFT":this.suffix=A[3]}}toString(){var e;return"L".concat(this.spatial,"T").concat(this.temporal).concat((e=this.suffix)!==null&&e!==void 0?e:"")}}function im(t){return t.source===E.Source.ScreenShare||t.constraints.height&&WA(t.constraints.height)>=1080?"maintain-resolution":"balanced"}const rm=5e3;class _i extends iu{get sender(){return this._sender}set sender(e){this._sender=e,this.degradationPreference&&this.setDegradationPreference(this.degradationPreference)}constructor(e,A){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,i=arguments.length>3?arguments[3]:void 0;super(e,E.Kind.Video,A,n,i),this.simulcastCodecs=new Map,this.degradationPreference="balanced",this.monitorSender=()=>m(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let r;try{r=yield this.getSenderStats()}catch(o){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:o}));return}const s=new Map(r.map(o=>[o.rid,o]));if(this.prevStats){let o=0;s.forEach((a,c)=>{var l;const u=(l=this.prevStats)===null||l===void 0?void 0:l.get(c);o+=Pi(a,u)}),this._currentBitrate=o}this.prevStats=s}),this.senderLock=new De}get isSimulcast(){return!!(this.sender&&this.sender.getParameters().encodings.length>1)}startMonitor(e){var A;if(this.signalClient=e,!Me())return;const n=(A=this.sender)===null||A===void 0?void 0:A.getParameters();n&&(this.encodings=n.encodings),!this.monitorInterval&&(this.monitorInterval=setInterval(()=>{this.monitorSender()},io))}stop(){this._mediaStreamTrack.getConstraints(),this.simulcastCodecs.forEach(e=>{e.mediaStreamTrack.stop()}),super.stop()}pauseUpstream(){const e=Object.create(null,{pauseUpstream:{get:()=>super.pauseUpstream}});return m(this,void 0,void 0,function*(){var A,n,i,r,s;yield e.pauseUpstream.call(this);try{for(var o=!0,a=NA(this.simulcastCodecs.values()),c;c=yield a.next(),A=c.done,!A;o=!0)r=c.value,o=!1,yield(s=r.sender)===null||s===void 0?void 0:s.replaceTrack(null)}catch(l){n={error:l}}finally{try{!o&&!A&&(i=a.return)&&(yield i.call(a))}finally{if(n)throw n.error}}})}resumeUpstream(){const e=Object.create(null,{resumeUpstream:{get:()=>super.resumeUpstream}});return m(this,void 0,void 0,function*(){var A,n,i,r,s;yield e.resumeUpstream.call(this);try{for(var o=!0,a=NA(this.simulcastCodecs.values()),c;c=yield a.next(),A=c.done,!A;o=!0){r=c.value,o=!1;const l=r;yield(s=l.sender)===null||s===void 0?void 0:s.replaceTrack(l.mediaStreamTrack)}}catch(l){n={error:l}}finally{try{!o&&!A&&(i=a.return)&&(yield i.call(a))}finally{if(n)throw n.error}}})}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return m(this,void 0,void 0,function*(){const A=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===E.Source.Camera&&!this.isUserProvided&&(this.log.debug("stopping camera track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{A()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return m(this,void 0,void 0,function*(){const A=yield this.muteLock.lock();try{return this.isMuted?(this.source===E.Source.Camera&&!this.isUserProvided&&(this.log.debug("reacquiring camera track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this):(this.log.debug("Track already unmuted",this.logContext),this)}finally{A()}})}setTrackMuted(e){super.setTrackMuted(e);for(const A of this.simulcastCodecs.values())A.mediaStreamTrack.enabled=!e}getSenderStats(){return m(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return[];const A=[],n=yield this.sender.getStats();return n.forEach(i=>{var r;if(i.type==="outbound-rtp"){const s={type:"video",streamId:i.id,frameHeight:i.frameHeight,frameWidth:i.frameWidth,framesPerSecond:i.framesPerSecond,framesSent:i.framesSent,firCount:i.firCount,pliCount:i.pliCount,nackCount:i.nackCount,packetsSent:i.packetsSent,bytesSent:i.bytesSent,qualityLimitationReason:i.qualityLimitationReason,qualityLimitationDurations:i.qualityLimitationDurations,qualityLimitationResolutionChanges:i.qualityLimitationResolutionChanges,rid:(r=i.rid)!==null&&r!==void 0?r:i.id,retransmittedPacketsSent:i.retransmittedPacketsSent,targetBitrate:i.targetBitrate,timestamp:i.timestamp},o=n.get(i.remoteId);o&&(s.jitter=o.jitter,s.packetsLost=o.packetsLost,s.roundTripTime=o.roundTripTime),A.push(s)}}),A.sort((i,r)=>{var s,o;return((s=r.frameWidth)!==null&&s!==void 0?s:0)-((o=i.frameWidth)!==null&&o!==void 0?o:0)}),A})}setPublishingQuality(e){const A=[];for(let n=$e.LOW;n<=$e.HIGH;n+=1)A.push(new gs({quality:n,enabled:n<=e}));this.log.debug("setting publishing quality. max quality ".concat(e),this.logContext),this.setPublishingLayers(A)}restartTrack(e){return m(this,void 0,void 0,function*(){var A,n,i,r,s;let o;if(e){const u=Js({video:e});typeof u.video!="boolean"&&(o=u.video)}yield this.restart(o);try{for(var a=!0,c=NA(this.simulcastCodecs.values()),l;l=yield c.next(),A=l.done,!A;a=!0){r=l.value,a=!1;const u=r;u.sender&&((s=u.sender.transport)===null||s===void 0?void 0:s.state)!=="closed"&&(u.mediaStreamTrack=this.mediaStreamTrack.clone(),yield u.sender.replaceTrack(u.mediaStreamTrack))}}catch(u){n={error:u}}finally{try{!a&&!A&&(i=c.return)&&(yield i.call(c))}finally{if(n)throw n.error}}})}setProcessor(e){const A=Object.create(null,{setProcessor:{get:()=>super.setProcessor}});return m(this,arguments,void 0,function(n){var i=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var s,o,a,c,l,u;if(yield A.setProcessor.call(i,n,r),!((l=i.processor)===null||l===void 0)&&l.processedTrack)try{for(var d=!0,h=NA(i.simulcastCodecs.values()),g;g=yield h.next(),s=g.done,!s;d=!0)c=g.value,d=!1,yield(u=c.sender)===null||u===void 0?void 0:u.replaceTrack(i.processor.processedTrack)}catch(f){o={error:f}}finally{try{!d&&!s&&(a=h.return)&&(yield a.call(h))}finally{if(o)throw o.error}}}()})}setDegradationPreference(e){return m(this,void 0,void 0,function*(){if(this.degradationPreference=e,this.sender)try{this.log.debug("setting degradationPreference to ".concat(e),this.logContext);const A=this.sender.getParameters();A.degradationPreference=e,this.sender.setParameters(A)}catch(A){this.log.warn("failed to set degradationPreference",Object.assign({error:A},this.logContext))}})}addSimulcastTrack(e,A){if(this.simulcastCodecs.has(e)){this.log.error("".concat(e," already added, skipping adding simulcast codec"),this.logContext);return}const n={codec:e,mediaStreamTrack:this.mediaStreamTrack.clone(),sender:void 0,encodings:A};return this.simulcastCodecs.set(e,n),n}setSimulcastTrackSender(e,A){const n=this.simulcastCodecs.get(e);n&&(n.sender=A,setTimeout(()=>{this.subscribedCodecs&&this.setPublishingCodecs(this.subscribedCodecs)},rm))}setPublishingCodecs(e){return m(this,void 0,void 0,function*(){var A,n,i,r,s,o,a;if(this.log.debug("setting publishing codecs",Object.assign(Object.assign({},this.logContext),{codecs:e,currentCodec:this.codec})),!this.codec&&e.length>0)return yield this.setPublishingLayers(e[0].qualities),[];this.subscribedCodecs=e;const c=[];try{for(A=!0,n=NA(e);i=yield n.next(),r=i.done,!r;A=!0){a=i.value,A=!1;const l=a;if(!this.codec||this.codec===l.codec)yield this.setPublishingLayers(l.qualities);else{const u=this.simulcastCodecs.get(l.codec);if(this.log.debug("try setPublishingCodec for ".concat(l.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:u})),!u||!u.sender){for(const d of l.qualities)if(d.enabled){c.push(l.codec);break}}else u.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(l.codec),this.logContext),yield ou(u.sender,u.encodings,l.qualities,this.senderLock,this.log,this.logContext))}}}catch(l){s={error:l}}finally{try{!A&&!r&&(o=n.return)&&(yield o.call(n))}finally{if(s)throw s.error}}return c})}setPublishingLayers(e){return m(this,void 0,void 0,function*(){this.log.debug("setting publishing layers",Object.assign(Object.assign({},this.logContext),{qualities:e})),!(!this.sender||!this.encodings)&&(yield ou(this.sender,this.encodings,e,this.senderLock,this.log,this.logContext))})}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return m(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),Rl()&&this.isInBackground&&this.source===E.Source.Camera&&(this._mediaStreamTrack.enabled=!1)})}}function ou(t,e,A,n,i,r){return m(this,void 0,void 0,function*(){const s=yield n.lock();i.debug("setPublishingLayersForSender",Object.assign(Object.assign({},r),{sender:t,qualities:A,senderEncodings:e}));try{const o=t.getParameters(),{encodings:a}=o;if(!a)return;if(a.length!==e.length){i.warn("cannot set publishing layers, encodings mismatch",Object.assign(Object.assign({},r),{encodings:a,senderEncodings:e}));return}let c=!1;const l=oA();if((l==null?void 0:l.name)==="Chrome"&&Ct(l==null?void 0:l.version,"133")>0&&a[0].scalabilityMode){const d=a[0],h=new Di(d.scalabilityMode);let g=Ht.OFF;if(A.forEach(f=>{f.enabled&&(g===Ht.OFF||f.quality>g)&&(g=f.quality)}),g===Ht.OFF)d.active&&(d.active=!1,c=!0);else if(!d.active||h.spatial!==g+1){c=!0,d.active=!0;const f=new Di(e[0].scalabilityMode);h.spatial=g+1,h.suffix=f.suffix,h.spatial===1&&(h.suffix=void 0),d.scalabilityMode=h.toString(),d.scaleResolutionDownBy=Math.pow(2,2-g),e[0].maxBitrate&&(d.maxBitrate=e[0].maxBitrate/(d.scaleResolutionDownBy*d.scaleResolutionDownBy))}}else a.forEach((d,h)=>{var g;let f=(g=d.rid)!==null&&g!==void 0?g:"";f===""&&(f="q");const p=au(f),B=A.find(y=>y.quality===p);B&&d.active!==B.enabled&&(c=!0,d.active=B.enabled,i.debug("setting layer ".concat(B.quality," to ").concat(d.active?"enabled":"disabled"),r),Wt()&&(B.enabled?(d.scaleResolutionDownBy=e[h].scaleResolutionDownBy,d.maxBitrate=e[h].maxBitrate,d.maxFrameRate=e[h].maxFrameRate):(d.scaleResolutionDownBy=4,d.maxBitrate=10,d.maxFrameRate=2)))});c&&(o.encodings=a,i.debug("setting encodings",Object.assign(Object.assign({},r),{encodings:o.encodings})),yield t.setParameters(o))}finally{s()}})}function au(t){switch(t){case"f":return $e.HIGH;case"h":return $e.MEDIUM;case"q":return $e.LOW;default:return $e.HIGH}}function cu(t,e,A,n){if(!A)return[new mt({quality:$e.HIGH,width:t,height:e,bitrate:0,ssrc:0})];if(n){const i=A[0].scalabilityMode,r=new Di(i),s=[],o=r.suffix=="h"?1.5:2,a=r.suffix=="h"?2:3;for(let c=0;c<r.spatial;c+=1)s.push(new mt({quality:Math.min($e.HIGH,r.spatial-1)-c,width:Math.ceil(t/Math.pow(o,c)),height:Math.ceil(e/Math.pow(o,c)),bitrate:A[0].maxBitrate?Math.ceil(A[0].maxBitrate/Math.pow(a,c)):0,ssrc:0}));return s}return A.map(i=>{var r,s,o;const a=(r=i.scaleResolutionDownBy)!==null&&r!==void 0?r:1;let c=au((s=i.rid)!==null&&s!==void 0?s:"");return new mt({quality:c,width:Math.ceil(t/a),height:Math.ceil(e/a),bitrate:(o=i.maxBitrate)!==null&&o!==void 0?o:0,ssrc:0})})}const lu="_lossy",uu="_reliable",sm=2*1e3,ao="leave-reconnect";var cA;(function(t){t[t.New=0]="New",t[t.Connected=1]="Connected",t[t.Disconnected=2]="Disconnected",t[t.Reconnecting=3]="Reconnecting",t[t.Closed=4]="Closed"})(cA||(cA={}));class om extends mA.EventEmitter{get isClosed(){return this._isClosed}get pendingReconnect(){return!!this.reconnectTimeout}constructor(e){var A;super(),this.options=e,this.rtcConfig={},this.peerConnectionTimeout=to.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.subscriberPrimary=!1,this.pcState=cA.New,this._isClosed=!0,this.pendingTrackResolvers={},this.reconnectAttempts=0,this.reconnectStart=0,this.attemptingReconnect=!1,this.joinAttempts=0,this.maxJoinAttempts=1,this.shouldFailNext=!1,this.log=K,this.handleDataChannel=n=>m(this,[n],void 0,function(i){var r=this;let{channel:s}=i;return function*(){if(s){if(s.label===uu)r.reliableDCSub=s;else if(s.label===lu)r.lossyDCSub=s;else return;r.log.debug("on data channel ".concat(s.id,", ").concat(s.label),r.logContext),s.onmessage=r.handleDataMessage}}()}),this.handleDataMessage=n=>m(this,void 0,void 0,function*(){var i,r;const s=yield this.dataProcessLock.lock();try{let o;if(n.data instanceof ArrayBuffer)o=n.data;else if(n.data instanceof Blob)o=yield n.data.arrayBuffer();else{this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:n.data}));return}const a=He.fromBinary(new Uint8Array(o));((i=a.value)===null||i===void 0?void 0:i.case)==="speaker"?this.emit(I.ActiveSpeakersUpdate,a.value.value.speakers):(((r=a.value)===null||r===void 0?void 0:r.case)==="user"&&cm(a,a.value.value),this.emit(I.DataPacketReceived,a))}finally{s()}}),this.handleDataError=n=>{const r=n.currentTarget.maxRetransmits===0?"lossy":"reliable";if(n instanceof ErrorEvent&&n.error){const{error:s}=n.error;this.log.error("DataChannel error on ".concat(r,": ").concat(n.message),Object.assign(Object.assign({},this.logContext),{error:s}))}else this.log.error("Unknown DataChannel error on ".concat(r),Object.assign(Object.assign({},this.logContext),{event:n}))},this.handleBufferedAmountLow=n=>{const r=n.currentTarget.maxRetransmits===0?W.LOSSY:W.RELIABLE;this.updateAndEmitDCBufferStatus(r)},this.handleDisconnect=(n,i)=>{if(this._isClosed)return;this.log.warn("".concat(n," disconnected"),this.logContext),this.reconnectAttempts===0&&(this.reconnectStart=Date.now());const r=a=>{this.log.warn("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(a,"ms. giving up"),this.logContext),this.emit(I.Disconnected),this.close()},s=Date.now()-this.reconnectStart;let o=this.getNextRetryDelay({elapsedMs:s,retryCount:this.reconnectAttempts});if(o===null){r(s);return}n===ao&&(o=0),this.log.debug("reconnecting in ".concat(o,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider&&this.regionUrlProvider.updateToken(this.token),this.reconnectTimeout=ye.setTimeout(()=>this.attemptReconnect(i).finally(()=>this.reconnectTimeout=void 0),o)},this.waitForRestarted=()=>new Promise((n,i)=>{this.pcState===cA.Connected&&n();const r=()=>{this.off(I.Disconnected,s),n()},s=()=>{this.off(I.Restarted,r),i()};this.once(I.Restarted,r),this.once(I.Disconnected,s)}),this.updateAndEmitDCBufferStatus=n=>{const i=this.isBufferStatusLow(n);typeof i<"u"&&i!==this.dcBufferStatus.get(n)&&(this.dcBufferStatus.set(n,i),this.emit(I.DCBufferStatusChanged,i,n))},this.isBufferStatusLow=n=>{const i=this.dataChannelForKind(n);if(i)return i.bufferedAmount<=i.bufferedAmountLowThreshold},this.handleBrowserOnLine=()=>{this.client.currentState===Ae.RECONNECTING&&(this.clearReconnectTimeout(),this.attemptReconnect(Ot.RR_SIGNAL_DISCONNECTED))},this.log=TA((A=e.loggerName)!==null&&A!==void 0?A:sA.Engine),this.loggerOptions={loggerName:e.loggerName,loggerContextCb:()=>this.logContext},this.client=new $s(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.registerOnLineListener(),this.closingLock=new De,this.dataProcessLock=new De,this.dcBufferStatus=new Map([[W.LOSSY,!0],[W.RELIABLE,!0]]),this.client.onParticipantUpdate=n=>this.emit(I.ParticipantUpdate,n),this.client.onConnectionQuality=n=>this.emit(I.ConnectionQualityUpdate,n),this.client.onRoomUpdate=n=>this.emit(I.RoomUpdate,n),this.client.onSubscriptionError=n=>this.emit(I.SubscriptionError,n),this.client.onSubscriptionPermissionUpdate=n=>this.emit(I.SubscriptionPermissionUpdate,n),this.client.onSpeakersChanged=n=>this.emit(I.SpeakersChanged,n),this.client.onStreamStateUpdate=n=>this.emit(I.StreamStateChanged,n),this.client.onRequestResponse=n=>this.emit(I.SignalRequestResponse,n)}get logContext(){var e,A,n,i,r,s,o,a;return{room:(A=(e=this.latestJoinResponse)===null||e===void 0?void 0:e.room)===null||A===void 0?void 0:A.name,roomID:(i=(n=this.latestJoinResponse)===null||n===void 0?void 0:n.room)===null||i===void 0?void 0:i.sid,participant:(s=(r=this.latestJoinResponse)===null||r===void 0?void 0:r.participant)===null||s===void 0?void 0:s.identity,pID:(a=(o=this.latestJoinResponse)===null||o===void 0?void 0:o.participant)===null||a===void 0?void 0:a.sid}}join(e,A,n,i){return m(this,void 0,void 0,function*(){this.url=e,this.token=A,this.signalOpts=n,this.maxJoinAttempts=n.maxRetries;try{this.joinAttempts+=1,this.setupSignalClientCallbacks();const r=yield this.client.join(e,A,n,i);return this._isClosed=!1,this.latestJoinResponse=r,this.subscriberPrimary=r.subscriberPrimary,this.pcManager||(yield this.configure(r)),(!this.subscriberPrimary||r.fastPublish)&&this.negotiate(),this.clientConfiguration=r.clientConfiguration,setTimeout(()=>{this.emit(I.SignalConnected)},10),r}catch(r){if(r instanceof z&&r.reason===G.ServerUnreachable&&(this.log.warn("Couldn't connect to server, attempt ".concat(this.joinAttempts," of ").concat(this.maxJoinAttempts),this.logContext),this.joinAttempts<this.maxJoinAttempts))return this.join(e,A,n,i);throw r}})}close(){return m(this,void 0,void 0,function*(){const e=yield this.closingLock.lock();if(this.isClosed){e();return}try{this._isClosed=!0,this.joinAttempts=0,this.emit(I.Closing),this.removeAllListeners(),this.deregisterOnLineListener(),this.clearPendingReconnect(),yield this.cleanupPeerConnections(),yield this.cleanupClient()}finally{e()}})}cleanupPeerConnections(){return m(this,void 0,void 0,function*(){var e;yield(e=this.pcManager)===null||e===void 0?void 0:e.close(),this.pcManager=void 0;const A=n=>{n&&(n.close(),n.onbufferedamountlow=null,n.onclose=null,n.onclosing=null,n.onerror=null,n.onmessage=null,n.onopen=null)};A(this.lossyDC),A(this.lossyDCSub),A(this.reliableDC),A(this.reliableDCSub),this.lossyDC=void 0,this.lossyDCSub=void 0,this.reliableDC=void 0,this.reliableDCSub=void 0})}cleanupClient(){return m(this,void 0,void 0,function*(){yield this.client.close(),this.client.resetCallbacks()})}addTrack(e){if(this.pendingTrackResolvers[e.cid])throw new FA("a track with the same ID has already been published");return new Promise((A,n)=>{const i=setTimeout(()=>{delete this.pendingTrackResolvers[e.cid],n(new z("publication of local track timed out, no response from server",G.InternalError))},1e4);this.pendingTrackResolvers[e.cid]={resolve:r=>{clearTimeout(i),A(r)},reject:()=>{clearTimeout(i),n(new Error("Cancelled publication by calling unpublish"))}},this.client.sendAddTrack(e)})}removeTrack(e){if(e.track&&this.pendingTrackResolvers[e.track.id]){const{reject:A}=this.pendingTrackResolvers[e.track.id];A&&A(),delete this.pendingTrackResolvers[e.track.id]}try{return this.pcManager.removeTrack(e),!0}catch(A){this.log.warn("failed to remove track",Object.assign(Object.assign({},this.logContext),{error:A}))}return!1}updateMuteStatus(e,A){this.client.sendMuteTrack(e,A)}get dataSubscriberReadyState(){var e;return(e=this.reliableDCSub)===null||e===void 0?void 0:e.readyState}getConnectedServerAddress(){return m(this,void 0,void 0,function*(){var e;return(e=this.pcManager)===null||e===void 0?void 0:e.getConnectedAddress()})}setRegionUrlProvider(e){this.regionUrlProvider=e}configure(e){return m(this,void 0,void 0,function*(){var A,n;if(this.pcManager&&this.pcManager.currentState!==ce.NEW)return;this.participantSid=(A=e.participant)===null||A===void 0?void 0:A.sid;const i=this.makeRTCConfiguration(e);this.pcManager=new Wp(i,e.subscriberPrimary,this.loggerOptions),this.emit(I.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(r,s)=>{this.client.sendIceCandidate(r,s)},this.pcManager.onPublisherOffer=r=>{this.client.sendOffer(r)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(r,s,o)=>m(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(r),this.logContext),["closed","disconnected","failed"].includes(s)&&(this.publisherConnectionPromise=void 0),r===ce.CONNECTED){const l=this.pcState===cA.New;this.pcState=cA.Connected,l&&this.emit(I.Connected,e)}else r===ce.FAILED&&this.pcState===cA.Connected&&(this.pcState=cA.Disconnected,this.handleDisconnect("peerconnection failed",o==="failed"?Ot.RR_SUBSCRIBER_FAILED:Ot.RR_PUBLISHER_FAILED));const a=this.client.isDisconnected||this.client.currentState===Ae.RECONNECTING,c=[ce.FAILED,ce.CLOSING,ce.CLOSED].includes(r);a&&c&&!this._isClosed&&this.emit(I.Offline)}),this.pcManager.onTrack=r=>{this.emit(I.MediaTrackAdded,r.track,r.streams[0],r.receiver)},am((n=e.serverInfo)===null||n===void 0?void 0:n.protocol)||this.createDataChannels()})}setupSignalClientCallbacks(){this.client.onAnswer=e=>m(this,void 0,void 0,function*(){this.pcManager&&(this.log.debug("received server answer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type})),yield this.pcManager.setPublisherAnswer(e))}),this.client.onTrickle=(e,A)=>{this.pcManager&&(this.log.debug("got ICE candidate from peer",Object.assign(Object.assign({},this.logContext),{candidate:e,target:A})),this.pcManager.addIceCandidate(e,A))},this.client.onOffer=e=>m(this,void 0,void 0,function*(){if(!this.pcManager)return;const A=yield this.pcManager.createSubscriberAnswerFromOffer(e);this.client.sendAnswer(A)}),this.client.onLocalTrackPublished=e=>{var A;if(this.log.debug("received trackPublishedResponse",Object.assign(Object.assign({},this.logContext),{cid:e.cid,track:(A=e.track)===null||A===void 0?void 0:A.sid})),!this.pendingTrackResolvers[e.cid]){this.log.error("missing track resolver for ".concat(e.cid),Object.assign(Object.assign({},this.logContext),{cid:e.cid}));return}const{resolve:n}=this.pendingTrackResolvers[e.cid];delete this.pendingTrackResolvers[e.cid],n(e.track)},this.client.onLocalTrackUnpublished=e=>{this.emit(I.LocalTrackUnpublished,e)},this.client.onLocalTrackSubscribed=e=>{this.emit(I.LocalTrackSubscribed,e)},this.client.onTokenRefresh=e=>{this.token=e},this.client.onRemoteMuteChanged=(e,A)=>{this.emit(I.RemoteMute,e,A)},this.client.onSubscribedQualityUpdate=e=>{this.emit(I.SubscribedQualityUpdate,e)},this.client.onRoomMoved=e=>{var A;this.participantSid=(A=e.participant)===null||A===void 0?void 0:A.sid,this.emit(I.RoomMoved,e)},this.client.onClose=()=>{this.handleDisconnect("signal",Ot.RR_SIGNAL_DISCONNECTED)},this.client.onLeave=e=>{switch(this.log.debug("client leave request",Object.assign(Object.assign({},this.logContext),{reason:e==null?void 0:e.reason})),e.regions&&this.regionUrlProvider&&(this.log.debug("updating regions",this.logContext),this.regionUrlProvider.setServerReportedRegions(e.regions)),e.action){case Kt.DISCONNECT:this.emit(I.Disconnected,e==null?void 0:e.reason),this.close();break;case Kt.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(ao);break;case Kt.RESUME:this.handleDisconnect(ao)}}}makeRTCConfiguration(e){var A;const n=Object.assign({},this.rtcConfig);if(!((A=this.signalOpts)===null||A===void 0)&&A.e2eeEnabled&&(this.log.debug("E2EE - setting up transports with insertable streams",this.logContext),n.encodedInsertableStreams=!0),e.iceServers&&!n.iceServers){const i=[];e.iceServers.forEach(r=>{const s={urls:r.urls};r.username&&(s.username=r.username),r.credential&&(s.credential=r.credential),i.push(s)}),n.iceServers=i}return e.clientConfiguration&&e.clientConfiguration.forceRelay===vn.ENABLED&&(n.iceTransportPolicy="relay"),n.sdpSemantics="unified-plan",n.continualGatheringPolicy="gather_continually",n}createDataChannels(){this.pcManager&&(this.lossyDC&&(this.lossyDC.onmessage=null,this.lossyDC.onerror=null),this.reliableDC&&(this.reliableDC.onmessage=null,this.reliableDC.onerror=null),this.lossyDC=this.pcManager.createPublisherDataChannel(lu,{ordered:!1,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel(uu,{ordered:!0}),this.lossyDC.onmessage=this.handleDataMessage,this.reliableDC.onmessage=this.handleDataMessage,this.lossyDC.onerror=this.handleDataError,this.reliableDC.onerror=this.handleDataError,this.lossyDC.bufferedAmountLowThreshold=65535,this.reliableDC.bufferedAmountLowThreshold=65535,this.lossyDC.onbufferedamountlow=this.handleBufferedAmountLow,this.reliableDC.onbufferedamountlow=this.handleBufferedAmountLow)}createSender(e,A,n){return m(this,void 0,void 0,function*(){if(Ls())return yield this.createTransceiverRTCRtpSender(e,A,n);if(Ds())return this.log.warn("using add-track fallback",this.logContext),yield this.createRTCRtpSender(e.mediaStreamTrack);throw new Be("Required webRTC APIs not supported on this device")})}createSimulcastSender(e,A,n,i){return m(this,void 0,void 0,function*(){if(Ls())return this.createSimulcastTransceiverSender(e,A,n,i);if(Ds())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(e.mediaStreamTrack);throw new Be("Cannot stream on this device")})}createTransceiverRTCRtpSender(e,A,n){return m(this,void 0,void 0,function*(){if(!this.pcManager)throw new Be("publisher is closed");const i=[];e.mediaStream&&i.push(e.mediaStream),Xt(e)&&(e.codec=A.videoCodec);const r={direction:"sendonly",streams:i};return n&&(r.sendEncodings=n),(yield this.pcManager.addPublisherTransceiver(e.mediaStreamTrack,r)).sender})}createSimulcastTransceiverSender(e,A,n,i){return m(this,void 0,void 0,function*(){if(!this.pcManager)throw new Be("publisher is closed");const r={direction:"sendonly"};i&&(r.sendEncodings=i);const s=yield this.pcManager.addPublisherTransceiver(A.mediaStreamTrack,r);if(n.videoCodec)return e.setSimulcastTrackSender(n.videoCodec,s.sender),s.sender})}createRTCRtpSender(e){return m(this,void 0,void 0,function*(){if(!this.pcManager)throw new Be("publisher is closed");return this.pcManager.addPublisherTrack(e)})}attemptReconnect(e){return m(this,void 0,void 0,function*(){var A,n,i;if(!this._isClosed){if(this.attemptingReconnect){K.warn("already attempting reconnect, returning early",this.logContext);return}(((A=this.clientConfiguration)===null||A===void 0?void 0:A.resumeConnection)===vn.DISABLED||((i=(n=this.pcManager)===null||n===void 0?void 0:n.currentState)!==null&&i!==void 0?i:ce.NEW)===ce.NEW)&&(this.fullReconnectOnNext=!0);try{this.attemptingReconnect=!0,this.fullReconnectOnNext?yield this.restartConnection():yield this.resumeConnection(e),this.clearPendingReconnect(),this.fullReconnectOnNext=!1}catch(r){this.reconnectAttempts+=1;let s=!0;r instanceof Be?(this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:r})),s=!1):r instanceof Yt||(this.fullReconnectOnNext=!0),s?this.handleDisconnect("reconnect",Ot.RR_UNKNOWN):(this.log.info("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(Date.now()-this.reconnectStart,"ms. giving up"),this.logContext),this.emit(I.Disconnected),yield this.close())}finally{this.attemptingReconnect=!1}}})}getNextRetryDelay(e){try{return this.reconnectPolicy.nextRetryDelayInMs(e)}catch(A){this.log.warn("encountered error in reconnect policy",Object.assign(Object.assign({},this.logContext),{error:A}))}return null}restartConnection(e){return m(this,void 0,void 0,function*(){var A,n,i;try{if(!this.url||!this.token)throw new Be("could not reconnect, url or token not saved");this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(I.Restarting),this.client.isDisconnected||(yield this.client.sendLeave()),yield this.cleanupPeerConnections(),yield this.cleanupClient();let r;try{if(!this.signalOpts)throw this.log.warn("attempted connection restart, without signal options present",this.logContext),new Yt;r=yield this.join(e??this.url,this.token,this.signalOpts)}catch(s){throw s instanceof z&&s.reason===G.NotAllowed?new Be("could not reconnect, token might be expired"):new Yt}if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(this.client.setReconnected(),this.emit(I.SignalRestarted,r),yield this.waitForPCReconnected(),this.client.currentState!==Ae.CONNECTED)throw new Yt("Signal connection got severed during reconnect");(A=this.regionUrlProvider)===null||A===void 0||A.resetAttempts(),this.emit(I.Restarted)}catch(r){const s=yield(n=this.regionUrlProvider)===null||n===void 0?void 0:n.getNextBestRegionUrl();if(s){yield this.restartConnection(s);return}else throw(i=this.regionUrlProvider)===null||i===void 0||i.resetAttempts(),r}})}resumeConnection(e){return m(this,void 0,void 0,function*(){var A;if(!this.url||!this.token)throw new Be("could not reconnect, url or token not saved");if(!this.pcManager)throw new Be("publisher and subscriber connections unset");this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(I.Resuming);let n;try{this.setupSignalClientCallbacks(),n=yield this.client.reconnect(this.url,this.token,this.participantSid,e)}catch(i){let r="";throw i instanceof Error&&(r=i.message,this.log.error(i.message,Object.assign(Object.assign({},this.logContext),{error:i}))),i instanceof z&&i.reason===G.NotAllowed?new Be("could not reconnect, token might be expired"):i instanceof z&&i.reason===G.LeaveRequest?i:new Yt(r)}if(this.emit(I.SignalResumed),n){const i=this.makeRTCConfiguration(n);this.pcManager.updateConfiguration(i)}else this.log.warn("Did not receive reconnect response",this.logContext);if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(yield this.pcManager.triggerIceRestart(),yield this.waitForPCReconnected(),this.client.currentState!==Ae.CONNECTED)throw new Yt("Signal connection got severed during reconnect");this.client.setReconnected(),((A=this.reliableDC)===null||A===void 0?void 0:A.readyState)==="open"&&this.reliableDC.id===null&&this.createDataChannels(),this.emit(I.Resumed)})}waitForPCInitialConnection(e,A){return m(this,void 0,void 0,function*(){if(!this.pcManager)throw new Be("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(A,e)})}waitForPCReconnected(){return m(this,void 0,void 0,function*(){this.pcState=cA.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield Oe(sm),!this.pcManager)throw new Be("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=cA.Connected}catch(e){throw this.pcState=cA.Disconnected,new z("could not establish PC connection, ".concat(e.message),G.InternalError)}})}publishRpcResponse(e,A,n,i){return m(this,void 0,void 0,function*(){const r=new He({destinationIdentities:[e],kind:W.RELIABLE,value:{case:"rpcResponse",value:new mc({requestId:A,value:i?{case:"error",value:i.toProto()}:{case:"payload",value:n??""}})}});yield this.sendDataPacket(r,W.RELIABLE)})}publishRpcAck(e,A){return m(this,void 0,void 0,function*(){const n=new He({destinationIdentities:[e],kind:W.RELIABLE,value:{case:"rpcAck",value:new pc({requestId:A})}});yield this.sendDataPacket(n,W.RELIABLE)})}sendDataPacket(e,A){return m(this,void 0,void 0,function*(){const n=e.toBinary();yield this.ensurePublisherConnected(A);const i=this.dataChannelForKind(A);i&&i.send(n),this.updateAndEmitDCBufferStatus(A)})}waitForBufferStatusLow(e){return new Promise((A,n)=>m(this,void 0,void 0,function*(){if(this.isBufferStatusLow(e))A();else{const i=()=>n("Engine closed");for(this.once(I.Closing,i);!this.dcBufferStatus.get(e);)yield Oe(10);this.off(I.Closing,i),A()}}))}ensureDataTransportConnected(e){return m(this,arguments,void 0,function(A){var n=this;let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscriberPrimary;return function*(){var r;if(!n.pcManager)throw new Be("PC manager is closed");const s=i?n.pcManager.subscriber:n.pcManager.publisher,o=i?"Subscriber":"Publisher";if(!s)throw new z("".concat(o," connection not set"),G.InternalError);let a=!1;!i&&!n.dataChannelForKind(A,i)&&(n.createDataChannels(),a=!0),!a&&!i&&!n.pcManager.publisher.isICEConnected&&n.pcManager.publisher.getICEConnectionState()!=="checking"&&(a=!0),a&&n.negotiate();const c=n.dataChannelForKind(A,i);if((c==null?void 0:c.readyState)==="open")return;const l=new Date().getTime()+n.peerConnectionTimeout;for(;new Date().getTime()<l;){if(s.isICEConnected&&((r=n.dataChannelForKind(A,i))===null||r===void 0?void 0:r.readyState)==="open")return;yield Oe(50)}throw new z("could not establish ".concat(o," connection, state: ").concat(s.getICEConnectionState()),G.InternalError)}()})}ensurePublisherConnected(e){return m(this,void 0,void 0,function*(){this.publisherConnectionPromise||(this.publisherConnectionPromise=this.ensureDataTransportConnected(e,!1)),yield this.publisherConnectionPromise})}verifyTransport(){return!(!this.pcManager||this.pcManager.currentState!==ce.CONNECTED||!this.client.ws||this.client.ws.readyState===WebSocket.CLOSED)}negotiate(){return m(this,void 0,void 0,function*(){return new Promise((e,A)=>m(this,void 0,void 0,function*(){if(!this.pcManager){A(new Ts("PC manager is closed"));return}this.pcManager.requirePublisher(),this.pcManager.publisher.getTransceivers().length==0&&!this.lossyDC&&!this.reliableDC&&this.createDataChannels();const n=new AbortController,i=()=>{n.abort(),this.log.debug("engine disconnected while negotiation was ongoing",this.logContext),e()};this.isClosed&&A("cannot negotiate on closed engine"),this.on(I.Closing,i),this.pcManager.publisher.once($t.RTPVideoPayloadTypes,r=>{const s=new Map;r.forEach(o=>{const a=o.codec.toLowerCase();mp(a)&&s.set(o.payload,a)}),this.emit(I.RTPVideoMapUpdate,s)});try{yield this.pcManager.negotiate(n),e()}catch(r){r instanceof Ts&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",Ot.RR_UNKNOWN),A(r)}finally{this.off(I.Closing,i)}}))})}dataChannelForKind(e,A){if(A){if(e===W.LOSSY)return this.lossyDCSub;if(e===W.RELIABLE)return this.reliableDCSub}else{if(e===W.LOSSY)return this.lossyDC;if(e===W.RELIABLE)return this.reliableDC}}sendSyncState(e,A){var n,i;if(!this.pcManager){this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);return}const r=this.pcManager.subscriber.getLocalDescription(),s=this.pcManager.subscriber.getRemoteDescription(),o=(i=(n=this.signalOpts)===null||n===void 0?void 0:n.autoSubscribe)!==null&&i!==void 0?i:!0,a=new Array,c=new Array;e.forEach(l=>{l.isDesired!==o&&a.push(l.trackSid),l.isEnabled||c.push(l.trackSid)}),this.client.sendSyncState(new Lc({answer:r?xi({sdp:r.sdp,type:r.type}):void 0,offer:s?xi({sdp:s.sdp,type:s.type}):void 0,subscription:new mi({trackSids:a,subscribe:!o,participantTracks:[]}),publishTracks:Ep(A),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:c}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){const e=[],A=(n,i)=>{(n==null?void 0:n.id)!==void 0&&n.id!==null&&e.push(new Dc({label:n.label,id:n.id,target:i}))};return A(this.dataChannelForKind(W.LOSSY),rA.PUBLISHER),A(this.dataChannelForKind(W.RELIABLE),rA.PUBLISHER),A(this.dataChannelForKind(W.LOSSY,!0),rA.SUBSCRIBER),A(this.dataChannelForKind(W.RELIABLE,!0),rA.SUBSCRIBER),e}clearReconnectTimeout(){this.reconnectTimeout&&ye.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){Me()&&window.addEventListener("online",this.handleBrowserOnLine)}deregisterOnLineListener(){Me()&&window.removeEventListener("online",this.handleBrowserOnLine)}}class Yt extends Error{}function am(t){return t!==void 0&&t>13}function cm(t,e){const A=t.participantIdentity?t.participantIdentity:e.participantIdentity;t.participantIdentity=A,e.participantIdentity=A;const n=t.destinationIdentities.length!==0?t.destinationIdentities:e.destinationIdentities;t.destinationIdentities=n,e.destinationIdentities=n}class co{constructor(e,A){this.lastUpdateAt=0,this.settingsCacheTime=3e3,this.attemptedRegions=[],this.serverUrl=new URL(e),this.token=A}updateToken(e){this.token=e}isCloud(){return Hs(this.serverUrl)}getServerUrl(){return this.serverUrl}getNextBestRegionUrl(e){return m(this,void 0,void 0,function*(){if(!this.isCloud())throw Error("region availability is only supported for LiveKit Cloud domains");(!this.regionSettings||Date.now()-this.lastUpdateAt>this.settingsCacheTime)&&(this.regionSettings=yield this.fetchRegionSettings(e));const A=this.regionSettings.regions.filter(n=>!this.attemptedRegions.find(i=>i.url===n.url));if(A.length>0){const n=A[0];return this.attemptedRegions.push(n),K.debug("next region: ".concat(n.region)),n.url}else return null})}resetAttempts(){this.attemptedRegions=[]}fetchRegionSettings(e){return m(this,void 0,void 0,function*(){const A=yield fetch("".concat(lm(this.serverUrl),"/regions"),{headers:{authorization:"Bearer ".concat(this.token)},signal:e});if(A.ok){const n=yield A.json();return this.lastUpdateAt=Date.now(),n}else throw new z("Could not fetch region settings: ".concat(A.statusText),A.status===401?G.NotAllowed:G.InternalError,A.status)})}setServerReportedRegions(e){this.regionSettings=e,this.lastUpdateAt=Date.now()}}function lm(t){return"".concat(t.protocol.replace("ws","http"),"//").concat(t.host,"/settings")}class du{get info(){return this._info}constructor(e,A,n){this.reader=A,this.totalByteSize=n,this._info=e,this.bytesReceived=0}}class um extends du{handleChunkReceived(e){var A;this.bytesReceived+=e.content.byteLength;const n=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(A=this.onProgress)===null||A===void 0||A.call(this,n)}[Symbol.asyncIterator](){const e=this.reader.getReader();return{next:()=>m(this,void 0,void 0,function*(){try{const{done:A,value:n}=yield e.read();return A?{done:!0,value:void 0}:(this.handleChunkReceived(n),{done:!1,value:n.content})}catch{return{done:!0,value:void 0}}}),return(){return m(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return m(this,void 0,void 0,function*(){var e,A,n,i;let r=new Set;try{for(var s=!0,o=NA(this),a;a=yield o.next(),e=a.done,!e;s=!0){i=a.value,s=!1;const c=i;r.add(c)}}catch(c){A={error:c}}finally{try{!s&&!e&&(n=o.return)&&(yield n.call(o))}finally{if(A)throw A.error}}return Array.from(r)})}}class dm extends du{constructor(e,A,n){super(e,A,n),this.receivedChunks=new Map}handleChunkReceived(e){var A;const n=Ii(e.chunkIndex),i=this.receivedChunks.get(n);if(i&&i.version>e.version)return;this.receivedChunks.set(n,e),this.bytesReceived+=e.content.byteLength;const r=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(A=this.onProgress)===null||A===void 0||A.call(this,r)}[Symbol.asyncIterator](){const e=this.reader.getReader(),A=new TextDecoder;return{next:()=>m(this,void 0,void 0,function*(){try{const{done:n,value:i}=yield e.read();return n?{done:!0,value:void 0}:(this.handleChunkReceived(i),{done:!1,value:A.decode(i.content)})}catch{return{done:!0,value:void 0}}}),return(){return m(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return m(this,void 0,void 0,function*(){var e,A,n,i;let r="";try{for(var s=!0,o=NA(this),a;a=yield o.next(),e=a.done,!e;s=!0)i=a.value,s=!1,r+=i}catch(c){A={error:c}}finally{try{!s&&!e&&(n=o.return)&&(yield n.call(o))}finally{if(A)throw A.error}}return r})}}class hu{constructor(e,A,n){this.writableStream=e,this.defaultWriter=e.getWriter(),this.onClose=n,this.info=A}write(e){return this.defaultWriter.write(e)}close(){return m(this,void 0,void 0,function*(){var e;yield this.defaultWriter.close(),this.defaultWriter.releaseLock(),(e=this.onClose)===null||e===void 0||e.call(this)})}}class hm extends hu{}class fm extends hu{}class fu extends E{constructor(e,A,n,i,r){super(e,n,r),this.sid=A,this.receiver=i}get isLocal(){return!1}setMuted(e){this.isMuted!==e&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?k.Muted:k.Unmuted,this))}setMediaStream(e){this.mediaStream=e;const A=n=>{n.track===this._mediaStreamTrack&&(e.removeEventListener("removetrack",A),this.receiver&&"playoutDelayHint"in this.receiver&&(this.receiver.playoutDelayHint=void 0),this.receiver=void 0,this._currentBitrate=0,this.emit(k.Ended,this))};e.addEventListener("removetrack",A)}start(){this.startMonitor(),super.enable()}stop(){this.stopMonitor(),super.disable()}getRTCStatsReport(){return m(this,void 0,void 0,function*(){var e;return!((e=this.receiver)===null||e===void 0)&&e.getStats?yield this.receiver.getStats():void 0})}setPlayoutDelay(e){this.receiver?"playoutDelayHint"in this.receiver?this.receiver.playoutDelayHint=e:this.log.warn("Playout delay not supported in this browser"):this.log.warn("Cannot set playout delay, track already ended")}getPlayoutDelay(){if(this.receiver){if("playoutDelayHint"in this.receiver)return this.receiver.playoutDelayHint;this.log.warn("Playout delay not supported in this browser")}else this.log.warn("Cannot get playout delay, track already ended");return 0}startMonitor(){this.monitorInterval||(this.monitorInterval=setInterval(()=>this.monitorReceiver(),io)),Sp()&&this.registerTimeSyncUpdate()}registerTimeSyncUpdate(){const e=()=>{var A;this.timeSyncHandle=requestAnimationFrame(()=>e());const n=(A=this.receiver)===null||A===void 0?void 0:A.getSynchronizationSources()[0];if(n){const{timestamp:i,rtpTimestamp:r}=n;r&&this.rtpTimestamp!==r&&(this.emit(k.TimeSyncUpdate,{timestamp:i,rtpTimestamp:r}),this.rtpTimestamp=r)}};e()}}class gm extends fu{constructor(e,A,n,i,r,s){super(e,A,E.Kind.Audio,n,s),this.monitorReceiver=()=>m(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const o=yield this.getReceiverStats();o&&this.prevStats&&this.receiver&&(this._currentBitrate=Pi(o,this.prevStats)),this.prevStats=o}),this.audioContext=i,this.webAudioPluginNodes=[],r&&(this.sinkId=r.deviceId)}setVolume(e){var A;for(const n of this.attachedElements)this.audioContext?(A=this.gainNode)===null||A===void 0||A.gain.setTargetAtTime(e,0,.1):n.volume=e;BA()&&this._mediaStreamTrack._setVolume(e),this.elementVolume=e}getVolume(){if(this.elementVolume)return this.elementVolume;if(BA())return 1;let e=0;return this.attachedElements.forEach(A=>{A.volume>e&&(e=A.volume)}),e}setSinkId(e){return m(this,void 0,void 0,function*(){this.sinkId=e,yield Promise.all(this.attachedElements.map(A=>{if(_s(A))return A.setSinkId(e)}))})}attach(e){const A=this.attachedElements.length===0;return e?super.attach(e):e=super.attach(),this.sinkId&&_s(e)&&e.setSinkId(this.sinkId).catch(n=>{this.log.error("Failed to set sink id on remote audio track",n,this.logContext)}),this.audioContext&&A&&(this.log.debug("using audio context mapping",this.logContext),this.connectWebAudio(this.audioContext,e),e.volume=0,e.muted=!0),this.elementVolume&&this.setVolume(this.elementVolume),e}detach(e){let A;return e?(A=super.detach(e),this.audioContext&&(this.attachedElements.length>0?this.connectWebAudio(this.audioContext,this.attachedElements[0]):this.disconnectWebAudio())):(A=super.detach(),this.disconnectWebAudio()),A}setAudioContext(e){this.audioContext=e,e&&this.attachedElements.length>0?this.connectWebAudio(e,this.attachedElements[0]):e||this.disconnectWebAudio()}setWebAudioPlugins(e){this.webAudioPluginNodes=e,this.attachedElements.length>0&&this.audioContext&&this.connectWebAudio(this.audioContext,this.attachedElements[0])}connectWebAudio(e,A){this.disconnectWebAudio(),this.sourceNode=e.createMediaStreamSource(A.srcObject);let n=this.sourceNode;this.webAudioPluginNodes.forEach(i=>{n.connect(i),n=i}),this.gainNode=e.createGain(),n.connect(this.gainNode),this.gainNode.connect(e.destination),this.elementVolume&&this.gainNode.gain.setTargetAtTime(this.elementVolume,0,.1),e.state!=="running"&&e.resume().then(()=>{e.state!=="running"&&this.emit(k.AudioPlaybackFailed,new Error("Audio Context couldn't be started automatically"))}).catch(i=>{this.emit(k.AudioPlaybackFailed,i)})}disconnectWebAudio(){var e,A;(e=this.gainNode)===null||e===void 0||e.disconnect(),(A=this.sourceNode)===null||A===void 0||A.disconnect(),this.gainNode=void 0,this.sourceNode=void 0}getReceiverStats(){return m(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let A;return e.forEach(n=>{n.type==="inbound-rtp"&&(A={type:"audio",streamId:n.id,timestamp:n.timestamp,jitter:n.jitter,bytesReceived:n.bytesReceived,concealedSamples:n.concealedSamples,concealmentEvents:n.concealmentEvents,silentConcealedSamples:n.silentConcealedSamples,silentConcealmentEvents:n.silentConcealmentEvents,totalAudioEnergy:n.totalAudioEnergy,totalSamplesDuration:n.totalSamplesDuration})}),A})}}const lo=100;class pm extends fu{constructor(e,A,n,i,r){super(e,A,E.Kind.Video,n,r),this.elementInfos=[],this.monitorReceiver=()=>m(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const s=yield this.getReceiverStats();s&&this.prevStats&&this.receiver&&(this._currentBitrate=Pi(s,this.prevStats)),this.prevStats=s}),this.debouncedHandleResize=eo(()=>{this.updateDimensions()},lo),this.adaptiveStreamSettings=i}get isAdaptiveStream(){return this.adaptiveStreamSettings!==void 0}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(e){super.setMuted(e),this.attachedElements.forEach(A=>{e?jt(this._mediaStreamTrack,A):Gt(this._mediaStreamTrack,A)})}attach(e){if(e?super.attach(e):e=super.attach(),this.adaptiveStreamSettings&&this.elementInfos.find(A=>A.element===e)===void 0){const A=new mm(e);this.observeElementInfo(A)}return e}observeElementInfo(e){this.adaptiveStreamSettings&&this.elementInfos.find(A=>A===e)===void 0?(e.handleResize=()=>{this.debouncedHandleResize()},e.handleVisibilityChanged=()=>{this.updateVisibility()},this.elementInfos.push(e),e.observe(),this.debouncedHandleResize(),this.updateVisibility()):this.log.warn("visibility resize observer not triggered",this.logContext)}stopObservingElementInfo(e){if(!this.isAdaptiveStream){this.log.warn("stopObservingElementInfo ignored",this.logContext);return}const A=this.elementInfos.filter(n=>n===e);for(const n of A)n.stopObserving();this.elementInfos=this.elementInfos.filter(n=>n!==e),this.updateVisibility(),this.debouncedHandleResize()}detach(e){let A=[];if(e)return this.stopObservingElement(e),super.detach(e);A=super.detach();for(const n of A)this.stopObservingElement(n);return A}getDecoderImplementation(){var e;return(e=this.prevStats)===null||e===void 0?void 0:e.decoderImplementation}getReceiverStats(){return m(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let A,n="",i=new Map;return e.forEach(r=>{r.type==="inbound-rtp"?(n=r.codecId,A={type:"video",streamId:r.id,framesDecoded:r.framesDecoded,framesDropped:r.framesDropped,framesReceived:r.framesReceived,packetsReceived:r.packetsReceived,packetsLost:r.packetsLost,frameWidth:r.frameWidth,frameHeight:r.frameHeight,pliCount:r.pliCount,firCount:r.firCount,nackCount:r.nackCount,jitter:r.jitter,timestamp:r.timestamp,bytesReceived:r.bytesReceived,decoderImplementation:r.decoderImplementation}):r.type==="codec"&&i.set(r.id,r)}),A&&n!==""&&i.get(n)&&(A.mimeType=i.get(n).mimeType),A})}stopObservingElement(e){const A=this.elementInfos.filter(n=>n.element===e);for(const n of A)this.stopObservingElementInfo(n)}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return m(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),this.isAdaptiveStream&&this.updateVisibility()})}updateVisibility(){var e,A;const n=this.elementInfos.reduce((o,a)=>Math.max(o,a.visibilityChangedAt||0),0),i=!((A=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pauseVideoInBackground)!==null&&A!==void 0)||A?this.isInBackground:!1,r=this.elementInfos.some(o=>o.pictureInPicture),s=this.elementInfos.some(o=>o.visible)&&!i||r;if(this.lastVisible!==s){if(!s&&Date.now()-n<lo){ye.setTimeout(()=>{this.updateVisibility()},lo);return}this.lastVisible=s,this.emit(k.VisibilityChanged,s,this)}}updateDimensions(){var e,A;let n=0,i=0;const r=this.getPixelDensity();for(const s of this.elementInfos){const o=s.width()*r,a=s.height()*r;o+a>n+i&&(n=o,i=a)}((e=this.lastDimensions)===null||e===void 0?void 0:e.width)===n&&((A=this.lastDimensions)===null||A===void 0?void 0:A.height)===i||(this.lastDimensions={width:n,height:i},this.emit(k.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var e;const A=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pixelDensity;return A==="screen"?Ll():A||(Ll()>2?2:1)}}class mm{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(e,A){this.onVisibilityChanged=n=>{var i;const{target:r,isIntersecting:s}=n;r===this.element&&(this.isIntersecting=s,this.isPiP=En(this.element),this.visibilityChangedAt=Date.now(),(i=this.handleVisibilityChanged)===null||i===void 0||i.call(this))},this.onEnterPiP=()=>{var n,i,r;(i=(n=window.documentPictureInPicture)===null||n===void 0?void 0:n.window)===null||i===void 0||i.addEventListener("pagehide",this.onLeavePiP),this.isPiP=En(this.element),(r=this.handleVisibilityChanged)===null||r===void 0||r.call(this)},this.onLeavePiP=()=>{var n;this.isPiP=En(this.element),(n=this.handleVisibilityChanged)===null||n===void 0||n.call(this)},this.element=e,this.isIntersecting=A??uo(e),this.isPiP=Me()&&En(e),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var e,A,n;this.isIntersecting=uo(this.element),this.isPiP=En(this.element),this.element.handleResize=()=>{var i;(i=this.handleResize)===null||i===void 0||i.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,_l().observe(this.element),Dl().observe(this.element),this.element.addEventListener("enterpictureinpicture",this.onEnterPiP),this.element.addEventListener("leavepictureinpicture",this.onLeavePiP),(e=window.documentPictureInPicture)===null||e===void 0||e.addEventListener("enter",this.onEnterPiP),(n=(A=window.documentPictureInPicture)===null||A===void 0?void 0:A.window)===null||n===void 0||n.addEventListener("pagehide",this.onLeavePiP)}stopObserving(){var e,A,n,i,r;(e=_l())===null||e===void 0||e.unobserve(this.element),(A=Dl())===null||A===void 0||A.unobserve(this.element),this.element.removeEventListener("enterpictureinpicture",this.onEnterPiP),this.element.removeEventListener("leavepictureinpicture",this.onLeavePiP),(n=window.documentPictureInPicture)===null||n===void 0||n.removeEventListener("enter",this.onEnterPiP),(r=(i=window.documentPictureInPicture)===null||i===void 0?void 0:i.window)===null||r===void 0||r.removeEventListener("pagehide",this.onLeavePiP)}}function En(t){var e,A;return document.pictureInPictureElement===t?!0:!((e=window.documentPictureInPicture)===null||e===void 0)&&e.window?uo(t,(A=window.documentPictureInPicture)===null||A===void 0?void 0:A.window):!1}function uo(t,e){const A=e||window;let n=t.offsetTop,i=t.offsetLeft;const r=t.offsetWidth,s=t.offsetHeight,{hidden:o}=t,{display:a}=getComputedStyle(t);for(;t.offsetParent;)t=t.offsetParent,n+=t.offsetTop,i+=t.offsetLeft;return n<A.pageYOffset+A.innerHeight&&i<A.pageXOffset+A.innerWidth&&n+s>A.pageYOffset&&i+r>A.pageXOffset&&!o&&a!=="none"}class IA extends mA.EventEmitter{constructor(e,A,n,i){var r;super(),this.metadataMuted=!1,this.encryption=je.NONE,this.log=K,this.handleMuted=()=>{this.emit(k.Muted)},this.handleUnmuted=()=>{this.emit(k.Unmuted)},this.log=TA((r=i==null?void 0:i.loggerName)!==null&&r!==void 0?r:sA.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=e,this.trackSid=A,this.trackName=n,this.source=E.Source.Unknown}setTrack(e){this.track&&(this.track.off(k.Muted,this.handleMuted),this.track.off(k.Unmuted,this.handleUnmuted)),this.track=e,e&&(e.on(k.Muted,this.handleMuted),e.on(k.Unmuted,this.handleUnmuted))}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),X(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return this.track!==void 0}get isEncrypted(){return this.encryption!==je.NONE}get audioTrack(){if(kA(this.track))return this.track}get videoTrack(){if(Xt(this.track))return this.track}updateInfo(e){this.trackSid=e.sid,this.trackName=e.name,this.source=E.sourceFromProto(e.source),this.mimeType=e.mimeType,this.kind===E.Kind.Video&&e.width>0&&(this.dimensions={width:e.width,height:e.height},this.simulcasted=e.simulcast),this.encryption=e.encryption,this.trackInfo=e,this.log.debug("update publication info",Object.assign(Object.assign({},this.logContext),{info:e}))}}(function(t){(function(e){e.Desired="desired",e.Subscribed="subscribed",e.Unsubscribed="unsubscribed"})(t.SubscriptionStatus||(t.SubscriptionStatus={})),function(e){e.Allowed="allowed",e.NotAllowed="not_allowed"}(t.PermissionStatus||(t.PermissionStatus={}))})(IA||(IA={}));class ho extends IA{get isUpstreamPaused(){var e;return(e=this.track)===null||e===void 0?void 0:e.isUpstreamPaused}constructor(e,A,n,i){super(e,A.sid,A.name,i),this.track=void 0,this.handleTrackEnded=()=>{this.emit(k.Ended)},this.updateInfo(A),this.setTrack(n)}setTrack(e){this.track&&this.track.off(k.Ended,this.handleTrackEnded),super.setTrack(e),e&&e.on(k.Ended,this.handleTrackEnded)}get isMuted(){return this.track?this.track.isMuted:super.isMuted}get audioTrack(){return super.audioTrack}get videoTrack(){return super.videoTrack}get isLocal(){return!0}mute(){return m(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.mute()})}unmute(){return m(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.unmute()})}pauseUpstream(){return m(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.pauseUpstream()})}resumeUpstream(){return m(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.resumeUpstream()})}getTrackFeatures(){var e;if(kA(this.track)){const A=this.track.getSourceTrackSettings(),n=new Set;return A.autoGainControl&&n.add(iA.TF_AUTO_GAIN_CONTROL),A.echoCancellation&&n.add(iA.TF_ECHO_CANCELLATION),A.noiseSuppression&&n.add(iA.TF_NOISE_SUPPRESSION),A.channelCount&&A.channelCount>1&&n.add(iA.TF_STEREO),!((e=this.options)===null||e===void 0)&&e.dtx||n.add(iA.TF_NO_DTX),this.track.enhancedNoiseCancellation&&n.add(iA.TF_ENHANCED_NOISE_CANCELLATION),Array.from(n.values())}else return[]}}function Hi(t,e){return m(this,void 0,void 0,function*(){t??(t={});let A=!1;const{audioProcessor:n,videoProcessor:i,optionsWithoutProcessor:r}=Gl(t);let s=r.audio,o=r.video;if(n&&typeof r.audio=="object"&&(r.audio.processor=n),i&&typeof r.video=="object"&&(r.video.processor=i),t.audio&&typeof r.audio=="object"&&typeof r.audio.deviceId=="string"){const u=r.audio.deviceId;r.audio.deviceId={exact:u},A=!0,s=Object.assign(Object.assign({},r.audio),{deviceId:{ideal:u}})}if(r.video&&typeof r.video=="object"&&typeof r.video.deviceId=="string"){const u=r.video.deviceId;r.video.deviceId={exact:u},A=!0,o=Object.assign(Object.assign({},r.video),{deviceId:{ideal:u}})}(r.audio===!0||typeof r.audio=="object"&&!r.audio.deviceId)&&(r.audio={deviceId:"default"}),r.video===!0?r.video={deviceId:"default"}:typeof r.video=="object"&&!r.video.deviceId&&(r.video.deviceId="default");const a=Ml(r,eu,Au),c=Js(a),l=navigator.mediaDevices.getUserMedia(c);r.audio&&(Ce.userMediaPromiseMap.set("audioinput",l),l.catch(()=>Ce.userMediaPromiseMap.delete("audioinput"))),r.video&&(Ce.userMediaPromiseMap.set("videoinput",l),l.catch(()=>Ce.userMediaPromiseMap.delete("videoinput")));try{const u=yield l;return yield Promise.all(u.getTracks().map(d=>m(this,void 0,void 0,function*(){const h=d.kind==="audio";let g=h?a.audio:a.video;(typeof g=="boolean"||!g)&&(g={});let f;const p=h?c.audio:c.video;typeof p!="boolean"&&(f=p);const B=d.getSettings().deviceId;f!=null&&f.deviceId&&WA(f.deviceId)!==B?f.deviceId=B:f||(f={deviceId:B});const y=Xp(d,f,e);return y.kind===E.Kind.Video?y.source=E.Source.Camera:y.kind===E.Kind.Audio&&(y.source=E.Source.Microphone),y.mediaStream=u,kA(y)&&n?yield y.setProcessor(n):Xt(y)&&i&&(yield y.setProcessor(i)),y})))}catch(u){if(!A)throw u;return Hi(Object.assign(Object.assign({},t),{audio:s,video:o}),e)}})}function Bm(t){return m(this,void 0,void 0,function*(){return(yield Hi({audio:!1,video:t??!0}))[0]})}function vm(t){return m(this,void 0,void 0,function*(){return(yield Hi({audio:t??!0,video:!1}))[0]})}var $A;(function(t){t.Excellent="excellent",t.Good="good",t.Poor="poor",t.Lost="lost",t.Unknown="unknown"})($A||($A={}));function Cm(t){switch(t){case Bn.EXCELLENT:return $A.Excellent;case Bn.GOOD:return $A.Good;case Bn.POOR:return $A.Poor;case Bn.LOST:return $A.Lost;default:return $A.Unknown}}class gu extends mA.EventEmitter{get logContext(){var e,A;return Object.assign({},(A=(e=this.loggerOptions)===null||e===void 0?void 0:e.loggerContextCb)===null||A===void 0?void 0:A.call(e))}get isEncrypted(){return this.trackPublications.size>0&&Array.from(this.trackPublications.values()).every(e=>e.isEncrypted)}get isAgent(){var e;return((e=this.permissions)===null||e===void 0?void 0:e.agent)||this.kind===pi.AGENT}get isActive(){var e;return((e=this.participantInfo)===null||e===void 0?void 0:e.state)===Mt.ACTIVE}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(e,A,n,i,r,s){let o=arguments.length>6&&arguments[6]!==void 0?arguments[6]:pi.STANDARD;var a;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=$A.Unknown,this.log=K,this.log=TA((a=s==null?void 0:s.loggerName)!==null&&a!==void 0?a:sA.Participant),this.loggerOptions=s,this.setMaxListeners(100),this.sid=e,this.identity=A,this.name=n,this.metadata=i,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this._kind=o,this._attributes=r??{}}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(e){for(const[,A]of this.trackPublications)if(A.source===e)return A}getTrackPublicationByName(e){for(const[,A]of this.trackPublications)if(A.trackName===e)return A}waitUntilActive(){return this.isActive?Promise.resolve():this.activeFuture?this.activeFuture.promise:(this.activeFuture=new Ks,this.once(x.Active,()=>{var e,A;(A=(e=this.activeFuture)===null||e===void 0?void 0:e.resolve)===null||A===void 0||A.call(e),this.activeFuture=void 0}),this.activeFuture.promise)}get connectionQuality(){return this._connectionQuality}get isCameraEnabled(){var e;const A=this.getTrackPublication(E.Source.Camera);return!(!((e=A==null?void 0:A.isMuted)!==null&&e!==void 0)||e)}get isMicrophoneEnabled(){var e;const A=this.getTrackPublication(E.Source.Microphone);return!(!((e=A==null?void 0:A.isMuted)!==null&&e!==void 0)||e)}get isScreenShareEnabled(){return!!this.getTrackPublication(E.Source.ScreenShare)}get isLocal(){return!1}get joinedAt(){return this.participantInfo?new Date(Number.parseInt(this.participantInfo.joinedAt.toString())*1e3):new Date}updateInfo(e){var A;return this.participantInfo&&this.participantInfo.sid===e.sid&&this.participantInfo.version>e.version?!1:(this.identity=e.identity,this.sid=e.sid,this._setName(e.name),this._setMetadata(e.metadata),this._setAttributes(e.attributes),e.state===Mt.ACTIVE&&((A=this.participantInfo)===null||A===void 0?void 0:A.state)!==Mt.ACTIVE&&this.emit(x.Active),e.permission&&this.setPermissions(e.permission),this.participantInfo=e,!0)}_setMetadata(e){const A=this.metadata!==e,n=this.metadata;this.metadata=e,A&&this.emit(x.ParticipantMetadataChanged,n)}_setName(e){const A=this.name!==e;this.name=e,A&&this.emit(x.ParticipantNameChanged,e)}_setAttributes(e){const A=Tp(this.attributes,e);this._attributes=e,Object.keys(A).length>0&&this.emit(x.AttributesChanged,A)}setPermissions(e){var A,n,i,r,s,o;const a=this.permissions,c=e.canPublish!==((A=this.permissions)===null||A===void 0?void 0:A.canPublish)||e.canSubscribe!==((n=this.permissions)===null||n===void 0?void 0:n.canSubscribe)||e.canPublishData!==((i=this.permissions)===null||i===void 0?void 0:i.canPublishData)||e.hidden!==((r=this.permissions)===null||r===void 0?void 0:r.hidden)||e.recorder!==((s=this.permissions)===null||s===void 0?void 0:s.recorder)||e.canPublishSources.length!==this.permissions.canPublishSources.length||e.canPublishSources.some((l,u)=>{var d;return l!==((d=this.permissions)===null||d===void 0?void 0:d.canPublishSources[u])})||e.canSubscribeMetrics!==((o=this.permissions)===null||o===void 0?void 0:o.canSubscribeMetrics);return this.permissions=e,c&&this.emit(x.ParticipantPermissionsChanged,a),c}setIsSpeaking(e){e!==this.isSpeaking&&(this.isSpeaking=e,e&&(this.lastSpokeAt=new Date),this.emit(x.IsSpeakingChanged,e))}setConnectionQuality(e){const A=this._connectionQuality;this._connectionQuality=Cm(e),A!==this._connectionQuality&&this.emit(x.ConnectionQualityChanged,this._connectionQuality)}setDisconnected(){var e,A;this.activeFuture&&((A=(e=this.activeFuture).reject)===null||A===void 0||A.call(e,new Error("Participant disconnected")),this.activeFuture=void 0)}setAudioContext(e){this.audioContext=e,this.audioTrackPublications.forEach(A=>kA(A.track)&&A.track.setAudioContext(e))}addTrackPublication(e){e.on(k.Muted,()=>{this.emit(x.TrackMuted,e)}),e.on(k.Unmuted,()=>{this.emit(x.TrackUnmuted,e)});const A=e;switch(A.track&&(A.track.sid=e.trackSid),this.trackPublications.set(e.trackSid,e),e.kind){case E.Kind.Audio:this.audioTrackPublications.set(e.trackSid,e);break;case E.Kind.Video:this.videoTrackPublications.set(e.trackSid,e);break}}}function wm(t){var e,A,n;if(!t.participantSid&&!t.participantIdentity)throw new Error("Invalid track permission, must provide at least one of participantIdentity and participantSid");return new xc({participantIdentity:(e=t.participantIdentity)!==null&&e!==void 0?e:"",participantSid:(A=t.participantSid)!==null&&A!==void 0?A:"",allTracks:(n=t.allowAll)!==null&&n!==void 0?n:!1,trackSids:t.allowedTrackSids||[]})}const pu=15e3;class ym extends gu{constructor(e,A,n,i,r){super(e,A,void 0,void 0,void 0,{loggerName:i.loggerName,loggerContextCb:()=>this.engine.logContext}),this.pendingPublishing=new Set,this.pendingPublishPromises=new Map,this.participantTrackPermissions=[],this.allParticipantsAllowedToSubscribe=!0,this.encryptionType=je.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new Ks)},this.handleReconnected=()=>{var s,o;(o=(s=this.reconnectFuture)===null||s===void 0?void 0:s.resolve)===null||o===void 0||o.call(s),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleDisconnected=()=>{var s,o;this.reconnectFuture&&(this.reconnectFuture.promise.catch(a=>this.log.warn(a.message,this.logContext)),(o=(s=this.reconnectFuture)===null||s===void 0?void 0:s.reject)===null||o===void 0||o.call(s,"Got disconnected during reconnection attempt"),this.reconnectFuture=void 0)},this.handleSignalRequestResponse=s=>{const{requestId:o,reason:a,message:c}=s,l=this.pendingSignalRequests.get(o);l&&(a!==ps.OK&&l.reject(new Tl(c,a)),this.pendingSignalRequests.delete(o))},this.handleDataPacket=s=>{switch(s.value.case){case"rpcResponse":let o=s.value.value,a=null,c=null;o.value.case==="payload"?a=o.value.value:o.value.case==="error"&&(c=le.fromProto(o.value.value)),this.handleIncomingRpcResponse(o.requestId,a,c);break;case"rpcAck":let l=s.value.value;this.handleIncomingRpcAck(l.requestId);break}},this.updateTrackSubscriptionPermissions=()=>{this.log.debug("updating track subscription permissions",Object.assign(Object.assign({},this.logContext),{allParticipantsAllowed:this.allParticipantsAllowedToSubscribe,participantTrackPermissions:this.participantTrackPermissions})),this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe,this.participantTrackPermissions.map(s=>wm(s)))},this.onTrackUnmuted=s=>{this.onTrackMuted(s,s.isUpstreamPaused)},this.onTrackMuted=(s,o)=>{if(o===void 0&&(o=!0),!s.sid){this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),X(s)));return}this.engine.updateMuteStatus(s.sid,o)},this.onTrackUpstreamPaused=s=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),X(s))),this.onTrackMuted(s,!0)},this.onTrackUpstreamResumed=s=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),X(s))),this.onTrackMuted(s,s.isMuted)},this.onTrackFeatureUpdate=s=>{const o=this.audioTrackPublications.get(s.sid);if(!o){this.log.warn("Could not update local audio track settings, missing publication for track ".concat(s.sid),this.logContext);return}this.engine.client.sendUpdateLocalAudioTrack(o.trackSid,o.getTrackFeatures())},this.handleSubscribedQualityUpdate=s=>m(this,void 0,void 0,function*(){var o,a,c,l,u,d;if(!(!((u=this.roomOptions)===null||u===void 0)&&u.dynacast))return;const h=this.videoTrackPublications.get(s.trackSid);if(!h){this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:s.trackSid}));return}if(s.subscribedCodecs.length>0){if(!h.videoTrack)return;const B=yield h.videoTrack.setPublishingCodecs(s.subscribedCodecs);try{for(var g=!0,f=NA(B),p;p=yield f.next(),o=p.done,!o;g=!0){l=p.value,g=!1;const y=l;sp(y)&&(this.log.debug("publish ".concat(y," for ").concat(h.videoTrack.sid),Object.assign(Object.assign({},this.logContext),X(h))),yield this.publishAdditionalCodecForTrack(h.videoTrack,y,h.options))}}catch(y){a={error:y}}finally{try{!g&&!o&&(c=f.return)&&(yield c.call(f))}finally{if(a)throw a.error}}}else s.subscribedQualities.length>0&&(yield(d=h.videoTrack)===null||d===void 0?void 0:d.setPublishingLayers(s.subscribedQualities))}),this.handleLocalTrackUnpublished=s=>{const o=this.trackPublications.get(s.trackSid);if(!o){this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:s.trackSid}));return}this.unpublishTrack(o.track)},this.handleTrackEnded=s=>m(this,void 0,void 0,function*(){if(s.source===E.Source.ScreenShare||s.source===E.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),X(s))),this.unpublishTrack(s);else if(s.isUserProvided)yield s.mute();else if(yt(s)||JA(s))try{if(Me())try{const o=yield navigator==null?void 0:navigator.permissions.query({name:s.source===E.Source.Camera?"camera":"microphone"});if(o&&o.state==="denied")throw this.log.warn("user has revoked access to ".concat(s.source),Object.assign(Object.assign({},this.logContext),X(s))),o.onchange=()=>{o.state!=="denied"&&(s.isMuted||s.restartTrack(),o.onchange=null)},new Error("GetUserMedia Permission denied")}catch{}s.isMuted||(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),X(s))),yt(s)?yield s.restartTrack({deviceId:"default"}):yield s.restartTrack())}catch{this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),X(s))),yield s.mute()}}),this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this.engine=n,this.roomOptions=i,this.setupEngine(n),this.activeDeviceMap=new Map([["audioinput","default"],["videoinput","default"],["audiooutput","default"]]),this.pendingSignalRequests=new Map,this.rpcHandlers=r}get lastCameraError(){return this.cameraError}get lastMicrophoneError(){return this.microphoneError}get isE2EEEnabled(){return this.encryptionType!==je.NONE}getTrackPublication(e){const A=super.getTrackPublication(e);if(A)return A}getTrackPublicationByName(e){const A=super.getTrackPublicationByName(e);if(A)return A}setupEngine(e){this.engine=e,this.engine.on(I.RemoteMute,(A,n)=>{const i=this.trackPublications.get(A);!i||!i.track||(n?i.mute():i.unmute())}),this.engine.on(I.Connected,this.handleReconnected).on(I.SignalRestarted,this.handleReconnected).on(I.SignalResumed,this.handleReconnected).on(I.Restarting,this.handleReconnecting).on(I.Resuming,this.handleReconnecting).on(I.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(I.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(I.Disconnected,this.handleDisconnected).on(I.SignalRequestResponse,this.handleSignalRequestResponse).on(I.DataPacketReceived,this.handleDataPacket)}setMetadata(e){return m(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({metadata:e})})}setName(e){return m(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({name:e})})}setAttributes(e){return m(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({attributes:e})})}requestMetadataUpdate(e){return m(this,arguments,void 0,function(A){var n=this;let{metadata:i,name:r,attributes:s}=A;return function*(){return new Promise((o,a)=>m(n,void 0,void 0,function*(){var c,l;try{let u=!1;const d=yield this.engine.client.sendUpdateLocalMetadata((c=i??this.metadata)!==null&&c!==void 0?c:"",(l=r??this.name)!==null&&l!==void 0?l:"",s),h=performance.now();for(this.pendingSignalRequests.set(d,{resolve:o,reject:g=>{a(g),u=!0},values:{name:r,metadata:i,attributes:s}});performance.now()-h<5e3&&!u;){if((!r||this.name===r)&&(!i||this.metadata===i)&&(!s||Object.entries(s).every(g=>{let[f,p]=g;return this.attributes[f]===p||p===""&&!this.attributes[f]}))){this.pendingSignalRequests.delete(d),o();return}yield Oe(50)}a(new Tl("Request to update local metadata timed out","TimeoutError"))}catch(u){u instanceof Error&&a(u)}}))}()})}setCameraEnabled(e,A,n){return this.setTrackEnabled(E.Source.Camera,e,A,n)}setMicrophoneEnabled(e,A,n){return this.setTrackEnabled(E.Source.Microphone,e,A,n)}setScreenShareEnabled(e,A,n){return this.setTrackEnabled(E.Source.ScreenShare,e,A,n)}setPermissions(e){const A=this.permissions,n=super.setPermissions(e);return n&&A&&this.emit(x.ParticipantPermissionsChanged,A),n}setE2EEEnabled(e){return m(this,void 0,void 0,function*(){this.encryptionType=e?je.GCM:je.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(e,A,n,i){return m(this,void 0,void 0,function*(){var r,s;this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:e,enabled:A})),this.republishPromise&&(yield this.republishPromise);let o=this.getTrackPublication(e);if(A)if(o)yield o.unmute();else{let a;if(this.pendingPublishing.has(e)){const c=yield this.waitForPendingPublicationOfSource(e);return c||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e})),yield c==null?void 0:c.unmute(),c}this.pendingPublishing.add(e);try{switch(e){case E.Source.Camera:a=yield this.createTracks({video:(r=n)!==null&&r!==void 0?r:!0});break;case E.Source.Microphone:a=yield this.createTracks({audio:(s=n)!==null&&s!==void 0?s:!0});break;case E.Source.ScreenShare:a=yield this.createScreenTracks(Object.assign({},n));break;default:throw new FA(e)}}catch(c){throw a==null||a.forEach(l=>{l.stop()}),c instanceof Error&&this.emit(x.MediaDevicesError,c),this.pendingPublishing.delete(e),c}try{const c=[];for(const u of a)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),X(u))),c.push(this.publishTrack(u,i));[o]=yield Promise.all(c)}catch(c){throw a==null||a.forEach(l=>{l.stop()}),c}finally{this.pendingPublishing.delete(e)}}else if(!(o!=null&&o.track)&&this.pendingPublishing.has(e)&&(o=yield this.waitForPendingPublicationOfSource(e),o||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e}))),o&&o.track)if(e===E.Source.ScreenShare){o=yield this.unpublishTrack(o.track);const a=this.getTrackPublication(E.Source.ScreenShareAudio);a&&a.track&&this.unpublishTrack(a.track)}else yield o.mute();return o})}enableCameraAndMicrophone(){return m(this,void 0,void 0,function*(){if(!(this.pendingPublishing.has(E.Source.Camera)||this.pendingPublishing.has(E.Source.Microphone))){this.pendingPublishing.add(E.Source.Camera),this.pendingPublishing.add(E.Source.Microphone);try{const e=yield this.createTracks({audio:!0,video:!0});yield Promise.all(e.map(A=>this.publishTrack(A)))}finally{this.pendingPublishing.delete(E.Source.Camera),this.pendingPublishing.delete(E.Source.Microphone)}}})}createTracks(e){return m(this,void 0,void 0,function*(){var A,n;e??(e={});const i=Ml(e,(A=this.roomOptions)===null||A===void 0?void 0:A.audioCaptureDefaults,(n=this.roomOptions)===null||n===void 0?void 0:n.videoCaptureDefaults);try{return(yield Hi(i,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext})).map(o=>(kA(o)&&(this.microphoneError=void 0,o.setAudioContext(this.audioContext),o.source=E.Source.Microphone,this.emit(x.AudioStreamAcquired)),Xt(o)&&(this.cameraError=void 0,o.source=E.Source.Camera),o))}catch(r){throw r instanceof Error&&(e.audio&&(this.microphoneError=r),e.video&&(this.cameraError=r)),r}})}createScreenTracks(e){return m(this,void 0,void 0,function*(){if(e===void 0&&(e={}),navigator.mediaDevices.getDisplayMedia===void 0)throw new Ss("getDisplayMedia not supported");e.resolution===void 0&&!dp()&&(e.resolution=Ps.h1080fps30.resolution);const A=Qp(e),n=yield navigator.mediaDevices.getDisplayMedia(A),i=n.getVideoTracks();if(i.length===0)throw new FA("no video track found");const r=new _i(i[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});r.source=E.Source.ScreenShare,e.contentHint&&(r.mediaStreamTrack.contentHint=e.contentHint);const s=[r];if(n.getAudioTracks().length>0){this.emit(x.AudioStreamAcquired);const o=new Li(n.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});o.source=E.Source.ScreenShareAudio,s.push(o)}return s})}publishTrack(e,A){return m(this,void 0,void 0,function*(){return this.publishOrRepublishTrack(e,A)})}publishOrRepublishTrack(e,A){return m(this,arguments,void 0,function(n,i){var r=this;let s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return function*(){var o,a,c,l;yt(n)&&n.setAudioContext(r.audioContext),yield(o=r.reconnectFuture)===null||o===void 0?void 0:o.promise,r.republishPromise&&!s&&(yield r.republishPromise),Jt(n)&&r.pendingPublishPromises.has(n)&&(yield r.pendingPublishPromises.get(n));let u;if(n instanceof MediaStreamTrack)u=n.getConstraints();else{u=n.constraints;let B;switch(n.source){case E.Source.Microphone:B="audioinput";break;case E.Source.Camera:B="videoinput"}B&&r.activeDeviceMap.has(B)&&(u=Object.assign(Object.assign({},u),{deviceId:r.activeDeviceMap.get(B)}))}if(n instanceof MediaStreamTrack)switch(n.kind){case"audio":n=new Li(n,u,!0,r.audioContext,{loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});break;case"video":n=new _i(n,u,!0,{loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});break;default:throw new FA("unsupported MediaStreamTrack kind ".concat(n.kind))}else n.updateLoggerOptions({loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});let d;if(r.trackPublications.forEach(B=>{B.track&&B.track===n&&(d=B)}),d)return r.log.warn("track has already been published, skipping",Object.assign(Object.assign({},r.logContext),X(d))),d;const h="channelCount"in n.mediaStreamTrack.getSettings()&&n.mediaStreamTrack.getSettings().channelCount===2||n.mediaStreamTrack.getConstraints().channelCount===2,g=(a=i==null?void 0:i.forceStereo)!==null&&a!==void 0?a:h;g&&(i||(i={}),i.dtx===void 0&&r.log.info("Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.",Object.assign(Object.assign({},r.logContext),X(n))),i.red===void 0&&r.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),(c=i.dtx)!==null&&c!==void 0||(i.dtx=!1),(l=i.red)!==null&&l!==void 0||(i.red=!1));const f=Object.assign(Object.assign({},r.roomOptions.publishDefaults),i);!hp()&&r.roomOptions.e2ee&&(r.log.info("End-to-end encryption is set up, simulcast publishing will be disabled on Safari versions and iOS browsers running iOS < v17.2",Object.assign({},r.logContext)),f.simulcast=!1),f.source&&(n.source=f.source);const p=new Promise((B,y)=>m(r,void 0,void 0,function*(){try{if(this.engine.client.currentState!==Ae.CONNECTED){this.log.debug("deferring track publication until signal is connected",Object.assign(Object.assign({},this.logContext),{track:X(n)}));const b=()=>m(this,void 0,void 0,function*(){try{const v=yield this.publish(n,f,g);B(v)}catch(v){y(v)}});setTimeout(()=>{this.engine.off(I.SignalConnected,b),y(new Fs("publishing rejected as engine not connected within timeout",408))},15e3),this.engine.once(I.SignalConnected,b),this.engine.on(I.Closing,()=>{this.engine.off(I.SignalConnected,b),y(new Fs("publishing rejected as engine closed",499))})}else try{const b=yield this.publish(n,f,g);B(b)}catch(b){y(b)}}catch(b){y(b)}}));r.pendingPublishPromises.set(n,p);try{return yield p}catch(B){throw B}finally{r.pendingPublishPromises.delete(n)}}()})}hasPermissionsToPublish(e){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),X(e))),!1;const{canPublish:A,canPublishSources:n}=this.permissions;return A&&(n.length===0||n.map(i=>Fp(i)).includes(e.source))?!0:(this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),X(e))),!1)}publish(e,A,n){return m(this,void 0,void 0,function*(){var i,r,s,o,a,c,l,u,d,h;if(!this.hasPermissionsToPublish(e))throw new Fs("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find(C=>Jt(e)&&C.source===e.source)&&e.source!==E.Source.Unknown&&this.log.info("publishing a second track with the same source: ".concat(e.source),Object.assign(Object.assign({},this.logContext),X(e))),A.stopMicTrackOnMute&&kA(e)&&(e.stopOnMute=!0),e.source===E.Source.ScreenShare&&Wt()&&(A.simulcast=!1),A.videoCodec==="av1"&&!cp()&&(A.videoCodec=void 0),A.videoCodec==="vp9"&&!lp()&&(A.videoCodec=void 0),A.videoCodec===void 0&&(A.videoCodec=Ao),this.enabledPublishVideoCodecs.length>0&&(this.enabledPublishVideoCodecs.some(C=>A.videoCodec===Ri(C.mime))||(A.videoCodec=Ri(this.enabledPublishVideoCodecs[0].mime)));const f=A.videoCodec;e.on(k.Muted,this.onTrackMuted),e.on(k.Unmuted,this.onTrackUnmuted),e.on(k.Ended,this.handleTrackEnded),e.on(k.UpstreamPaused,this.onTrackUpstreamPaused),e.on(k.UpstreamResumed,this.onTrackUpstreamResumed),e.on(k.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);const p=new us({cid:e.mediaStreamTrack.id,name:A.name,type:E.kindToProto(e.kind),muted:e.isMuted,source:E.sourceToProto(e.source),disableDtx:!(!((i=A.dtx)!==null&&i!==void 0)||i),encryption:this.encryptionType,stereo:n,disableRed:this.isE2EEEnabled||!(!((r=A.red)!==null&&r!==void 0)||r),stream:A==null?void 0:A.stream,backupCodecPolicy:A==null?void 0:A.backupCodecPolicy});let B;if(e.kind===E.Kind.Video){let C={width:0,height:0};try{C=yield e.waitForDimensions()}catch{const Q=(o=(s=this.roomOptions.videoCaptureDefaults)===null||s===void 0?void 0:s.resolution)!==null&&o!==void 0?o:yn.h720.resolution;C={width:Q.width,height:Q.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),X(e)),{dims:C}))}p.width=C.width,p.height=C.height,JA(e)&&(bn(f)&&(e.source===E.Source.ScreenShare&&(A.scalabilityMode="L1T3","contentHint"in e.mediaStreamTrack&&(e.mediaStreamTrack.contentHint="motion",this.log.info("forcing contentHint to motion for screenshare with SVC codecs",Object.assign(Object.assign({},this.logContext),X(e))))),A.scalabilityMode=(a=A.scalabilityMode)!==null&&a!==void 0?a:"L3T3_KEY"),p.simulcastCodecs=[new ls({codec:f,cid:e.mediaStreamTrack.id})],A.backupCodec===!0&&(A.backupCodec={codec:Ao}),A.backupCodec&&f!==A.backupCodec.codec&&p.encryption===je.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),p.simulcastCodecs.push(new ls({codec:A.backupCodec.codec,cid:""})))),B=so(e.source===E.Source.ScreenShare,p.width,p.height,A),p.layers=cu(p.width,p.height,B,bn(A.videoCodec))}else e.kind===E.Kind.Audio&&(B=[{maxBitrate:(c=A.audioPreset)===null||c===void 0?void 0:c.maxBitrate,priority:(u=(l=A.audioPreset)===null||l===void 0?void 0:l.priority)!==null&&u!==void 0?u:"high",networkPriority:(h=(d=A.audioPreset)===null||d===void 0?void 0:d.priority)!==null&&h!==void 0?h:"high"}]);if(!this.engine||this.engine.isClosed)throw new Be("cannot publish track when not connected");const y=()=>m(this,void 0,void 0,function*(){var C,w,Q;if(!this.engine.pcManager)throw new Be("pcManager is not ready");if(e.sender=yield this.engine.createSender(e,A,B),JA(e)&&((C=A.degradationPreference)!==null&&C!==void 0||(A.degradationPreference=im(e)),e.setDegradationPreference(A.degradationPreference)),B)if(Wt()&&e.kind===E.Kind.Audio){let F;for(const R of this.engine.pcManager.publisher.getTransceivers())if(R.sender===e.sender){F=R;break}F&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:F,codec:"opus",maxbr:!((w=B[0])===null||w===void 0)&&w.maxBitrate?B[0].maxBitrate/1e3:0})}else e.codec&&bn(e.codec)&&(!((Q=B[0])===null||Q===void 0)&&Q.maxBitrate)&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:p.cid,codec:e.codec,maxbr:B[0].maxBitrate/1e3});yield this.engine.negotiate()});let b;if(this.enabledPublishVideoCodecs.length>0)b=(yield Promise.all([this.engine.addTrack(p),y()]))[0];else{b=yield this.engine.addTrack(p);let C;if(b.codecs.forEach(w=>{C===void 0&&(C=w.mimeType)}),C&&e.kind===E.Kind.Video){const w=Ri(C);w!==f&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),X(e)),{codec:w})),A.videoCodec=w,B=so(e.source===E.Source.ScreenShare,p.width,p.height,A))}yield y()}const v=new ho(e.kind,b,e,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});return v.options=A,e.sid=b.sid,this.log.debug("publishing ".concat(e.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:B,trackInfo:b})),JA(e)?e.startMonitor(this.engine.client):yt(e)&&e.startMonitor(),this.addTrackPublication(v),this.emit(x.LocalTrackPublished,v),v})}get isLocal(){return!0}publishAdditionalCodecForTrack(e,A,n){return m(this,void 0,void 0,function*(){var i;if(this.encryptionType!==je.NONE)return;let r;if(this.trackPublications.forEach(h=>{h.track&&h.track===e&&(r=h)}),!r)throw new FA("track is not published");if(!JA(e))throw new FA("track is not a video track");const s=Object.assign(Object.assign({},(i=this.roomOptions)===null||i===void 0?void 0:i.publishDefaults),n),o=Am(e,A,s);if(!o){this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),X(e)));return}const a=e.addSimulcastTrack(A,o);if(!a)return;const c=new us({cid:a.mediaStreamTrack.id,type:E.kindToProto(e.kind),muted:e.isMuted,source:E.sourceToProto(e.source),sid:e.sid,simulcastCodecs:[{codec:s.videoCodec,cid:a.mediaStreamTrack.id}]});if(c.layers=cu(c.width,c.height,o),!this.engine||this.engine.isClosed)throw new Be("cannot publish track when not connected");const l=()=>m(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(e,a,s,o),yield this.engine.negotiate()}),d=(yield Promise.all([this.engine.addTrack(c),l()]))[0];this.log.debug("published ".concat(A," for track ").concat(e.sid),Object.assign(Object.assign({},this.logContext),{encodings:o,trackInfo:d}))})}unpublishTrack(e,A){return m(this,void 0,void 0,function*(){var n,i;if(Jt(e)){const c=this.pendingPublishPromises.get(e);c&&(this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),X(e))),yield c)}const r=this.getPublicationForTrack(e),s=r?X(r):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),s)),!r||!r.track){this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),s));return}e=r.track,e.off(k.Muted,this.onTrackMuted),e.off(k.Unmuted,this.onTrackUnmuted),e.off(k.Ended,this.handleTrackEnded),e.off(k.UpstreamPaused,this.onTrackUpstreamPaused),e.off(k.UpstreamResumed,this.onTrackUpstreamResumed),e.off(k.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate),A===void 0&&(A=(i=(n=this.roomOptions)===null||n===void 0?void 0:n.stopLocalTrackOnUnpublish)!==null&&i!==void 0?i:!0),A?e.stop():e.stopMonitor();let o=!1;const a=e.sender;if(e.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentState<ce.FAILED&&a)try{for(const c of this.engine.pcManager.publisher.getTransceivers())c.sender===a&&(c.direction="inactive",o=!0);if(this.engine.removeTrack(a)&&(o=!0),JA(e)){for(const[,c]of e.simulcastCodecs)c.sender&&(this.engine.removeTrack(c.sender)&&(o=!0),c.sender=void 0);e.simulcastCodecs.clear()}}catch(c){this.log.warn("failed to unpublish track",Object.assign(Object.assign(Object.assign({},this.logContext),s),{error:c}))}switch(this.trackPublications.delete(r.trackSid),r.kind){case E.Kind.Audio:this.audioTrackPublications.delete(r.trackSid);break;case E.Kind.Video:this.videoTrackPublications.delete(r.trackSid);break}return this.emit(x.LocalTrackUnpublished,r),r.setTrack(void 0),o&&(yield this.engine.negotiate()),r})}unpublishTracks(e){return m(this,void 0,void 0,function*(){return(yield Promise.all(e.map(n=>this.unpublishTrack(n)))).filter(n=>!!n)})}republishAllTracks(e){return m(this,arguments,void 0,function(A){var n=this;let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){n.republishPromise&&(yield n.republishPromise),n.republishPromise=new Promise((r,s)=>m(n,void 0,void 0,function*(){try{const o=[];this.trackPublications.forEach(a=>{a.track&&(A&&(a.options=Object.assign(Object.assign({},a.options),A)),o.push(a))}),yield Promise.all(o.map(a=>m(this,void 0,void 0,function*(){const c=a.track;yield this.unpublishTrack(c,!1),i&&!c.isMuted&&c.source!==E.Source.ScreenShare&&c.source!==E.Source.ScreenShareAudio&&(yt(c)||JA(c))&&!c.isUserProvided&&(this.log.debug("restarting existing track",Object.assign(Object.assign({},this.logContext),{track:a.trackSid})),yield c.restartTrack()),yield this.publishOrRepublishTrack(c,a.options,!0)}))),r()}catch(o){s(o)}finally{this.republishPromise=void 0}})),yield n.republishPromise}()})}publishData(e){return m(this,arguments,void 0,function(A){var n=this;let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return function*(){const r=i.reliable?W.RELIABLE:W.LOSSY,s=i.destinationIdentities,o=i.topic,a=new He({kind:r,value:{case:"user",value:new hc({participantIdentity:n.identity,payload:A,destinationIdentities:s,topic:o})}});yield n.engine.sendDataPacket(a,r)}()})}publishDtmf(e,A){return m(this,void 0,void 0,function*(){const n=new He({kind:W.RELIABLE,value:{case:"sipDtmf",value:new fc({code:e,digit:A})}});yield this.engine.sendDataPacket(n,W.RELIABLE)})}sendChatMessage(e,A){return m(this,void 0,void 0,function*(){const n={id:crypto.randomUUID(),message:e,timestamp:Date.now(),attachedFiles:A==null?void 0:A.attachments},i=new He({value:{case:"chatMessage",value:new is(Object.assign(Object.assign({},n),{timestamp:re.parse(n.timestamp)}))}});return yield this.engine.sendDataPacket(i,W.RELIABLE),this.emit(x.ChatMessage,n),n})}editChatMessage(e,A){return m(this,void 0,void 0,function*(){const n=Object.assign(Object.assign({},A),{message:e,editTimestamp:Date.now()}),i=new He({value:{case:"chatMessage",value:new is(Object.assign(Object.assign({},n),{timestamp:re.parse(n.timestamp),editTimestamp:re.parse(n.editTimestamp)}))}});return yield this.engine.sendDataPacket(i,W.RELIABLE),this.emit(x.ChatMessage,n),n})}sendText(e,A){return m(this,void 0,void 0,function*(){var n;const i=crypto.randomUUID(),s=new TextEncoder().encode(e).byteLength,o=(n=A==null?void 0:A.attachments)===null||n===void 0?void 0:n.map(()=>crypto.randomUUID()),a=new Array(o?o.length+1:1).fill(0),c=(u,d)=>{var h;a[d]=u;const g=a.reduce((f,p)=>f+p,0);(h=A==null?void 0:A.onProgress)===null||h===void 0||h.call(A,g)},l=yield this.streamText({streamId:i,totalSize:s,destinationIdentities:A==null?void 0:A.destinationIdentities,topic:A==null?void 0:A.topic,attachedStreamIds:o,attributes:A==null?void 0:A.attributes});return yield l.write(e),c(1,0),yield l.close(),A!=null&&A.attachments&&o&&(yield Promise.all(A.attachments.map((u,d)=>m(this,void 0,void 0,function*(){return this._sendFile(o[d],u,{topic:A.topic,mimeType:u.type,onProgress:h=>{c(h,d+1)}})})))),l.info})}streamText(e){return m(this,void 0,void 0,function*(){var A,n;const i=(A=e==null?void 0:e.streamId)!==null&&A!==void 0?A:crypto.randomUUID(),r={id:i,mimeType:"text/plain",timestamp:Date.now(),topic:(n=e==null?void 0:e.topic)!==null&&n!==void 0?n:"",size:e==null?void 0:e.totalSize,attributes:e==null?void 0:e.attributes},s=new ss({streamId:i,mimeType:r.mimeType,topic:r.topic,timestamp:wt(r.timestamp),totalLength:wt(e==null?void 0:e.totalSize),attributes:r.attributes,contentHeader:{case:"textHeader",value:new Qc({version:e==null?void 0:e.version,attachedStreamIds:e==null?void 0:e.attachedStreamIds,replyToStreamId:e==null?void 0:e.replyToStreamId,operationType:(e==null?void 0:e.type)==="update"?rs.UPDATE:rs.CREATE})}}),o=e==null?void 0:e.destinationIdentities,a=new He({destinationIdentities:o,value:{case:"streamHeader",value:s}});yield this.engine.sendDataPacket(a,W.RELIABLE);let c=0;const l=this,u=new WritableStream({write(g){return m(this,void 0,void 0,function*(){for(const f of bp(g,pu)){yield l.engine.waitForBufferStatusLow(W.RELIABLE);const p=new os({content:f,streamId:i,chunkIndex:wt(c)}),B=new He({destinationIdentities:o,value:{case:"streamChunk",value:p}});yield l.engine.sendDataPacket(B,W.RELIABLE),c+=1}})},close(){return m(this,void 0,void 0,function*(){const g=new as({streamId:i}),f=new He({destinationIdentities:o,value:{case:"streamTrailer",value:g}});yield l.engine.sendDataPacket(f,W.RELIABLE)})},abort(g){console.log("Sink error:",g)}});let d=()=>m(this,void 0,void 0,function*(){yield h.close()});l.engine.once(I.Closing,d);const h=new hm(u,r,()=>this.engine.off(I.Closing,d));return h})}sendFile(e,A){return m(this,void 0,void 0,function*(){const n=crypto.randomUUID();return yield this._sendFile(n,e,A),{id:n}})}_sendFile(e,A,n){return m(this,void 0,void 0,function*(){var i;const r=yield this.streamBytes({streamId:e,totalSize:A.size,name:A.name,mimeType:(i=n==null?void 0:n.mimeType)!==null&&i!==void 0?i:A.type,topic:n==null?void 0:n.topic,destinationIdentities:n==null?void 0:n.destinationIdentities}),s=A.stream().getReader();for(;;){const{done:o,value:a}=yield s.read();if(o)break;yield r.write(a)}return yield r.close(),r.info})}streamBytes(e){return m(this,void 0,void 0,function*(){var A,n,i,r,s;const o=(A=e==null?void 0:e.streamId)!==null&&A!==void 0?A:crypto.randomUUID(),a=e==null?void 0:e.destinationIdentities,c={id:o,mimeType:(n=e==null?void 0:e.mimeType)!==null&&n!==void 0?n:"application/octet-stream",topic:(i=e==null?void 0:e.topic)!==null&&i!==void 0?i:"",timestamp:Date.now(),attributes:e==null?void 0:e.attributes,size:e==null?void 0:e.totalSize,name:(r=e==null?void 0:e.name)!==null&&r!==void 0?r:"unknown"},l=new ss({totalLength:wt((s=c.size)!==null&&s!==void 0?s:0),mimeType:c.mimeType,streamId:o,topic:c.topic,timestamp:wt(Date.now()),attributes:c.attributes,contentHeader:{case:"byteHeader",value:new Ec({name:c.name})}}),u=new He({destinationIdentities:a,value:{case:"streamHeader",value:l}});yield this.engine.sendDataPacket(u,W.RELIABLE);let d=0;const h=new De,g=this.engine,f=this.log,p=new WritableStream({write(y){return m(this,void 0,void 0,function*(){const b=yield h.lock();let v=0;try{for(;v<y.byteLength;){const C=y.slice(v,v+pu);yield g.waitForBufferStatusLow(W.RELIABLE);const w=new He({destinationIdentities:a,value:{case:"streamChunk",value:new os({content:C,streamId:o,chunkIndex:wt(d)})}});yield g.sendDataPacket(w,W.RELIABLE),d+=1,v+=C.byteLength}}finally{b()}})},close(){return m(this,void 0,void 0,function*(){const y=new as({streamId:o}),b=new He({destinationIdentities:a,value:{case:"streamTrailer",value:y}});yield g.sendDataPacket(b,W.RELIABLE)})},abort(y){f.error("Sink error:",y)}});return new fm(p,c)})}performRpc(e){return m(this,arguments,void 0,function(A){var n=this;let{destinationIdentity:i,method:r,payload:s,responseTimeout:o=1e4}=A;return function*(){return new Promise((c,l)=>m(n,void 0,void 0,function*(){var u,d,h,g;if(no(s)>tu){l(le.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));return}if(!((d=(u=this.engine.latestJoinResponse)===null||u===void 0?void 0:u.serverInfo)===null||d===void 0)&&d.version&&Ct((g=(h=this.engine.latestJoinResponse)===null||h===void 0?void 0:h.serverInfo)===null||g===void 0?void 0:g.version,"1.8.0")<0){l(le.builtIn("UNSUPPORTED_SERVER"));return}const f=crypto.randomUUID();yield this.publishRpcRequest(i,f,r,s,o-2e3);const p=setTimeout(()=>{this.pendingAcks.delete(f),l(le.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(f),clearTimeout(B)},2e3);this.pendingAcks.set(f,{resolve:()=>{clearTimeout(p)},participantIdentity:i});const B=setTimeout(()=>{this.pendingResponses.delete(f),l(le.builtIn("RESPONSE_TIMEOUT"))},o);this.pendingResponses.set(f,{resolve:(y,b)=>{clearTimeout(B),this.pendingAcks.has(f)&&(console.warn("RPC response received before ack",f),this.pendingAcks.delete(f),clearTimeout(p)),b?l(b):c(y??"")},participantIdentity:i})}))}()})}registerRpcMethod(e,A){this.rpcHandlers.has(e)&&this.log.warn("you're overriding the RPC handler for method ".concat(e,", in the future this will throw an error")),this.rpcHandlers.set(e,A)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}setTrackSubscriptionPermissions(e){let A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];this.participantTrackPermissions=A,this.allParticipantsAllowedToSubscribe=e,this.engine.client.isDisconnected||this.updateTrackSubscriptionPermissions()}handleIncomingRpcAck(e){const A=this.pendingAcks.get(e);A?(A.resolve(),this.pendingAcks.delete(e)):console.error("Ack received for unexpected RPC request",e)}handleIncomingRpcResponse(e,A,n){const i=this.pendingResponses.get(e);i?(i.resolve(A,n),this.pendingResponses.delete(e)):console.error("Response received for unexpected RPC request",e)}publishRpcRequest(e,A,n,i,r){return m(this,void 0,void 0,function*(){const s=new He({destinationIdentities:[e],kind:W.RELIABLE,value:{case:"rpcRequest",value:new gc({id:A,method:n,payload:i,responseTimeoutMs:r,version:1})}});yield this.engine.sendDataPacket(s,W.RELIABLE)})}handleParticipantDisconnected(e){for(const[A,{participantIdentity:n}]of this.pendingAcks)n===e&&this.pendingAcks.delete(A);for(const[A,{participantIdentity:n,resolve:i}]of this.pendingResponses)n===e&&(i(null,le.builtIn("RECIPIENT_DISCONNECTED")),this.pendingResponses.delete(A))}setEnabledPublishCodecs(e){this.enabledPublishVideoCodecs=e.filter(A=>A.mime.split("/")[0].toLowerCase()==="video")}updateInfo(e){return super.updateInfo(e)?(e.tracks.forEach(A=>{var n,i;const r=this.trackPublications.get(A.sid);if(r){const s=r.isMuted||((i=(n=r.track)===null||n===void 0?void 0:n.isUpstreamPaused)!==null&&i!==void 0?i:!1);s!==A.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),X(r)),{mutedOnServer:s})),this.engine.client.sendMuteTrack(A.sid,s))}}),!0):!1}getPublicationForTrack(e){let A;return this.trackPublications.forEach(n=>{const i=n.track;i&&(e instanceof MediaStreamTrack?(yt(i)||JA(i))&&i.mediaStreamTrack===e&&(A=n):e===i&&(A=n))}),A}waitForPendingPublicationOfSource(e){return m(this,void 0,void 0,function*(){const n=Date.now();for(;Date.now()<n+1e4;){const i=Array.from(this.pendingPublishPromises.entries()).find(r=>{let[s]=r;return s.source===e});if(i)return i[1];yield Oe(20)}})}}class bm extends IA{constructor(e,A,n,i){super(e,A.sid,A.name,i),this.track=void 0,this.allowed=!0,this.disabled=!1,this.currentVideoQuality=$e.HIGH,this.handleEnded=r=>{this.setTrack(void 0),this.emit(k.Ended,r)},this.handleVisibilityChange=r=>{this.log.debug("adaptivestream video visibility ".concat(this.trackSid,", visible=").concat(r),this.logContext),this.disabled=!r,this.emitTrackUpdate()},this.handleVideoDimensionsChange=r=>{this.log.debug("adaptivestream video dimensions ".concat(r.width,"x").concat(r.height),this.logContext),this.videoDimensions=r,this.emitTrackUpdate()},this.subscribed=n,this.updateInfo(A)}setSubscribed(e){const A=this.subscriptionStatus,n=this.permissionStatus;this.subscribed=e,e&&(this.allowed=!0);const i=new mi({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new vc({participantSid:"",trackSids:[this.trackSid]})]});this.emit(k.UpdateSubscription,i),this.emitSubscriptionUpdateIfChanged(A),this.emitPermissionUpdateIfChanged(n)}get subscriptionStatus(){return this.subscribed===!1?IA.SubscriptionStatus.Unsubscribed:super.isSubscribed?IA.SubscriptionStatus.Subscribed:IA.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?IA.PermissionStatus.Allowed:IA.PermissionStatus.NotAllowed}get isSubscribed(){return this.subscribed===!1?!1:super.isSubscribed}get isDesired(){return this.subscribed!==!1}get isEnabled(){return!this.disabled}get isLocal(){return!1}setEnabled(e){!this.isManualOperationAllowed()||this.disabled===!e||(this.disabled=!e,this.emitTrackUpdate())}setVideoQuality(e){!this.isManualOperationAllowed()||this.currentVideoQuality===e||(this.currentVideoQuality=e,this.videoDimensions=void 0,this.emitTrackUpdate())}setVideoDimensions(e){var A,n;this.isManualOperationAllowed()&&(((A=this.videoDimensions)===null||A===void 0?void 0:A.width)===e.width&&((n=this.videoDimensions)===null||n===void 0?void 0:n.height)===e.height||(js(this.track)&&(this.videoDimensions=e),this.currentVideoQuality=void 0,this.emitTrackUpdate()))}setVideoFPS(e){this.isManualOperationAllowed()&&js(this.track)&&this.fps!==e&&(this.fps=e,this.emitTrackUpdate())}get videoQuality(){return this.currentVideoQuality}setTrack(e){const A=this.subscriptionStatus,n=this.permissionStatus,i=this.track;i!==e&&(i&&(i.off(k.VideoDimensionsChanged,this.handleVideoDimensionsChange),i.off(k.VisibilityChanged,this.handleVisibilityChange),i.off(k.Ended,this.handleEnded),i.detach(),i.stopMonitor(),this.emit(k.Unsubscribed,i)),super.setTrack(e),e&&(e.sid=this.trackSid,e.on(k.VideoDimensionsChanged,this.handleVideoDimensionsChange),e.on(k.VisibilityChanged,this.handleVisibilityChange),e.on(k.Ended,this.handleEnded),this.emit(k.Subscribed,e)),this.emitPermissionUpdateIfChanged(n),this.emitSubscriptionUpdateIfChanged(A))}setAllowed(e){const A=this.subscriptionStatus,n=this.permissionStatus;this.allowed=e,this.emitPermissionUpdateIfChanged(n),this.emitSubscriptionUpdateIfChanged(A)}setSubscriptionError(e){this.emit(k.SubscriptionFailed,e)}updateInfo(e){super.updateInfo(e);const A=this.metadataMuted;this.metadataMuted=e.muted,this.track?this.track.setMuted(e.muted):A!==e.muted&&this.emit(e.muted?k.Muted:k.Unmuted)}emitSubscriptionUpdateIfChanged(e){const A=this.subscriptionStatus;e!==A&&this.emit(k.SubscriptionStatusChanged,A,e)}emitPermissionUpdateIfChanged(e){this.permissionStatus!==e&&this.emit(k.SubscriptionPermissionChanged,this.permissionStatus,e)}isManualOperationAllowed(){return this.kind===E.Kind.Video&&this.isAdaptiveStream?(this.log.warn("adaptive stream is enabled, cannot change video track settings",this.logContext),!1):this.isDesired?!0:(this.log.warn("cannot update track settings when not subscribed",this.logContext),!1)}get isAdaptiveStream(){return js(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){const e=new Tc({trackSids:[this.trackSid],disabled:this.disabled,fps:this.fps});this.videoDimensions?(e.width=Math.ceil(this.videoDimensions.width),e.height=Math.ceil(this.videoDimensions.height)):this.currentVideoQuality!==void 0?e.quality=this.currentVideoQuality:e.quality=$e.HIGH,this.emit(k.UpdateSettings,e)}}class Oi extends gu{static fromParticipantInfo(e,A,n){return new Oi(e,A.sid,A.identity,A.name,A.metadata,A.attributes,n,A.kind)}get logContext(){return Object.assign(Object.assign({},super.logContext),{rpID:this.sid,remoteParticipant:this.identity})}constructor(e,A,n,i,r,s,o){let a=arguments.length>7&&arguments[7]!==void 0?arguments[7]:pi.STANDARD;super(A,n||"",i,r,s,o,a),this.signalClient=e,this.trackPublications=new Map,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.volumeMap=new Map}addTrackPublication(e){super.addTrackPublication(e),e.on(k.UpdateSettings,A=>{this.log.debug("send update settings",Object.assign(Object.assign({},this.logContext),X(e))),this.signalClient.sendUpdateTrackSettings(A)}),e.on(k.UpdateSubscription,A=>{A.participantTracks.forEach(n=>{n.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(A)}),e.on(k.SubscriptionPermissionChanged,A=>{this.emit(x.TrackSubscriptionPermissionChanged,e,A)}),e.on(k.SubscriptionStatusChanged,A=>{this.emit(x.TrackSubscriptionStatusChanged,e,A)}),e.on(k.Subscribed,A=>{this.emit(x.TrackSubscribed,A,e)}),e.on(k.Unsubscribed,A=>{this.emit(x.TrackUnsubscribed,A,e)}),e.on(k.SubscriptionFailed,A=>{this.emit(x.TrackSubscriptionFailed,e.trackSid,A)})}getTrackPublication(e){const A=super.getTrackPublication(e);if(A)return A}getTrackPublicationByName(e){const A=super.getTrackPublicationByName(e);if(A)return A}setVolume(e){let A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:E.Source.Microphone;this.volumeMap.set(A,e);const n=this.getTrackPublication(A);n&&n.track&&n.track.setVolume(e)}getVolume(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:E.Source.Microphone;const A=this.getTrackPublication(e);return A&&A.track?A.track.getVolume():this.volumeMap.get(e)}addSubscribedMediaTrack(e,A,n,i,r,s){let o=this.getTrackPublicationBySid(A);if(o||A.startsWith("TR")||this.trackPublications.forEach(l=>{!o&&e.kind===l.kind.toString()&&(o=l)}),!o){if(s===0){this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:A})),this.emit(x.TrackSubscriptionFailed,A);return}s===void 0&&(s=20),setTimeout(()=>{this.addSubscribedMediaTrack(e,A,n,i,r,s-1)},150);return}if(e.readyState==="ended"){this.log.error("unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()",Object.assign(Object.assign({},this.logContext),X(o))),this.emit(x.TrackSubscriptionFailed,A);return}const a=e.kind==="video";let c;return a?c=new pm(e,A,i,r):c=new gm(e,A,i,this.audioContext,this.audioOutput),c.source=o.source,c.isMuted=o.isMuted,c.setMediaStream(n),c.start(),o.setTrack(c),this.volumeMap.has(o.source)&&Gs(c)&&kA(c)&&c.setVolume(this.volumeMap.get(o.source)),o}get hasMetadata(){return!!this.participantInfo}getTrackPublicationBySid(e){return this.trackPublications.get(e)}updateInfo(e){if(!super.updateInfo(e))return!1;const A=new Map,n=new Map;return e.tracks.forEach(i=>{var r,s;let o=this.getTrackPublicationBySid(i.sid);if(o)o.updateInfo(i);else{const a=E.kindFromProto(i.type);if(!a)return;o=new bm(a,i,(r=this.signalClient.connectOptions)===null||r===void 0?void 0:r.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:(s=this.loggerOptions)===null||s===void 0?void 0:s.loggerName}),o.updateInfo(i),n.set(i.sid,o);const c=Array.from(this.trackPublications.values()).find(l=>l.source===(o==null?void 0:o.source));c&&o.source!==E.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(o.source),Object.assign(Object.assign({},this.logContext),{oldTrack:X(c),newTrack:X(o)})),this.addTrackPublication(o)}A.set(i.sid,o)}),this.trackPublications.forEach(i=>{A.has(i.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),X(i))),this.unpublishTrack(i.trackSid,!0))}),n.forEach(i=>{this.emit(x.TrackPublished,i)}),!0}unpublishTrack(e,A){const n=this.trackPublications.get(e);if(!n)return;const{track:i}=n;switch(i&&(i.stop(),n.setTrack(void 0)),this.trackPublications.delete(e),n.kind){case E.Kind.Audio:this.audioTrackPublications.delete(e);break;case E.Kind.Video:this.videoTrackPublications.delete(e);break}A&&this.emit(x.TrackUnpublished,n)}setAudioOutput(e){return m(this,void 0,void 0,function*(){this.audioOutput=e;const A=[];this.audioTrackPublications.forEach(n=>{var i;kA(n.track)&&Gs(n.track)&&A.push(n.track.setSinkId((i=e.deviceId)!==null&&i!==void 0?i:"default"))}),yield Promise.all(A)})}emit(e){for(var A=arguments.length,n=new Array(A>1?A-1:0),i=1;i<A;i++)n[i-1]=arguments[i];return this.log.trace("participant event",Object.assign(Object.assign({},this.logContext),{event:e,args:n})),super.emit(e,...n)}}var J;(function(t){t.Disconnected="disconnected",t.Connecting="connecting",t.Connected="connected",t.Reconnecting="reconnecting",t.SignalReconnecting="signalReconnecting"})(J||(J={}));const Um=4*1e3;class bt extends mA.EventEmitter{constructor(e){var A,n,i,r;if(super(),A=this,this.state=J.Disconnected,this.activeSpeakers=[],this.isE2EEEnabled=!1,this.audioEnabled=!0,this.isVideoPlaybackBlocked=!1,this.log=K,this.bufferedEvents=[],this.isResuming=!1,this.byteStreamControllers=new Map,this.textStreamControllers=new Map,this.byteStreamHandlers=new Map,this.textStreamHandlers=new Map,this.rpcHandlers=new Map,this.connect=(s,o,a)=>m(this,void 0,void 0,function*(){var c;if(!up())throw BA()?Error("WebRTC isn't detected, have you called registerGlobals?"):Error("LiveKit doesn't seem to be supported on this browser. Try to update your browser and make sure no browser extensions are disabling webRTC.");const l=yield this.disconnectLock.lock();if(this.state===J.Connected)return this.log.info("already connected to room ".concat(this.name),this.logContext),l(),Promise.resolve();if(this.connectFuture)return l(),this.connectFuture.promise;this.setAndEmitConnectionState(J.Connecting),((c=this.regionUrlProvider)===null||c===void 0?void 0:c.getServerUrl().toString())!==s&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),Hs(new URL(s))&&(this.regionUrlProvider===void 0?this.regionUrlProvider=new co(s,o):this.regionUrlProvider.updateToken(o),this.regionUrlProvider.fetchRegionSettings().then(h=>{var g;(g=this.regionUrlProvider)===null||g===void 0||g.setServerReportedRegions(h)}).catch(h=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:h}))}));const u=(h,g,f)=>m(this,void 0,void 0,function*(){var p,B;this.abortController&&this.abortController.abort();const y=new AbortController;this.abortController=y,l==null||l();try{yield this.attemptConnection(f??s,o,a,y),this.abortController=void 0,h()}catch(b){if(this.regionUrlProvider&&b instanceof z&&b.reason!==G.Cancelled&&b.reason!==G.NotAllowed){let v=null;try{v=yield this.regionUrlProvider.getNextBestRegionUrl((p=this.abortController)===null||p===void 0?void 0:p.signal)}catch(C){if(C instanceof z&&(C.status===401||C.reason===G.Cancelled)){this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),g(C);return}}v&&!(!((B=this.abortController)===null||B===void 0)&&B.signal.aborted)?(this.log.info("Initial connection failed with ConnectionError: ".concat(b.message,". Retrying with another region: ").concat(v),this.logContext),this.recreateEngine(),yield u(h,g,v)):(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Ol(b)),g(b))}else{let v=nA.UNKNOWN_REASON;b instanceof z&&(v=Ol(b)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,v),g(b)}}}),d=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new Ks((h,g)=>{u(h,g,d)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(s,o,a,c,l,u)=>m(this,void 0,void 0,function*(){var d,h,g;const f=yield a.join(s,o,{autoSubscribe:c.autoSubscribe,adaptiveStream:typeof l.adaptiveStream=="object"?!0:l.adaptiveStream,maxRetries:c.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:c.websocketTimeout},u.signal);let p=f.serverInfo;if(p||(p={version:f.serverVersion,region:f.serverRegion}),this.serverInfo=p,this.log.debug("connected to Livekit Server ".concat(Object.entries(p).map(B=>{let[y,b]=B;return"".concat(y,": ").concat(b)}).join(", ")),{room:(d=f.room)===null||d===void 0?void 0:d.name,roomSid:(h=f.room)===null||h===void 0?void 0:h.sid,identity:(g=f.participant)===null||g===void 0?void 0:g.identity}),!p.version)throw new Yg("unknown server version");return p.version==="0.15.1"&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version",this.logContext),l.dynacast=!1),f}),this.applyJoinResponse=s=>{const o=s.participant;if(this.localParticipant.sid=o.sid,this.localParticipant.identity=o.identity,this.localParticipant.setEnabledPublishCodecs(s.enabledPublishCodecs),this.options.e2ee&&this.e2eeManager)try{this.e2eeManager.setSifTrailer(s.sifTrailer)}catch(a){this.log.error(a instanceof Error?a.message:"Could not set SifTrailer",Object.assign(Object.assign({},this.logContext),{error:a}))}this.handleParticipantUpdates([o,...s.otherParticipants]),s.room&&this.handleRoomUpdate(s.room)},this.attemptConnection=(s,o,a,c)=>m(this,void 0,void 0,function*(){var l,u;this.state===J.Reconnecting||this.isResuming||!((l=this.engine)===null||l===void 0)&&l.pendingReconnect?(this.log.info("Reconnection attempt replaced by new connection attempt",this.logContext),this.recreateEngine()):this.maybeCreateEngine(),!((u=this.regionUrlProvider)===null||u===void 0)&&u.isCloud()&&this.engine.setRegionUrlProvider(this.regionUrlProvider),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},to),a),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{const d=yield this.connectSignal(s,o,this.engine,this.connOptions,this.options,c);this.applyJoinResponse(d),this.setupLocalParticipantEvents(),this.emit(T.SignalConnected)}catch(d){yield this.engine.close(),this.recreateEngine();const h=new z("could not establish signal connection",G.ServerUnreachable);throw d instanceof Error&&(h.message="".concat(h.message,": ").concat(d.message)),d instanceof z&&(h.reason=d.reason,h.status=d.status),this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:d})),h}if(c.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),new z("Connection attempt aborted",G.Cancelled);try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,c)}catch(d){throw yield this.engine.close(),this.recreateEngine(),d}Me()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),Me()&&document.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState(J.Connected),this.emit(T.Connected),this.registerConnectionReconcile()}),this.disconnect=function(){for(var s=arguments.length,o=new Array(s),a=0;a<s;a++)o[a]=arguments[a];return m(A,[...o],void 0,function(){var c=this;let l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var u,d,h,g;const f=yield c.disconnectLock.lock();try{if(c.state===J.Disconnected){c.log.debug("already disconnected",c.logContext);return}c.log.info("disconnect from room",Object.assign({},c.logContext)),(c.state===J.Connecting||c.state===J.Reconnecting||c.isResuming)&&(c.log.warn("abort connection attempt",c.logContext),(u=c.abortController)===null||u===void 0||u.abort(),(h=(d=c.connectFuture)===null||d===void 0?void 0:d.reject)===null||h===void 0||h.call(d,new z("Client initiated disconnect",G.Cancelled)),c.connectFuture=void 0),!((g=c.engine)===null||g===void 0)&&g.client.isDisconnected||(yield c.engine.client.sendLeave()),c.engine&&(yield c.engine.close()),c.handleDisconnect(l,nA.CLIENT_INITIATED),c.engine=void 0}finally{f()}}()})},this.onPageLeave=()=>m(this,void 0,void 0,function*(){this.log.info("Page leave detected, disconnecting",this.logContext),yield this.disconnect()}),this.startAudio=()=>m(this,void 0,void 0,function*(){const s=[],o=oA();if(o&&o.os==="iOS"){const a="livekit-dummy-audio-el";let c=document.getElementById(a);if(!c){c=document.createElement("audio"),c.id=a,c.autoplay=!0,c.hidden=!0;const l=Ns();l.enabled=!0;const u=new MediaStream([l]);c.srcObject=u,document.addEventListener("visibilitychange",()=>{c&&(c.srcObject=document.hidden?null:u,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()))}),document.body.append(c),this.once(T.Disconnected,()=>{c==null||c.remove(),c=null})}s.push(c)}this.remoteParticipants.forEach(a=>{a.audioTrackPublications.forEach(c=>{c.track&&c.track.attachedElements.forEach(l=>{s.push(l)})})});try{yield Promise.all([this.acquireAudioContext(),...s.map(a=>(a.muted=!1,a.play()))]),this.handleAudioPlaybackStarted()}catch(a){throw this.handleAudioPlaybackFailed(a),a}}),this.startVideo=()=>m(this,void 0,void 0,function*(){const s=[];for(const o of this.remoteParticipants.values())o.videoTrackPublications.forEach(a=>{var c;(c=a.track)===null||c===void 0||c.attachedElements.forEach(l=>{s.includes(l)||s.push(l)})});yield Promise.all(s.map(o=>o.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch(o=>{o.name==="NotAllowedError"?this.handleVideoPlaybackFailed():this.log.warn("Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler",this.logContext)})}),this.handleRestarting=()=>{this.clearConnectionReconcile(),this.isResuming=!1;for(const s of this.remoteParticipants.values())this.handleParticipantDisconnected(s.identity,s);this.setAndEmitConnectionState(J.Reconnecting)&&this.emit(T.Reconnecting)},this.handleSignalRestarted=s=>m(this,void 0,void 0,function*(){this.log.debug("signal reconnected to server, region ".concat(s.serverRegion),Object.assign(Object.assign({},this.logContext),{region:s.serverRegion})),this.bufferedEvents=[],this.applyJoinResponse(s);try{yield this.localParticipant.republishAllTracks(void 0,!0)}catch(o){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:o}))}try{yield this.engine.waitForRestarted(),this.log.debug("fully reconnected to server",Object.assign(Object.assign({},this.logContext),{region:s.serverRegion}))}catch{return}this.setAndEmitConnectionState(J.Connected),this.emit(T.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=s=>{s.forEach(o=>{var a;if(o.identity===this.localParticipant.identity){this.localParticipant.updateInfo(o);return}o.identity===""&&(o.identity=(a=this.sidToIdentity.get(o.sid))!==null&&a!==void 0?a:"");let c=this.remoteParticipants.get(o.identity);o.state===Mt.DISCONNECTED?this.handleParticipantDisconnected(o.identity,c):c=this.getOrCreateParticipant(o.identity,o)})},this.handleActiveSpeakersUpdate=s=>{const o=[],a={};s.forEach(c=>{if(a[c.sid]=!0,c.sid===this.localParticipant.sid)this.localParticipant.audioLevel=c.level,this.localParticipant.setIsSpeaking(!0),o.push(this.localParticipant);else{const l=this.getRemoteParticipantBySid(c.sid);l&&(l.audioLevel=c.level,l.setIsSpeaking(!0),o.push(l))}}),a[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach(c=>{a[c.sid]||(c.audioLevel=0,c.setIsSpeaking(!1))}),this.activeSpeakers=o,this.emitWhenConnected(T.ActiveSpeakersChanged,o)},this.handleSpeakersChanged=s=>{const o=new Map;this.activeSpeakers.forEach(c=>{const l=this.remoteParticipants.get(c.identity);l&&l.sid!==c.sid||o.set(c.sid,c)}),s.forEach(c=>{let l=this.getRemoteParticipantBySid(c.sid);c.sid===this.localParticipant.sid&&(l=this.localParticipant),l&&(l.audioLevel=c.level,l.setIsSpeaking(c.active),c.active?o.set(c.sid,l):o.delete(c.sid))});const a=Array.from(o.values());a.sort((c,l)=>l.audioLevel-c.audioLevel),this.activeSpeakers=a,this.emitWhenConnected(T.ActiveSpeakersChanged,a)},this.handleStreamStateUpdate=s=>{s.streamStates.forEach(o=>{const a=this.getRemoteParticipantBySid(o.participantSid);if(!a)return;const c=a.getTrackPublicationBySid(o.trackSid);if(!c||!c.track)return;const l=E.streamStateFromProto(o.state);l!==c.track.streamState&&(c.track.streamState=l,a.emit(x.TrackStreamStateChanged,c,c.track.streamState),this.emitWhenConnected(T.TrackStreamStateChanged,c,c.track.streamState,a))})},this.handleSubscriptionPermissionUpdate=s=>{const o=this.getRemoteParticipantBySid(s.participantSid);if(!o)return;const a=o.getTrackPublicationBySid(s.trackSid);a&&a.setAllowed(s.allowed)},this.handleSubscriptionError=s=>{const o=Array.from(this.remoteParticipants.values()).find(c=>c.trackPublications.has(s.trackSid));if(!o)return;const a=o.getTrackPublicationBySid(s.trackSid);a&&a.setSubscriptionError(s.err)},this.handleDataPacket=s=>{const o=this.remoteParticipants.get(s.participantIdentity);if(s.value.case==="user")this.handleUserPacket(o,s.value.value,s.kind);else if(s.value.case==="transcription")this.handleTranscription(o,s.value.value);else if(s.value.case==="sipDtmf")this.handleSipDtmf(o,s.value.value);else if(s.value.case==="chatMessage")this.handleChatMessage(o,s.value.value);else if(s.value.case==="metrics")this.handleMetrics(s.value.value,o);else if(s.value.case==="streamHeader")this.handleStreamHeader(s.value.value,s.participantIdentity);else if(s.value.case==="streamChunk")this.handleStreamChunk(s.value.value);else if(s.value.case==="streamTrailer")this.handleStreamTrailer(s.value.value);else if(s.value.case==="rpcRequest"){const a=s.value.value;this.handleIncomingRpcRequest(s.participantIdentity,a.id,a.method,a.payload,a.responseTimeoutMs,a.version)}},this.handleUserPacket=(s,o,a)=>{this.emit(T.DataReceived,o.payload,s,a,o.topic),s==null||s.emit(x.DataReceived,o.payload,a)},this.handleSipDtmf=(s,o)=>{this.emit(T.SipDTMFReceived,o,s),s==null||s.emit(x.SipDTMFReceived,o)},this.bufferedSegments=new Map,this.handleTranscription=(s,o)=>{const a=o.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(o.transcribedParticipantIdentity),c=a==null?void 0:a.trackPublications.get(o.trackId),l=vp(o,this.transcriptionReceivedTimes);c==null||c.emit(k.TranscriptionReceived,l),a==null||a.emit(x.TranscriptionReceived,l,c),this.emit(T.TranscriptionReceived,l,a,c)},this.handleChatMessage=(s,o)=>{const a=Cp(o);this.emit(T.ChatMessage,a,s)},this.handleMetrics=(s,o)=>{this.emit(T.MetricsReceived,s,o)},this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(T.AudioPlaybackStatusChanged,!0))},this.handleAudioPlaybackFailed=s=>{this.log.warn("could not playback audio",Object.assign(Object.assign({},this.logContext),{error:s})),this.canPlaybackAudio&&(this.audioEnabled=!1,this.emit(T.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(T.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(T.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>m(this,void 0,void 0,function*(){var s,o,a;const c=Ce.getInstance().previousDevices,l=yield Ce.getInstance().getDevices(void 0,!1),u=oA();if((u==null?void 0:u.name)==="Chrome"&&u.os!=="iOS")for(let h of l){const g=c.find(f=>f.deviceId===h.deviceId);g&&g.label!==""&&g.kind===h.kind&&g.label!==h.label&&this.getActiveDevice(h.kind)==="default"&&this.emit(T.ActiveDeviceChanged,h.kind,h.deviceId)}const d=["audiooutput","audioinput","videoinput"];for(let h of d){const g=Up(h),f=this.localParticipant.getTrackPublication(g);if(f&&(!((s=f.track)===null||s===void 0)&&s.isUserProvided))continue;const p=l.filter(y=>y.kind===h),B=this.getActiveDevice(h);if(B===((o=c.filter(y=>y.kind===h)[0])===null||o===void 0?void 0:o.deviceId)&&p.length>0&&((a=p[0])===null||a===void 0?void 0:a.deviceId)!==B){yield this.switchActiveDevice(h,p[0].deviceId);continue}h==="audioinput"&&!jA()||h==="videoinput"||p.length>0&&!p.find(y=>y.deviceId===this.getActiveDevice(h))&&(yield this.switchActiveDevice(h,p[0].deviceId))}this.emit(T.MediaDevicesChanged)}),this.handleRoomUpdate=s=>{const o=this.roomInfo;this.roomInfo=s,o&&o.metadata!==s.metadata&&this.emitWhenConnected(T.RoomMetadataChanged,s.metadata),(o==null?void 0:o.activeRecording)!==s.activeRecording&&this.emitWhenConnected(T.RecordingStatusChanged,s.activeRecording)},this.handleConnectionQualityUpdate=s=>{s.updates.forEach(o=>{if(o.participantSid===this.localParticipant.sid){this.localParticipant.setConnectionQuality(o.quality);return}const a=this.getRemoteParticipantBySid(o.participantSid);a&&a.setConnectionQuality(o.quality)})},this.onLocalParticipantMetadataChanged=s=>{this.emit(T.ParticipantMetadataChanged,s,this.localParticipant)},this.onLocalParticipantNameChanged=s=>{this.emit(T.ParticipantNameChanged,s,this.localParticipant)},this.onLocalAttributesChanged=s=>{this.emit(T.ParticipantAttributesChanged,s,this.localParticipant)},this.onLocalTrackMuted=s=>{this.emit(T.TrackMuted,s,this.localParticipant)},this.onLocalTrackUnmuted=s=>{this.emit(T.TrackUnmuted,s,this.localParticipant)},this.onTrackProcessorUpdate=s=>{var o;(o=s==null?void 0:s.onPublish)===null||o===void 0||o.call(s,this)},this.onLocalTrackPublished=s=>m(this,void 0,void 0,function*(){var o,a,c,l,u,d;(o=s.track)===null||o===void 0||o.on(k.TrackProcessorUpdate,this.onTrackProcessorUpdate),(a=s.track)===null||a===void 0||a.on(k.Restarted,this.onLocalTrackRestarted),(u=(l=(c=s.track)===null||c===void 0?void 0:c.getProcessor())===null||l===void 0?void 0:l.onPublish)===null||u===void 0||u.call(l,this),this.emit(T.LocalTrackPublished,s,this.localParticipant),yt(s.track)&&(yield s.track.checkForSilence())&&this.emit(T.LocalAudioSilenceDetected,s);const h=yield(d=s.track)===null||d===void 0?void 0:d.getDeviceId(!1),g=Vl(s.source);g&&h&&h!==this.localParticipant.activeDeviceMap.get(g)&&(this.localParticipant.activeDeviceMap.set(g,h),this.emit(T.ActiveDeviceChanged,g,h))}),this.onLocalTrackUnpublished=s=>{var o,a;(o=s.track)===null||o===void 0||o.off(k.TrackProcessorUpdate,this.onTrackProcessorUpdate),(a=s.track)===null||a===void 0||a.off(k.Restarted,this.onLocalTrackRestarted),this.emit(T.LocalTrackUnpublished,s,this.localParticipant)},this.onLocalTrackRestarted=s=>m(this,void 0,void 0,function*(){const o=yield s.getDeviceId(!1),a=Vl(s.source);a&&o&&o!==this.localParticipant.activeDeviceMap.get(a)&&(this.log.debug("local track restarted, setting ".concat(a," ").concat(o," active"),this.logContext),this.localParticipant.activeDeviceMap.set(a,o),this.emit(T.ActiveDeviceChanged,a,o))}),this.onLocalConnectionQualityChanged=s=>{this.emit(T.ConnectionQualityChanged,s,this.localParticipant)},this.onMediaDevicesError=s=>{this.emit(T.MediaDevicesError,s)},this.onLocalParticipantPermissionsChanged=s=>{this.emit(T.ParticipantPermissionsChanged,s,this.localParticipant)},this.onLocalChatMessageSent=s=>{this.emit(T.ChatMessage,s,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},jp),e),this.log=TA((n=this.options.loggerName)!==null&&n!==void 0?n:sA.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},eu),e==null?void 0:e.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},Au),e==null?void 0:e.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},Gp),e==null?void 0:e.publishDefaults),this.maybeCreateEngine(),this.disconnectLock=new De,this.localParticipant=new ym("","",this.engine,this.options,this.rpcHandlers),this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",WA(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",WA(this.options.audioCaptureDefaults.deviceId)),!((i=this.options.audioOutput)===null||i===void 0)&&i.deviceId&&this.switchActiveDevice("audiooutput",WA(this.options.audioOutput.deviceId)).catch(s=>this.log.warn("Could not set audio output: ".concat(s.message),this.logContext)),this.options.e2ee&&this.setupE2EE(),Me()){const s=new AbortController;(r=navigator.mediaDevices)===null||r===void 0||r.addEventListener("devicechange",this.handleDeviceChange,{signal:s.signal}),bt.cleanupRegistry&&bt.cleanupRegistry.register(this,()=>{s.abort()})}}registerTextStreamHandler(e,A){if(this.textStreamHandlers.has(e))throw new TypeError('A text stream handler for topic "'.concat(e,'" has already been set.'));this.textStreamHandlers.set(e,A)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}registerByteStreamHandler(e,A){if(this.byteStreamHandlers.has(e))throw new TypeError('A byte stream handler for topic "'.concat(e,'" has already been set.'));this.byteStreamHandlers.set(e,A)}unregisterByteStreamHandler(e){this.byteStreamHandlers.delete(e)}registerRpcMethod(e,A){if(this.rpcHandlers.has(e))throw Error("RPC handler already registered for method ".concat(e,", unregisterRpcMethod before trying to register again"));this.rpcHandlers.set(e,A)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}handleIncomingRpcRequest(e,A,n,i,r,s){return m(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(e,A),s!==1){yield this.engine.publishRpcResponse(e,A,null,le.builtIn("UNSUPPORTED_VERSION"));return}const o=this.rpcHandlers.get(n);if(!o){yield this.engine.publishRpcResponse(e,A,null,le.builtIn("UNSUPPORTED_METHOD"));return}let a=null,c=null;try{const l=yield o({requestId:A,callerIdentity:e,payload:i,responseTimeout:r});no(l)>tu?(a=le.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),console.warn("RPC Response payload too large for ".concat(n))):c=l}catch(l){l instanceof le?a=l:(console.warn("Uncaught error returned by RPC handler for ".concat(n,". Returning APPLICATION_ERROR instead."),l),a=le.builtIn("APPLICATION_ERROR"))}yield this.engine.publishRpcResponse(e,A,c,a)})}setE2EEEnabled(e){return m(this,void 0,void 0,function*(){if(this.e2eeManager)yield Promise.all([this.localParticipant.setE2EEEnabled(e)]),this.localParticipant.identity!==""&&this.e2eeManager.setParticipantCryptorEnabled(e,this.localParticipant.identity);else throw Error("e2ee not configured, please set e2ee settings within the room options")})}setupE2EE(){var e;this.options.e2ee&&("e2eeManager"in this.options.e2ee?this.e2eeManager=this.options.e2ee.e2eeManager:this.e2eeManager=new kp(this.options.e2ee),this.e2eeManager.on(VA.ParticipantEncryptionStatusChanged,(A,n)=>{yp(n)&&(this.isE2EEEnabled=A),this.emit(T.ParticipantEncryptionStatusChanged,A,n)}),this.e2eeManager.on(VA.EncryptionError,A=>this.emit(T.EncryptionError,A)),(e=this.e2eeManager)===null||e===void 0||e.setup(this))}get logContext(){var e;return{room:this.name,roomID:(e=this.roomInfo)===null||e===void 0?void 0:e.sid,participant:this.localParticipant.identity,pID:this.localParticipant.sid}}get isRecording(){var e,A;return(A=(e=this.roomInfo)===null||e===void 0?void 0:e.activeRecording)!==null&&A!==void 0?A:!1}getSid(){return m(this,void 0,void 0,function*(){return this.state===J.Disconnected?"":this.roomInfo&&this.roomInfo.sid!==""?this.roomInfo.sid:new Promise((e,A)=>{const n=i=>{i.sid!==""&&(this.engine.off(I.RoomUpdate,n),e(i.sid))};this.engine.on(I.RoomUpdate,n),this.once(T.Disconnected,()=>{this.engine.off(I.RoomUpdate,n),A("Room disconnected before room server id was available")})})})}get name(){var e,A;return(A=(e=this.roomInfo)===null||e===void 0?void 0:e.name)!==null&&A!==void 0?A:""}get metadata(){var e;return(e=this.roomInfo)===null||e===void 0?void 0:e.metadata}get numParticipants(){var e,A;return(A=(e=this.roomInfo)===null||e===void 0?void 0:e.numParticipants)!==null&&A!==void 0?A:0}get numPublishers(){var e,A;return(A=(e=this.roomInfo)===null||e===void 0?void 0:e.numPublishers)!==null&&A!==void 0?A:0}maybeCreateEngine(){this.engine&&!this.engine.isClosed||(this.engine=new om(this.options),this.engine.on(I.ParticipantUpdate,this.handleParticipantUpdates).on(I.RoomUpdate,this.handleRoomUpdate).on(I.SpeakersChanged,this.handleSpeakersChanged).on(I.StreamStateChanged,this.handleStreamStateUpdate).on(I.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(I.SubscriptionError,this.handleSubscriptionError).on(I.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(I.MediaTrackAdded,(e,A,n)=>{this.onTrackAdded(e,A,n)}).on(I.Disconnected,e=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e)}).on(I.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(I.DataPacketReceived,this.handleDataPacket).on(I.Resuming,()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState(J.SignalReconnecting)&&this.emit(T.SignalReconnecting)}).on(I.Resumed,()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState(J.Connected)&&this.emit(T.Reconnected)}).on(I.SignalResumed,()=>{this.bufferedEvents=[],(this.state===J.Reconnecting||this.isResuming)&&this.sendSyncState()}).on(I.Restarting,this.handleRestarting).on(I.SignalRestarted,this.handleSignalRestarted).on(I.Offline,()=>{this.setAndEmitConnectionState(J.Reconnecting)&&this.emit(T.Reconnecting)}).on(I.DCBufferStatusChanged,(e,A)=>{this.emit(T.DCBufferStatusChanged,e,A)}).on(I.LocalTrackSubscribed,e=>{const A=this.localParticipant.getTrackPublications().find(n=>{let{trackSid:i}=n;return i===e});if(!A){this.log.warn("could not find local track subscription for subscribed event",this.logContext);return}this.localParticipant.emit(x.LocalTrackSubscribed,A),this.emitWhenConnected(T.LocalTrackSubscribed,A,this.localParticipant)}).on(I.RoomMoved,e=>{this.log.debug("room moved",e),e.room&&this.handleRoomUpdate(e.room),this.remoteParticipants.forEach((A,n)=>{this.handleParticipantDisconnected(n,A)}),this.emit(T.Moved,e.room.name,e.token),e.participant?this.handleParticipantUpdates([e.participant,...e.otherParticipants]):this.handleParticipantUpdates(e.otherParticipants)}),this.localParticipant&&this.localParticipant.setupEngine(this.engine),this.e2eeManager&&this.e2eeManager.setupEngine(this.engine))}static getLocalDevices(e){let A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return Ce.getInstance().getDevices(e,A)}prepareConnection(e,A){return m(this,void 0,void 0,function*(){if(this.state===J.Disconnected){this.log.debug("prepareConnection to ".concat(e),this.logContext);try{if(Hs(new URL(e))&&A){this.regionUrlProvider=new co(e,A);const n=yield this.regionUrlProvider.getNextBestRegionUrl();n&&this.state===J.Disconnected&&(this.regionUrl=n,yield fetch(Vs(n),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(n),this.logContext))}else yield fetch(Vs(e),{method:"HEAD"})}catch(n){this.log.warn("could not prepare connection",Object.assign(Object.assign({},this.logContext),{error:n}))}}})}getParticipantByIdentity(e){return this.localParticipant.identity===e?this.localParticipant:this.remoteParticipants.get(e)}clearConnectionFutures(){this.connectFuture=void 0}simulateScenario(e,A){return m(this,void 0,void 0,function*(){let n=()=>{},i;switch(e){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":i=new pA({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":i=new pA({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":i=new pA({scenario:{case:"serverLeave",value:!0}});break;case"migration":i=new pA({scenario:{case:"migration",value:!0}});break;case"resume-reconnect":this.engine.failNext(),yield this.engine.client.handleOnClose("simulate resume-disconnect");break;case"disconnect-signal-on-resume":n=()=>m(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),i=new pA({scenario:{case:"disconnectSignalOnResume",value:!0}});break;case"disconnect-signal-on-resume-no-messages":n=()=>m(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),i=new pA({scenario:{case:"disconnectSignalOnResumeNoMessages",value:!0}});break;case"full-reconnect":this.engine.fullReconnectOnNext=!0,yield this.engine.client.handleOnClose("simulate full-reconnect");break;case"force-tcp":case"force-tls":i=new pA({scenario:{case:"switchCandidateProtocol",value:e==="force-tls"?2:1}}),n=()=>m(this,void 0,void 0,function*(){const r=this.engine.client.onLeave;r&&r(new Bi({reason:nA.CLIENT_INITIATED,action:Kt.RECONNECT}))});break;case"subscriber-bandwidth":if(A===void 0||typeof A!="number")throw new Error("subscriber-bandwidth requires a number as argument");i=new pA({scenario:{case:"subscriberBandwidth",value:wt(A)}});break;case"leave-full-reconnect":i=new pA({scenario:{case:"leaveRequestFullReconnect",value:!0}})}i&&(yield this.engine.client.sendSimulateScenario(i),yield n())})}get canPlaybackAudio(){return this.audioEnabled}get canPlaybackVideo(){return!this.isVideoPlaybackBlocked}getActiveDevice(e){return this.localParticipant.activeDeviceMap.get(e)}switchActiveDevice(e,A){return m(this,arguments,void 0,function(n,i){var r=this;let s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return function*(){var o,a,c,l,u,d,h,g;let f=!0,p=!1;const B=s?{exact:i}:i;if(n==="audioinput"){p=r.localParticipant.audioTrackPublications.size===0;const y=(o=r.getActiveDevice(n))!==null&&o!==void 0?o:r.options.audioCaptureDefaults.deviceId;r.options.audioCaptureDefaults.deviceId=B;const b=Array.from(r.localParticipant.audioTrackPublications.values()).filter(v=>v.source===E.Source.Microphone);try{f=(yield Promise.all(b.map(v=>{var C;return(C=v.audioTrack)===null||C===void 0?void 0:C.setDeviceId(B)}))).every(v=>v===!0)}catch(v){throw r.options.audioCaptureDefaults.deviceId=y,v}}else if(n==="videoinput"){p=r.localParticipant.videoTrackPublications.size===0;const y=(a=r.getActiveDevice(n))!==null&&a!==void 0?a:r.options.videoCaptureDefaults.deviceId;r.options.videoCaptureDefaults.deviceId=B;const b=Array.from(r.localParticipant.videoTrackPublications.values()).filter(v=>v.source===E.Source.Camera);try{f=(yield Promise.all(b.map(v=>{var C;return(C=v.videoTrack)===null||C===void 0?void 0:C.setDeviceId(B)}))).every(v=>v===!0)}catch(v){throw r.options.videoCaptureDefaults.deviceId=y,v}}else if(n==="audiooutput"){if(!_s()&&!r.options.webAudioMix||r.options.webAudioMix&&r.audioContext&&!("setSinkId"in r.audioContext))throw new Error("cannot switch audio output, setSinkId not supported");r.options.webAudioMix&&(i=(c=yield Ce.getInstance().normalizeDeviceId("audiooutput",i))!==null&&c!==void 0?c:""),(l=(g=r.options).audioOutput)!==null&&l!==void 0||(g.audioOutput={});const y=(u=r.getActiveDevice(n))!==null&&u!==void 0?u:r.options.audioOutput.deviceId;r.options.audioOutput.deviceId=i;try{r.options.webAudioMix&&((d=r.audioContext)===null||d===void 0||d.setSinkId(i)),yield Promise.all(Array.from(r.remoteParticipants.values()).map(b=>b.setAudioOutput({deviceId:i})))}catch(b){throw r.options.audioOutput.deviceId=y,b}}return(p||n==="audiooutput")&&(r.localParticipant.activeDeviceMap.set(n,n==="audiooutput"&&((h=r.options.audioOutput)===null||h===void 0?void 0:h.deviceId)||i),r.emit(T.ActiveDeviceChanged,n,i)),f}()})}setupLocalParticipantEvents(){this.localParticipant.on(x.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(x.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(x.AttributesChanged,this.onLocalAttributesChanged).on(x.TrackMuted,this.onLocalTrackMuted).on(x.TrackUnmuted,this.onLocalTrackUnmuted).on(x.LocalTrackPublished,this.onLocalTrackPublished).on(x.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(x.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(x.MediaDevicesError,this.onMediaDevicesError).on(x.AudioStreamAcquired,this.startAudio).on(x.ChatMessage,this.onLocalChatMessageSent).on(x.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged)}recreateEngine(){var e;(e=this.engine)===null||e===void 0||e.close(),this.engine=void 0,this.isResuming=!1,this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.bufferedEvents=[],this.maybeCreateEngine()}onTrackAdded(e,A,n){if(this.state===J.Connecting||this.state===J.Reconnecting){const l=()=>{this.onTrackAdded(e,A,n),u()},u=()=>{this.off(T.Reconnected,l),this.off(T.Connected,l),this.off(T.Disconnected,u)};this.once(T.Reconnected,l),this.once(T.Connected,l),this.once(T.Disconnected,u);return}if(this.state===J.Disconnected){this.log.warn("skipping incoming track after Room disconnected",this.logContext);return}if(e.readyState==="ended"){this.log.info("skipping incoming track as it already ended",this.logContext);return}const i=ap(A.id),r=i[0];let s=i[1],o=e.id;if(s&&s.startsWith("TR")&&(o=s),r===this.localParticipant.sid){this.log.warn("tried to create RemoteParticipant for local participant",this.logContext);return}const a=Array.from(this.remoteParticipants.values()).find(l=>l.sid===r);if(!a){this.log.error("Tried to add a track for a participant, that's not present. Sid: ".concat(r),this.logContext);return}let c;this.options.adaptiveStream&&(typeof this.options.adaptiveStream=="object"?c=this.options.adaptiveStream:c={}),a.addSubscribedMediaTrack(e,o,A,n,c)}handleDisconnect(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,A=arguments.length>1?arguments[1]:void 0;var n;if(this.clearConnectionReconcile(),this.isResuming=!1,this.bufferedEvents=[],this.transcriptionReceivedTimes.clear(),this.state!==J.Disconnected){this.regionUrl=void 0;try{this.remoteParticipants.forEach(i=>{i.trackPublications.forEach(r=>{i.unpublishTrack(r.trackSid)})}),this.localParticipant.trackPublications.forEach(i=>{var r,s,o;i.track&&this.localParticipant.unpublishTrack(i.track,e),e?((r=i.track)===null||r===void 0||r.detach(),(s=i.track)===null||s===void 0||s.stop()):(o=i.track)===null||o===void 0||o.stopMonitor()}),this.localParticipant.off(x.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(x.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(x.AttributesChanged,this.onLocalAttributesChanged).off(x.TrackMuted,this.onLocalTrackMuted).off(x.TrackUnmuted,this.onLocalTrackUnmuted).off(x.LocalTrackPublished,this.onLocalTrackPublished).off(x.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(x.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(x.MediaDevicesError,this.onMediaDevicesError).off(x.AudioStreamAcquired,this.startAudio).off(x.ChatMessage,this.onLocalChatMessageSent).off(x.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged),this.localParticipant.trackPublications.clear(),this.localParticipant.videoTrackPublications.clear(),this.localParticipant.audioTrackPublications.clear(),this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.activeSpeakers=[],this.audioContext&&typeof this.options.webAudioMix=="boolean"&&(this.audioContext.close(),this.audioContext=void 0),Me()&&(window.removeEventListener("beforeunload",this.onPageLeave),window.removeEventListener("pagehide",this.onPageLeave),window.removeEventListener("freeze",this.onPageLeave),(n=navigator.mediaDevices)===null||n===void 0||n.removeEventListener("devicechange",this.handleDeviceChange))}finally{this.setAndEmitConnectionState(J.Disconnected),this.emit(T.Disconnected,A)}}}handleParticipantDisconnected(e,A){var n;this.remoteParticipants.delete(e),A&&(A.trackPublications.forEach(i=>{A.unpublishTrack(i.trackSid,!0)}),this.emit(T.ParticipantDisconnected,A),A.setDisconnected(),(n=this.localParticipant)===null||n===void 0||n.handleParticipantDisconnected(A.identity))}handleStreamHeader(e,A){return m(this,void 0,void 0,function*(){var n;if(e.contentHeader.case==="byteHeader"){const i=this.byteStreamHandlers.get(e.topic);if(!i){this.log.debug("ignoring incoming byte stream due to no handler for topic",e.topic);return}let r;const s={id:e.streamId,name:(n=e.contentHeader.value.name)!==null&&n!==void 0?n:"unknown",mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Ii(e.timestamp),attributes:e.attributes},o=new ReadableStream({start:a=>{r=a,this.byteStreamControllers.set(e.streamId,{info:s,controller:r,startTime:Date.now()})}});i(new um(s,o,Ii(e.totalLength)),{identity:A})}else if(e.contentHeader.case==="textHeader"){const i=this.textStreamHandlers.get(e.topic);if(!i){this.log.debug("ignoring incoming text stream due to no handler for topic",e.topic);return}let r;const s={id:e.streamId,mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Number(e.timestamp),attributes:e.attributes},o=new ReadableStream({start:a=>{r=a,this.textStreamControllers.set(e.streamId,{info:s,controller:r,startTime:Date.now()})}});i(new dm(s,o,Ii(e.totalLength)),{identity:A})}})}handleStreamChunk(e){const A=this.byteStreamControllers.get(e.streamId);A&&e.content.length>0&&A.controller.enqueue(e);const n=this.textStreamControllers.get(e.streamId);n&&e.content.length>0&&n.controller.enqueue(e)}handleStreamTrailer(e){const A=this.textStreamControllers.get(e.streamId);A&&(A.info.attributes=Object.assign(Object.assign({},A.info.attributes),e.attributes),A.controller.close(),this.textStreamControllers.delete(e.streamId));const n=this.byteStreamControllers.get(e.streamId);n&&(n.info.attributes=Object.assign(Object.assign({},n.info.attributes),e.attributes),n.controller.close(),this.byteStreamControllers.delete(e.streamId))}acquireAudioContext(){return m(this,void 0,void 0,function*(){var e,A;if(typeof this.options.webAudioMix!="boolean"&&this.options.webAudioMix.audioContext?this.audioContext=this.options.webAudioMix.audioContext:(!this.audioContext||this.audioContext.state==="closed")&&(this.audioContext=(e=Kl())!==null&&e!==void 0?e:void 0),this.options.webAudioMix&&this.remoteParticipants.forEach(i=>i.setAudioContext(this.audioContext)),this.localParticipant.setAudioContext(this.audioContext),this.audioContext&&this.audioContext.state==="suspended")try{yield Promise.race([this.audioContext.resume(),Oe(200)])}catch(i){this.log.warn("Could not resume audio context",Object.assign(Object.assign({},this.logContext),{error:i}))}const n=((A=this.audioContext)===null||A===void 0?void 0:A.state)==="running";n!==this.canPlaybackAudio&&(this.audioEnabled=n,this.emit(T.AudioPlaybackStatusChanged,n))})}createParticipant(e,A){var n;let i;return A?i=Oi.fromParticipantInfo(this.engine.client,A,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}):i=new Oi(this.engine.client,"",e,void 0,void 0,void 0,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}),this.options.webAudioMix&&i.setAudioContext(this.audioContext),!((n=this.options.audioOutput)===null||n===void 0)&&n.deviceId&&i.setAudioOutput(this.options.audioOutput).catch(r=>this.log.warn("Could not set audio output: ".concat(r.message),this.logContext)),i}getOrCreateParticipant(e,A){if(this.remoteParticipants.has(e)){const i=this.remoteParticipants.get(e);return A&&i.updateInfo(A)&&this.sidToIdentity.set(A.sid,A.identity),i}const n=this.createParticipant(e,A);return this.remoteParticipants.set(e,n),this.sidToIdentity.set(A.sid,A.identity),this.emitWhenConnected(T.ParticipantConnected,n),n.on(x.TrackPublished,i=>{this.emitWhenConnected(T.TrackPublished,i,n)}).on(x.TrackSubscribed,(i,r)=>{i.kind===E.Kind.Audio?(i.on(k.AudioPlaybackStarted,this.handleAudioPlaybackStarted),i.on(k.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):i.kind===E.Kind.Video&&(i.on(k.VideoPlaybackFailed,this.handleVideoPlaybackFailed),i.on(k.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emit(T.TrackSubscribed,i,r,n)}).on(x.TrackUnpublished,i=>{this.emit(T.TrackUnpublished,i,n)}).on(x.TrackUnsubscribed,(i,r)=>{this.emit(T.TrackUnsubscribed,i,r,n)}).on(x.TrackMuted,i=>{this.emitWhenConnected(T.TrackMuted,i,n)}).on(x.TrackUnmuted,i=>{this.emitWhenConnected(T.TrackUnmuted,i,n)}).on(x.ParticipantMetadataChanged,i=>{this.emitWhenConnected(T.ParticipantMetadataChanged,i,n)}).on(x.ParticipantNameChanged,i=>{this.emitWhenConnected(T.ParticipantNameChanged,i,n)}).on(x.AttributesChanged,i=>{this.emitWhenConnected(T.ParticipantAttributesChanged,i,n)}).on(x.ConnectionQualityChanged,i=>{this.emitWhenConnected(T.ConnectionQualityChanged,i,n)}).on(x.ParticipantPermissionsChanged,i=>{this.emitWhenConnected(T.ParticipantPermissionsChanged,i,n)}).on(x.TrackSubscriptionStatusChanged,(i,r)=>{this.emitWhenConnected(T.TrackSubscriptionStatusChanged,i,r,n)}).on(x.TrackSubscriptionFailed,(i,r)=>{this.emit(T.TrackSubscriptionFailed,i,n,r)}).on(x.TrackSubscriptionPermissionChanged,(i,r)=>{this.emitWhenConnected(T.TrackSubscriptionPermissionChanged,i,r,n)}).on(x.Active,()=>{this.emitWhenConnected(T.ParticipantActive,n)}),A&&n.updateInfo(A),n}sendSyncState(){const e=Array.from(this.remoteParticipants.values()).reduce((n,i)=>(n.push(...i.getTrackPublications()),n),[]),A=this.localParticipant.getTrackPublications();this.engine.sendSyncState(e,A)}updateSubscriptions(){for(const e of this.remoteParticipants.values())for(const A of e.videoTrackPublications.values())A.isSubscribed&&wp(A)&&A.emitTrackUpdate()}getRemoteParticipantBySid(e){const A=this.sidToIdentity.get(e);if(A)return this.remoteParticipants.get(A)}registerConnectionReconcile(){this.clearConnectionReconcile();let e=0;this.connectionReconcileInterval=ye.setInterval(()=>{!this.engine||this.engine.isClosed||!this.engine.verifyTransport()?(e++,this.log.warn("detected connection state mismatch",Object.assign(Object.assign({},this.logContext),{numFailures:e,engine:this.engine?{closed:this.engine.isClosed,transportsConnected:this.engine.verifyTransport()}:void 0})),e>=3&&(this.recreateEngine(),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,nA.STATE_MISMATCH))):e=0},Um)}clearConnectionReconcile(){this.connectionReconcileInterval&&ye.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(e){return e===this.state?!1:(this.state=e,this.emit(T.ConnectionStateChanged,this.state),!0)}emitBufferedEvents(){this.bufferedEvents.forEach(e=>{let[A,n]=e;this.emit(A,...n)}),this.bufferedEvents=[]}emitWhenConnected(e){for(var A=arguments.length,n=new Array(A>1?A-1:0),i=1;i<A;i++)n[i-1]=arguments[i];if(this.state===J.Reconnecting||this.isResuming||!this.engine||this.engine.pendingReconnect)this.bufferedEvents.push([e,n]);else if(this.state===J.Connected)return this.emit(e,...n);return!1}simulateParticipants(e){return m(this,void 0,void 0,function*(){var A,n;const i=Object.assign({audio:!0,video:!0,useRealTracks:!1},e.publish),r=Object.assign({count:9,audio:!1,video:!0,aspectRatios:[1.66,1.7,1.3]},e.participants);if(this.handleDisconnect(),this.roomInfo=new fi({sid:"RM_SIMULATED",name:"simulated-room",emptyTimeout:0,maxParticipants:0,creationTime:re.parse(new Date().getTime()),metadata:"",numParticipants:1,numPublishers:1,turnPassword:"",enabledCodecs:[],activeRecording:!1}),this.localParticipant.updateInfo(new pt({identity:"simulated-local",name:"local-name"})),this.setupLocalParticipantEvents(),this.emit(T.SignalConnected),this.emit(T.Connected),this.setAndEmitConnectionState(J.Connected),i.video){const s=new ho(E.Kind.Video,new Nt({source:ge.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:tA.AUDIO,name:"video-dummy"}),new _i(i.useRealTracks?(yield window.navigator.mediaDevices.getUserMedia({video:!0})).getVideoTracks()[0]:Hl(160*((A=r.aspectRatios[0])!==null&&A!==void 0?A:1),160,!0,!0),void 0,!1,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(s),this.localParticipant.emit(x.LocalTrackPublished,s)}if(i.audio){const s=new ho(E.Kind.Audio,new Nt({source:ge.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:tA.AUDIO}),new Li(i.useRealTracks?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:Ns(),void 0,!1,this.audioContext,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(s),this.localParticipant.emit(x.LocalTrackPublished,s)}for(let s=0;s<r.count-1;s+=1){let o=new pt({sid:Math.floor(Math.random()*1e4).toString(),identity:"simulated-".concat(s),state:Mt.ACTIVE,tracks:[],joinedAt:re.parse(Date.now())});const a=this.getOrCreateParticipant(o.identity,o);if(r.video){const c=Hl(160*((n=r.aspectRatios[s%r.aspectRatios.length])!==null&&n!==void 0?n:1),160,!1,!0),l=new Nt({source:ge.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:tA.AUDIO});a.addSubscribedMediaTrack(c,l.sid,new MediaStream([c]),new RTCRtpReceiver),o.tracks=[...o.tracks,l]}if(r.audio){const c=Ns(),l=new Nt({source:ge.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:tA.AUDIO});a.addSubscribedMediaTrack(c,l.sid,new MediaStream([c]),new RTCRtpReceiver),o.tracks=[...o.tracks,l]}a.updateInfo(o)}})}emit(e){for(var A=arguments.length,n=new Array(A>1?A-1:0),i=1;i<A;i++)n[i-1]=arguments[i];if(e!==T.ActiveSpeakersChanged&&e!==T.TranscriptionReceived){const r=mu(n).filter(s=>s!==void 0);this.log.debug("room event ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:r}))}return super.emit(e,...n)}}bt.cleanupRegistry=typeof FinalizationRegistry<"u"&&new FinalizationRegistry(t=>{t()});function mu(t){return t.map(e=>{if(e)return Array.isArray(e)?mu(e):typeof e=="object"?"logContext"in e?e.logContext:void 0:e})}var lA;(function(t){t[t.IDLE=0]="IDLE",t[t.RUNNING=1]="RUNNING",t[t.SKIPPED=2]="SKIPPED",t[t.SUCCESS=3]="SUCCESS",t[t.FAILED=4]="FAILED"})(lA||(lA={}));class YA extends mA.EventEmitter{constructor(e,A){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.status=lA.IDLE,this.logs=[],this.options={},this.url=e,this.token=A,this.name=this.constructor.name,this.room=new bt(n.roomOptions),this.connectOptions=n.connectOptions,this.options=n}run(e){return m(this,void 0,void 0,function*(){if(this.status!==lA.IDLE)throw Error("check is running already");this.setStatus(lA.RUNNING);try{yield this.perform()}catch(A){A instanceof Error&&(this.options.errorsAsWarnings?this.appendWarning(A.message):this.appendError(A.message))}return yield this.disconnect(),yield new Promise(A=>setTimeout(A,500)),this.status!==lA.SKIPPED&&this.setStatus(this.isSuccess()?lA.SUCCESS:lA.FAILED),e&&e(),this.getInfo()})}isSuccess(){return!this.logs.some(e=>e.level==="error")}connect(e){return m(this,void 0,void 0,function*(){return this.room.state===J.Connected?this.room:(e||(e=this.url),yield this.room.connect(e,this.token,this.connectOptions),this.room)})}disconnect(){return m(this,void 0,void 0,function*(){this.room&&this.room.state!==J.Disconnected&&(yield this.room.disconnect(),yield new Promise(e=>setTimeout(e,500)))})}skip(){this.setStatus(lA.SKIPPED)}switchProtocol(e){return m(this,void 0,void 0,function*(){let A=!1,n=!1;if(this.room.on(T.Reconnecting,()=>{A=!0}),this.room.once(T.Reconnected,()=>{n=!0}),this.room.simulateScenario("force-".concat(e)),yield new Promise(r=>setTimeout(r,1e3)),!A)return;const i=Date.now()+1e4;for(;Date.now()<i;){if(n)return;yield Oe(100)}throw new Error("Could not reconnect using ".concat(e," protocol after 10 seconds"))})}appendMessage(e){this.logs.push({level:"info",message:e}),this.emit("update",this.getInfo())}appendWarning(e){this.logs.push({level:"warning",message:e}),this.emit("update",this.getInfo())}appendError(e){this.logs.push({level:"error",message:e}),this.emit("update",this.getInfo())}setStatus(e){this.status=e,this.emit("update",this.getInfo())}get engine(){var e;return(e=this.room)===null||e===void 0?void 0:e.engine}getInfo(){return{logs:this.logs,name:this.name,status:this.status,description:this.description}}}class Qm extends YA{get description(){return"Cloud regions"}perform(){return m(this,void 0,void 0,function*(){const e=new co(this.url,this.token);if(!e.isCloud()){this.skip();return}const A=[],n=new Set;for(let r=0;r<3;r++){const s=yield e.getNextBestRegionUrl();if(!s)break;if(n.has(s))continue;n.add(s);const o=yield this.checkCloudRegion(s);this.appendMessage("".concat(o.region," RTT: ").concat(o.rtt,"ms, duration: ").concat(o.duration,"ms")),A.push(o)}A.sort((r,s)=>(r.duration-s.duration)*.5+(r.rtt-s.rtt)*.5);const i=A[0];this.bestStats=i,this.appendMessage("best Cloud region: ".concat(i.region))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkCloudRegion(e){return m(this,void 0,void 0,function*(){var A,n;yield this.connect(e),this.options.protocol==="tcp"&&(yield this.switchProtocol("tcp"));const i=(A=this.room.serverInfo)===null||A===void 0?void 0:A.region;if(!i)throw new Error("Region not found");const r=yield this.room.localParticipant.streamText({topic:"test"}),s=1e3,a=1e6/s,c="A".repeat(s),l=Date.now();for(let g=0;g<a;g++)yield r.write(c);yield r.close();const u=Date.now(),d=yield(n=this.room.engine.pcManager)===null||n===void 0?void 0:n.publisher.getStats(),h={region:i,rtt:1e4,duration:u-l};return d==null||d.forEach(g=>{g.type==="candidate-pair"&&g.nominated&&(h.rtt=g.currentRoundTripTime*1e3)}),yield this.disconnect(),h})}}const fo=1e4;class Em extends YA{get description(){return"Connection via UDP vs TCP"}perform(){return m(this,void 0,void 0,function*(){const e=yield this.checkConnectionProtocol("udp"),A=yield this.checkConnectionProtocol("tcp");this.bestStats=e,e.qualityLimitationDurations.bandwidth-A.qualityLimitationDurations.bandwidth>.5||(e.packetsLost-A.packetsLost)/e.packetsSent>.01?(this.appendMessage("best connection quality via tcp"),this.bestStats=A):this.appendMessage("best connection quality via udp");const n=this.bestStats;this.appendMessage("upstream bitrate: ".concat((n.bitrateTotal/n.count/1e3/1e3).toFixed(2)," mbps")),this.appendMessage("RTT: ".concat((n.rttTotal/n.count*1e3).toFixed(2)," ms")),this.appendMessage("jitter: ".concat((n.jitterTotal/n.count*1e3).toFixed(2)," ms")),n.packetsLost>0&&this.appendWarning("packets lost: ".concat((n.packetsLost/n.packetsSent*100).toFixed(2),"%")),n.qualityLimitationDurations.bandwidth>1&&this.appendWarning("bandwidth limited ".concat((n.qualityLimitationDurations.bandwidth/(fo/1e3)*100).toFixed(2),"%")),n.qualityLimitationDurations.cpu>0&&this.appendWarning("cpu limited ".concat((n.qualityLimitationDurations.cpu/(fo/1e3)*100).toFixed(2),"%"))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkConnectionProtocol(e){return m(this,void 0,void 0,function*(){yield this.connect(),e==="tcp"?yield this.switchProtocol("tcp"):yield this.switchProtocol("udp");const A=document.createElement("canvas");A.width=1280,A.height=720;const n=A.getContext("2d");if(!n)throw new Error("Could not get canvas context");let i=0;const r=()=>{i=(i+1)%360,n.fillStyle="hsl(".concat(i,", 100%, 50%)"),n.fillRect(0,0,A.width,A.height),requestAnimationFrame(r)};r();const o=A.captureStream(30).getVideoTracks()[0],c=(yield this.room.localParticipant.publishTrack(o,{simulcast:!1,degradationPreference:"maintain-resolution",videoEncoding:{maxBitrate:2e6}})).track,l={protocol:e,packetsLost:0,packetsSent:0,qualityLimitationDurations:{},rttTotal:0,jitterTotal:0,bitrateTotal:0,count:0},u=setInterval(()=>m(this,void 0,void 0,function*(){const d=yield c.getRTCStatsReport();d==null||d.forEach(h=>{h.type==="outbound-rtp"?(l.packetsSent=h.packetsSent,l.qualityLimitationDurations=h.qualityLimitationDurations,l.bitrateTotal+=h.targetBitrate,l.count++):h.type==="remote-inbound-rtp"&&(l.packetsLost=h.packetsLost,l.rttTotal+=h.roundTripTime,l.jitterTotal+=h.jitter)})}),1e3);return yield new Promise(d=>setTimeout(d,fo)),clearInterval(u),o.stop(),A.remove(),yield this.disconnect(),l})}}class Sm extends YA{get description(){return"Can publish audio"}perform(){return m(this,void 0,void 0,function*(){var e;const A=yield this.connect(),n=yield vm();if(yield Nl(n,1e3))throw new Error("unable to detect audio from microphone");this.appendMessage("detected audio from microphone"),A.localParticipant.publishTrack(n),yield new Promise(o=>setTimeout(o,3e3));const r=yield(e=n.sender)===null||e===void 0?void 0:e.getStats();if(!r)throw new Error("Could not get RTCStats");let s=0;if(r.forEach(o=>{o.type==="outbound-rtp"&&(o.kind==="audio"||!o.kind&&o.mediaType==="audio")&&(s=o.packetsSent)}),s===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(s," audio packets"))})}}class Tm extends YA{get description(){return"Can publish video"}perform(){return m(this,void 0,void 0,function*(){var e;const A=yield this.connect(),n=yield Bm();yield this.checkForVideo(n.mediaStreamTrack),A.localParticipant.publishTrack(n),yield new Promise(s=>setTimeout(s,5e3));const i=yield(e=n.sender)===null||e===void 0?void 0:e.getStats();if(!i)throw new Error("Could not get RTCStats");let r=0;if(i.forEach(s=>{s.type==="outbound-rtp"&&(s.kind==="video"||!s.kind&&s.mediaType==="video")&&(r+=s.packetsSent)}),r===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(r," video packets"))})}checkForVideo(e){return m(this,void 0,void 0,function*(){const A=new MediaStream;A.addTrack(e.clone());const n=document.createElement("video");n.srcObject=A,n.muted=!0,yield new Promise(i=>{n.onplay=()=>{setTimeout(()=>{var r,s,o,a;const c=document.createElement("canvas"),l=e.getSettings(),u=(s=(r=l.width)!==null&&r!==void 0?r:n.videoWidth)!==null&&s!==void 0?s:1280,d=(a=(o=l.height)!==null&&o!==void 0?o:n.videoHeight)!==null&&a!==void 0?a:720;c.width=u,c.height=d;const h=c.getContext("2d");h.drawImage(n,0,0);const f=h.getImageData(0,0,c.width,c.height).data;let p=!0;for(let B=0;B<f.length;B+=4)if(f[B]!==0||f[B+1]!==0||f[B+2]!==0){p=!1;break}p?this.appendError("camera appears to be producing only black frames"):this.appendMessage("received video frames"),i()},1e3)},n.play()}),n.remove()})}}class Fm extends YA{get description(){return"Resuming connection after interruption"}perform(){return m(this,void 0,void 0,function*(){var e;const A=yield this.connect();let n=!1,i=!1,r;const s=new Promise(c=>{setTimeout(c,5e3),r=c}),o=()=>{n=!0};A.on(T.SignalReconnecting,o).on(T.Reconnecting,o).on(T.Reconnected,()=>{i=!0,r(!0)}),(e=A.engine.client.ws)===null||e===void 0||e.close();const a=A.engine.client.onClose;if(a&&a(""),yield s,n){if(!i||A.state!==J.Connected)throw this.appendWarning("reconnection is only possible in Redis-based configurations"),new Error("Not able to reconnect")}else throw new Error("Did not attempt to reconnect")})}}class km extends YA{get description(){return"Can connect via TURN"}perform(){return m(this,void 0,void 0,function*(){var e,A;const n=new $s,i=yield n.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});let r=!1,s=!1,o=!1;for(let a of i.iceServers)for(let c of a.urls)c.startsWith("turn:")?(s=!0,o=!0):c.startsWith("turns:")&&(s=!0,o=!0,r=!0),c.startsWith("stun:")&&(o=!0);o?s&&!r&&this.appendWarning("TURN is configured server side, but TURN/TLS is unavailable."):this.appendWarning("No STUN servers configured on server side."),yield n.close(),!((A=(e=this.connectOptions)===null||e===void 0?void 0:e.rtcConfig)===null||A===void 0)&&A.iceServers||s?yield this.room.connect(this.url,this.token,{rtcConfig:{iceTransportPolicy:"relay"}}):(this.appendWarning("No TURN servers configured."),this.skip(),yield new Promise(a=>setTimeout(a,0)))})}}class Im extends YA{get description(){return"Establishing WebRTC connection"}perform(){return m(this,void 0,void 0,function*(){let e=!1,A=!1;this.room.on(T.SignalConnected,()=>{const n=this.room.engine.client.onTrickle;this.room.engine.client.onTrickle=(i,r)=>{if(i.candidate){const s=new RTCIceCandidate(i);let o="".concat(s.protocol," ").concat(s.address,":").concat(s.port," ").concat(s.type);s.address&&(Rm(s.address)?o+=" (private)":s.protocol==="tcp"&&s.tcpType==="passive"?(e=!0,o+=" (passive)"):s.protocol==="udp"&&(A=!0)),this.appendMessage(o)}n&&n(i,r)},this.room.engine.pcManager&&(this.room.engine.pcManager.subscriber.onIceCandidateError=i=>{i instanceof RTCPeerConnectionIceErrorEvent&&this.appendWarning("error with ICE candidate: ".concat(i.errorCode," ").concat(i.errorText," ").concat(i.url))})});try{yield this.connect(),K.info("now the room is connected")}catch(n){throw this.appendWarning("ports need to be open on firewall in order to connect."),n}e||this.appendWarning("Server is not configured for ICE/TCP"),A||this.appendWarning("No public IPv4 UDP candidates were found. Your server is likely not configured correctly")})}}function Rm(t){const e=t.split(".");if(e.length===4){if(e[0]==="10")return!0;if(e[0]==="192"&&e[1]==="168")return!0;if(e[0]==="172"){const A=parseInt(e[1],10);if(A>=16&&A<=31)return!0}}return!1}class xm extends YA{get description(){return"Connecting to signal connection via WebSocket"}perform(){return m(this,void 0,void 0,function*(){var e,A,n;(this.url.startsWith("ws:")||this.url.startsWith("http:"))&&this.appendWarning("Server is insecure, clients may block connections to it");let i=new $s;const r=yield i.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});this.appendMessage("Connected to server, version ".concat(r.serverVersion,".")),((e=r.serverInfo)===null||e===void 0?void 0:e.edition)===Cc.Cloud&&(!((A=r.serverInfo)===null||A===void 0)&&A.region)&&this.appendMessage("LiveKit Cloud: ".concat((n=r.serverInfo)===null||n===void 0?void 0:n.region)),yield i.close()})}}class wU extends mA.EventEmitter{constructor(e,A){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.options={},this.checkResults=new Map,this.url=e,this.token=A,this.options=n}getNextCheckId(){const e=this.checkResults.size;return this.checkResults.set(e,{logs:[],status:lA.IDLE,name:"",description:""}),e}updateCheck(e,A){this.checkResults.set(e,A),this.emit("checkUpdate",e,A)}isSuccess(){return Array.from(this.checkResults.values()).every(e=>e.status!==lA.FAILED)}getResults(){return Array.from(this.checkResults.values())}createAndRunCheck(e){return m(this,void 0,void 0,function*(){const A=this.getNextCheckId(),n=new e(this.url,this.token,this.options),i=s=>{this.updateCheck(A,s)};n.on("update",i);const r=yield n.run();return n.off("update",i),r})}checkWebsocket(){return m(this,void 0,void 0,function*(){return this.createAndRunCheck(xm)})}checkWebRTC(){return m(this,void 0,void 0,function*(){return this.createAndRunCheck(Im)})}checkTURN(){return m(this,void 0,void 0,function*(){return this.createAndRunCheck(km)})}checkReconnect(){return m(this,void 0,void 0,function*(){return this.createAndRunCheck(Fm)})}checkPublishAudio(){return m(this,void 0,void 0,function*(){return this.createAndRunCheck(Sm)})}checkPublishVideo(){return m(this,void 0,void 0,function*(){return this.createAndRunCheck(Tm)})}checkConnectionProtocol(){return m(this,void 0,void 0,function*(){const e=yield this.createAndRunCheck(Em);if(e.data&&"protocol"in e.data){const A=e.data;this.options.protocol=A.protocol}return e})}checkCloudRegion(){return m(this,void 0,void 0,function*(){return this.createAndRunCheck(Qm)})}}const Ne=Symbol.for("@ts-pattern/matcher"),Bu=Symbol.for("@ts-pattern/isVariadic"),Mi="@ts-pattern/anonymous-select-key",go=t=>!!(t&&typeof t=="object"),Ni=t=>t&&!!t[Ne],be=(t,e,A)=>{if(Ni(t)){const n=t[Ne](),{matched:i,selections:r}=n.match(e);return i&&r&&Object.keys(r).forEach(s=>A(s,r[s])),i}if(go(t)){if(!go(e))return!1;if(Array.isArray(t)){if(!Array.isArray(e))return!1;let n=[],i=[],r=[];for(const s of t.keys()){const o=t[s];Ni(o)&&o[Bu]?r.push(o):r.length?i.push(o):n.push(o)}if(r.length){if(r.length>1)throw new Error("Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.");if(e.length<n.length+i.length)return!1;const s=e.slice(0,n.length),o=i.length===0?[]:e.slice(-i.length),a=e.slice(n.length,i.length===0?1/0:-i.length);return n.every((c,l)=>be(c,s[l],A))&&i.every((c,l)=>be(c,o[l],A))&&(r.length===0||be(r[0],a,A))}return t.length===e.length&&t.every((s,o)=>be(s,e[o],A))}return Reflect.ownKeys(t).every(n=>{const i=t[n];return(n in e||Ni(r=i)&&r[Ne]().matcherType==="optional")&&be(i,e[n],A);var r})}return Object.is(e,t)},We=t=>{var e,A,n;return go(t)?Ni(t)?(e=(A=(n=t[Ne]()).getSelectionKeys)==null?void 0:A.call(n))!=null?e:[]:Array.isArray(t)?Sn(t,We):Sn(Object.values(t),We):[]},Sn=(t,e)=>t.reduce((A,n)=>A.concat(e(n)),[]);function Pm(...t){if(t.length===1){const[e]=t;return A=>be(e,A,()=>{})}if(t.length===2){const[e,A]=t;return be(e,A,()=>{})}throw new Error(`isMatching wasn't given the right number of arguments: expected 1 or 2, received ${t.length}.`)}function Ue(t){return Object.assign(t,{optional:()=>mo(t),and:e=>te(t,e),or:e=>vu(t,e),select:e=>e===void 0?Tn(t):Tn(e,t)})}function po(t){return Object.assign((e=>Object.assign(e,{[Symbol.iterator](){let A=0;const n=[{value:Object.assign(e,{[Bu]:!0}),done:!1},{done:!0,value:void 0}];return{next:()=>{var i;return(i=n[A++])!=null?i:n.at(-1)}}}}))(t),{optional:()=>po(mo(t)),select:e=>po(e===void 0?Tn(t):Tn(e,t))})}function mo(t){return Ue({[Ne]:()=>({match:e=>{let A={};const n=(i,r)=>{A[i]=r};return e===void 0?(We(t).forEach(i=>n(i,void 0)),{matched:!0,selections:A}):{matched:be(t,e,n),selections:A}},getSelectionKeys:()=>We(t),matcherType:"optional"})})}const Lm=(t,e)=>{for(const A of t)if(!e(A))return!1;return!0},Dm=(t,e)=>{for(const[A,n]of t.entries())if(!e(n,A))return!1;return!0};function te(...t){return Ue({[Ne]:()=>({match:e=>{let A={};const n=(i,r)=>{A[i]=r};return{matched:t.every(i=>be(i,e,n)),selections:A}},getSelectionKeys:()=>Sn(t,We),matcherType:"and"})})}function vu(...t){return Ue({[Ne]:()=>({match:e=>{let A={};const n=(i,r)=>{A[i]=r};return Sn(t,We).forEach(i=>n(i,void 0)),{matched:t.some(i=>be(i,e,n)),selections:A}},getSelectionKeys:()=>Sn(t,We),matcherType:"or"})})}function j(t){return{[Ne]:()=>({match:e=>({matched:!!t(e)})})}}function Tn(...t){const e=typeof t[0]=="string"?t[0]:void 0,A=t.length===2?t[1]:typeof t[0]=="string"?void 0:t[0];return Ue({[Ne]:()=>({match:n=>{let i={[e??Mi]:n};return{matched:A===void 0||be(A,n,(r,s)=>{i[r]=s}),selections:i}},getSelectionKeys:()=>[e??Mi].concat(A===void 0?[]:We(A))})})}function vA(t){return typeof t=="number"}function qA(t){return typeof t=="string"}function zA(t){return typeof t=="bigint"}const Cu=Ue(j(function(t){return!0})),_m=Cu,ZA=t=>Object.assign(Ue(t),{startsWith:e=>{return ZA(te(t,(A=e,j(n=>qA(n)&&n.startsWith(A)))));var A},endsWith:e=>{return ZA(te(t,(A=e,j(n=>qA(n)&&n.endsWith(A)))));var A},minLength:e=>ZA(te(t,(A=>j(n=>qA(n)&&n.length>=A))(e))),length:e=>ZA(te(t,(A=>j(n=>qA(n)&&n.length===A))(e))),maxLength:e=>ZA(te(t,(A=>j(n=>qA(n)&&n.length<=A))(e))),includes:e=>{return ZA(te(t,(A=e,j(n=>qA(n)&&n.includes(A)))));var A},regex:e=>{return ZA(te(t,(A=e,j(n=>qA(n)&&!!n.match(A)))));var A}}),Hm=ZA(j(qA)),CA=t=>Object.assign(Ue(t),{between:(e,A)=>CA(te(t,((n,i)=>j(r=>vA(r)&&n<=r&&i>=r))(e,A))),lt:e=>CA(te(t,(A=>j(n=>vA(n)&&n<A))(e))),gt:e=>CA(te(t,(A=>j(n=>vA(n)&&n>A))(e))),lte:e=>CA(te(t,(A=>j(n=>vA(n)&&n<=A))(e))),gte:e=>CA(te(t,(A=>j(n=>vA(n)&&n>=A))(e))),int:()=>CA(te(t,j(e=>vA(e)&&Number.isInteger(e)))),finite:()=>CA(te(t,j(e=>vA(e)&&Number.isFinite(e)))),positive:()=>CA(te(t,j(e=>vA(e)&&e>0))),negative:()=>CA(te(t,j(e=>vA(e)&&e<0)))}),Om=CA(j(vA)),et=t=>Object.assign(Ue(t),{between:(e,A)=>et(te(t,((n,i)=>j(r=>zA(r)&&n<=r&&i>=r))(e,A))),lt:e=>et(te(t,(A=>j(n=>zA(n)&&n<A))(e))),gt:e=>et(te(t,(A=>j(n=>zA(n)&&n>A))(e))),lte:e=>et(te(t,(A=>j(n=>zA(n)&&n<=A))(e))),gte:e=>et(te(t,(A=>j(n=>zA(n)&&n>=A))(e))),positive:()=>et(te(t,j(e=>zA(e)&&e>0))),negative:()=>et(te(t,j(e=>zA(e)&&e<0)))}),Mm=et(j(zA)),Nm=Ue(j(function(t){return typeof t=="boolean"})),Km=Ue(j(function(t){return typeof t=="symbol"})),Vm=Ue(j(function(t){return t==null})),Gm=Ue(j(function(t){return t!=null}));var jm={__proto__:null,matcher:Ne,optional:mo,array:function(...t){return po({[Ne]:()=>({match:e=>{if(!Array.isArray(e))return{matched:!1};if(t.length===0)return{matched:!0};const A=t[0];let n={};if(e.length===0)return We(A).forEach(r=>{n[r]=[]}),{matched:!0,selections:n};const i=(r,s)=>{n[r]=(n[r]||[]).concat([s])};return{matched:e.every(r=>be(A,r,i)),selections:n}},getSelectionKeys:()=>t.length===0?[]:We(t[0])})})},set:function(...t){return Ue({[Ne]:()=>({match:e=>{if(!(e instanceof Set))return{matched:!1};let A={};if(e.size===0)return{matched:!0,selections:A};if(t.length===0)return{matched:!0};const n=(r,s)=>{A[r]=(A[r]||[]).concat([s])},i=t[0];return{matched:Lm(e,r=>be(i,r,n)),selections:A}},getSelectionKeys:()=>t.length===0?[]:We(t[0])})})},map:function(...t){return Ue({[Ne]:()=>({match:e=>{if(!(e instanceof Map))return{matched:!1};let A={};if(e.size===0)return{matched:!0,selections:A};const n=(o,a)=>{A[o]=(A[o]||[]).concat([a])};if(t.length===0)return{matched:!0};var i;if(t.length===1)throw new Error(`\`P.map\` wasn't given enough arguments. Expected (key, value), received ${(i=t[0])==null?void 0:i.toString()}`);const[r,s]=t;return{matched:Dm(e,(o,a)=>{const c=be(r,a,n),l=be(s,o,n);return c&&l}),selections:A}},getSelectionKeys:()=>t.length===0?[]:[...We(t[0]),...We(t[1])]})})},intersection:te,union:vu,not:function(t){return Ue({[Ne]:()=>({match:e=>({matched:!be(t,e,()=>{})}),getSelectionKeys:()=>[],matcherType:"not"})})},when:j,select:Tn,any:Cu,_:_m,string:Hm,number:Om,bigint:Mm,boolean:Nm,symbol:Km,nullish:Vm,nonNullable:Gm,instanceOf:function(t){return Ue(j(function(e){return A=>A instanceof e}(t)))},shape:function(t){return Ue(j(Pm(t)))}};class Wm extends Error{constructor(e){let A;try{A=JSON.stringify(e)}catch{A=e}super(`Pattern matching error: no pattern matches value ${A}`),this.input=void 0,this.input=e}}const Bo={matched:!1,value:void 0};function Ki(t){return new Jm(t,Bo)}let Jm=class Ia{constructor(e,A){this.input=void 0,this.state=void 0,this.input=e,this.state=A}with(...e){if(this.state.matched)return this;const A=e[e.length-1],n=[e[0]];let i;e.length===3&&typeof e[1]=="function"?i=e[1]:e.length>2&&n.push(...e.slice(1,e.length-1));let r=!1,s={};const o=(c,l)=>{r=!0,s[c]=l},a=!n.some(c=>be(c,this.input,o))||i&&!i(this.input)?Bo:{matched:!0,value:A(r?Mi in s?s[Mi]:s:this.input,this.input)};return new Ia(this.input,a)}when(e,A){if(this.state.matched)return this;const n=!!e(this.input);return new Ia(this.input,n?{matched:!0,value:A(this.input,this.input)}:Bo)}otherwise(e){return this.state.matched?this.state.value:e(this.input)}exhaustive(e=Xm){return this.state.matched?this.state.value:e(this.input)}run(){return this.exhaustive()}returnType(){return this}};function Xm(t){throw new Wm(t)}const $m="https://obi.getcor.io/api";var O;(function(t){t.READY="ready",t.ERROR="error",t.PAUSED="paused",t.LOADING="loading",t.THINKING="thinking",t.RESEARCHING="researching",t.AGENT_SPEAKING="agent_speaking",t.USER_SPEAKING="user_speaking",t.AWAITING_USER_INPUT="awaiting_user_input"})(O||(O={}));class wu{constructor({sessionId:e,apiBaseUrl:A}){this.currentState=O.READY,this.assistantAudioContext=null,this.userAudioContext=null,this._assistantAudioTimer=null,this._userAudioTimer=null,this.sessionId=e,this.apiBaseUrl=A||$m,this.emitter=new Zh}emit(e,A){this.emitter.emit(e,A)}on(e,A){this.emitter.on(e,A)}off(e,A){this.emitter.off(e,A)}setupRoomEventListeners(){this.room&&(this.room.on(T.LocalTrackUnpublished,e=>{e.source===E.Source.ScreenShare&&(this.screenStream=void 0)}),this.room.on(T.Disconnected,()=>{console.log("Room disconnected"),this.disconnect()}),this.room.on(T.ParticipantDisconnected,()=>{this.disconnect()}),this.room.on(T.TrackSubscribed,(e,A,n)=>{if(e.kind==="audio"&&e.attach(),e.source===E.Source.Microphone&&n.identity.includes("agent-")){const i=e.mediaStream;if(!i){console.error("No media stream available for assistant track");return}const r=new AudioContext,s=r.createAnalyser();r.createMediaStreamSource(i).connect(s),s.fftSize=2048;const a=new Uint8Array(s.frequencyBinCount);this.analyzeAudio(s,a,"ASSISTANT"),this.assistantAudioContext=r}}),this.room.on(T.ParticipantAttributesChanged,e=>{if(!e["lk.agent.state"]||this.currentState===O.RESEARCHING||this.currentState===O.PAUSED)return;const A=e["lk.agent.state"],n=Ki(A).with("listening",()=>O.USER_SPEAKING).with("speaking",()=>O.AGENT_SPEAKING).with("thinking",()=>O.AGENT_SPEAKING).otherwise(()=>{});n&&this.setState(n)}),this.room.on(T.DataReceived,async e=>{try{const A=JSON.parse(new TextDecoder().decode(e)),n=A.status||A.request;Ki(n).with("using_tool",()=>{this.currentState=O.RESEARCHING,this.emitter.emit("stateChanged",O.RESEARCHING)}).with("using_tool_ended",()=>{this.currentState=O.AGENT_SPEAKING,this.emitter.emit("stateChanged",O.AGENT_SPEAKING)}).with("share_screen",()=>{this.shareScreen()}).with("prompt_user",()=>{this.promptContinue()}).with("capture_page_html",()=>{this.emitter.emit("capturePageHTML")}).with("fill",()=>{this.emitter.emit("fill",A.value)}).otherwise(()=>{console.warn("Unknown data received:",A)})}catch(A){console.error("Error parsing data:",A)}}),this.room.localParticipant.registerRpcMethod("screen_capture",async e=>(this.emitter.emit("screenCaptureRequested"),new Promise(A=>{this.emitter.once("screenCaptureComplete",async n=>{if(n==="error"){A("error");return}try{await this.room.localParticipant.sendFile(new File([n],"screen_capture.png",{type:"image/png"}),{mimeType:"image/png",topic:"screen_capture"}),A("ok")}catch{A("error")}})}))))}async connect(){if(!this.sessionId){console.error("No session ID found"),this.emitter.emit("error",new Error("No session ID provided"));return}try{await this.requestMicrophone(),this.room=new bt({adaptiveStream:!0,dynacast:!0}),this.setupRoomEventListeners();const e=new URLSearchParams({token:this.sessionId,skip_intro:"true"}),A=`${this.apiBaseUrl}/join-token?${e.toString()}`,n=await fetch(A).then(i=>i.json());if(await this.room.connect(n.url,n.token),this.microphoneStream){const i=this.microphoneStream.getAudioTracks()[0];await this.room.localParticipant.publishTrack(i,{name:"microphone",source:E.Source.Microphone})}return{url:n.url,token:n.token}}catch(e){throw console.error("Failed to connect to LiveKit:",e),this.disconnect(),this.emitter.emit("error",e instanceof Error?e:new Error(String(e))),e}}async disconnect(){var e,A,n;this.room&&(this.room.disconnect(!0),this.room.removeAllListeners(),this.room=void 0),(e=this.screenStream)!=null&&e.track&&this.screenStream.track.stop(),this.microphoneStream&&this.microphoneStream.getTracks().forEach(i=>i.stop()),this._userAudioTimer&&(window.clearTimeout(this._userAudioTimer),this._userAudioTimer=null),this._assistantAudioTimer&&(window.clearTimeout(this._assistantAudioTimer),this._assistantAudioTimer=null),await((A=this.userAudioContext)==null?void 0:A.close().catch(()=>{})),this.userAudioContext=null,await((n=this.assistantAudioContext)==null?void 0:n.close().catch(()=>{})),this.assistantAudioContext=null,this.setState(O.READY)}setState(e){e!==this.currentState&&(this.currentState=e,this.emitter.emit("stateChanged",e))}async requestMicrophone(){try{const e=await navigator.mediaDevices.getUserMedia({audio:!0});this.microphoneStream=e;const A=new AudioContext;this.userAudioContext=A;const n=A.createAnalyser(),i=A.createMediaStreamSource(e),r=A.createGain();r.gain.value=1.5,i.connect(r),r.connect(n),n.fftSize=2048;const s=new Uint8Array(n.frequencyBinCount);this.analyzeAudio(n,s,"USER")}catch(e){throw console.error("Microphone permission denied:",e),new Error("Microphone permission denied")}}async shareScreen(){if(!this.room){console.warn("[obi] shareScreen called while not connected");return}this.emitter.emit("preScreenShare");try{if(this.screenStream=await this.room.localParticipant.setScreenShareEnabled(!0,{video:{displaySurface:"window"}}),!this.screenStream){console.warn("Failed to share screen");return}await this.room.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({request:"share_screen",success:!0})),{reliable:!0})}catch(e){console.error("Error sharing screen:",e),this.emitter.emit("error",e instanceof Error?e:new Error(String(e)))}}pauseRecording(){var e,A,n;this.room&&(this.setState(O.PAUSED),this.room.localParticipant.getTrackPublications().forEach(i=>{var r,s;i.handleMuted(),(s=(r=i.track)==null?void 0:r.mediaStream)==null||s.getTracks().forEach(o=>o.enabled=!1)}),(e=this.microphoneStream)==null||e.getTracks().forEach(i=>i.enabled=!1),(n=(A=this.screenStream)==null?void 0:A.track)==null||n.mute())}resumeRecording(){var e,A,n;this.room&&(this.setState(O.USER_SPEAKING),this.room.localParticipant.getTrackPublications().forEach(i=>{var r,s;i.handleUnmuted(),(s=(r=i.track)==null?void 0:r.mediaStream)==null||s.getTracks().forEach(o=>o.enabled=!0)}),(e=this.microphoneStream)==null||e.getTracks().forEach(i=>i.enabled=!0),(n=(A=this.screenStream)==null?void 0:A.track)==null||n.unmute())}async promptContinue(){await this.room.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({request:"prompt_user",success:!0})),{reliable:!0})}async analyzeAudio(e,A,n){if(n==="USER"&&this.currentState===O.USER_SPEAKING||n==="ASSISTANT"&&this.currentState===O.AGENT_SPEAKING){e.getByteFrequencyData(A);const i=A.reduce((o,a)=>o+a,0)/A.length,r=Math.max(.01,Math.min(1,i/128));let s;n==="USER"&&this.currentState===O.USER_SPEAKING?s="USER":n==="ASSISTANT"&&this.currentState===O.AGENT_SPEAKING&&(s="ASSISTANT"),s&&this.emitter.emit("volume",{speaker:s,spectrum:Array.from(A),volume:r})}n==="USER"?this._userAudioTimer=window.setTimeout(()=>this.analyzeAudio(e,A,n),200):this._assistantAudioTimer=window.setTimeout(()=>this.analyzeAudio(e,A,n),200)}async sendHTML(e){if(!this.room){console.log("Cannot send HTML: Not connected to room");return}try{const A={type:"page_content",html:e,timestamp:new Date().toISOString()},n=JSON.stringify(A),r=new TextEncoder().encode(n);await this.room.localParticipant.publishData(r,{reliable:!0})}catch(A){console.error("Error sending HTML to LiveKit:",A),this.emitter.emit("error",A instanceof Error?A:new Error(String(A)))}}async reconnect(e,A,n){try{if(!e||!A)return console.error("Missing room URL or token for reconnection"),this.emitter.emit("error",new Error("Missing room URL or token for reconnection")),!1;if(await this.requestMicrophone(),this.room=new bt({adaptiveStream:!0,dynacast:!0}),this.setupRoomEventListeners(),await this.room.connect(e,A),this.microphoneStream){const i=this.microphoneStream.getAudioTracks()[0];await this.room.localParticipant.publishTrack(i,{name:"microphone",source:E.Source.Microphone})}return this.setState(n),n===O.PAUSED&&this.pauseRecording(),!0}catch(i){return console.error("Failed to reconnect to room:",i),this.disconnect(),this.emitter.emit("error",i instanceof Error?i:new Error(String(i))),!1}}}/*!
|
|
38
|
+
`},Zs}var Yl;function Mp(){if(Yl)return aA;Yl=1;var t=Hp(),e=Op(),A=zs();return aA.grammar=A,aA.write=e,aA.parse=t.parse,aA.parseParams=t.parseParams,aA.parseFmtpConfig=t.parseFmtpConfig,aA.parsePayloads=t.parsePayloads,aA.parseRemoteCandidates=t.parseRemoteCandidates,aA.parseImageAttributes=t.parseImageAttributes,aA.parseSimulcastStreamList=t.parseSimulcastStreamList,aA}var XA=Mp();function eo(t,e,A){var n,i,r;e===void 0&&(e=50),A===void 0&&(A={});var s=(n=A.isImmediate)!=null&&n,o=(i=A.callback)!=null&&i,a=A.maxWait,c=Date.now(),l=[];function u(){if(a!==void 0){var h=Date.now()-c;if(h+e>=a)return a-h}return e}var d=function(){var h=[].slice.call(arguments),g=this;return new Promise(function(f,p){var B=s&&r===void 0;if(r!==void 0&&clearTimeout(r),r=setTimeout(function(){if(r=void 0,c=Date.now(),!s){var b=t.apply(g,h);o&&o(b),l.forEach(function(v){return(0,v.resolve)(b)}),l=[]}},u()),B){var y=t.apply(g,h);return o&&o(y),f(y)}l.push({resolve:f,reject:p})})};return d.cancel=function(h){r!==void 0&&clearTimeout(r),l.forEach(function(g){return(0,g.reject)(h)}),l=[]},d}const Np=.7,Kp=20,$t={NegotiationStarted:"negotiationStarted",NegotiationComplete:"negotiationComplete",RTPVideoPayloadTypes:"rtpVideoPayloadTypes"};class ql extends mA.EventEmitter{get pc(){return this._pc||(this._pc=this.createPC()),this._pc}constructor(e){let A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var n;super(),this.log=K,this.ddExtID=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=eo(i=>m(this,void 0,void 0,function*(){this.emit($t.NegotiationStarted);try{yield this.createAndSendOffer()}catch(r){if(i)i(r);else throw r}}),Kp),this.close=()=>{this._pc&&(this._pc.close(),this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc.onicegatheringstatechange=null,this._pc.ondatachannel=null,this._pc.onnegotiationneeded=null,this._pc.onsignalingstatechange=null,this._pc.onicecandidate=null,this._pc.ondatachannel=null,this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,this._pc=null)},this.log=TA((n=A.loggerName)!==null&&n!==void 0?n:sA.PCTransport),this.loggerOptions=A,this.config=e,this._pc=this.createPC()}createPC(){const e=new RTCPeerConnection(this.config);return e.onicecandidate=A=>{var n;A.candidate&&((n=this.onIceCandidate)===null||n===void 0||n.call(this,A.candidate))},e.onicecandidateerror=A=>{var n;(n=this.onIceCandidateError)===null||n===void 0||n.call(this,A)},e.oniceconnectionstatechange=()=>{var A;(A=this.onIceConnectionStateChange)===null||A===void 0||A.call(this,e.iceConnectionState)},e.onsignalingstatechange=()=>{var A;(A=this.onSignalingStatechange)===null||A===void 0||A.call(this,e.signalingState)},e.onconnectionstatechange=()=>{var A;(A=this.onConnectionStateChange)===null||A===void 0||A.call(this,e.connectionState)},e.ondatachannel=A=>{var n;(n=this.onDataChannel)===null||n===void 0||n.call(this,A)},e.ontrack=A=>{var n;(n=this.onTrack)===null||n===void 0||n.call(this,A)},e}get logContext(){var e,A;return Object.assign({},(A=(e=this.loggerOptions).loggerContextCb)===null||A===void 0?void 0:A.call(e))}get isICEConnected(){return this._pc!==null&&(this.pc.iceConnectionState==="connected"||this.pc.iceConnectionState==="completed")}addIceCandidate(e){return m(this,void 0,void 0,function*(){if(this.pc.remoteDescription&&!this.restartingIce)return this.pc.addIceCandidate(e);this.pendingCandidates.push(e)})}setRemoteDescription(e){return m(this,void 0,void 0,function*(){var A;let n;if(e.type==="offer"){let{stereoMids:i,nackMids:r}=Vp(e);this.remoteStereoMids=i,this.remoteNackMids=r}else if(e.type==="answer"){const i=XA.parse((A=e.sdp)!==null&&A!==void 0?A:"");i.media.forEach(r=>{r.type==="audio"&&this.trackBitrates.some(s=>{if(!s.transceiver||r.mid!=s.transceiver.mid)return!1;let o=0;if(r.rtp.some(c=>c.codec.toUpperCase()===s.codec.toUpperCase()?(o=c.payload,!0):!1),o===0)return!0;let a=!1;for(const c of r.fmtp)if(c.payload===o){c.config=c.config.split(";").filter(l=>!l.includes("maxaveragebitrate")).join(";"),s.maxbr>0&&(c.config+=";maxaveragebitrate=".concat(s.maxbr*1e3)),a=!0;break}return a||s.maxbr>0&&r.fmtp.push({payload:o,config:"maxaveragebitrate=".concat(s.maxbr*1e3)}),!0})}),n=XA.write(i)}yield this.setMungedSDP(e,n,!0),this.pendingCandidates.forEach(i=>{this.pc.addIceCandidate(i)}),this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate?(this.renegotiate=!1,yield this.createAndSendOffer()):e.type==="answer"&&(this.emit($t.NegotiationComplete),e.sdp&&XA.parse(e.sdp).media.forEach(r=>{r.type==="video"&&this.emit($t.RTPVideoPayloadTypes,r.rtp)}))})}createAndSendOffer(e){return m(this,void 0,void 0,function*(){var A;if(this.onOffer===void 0)return;if(e!=null&&e.iceRestart&&(this.log.debug("restarting ICE",this.logContext),this.restartingIce=!0),this._pc&&this._pc.signalingState==="have-local-offer"){const r=this._pc.remoteDescription;if(e!=null&&e.iceRestart&&r)yield this._pc.setRemoteDescription(r);else{this.renegotiate=!0;return}}else if(!this._pc||this._pc.signalingState==="closed"){this.log.warn("could not createOffer with closed peer connection",this.logContext);return}this.log.debug("starting to negotiate",this.logContext);const n=yield this.pc.createOffer(e);this.log.debug("original offer",Object.assign({sdp:n.sdp},this.logContext));const i=XA.parse((A=n.sdp)!==null&&A!==void 0?A:"");i.media.forEach(r=>{Zl(r),r.type==="audio"?zl(r,[],[]):r.type==="video"&&this.trackBitrates.some(s=>{if(!r.msid||!s.cid||!r.msid.includes(s.cid))return!1;let o=0;if(r.rtp.some(c=>c.codec.toUpperCase()===s.codec.toUpperCase()?(o=c.payload,!0):!1),o===0||(bn(s.codec)&&this.ensureVideoDDExtensionForSVC(r,i),s.codec!=="av1"))return!0;const a=Math.round(s.maxbr*Np);for(const c of r.fmtp)if(c.payload===o){c.config.includes("x-google-start-bitrate")||(c.config+=";x-google-start-bitrate=".concat(a));break}return!0})}),yield this.setMungedSDP(n,XA.write(i)),this.onOffer(n)})}createAndSetAnswer(){return m(this,void 0,void 0,function*(){var e;const A=yield this.pc.createAnswer(),n=XA.parse((e=A.sdp)!==null&&e!==void 0?e:"");return n.media.forEach(i=>{Zl(i),i.type==="audio"&&zl(i,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(A,XA.write(n)),A})}createDataChannel(e,A){return this.pc.createDataChannel(e,A)}addTransceiver(e,A){return this.pc.addTransceiver(e,A)}addTrack(e){if(!this._pc)throw new Be("PC closed, cannot add track");return this._pc.addTrack(e)}setTrackCodecBitrate(e){this.trackBitrates.push(e)}setConfiguration(e){var A;if(!this._pc)throw new Be("PC closed, cannot configure");return(A=this._pc)===null||A===void 0?void 0:A.setConfiguration(e)}canRemoveTrack(){var e;return!!(!((e=this._pc)===null||e===void 0)&&e.removeTrack)}removeTrack(e){var A;return(A=this._pc)===null||A===void 0?void 0:A.removeTrack(e)}getConnectionState(){var e,A;return(A=(e=this._pc)===null||e===void 0?void 0:e.connectionState)!==null&&A!==void 0?A:"closed"}getICEConnectionState(){var e,A;return(A=(e=this._pc)===null||e===void 0?void 0:e.iceConnectionState)!==null&&A!==void 0?A:"closed"}getSignallingState(){var e,A;return(A=(e=this._pc)===null||e===void 0?void 0:e.signalingState)!==null&&A!==void 0?A:"closed"}getTransceivers(){var e,A;return(A=(e=this._pc)===null||e===void 0?void 0:e.getTransceivers())!==null&&A!==void 0?A:[]}getSenders(){var e,A;return(A=(e=this._pc)===null||e===void 0?void 0:e.getSenders())!==null&&A!==void 0?A:[]}getLocalDescription(){var e;return(e=this._pc)===null||e===void 0?void 0:e.localDescription}getRemoteDescription(){var e;return(e=this.pc)===null||e===void 0?void 0:e.remoteDescription}getStats(){return this.pc.getStats()}getConnectedAddress(){return m(this,void 0,void 0,function*(){var e;if(!this._pc)return;let A="";const n=new Map,i=new Map;if((yield this._pc.getStats()).forEach(o=>{switch(o.type){case"transport":A=o.selectedCandidatePairId;break;case"candidate-pair":A===""&&o.selected&&(A=o.id),n.set(o.id,o);break;case"remote-candidate":i.set(o.id,"".concat(o.address,":").concat(o.port));break}}),A==="")return;const s=(e=n.get(A))===null||e===void 0?void 0:e.remoteCandidateId;if(s!==void 0)return i.get(s)})}setMungedSDP(e,A,n){return m(this,void 0,void 0,function*(){if(A){const i=e.sdp;e.sdp=A;try{this.log.debug("setting munged ".concat(n?"remote":"local"," description"),this.logContext),n?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e);return}catch(r){this.log.warn("not able to set ".concat(e.type,", falling back to unmodified sdp"),Object.assign(Object.assign({},this.logContext),{error:r,sdp:A})),e.sdp=i}}try{n?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e)}catch(i){let r="unknown error";i instanceof Error?r=i.message:typeof i=="string"&&(r=i);const s={error:r,sdp:e.sdp};throw!n&&this.pc.remoteDescription&&(s.remoteSdp=this.pc.remoteDescription),this.log.error("unable to set ".concat(e.type),Object.assign(Object.assign({},this.logContext),{fields:s})),new Ts(r)}})}ensureVideoDDExtensionForSVC(e,A){var n,i;if(!((n=e.ext)===null||n===void 0?void 0:n.some(s=>s.uri===Il))){if(this.ddExtID===0){let s=0;A.media.forEach(o=>{var a;o.type==="video"&&((a=o.ext)===null||a===void 0||a.forEach(c=>{c.value>s&&(s=c.value)}))}),this.ddExtID=s+1}(i=e.ext)===null||i===void 0||i.push({value:this.ddExtID,uri:Il})}}}function zl(t,e,A){let n=0;t.rtp.some(i=>i.codec==="opus"?(n=i.payload,!0):!1),n>0&&(t.rtcpFb||(t.rtcpFb=[]),A.includes(t.mid)&&!t.rtcpFb.some(i=>i.payload===n&&i.type==="nack")&&t.rtcpFb.push({payload:n,type:"nack"}),e.includes(t.mid)&&t.fmtp.some(i=>i.payload===n?(i.config.includes("stereo=1")||(i.config+=";stereo=1"),!0):!1))}function Vp(t){var e;const A=[],n=[],i=XA.parse((e=t.sdp)!==null&&e!==void 0?e:"");let r=0;return i.media.forEach(s=>{var o;s.type==="audio"&&(s.rtp.some(a=>a.codec==="opus"?(r=a.payload,!0):!1),!((o=s.rtcpFb)===null||o===void 0)&&o.some(a=>a.payload===r&&a.type==="nack")&&n.push(s.mid),s.fmtp.some(a=>a.payload===r?(a.config.includes("sprop-stereo=1")&&A.push(s.mid),!0):!1))}),{stereoMids:A,nackMids:n}}function Zl(t){if(t.connection){const e=t.connection.ip.indexOf(":")>=0;(t.connection.version===4&&e||t.connection.version===6&&!e)&&(t.connection.ip="0.0.0.0",t.connection.version=4)}}const Ao="vp8",Gp={audioPreset:Rs.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:Ps.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:Ao,backupCodec:!0},eu={deviceId:{ideal:"default"},autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},Au={deviceId:{ideal:"default"},resolution:yn.h720.resolution},jp={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new Lg,disconnectOnPageLeave:!0,webAudioMix:!1},to={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};var ce;(function(t){t[t.NEW=0]="NEW",t[t.CONNECTING=1]="CONNECTING",t[t.CONNECTED=2]="CONNECTED",t[t.FAILED=3]="FAILED",t[t.CLOSING=4]="CLOSING",t[t.CLOSED=5]="CLOSED"})(ce||(ce={}));class Wp{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}constructor(e,A,n){var i;this.peerConnectionTimeout=to.peerConnectionTimeout,this.log=K,this.updateState=()=>{var r;const s=this.state,o=this.requiredTransports.map(a=>a.getConnectionState());o.every(a=>a==="connected")?this.state=ce.CONNECTED:o.some(a=>a==="failed")?this.state=ce.FAILED:o.some(a=>a==="connecting")?this.state=ce.CONNECTING:o.every(a=>a==="closed")?this.state=ce.CLOSED:o.some(a=>a==="closed")?this.state=ce.CLOSING:o.every(a=>a==="new")&&(this.state=ce.NEW),s!==this.state&&(this.log.debug("pc state change: from ".concat(ce[s]," to ").concat(ce[this.state]),this.logContext),(r=this.onStateChange)===null||r===void 0||r.call(this,this.state,this.publisher.getConnectionState(),this.subscriber.getConnectionState()))},this.log=TA((i=n.loggerName)!==null&&i!==void 0?i:sA.PCManager),this.loggerOptions=n,this.isPublisherConnectionRequired=!A,this.isSubscriberConnectionRequired=A,this.publisher=new ql(e,n),this.subscriber=new ql(e,n),this.publisher.onConnectionStateChange=this.updateState,this.subscriber.onConnectionStateChange=this.updateState,this.publisher.onIceConnectionStateChange=this.updateState,this.subscriber.onIceConnectionStateChange=this.updateState,this.publisher.onSignalingStatechange=this.updateState,this.subscriber.onSignalingStatechange=this.updateState,this.publisher.onIceCandidate=r=>{var s;(s=this.onIceCandidate)===null||s===void 0||s.call(this,r,rA.PUBLISHER)},this.subscriber.onIceCandidate=r=>{var s;(s=this.onIceCandidate)===null||s===void 0||s.call(this,r,rA.SUBSCRIBER)},this.subscriber.onDataChannel=r=>{var s;(s=this.onDataChannel)===null||s===void 0||s.call(this,r)},this.subscriber.onTrack=r=>{var s;(s=this.onTrack)===null||s===void 0||s.call(this,r)},this.publisher.onOffer=r=>{var s;(s=this.onPublisherOffer)===null||s===void 0||s.call(this,r)},this.state=ce.NEW,this.connectionLock=new De,this.remoteOfferLock=new De}get logContext(){var e,A;return Object.assign({},(A=(e=this.loggerOptions).loggerContextCb)===null||A===void 0?void 0:A.call(e))}requirePublisher(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.isPublisherConnectionRequired=e,this.updateState()}requireSubscriber(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;this.isSubscriberConnectionRequired=e,this.updateState()}createAndSendPublisherOffer(e){return this.publisher.createAndSendOffer(e)}setPublisherAnswer(e){return this.publisher.setRemoteDescription(e)}removeTrack(e){return this.publisher.removeTrack(e)}close(){return m(this,void 0,void 0,function*(){if(this.publisher&&this.publisher.getSignallingState()!=="closed"){const e=this.publisher;for(const A of e.getSenders())try{e.canRemoveTrack()&&e.removeTrack(A)}catch(n){this.log.warn("could not removeTrack",Object.assign(Object.assign({},this.logContext),{error:n}))}}yield Promise.all([this.publisher.close(),this.subscriber.close()]),this.updateState()})}triggerIceRestart(){return m(this,void 0,void 0,function*(){this.subscriber.restartingIce=!0,this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))})}addIceCandidate(e,A){return m(this,void 0,void 0,function*(){A===rA.PUBLISHER?yield this.publisher.addIceCandidate(e):yield this.subscriber.addIceCandidate(e)})}createSubscriberAnswerFromOffer(e){return m(this,void 0,void 0,function*(){this.log.debug("received server offer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type,sdp:e.sdp,signalingState:this.subscriber.getSignallingState().toString()}));const A=yield this.remoteOfferLock.lock();try{return yield this.subscriber.setRemoteDescription(e),yield this.subscriber.createAndSetAnswer()}finally{A()}})}updateConfiguration(e,A){this.publisher.setConfiguration(e),this.subscriber.setConfiguration(e),A&&this.triggerIceRestart()}ensurePCTransportConnection(e,A){return m(this,void 0,void 0,function*(){var n;const i=yield this.connectionLock.lock();try{this.isPublisherConnectionRequired&&this.publisher.getConnectionState()!=="connected"&&this.publisher.getConnectionState()!=="connecting"&&(this.log.debug("negotiation required, start negotiating",this.logContext),this.publisher.negotiate()),yield Promise.all((n=this.requiredTransports)===null||n===void 0?void 0:n.map(r=>this.ensureTransportConnected(r,e,A)))}finally{i()}})}negotiate(e){return m(this,void 0,void 0,function*(){return new Promise((A,n)=>m(this,void 0,void 0,function*(){const i=setTimeout(()=>{n("negotiation timed out")},this.peerConnectionTimeout),r=()=>{clearTimeout(i),n("negotiation aborted")};e.signal.addEventListener("abort",r),this.publisher.once($t.NegotiationStarted,()=>{e.signal.aborted||this.publisher.once($t.NegotiationComplete,()=>{clearTimeout(i),A()})}),yield this.publisher.negotiate(s=>{clearTimeout(i),n(s)})}))})}addPublisherTransceiver(e,A){return this.publisher.addTransceiver(e,A)}addPublisherTrack(e){return this.publisher.addTrack(e)}createPublisherDataChannel(e,A){return this.publisher.createDataChannel(e,A)}getConnectedAddress(e){return e===rA.PUBLISHER?this.publisher.getConnectedAddress():e===rA.SUBSCRIBER?this.publisher.getConnectedAddress():this.requiredTransports[0].getConnectedAddress()}get requiredTransports(){const e=[];return this.isPublisherConnectionRequired&&e.push(this.publisher),this.isSubscriberConnectionRequired&&e.push(this.subscriber),e}ensureTransportConnected(e,A){return m(this,arguments,void 0,function(n,i){var r=this;let s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.peerConnectionTimeout;return function*(){if(n.getConnectionState()!=="connected")return new Promise((a,c)=>m(r,void 0,void 0,function*(){const l=()=>{this.log.warn("abort transport connection",this.logContext),ye.clearTimeout(u),c(new z("room connection has been cancelled",G.Cancelled))};i!=null&&i.signal.aborted&&l(),i==null||i.signal.addEventListener("abort",l);const u=ye.setTimeout(()=>{i==null||i.signal.removeEventListener("abort",l),c(new z("could not establish pc connection",G.InternalError))},s);for(;this.state!==ce.CONNECTED;)if(yield Oe(50),i!=null&&i.signal.aborted){c(new z("room connection has been cancelled",G.Cancelled));return}ye.clearTimeout(u),i==null||i.signal.removeEventListener("abort",l),a()}))}()})}}class le extends Error{constructor(e,A,n){super(A),this.code=e,this.message=nu(A,le.MAX_MESSAGE_BYTES),this.data=n?nu(n,le.MAX_DATA_BYTES):void 0}static fromProto(e){return new le(e.code,e.message,e.data)}toProto(){return new Bc({code:this.code,message:this.message,data:this.data})}static builtIn(e,A){return new le(le.ErrorCode[e],le.ErrorMessage[e],A)}}le.MAX_MESSAGE_BYTES=256,le.MAX_DATA_BYTES=15360,le.ErrorCode={APPLICATION_ERROR:1500,CONNECTION_TIMEOUT:1501,RESPONSE_TIMEOUT:1502,RECIPIENT_DISCONNECTED:1503,RESPONSE_PAYLOAD_TOO_LARGE:1504,SEND_FAILED:1505,UNSUPPORTED_METHOD:1400,RECIPIENT_NOT_FOUND:1401,REQUEST_PAYLOAD_TOO_LARGE:1402,UNSUPPORTED_SERVER:1403,UNSUPPORTED_VERSION:1404},le.ErrorMessage={APPLICATION_ERROR:"Application error in method handler",CONNECTION_TIMEOUT:"Connection timeout",RESPONSE_TIMEOUT:"Response timeout",RECIPIENT_DISCONNECTED:"Recipient disconnected",RESPONSE_PAYLOAD_TOO_LARGE:"Response payload too large",SEND_FAILED:"Failed to send",UNSUPPORTED_METHOD:"Method not supported at destination",RECIPIENT_NOT_FOUND:"Recipient not found",REQUEST_PAYLOAD_TOO_LARGE:"Request payload too large",UNSUPPORTED_SERVER:"RPC not supported by server",UNSUPPORTED_VERSION:"Unsupported RPC version"};const tu=15360;function no(t){return new TextEncoder().encode(t).length}function nu(t,e){if(no(t)<=e)return t;let A=0,n=t.length;const i=new TextEncoder;for(;A<n;){const r=Math.floor((A+n+1)/2);i.encode(t.slice(0,r)).length<=e?A=r:n=r-1}return t.slice(0,A)}const io=2e3;function Pi(t,e){if(!e)return 0;let A,n;return"bytesReceived"in t?(A=t.bytesReceived,n=e.bytesReceived):"bytesSent"in t&&(A=t.bytesSent,n=e.bytesSent),A===void 0||n===void 0||t.timestamp===void 0||e.timestamp===void 0?0:(A-n)*8*1e3/(t.timestamp-e.timestamp)}const Jp=1e3;class iu extends E{get sender(){return this._sender}set sender(e){this._sender=e}get constraints(){return this._constraints}constructor(e,A,n){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,r=arguments.length>4?arguments[4]:void 0;super(e,A,r),this.manuallyStopped=!1,this._isUpstreamPaused=!1,this.handleTrackMuteEvent=()=>this.debouncedTrackMuteHandler().catch(()=>this.log.debug("track mute bounce got cancelled by an unmute event",this.logContext)),this.debouncedTrackMuteHandler=eo(()=>m(this,void 0,void 0,function*(){yield this.pauseUpstream()}),5e3),this.handleTrackUnmuteEvent=()=>m(this,void 0,void 0,function*(){this.debouncedTrackMuteHandler.cancel("unmute"),yield this.resumeUpstream()}),this.handleEnded=()=>{this.isInBackground&&(this.reacquireTrack=!0),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent),this.emit(k.Ended,this)},this.reacquireTrack=!1,this.providedByUser=i,this.muteLock=new De,this.pauseUpstreamLock=new De,this.processorLock=new De,this.restartLock=new De,this.setMediaStreamTrack(e,!0),this._constraints=e.getConstraints(),n&&(this._constraints=n)}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==E.Kind.Video)return;const{width:e,height:A}=this._mediaStreamTrack.getSettings();if(e&&A)return{width:e,height:A}}get isUpstreamPaused(){return this._isUpstreamPaused}get isUserProvided(){return this.providedByUser}get mediaStreamTrack(){var e,A;return(A=(e=this.processor)===null||e===void 0?void 0:e.processedTrack)!==null&&A!==void 0?A:this._mediaStreamTrack}get isLocal(){return!0}getSourceTrackSettings(){return this._mediaStreamTrack.getSettings()}setMediaStreamTrack(e,A){return m(this,void 0,void 0,function*(){var n;if(e===this._mediaStreamTrack&&!A)return;this._mediaStreamTrack&&(this.attachedElements.forEach(r=>{jt(this._mediaStreamTrack,r)}),this.debouncedTrackMuteHandler.cancel("new-track"),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent)),this.mediaStream=new MediaStream([e]),e&&(e.addEventListener("ended",this.handleEnded),e.addEventListener("mute",this.handleTrackMuteEvent),e.addEventListener("unmute",this.handleTrackUnmuteEvent),this._constraints=e.getConstraints());let i;if(this.processor&&e){const r=yield this.processorLock.lock();try{if(this.log.debug("restarting processor",this.logContext),this.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");this.processorElement&&(Gt(e,this.processorElement),this.processorElement.muted=!0),yield this.processor.restart({track:e,kind:this.kind,element:this.processorElement}),i=this.processor.processedTrack}finally{r()}}this.sender&&((n=this.sender.transport)===null||n===void 0?void 0:n.state)!=="closed"&&(yield this.sender.replaceTrack(i??e)),!this.providedByUser&&this._mediaStreamTrack!==e&&this._mediaStreamTrack.stop(),this._mediaStreamTrack=e,e&&(this._mediaStreamTrack.enabled=!this.isMuted,yield this.resumeUpstream(),this.attachedElements.forEach(r=>{Gt(i??e,r)}))})}waitForDimensions(){return m(this,arguments,void 0,function(){var e=this;let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Jp;return function*(){var n;if(e.kind===E.Kind.Audio)throw new Error("cannot get dimensions for audio tracks");((n=oA())===null||n===void 0?void 0:n.os)==="iOS"&&(yield Oe(10));const i=Date.now();for(;Date.now()-i<A;){const r=e.dimensions;if(r)return r;yield Oe(50)}throw new FA("unable to get track dimensions after timeout")}()})}setDeviceId(e){return m(this,void 0,void 0,function*(){return this._constraints.deviceId===e&&this._mediaStreamTrack.getSettings().deviceId===WA(e)||(this._constraints.deviceId=e,this.isMuted)?!0:(yield this.restartTrack(),WA(e)===this._mediaStreamTrack.getSettings().deviceId)})}getDeviceId(){return m(this,arguments,void 0,function(){var e=this;let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){if(e.source===E.Source.ScreenShare)return;const{deviceId:n,groupId:i}=e._mediaStreamTrack.getSettings(),r=e.kind===E.Kind.Audio?"audioinput":"videoinput";return A?Ce.getInstance().normalizeDeviceId(r,n,i):n}()})}mute(){return m(this,void 0,void 0,function*(){return this.setTrackMuted(!0),this})}unmute(){return m(this,void 0,void 0,function*(){return this.setTrackMuted(!1),this})}replaceTrack(e,A){return m(this,void 0,void 0,function*(){if(!this.sender)throw new FA("unable to replace an unpublished track");let n,i;return typeof A=="boolean"?n=A:A!==void 0&&(n=A.userProvidedTrack,i=A.stopProcessor),this.providedByUser=n??!0,this.log.debug("replace MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(e),i&&this.processor&&(yield this.stopProcessor()),this})}restart(e){return m(this,void 0,void 0,function*(){this.manuallyStopped=!1;const A=yield this.restartLock.lock();try{e||(e=this._constraints);const{deviceId:n,facingMode:i}=e,r=Dg(e,["deviceId","facingMode"]);this.log.debug("restarting track with constraints",Object.assign(Object.assign({},this.logContext),{constraints:e}));const s={audio:!1,video:!1};this.kind===E.Kind.Video?s.video=n||i?{deviceId:n,facingMode:i}:!0:s.audio=n?{deviceId:n}:!0,this.attachedElements.forEach(c=>{jt(this.mediaStreamTrack,c)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();const a=(yield navigator.mediaDevices.getUserMedia(s)).getTracks()[0];return yield a.applyConstraints(r),a.addEventListener("ended",this.handleEnded),this.log.debug("re-acquired MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(a),this._constraints=e,this.emit(k.Restarted,this),this.manuallyStopped&&(this.log.warn("track was stopped during a restart, stopping restarted track",this.logContext),this.stop()),this}finally{A()}})}setTrackMuted(e){this.log.debug("setting ".concat(this.kind," track ").concat(e?"muted":"unmuted"),this.logContext),!(this.isMuted===e&&this._mediaStreamTrack.enabled!==e)&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?k.Muted:k.Unmuted,this))}get needsReAcquisition(){return this._mediaStreamTrack.readyState!=="live"||this._mediaStreamTrack.muted||!this._mediaStreamTrack.enabled||this.reacquireTrack}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return m(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),Rl()&&(this.log.debug("visibility changed, is in Background: ".concat(this.isInBackground),this.logContext),!this.isInBackground&&this.needsReAcquisition&&!this.isUserProvided&&!this.isMuted&&(this.log.debug("track needs to be reacquired, restarting ".concat(this.source),this.logContext),yield this.restart(),this.reacquireTrack=!1))})}stop(){var e;this.manuallyStopped=!0,super.stop(),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.removeEventListener("mute",this.handleTrackMuteEvent),this._mediaStreamTrack.removeEventListener("unmute",this.handleTrackUnmuteEvent),(e=this.processor)===null||e===void 0||e.destroy(),this.processor=void 0}pauseUpstream(){return m(this,void 0,void 0,function*(){var e;const A=yield this.pauseUpstreamLock.lock();try{if(this._isUpstreamPaused===!0)return;if(!this.sender){this.log.warn("unable to pause upstream for an unpublished track",this.logContext);return}this._isUpstreamPaused=!0,this.emit(k.UpstreamPaused,this);const n=oA();if((n==null?void 0:n.name)==="Safari"&&Ct(n.version,"12.0")<0)throw new Ss("pauseUpstream is not supported on Safari < 12.");((e=this.sender.transport)===null||e===void 0?void 0:e.state)!=="closed"&&(yield this.sender.replaceTrack(null))}finally{A()}})}resumeUpstream(){return m(this,void 0,void 0,function*(){var e;const A=yield this.pauseUpstreamLock.lock();try{if(this._isUpstreamPaused===!1)return;if(!this.sender){this.log.warn("unable to resume upstream for an unpublished track",this.logContext);return}this._isUpstreamPaused=!1,this.emit(k.UpstreamResumed,this),((e=this.sender.transport)===null||e===void 0?void 0:e.state)!=="closed"&&(yield this.sender.replaceTrack(this.mediaStreamTrack))}finally{A()}})}getRTCStatsReport(){return m(this,void 0,void 0,function*(){var e;return!((e=this.sender)===null||e===void 0)&&e.getStats?yield this.sender.getStats():void 0})}setProcessor(e){return m(this,arguments,void 0,function(A){var n=this;let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var r;const s=yield n.processorLock.lock();try{n.log.debug("setting up processor",n.logContext);const o=document.createElement(n.kind),a={kind:n.kind,track:n._mediaStreamTrack,element:o,audioContext:n.audioContext};if(yield A.init(a),n.log.debug("processor initialized",n.logContext),n.processor&&(yield n.stopProcessor()),n.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");if(Gt(n._mediaStreamTrack,o),o.muted=!0,o.play().catch(c=>n.log.error("failed to play processor element",Object.assign(Object.assign({},n.logContext),{error:c}))),n.processor=A,n.processorElement=o,n.processor.processedTrack){for(const c of n.attachedElements)c!==n.processorElement&&i&&(jt(n._mediaStreamTrack,c),Gt(n.processor.processedTrack,c));yield(r=n.sender)===null||r===void 0?void 0:r.replaceTrack(n.processor.processedTrack)}n.emit(k.TrackProcessorUpdate,n.processor)}finally{s()}}()})}getProcessor(){return this.processor}stopProcessor(){return m(this,arguments,void 0,function(){var e=this;let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var n,i;e.processor&&(e.log.debug("stopping processor",e.logContext),(n=e.processor.processedTrack)===null||n===void 0||n.stop(),yield e.processor.destroy(),e.processor=void 0,A||((i=e.processorElement)===null||i===void 0||i.remove(),e.processorElement=void 0),yield e._mediaStreamTrack.applyConstraints(e._constraints),yield e.setMediaStreamTrack(e._mediaStreamTrack,!0),e.emit(k.TrackProcessorUpdate))}()})}}class Li extends iu{get enhancedNoiseCancellation(){return this.isKrispNoiseFilterEnabled}constructor(e,A){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,i=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;super(e,E.Kind.Audio,A,n,r),this.stopOnMute=!1,this.isKrispNoiseFilterEnabled=!1,this.monitorSender=()=>m(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let s;try{s=yield this.getSenderStats()}catch(o){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:o}));return}s&&this.prevStats&&(this._currentBitrate=Pi(s,this.prevStats)),this.prevStats=s}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(k.AudioTrackFeatureUpdate,this,iA.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(k.AudioTrackFeatureUpdate,this,iA.TF_ENHANCED_NOISE_CANCELLATION,!1)},this.audioContext=i,this.checkForSilence()}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return m(this,void 0,void 0,function*(){const A=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===E.Source.Microphone&&this.stopOnMute&&!this.isUserProvided&&(this.log.debug("stopping mic track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{A()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return m(this,void 0,void 0,function*(){const A=yield this.muteLock.lock();try{if(!this.isMuted)return this.log.debug("Track already unmuted",this.logContext),this;const n=this._constraints.deviceId&&this._mediaStreamTrack.getSettings().deviceId!==WA(this._constraints.deviceId);return this.source===E.Source.Microphone&&(this.stopOnMute||this._mediaStreamTrack.readyState==="ended"||n)&&!this.isUserProvided&&(this.log.debug("reacquiring mic track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this}finally{A()}})}restartTrack(e){return m(this,void 0,void 0,function*(){let A;if(e){const n=Js({audio:e});typeof n.audio!="boolean"&&(A=n.audio)}yield this.restart(A)})}restart(e){const A=Object.create(null,{restart:{get:()=>super.restart}});return m(this,void 0,void 0,function*(){const n=yield A.restart.call(this,e);return this.checkForSilence(),n})}startMonitor(){Me()&&(this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},io)))}setProcessor(e){return m(this,void 0,void 0,function*(){var A;const n=yield this.processorLock.lock();try{if(!BA()&&!this.audioContext)throw Error("Audio context needs to be set on LocalAudioTrack in order to enable processors");this.processor&&(yield this.stopProcessor());const i={kind:this.kind,track:this._mediaStreamTrack,audioContext:this.audioContext};this.log.debug("setting up audio processor ".concat(e.name),this.logContext),yield e.init(i),this.processor=e,this.processor.processedTrack&&(yield(A=this.sender)===null||A===void 0?void 0:A.replaceTrack(this.processor.processedTrack),this.processor.processedTrack.addEventListener("enable-lk-krisp-noise-filter",this.handleKrispNoiseFilterEnable),this.processor.processedTrack.addEventListener("disable-lk-krisp-noise-filter",this.handleKrispNoiseFilterDisable)),this.emit(k.TrackProcessorUpdate,this.processor)}finally{n()}})}setAudioContext(e){this.audioContext=e}getSenderStats(){return m(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return;const A=yield this.sender.getStats();let n;return A.forEach(i=>{i.type==="outbound-rtp"&&(n={type:"audio",streamId:i.id,packetsSent:i.packetsSent,packetsLost:i.packetsLost,bytesSent:i.bytesSent,timestamp:i.timestamp,roundTripTime:i.roundTripTime,jitter:i.jitter})}),n})}checkForSilence(){return m(this,void 0,void 0,function*(){const e=yield Nl(this);return e&&(this.isMuted||this.log.warn("silence detected on local audio track",this.logContext),this.emit(k.AudioSilenceDetected)),e})}}function Xp(t,e,A){switch(t.kind){case"audio":return new Li(t,e,!1,void 0,A);case"video":return new _i(t,e,!1,A);default:throw new FA("unsupported track type: ".concat(t.kind))}}const $p=Object.values(yn),Yp=Object.values(xs),qp=Object.values(Ps),zp=[yn.h180,yn.h360],Zp=[xs.h180,xs.h360],em=t=>[{scaleResolutionDownBy:2,fps:t.encoding.maxFramerate}].map(A=>{var n,i;return new q(Math.floor(t.width/A.scaleResolutionDownBy),Math.floor(t.height/A.scaleResolutionDownBy),Math.max(15e4,Math.floor(t.encoding.maxBitrate/(Math.pow(A.scaleResolutionDownBy,2)*(((n=t.encoding.maxFramerate)!==null&&n!==void 0?n:30)/((i=A.fps)!==null&&i!==void 0?i:30))))),A.fps,t.encoding.priority)}),ro=["q","h","f"];function so(t,e,A,n){var i,r;let s=n==null?void 0:n.videoEncoding;t&&(s=n==null?void 0:n.screenShareEncoding);const o=n==null?void 0:n.simulcast,a=n==null?void 0:n.scalabilityMode,c=n==null?void 0:n.videoCodec;if(!s&&!o&&!a||!e||!A)return[{}];s||(s=tm(t,e,A,c),K.debug("using video encoding",s));const l=s.maxFramerate,u=new q(e,A,s.maxBitrate,s.maxFramerate,s.priority);if(a&&bn(c)){const g=new Di(a),f=[];if(g.spatial>3)throw new Error("unsupported scalabilityMode: ".concat(a));const p=oA();if(jA()||BA()||(p==null?void 0:p.name)==="Chrome"&&Ct(p==null?void 0:p.version,"113")<0){const B=g.suffix=="h"?2:3;for(let y=0;y<g.spatial;y+=1)f.push({rid:ro[2-y],maxBitrate:s.maxBitrate/Math.pow(B,y),maxFramerate:u.encoding.maxFramerate});f[0].scalabilityMode=a}else f.push({maxBitrate:s.maxBitrate,maxFramerate:u.encoding.maxFramerate,scalabilityMode:a});return u.encoding.priority&&(f[0].priority=u.encoding.priority,f[0].networkPriority=u.encoding.priority),K.debug("using svc encoding",{encodings:f}),f}if(!o)return[s];let d=[];t?d=(i=su(n==null?void 0:n.screenShareSimulcastLayers))!==null&&i!==void 0?i:ru(t,u):d=(r=su(n==null?void 0:n.videoSimulcastLayers))!==null&&r!==void 0?r:ru(t,u);let h;if(d.length>0){const g=d[0];d.length>1&&([,h]=d);const f=Math.max(e,A);if(f>=960&&h)return oo(e,A,[g,h,u],l);if(f>=480)return oo(e,A,[g,u],l)}return oo(e,A,[u])}function Am(t,e,A){var n,i,r,s;if(!A.backupCodec||A.backupCodec===!0||A.backupCodec.codec===A.videoCodec)return;e!==A.backupCodec.codec&&K.warn("requested a different codec than specified as backup",{serverRequested:e,backup:A.backupCodec.codec}),A.videoCodec=e,A.videoEncoding=A.backupCodec.encoding;const o=t.mediaStreamTrack.getSettings(),a=(n=o.width)!==null&&n!==void 0?n:(i=t.dimensions)===null||i===void 0?void 0:i.width,c=(r=o.height)!==null&&r!==void 0?r:(s=t.dimensions)===null||s===void 0?void 0:s.height;return t.source===E.Source.ScreenShare&&A.simulcast&&(A.simulcast=!1),so(t.source===E.Source.ScreenShare,a,c,A)}function tm(t,e,A,n){const i=nm(t,e,A);let{encoding:r}=i[0];const s=Math.max(e,A);for(let o=0;o<i.length;o+=1){const a=i[o];if(r=a.encoding,a.width>=s)break}if(n)switch(n){case"av1":r=Object.assign({},r),r.maxBitrate=r.maxBitrate*.7;break;case"vp9":r=Object.assign({},r),r.maxBitrate=r.maxBitrate*.85;break}return r}function nm(t,e,A){if(t)return qp;const n=e>A?e/A:A/e;return Math.abs(n-16/9)<Math.abs(n-4/3)?$p:Yp}function ru(t,e){if(t)return em(e);const{width:A,height:n}=e,i=A>n?A/n:n/A;return Math.abs(i-16/9)<Math.abs(i-4/3)?zp:Zp}function oo(t,e,A,n){const i=[];if(A.forEach((r,s)=>{if(s>=ro.length)return;const o=Math.min(t,e),c={rid:ro[s],scaleResolutionDownBy:Math.max(1,o/Math.min(r.width,r.height)),maxBitrate:r.encoding.maxBitrate},l=n&&r.encoding.maxFramerate?Math.min(n,r.encoding.maxFramerate):r.encoding.maxFramerate;l&&(c.maxFramerate=l);const u=Wt()||s===0;r.encoding.priority&&u&&(c.priority=r.encoding.priority,c.networkPriority=r.encoding.priority),i.push(c)}),BA()&&Pl()==="ios"){let r;i.forEach(o=>{r?o.maxFramerate&&o.maxFramerate>r&&(r=o.maxFramerate):r=o.maxFramerate});let s=!0;i.forEach(o=>{var a;o.maxFramerate!=r&&(s&&(s=!1,K.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),K.info('Setting framerate of encoding "'.concat((a=o.rid)!==null&&a!==void 0?a:"",'" to ').concat(r)),o.maxFramerate=r)})}return i}function su(t){if(t)return t.sort((e,A)=>{const{encoding:n}=e,{encoding:i}=A;return n.maxBitrate>i.maxBitrate?1:n.maxBitrate<i.maxBitrate?-1:n.maxBitrate===i.maxBitrate&&n.maxFramerate&&i.maxFramerate?n.maxFramerate>i.maxFramerate?1:-1:0})}class Di{constructor(e){const A=e.match(/^L(\d)T(\d)(h|_KEY|_KEY_SHIFT){0,1}$/);if(!A)throw new Error("invalid scalability mode");if(this.spatial=parseInt(A[1]),this.temporal=parseInt(A[2]),A.length>3)switch(A[3]){case"h":case"_KEY":case"_KEY_SHIFT":this.suffix=A[3]}}toString(){var e;return"L".concat(this.spatial,"T").concat(this.temporal).concat((e=this.suffix)!==null&&e!==void 0?e:"")}}function im(t){return t.source===E.Source.ScreenShare||t.constraints.height&&WA(t.constraints.height)>=1080?"maintain-resolution":"balanced"}const rm=5e3;class _i extends iu{get sender(){return this._sender}set sender(e){this._sender=e,this.degradationPreference&&this.setDegradationPreference(this.degradationPreference)}constructor(e,A){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,i=arguments.length>3?arguments[3]:void 0;super(e,E.Kind.Video,A,n,i),this.simulcastCodecs=new Map,this.degradationPreference="balanced",this.monitorSender=()=>m(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let r;try{r=yield this.getSenderStats()}catch(o){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:o}));return}const s=new Map(r.map(o=>[o.rid,o]));if(this.prevStats){let o=0;s.forEach((a,c)=>{var l;const u=(l=this.prevStats)===null||l===void 0?void 0:l.get(c);o+=Pi(a,u)}),this._currentBitrate=o}this.prevStats=s}),this.senderLock=new De}get isSimulcast(){return!!(this.sender&&this.sender.getParameters().encodings.length>1)}startMonitor(e){var A;if(this.signalClient=e,!Me())return;const n=(A=this.sender)===null||A===void 0?void 0:A.getParameters();n&&(this.encodings=n.encodings),!this.monitorInterval&&(this.monitorInterval=setInterval(()=>{this.monitorSender()},io))}stop(){this._mediaStreamTrack.getConstraints(),this.simulcastCodecs.forEach(e=>{e.mediaStreamTrack.stop()}),super.stop()}pauseUpstream(){const e=Object.create(null,{pauseUpstream:{get:()=>super.pauseUpstream}});return m(this,void 0,void 0,function*(){var A,n,i,r,s;yield e.pauseUpstream.call(this);try{for(var o=!0,a=NA(this.simulcastCodecs.values()),c;c=yield a.next(),A=c.done,!A;o=!0)r=c.value,o=!1,yield(s=r.sender)===null||s===void 0?void 0:s.replaceTrack(null)}catch(l){n={error:l}}finally{try{!o&&!A&&(i=a.return)&&(yield i.call(a))}finally{if(n)throw n.error}}})}resumeUpstream(){const e=Object.create(null,{resumeUpstream:{get:()=>super.resumeUpstream}});return m(this,void 0,void 0,function*(){var A,n,i,r,s;yield e.resumeUpstream.call(this);try{for(var o=!0,a=NA(this.simulcastCodecs.values()),c;c=yield a.next(),A=c.done,!A;o=!0){r=c.value,o=!1;const l=r;yield(s=l.sender)===null||s===void 0?void 0:s.replaceTrack(l.mediaStreamTrack)}}catch(l){n={error:l}}finally{try{!o&&!A&&(i=a.return)&&(yield i.call(a))}finally{if(n)throw n.error}}})}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return m(this,void 0,void 0,function*(){const A=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===E.Source.Camera&&!this.isUserProvided&&(this.log.debug("stopping camera track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{A()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return m(this,void 0,void 0,function*(){const A=yield this.muteLock.lock();try{return this.isMuted?(this.source===E.Source.Camera&&!this.isUserProvided&&(this.log.debug("reacquiring camera track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this):(this.log.debug("Track already unmuted",this.logContext),this)}finally{A()}})}setTrackMuted(e){super.setTrackMuted(e);for(const A of this.simulcastCodecs.values())A.mediaStreamTrack.enabled=!e}getSenderStats(){return m(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return[];const A=[],n=yield this.sender.getStats();return n.forEach(i=>{var r;if(i.type==="outbound-rtp"){const s={type:"video",streamId:i.id,frameHeight:i.frameHeight,frameWidth:i.frameWidth,framesPerSecond:i.framesPerSecond,framesSent:i.framesSent,firCount:i.firCount,pliCount:i.pliCount,nackCount:i.nackCount,packetsSent:i.packetsSent,bytesSent:i.bytesSent,qualityLimitationReason:i.qualityLimitationReason,qualityLimitationDurations:i.qualityLimitationDurations,qualityLimitationResolutionChanges:i.qualityLimitationResolutionChanges,rid:(r=i.rid)!==null&&r!==void 0?r:i.id,retransmittedPacketsSent:i.retransmittedPacketsSent,targetBitrate:i.targetBitrate,timestamp:i.timestamp},o=n.get(i.remoteId);o&&(s.jitter=o.jitter,s.packetsLost=o.packetsLost,s.roundTripTime=o.roundTripTime),A.push(s)}}),A.sort((i,r)=>{var s,o;return((s=r.frameWidth)!==null&&s!==void 0?s:0)-((o=i.frameWidth)!==null&&o!==void 0?o:0)}),A})}setPublishingQuality(e){const A=[];for(let n=$e.LOW;n<=$e.HIGH;n+=1)A.push(new gs({quality:n,enabled:n<=e}));this.log.debug("setting publishing quality. max quality ".concat(e),this.logContext),this.setPublishingLayers(A)}restartTrack(e){return m(this,void 0,void 0,function*(){var A,n,i,r,s;let o;if(e){const u=Js({video:e});typeof u.video!="boolean"&&(o=u.video)}yield this.restart(o);try{for(var a=!0,c=NA(this.simulcastCodecs.values()),l;l=yield c.next(),A=l.done,!A;a=!0){r=l.value,a=!1;const u=r;u.sender&&((s=u.sender.transport)===null||s===void 0?void 0:s.state)!=="closed"&&(u.mediaStreamTrack=this.mediaStreamTrack.clone(),yield u.sender.replaceTrack(u.mediaStreamTrack))}}catch(u){n={error:u}}finally{try{!a&&!A&&(i=c.return)&&(yield i.call(c))}finally{if(n)throw n.error}}})}setProcessor(e){const A=Object.create(null,{setProcessor:{get:()=>super.setProcessor}});return m(this,arguments,void 0,function(n){var i=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){var s,o,a,c,l,u;if(yield A.setProcessor.call(i,n,r),!((l=i.processor)===null||l===void 0)&&l.processedTrack)try{for(var d=!0,h=NA(i.simulcastCodecs.values()),g;g=yield h.next(),s=g.done,!s;d=!0)c=g.value,d=!1,yield(u=c.sender)===null||u===void 0?void 0:u.replaceTrack(i.processor.processedTrack)}catch(f){o={error:f}}finally{try{!d&&!s&&(a=h.return)&&(yield a.call(h))}finally{if(o)throw o.error}}}()})}setDegradationPreference(e){return m(this,void 0,void 0,function*(){if(this.degradationPreference=e,this.sender)try{this.log.debug("setting degradationPreference to ".concat(e),this.logContext);const A=this.sender.getParameters();A.degradationPreference=e,this.sender.setParameters(A)}catch(A){this.log.warn("failed to set degradationPreference",Object.assign({error:A},this.logContext))}})}addSimulcastTrack(e,A){if(this.simulcastCodecs.has(e)){this.log.error("".concat(e," already added, skipping adding simulcast codec"),this.logContext);return}const n={codec:e,mediaStreamTrack:this.mediaStreamTrack.clone(),sender:void 0,encodings:A};return this.simulcastCodecs.set(e,n),n}setSimulcastTrackSender(e,A){const n=this.simulcastCodecs.get(e);n&&(n.sender=A,setTimeout(()=>{this.subscribedCodecs&&this.setPublishingCodecs(this.subscribedCodecs)},rm))}setPublishingCodecs(e){return m(this,void 0,void 0,function*(){var A,n,i,r,s,o,a;if(this.log.debug("setting publishing codecs",Object.assign(Object.assign({},this.logContext),{codecs:e,currentCodec:this.codec})),!this.codec&&e.length>0)return yield this.setPublishingLayers(e[0].qualities),[];this.subscribedCodecs=e;const c=[];try{for(A=!0,n=NA(e);i=yield n.next(),r=i.done,!r;A=!0){a=i.value,A=!1;const l=a;if(!this.codec||this.codec===l.codec)yield this.setPublishingLayers(l.qualities);else{const u=this.simulcastCodecs.get(l.codec);if(this.log.debug("try setPublishingCodec for ".concat(l.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:u})),!u||!u.sender){for(const d of l.qualities)if(d.enabled){c.push(l.codec);break}}else u.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(l.codec),this.logContext),yield ou(u.sender,u.encodings,l.qualities,this.senderLock,this.log,this.logContext))}}}catch(l){s={error:l}}finally{try{!A&&!r&&(o=n.return)&&(yield o.call(n))}finally{if(s)throw s.error}}return c})}setPublishingLayers(e){return m(this,void 0,void 0,function*(){this.log.debug("setting publishing layers",Object.assign(Object.assign({},this.logContext),{qualities:e})),!(!this.sender||!this.encodings)&&(yield ou(this.sender,this.encodings,e,this.senderLock,this.log,this.logContext))})}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return m(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),Rl()&&this.isInBackground&&this.source===E.Source.Camera&&(this._mediaStreamTrack.enabled=!1)})}}function ou(t,e,A,n,i,r){return m(this,void 0,void 0,function*(){const s=yield n.lock();i.debug("setPublishingLayersForSender",Object.assign(Object.assign({},r),{sender:t,qualities:A,senderEncodings:e}));try{const o=t.getParameters(),{encodings:a}=o;if(!a)return;if(a.length!==e.length){i.warn("cannot set publishing layers, encodings mismatch",Object.assign(Object.assign({},r),{encodings:a,senderEncodings:e}));return}let c=!1;const l=oA();if((l==null?void 0:l.name)==="Chrome"&&Ct(l==null?void 0:l.version,"133")>0&&a[0].scalabilityMode){const d=a[0],h=new Di(d.scalabilityMode);let g=Ht.OFF;if(A.forEach(f=>{f.enabled&&(g===Ht.OFF||f.quality>g)&&(g=f.quality)}),g===Ht.OFF)d.active&&(d.active=!1,c=!0);else if(!d.active||h.spatial!==g+1){c=!0,d.active=!0;const f=new Di(e[0].scalabilityMode);h.spatial=g+1,h.suffix=f.suffix,h.spatial===1&&(h.suffix=void 0),d.scalabilityMode=h.toString(),d.scaleResolutionDownBy=Math.pow(2,2-g),e[0].maxBitrate&&(d.maxBitrate=e[0].maxBitrate/(d.scaleResolutionDownBy*d.scaleResolutionDownBy))}}else a.forEach((d,h)=>{var g;let f=(g=d.rid)!==null&&g!==void 0?g:"";f===""&&(f="q");const p=au(f),B=A.find(y=>y.quality===p);B&&d.active!==B.enabled&&(c=!0,d.active=B.enabled,i.debug("setting layer ".concat(B.quality," to ").concat(d.active?"enabled":"disabled"),r),Wt()&&(B.enabled?(d.scaleResolutionDownBy=e[h].scaleResolutionDownBy,d.maxBitrate=e[h].maxBitrate,d.maxFrameRate=e[h].maxFrameRate):(d.scaleResolutionDownBy=4,d.maxBitrate=10,d.maxFrameRate=2)))});c&&(o.encodings=a,i.debug("setting encodings",Object.assign(Object.assign({},r),{encodings:o.encodings})),yield t.setParameters(o))}finally{s()}})}function au(t){switch(t){case"f":return $e.HIGH;case"h":return $e.MEDIUM;case"q":return $e.LOW;default:return $e.HIGH}}function cu(t,e,A,n){if(!A)return[new mt({quality:$e.HIGH,width:t,height:e,bitrate:0,ssrc:0})];if(n){const i=A[0].scalabilityMode,r=new Di(i),s=[],o=r.suffix=="h"?1.5:2,a=r.suffix=="h"?2:3;for(let c=0;c<r.spatial;c+=1)s.push(new mt({quality:Math.min($e.HIGH,r.spatial-1)-c,width:Math.ceil(t/Math.pow(o,c)),height:Math.ceil(e/Math.pow(o,c)),bitrate:A[0].maxBitrate?Math.ceil(A[0].maxBitrate/Math.pow(a,c)):0,ssrc:0}));return s}return A.map(i=>{var r,s,o;const a=(r=i.scaleResolutionDownBy)!==null&&r!==void 0?r:1;let c=au((s=i.rid)!==null&&s!==void 0?s:"");return new mt({quality:c,width:Math.ceil(t/a),height:Math.ceil(e/a),bitrate:(o=i.maxBitrate)!==null&&o!==void 0?o:0,ssrc:0})})}const lu="_lossy",uu="_reliable",sm=2*1e3,ao="leave-reconnect";var cA;(function(t){t[t.New=0]="New",t[t.Connected=1]="Connected",t[t.Disconnected=2]="Disconnected",t[t.Reconnecting=3]="Reconnecting",t[t.Closed=4]="Closed"})(cA||(cA={}));class om extends mA.EventEmitter{get isClosed(){return this._isClosed}get pendingReconnect(){return!!this.reconnectTimeout}constructor(e){var A;super(),this.options=e,this.rtcConfig={},this.peerConnectionTimeout=to.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.subscriberPrimary=!1,this.pcState=cA.New,this._isClosed=!0,this.pendingTrackResolvers={},this.reconnectAttempts=0,this.reconnectStart=0,this.attemptingReconnect=!1,this.joinAttempts=0,this.maxJoinAttempts=1,this.shouldFailNext=!1,this.log=K,this.handleDataChannel=n=>m(this,[n],void 0,function(i){var r=this;let{channel:s}=i;return function*(){if(s){if(s.label===uu)r.reliableDCSub=s;else if(s.label===lu)r.lossyDCSub=s;else return;r.log.debug("on data channel ".concat(s.id,", ").concat(s.label),r.logContext),s.onmessage=r.handleDataMessage}}()}),this.handleDataMessage=n=>m(this,void 0,void 0,function*(){var i,r;const s=yield this.dataProcessLock.lock();try{let o;if(n.data instanceof ArrayBuffer)o=n.data;else if(n.data instanceof Blob)o=yield n.data.arrayBuffer();else{this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:n.data}));return}const a=He.fromBinary(new Uint8Array(o));((i=a.value)===null||i===void 0?void 0:i.case)==="speaker"?this.emit(I.ActiveSpeakersUpdate,a.value.value.speakers):(((r=a.value)===null||r===void 0?void 0:r.case)==="user"&&cm(a,a.value.value),this.emit(I.DataPacketReceived,a))}finally{s()}}),this.handleDataError=n=>{const r=n.currentTarget.maxRetransmits===0?"lossy":"reliable";if(n instanceof ErrorEvent&&n.error){const{error:s}=n.error;this.log.error("DataChannel error on ".concat(r,": ").concat(n.message),Object.assign(Object.assign({},this.logContext),{error:s}))}else this.log.error("Unknown DataChannel error on ".concat(r),Object.assign(Object.assign({},this.logContext),{event:n}))},this.handleBufferedAmountLow=n=>{const r=n.currentTarget.maxRetransmits===0?W.LOSSY:W.RELIABLE;this.updateAndEmitDCBufferStatus(r)},this.handleDisconnect=(n,i)=>{if(this._isClosed)return;this.log.warn("".concat(n," disconnected"),this.logContext),this.reconnectAttempts===0&&(this.reconnectStart=Date.now());const r=a=>{this.log.warn("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(a,"ms. giving up"),this.logContext),this.emit(I.Disconnected),this.close()},s=Date.now()-this.reconnectStart;let o=this.getNextRetryDelay({elapsedMs:s,retryCount:this.reconnectAttempts});if(o===null){r(s);return}n===ao&&(o=0),this.log.debug("reconnecting in ".concat(o,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider&&this.regionUrlProvider.updateToken(this.token),this.reconnectTimeout=ye.setTimeout(()=>this.attemptReconnect(i).finally(()=>this.reconnectTimeout=void 0),o)},this.waitForRestarted=()=>new Promise((n,i)=>{this.pcState===cA.Connected&&n();const r=()=>{this.off(I.Disconnected,s),n()},s=()=>{this.off(I.Restarted,r),i()};this.once(I.Restarted,r),this.once(I.Disconnected,s)}),this.updateAndEmitDCBufferStatus=n=>{const i=this.isBufferStatusLow(n);typeof i<"u"&&i!==this.dcBufferStatus.get(n)&&(this.dcBufferStatus.set(n,i),this.emit(I.DCBufferStatusChanged,i,n))},this.isBufferStatusLow=n=>{const i=this.dataChannelForKind(n);if(i)return i.bufferedAmount<=i.bufferedAmountLowThreshold},this.handleBrowserOnLine=()=>{this.client.currentState===Ae.RECONNECTING&&(this.clearReconnectTimeout(),this.attemptReconnect(Ot.RR_SIGNAL_DISCONNECTED))},this.log=TA((A=e.loggerName)!==null&&A!==void 0?A:sA.Engine),this.loggerOptions={loggerName:e.loggerName,loggerContextCb:()=>this.logContext},this.client=new $s(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.registerOnLineListener(),this.closingLock=new De,this.dataProcessLock=new De,this.dcBufferStatus=new Map([[W.LOSSY,!0],[W.RELIABLE,!0]]),this.client.onParticipantUpdate=n=>this.emit(I.ParticipantUpdate,n),this.client.onConnectionQuality=n=>this.emit(I.ConnectionQualityUpdate,n),this.client.onRoomUpdate=n=>this.emit(I.RoomUpdate,n),this.client.onSubscriptionError=n=>this.emit(I.SubscriptionError,n),this.client.onSubscriptionPermissionUpdate=n=>this.emit(I.SubscriptionPermissionUpdate,n),this.client.onSpeakersChanged=n=>this.emit(I.SpeakersChanged,n),this.client.onStreamStateUpdate=n=>this.emit(I.StreamStateChanged,n),this.client.onRequestResponse=n=>this.emit(I.SignalRequestResponse,n)}get logContext(){var e,A,n,i,r,s,o,a;return{room:(A=(e=this.latestJoinResponse)===null||e===void 0?void 0:e.room)===null||A===void 0?void 0:A.name,roomID:(i=(n=this.latestJoinResponse)===null||n===void 0?void 0:n.room)===null||i===void 0?void 0:i.sid,participant:(s=(r=this.latestJoinResponse)===null||r===void 0?void 0:r.participant)===null||s===void 0?void 0:s.identity,pID:(a=(o=this.latestJoinResponse)===null||o===void 0?void 0:o.participant)===null||a===void 0?void 0:a.sid}}join(e,A,n,i){return m(this,void 0,void 0,function*(){this.url=e,this.token=A,this.signalOpts=n,this.maxJoinAttempts=n.maxRetries;try{this.joinAttempts+=1,this.setupSignalClientCallbacks();const r=yield this.client.join(e,A,n,i);return this._isClosed=!1,this.latestJoinResponse=r,this.subscriberPrimary=r.subscriberPrimary,this.pcManager||(yield this.configure(r)),(!this.subscriberPrimary||r.fastPublish)&&this.negotiate(),this.clientConfiguration=r.clientConfiguration,setTimeout(()=>{this.emit(I.SignalConnected)},10),r}catch(r){if(r instanceof z&&r.reason===G.ServerUnreachable&&(this.log.warn("Couldn't connect to server, attempt ".concat(this.joinAttempts," of ").concat(this.maxJoinAttempts),this.logContext),this.joinAttempts<this.maxJoinAttempts))return this.join(e,A,n,i);throw r}})}close(){return m(this,void 0,void 0,function*(){const e=yield this.closingLock.lock();if(this.isClosed){e();return}try{this._isClosed=!0,this.joinAttempts=0,this.emit(I.Closing),this.removeAllListeners(),this.deregisterOnLineListener(),this.clearPendingReconnect(),yield this.cleanupPeerConnections(),yield this.cleanupClient()}finally{e()}})}cleanupPeerConnections(){return m(this,void 0,void 0,function*(){var e;yield(e=this.pcManager)===null||e===void 0?void 0:e.close(),this.pcManager=void 0;const A=n=>{n&&(n.close(),n.onbufferedamountlow=null,n.onclose=null,n.onclosing=null,n.onerror=null,n.onmessage=null,n.onopen=null)};A(this.lossyDC),A(this.lossyDCSub),A(this.reliableDC),A(this.reliableDCSub),this.lossyDC=void 0,this.lossyDCSub=void 0,this.reliableDC=void 0,this.reliableDCSub=void 0})}cleanupClient(){return m(this,void 0,void 0,function*(){yield this.client.close(),this.client.resetCallbacks()})}addTrack(e){if(this.pendingTrackResolvers[e.cid])throw new FA("a track with the same ID has already been published");return new Promise((A,n)=>{const i=setTimeout(()=>{delete this.pendingTrackResolvers[e.cid],n(new z("publication of local track timed out, no response from server",G.InternalError))},1e4);this.pendingTrackResolvers[e.cid]={resolve:r=>{clearTimeout(i),A(r)},reject:()=>{clearTimeout(i),n(new Error("Cancelled publication by calling unpublish"))}},this.client.sendAddTrack(e)})}removeTrack(e){if(e.track&&this.pendingTrackResolvers[e.track.id]){const{reject:A}=this.pendingTrackResolvers[e.track.id];A&&A(),delete this.pendingTrackResolvers[e.track.id]}try{return this.pcManager.removeTrack(e),!0}catch(A){this.log.warn("failed to remove track",Object.assign(Object.assign({},this.logContext),{error:A}))}return!1}updateMuteStatus(e,A){this.client.sendMuteTrack(e,A)}get dataSubscriberReadyState(){var e;return(e=this.reliableDCSub)===null||e===void 0?void 0:e.readyState}getConnectedServerAddress(){return m(this,void 0,void 0,function*(){var e;return(e=this.pcManager)===null||e===void 0?void 0:e.getConnectedAddress()})}setRegionUrlProvider(e){this.regionUrlProvider=e}configure(e){return m(this,void 0,void 0,function*(){var A,n;if(this.pcManager&&this.pcManager.currentState!==ce.NEW)return;this.participantSid=(A=e.participant)===null||A===void 0?void 0:A.sid;const i=this.makeRTCConfiguration(e);this.pcManager=new Wp(i,e.subscriberPrimary,this.loggerOptions),this.emit(I.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(r,s)=>{this.client.sendIceCandidate(r,s)},this.pcManager.onPublisherOffer=r=>{this.client.sendOffer(r)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(r,s,o)=>m(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(r),this.logContext),["closed","disconnected","failed"].includes(s)&&(this.publisherConnectionPromise=void 0),r===ce.CONNECTED){const l=this.pcState===cA.New;this.pcState=cA.Connected,l&&this.emit(I.Connected,e)}else r===ce.FAILED&&this.pcState===cA.Connected&&(this.pcState=cA.Disconnected,this.handleDisconnect("peerconnection failed",o==="failed"?Ot.RR_SUBSCRIBER_FAILED:Ot.RR_PUBLISHER_FAILED));const a=this.client.isDisconnected||this.client.currentState===Ae.RECONNECTING,c=[ce.FAILED,ce.CLOSING,ce.CLOSED].includes(r);a&&c&&!this._isClosed&&this.emit(I.Offline)}),this.pcManager.onTrack=r=>{this.emit(I.MediaTrackAdded,r.track,r.streams[0],r.receiver)},am((n=e.serverInfo)===null||n===void 0?void 0:n.protocol)||this.createDataChannels()})}setupSignalClientCallbacks(){this.client.onAnswer=e=>m(this,void 0,void 0,function*(){this.pcManager&&(this.log.debug("received server answer",Object.assign(Object.assign({},this.logContext),{RTCSdpType:e.type})),yield this.pcManager.setPublisherAnswer(e))}),this.client.onTrickle=(e,A)=>{this.pcManager&&(this.log.debug("got ICE candidate from peer",Object.assign(Object.assign({},this.logContext),{candidate:e,target:A})),this.pcManager.addIceCandidate(e,A))},this.client.onOffer=e=>m(this,void 0,void 0,function*(){if(!this.pcManager)return;const A=yield this.pcManager.createSubscriberAnswerFromOffer(e);this.client.sendAnswer(A)}),this.client.onLocalTrackPublished=e=>{var A;if(this.log.debug("received trackPublishedResponse",Object.assign(Object.assign({},this.logContext),{cid:e.cid,track:(A=e.track)===null||A===void 0?void 0:A.sid})),!this.pendingTrackResolvers[e.cid]){this.log.error("missing track resolver for ".concat(e.cid),Object.assign(Object.assign({},this.logContext),{cid:e.cid}));return}const{resolve:n}=this.pendingTrackResolvers[e.cid];delete this.pendingTrackResolvers[e.cid],n(e.track)},this.client.onLocalTrackUnpublished=e=>{this.emit(I.LocalTrackUnpublished,e)},this.client.onLocalTrackSubscribed=e=>{this.emit(I.LocalTrackSubscribed,e)},this.client.onTokenRefresh=e=>{this.token=e},this.client.onRemoteMuteChanged=(e,A)=>{this.emit(I.RemoteMute,e,A)},this.client.onSubscribedQualityUpdate=e=>{this.emit(I.SubscribedQualityUpdate,e)},this.client.onRoomMoved=e=>{var A;this.participantSid=(A=e.participant)===null||A===void 0?void 0:A.sid,this.emit(I.RoomMoved,e)},this.client.onClose=()=>{this.handleDisconnect("signal",Ot.RR_SIGNAL_DISCONNECTED)},this.client.onLeave=e=>{switch(this.log.debug("client leave request",Object.assign(Object.assign({},this.logContext),{reason:e==null?void 0:e.reason})),e.regions&&this.regionUrlProvider&&(this.log.debug("updating regions",this.logContext),this.regionUrlProvider.setServerReportedRegions(e.regions)),e.action){case Kt.DISCONNECT:this.emit(I.Disconnected,e==null?void 0:e.reason),this.close();break;case Kt.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(ao);break;case Kt.RESUME:this.handleDisconnect(ao)}}}makeRTCConfiguration(e){var A;const n=Object.assign({},this.rtcConfig);if(!((A=this.signalOpts)===null||A===void 0)&&A.e2eeEnabled&&(this.log.debug("E2EE - setting up transports with insertable streams",this.logContext),n.encodedInsertableStreams=!0),e.iceServers&&!n.iceServers){const i=[];e.iceServers.forEach(r=>{const s={urls:r.urls};r.username&&(s.username=r.username),r.credential&&(s.credential=r.credential),i.push(s)}),n.iceServers=i}return e.clientConfiguration&&e.clientConfiguration.forceRelay===vn.ENABLED&&(n.iceTransportPolicy="relay"),n.sdpSemantics="unified-plan",n.continualGatheringPolicy="gather_continually",n}createDataChannels(){this.pcManager&&(this.lossyDC&&(this.lossyDC.onmessage=null,this.lossyDC.onerror=null),this.reliableDC&&(this.reliableDC.onmessage=null,this.reliableDC.onerror=null),this.lossyDC=this.pcManager.createPublisherDataChannel(lu,{ordered:!1,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel(uu,{ordered:!0}),this.lossyDC.onmessage=this.handleDataMessage,this.reliableDC.onmessage=this.handleDataMessage,this.lossyDC.onerror=this.handleDataError,this.reliableDC.onerror=this.handleDataError,this.lossyDC.bufferedAmountLowThreshold=65535,this.reliableDC.bufferedAmountLowThreshold=65535,this.lossyDC.onbufferedamountlow=this.handleBufferedAmountLow,this.reliableDC.onbufferedamountlow=this.handleBufferedAmountLow)}createSender(e,A,n){return m(this,void 0,void 0,function*(){if(Ls())return yield this.createTransceiverRTCRtpSender(e,A,n);if(Ds())return this.log.warn("using add-track fallback",this.logContext),yield this.createRTCRtpSender(e.mediaStreamTrack);throw new Be("Required webRTC APIs not supported on this device")})}createSimulcastSender(e,A,n,i){return m(this,void 0,void 0,function*(){if(Ls())return this.createSimulcastTransceiverSender(e,A,n,i);if(Ds())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(e.mediaStreamTrack);throw new Be("Cannot stream on this device")})}createTransceiverRTCRtpSender(e,A,n){return m(this,void 0,void 0,function*(){if(!this.pcManager)throw new Be("publisher is closed");const i=[];e.mediaStream&&i.push(e.mediaStream),Xt(e)&&(e.codec=A.videoCodec);const r={direction:"sendonly",streams:i};return n&&(r.sendEncodings=n),(yield this.pcManager.addPublisherTransceiver(e.mediaStreamTrack,r)).sender})}createSimulcastTransceiverSender(e,A,n,i){return m(this,void 0,void 0,function*(){if(!this.pcManager)throw new Be("publisher is closed");const r={direction:"sendonly"};i&&(r.sendEncodings=i);const s=yield this.pcManager.addPublisherTransceiver(A.mediaStreamTrack,r);if(n.videoCodec)return e.setSimulcastTrackSender(n.videoCodec,s.sender),s.sender})}createRTCRtpSender(e){return m(this,void 0,void 0,function*(){if(!this.pcManager)throw new Be("publisher is closed");return this.pcManager.addPublisherTrack(e)})}attemptReconnect(e){return m(this,void 0,void 0,function*(){var A,n,i;if(!this._isClosed){if(this.attemptingReconnect){K.warn("already attempting reconnect, returning early",this.logContext);return}(((A=this.clientConfiguration)===null||A===void 0?void 0:A.resumeConnection)===vn.DISABLED||((i=(n=this.pcManager)===null||n===void 0?void 0:n.currentState)!==null&&i!==void 0?i:ce.NEW)===ce.NEW)&&(this.fullReconnectOnNext=!0);try{this.attemptingReconnect=!0,this.fullReconnectOnNext?yield this.restartConnection():yield this.resumeConnection(e),this.clearPendingReconnect(),this.fullReconnectOnNext=!1}catch(r){this.reconnectAttempts+=1;let s=!0;r instanceof Be?(this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:r})),s=!1):r instanceof Yt||(this.fullReconnectOnNext=!0),s?this.handleDisconnect("reconnect",Ot.RR_UNKNOWN):(this.log.info("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(Date.now()-this.reconnectStart,"ms. giving up"),this.logContext),this.emit(I.Disconnected),yield this.close())}finally{this.attemptingReconnect=!1}}})}getNextRetryDelay(e){try{return this.reconnectPolicy.nextRetryDelayInMs(e)}catch(A){this.log.warn("encountered error in reconnect policy",Object.assign(Object.assign({},this.logContext),{error:A}))}return null}restartConnection(e){return m(this,void 0,void 0,function*(){var A,n,i;try{if(!this.url||!this.token)throw new Be("could not reconnect, url or token not saved");this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(I.Restarting),this.client.isDisconnected||(yield this.client.sendLeave()),yield this.cleanupPeerConnections(),yield this.cleanupClient();let r;try{if(!this.signalOpts)throw this.log.warn("attempted connection restart, without signal options present",this.logContext),new Yt;r=yield this.join(e??this.url,this.token,this.signalOpts)}catch(s){throw s instanceof z&&s.reason===G.NotAllowed?new Be("could not reconnect, token might be expired"):new Yt}if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(this.client.setReconnected(),this.emit(I.SignalRestarted,r),yield this.waitForPCReconnected(),this.client.currentState!==Ae.CONNECTED)throw new Yt("Signal connection got severed during reconnect");(A=this.regionUrlProvider)===null||A===void 0||A.resetAttempts(),this.emit(I.Restarted)}catch(r){const s=yield(n=this.regionUrlProvider)===null||n===void 0?void 0:n.getNextBestRegionUrl();if(s){yield this.restartConnection(s);return}else throw(i=this.regionUrlProvider)===null||i===void 0||i.resetAttempts(),r}})}resumeConnection(e){return m(this,void 0,void 0,function*(){var A;if(!this.url||!this.token)throw new Be("could not reconnect, url or token not saved");if(!this.pcManager)throw new Be("publisher and subscriber connections unset");this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(I.Resuming);let n;try{this.setupSignalClientCallbacks(),n=yield this.client.reconnect(this.url,this.token,this.participantSid,e)}catch(i){let r="";throw i instanceof Error&&(r=i.message,this.log.error(i.message,Object.assign(Object.assign({},this.logContext),{error:i}))),i instanceof z&&i.reason===G.NotAllowed?new Be("could not reconnect, token might be expired"):i instanceof z&&i.reason===G.LeaveRequest?i:new Yt(r)}if(this.emit(I.SignalResumed),n){const i=this.makeRTCConfiguration(n);this.pcManager.updateConfiguration(i)}else this.log.warn("Did not receive reconnect response",this.logContext);if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(yield this.pcManager.triggerIceRestart(),yield this.waitForPCReconnected(),this.client.currentState!==Ae.CONNECTED)throw new Yt("Signal connection got severed during reconnect");this.client.setReconnected(),((A=this.reliableDC)===null||A===void 0?void 0:A.readyState)==="open"&&this.reliableDC.id===null&&this.createDataChannels(),this.emit(I.Resumed)})}waitForPCInitialConnection(e,A){return m(this,void 0,void 0,function*(){if(!this.pcManager)throw new Be("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(A,e)})}waitForPCReconnected(){return m(this,void 0,void 0,function*(){this.pcState=cA.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield Oe(sm),!this.pcManager)throw new Be("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=cA.Connected}catch(e){throw this.pcState=cA.Disconnected,new z("could not establish PC connection, ".concat(e.message),G.InternalError)}})}publishRpcResponse(e,A,n,i){return m(this,void 0,void 0,function*(){const r=new He({destinationIdentities:[e],kind:W.RELIABLE,value:{case:"rpcResponse",value:new mc({requestId:A,value:i?{case:"error",value:i.toProto()}:{case:"payload",value:n??""}})}});yield this.sendDataPacket(r,W.RELIABLE)})}publishRpcAck(e,A){return m(this,void 0,void 0,function*(){const n=new He({destinationIdentities:[e],kind:W.RELIABLE,value:{case:"rpcAck",value:new pc({requestId:A})}});yield this.sendDataPacket(n,W.RELIABLE)})}sendDataPacket(e,A){return m(this,void 0,void 0,function*(){const n=e.toBinary();yield this.ensurePublisherConnected(A);const i=this.dataChannelForKind(A);i&&i.send(n),this.updateAndEmitDCBufferStatus(A)})}waitForBufferStatusLow(e){return new Promise((A,n)=>m(this,void 0,void 0,function*(){if(this.isBufferStatusLow(e))A();else{const i=()=>n("Engine closed");for(this.once(I.Closing,i);!this.dcBufferStatus.get(e);)yield Oe(10);this.off(I.Closing,i),A()}}))}ensureDataTransportConnected(e){return m(this,arguments,void 0,function(A){var n=this;let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscriberPrimary;return function*(){var r;if(!n.pcManager)throw new Be("PC manager is closed");const s=i?n.pcManager.subscriber:n.pcManager.publisher,o=i?"Subscriber":"Publisher";if(!s)throw new z("".concat(o," connection not set"),G.InternalError);let a=!1;!i&&!n.dataChannelForKind(A,i)&&(n.createDataChannels(),a=!0),!a&&!i&&!n.pcManager.publisher.isICEConnected&&n.pcManager.publisher.getICEConnectionState()!=="checking"&&(a=!0),a&&n.negotiate();const c=n.dataChannelForKind(A,i);if((c==null?void 0:c.readyState)==="open")return;const l=new Date().getTime()+n.peerConnectionTimeout;for(;new Date().getTime()<l;){if(s.isICEConnected&&((r=n.dataChannelForKind(A,i))===null||r===void 0?void 0:r.readyState)==="open")return;yield Oe(50)}throw new z("could not establish ".concat(o," connection, state: ").concat(s.getICEConnectionState()),G.InternalError)}()})}ensurePublisherConnected(e){return m(this,void 0,void 0,function*(){this.publisherConnectionPromise||(this.publisherConnectionPromise=this.ensureDataTransportConnected(e,!1)),yield this.publisherConnectionPromise})}verifyTransport(){return!(!this.pcManager||this.pcManager.currentState!==ce.CONNECTED||!this.client.ws||this.client.ws.readyState===WebSocket.CLOSED)}negotiate(){return m(this,void 0,void 0,function*(){return new Promise((e,A)=>m(this,void 0,void 0,function*(){if(!this.pcManager){A(new Ts("PC manager is closed"));return}this.pcManager.requirePublisher(),this.pcManager.publisher.getTransceivers().length==0&&!this.lossyDC&&!this.reliableDC&&this.createDataChannels();const n=new AbortController,i=()=>{n.abort(),this.log.debug("engine disconnected while negotiation was ongoing",this.logContext),e()};this.isClosed&&A("cannot negotiate on closed engine"),this.on(I.Closing,i),this.pcManager.publisher.once($t.RTPVideoPayloadTypes,r=>{const s=new Map;r.forEach(o=>{const a=o.codec.toLowerCase();mp(a)&&s.set(o.payload,a)}),this.emit(I.RTPVideoMapUpdate,s)});try{yield this.pcManager.negotiate(n),e()}catch(r){r instanceof Ts&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",Ot.RR_UNKNOWN),A(r)}finally{this.off(I.Closing,i)}}))})}dataChannelForKind(e,A){if(A){if(e===W.LOSSY)return this.lossyDCSub;if(e===W.RELIABLE)return this.reliableDCSub}else{if(e===W.LOSSY)return this.lossyDC;if(e===W.RELIABLE)return this.reliableDC}}sendSyncState(e,A){var n,i;if(!this.pcManager){this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);return}const r=this.pcManager.subscriber.getLocalDescription(),s=this.pcManager.subscriber.getRemoteDescription(),o=(i=(n=this.signalOpts)===null||n===void 0?void 0:n.autoSubscribe)!==null&&i!==void 0?i:!0,a=new Array,c=new Array;e.forEach(l=>{l.isDesired!==o&&a.push(l.trackSid),l.isEnabled||c.push(l.trackSid)}),this.client.sendSyncState(new Lc({answer:r?xi({sdp:r.sdp,type:r.type}):void 0,offer:s?xi({sdp:s.sdp,type:s.type}):void 0,subscription:new mi({trackSids:a,subscribe:!o,participantTracks:[]}),publishTracks:Ep(A),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:c}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){const e=[],A=(n,i)=>{(n==null?void 0:n.id)!==void 0&&n.id!==null&&e.push(new Dc({label:n.label,id:n.id,target:i}))};return A(this.dataChannelForKind(W.LOSSY),rA.PUBLISHER),A(this.dataChannelForKind(W.RELIABLE),rA.PUBLISHER),A(this.dataChannelForKind(W.LOSSY,!0),rA.SUBSCRIBER),A(this.dataChannelForKind(W.RELIABLE,!0),rA.SUBSCRIBER),e}clearReconnectTimeout(){this.reconnectTimeout&&ye.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){Me()&&window.addEventListener("online",this.handleBrowserOnLine)}deregisterOnLineListener(){Me()&&window.removeEventListener("online",this.handleBrowserOnLine)}}class Yt extends Error{}function am(t){return t!==void 0&&t>13}function cm(t,e){const A=t.participantIdentity?t.participantIdentity:e.participantIdentity;t.participantIdentity=A,e.participantIdentity=A;const n=t.destinationIdentities.length!==0?t.destinationIdentities:e.destinationIdentities;t.destinationIdentities=n,e.destinationIdentities=n}class co{constructor(e,A){this.lastUpdateAt=0,this.settingsCacheTime=3e3,this.attemptedRegions=[],this.serverUrl=new URL(e),this.token=A}updateToken(e){this.token=e}isCloud(){return Hs(this.serverUrl)}getServerUrl(){return this.serverUrl}getNextBestRegionUrl(e){return m(this,void 0,void 0,function*(){if(!this.isCloud())throw Error("region availability is only supported for LiveKit Cloud domains");(!this.regionSettings||Date.now()-this.lastUpdateAt>this.settingsCacheTime)&&(this.regionSettings=yield this.fetchRegionSettings(e));const A=this.regionSettings.regions.filter(n=>!this.attemptedRegions.find(i=>i.url===n.url));if(A.length>0){const n=A[0];return this.attemptedRegions.push(n),K.debug("next region: ".concat(n.region)),n.url}else return null})}resetAttempts(){this.attemptedRegions=[]}fetchRegionSettings(e){return m(this,void 0,void 0,function*(){const A=yield fetch("".concat(lm(this.serverUrl),"/regions"),{headers:{authorization:"Bearer ".concat(this.token)},signal:e});if(A.ok){const n=yield A.json();return this.lastUpdateAt=Date.now(),n}else throw new z("Could not fetch region settings: ".concat(A.statusText),A.status===401?G.NotAllowed:G.InternalError,A.status)})}setServerReportedRegions(e){this.regionSettings=e,this.lastUpdateAt=Date.now()}}function lm(t){return"".concat(t.protocol.replace("ws","http"),"//").concat(t.host,"/settings")}class du{get info(){return this._info}constructor(e,A,n){this.reader=A,this.totalByteSize=n,this._info=e,this.bytesReceived=0}}class um extends du{handleChunkReceived(e){var A;this.bytesReceived+=e.content.byteLength;const n=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(A=this.onProgress)===null||A===void 0||A.call(this,n)}[Symbol.asyncIterator](){const e=this.reader.getReader();return{next:()=>m(this,void 0,void 0,function*(){try{const{done:A,value:n}=yield e.read();return A?{done:!0,value:void 0}:(this.handleChunkReceived(n),{done:!1,value:n.content})}catch{return{done:!0,value:void 0}}}),return(){return m(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return m(this,void 0,void 0,function*(){var e,A,n,i;let r=new Set;try{for(var s=!0,o=NA(this),a;a=yield o.next(),e=a.done,!e;s=!0){i=a.value,s=!1;const c=i;r.add(c)}}catch(c){A={error:c}}finally{try{!s&&!e&&(n=o.return)&&(yield n.call(o))}finally{if(A)throw A.error}}return Array.from(r)})}}class dm extends du{constructor(e,A,n){super(e,A,n),this.receivedChunks=new Map}handleChunkReceived(e){var A;const n=Ii(e.chunkIndex),i=this.receivedChunks.get(n);if(i&&i.version>e.version)return;this.receivedChunks.set(n,e),this.bytesReceived+=e.content.byteLength;const r=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(A=this.onProgress)===null||A===void 0||A.call(this,r)}[Symbol.asyncIterator](){const e=this.reader.getReader(),A=new TextDecoder;return{next:()=>m(this,void 0,void 0,function*(){try{const{done:n,value:i}=yield e.read();return n?{done:!0,value:void 0}:(this.handleChunkReceived(i),{done:!1,value:A.decode(i.content)})}catch{return{done:!0,value:void 0}}}),return(){return m(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return m(this,void 0,void 0,function*(){var e,A,n,i;let r="";try{for(var s=!0,o=NA(this),a;a=yield o.next(),e=a.done,!e;s=!0)i=a.value,s=!1,r+=i}catch(c){A={error:c}}finally{try{!s&&!e&&(n=o.return)&&(yield n.call(o))}finally{if(A)throw A.error}}return r})}}class hu{constructor(e,A,n){this.writableStream=e,this.defaultWriter=e.getWriter(),this.onClose=n,this.info=A}write(e){return this.defaultWriter.write(e)}close(){return m(this,void 0,void 0,function*(){var e;yield this.defaultWriter.close(),this.defaultWriter.releaseLock(),(e=this.onClose)===null||e===void 0||e.call(this)})}}class hm extends hu{}class fm extends hu{}class fu extends E{constructor(e,A,n,i,r){super(e,n,r),this.sid=A,this.receiver=i}get isLocal(){return!1}setMuted(e){this.isMuted!==e&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?k.Muted:k.Unmuted,this))}setMediaStream(e){this.mediaStream=e;const A=n=>{n.track===this._mediaStreamTrack&&(e.removeEventListener("removetrack",A),this.receiver&&"playoutDelayHint"in this.receiver&&(this.receiver.playoutDelayHint=void 0),this.receiver=void 0,this._currentBitrate=0,this.emit(k.Ended,this))};e.addEventListener("removetrack",A)}start(){this.startMonitor(),super.enable()}stop(){this.stopMonitor(),super.disable()}getRTCStatsReport(){return m(this,void 0,void 0,function*(){var e;return!((e=this.receiver)===null||e===void 0)&&e.getStats?yield this.receiver.getStats():void 0})}setPlayoutDelay(e){this.receiver?"playoutDelayHint"in this.receiver?this.receiver.playoutDelayHint=e:this.log.warn("Playout delay not supported in this browser"):this.log.warn("Cannot set playout delay, track already ended")}getPlayoutDelay(){if(this.receiver){if("playoutDelayHint"in this.receiver)return this.receiver.playoutDelayHint;this.log.warn("Playout delay not supported in this browser")}else this.log.warn("Cannot get playout delay, track already ended");return 0}startMonitor(){this.monitorInterval||(this.monitorInterval=setInterval(()=>this.monitorReceiver(),io)),Sp()&&this.registerTimeSyncUpdate()}registerTimeSyncUpdate(){const e=()=>{var A;this.timeSyncHandle=requestAnimationFrame(()=>e());const n=(A=this.receiver)===null||A===void 0?void 0:A.getSynchronizationSources()[0];if(n){const{timestamp:i,rtpTimestamp:r}=n;r&&this.rtpTimestamp!==r&&(this.emit(k.TimeSyncUpdate,{timestamp:i,rtpTimestamp:r}),this.rtpTimestamp=r)}};e()}}class gm extends fu{constructor(e,A,n,i,r,s){super(e,A,E.Kind.Audio,n,s),this.monitorReceiver=()=>m(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const o=yield this.getReceiverStats();o&&this.prevStats&&this.receiver&&(this._currentBitrate=Pi(o,this.prevStats)),this.prevStats=o}),this.audioContext=i,this.webAudioPluginNodes=[],r&&(this.sinkId=r.deviceId)}setVolume(e){var A;for(const n of this.attachedElements)this.audioContext?(A=this.gainNode)===null||A===void 0||A.gain.setTargetAtTime(e,0,.1):n.volume=e;BA()&&this._mediaStreamTrack._setVolume(e),this.elementVolume=e}getVolume(){if(this.elementVolume)return this.elementVolume;if(BA())return 1;let e=0;return this.attachedElements.forEach(A=>{A.volume>e&&(e=A.volume)}),e}setSinkId(e){return m(this,void 0,void 0,function*(){this.sinkId=e,yield Promise.all(this.attachedElements.map(A=>{if(_s(A))return A.setSinkId(e)}))})}attach(e){const A=this.attachedElements.length===0;return e?super.attach(e):e=super.attach(),this.sinkId&&_s(e)&&e.setSinkId(this.sinkId).catch(n=>{this.log.error("Failed to set sink id on remote audio track",n,this.logContext)}),this.audioContext&&A&&(this.log.debug("using audio context mapping",this.logContext),this.connectWebAudio(this.audioContext,e),e.volume=0,e.muted=!0),this.elementVolume&&this.setVolume(this.elementVolume),e}detach(e){let A;return e?(A=super.detach(e),this.audioContext&&(this.attachedElements.length>0?this.connectWebAudio(this.audioContext,this.attachedElements[0]):this.disconnectWebAudio())):(A=super.detach(),this.disconnectWebAudio()),A}setAudioContext(e){this.audioContext=e,e&&this.attachedElements.length>0?this.connectWebAudio(e,this.attachedElements[0]):e||this.disconnectWebAudio()}setWebAudioPlugins(e){this.webAudioPluginNodes=e,this.attachedElements.length>0&&this.audioContext&&this.connectWebAudio(this.audioContext,this.attachedElements[0])}connectWebAudio(e,A){this.disconnectWebAudio(),this.sourceNode=e.createMediaStreamSource(A.srcObject);let n=this.sourceNode;this.webAudioPluginNodes.forEach(i=>{n.connect(i),n=i}),this.gainNode=e.createGain(),n.connect(this.gainNode),this.gainNode.connect(e.destination),this.elementVolume&&this.gainNode.gain.setTargetAtTime(this.elementVolume,0,.1),e.state!=="running"&&e.resume().then(()=>{e.state!=="running"&&this.emit(k.AudioPlaybackFailed,new Error("Audio Context couldn't be started automatically"))}).catch(i=>{this.emit(k.AudioPlaybackFailed,i)})}disconnectWebAudio(){var e,A;(e=this.gainNode)===null||e===void 0||e.disconnect(),(A=this.sourceNode)===null||A===void 0||A.disconnect(),this.gainNode=void 0,this.sourceNode=void 0}getReceiverStats(){return m(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let A;return e.forEach(n=>{n.type==="inbound-rtp"&&(A={type:"audio",streamId:n.id,timestamp:n.timestamp,jitter:n.jitter,bytesReceived:n.bytesReceived,concealedSamples:n.concealedSamples,concealmentEvents:n.concealmentEvents,silentConcealedSamples:n.silentConcealedSamples,silentConcealmentEvents:n.silentConcealmentEvents,totalAudioEnergy:n.totalAudioEnergy,totalSamplesDuration:n.totalSamplesDuration})}),A})}}const lo=100;class pm extends fu{constructor(e,A,n,i,r){super(e,A,E.Kind.Video,n,r),this.elementInfos=[],this.monitorReceiver=()=>m(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const s=yield this.getReceiverStats();s&&this.prevStats&&this.receiver&&(this._currentBitrate=Pi(s,this.prevStats)),this.prevStats=s}),this.debouncedHandleResize=eo(()=>{this.updateDimensions()},lo),this.adaptiveStreamSettings=i}get isAdaptiveStream(){return this.adaptiveStreamSettings!==void 0}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(e){super.setMuted(e),this.attachedElements.forEach(A=>{e?jt(this._mediaStreamTrack,A):Gt(this._mediaStreamTrack,A)})}attach(e){if(e?super.attach(e):e=super.attach(),this.adaptiveStreamSettings&&this.elementInfos.find(A=>A.element===e)===void 0){const A=new mm(e);this.observeElementInfo(A)}return e}observeElementInfo(e){this.adaptiveStreamSettings&&this.elementInfos.find(A=>A===e)===void 0?(e.handleResize=()=>{this.debouncedHandleResize()},e.handleVisibilityChanged=()=>{this.updateVisibility()},this.elementInfos.push(e),e.observe(),this.debouncedHandleResize(),this.updateVisibility()):this.log.warn("visibility resize observer not triggered",this.logContext)}stopObservingElementInfo(e){if(!this.isAdaptiveStream){this.log.warn("stopObservingElementInfo ignored",this.logContext);return}const A=this.elementInfos.filter(n=>n===e);for(const n of A)n.stopObserving();this.elementInfos=this.elementInfos.filter(n=>n!==e),this.updateVisibility(),this.debouncedHandleResize()}detach(e){let A=[];if(e)return this.stopObservingElement(e),super.detach(e);A=super.detach();for(const n of A)this.stopObservingElement(n);return A}getDecoderImplementation(){var e;return(e=this.prevStats)===null||e===void 0?void 0:e.decoderImplementation}getReceiverStats(){return m(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let A,n="",i=new Map;return e.forEach(r=>{r.type==="inbound-rtp"?(n=r.codecId,A={type:"video",streamId:r.id,framesDecoded:r.framesDecoded,framesDropped:r.framesDropped,framesReceived:r.framesReceived,packetsReceived:r.packetsReceived,packetsLost:r.packetsLost,frameWidth:r.frameWidth,frameHeight:r.frameHeight,pliCount:r.pliCount,firCount:r.firCount,nackCount:r.nackCount,jitter:r.jitter,timestamp:r.timestamp,bytesReceived:r.bytesReceived,decoderImplementation:r.decoderImplementation}):r.type==="codec"&&i.set(r.id,r)}),A&&n!==""&&i.get(n)&&(A.mimeType=i.get(n).mimeType),A})}stopObservingElement(e){const A=this.elementInfos.filter(n=>n.element===e);for(const n of A)this.stopObservingElementInfo(n)}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return m(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),this.isAdaptiveStream&&this.updateVisibility()})}updateVisibility(){var e,A;const n=this.elementInfos.reduce((o,a)=>Math.max(o,a.visibilityChangedAt||0),0),i=!((A=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pauseVideoInBackground)!==null&&A!==void 0)||A?this.isInBackground:!1,r=this.elementInfos.some(o=>o.pictureInPicture),s=this.elementInfos.some(o=>o.visible)&&!i||r;if(this.lastVisible!==s){if(!s&&Date.now()-n<lo){ye.setTimeout(()=>{this.updateVisibility()},lo);return}this.lastVisible=s,this.emit(k.VisibilityChanged,s,this)}}updateDimensions(){var e,A;let n=0,i=0;const r=this.getPixelDensity();for(const s of this.elementInfos){const o=s.width()*r,a=s.height()*r;o+a>n+i&&(n=o,i=a)}((e=this.lastDimensions)===null||e===void 0?void 0:e.width)===n&&((A=this.lastDimensions)===null||A===void 0?void 0:A.height)===i||(this.lastDimensions={width:n,height:i},this.emit(k.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var e;const A=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pixelDensity;return A==="screen"?Ll():A||(Ll()>2?2:1)}}class mm{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(e,A){this.onVisibilityChanged=n=>{var i;const{target:r,isIntersecting:s}=n;r===this.element&&(this.isIntersecting=s,this.isPiP=En(this.element),this.visibilityChangedAt=Date.now(),(i=this.handleVisibilityChanged)===null||i===void 0||i.call(this))},this.onEnterPiP=()=>{var n,i,r;(i=(n=window.documentPictureInPicture)===null||n===void 0?void 0:n.window)===null||i===void 0||i.addEventListener("pagehide",this.onLeavePiP),this.isPiP=En(this.element),(r=this.handleVisibilityChanged)===null||r===void 0||r.call(this)},this.onLeavePiP=()=>{var n;this.isPiP=En(this.element),(n=this.handleVisibilityChanged)===null||n===void 0||n.call(this)},this.element=e,this.isIntersecting=A??uo(e),this.isPiP=Me()&&En(e),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var e,A,n;this.isIntersecting=uo(this.element),this.isPiP=En(this.element),this.element.handleResize=()=>{var i;(i=this.handleResize)===null||i===void 0||i.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,_l().observe(this.element),Dl().observe(this.element),this.element.addEventListener("enterpictureinpicture",this.onEnterPiP),this.element.addEventListener("leavepictureinpicture",this.onLeavePiP),(e=window.documentPictureInPicture)===null||e===void 0||e.addEventListener("enter",this.onEnterPiP),(n=(A=window.documentPictureInPicture)===null||A===void 0?void 0:A.window)===null||n===void 0||n.addEventListener("pagehide",this.onLeavePiP)}stopObserving(){var e,A,n,i,r;(e=_l())===null||e===void 0||e.unobserve(this.element),(A=Dl())===null||A===void 0||A.unobserve(this.element),this.element.removeEventListener("enterpictureinpicture",this.onEnterPiP),this.element.removeEventListener("leavepictureinpicture",this.onLeavePiP),(n=window.documentPictureInPicture)===null||n===void 0||n.removeEventListener("enter",this.onEnterPiP),(r=(i=window.documentPictureInPicture)===null||i===void 0?void 0:i.window)===null||r===void 0||r.removeEventListener("pagehide",this.onLeavePiP)}}function En(t){var e,A;return document.pictureInPictureElement===t?!0:!((e=window.documentPictureInPicture)===null||e===void 0)&&e.window?uo(t,(A=window.documentPictureInPicture)===null||A===void 0?void 0:A.window):!1}function uo(t,e){const A=e||window;let n=t.offsetTop,i=t.offsetLeft;const r=t.offsetWidth,s=t.offsetHeight,{hidden:o}=t,{display:a}=getComputedStyle(t);for(;t.offsetParent;)t=t.offsetParent,n+=t.offsetTop,i+=t.offsetLeft;return n<A.pageYOffset+A.innerHeight&&i<A.pageXOffset+A.innerWidth&&n+s>A.pageYOffset&&i+r>A.pageXOffset&&!o&&a!=="none"}class IA extends mA.EventEmitter{constructor(e,A,n,i){var r;super(),this.metadataMuted=!1,this.encryption=je.NONE,this.log=K,this.handleMuted=()=>{this.emit(k.Muted)},this.handleUnmuted=()=>{this.emit(k.Unmuted)},this.log=TA((r=i==null?void 0:i.loggerName)!==null&&r!==void 0?r:sA.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=e,this.trackSid=A,this.trackName=n,this.source=E.Source.Unknown}setTrack(e){this.track&&(this.track.off(k.Muted,this.handleMuted),this.track.off(k.Unmuted,this.handleUnmuted)),this.track=e,e&&(e.on(k.Muted,this.handleMuted),e.on(k.Unmuted,this.handleUnmuted))}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),X(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return this.track!==void 0}get isEncrypted(){return this.encryption!==je.NONE}get audioTrack(){if(kA(this.track))return this.track}get videoTrack(){if(Xt(this.track))return this.track}updateInfo(e){this.trackSid=e.sid,this.trackName=e.name,this.source=E.sourceFromProto(e.source),this.mimeType=e.mimeType,this.kind===E.Kind.Video&&e.width>0&&(this.dimensions={width:e.width,height:e.height},this.simulcasted=e.simulcast),this.encryption=e.encryption,this.trackInfo=e,this.log.debug("update publication info",Object.assign(Object.assign({},this.logContext),{info:e}))}}(function(t){(function(e){e.Desired="desired",e.Subscribed="subscribed",e.Unsubscribed="unsubscribed"})(t.SubscriptionStatus||(t.SubscriptionStatus={})),function(e){e.Allowed="allowed",e.NotAllowed="not_allowed"}(t.PermissionStatus||(t.PermissionStatus={}))})(IA||(IA={}));class ho extends IA{get isUpstreamPaused(){var e;return(e=this.track)===null||e===void 0?void 0:e.isUpstreamPaused}constructor(e,A,n,i){super(e,A.sid,A.name,i),this.track=void 0,this.handleTrackEnded=()=>{this.emit(k.Ended)},this.updateInfo(A),this.setTrack(n)}setTrack(e){this.track&&this.track.off(k.Ended,this.handleTrackEnded),super.setTrack(e),e&&e.on(k.Ended,this.handleTrackEnded)}get isMuted(){return this.track?this.track.isMuted:super.isMuted}get audioTrack(){return super.audioTrack}get videoTrack(){return super.videoTrack}get isLocal(){return!0}mute(){return m(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.mute()})}unmute(){return m(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.unmute()})}pauseUpstream(){return m(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.pauseUpstream()})}resumeUpstream(){return m(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.resumeUpstream()})}getTrackFeatures(){var e;if(kA(this.track)){const A=this.track.getSourceTrackSettings(),n=new Set;return A.autoGainControl&&n.add(iA.TF_AUTO_GAIN_CONTROL),A.echoCancellation&&n.add(iA.TF_ECHO_CANCELLATION),A.noiseSuppression&&n.add(iA.TF_NOISE_SUPPRESSION),A.channelCount&&A.channelCount>1&&n.add(iA.TF_STEREO),!((e=this.options)===null||e===void 0)&&e.dtx||n.add(iA.TF_NO_DTX),this.track.enhancedNoiseCancellation&&n.add(iA.TF_ENHANCED_NOISE_CANCELLATION),Array.from(n.values())}else return[]}}function Hi(t,e){return m(this,void 0,void 0,function*(){t??(t={});let A=!1;const{audioProcessor:n,videoProcessor:i,optionsWithoutProcessor:r}=Gl(t);let s=r.audio,o=r.video;if(n&&typeof r.audio=="object"&&(r.audio.processor=n),i&&typeof r.video=="object"&&(r.video.processor=i),t.audio&&typeof r.audio=="object"&&typeof r.audio.deviceId=="string"){const u=r.audio.deviceId;r.audio.deviceId={exact:u},A=!0,s=Object.assign(Object.assign({},r.audio),{deviceId:{ideal:u}})}if(r.video&&typeof r.video=="object"&&typeof r.video.deviceId=="string"){const u=r.video.deviceId;r.video.deviceId={exact:u},A=!0,o=Object.assign(Object.assign({},r.video),{deviceId:{ideal:u}})}(r.audio===!0||typeof r.audio=="object"&&!r.audio.deviceId)&&(r.audio={deviceId:"default"}),r.video===!0?r.video={deviceId:"default"}:typeof r.video=="object"&&!r.video.deviceId&&(r.video.deviceId="default");const a=Ml(r,eu,Au),c=Js(a),l=navigator.mediaDevices.getUserMedia(c);r.audio&&(Ce.userMediaPromiseMap.set("audioinput",l),l.catch(()=>Ce.userMediaPromiseMap.delete("audioinput"))),r.video&&(Ce.userMediaPromiseMap.set("videoinput",l),l.catch(()=>Ce.userMediaPromiseMap.delete("videoinput")));try{const u=yield l;return yield Promise.all(u.getTracks().map(d=>m(this,void 0,void 0,function*(){const h=d.kind==="audio";let g=h?a.audio:a.video;(typeof g=="boolean"||!g)&&(g={});let f;const p=h?c.audio:c.video;typeof p!="boolean"&&(f=p);const B=d.getSettings().deviceId;f!=null&&f.deviceId&&WA(f.deviceId)!==B?f.deviceId=B:f||(f={deviceId:B});const y=Xp(d,f,e);return y.kind===E.Kind.Video?y.source=E.Source.Camera:y.kind===E.Kind.Audio&&(y.source=E.Source.Microphone),y.mediaStream=u,kA(y)&&n?yield y.setProcessor(n):Xt(y)&&i&&(yield y.setProcessor(i)),y})))}catch(u){if(!A)throw u;return Hi(Object.assign(Object.assign({},t),{audio:s,video:o}),e)}})}function Bm(t){return m(this,void 0,void 0,function*(){return(yield Hi({audio:!1,video:t??!0}))[0]})}function vm(t){return m(this,void 0,void 0,function*(){return(yield Hi({audio:t??!0,video:!1}))[0]})}var $A;(function(t){t.Excellent="excellent",t.Good="good",t.Poor="poor",t.Lost="lost",t.Unknown="unknown"})($A||($A={}));function Cm(t){switch(t){case Bn.EXCELLENT:return $A.Excellent;case Bn.GOOD:return $A.Good;case Bn.POOR:return $A.Poor;case Bn.LOST:return $A.Lost;default:return $A.Unknown}}class gu extends mA.EventEmitter{get logContext(){var e,A;return Object.assign({},(A=(e=this.loggerOptions)===null||e===void 0?void 0:e.loggerContextCb)===null||A===void 0?void 0:A.call(e))}get isEncrypted(){return this.trackPublications.size>0&&Array.from(this.trackPublications.values()).every(e=>e.isEncrypted)}get isAgent(){var e;return((e=this.permissions)===null||e===void 0?void 0:e.agent)||this.kind===pi.AGENT}get isActive(){var e;return((e=this.participantInfo)===null||e===void 0?void 0:e.state)===Mt.ACTIVE}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(e,A,n,i,r,s){let o=arguments.length>6&&arguments[6]!==void 0?arguments[6]:pi.STANDARD;var a;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=$A.Unknown,this.log=K,this.log=TA((a=s==null?void 0:s.loggerName)!==null&&a!==void 0?a:sA.Participant),this.loggerOptions=s,this.setMaxListeners(100),this.sid=e,this.identity=A,this.name=n,this.metadata=i,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this._kind=o,this._attributes=r??{}}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(e){for(const[,A]of this.trackPublications)if(A.source===e)return A}getTrackPublicationByName(e){for(const[,A]of this.trackPublications)if(A.trackName===e)return A}waitUntilActive(){return this.isActive?Promise.resolve():this.activeFuture?this.activeFuture.promise:(this.activeFuture=new Ks,this.once(x.Active,()=>{var e,A;(A=(e=this.activeFuture)===null||e===void 0?void 0:e.resolve)===null||A===void 0||A.call(e),this.activeFuture=void 0}),this.activeFuture.promise)}get connectionQuality(){return this._connectionQuality}get isCameraEnabled(){var e;const A=this.getTrackPublication(E.Source.Camera);return!(!((e=A==null?void 0:A.isMuted)!==null&&e!==void 0)||e)}get isMicrophoneEnabled(){var e;const A=this.getTrackPublication(E.Source.Microphone);return!(!((e=A==null?void 0:A.isMuted)!==null&&e!==void 0)||e)}get isScreenShareEnabled(){return!!this.getTrackPublication(E.Source.ScreenShare)}get isLocal(){return!1}get joinedAt(){return this.participantInfo?new Date(Number.parseInt(this.participantInfo.joinedAt.toString())*1e3):new Date}updateInfo(e){var A;return this.participantInfo&&this.participantInfo.sid===e.sid&&this.participantInfo.version>e.version?!1:(this.identity=e.identity,this.sid=e.sid,this._setName(e.name),this._setMetadata(e.metadata),this._setAttributes(e.attributes),e.state===Mt.ACTIVE&&((A=this.participantInfo)===null||A===void 0?void 0:A.state)!==Mt.ACTIVE&&this.emit(x.Active),e.permission&&this.setPermissions(e.permission),this.participantInfo=e,!0)}_setMetadata(e){const A=this.metadata!==e,n=this.metadata;this.metadata=e,A&&this.emit(x.ParticipantMetadataChanged,n)}_setName(e){const A=this.name!==e;this.name=e,A&&this.emit(x.ParticipantNameChanged,e)}_setAttributes(e){const A=Tp(this.attributes,e);this._attributes=e,Object.keys(A).length>0&&this.emit(x.AttributesChanged,A)}setPermissions(e){var A,n,i,r,s,o;const a=this.permissions,c=e.canPublish!==((A=this.permissions)===null||A===void 0?void 0:A.canPublish)||e.canSubscribe!==((n=this.permissions)===null||n===void 0?void 0:n.canSubscribe)||e.canPublishData!==((i=this.permissions)===null||i===void 0?void 0:i.canPublishData)||e.hidden!==((r=this.permissions)===null||r===void 0?void 0:r.hidden)||e.recorder!==((s=this.permissions)===null||s===void 0?void 0:s.recorder)||e.canPublishSources.length!==this.permissions.canPublishSources.length||e.canPublishSources.some((l,u)=>{var d;return l!==((d=this.permissions)===null||d===void 0?void 0:d.canPublishSources[u])})||e.canSubscribeMetrics!==((o=this.permissions)===null||o===void 0?void 0:o.canSubscribeMetrics);return this.permissions=e,c&&this.emit(x.ParticipantPermissionsChanged,a),c}setIsSpeaking(e){e!==this.isSpeaking&&(this.isSpeaking=e,e&&(this.lastSpokeAt=new Date),this.emit(x.IsSpeakingChanged,e))}setConnectionQuality(e){const A=this._connectionQuality;this._connectionQuality=Cm(e),A!==this._connectionQuality&&this.emit(x.ConnectionQualityChanged,this._connectionQuality)}setDisconnected(){var e,A;this.activeFuture&&((A=(e=this.activeFuture).reject)===null||A===void 0||A.call(e,new Error("Participant disconnected")),this.activeFuture=void 0)}setAudioContext(e){this.audioContext=e,this.audioTrackPublications.forEach(A=>kA(A.track)&&A.track.setAudioContext(e))}addTrackPublication(e){e.on(k.Muted,()=>{this.emit(x.TrackMuted,e)}),e.on(k.Unmuted,()=>{this.emit(x.TrackUnmuted,e)});const A=e;switch(A.track&&(A.track.sid=e.trackSid),this.trackPublications.set(e.trackSid,e),e.kind){case E.Kind.Audio:this.audioTrackPublications.set(e.trackSid,e);break;case E.Kind.Video:this.videoTrackPublications.set(e.trackSid,e);break}}}function wm(t){var e,A,n;if(!t.participantSid&&!t.participantIdentity)throw new Error("Invalid track permission, must provide at least one of participantIdentity and participantSid");return new xc({participantIdentity:(e=t.participantIdentity)!==null&&e!==void 0?e:"",participantSid:(A=t.participantSid)!==null&&A!==void 0?A:"",allTracks:(n=t.allowAll)!==null&&n!==void 0?n:!1,trackSids:t.allowedTrackSids||[]})}const pu=15e3;class ym extends gu{constructor(e,A,n,i,r){super(e,A,void 0,void 0,void 0,{loggerName:i.loggerName,loggerContextCb:()=>this.engine.logContext}),this.pendingPublishing=new Set,this.pendingPublishPromises=new Map,this.participantTrackPermissions=[],this.allParticipantsAllowedToSubscribe=!0,this.encryptionType=je.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new Ks)},this.handleReconnected=()=>{var s,o;(o=(s=this.reconnectFuture)===null||s===void 0?void 0:s.resolve)===null||o===void 0||o.call(s),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleDisconnected=()=>{var s,o;this.reconnectFuture&&(this.reconnectFuture.promise.catch(a=>this.log.warn(a.message,this.logContext)),(o=(s=this.reconnectFuture)===null||s===void 0?void 0:s.reject)===null||o===void 0||o.call(s,"Got disconnected during reconnection attempt"),this.reconnectFuture=void 0)},this.handleSignalRequestResponse=s=>{const{requestId:o,reason:a,message:c}=s,l=this.pendingSignalRequests.get(o);l&&(a!==ps.OK&&l.reject(new Tl(c,a)),this.pendingSignalRequests.delete(o))},this.handleDataPacket=s=>{switch(s.value.case){case"rpcResponse":let o=s.value.value,a=null,c=null;o.value.case==="payload"?a=o.value.value:o.value.case==="error"&&(c=le.fromProto(o.value.value)),this.handleIncomingRpcResponse(o.requestId,a,c);break;case"rpcAck":let l=s.value.value;this.handleIncomingRpcAck(l.requestId);break}},this.updateTrackSubscriptionPermissions=()=>{this.log.debug("updating track subscription permissions",Object.assign(Object.assign({},this.logContext),{allParticipantsAllowed:this.allParticipantsAllowedToSubscribe,participantTrackPermissions:this.participantTrackPermissions})),this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe,this.participantTrackPermissions.map(s=>wm(s)))},this.onTrackUnmuted=s=>{this.onTrackMuted(s,s.isUpstreamPaused)},this.onTrackMuted=(s,o)=>{if(o===void 0&&(o=!0),!s.sid){this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),X(s)));return}this.engine.updateMuteStatus(s.sid,o)},this.onTrackUpstreamPaused=s=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),X(s))),this.onTrackMuted(s,!0)},this.onTrackUpstreamResumed=s=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),X(s))),this.onTrackMuted(s,s.isMuted)},this.onTrackFeatureUpdate=s=>{const o=this.audioTrackPublications.get(s.sid);if(!o){this.log.warn("Could not update local audio track settings, missing publication for track ".concat(s.sid),this.logContext);return}this.engine.client.sendUpdateLocalAudioTrack(o.trackSid,o.getTrackFeatures())},this.handleSubscribedQualityUpdate=s=>m(this,void 0,void 0,function*(){var o,a,c,l,u,d;if(!(!((u=this.roomOptions)===null||u===void 0)&&u.dynacast))return;const h=this.videoTrackPublications.get(s.trackSid);if(!h){this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:s.trackSid}));return}if(s.subscribedCodecs.length>0){if(!h.videoTrack)return;const B=yield h.videoTrack.setPublishingCodecs(s.subscribedCodecs);try{for(var g=!0,f=NA(B),p;p=yield f.next(),o=p.done,!o;g=!0){l=p.value,g=!1;const y=l;sp(y)&&(this.log.debug("publish ".concat(y," for ").concat(h.videoTrack.sid),Object.assign(Object.assign({},this.logContext),X(h))),yield this.publishAdditionalCodecForTrack(h.videoTrack,y,h.options))}}catch(y){a={error:y}}finally{try{!g&&!o&&(c=f.return)&&(yield c.call(f))}finally{if(a)throw a.error}}}else s.subscribedQualities.length>0&&(yield(d=h.videoTrack)===null||d===void 0?void 0:d.setPublishingLayers(s.subscribedQualities))}),this.handleLocalTrackUnpublished=s=>{const o=this.trackPublications.get(s.trackSid);if(!o){this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:s.trackSid}));return}this.unpublishTrack(o.track)},this.handleTrackEnded=s=>m(this,void 0,void 0,function*(){if(s.source===E.Source.ScreenShare||s.source===E.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),X(s))),this.unpublishTrack(s);else if(s.isUserProvided)yield s.mute();else if(yt(s)||JA(s))try{if(Me())try{const o=yield navigator==null?void 0:navigator.permissions.query({name:s.source===E.Source.Camera?"camera":"microphone"});if(o&&o.state==="denied")throw this.log.warn("user has revoked access to ".concat(s.source),Object.assign(Object.assign({},this.logContext),X(s))),o.onchange=()=>{o.state!=="denied"&&(s.isMuted||s.restartTrack(),o.onchange=null)},new Error("GetUserMedia Permission denied")}catch{}s.isMuted||(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),X(s))),yt(s)?yield s.restartTrack({deviceId:"default"}):yield s.restartTrack())}catch{this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),X(s))),yield s.mute()}}),this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this.engine=n,this.roomOptions=i,this.setupEngine(n),this.activeDeviceMap=new Map([["audioinput","default"],["videoinput","default"],["audiooutput","default"]]),this.pendingSignalRequests=new Map,this.rpcHandlers=r}get lastCameraError(){return this.cameraError}get lastMicrophoneError(){return this.microphoneError}get isE2EEEnabled(){return this.encryptionType!==je.NONE}getTrackPublication(e){const A=super.getTrackPublication(e);if(A)return A}getTrackPublicationByName(e){const A=super.getTrackPublicationByName(e);if(A)return A}setupEngine(e){this.engine=e,this.engine.on(I.RemoteMute,(A,n)=>{const i=this.trackPublications.get(A);!i||!i.track||(n?i.mute():i.unmute())}),this.engine.on(I.Connected,this.handleReconnected).on(I.SignalRestarted,this.handleReconnected).on(I.SignalResumed,this.handleReconnected).on(I.Restarting,this.handleReconnecting).on(I.Resuming,this.handleReconnecting).on(I.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(I.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(I.Disconnected,this.handleDisconnected).on(I.SignalRequestResponse,this.handleSignalRequestResponse).on(I.DataPacketReceived,this.handleDataPacket)}setMetadata(e){return m(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({metadata:e})})}setName(e){return m(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({name:e})})}setAttributes(e){return m(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({attributes:e})})}requestMetadataUpdate(e){return m(this,arguments,void 0,function(A){var n=this;let{metadata:i,name:r,attributes:s}=A;return function*(){return new Promise((o,a)=>m(n,void 0,void 0,function*(){var c,l;try{let u=!1;const d=yield this.engine.client.sendUpdateLocalMetadata((c=i??this.metadata)!==null&&c!==void 0?c:"",(l=r??this.name)!==null&&l!==void 0?l:"",s),h=performance.now();for(this.pendingSignalRequests.set(d,{resolve:o,reject:g=>{a(g),u=!0},values:{name:r,metadata:i,attributes:s}});performance.now()-h<5e3&&!u;){if((!r||this.name===r)&&(!i||this.metadata===i)&&(!s||Object.entries(s).every(g=>{let[f,p]=g;return this.attributes[f]===p||p===""&&!this.attributes[f]}))){this.pendingSignalRequests.delete(d),o();return}yield Oe(50)}a(new Tl("Request to update local metadata timed out","TimeoutError"))}catch(u){u instanceof Error&&a(u)}}))}()})}setCameraEnabled(e,A,n){return this.setTrackEnabled(E.Source.Camera,e,A,n)}setMicrophoneEnabled(e,A,n){return this.setTrackEnabled(E.Source.Microphone,e,A,n)}setScreenShareEnabled(e,A,n){return this.setTrackEnabled(E.Source.ScreenShare,e,A,n)}setPermissions(e){const A=this.permissions,n=super.setPermissions(e);return n&&A&&this.emit(x.ParticipantPermissionsChanged,A),n}setE2EEEnabled(e){return m(this,void 0,void 0,function*(){this.encryptionType=e?je.GCM:je.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(e,A,n,i){return m(this,void 0,void 0,function*(){var r,s;this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:e,enabled:A})),this.republishPromise&&(yield this.republishPromise);let o=this.getTrackPublication(e);if(A)if(o)yield o.unmute();else{let a;if(this.pendingPublishing.has(e)){const c=yield this.waitForPendingPublicationOfSource(e);return c||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e})),yield c==null?void 0:c.unmute(),c}this.pendingPublishing.add(e);try{switch(e){case E.Source.Camera:a=yield this.createTracks({video:(r=n)!==null&&r!==void 0?r:!0});break;case E.Source.Microphone:a=yield this.createTracks({audio:(s=n)!==null&&s!==void 0?s:!0});break;case E.Source.ScreenShare:a=yield this.createScreenTracks(Object.assign({},n));break;default:throw new FA(e)}}catch(c){throw a==null||a.forEach(l=>{l.stop()}),c instanceof Error&&this.emit(x.MediaDevicesError,c),this.pendingPublishing.delete(e),c}try{const c=[];for(const u of a)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),X(u))),c.push(this.publishTrack(u,i));[o]=yield Promise.all(c)}catch(c){throw a==null||a.forEach(l=>{l.stop()}),c}finally{this.pendingPublishing.delete(e)}}else if(!(o!=null&&o.track)&&this.pendingPublishing.has(e)&&(o=yield this.waitForPendingPublicationOfSource(e),o||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e}))),o&&o.track)if(e===E.Source.ScreenShare){o=yield this.unpublishTrack(o.track);const a=this.getTrackPublication(E.Source.ScreenShareAudio);a&&a.track&&this.unpublishTrack(a.track)}else yield o.mute();return o})}enableCameraAndMicrophone(){return m(this,void 0,void 0,function*(){if(!(this.pendingPublishing.has(E.Source.Camera)||this.pendingPublishing.has(E.Source.Microphone))){this.pendingPublishing.add(E.Source.Camera),this.pendingPublishing.add(E.Source.Microphone);try{const e=yield this.createTracks({audio:!0,video:!0});yield Promise.all(e.map(A=>this.publishTrack(A)))}finally{this.pendingPublishing.delete(E.Source.Camera),this.pendingPublishing.delete(E.Source.Microphone)}}})}createTracks(e){return m(this,void 0,void 0,function*(){var A,n;e??(e={});const i=Ml(e,(A=this.roomOptions)===null||A===void 0?void 0:A.audioCaptureDefaults,(n=this.roomOptions)===null||n===void 0?void 0:n.videoCaptureDefaults);try{return(yield Hi(i,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext})).map(o=>(kA(o)&&(this.microphoneError=void 0,o.setAudioContext(this.audioContext),o.source=E.Source.Microphone,this.emit(x.AudioStreamAcquired)),Xt(o)&&(this.cameraError=void 0,o.source=E.Source.Camera),o))}catch(r){throw r instanceof Error&&(e.audio&&(this.microphoneError=r),e.video&&(this.cameraError=r)),r}})}createScreenTracks(e){return m(this,void 0,void 0,function*(){if(e===void 0&&(e={}),navigator.mediaDevices.getDisplayMedia===void 0)throw new Ss("getDisplayMedia not supported");e.resolution===void 0&&!dp()&&(e.resolution=Ps.h1080fps30.resolution);const A=Qp(e),n=yield navigator.mediaDevices.getDisplayMedia(A),i=n.getVideoTracks();if(i.length===0)throw new FA("no video track found");const r=new _i(i[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});r.source=E.Source.ScreenShare,e.contentHint&&(r.mediaStreamTrack.contentHint=e.contentHint);const s=[r];if(n.getAudioTracks().length>0){this.emit(x.AudioStreamAcquired);const o=new Li(n.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});o.source=E.Source.ScreenShareAudio,s.push(o)}return s})}publishTrack(e,A){return m(this,void 0,void 0,function*(){return this.publishOrRepublishTrack(e,A)})}publishOrRepublishTrack(e,A){return m(this,arguments,void 0,function(n,i){var r=this;let s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return function*(){var o,a,c,l;yt(n)&&n.setAudioContext(r.audioContext),yield(o=r.reconnectFuture)===null||o===void 0?void 0:o.promise,r.republishPromise&&!s&&(yield r.republishPromise),Jt(n)&&r.pendingPublishPromises.has(n)&&(yield r.pendingPublishPromises.get(n));let u;if(n instanceof MediaStreamTrack)u=n.getConstraints();else{u=n.constraints;let B;switch(n.source){case E.Source.Microphone:B="audioinput";break;case E.Source.Camera:B="videoinput"}B&&r.activeDeviceMap.has(B)&&(u=Object.assign(Object.assign({},u),{deviceId:r.activeDeviceMap.get(B)}))}if(n instanceof MediaStreamTrack)switch(n.kind){case"audio":n=new Li(n,u,!0,r.audioContext,{loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});break;case"video":n=new _i(n,u,!0,{loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});break;default:throw new FA("unsupported MediaStreamTrack kind ".concat(n.kind))}else n.updateLoggerOptions({loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});let d;if(r.trackPublications.forEach(B=>{B.track&&B.track===n&&(d=B)}),d)return r.log.warn("track has already been published, skipping",Object.assign(Object.assign({},r.logContext),X(d))),d;const h="channelCount"in n.mediaStreamTrack.getSettings()&&n.mediaStreamTrack.getSettings().channelCount===2||n.mediaStreamTrack.getConstraints().channelCount===2,g=(a=i==null?void 0:i.forceStereo)!==null&&a!==void 0?a:h;g&&(i||(i={}),i.dtx===void 0&&r.log.info("Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.",Object.assign(Object.assign({},r.logContext),X(n))),i.red===void 0&&r.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),(c=i.dtx)!==null&&c!==void 0||(i.dtx=!1),(l=i.red)!==null&&l!==void 0||(i.red=!1));const f=Object.assign(Object.assign({},r.roomOptions.publishDefaults),i);!hp()&&r.roomOptions.e2ee&&(r.log.info("End-to-end encryption is set up, simulcast publishing will be disabled on Safari versions and iOS browsers running iOS < v17.2",Object.assign({},r.logContext)),f.simulcast=!1),f.source&&(n.source=f.source);const p=new Promise((B,y)=>m(r,void 0,void 0,function*(){try{if(this.engine.client.currentState!==Ae.CONNECTED){this.log.debug("deferring track publication until signal is connected",Object.assign(Object.assign({},this.logContext),{track:X(n)}));const b=()=>m(this,void 0,void 0,function*(){try{const v=yield this.publish(n,f,g);B(v)}catch(v){y(v)}});setTimeout(()=>{this.engine.off(I.SignalConnected,b),y(new Fs("publishing rejected as engine not connected within timeout",408))},15e3),this.engine.once(I.SignalConnected,b),this.engine.on(I.Closing,()=>{this.engine.off(I.SignalConnected,b),y(new Fs("publishing rejected as engine closed",499))})}else try{const b=yield this.publish(n,f,g);B(b)}catch(b){y(b)}}catch(b){y(b)}}));r.pendingPublishPromises.set(n,p);try{return yield p}catch(B){throw B}finally{r.pendingPublishPromises.delete(n)}}()})}hasPermissionsToPublish(e){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),X(e))),!1;const{canPublish:A,canPublishSources:n}=this.permissions;return A&&(n.length===0||n.map(i=>Fp(i)).includes(e.source))?!0:(this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),X(e))),!1)}publish(e,A,n){return m(this,void 0,void 0,function*(){var i,r,s,o,a,c,l,u,d,h;if(!this.hasPermissionsToPublish(e))throw new Fs("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find(C=>Jt(e)&&C.source===e.source)&&e.source!==E.Source.Unknown&&this.log.info("publishing a second track with the same source: ".concat(e.source),Object.assign(Object.assign({},this.logContext),X(e))),A.stopMicTrackOnMute&&kA(e)&&(e.stopOnMute=!0),e.source===E.Source.ScreenShare&&Wt()&&(A.simulcast=!1),A.videoCodec==="av1"&&!cp()&&(A.videoCodec=void 0),A.videoCodec==="vp9"&&!lp()&&(A.videoCodec=void 0),A.videoCodec===void 0&&(A.videoCodec=Ao),this.enabledPublishVideoCodecs.length>0&&(this.enabledPublishVideoCodecs.some(C=>A.videoCodec===Ri(C.mime))||(A.videoCodec=Ri(this.enabledPublishVideoCodecs[0].mime)));const f=A.videoCodec;e.on(k.Muted,this.onTrackMuted),e.on(k.Unmuted,this.onTrackUnmuted),e.on(k.Ended,this.handleTrackEnded),e.on(k.UpstreamPaused,this.onTrackUpstreamPaused),e.on(k.UpstreamResumed,this.onTrackUpstreamResumed),e.on(k.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);const p=new us({cid:e.mediaStreamTrack.id,name:A.name,type:E.kindToProto(e.kind),muted:e.isMuted,source:E.sourceToProto(e.source),disableDtx:!(!((i=A.dtx)!==null&&i!==void 0)||i),encryption:this.encryptionType,stereo:n,disableRed:this.isE2EEEnabled||!(!((r=A.red)!==null&&r!==void 0)||r),stream:A==null?void 0:A.stream,backupCodecPolicy:A==null?void 0:A.backupCodecPolicy});let B;if(e.kind===E.Kind.Video){let C={width:0,height:0};try{C=yield e.waitForDimensions()}catch{const Q=(o=(s=this.roomOptions.videoCaptureDefaults)===null||s===void 0?void 0:s.resolution)!==null&&o!==void 0?o:yn.h720.resolution;C={width:Q.width,height:Q.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),X(e)),{dims:C}))}p.width=C.width,p.height=C.height,JA(e)&&(bn(f)&&(e.source===E.Source.ScreenShare&&(A.scalabilityMode="L1T3","contentHint"in e.mediaStreamTrack&&(e.mediaStreamTrack.contentHint="motion",this.log.info("forcing contentHint to motion for screenshare with SVC codecs",Object.assign(Object.assign({},this.logContext),X(e))))),A.scalabilityMode=(a=A.scalabilityMode)!==null&&a!==void 0?a:"L3T3_KEY"),p.simulcastCodecs=[new ls({codec:f,cid:e.mediaStreamTrack.id})],A.backupCodec===!0&&(A.backupCodec={codec:Ao}),A.backupCodec&&f!==A.backupCodec.codec&&p.encryption===je.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),p.simulcastCodecs.push(new ls({codec:A.backupCodec.codec,cid:""})))),B=so(e.source===E.Source.ScreenShare,p.width,p.height,A),p.layers=cu(p.width,p.height,B,bn(A.videoCodec))}else e.kind===E.Kind.Audio&&(B=[{maxBitrate:(c=A.audioPreset)===null||c===void 0?void 0:c.maxBitrate,priority:(u=(l=A.audioPreset)===null||l===void 0?void 0:l.priority)!==null&&u!==void 0?u:"high",networkPriority:(h=(d=A.audioPreset)===null||d===void 0?void 0:d.priority)!==null&&h!==void 0?h:"high"}]);if(!this.engine||this.engine.isClosed)throw new Be("cannot publish track when not connected");const y=()=>m(this,void 0,void 0,function*(){var C,w,Q;if(!this.engine.pcManager)throw new Be("pcManager is not ready");if(e.sender=yield this.engine.createSender(e,A,B),JA(e)&&((C=A.degradationPreference)!==null&&C!==void 0||(A.degradationPreference=im(e)),e.setDegradationPreference(A.degradationPreference)),B)if(Wt()&&e.kind===E.Kind.Audio){let F;for(const R of this.engine.pcManager.publisher.getTransceivers())if(R.sender===e.sender){F=R;break}F&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:F,codec:"opus",maxbr:!((w=B[0])===null||w===void 0)&&w.maxBitrate?B[0].maxBitrate/1e3:0})}else e.codec&&bn(e.codec)&&(!((Q=B[0])===null||Q===void 0)&&Q.maxBitrate)&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:p.cid,codec:e.codec,maxbr:B[0].maxBitrate/1e3});yield this.engine.negotiate()});let b;if(this.enabledPublishVideoCodecs.length>0)b=(yield Promise.all([this.engine.addTrack(p),y()]))[0];else{b=yield this.engine.addTrack(p);let C;if(b.codecs.forEach(w=>{C===void 0&&(C=w.mimeType)}),C&&e.kind===E.Kind.Video){const w=Ri(C);w!==f&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),X(e)),{codec:w})),A.videoCodec=w,B=so(e.source===E.Source.ScreenShare,p.width,p.height,A))}yield y()}const v=new ho(e.kind,b,e,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});return v.options=A,e.sid=b.sid,this.log.debug("publishing ".concat(e.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:B,trackInfo:b})),JA(e)?e.startMonitor(this.engine.client):yt(e)&&e.startMonitor(),this.addTrackPublication(v),this.emit(x.LocalTrackPublished,v),v})}get isLocal(){return!0}publishAdditionalCodecForTrack(e,A,n){return m(this,void 0,void 0,function*(){var i;if(this.encryptionType!==je.NONE)return;let r;if(this.trackPublications.forEach(h=>{h.track&&h.track===e&&(r=h)}),!r)throw new FA("track is not published");if(!JA(e))throw new FA("track is not a video track");const s=Object.assign(Object.assign({},(i=this.roomOptions)===null||i===void 0?void 0:i.publishDefaults),n),o=Am(e,A,s);if(!o){this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),X(e)));return}const a=e.addSimulcastTrack(A,o);if(!a)return;const c=new us({cid:a.mediaStreamTrack.id,type:E.kindToProto(e.kind),muted:e.isMuted,source:E.sourceToProto(e.source),sid:e.sid,simulcastCodecs:[{codec:s.videoCodec,cid:a.mediaStreamTrack.id}]});if(c.layers=cu(c.width,c.height,o),!this.engine||this.engine.isClosed)throw new Be("cannot publish track when not connected");const l=()=>m(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(e,a,s,o),yield this.engine.negotiate()}),d=(yield Promise.all([this.engine.addTrack(c),l()]))[0];this.log.debug("published ".concat(A," for track ").concat(e.sid),Object.assign(Object.assign({},this.logContext),{encodings:o,trackInfo:d}))})}unpublishTrack(e,A){return m(this,void 0,void 0,function*(){var n,i;if(Jt(e)){const c=this.pendingPublishPromises.get(e);c&&(this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),X(e))),yield c)}const r=this.getPublicationForTrack(e),s=r?X(r):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),s)),!r||!r.track){this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),s));return}e=r.track,e.off(k.Muted,this.onTrackMuted),e.off(k.Unmuted,this.onTrackUnmuted),e.off(k.Ended,this.handleTrackEnded),e.off(k.UpstreamPaused,this.onTrackUpstreamPaused),e.off(k.UpstreamResumed,this.onTrackUpstreamResumed),e.off(k.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate),A===void 0&&(A=(i=(n=this.roomOptions)===null||n===void 0?void 0:n.stopLocalTrackOnUnpublish)!==null&&i!==void 0?i:!0),A?e.stop():e.stopMonitor();let o=!1;const a=e.sender;if(e.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentState<ce.FAILED&&a)try{for(const c of this.engine.pcManager.publisher.getTransceivers())c.sender===a&&(c.direction="inactive",o=!0);if(this.engine.removeTrack(a)&&(o=!0),JA(e)){for(const[,c]of e.simulcastCodecs)c.sender&&(this.engine.removeTrack(c.sender)&&(o=!0),c.sender=void 0);e.simulcastCodecs.clear()}}catch(c){this.log.warn("failed to unpublish track",Object.assign(Object.assign(Object.assign({},this.logContext),s),{error:c}))}switch(this.trackPublications.delete(r.trackSid),r.kind){case E.Kind.Audio:this.audioTrackPublications.delete(r.trackSid);break;case E.Kind.Video:this.videoTrackPublications.delete(r.trackSid);break}return this.emit(x.LocalTrackUnpublished,r),r.setTrack(void 0),o&&(yield this.engine.negotiate()),r})}unpublishTracks(e){return m(this,void 0,void 0,function*(){return(yield Promise.all(e.map(n=>this.unpublishTrack(n)))).filter(n=>!!n)})}republishAllTracks(e){return m(this,arguments,void 0,function(A){var n=this;let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return function*(){n.republishPromise&&(yield n.republishPromise),n.republishPromise=new Promise((r,s)=>m(n,void 0,void 0,function*(){try{const o=[];this.trackPublications.forEach(a=>{a.track&&(A&&(a.options=Object.assign(Object.assign({},a.options),A)),o.push(a))}),yield Promise.all(o.map(a=>m(this,void 0,void 0,function*(){const c=a.track;yield this.unpublishTrack(c,!1),i&&!c.isMuted&&c.source!==E.Source.ScreenShare&&c.source!==E.Source.ScreenShareAudio&&(yt(c)||JA(c))&&!c.isUserProvided&&(this.log.debug("restarting existing track",Object.assign(Object.assign({},this.logContext),{track:a.trackSid})),yield c.restartTrack()),yield this.publishOrRepublishTrack(c,a.options,!0)}))),r()}catch(o){s(o)}finally{this.republishPromise=void 0}})),yield n.republishPromise}()})}publishData(e){return m(this,arguments,void 0,function(A){var n=this;let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return function*(){const r=i.reliable?W.RELIABLE:W.LOSSY,s=i.destinationIdentities,o=i.topic,a=new He({kind:r,value:{case:"user",value:new hc({participantIdentity:n.identity,payload:A,destinationIdentities:s,topic:o})}});yield n.engine.sendDataPacket(a,r)}()})}publishDtmf(e,A){return m(this,void 0,void 0,function*(){const n=new He({kind:W.RELIABLE,value:{case:"sipDtmf",value:new fc({code:e,digit:A})}});yield this.engine.sendDataPacket(n,W.RELIABLE)})}sendChatMessage(e,A){return m(this,void 0,void 0,function*(){const n={id:crypto.randomUUID(),message:e,timestamp:Date.now(),attachedFiles:A==null?void 0:A.attachments},i=new He({value:{case:"chatMessage",value:new is(Object.assign(Object.assign({},n),{timestamp:re.parse(n.timestamp)}))}});return yield this.engine.sendDataPacket(i,W.RELIABLE),this.emit(x.ChatMessage,n),n})}editChatMessage(e,A){return m(this,void 0,void 0,function*(){const n=Object.assign(Object.assign({},A),{message:e,editTimestamp:Date.now()}),i=new He({value:{case:"chatMessage",value:new is(Object.assign(Object.assign({},n),{timestamp:re.parse(n.timestamp),editTimestamp:re.parse(n.editTimestamp)}))}});return yield this.engine.sendDataPacket(i,W.RELIABLE),this.emit(x.ChatMessage,n),n})}sendText(e,A){return m(this,void 0,void 0,function*(){var n;const i=crypto.randomUUID(),s=new TextEncoder().encode(e).byteLength,o=(n=A==null?void 0:A.attachments)===null||n===void 0?void 0:n.map(()=>crypto.randomUUID()),a=new Array(o?o.length+1:1).fill(0),c=(u,d)=>{var h;a[d]=u;const g=a.reduce((f,p)=>f+p,0);(h=A==null?void 0:A.onProgress)===null||h===void 0||h.call(A,g)},l=yield this.streamText({streamId:i,totalSize:s,destinationIdentities:A==null?void 0:A.destinationIdentities,topic:A==null?void 0:A.topic,attachedStreamIds:o,attributes:A==null?void 0:A.attributes});return yield l.write(e),c(1,0),yield l.close(),A!=null&&A.attachments&&o&&(yield Promise.all(A.attachments.map((u,d)=>m(this,void 0,void 0,function*(){return this._sendFile(o[d],u,{topic:A.topic,mimeType:u.type,onProgress:h=>{c(h,d+1)}})})))),l.info})}streamText(e){return m(this,void 0,void 0,function*(){var A,n;const i=(A=e==null?void 0:e.streamId)!==null&&A!==void 0?A:crypto.randomUUID(),r={id:i,mimeType:"text/plain",timestamp:Date.now(),topic:(n=e==null?void 0:e.topic)!==null&&n!==void 0?n:"",size:e==null?void 0:e.totalSize,attributes:e==null?void 0:e.attributes},s=new ss({streamId:i,mimeType:r.mimeType,topic:r.topic,timestamp:wt(r.timestamp),totalLength:wt(e==null?void 0:e.totalSize),attributes:r.attributes,contentHeader:{case:"textHeader",value:new Qc({version:e==null?void 0:e.version,attachedStreamIds:e==null?void 0:e.attachedStreamIds,replyToStreamId:e==null?void 0:e.replyToStreamId,operationType:(e==null?void 0:e.type)==="update"?rs.UPDATE:rs.CREATE})}}),o=e==null?void 0:e.destinationIdentities,a=new He({destinationIdentities:o,value:{case:"streamHeader",value:s}});yield this.engine.sendDataPacket(a,W.RELIABLE);let c=0;const l=this,u=new WritableStream({write(g){return m(this,void 0,void 0,function*(){for(const f of bp(g,pu)){yield l.engine.waitForBufferStatusLow(W.RELIABLE);const p=new os({content:f,streamId:i,chunkIndex:wt(c)}),B=new He({destinationIdentities:o,value:{case:"streamChunk",value:p}});yield l.engine.sendDataPacket(B,W.RELIABLE),c+=1}})},close(){return m(this,void 0,void 0,function*(){const g=new as({streamId:i}),f=new He({destinationIdentities:o,value:{case:"streamTrailer",value:g}});yield l.engine.sendDataPacket(f,W.RELIABLE)})},abort(g){console.log("Sink error:",g)}});let d=()=>m(this,void 0,void 0,function*(){yield h.close()});l.engine.once(I.Closing,d);const h=new hm(u,r,()=>this.engine.off(I.Closing,d));return h})}sendFile(e,A){return m(this,void 0,void 0,function*(){const n=crypto.randomUUID();return yield this._sendFile(n,e,A),{id:n}})}_sendFile(e,A,n){return m(this,void 0,void 0,function*(){var i;const r=yield this.streamBytes({streamId:e,totalSize:A.size,name:A.name,mimeType:(i=n==null?void 0:n.mimeType)!==null&&i!==void 0?i:A.type,topic:n==null?void 0:n.topic,destinationIdentities:n==null?void 0:n.destinationIdentities}),s=A.stream().getReader();for(;;){const{done:o,value:a}=yield s.read();if(o)break;yield r.write(a)}return yield r.close(),r.info})}streamBytes(e){return m(this,void 0,void 0,function*(){var A,n,i,r,s;const o=(A=e==null?void 0:e.streamId)!==null&&A!==void 0?A:crypto.randomUUID(),a=e==null?void 0:e.destinationIdentities,c={id:o,mimeType:(n=e==null?void 0:e.mimeType)!==null&&n!==void 0?n:"application/octet-stream",topic:(i=e==null?void 0:e.topic)!==null&&i!==void 0?i:"",timestamp:Date.now(),attributes:e==null?void 0:e.attributes,size:e==null?void 0:e.totalSize,name:(r=e==null?void 0:e.name)!==null&&r!==void 0?r:"unknown"},l=new ss({totalLength:wt((s=c.size)!==null&&s!==void 0?s:0),mimeType:c.mimeType,streamId:o,topic:c.topic,timestamp:wt(Date.now()),attributes:c.attributes,contentHeader:{case:"byteHeader",value:new Ec({name:c.name})}}),u=new He({destinationIdentities:a,value:{case:"streamHeader",value:l}});yield this.engine.sendDataPacket(u,W.RELIABLE);let d=0;const h=new De,g=this.engine,f=this.log,p=new WritableStream({write(y){return m(this,void 0,void 0,function*(){const b=yield h.lock();let v=0;try{for(;v<y.byteLength;){const C=y.slice(v,v+pu);yield g.waitForBufferStatusLow(W.RELIABLE);const w=new He({destinationIdentities:a,value:{case:"streamChunk",value:new os({content:C,streamId:o,chunkIndex:wt(d)})}});yield g.sendDataPacket(w,W.RELIABLE),d+=1,v+=C.byteLength}}finally{b()}})},close(){return m(this,void 0,void 0,function*(){const y=new as({streamId:o}),b=new He({destinationIdentities:a,value:{case:"streamTrailer",value:y}});yield g.sendDataPacket(b,W.RELIABLE)})},abort(y){f.error("Sink error:",y)}});return new fm(p,c)})}performRpc(e){return m(this,arguments,void 0,function(A){var n=this;let{destinationIdentity:i,method:r,payload:s,responseTimeout:o=1e4}=A;return function*(){return new Promise((c,l)=>m(n,void 0,void 0,function*(){var u,d,h,g;if(no(s)>tu){l(le.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));return}if(!((d=(u=this.engine.latestJoinResponse)===null||u===void 0?void 0:u.serverInfo)===null||d===void 0)&&d.version&&Ct((g=(h=this.engine.latestJoinResponse)===null||h===void 0?void 0:h.serverInfo)===null||g===void 0?void 0:g.version,"1.8.0")<0){l(le.builtIn("UNSUPPORTED_SERVER"));return}const f=crypto.randomUUID();yield this.publishRpcRequest(i,f,r,s,o-2e3);const p=setTimeout(()=>{this.pendingAcks.delete(f),l(le.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(f),clearTimeout(B)},2e3);this.pendingAcks.set(f,{resolve:()=>{clearTimeout(p)},participantIdentity:i});const B=setTimeout(()=>{this.pendingResponses.delete(f),l(le.builtIn("RESPONSE_TIMEOUT"))},o);this.pendingResponses.set(f,{resolve:(y,b)=>{clearTimeout(B),this.pendingAcks.has(f)&&(console.warn("RPC response received before ack",f),this.pendingAcks.delete(f),clearTimeout(p)),b?l(b):c(y??"")},participantIdentity:i})}))}()})}registerRpcMethod(e,A){this.rpcHandlers.has(e)&&this.log.warn("you're overriding the RPC handler for method ".concat(e,", in the future this will throw an error")),this.rpcHandlers.set(e,A)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}setTrackSubscriptionPermissions(e){let A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];this.participantTrackPermissions=A,this.allParticipantsAllowedToSubscribe=e,this.engine.client.isDisconnected||this.updateTrackSubscriptionPermissions()}handleIncomingRpcAck(e){const A=this.pendingAcks.get(e);A?(A.resolve(),this.pendingAcks.delete(e)):console.error("Ack received for unexpected RPC request",e)}handleIncomingRpcResponse(e,A,n){const i=this.pendingResponses.get(e);i?(i.resolve(A,n),this.pendingResponses.delete(e)):console.error("Response received for unexpected RPC request",e)}publishRpcRequest(e,A,n,i,r){return m(this,void 0,void 0,function*(){const s=new He({destinationIdentities:[e],kind:W.RELIABLE,value:{case:"rpcRequest",value:new gc({id:A,method:n,payload:i,responseTimeoutMs:r,version:1})}});yield this.engine.sendDataPacket(s,W.RELIABLE)})}handleParticipantDisconnected(e){for(const[A,{participantIdentity:n}]of this.pendingAcks)n===e&&this.pendingAcks.delete(A);for(const[A,{participantIdentity:n,resolve:i}]of this.pendingResponses)n===e&&(i(null,le.builtIn("RECIPIENT_DISCONNECTED")),this.pendingResponses.delete(A))}setEnabledPublishCodecs(e){this.enabledPublishVideoCodecs=e.filter(A=>A.mime.split("/")[0].toLowerCase()==="video")}updateInfo(e){return super.updateInfo(e)?(e.tracks.forEach(A=>{var n,i;const r=this.trackPublications.get(A.sid);if(r){const s=r.isMuted||((i=(n=r.track)===null||n===void 0?void 0:n.isUpstreamPaused)!==null&&i!==void 0?i:!1);s!==A.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),X(r)),{mutedOnServer:s})),this.engine.client.sendMuteTrack(A.sid,s))}}),!0):!1}getPublicationForTrack(e){let A;return this.trackPublications.forEach(n=>{const i=n.track;i&&(e instanceof MediaStreamTrack?(yt(i)||JA(i))&&i.mediaStreamTrack===e&&(A=n):e===i&&(A=n))}),A}waitForPendingPublicationOfSource(e){return m(this,void 0,void 0,function*(){const n=Date.now();for(;Date.now()<n+1e4;){const i=Array.from(this.pendingPublishPromises.entries()).find(r=>{let[s]=r;return s.source===e});if(i)return i[1];yield Oe(20)}})}}class bm extends IA{constructor(e,A,n,i){super(e,A.sid,A.name,i),this.track=void 0,this.allowed=!0,this.disabled=!1,this.currentVideoQuality=$e.HIGH,this.handleEnded=r=>{this.setTrack(void 0),this.emit(k.Ended,r)},this.handleVisibilityChange=r=>{this.log.debug("adaptivestream video visibility ".concat(this.trackSid,", visible=").concat(r),this.logContext),this.disabled=!r,this.emitTrackUpdate()},this.handleVideoDimensionsChange=r=>{this.log.debug("adaptivestream video dimensions ".concat(r.width,"x").concat(r.height),this.logContext),this.videoDimensions=r,this.emitTrackUpdate()},this.subscribed=n,this.updateInfo(A)}setSubscribed(e){const A=this.subscriptionStatus,n=this.permissionStatus;this.subscribed=e,e&&(this.allowed=!0);const i=new mi({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new vc({participantSid:"",trackSids:[this.trackSid]})]});this.emit(k.UpdateSubscription,i),this.emitSubscriptionUpdateIfChanged(A),this.emitPermissionUpdateIfChanged(n)}get subscriptionStatus(){return this.subscribed===!1?IA.SubscriptionStatus.Unsubscribed:super.isSubscribed?IA.SubscriptionStatus.Subscribed:IA.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?IA.PermissionStatus.Allowed:IA.PermissionStatus.NotAllowed}get isSubscribed(){return this.subscribed===!1?!1:super.isSubscribed}get isDesired(){return this.subscribed!==!1}get isEnabled(){return!this.disabled}get isLocal(){return!1}setEnabled(e){!this.isManualOperationAllowed()||this.disabled===!e||(this.disabled=!e,this.emitTrackUpdate())}setVideoQuality(e){!this.isManualOperationAllowed()||this.currentVideoQuality===e||(this.currentVideoQuality=e,this.videoDimensions=void 0,this.emitTrackUpdate())}setVideoDimensions(e){var A,n;this.isManualOperationAllowed()&&(((A=this.videoDimensions)===null||A===void 0?void 0:A.width)===e.width&&((n=this.videoDimensions)===null||n===void 0?void 0:n.height)===e.height||(js(this.track)&&(this.videoDimensions=e),this.currentVideoQuality=void 0,this.emitTrackUpdate()))}setVideoFPS(e){this.isManualOperationAllowed()&&js(this.track)&&this.fps!==e&&(this.fps=e,this.emitTrackUpdate())}get videoQuality(){return this.currentVideoQuality}setTrack(e){const A=this.subscriptionStatus,n=this.permissionStatus,i=this.track;i!==e&&(i&&(i.off(k.VideoDimensionsChanged,this.handleVideoDimensionsChange),i.off(k.VisibilityChanged,this.handleVisibilityChange),i.off(k.Ended,this.handleEnded),i.detach(),i.stopMonitor(),this.emit(k.Unsubscribed,i)),super.setTrack(e),e&&(e.sid=this.trackSid,e.on(k.VideoDimensionsChanged,this.handleVideoDimensionsChange),e.on(k.VisibilityChanged,this.handleVisibilityChange),e.on(k.Ended,this.handleEnded),this.emit(k.Subscribed,e)),this.emitPermissionUpdateIfChanged(n),this.emitSubscriptionUpdateIfChanged(A))}setAllowed(e){const A=this.subscriptionStatus,n=this.permissionStatus;this.allowed=e,this.emitPermissionUpdateIfChanged(n),this.emitSubscriptionUpdateIfChanged(A)}setSubscriptionError(e){this.emit(k.SubscriptionFailed,e)}updateInfo(e){super.updateInfo(e);const A=this.metadataMuted;this.metadataMuted=e.muted,this.track?this.track.setMuted(e.muted):A!==e.muted&&this.emit(e.muted?k.Muted:k.Unmuted)}emitSubscriptionUpdateIfChanged(e){const A=this.subscriptionStatus;e!==A&&this.emit(k.SubscriptionStatusChanged,A,e)}emitPermissionUpdateIfChanged(e){this.permissionStatus!==e&&this.emit(k.SubscriptionPermissionChanged,this.permissionStatus,e)}isManualOperationAllowed(){return this.kind===E.Kind.Video&&this.isAdaptiveStream?(this.log.warn("adaptive stream is enabled, cannot change video track settings",this.logContext),!1):this.isDesired?!0:(this.log.warn("cannot update track settings when not subscribed",this.logContext),!1)}get isAdaptiveStream(){return js(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){const e=new Tc({trackSids:[this.trackSid],disabled:this.disabled,fps:this.fps});this.videoDimensions?(e.width=Math.ceil(this.videoDimensions.width),e.height=Math.ceil(this.videoDimensions.height)):this.currentVideoQuality!==void 0?e.quality=this.currentVideoQuality:e.quality=$e.HIGH,this.emit(k.UpdateSettings,e)}}class Oi extends gu{static fromParticipantInfo(e,A,n){return new Oi(e,A.sid,A.identity,A.name,A.metadata,A.attributes,n,A.kind)}get logContext(){return Object.assign(Object.assign({},super.logContext),{rpID:this.sid,remoteParticipant:this.identity})}constructor(e,A,n,i,r,s,o){let a=arguments.length>7&&arguments[7]!==void 0?arguments[7]:pi.STANDARD;super(A,n||"",i,r,s,o,a),this.signalClient=e,this.trackPublications=new Map,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.volumeMap=new Map}addTrackPublication(e){super.addTrackPublication(e),e.on(k.UpdateSettings,A=>{this.log.debug("send update settings",Object.assign(Object.assign({},this.logContext),X(e))),this.signalClient.sendUpdateTrackSettings(A)}),e.on(k.UpdateSubscription,A=>{A.participantTracks.forEach(n=>{n.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(A)}),e.on(k.SubscriptionPermissionChanged,A=>{this.emit(x.TrackSubscriptionPermissionChanged,e,A)}),e.on(k.SubscriptionStatusChanged,A=>{this.emit(x.TrackSubscriptionStatusChanged,e,A)}),e.on(k.Subscribed,A=>{this.emit(x.TrackSubscribed,A,e)}),e.on(k.Unsubscribed,A=>{this.emit(x.TrackUnsubscribed,A,e)}),e.on(k.SubscriptionFailed,A=>{this.emit(x.TrackSubscriptionFailed,e.trackSid,A)})}getTrackPublication(e){const A=super.getTrackPublication(e);if(A)return A}getTrackPublicationByName(e){const A=super.getTrackPublicationByName(e);if(A)return A}setVolume(e){let A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:E.Source.Microphone;this.volumeMap.set(A,e);const n=this.getTrackPublication(A);n&&n.track&&n.track.setVolume(e)}getVolume(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:E.Source.Microphone;const A=this.getTrackPublication(e);return A&&A.track?A.track.getVolume():this.volumeMap.get(e)}addSubscribedMediaTrack(e,A,n,i,r,s){let o=this.getTrackPublicationBySid(A);if(o||A.startsWith("TR")||this.trackPublications.forEach(l=>{!o&&e.kind===l.kind.toString()&&(o=l)}),!o){if(s===0){this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:A})),this.emit(x.TrackSubscriptionFailed,A);return}s===void 0&&(s=20),setTimeout(()=>{this.addSubscribedMediaTrack(e,A,n,i,r,s-1)},150);return}if(e.readyState==="ended"){this.log.error("unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()",Object.assign(Object.assign({},this.logContext),X(o))),this.emit(x.TrackSubscriptionFailed,A);return}const a=e.kind==="video";let c;return a?c=new pm(e,A,i,r):c=new gm(e,A,i,this.audioContext,this.audioOutput),c.source=o.source,c.isMuted=o.isMuted,c.setMediaStream(n),c.start(),o.setTrack(c),this.volumeMap.has(o.source)&&Gs(c)&&kA(c)&&c.setVolume(this.volumeMap.get(o.source)),o}get hasMetadata(){return!!this.participantInfo}getTrackPublicationBySid(e){return this.trackPublications.get(e)}updateInfo(e){if(!super.updateInfo(e))return!1;const A=new Map,n=new Map;return e.tracks.forEach(i=>{var r,s;let o=this.getTrackPublicationBySid(i.sid);if(o)o.updateInfo(i);else{const a=E.kindFromProto(i.type);if(!a)return;o=new bm(a,i,(r=this.signalClient.connectOptions)===null||r===void 0?void 0:r.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:(s=this.loggerOptions)===null||s===void 0?void 0:s.loggerName}),o.updateInfo(i),n.set(i.sid,o);const c=Array.from(this.trackPublications.values()).find(l=>l.source===(o==null?void 0:o.source));c&&o.source!==E.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(o.source),Object.assign(Object.assign({},this.logContext),{oldTrack:X(c),newTrack:X(o)})),this.addTrackPublication(o)}A.set(i.sid,o)}),this.trackPublications.forEach(i=>{A.has(i.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),X(i))),this.unpublishTrack(i.trackSid,!0))}),n.forEach(i=>{this.emit(x.TrackPublished,i)}),!0}unpublishTrack(e,A){const n=this.trackPublications.get(e);if(!n)return;const{track:i}=n;switch(i&&(i.stop(),n.setTrack(void 0)),this.trackPublications.delete(e),n.kind){case E.Kind.Audio:this.audioTrackPublications.delete(e);break;case E.Kind.Video:this.videoTrackPublications.delete(e);break}A&&this.emit(x.TrackUnpublished,n)}setAudioOutput(e){return m(this,void 0,void 0,function*(){this.audioOutput=e;const A=[];this.audioTrackPublications.forEach(n=>{var i;kA(n.track)&&Gs(n.track)&&A.push(n.track.setSinkId((i=e.deviceId)!==null&&i!==void 0?i:"default"))}),yield Promise.all(A)})}emit(e){for(var A=arguments.length,n=new Array(A>1?A-1:0),i=1;i<A;i++)n[i-1]=arguments[i];return this.log.trace("participant event",Object.assign(Object.assign({},this.logContext),{event:e,args:n})),super.emit(e,...n)}}var J;(function(t){t.Disconnected="disconnected",t.Connecting="connecting",t.Connected="connected",t.Reconnecting="reconnecting",t.SignalReconnecting="signalReconnecting"})(J||(J={}));const Um=4*1e3;class bt extends mA.EventEmitter{constructor(e){var A,n,i,r;if(super(),A=this,this.state=J.Disconnected,this.activeSpeakers=[],this.isE2EEEnabled=!1,this.audioEnabled=!0,this.isVideoPlaybackBlocked=!1,this.log=K,this.bufferedEvents=[],this.isResuming=!1,this.byteStreamControllers=new Map,this.textStreamControllers=new Map,this.byteStreamHandlers=new Map,this.textStreamHandlers=new Map,this.rpcHandlers=new Map,this.connect=(s,o,a)=>m(this,void 0,void 0,function*(){var c;if(!up())throw BA()?Error("WebRTC isn't detected, have you called registerGlobals?"):Error("LiveKit doesn't seem to be supported on this browser. Try to update your browser and make sure no browser extensions are disabling webRTC.");const l=yield this.disconnectLock.lock();if(this.state===J.Connected)return this.log.info("already connected to room ".concat(this.name),this.logContext),l(),Promise.resolve();if(this.connectFuture)return l(),this.connectFuture.promise;this.setAndEmitConnectionState(J.Connecting),((c=this.regionUrlProvider)===null||c===void 0?void 0:c.getServerUrl().toString())!==s&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),Hs(new URL(s))&&(this.regionUrlProvider===void 0?this.regionUrlProvider=new co(s,o):this.regionUrlProvider.updateToken(o),this.regionUrlProvider.fetchRegionSettings().then(h=>{var g;(g=this.regionUrlProvider)===null||g===void 0||g.setServerReportedRegions(h)}).catch(h=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:h}))}));const u=(h,g,f)=>m(this,void 0,void 0,function*(){var p,B;this.abortController&&this.abortController.abort();const y=new AbortController;this.abortController=y,l==null||l();try{yield this.attemptConnection(f??s,o,a,y),this.abortController=void 0,h()}catch(b){if(this.regionUrlProvider&&b instanceof z&&b.reason!==G.Cancelled&&b.reason!==G.NotAllowed){let v=null;try{v=yield this.regionUrlProvider.getNextBestRegionUrl((p=this.abortController)===null||p===void 0?void 0:p.signal)}catch(C){if(C instanceof z&&(C.status===401||C.reason===G.Cancelled)){this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),g(C);return}}v&&!(!((B=this.abortController)===null||B===void 0)&&B.signal.aborted)?(this.log.info("Initial connection failed with ConnectionError: ".concat(b.message,". Retrying with another region: ").concat(v),this.logContext),this.recreateEngine(),yield u(h,g,v)):(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,Ol(b)),g(b))}else{let v=nA.UNKNOWN_REASON;b instanceof z&&(v=Ol(b)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,v),g(b)}}}),d=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new Ks((h,g)=>{u(h,g,d)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(s,o,a,c,l,u)=>m(this,void 0,void 0,function*(){var d,h,g;const f=yield a.join(s,o,{autoSubscribe:c.autoSubscribe,adaptiveStream:typeof l.adaptiveStream=="object"?!0:l.adaptiveStream,maxRetries:c.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:c.websocketTimeout},u.signal);let p=f.serverInfo;if(p||(p={version:f.serverVersion,region:f.serverRegion}),this.serverInfo=p,this.log.debug("connected to Livekit Server ".concat(Object.entries(p).map(B=>{let[y,b]=B;return"".concat(y,": ").concat(b)}).join(", ")),{room:(d=f.room)===null||d===void 0?void 0:d.name,roomSid:(h=f.room)===null||h===void 0?void 0:h.sid,identity:(g=f.participant)===null||g===void 0?void 0:g.identity}),!p.version)throw new Yg("unknown server version");return p.version==="0.15.1"&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version",this.logContext),l.dynacast=!1),f}),this.applyJoinResponse=s=>{const o=s.participant;if(this.localParticipant.sid=o.sid,this.localParticipant.identity=o.identity,this.localParticipant.setEnabledPublishCodecs(s.enabledPublishCodecs),this.options.e2ee&&this.e2eeManager)try{this.e2eeManager.setSifTrailer(s.sifTrailer)}catch(a){this.log.error(a instanceof Error?a.message:"Could not set SifTrailer",Object.assign(Object.assign({},this.logContext),{error:a}))}this.handleParticipantUpdates([o,...s.otherParticipants]),s.room&&this.handleRoomUpdate(s.room)},this.attemptConnection=(s,o,a,c)=>m(this,void 0,void 0,function*(){var l,u;this.state===J.Reconnecting||this.isResuming||!((l=this.engine)===null||l===void 0)&&l.pendingReconnect?(this.log.info("Reconnection attempt replaced by new connection attempt",this.logContext),this.recreateEngine()):this.maybeCreateEngine(),!((u=this.regionUrlProvider)===null||u===void 0)&&u.isCloud()&&this.engine.setRegionUrlProvider(this.regionUrlProvider),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},to),a),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{const d=yield this.connectSignal(s,o,this.engine,this.connOptions,this.options,c);this.applyJoinResponse(d),this.setupLocalParticipantEvents(),this.emit(T.SignalConnected)}catch(d){yield this.engine.close(),this.recreateEngine();const h=new z("could not establish signal connection",G.ServerUnreachable);throw d instanceof Error&&(h.message="".concat(h.message,": ").concat(d.message)),d instanceof z&&(h.reason=d.reason,h.status=d.status),this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:d})),h}if(c.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),new z("Connection attempt aborted",G.Cancelled);try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,c)}catch(d){throw yield this.engine.close(),this.recreateEngine(),d}Me()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),Me()&&document.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState(J.Connected),this.emit(T.Connected),this.registerConnectionReconcile()}),this.disconnect=function(){for(var s=arguments.length,o=new Array(s),a=0;a<s;a++)o[a]=arguments[a];return m(A,[...o],void 0,function(){var c=this;let l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return function*(){var u,d,h,g;const f=yield c.disconnectLock.lock();try{if(c.state===J.Disconnected){c.log.debug("already disconnected",c.logContext);return}c.log.info("disconnect from room",Object.assign({},c.logContext)),(c.state===J.Connecting||c.state===J.Reconnecting||c.isResuming)&&(c.log.warn("abort connection attempt",c.logContext),(u=c.abortController)===null||u===void 0||u.abort(),(h=(d=c.connectFuture)===null||d===void 0?void 0:d.reject)===null||h===void 0||h.call(d,new z("Client initiated disconnect",G.Cancelled)),c.connectFuture=void 0),!((g=c.engine)===null||g===void 0)&&g.client.isDisconnected||(yield c.engine.client.sendLeave()),c.engine&&(yield c.engine.close()),c.handleDisconnect(l,nA.CLIENT_INITIATED),c.engine=void 0}finally{f()}}()})},this.onPageLeave=()=>m(this,void 0,void 0,function*(){this.log.info("Page leave detected, disconnecting",this.logContext),yield this.disconnect()}),this.startAudio=()=>m(this,void 0,void 0,function*(){const s=[],o=oA();if(o&&o.os==="iOS"){const a="livekit-dummy-audio-el";let c=document.getElementById(a);if(!c){c=document.createElement("audio"),c.id=a,c.autoplay=!0,c.hidden=!0;const l=Ns();l.enabled=!0;const u=new MediaStream([l]);c.srcObject=u,document.addEventListener("visibilitychange",()=>{c&&(c.srcObject=document.hidden?null:u,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()))}),document.body.append(c),this.once(T.Disconnected,()=>{c==null||c.remove(),c=null})}s.push(c)}this.remoteParticipants.forEach(a=>{a.audioTrackPublications.forEach(c=>{c.track&&c.track.attachedElements.forEach(l=>{s.push(l)})})});try{yield Promise.all([this.acquireAudioContext(),...s.map(a=>(a.muted=!1,a.play()))]),this.handleAudioPlaybackStarted()}catch(a){throw this.handleAudioPlaybackFailed(a),a}}),this.startVideo=()=>m(this,void 0,void 0,function*(){const s=[];for(const o of this.remoteParticipants.values())o.videoTrackPublications.forEach(a=>{var c;(c=a.track)===null||c===void 0||c.attachedElements.forEach(l=>{s.includes(l)||s.push(l)})});yield Promise.all(s.map(o=>o.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch(o=>{o.name==="NotAllowedError"?this.handleVideoPlaybackFailed():this.log.warn("Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler",this.logContext)})}),this.handleRestarting=()=>{this.clearConnectionReconcile(),this.isResuming=!1;for(const s of this.remoteParticipants.values())this.handleParticipantDisconnected(s.identity,s);this.setAndEmitConnectionState(J.Reconnecting)&&this.emit(T.Reconnecting)},this.handleSignalRestarted=s=>m(this,void 0,void 0,function*(){this.log.debug("signal reconnected to server, region ".concat(s.serverRegion),Object.assign(Object.assign({},this.logContext),{region:s.serverRegion})),this.bufferedEvents=[],this.applyJoinResponse(s);try{yield this.localParticipant.republishAllTracks(void 0,!0)}catch(o){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:o}))}try{yield this.engine.waitForRestarted(),this.log.debug("fully reconnected to server",Object.assign(Object.assign({},this.logContext),{region:s.serverRegion}))}catch{return}this.setAndEmitConnectionState(J.Connected),this.emit(T.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=s=>{s.forEach(o=>{var a;if(o.identity===this.localParticipant.identity){this.localParticipant.updateInfo(o);return}o.identity===""&&(o.identity=(a=this.sidToIdentity.get(o.sid))!==null&&a!==void 0?a:"");let c=this.remoteParticipants.get(o.identity);o.state===Mt.DISCONNECTED?this.handleParticipantDisconnected(o.identity,c):c=this.getOrCreateParticipant(o.identity,o)})},this.handleActiveSpeakersUpdate=s=>{const o=[],a={};s.forEach(c=>{if(a[c.sid]=!0,c.sid===this.localParticipant.sid)this.localParticipant.audioLevel=c.level,this.localParticipant.setIsSpeaking(!0),o.push(this.localParticipant);else{const l=this.getRemoteParticipantBySid(c.sid);l&&(l.audioLevel=c.level,l.setIsSpeaking(!0),o.push(l))}}),a[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach(c=>{a[c.sid]||(c.audioLevel=0,c.setIsSpeaking(!1))}),this.activeSpeakers=o,this.emitWhenConnected(T.ActiveSpeakersChanged,o)},this.handleSpeakersChanged=s=>{const o=new Map;this.activeSpeakers.forEach(c=>{const l=this.remoteParticipants.get(c.identity);l&&l.sid!==c.sid||o.set(c.sid,c)}),s.forEach(c=>{let l=this.getRemoteParticipantBySid(c.sid);c.sid===this.localParticipant.sid&&(l=this.localParticipant),l&&(l.audioLevel=c.level,l.setIsSpeaking(c.active),c.active?o.set(c.sid,l):o.delete(c.sid))});const a=Array.from(o.values());a.sort((c,l)=>l.audioLevel-c.audioLevel),this.activeSpeakers=a,this.emitWhenConnected(T.ActiveSpeakersChanged,a)},this.handleStreamStateUpdate=s=>{s.streamStates.forEach(o=>{const a=this.getRemoteParticipantBySid(o.participantSid);if(!a)return;const c=a.getTrackPublicationBySid(o.trackSid);if(!c||!c.track)return;const l=E.streamStateFromProto(o.state);l!==c.track.streamState&&(c.track.streamState=l,a.emit(x.TrackStreamStateChanged,c,c.track.streamState),this.emitWhenConnected(T.TrackStreamStateChanged,c,c.track.streamState,a))})},this.handleSubscriptionPermissionUpdate=s=>{const o=this.getRemoteParticipantBySid(s.participantSid);if(!o)return;const a=o.getTrackPublicationBySid(s.trackSid);a&&a.setAllowed(s.allowed)},this.handleSubscriptionError=s=>{const o=Array.from(this.remoteParticipants.values()).find(c=>c.trackPublications.has(s.trackSid));if(!o)return;const a=o.getTrackPublicationBySid(s.trackSid);a&&a.setSubscriptionError(s.err)},this.handleDataPacket=s=>{const o=this.remoteParticipants.get(s.participantIdentity);if(s.value.case==="user")this.handleUserPacket(o,s.value.value,s.kind);else if(s.value.case==="transcription")this.handleTranscription(o,s.value.value);else if(s.value.case==="sipDtmf")this.handleSipDtmf(o,s.value.value);else if(s.value.case==="chatMessage")this.handleChatMessage(o,s.value.value);else if(s.value.case==="metrics")this.handleMetrics(s.value.value,o);else if(s.value.case==="streamHeader")this.handleStreamHeader(s.value.value,s.participantIdentity);else if(s.value.case==="streamChunk")this.handleStreamChunk(s.value.value);else if(s.value.case==="streamTrailer")this.handleStreamTrailer(s.value.value);else if(s.value.case==="rpcRequest"){const a=s.value.value;this.handleIncomingRpcRequest(s.participantIdentity,a.id,a.method,a.payload,a.responseTimeoutMs,a.version)}},this.handleUserPacket=(s,o,a)=>{this.emit(T.DataReceived,o.payload,s,a,o.topic),s==null||s.emit(x.DataReceived,o.payload,a)},this.handleSipDtmf=(s,o)=>{this.emit(T.SipDTMFReceived,o,s),s==null||s.emit(x.SipDTMFReceived,o)},this.bufferedSegments=new Map,this.handleTranscription=(s,o)=>{const a=o.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(o.transcribedParticipantIdentity),c=a==null?void 0:a.trackPublications.get(o.trackId),l=vp(o,this.transcriptionReceivedTimes);c==null||c.emit(k.TranscriptionReceived,l),a==null||a.emit(x.TranscriptionReceived,l,c),this.emit(T.TranscriptionReceived,l,a,c)},this.handleChatMessage=(s,o)=>{const a=Cp(o);this.emit(T.ChatMessage,a,s)},this.handleMetrics=(s,o)=>{this.emit(T.MetricsReceived,s,o)},this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(T.AudioPlaybackStatusChanged,!0))},this.handleAudioPlaybackFailed=s=>{this.log.warn("could not playback audio",Object.assign(Object.assign({},this.logContext),{error:s})),this.canPlaybackAudio&&(this.audioEnabled=!1,this.emit(T.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(T.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(T.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>m(this,void 0,void 0,function*(){var s,o,a;const c=Ce.getInstance().previousDevices,l=yield Ce.getInstance().getDevices(void 0,!1),u=oA();if((u==null?void 0:u.name)==="Chrome"&&u.os!=="iOS")for(let h of l){const g=c.find(f=>f.deviceId===h.deviceId);g&&g.label!==""&&g.kind===h.kind&&g.label!==h.label&&this.getActiveDevice(h.kind)==="default"&&this.emit(T.ActiveDeviceChanged,h.kind,h.deviceId)}const d=["audiooutput","audioinput","videoinput"];for(let h of d){const g=Up(h),f=this.localParticipant.getTrackPublication(g);if(f&&(!((s=f.track)===null||s===void 0)&&s.isUserProvided))continue;const p=l.filter(y=>y.kind===h),B=this.getActiveDevice(h);if(B===((o=c.filter(y=>y.kind===h)[0])===null||o===void 0?void 0:o.deviceId)&&p.length>0&&((a=p[0])===null||a===void 0?void 0:a.deviceId)!==B){yield this.switchActiveDevice(h,p[0].deviceId);continue}h==="audioinput"&&!jA()||h==="videoinput"||p.length>0&&!p.find(y=>y.deviceId===this.getActiveDevice(h))&&(yield this.switchActiveDevice(h,p[0].deviceId))}this.emit(T.MediaDevicesChanged)}),this.handleRoomUpdate=s=>{const o=this.roomInfo;this.roomInfo=s,o&&o.metadata!==s.metadata&&this.emitWhenConnected(T.RoomMetadataChanged,s.metadata),(o==null?void 0:o.activeRecording)!==s.activeRecording&&this.emitWhenConnected(T.RecordingStatusChanged,s.activeRecording)},this.handleConnectionQualityUpdate=s=>{s.updates.forEach(o=>{if(o.participantSid===this.localParticipant.sid){this.localParticipant.setConnectionQuality(o.quality);return}const a=this.getRemoteParticipantBySid(o.participantSid);a&&a.setConnectionQuality(o.quality)})},this.onLocalParticipantMetadataChanged=s=>{this.emit(T.ParticipantMetadataChanged,s,this.localParticipant)},this.onLocalParticipantNameChanged=s=>{this.emit(T.ParticipantNameChanged,s,this.localParticipant)},this.onLocalAttributesChanged=s=>{this.emit(T.ParticipantAttributesChanged,s,this.localParticipant)},this.onLocalTrackMuted=s=>{this.emit(T.TrackMuted,s,this.localParticipant)},this.onLocalTrackUnmuted=s=>{this.emit(T.TrackUnmuted,s,this.localParticipant)},this.onTrackProcessorUpdate=s=>{var o;(o=s==null?void 0:s.onPublish)===null||o===void 0||o.call(s,this)},this.onLocalTrackPublished=s=>m(this,void 0,void 0,function*(){var o,a,c,l,u,d;(o=s.track)===null||o===void 0||o.on(k.TrackProcessorUpdate,this.onTrackProcessorUpdate),(a=s.track)===null||a===void 0||a.on(k.Restarted,this.onLocalTrackRestarted),(u=(l=(c=s.track)===null||c===void 0?void 0:c.getProcessor())===null||l===void 0?void 0:l.onPublish)===null||u===void 0||u.call(l,this),this.emit(T.LocalTrackPublished,s,this.localParticipant),yt(s.track)&&(yield s.track.checkForSilence())&&this.emit(T.LocalAudioSilenceDetected,s);const h=yield(d=s.track)===null||d===void 0?void 0:d.getDeviceId(!1),g=Vl(s.source);g&&h&&h!==this.localParticipant.activeDeviceMap.get(g)&&(this.localParticipant.activeDeviceMap.set(g,h),this.emit(T.ActiveDeviceChanged,g,h))}),this.onLocalTrackUnpublished=s=>{var o,a;(o=s.track)===null||o===void 0||o.off(k.TrackProcessorUpdate,this.onTrackProcessorUpdate),(a=s.track)===null||a===void 0||a.off(k.Restarted,this.onLocalTrackRestarted),this.emit(T.LocalTrackUnpublished,s,this.localParticipant)},this.onLocalTrackRestarted=s=>m(this,void 0,void 0,function*(){const o=yield s.getDeviceId(!1),a=Vl(s.source);a&&o&&o!==this.localParticipant.activeDeviceMap.get(a)&&(this.log.debug("local track restarted, setting ".concat(a," ").concat(o," active"),this.logContext),this.localParticipant.activeDeviceMap.set(a,o),this.emit(T.ActiveDeviceChanged,a,o))}),this.onLocalConnectionQualityChanged=s=>{this.emit(T.ConnectionQualityChanged,s,this.localParticipant)},this.onMediaDevicesError=s=>{this.emit(T.MediaDevicesError,s)},this.onLocalParticipantPermissionsChanged=s=>{this.emit(T.ParticipantPermissionsChanged,s,this.localParticipant)},this.onLocalChatMessageSent=s=>{this.emit(T.ChatMessage,s,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},jp),e),this.log=TA((n=this.options.loggerName)!==null&&n!==void 0?n:sA.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},eu),e==null?void 0:e.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},Au),e==null?void 0:e.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},Gp),e==null?void 0:e.publishDefaults),this.maybeCreateEngine(),this.disconnectLock=new De,this.localParticipant=new ym("","",this.engine,this.options,this.rpcHandlers),this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",WA(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",WA(this.options.audioCaptureDefaults.deviceId)),!((i=this.options.audioOutput)===null||i===void 0)&&i.deviceId&&this.switchActiveDevice("audiooutput",WA(this.options.audioOutput.deviceId)).catch(s=>this.log.warn("Could not set audio output: ".concat(s.message),this.logContext)),this.options.e2ee&&this.setupE2EE(),Me()){const s=new AbortController;(r=navigator.mediaDevices)===null||r===void 0||r.addEventListener("devicechange",this.handleDeviceChange,{signal:s.signal}),bt.cleanupRegistry&&bt.cleanupRegistry.register(this,()=>{s.abort()})}}registerTextStreamHandler(e,A){if(this.textStreamHandlers.has(e))throw new TypeError('A text stream handler for topic "'.concat(e,'" has already been set.'));this.textStreamHandlers.set(e,A)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}registerByteStreamHandler(e,A){if(this.byteStreamHandlers.has(e))throw new TypeError('A byte stream handler for topic "'.concat(e,'" has already been set.'));this.byteStreamHandlers.set(e,A)}unregisterByteStreamHandler(e){this.byteStreamHandlers.delete(e)}registerRpcMethod(e,A){if(this.rpcHandlers.has(e))throw Error("RPC handler already registered for method ".concat(e,", unregisterRpcMethod before trying to register again"));this.rpcHandlers.set(e,A)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}handleIncomingRpcRequest(e,A,n,i,r,s){return m(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(e,A),s!==1){yield this.engine.publishRpcResponse(e,A,null,le.builtIn("UNSUPPORTED_VERSION"));return}const o=this.rpcHandlers.get(n);if(!o){yield this.engine.publishRpcResponse(e,A,null,le.builtIn("UNSUPPORTED_METHOD"));return}let a=null,c=null;try{const l=yield o({requestId:A,callerIdentity:e,payload:i,responseTimeout:r});no(l)>tu?(a=le.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),console.warn("RPC Response payload too large for ".concat(n))):c=l}catch(l){l instanceof le?a=l:(console.warn("Uncaught error returned by RPC handler for ".concat(n,". Returning APPLICATION_ERROR instead."),l),a=le.builtIn("APPLICATION_ERROR"))}yield this.engine.publishRpcResponse(e,A,c,a)})}setE2EEEnabled(e){return m(this,void 0,void 0,function*(){if(this.e2eeManager)yield Promise.all([this.localParticipant.setE2EEEnabled(e)]),this.localParticipant.identity!==""&&this.e2eeManager.setParticipantCryptorEnabled(e,this.localParticipant.identity);else throw Error("e2ee not configured, please set e2ee settings within the room options")})}setupE2EE(){var e;this.options.e2ee&&("e2eeManager"in this.options.e2ee?this.e2eeManager=this.options.e2ee.e2eeManager:this.e2eeManager=new kp(this.options.e2ee),this.e2eeManager.on(VA.ParticipantEncryptionStatusChanged,(A,n)=>{yp(n)&&(this.isE2EEEnabled=A),this.emit(T.ParticipantEncryptionStatusChanged,A,n)}),this.e2eeManager.on(VA.EncryptionError,A=>this.emit(T.EncryptionError,A)),(e=this.e2eeManager)===null||e===void 0||e.setup(this))}get logContext(){var e;return{room:this.name,roomID:(e=this.roomInfo)===null||e===void 0?void 0:e.sid,participant:this.localParticipant.identity,pID:this.localParticipant.sid}}get isRecording(){var e,A;return(A=(e=this.roomInfo)===null||e===void 0?void 0:e.activeRecording)!==null&&A!==void 0?A:!1}getSid(){return m(this,void 0,void 0,function*(){return this.state===J.Disconnected?"":this.roomInfo&&this.roomInfo.sid!==""?this.roomInfo.sid:new Promise((e,A)=>{const n=i=>{i.sid!==""&&(this.engine.off(I.RoomUpdate,n),e(i.sid))};this.engine.on(I.RoomUpdate,n),this.once(T.Disconnected,()=>{this.engine.off(I.RoomUpdate,n),A("Room disconnected before room server id was available")})})})}get name(){var e,A;return(A=(e=this.roomInfo)===null||e===void 0?void 0:e.name)!==null&&A!==void 0?A:""}get metadata(){var e;return(e=this.roomInfo)===null||e===void 0?void 0:e.metadata}get numParticipants(){var e,A;return(A=(e=this.roomInfo)===null||e===void 0?void 0:e.numParticipants)!==null&&A!==void 0?A:0}get numPublishers(){var e,A;return(A=(e=this.roomInfo)===null||e===void 0?void 0:e.numPublishers)!==null&&A!==void 0?A:0}maybeCreateEngine(){this.engine&&!this.engine.isClosed||(this.engine=new om(this.options),this.engine.on(I.ParticipantUpdate,this.handleParticipantUpdates).on(I.RoomUpdate,this.handleRoomUpdate).on(I.SpeakersChanged,this.handleSpeakersChanged).on(I.StreamStateChanged,this.handleStreamStateUpdate).on(I.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(I.SubscriptionError,this.handleSubscriptionError).on(I.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(I.MediaTrackAdded,(e,A,n)=>{this.onTrackAdded(e,A,n)}).on(I.Disconnected,e=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e)}).on(I.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(I.DataPacketReceived,this.handleDataPacket).on(I.Resuming,()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState(J.SignalReconnecting)&&this.emit(T.SignalReconnecting)}).on(I.Resumed,()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState(J.Connected)&&this.emit(T.Reconnected)}).on(I.SignalResumed,()=>{this.bufferedEvents=[],(this.state===J.Reconnecting||this.isResuming)&&this.sendSyncState()}).on(I.Restarting,this.handleRestarting).on(I.SignalRestarted,this.handleSignalRestarted).on(I.Offline,()=>{this.setAndEmitConnectionState(J.Reconnecting)&&this.emit(T.Reconnecting)}).on(I.DCBufferStatusChanged,(e,A)=>{this.emit(T.DCBufferStatusChanged,e,A)}).on(I.LocalTrackSubscribed,e=>{const A=this.localParticipant.getTrackPublications().find(n=>{let{trackSid:i}=n;return i===e});if(!A){this.log.warn("could not find local track subscription for subscribed event",this.logContext);return}this.localParticipant.emit(x.LocalTrackSubscribed,A),this.emitWhenConnected(T.LocalTrackSubscribed,A,this.localParticipant)}).on(I.RoomMoved,e=>{this.log.debug("room moved",e),e.room&&this.handleRoomUpdate(e.room),this.remoteParticipants.forEach((A,n)=>{this.handleParticipantDisconnected(n,A)}),this.emit(T.Moved,e.room.name,e.token),e.participant?this.handleParticipantUpdates([e.participant,...e.otherParticipants]):this.handleParticipantUpdates(e.otherParticipants)}),this.localParticipant&&this.localParticipant.setupEngine(this.engine),this.e2eeManager&&this.e2eeManager.setupEngine(this.engine))}static getLocalDevices(e){let A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return Ce.getInstance().getDevices(e,A)}prepareConnection(e,A){return m(this,void 0,void 0,function*(){if(this.state===J.Disconnected){this.log.debug("prepareConnection to ".concat(e),this.logContext);try{if(Hs(new URL(e))&&A){this.regionUrlProvider=new co(e,A);const n=yield this.regionUrlProvider.getNextBestRegionUrl();n&&this.state===J.Disconnected&&(this.regionUrl=n,yield fetch(Vs(n),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(n),this.logContext))}else yield fetch(Vs(e),{method:"HEAD"})}catch(n){this.log.warn("could not prepare connection",Object.assign(Object.assign({},this.logContext),{error:n}))}}})}getParticipantByIdentity(e){return this.localParticipant.identity===e?this.localParticipant:this.remoteParticipants.get(e)}clearConnectionFutures(){this.connectFuture=void 0}simulateScenario(e,A){return m(this,void 0,void 0,function*(){let n=()=>{},i;switch(e){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":i=new pA({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":i=new pA({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":i=new pA({scenario:{case:"serverLeave",value:!0}});break;case"migration":i=new pA({scenario:{case:"migration",value:!0}});break;case"resume-reconnect":this.engine.failNext(),yield this.engine.client.handleOnClose("simulate resume-disconnect");break;case"disconnect-signal-on-resume":n=()=>m(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),i=new pA({scenario:{case:"disconnectSignalOnResume",value:!0}});break;case"disconnect-signal-on-resume-no-messages":n=()=>m(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),i=new pA({scenario:{case:"disconnectSignalOnResumeNoMessages",value:!0}});break;case"full-reconnect":this.engine.fullReconnectOnNext=!0,yield this.engine.client.handleOnClose("simulate full-reconnect");break;case"force-tcp":case"force-tls":i=new pA({scenario:{case:"switchCandidateProtocol",value:e==="force-tls"?2:1}}),n=()=>m(this,void 0,void 0,function*(){const r=this.engine.client.onLeave;r&&r(new Bi({reason:nA.CLIENT_INITIATED,action:Kt.RECONNECT}))});break;case"subscriber-bandwidth":if(A===void 0||typeof A!="number")throw new Error("subscriber-bandwidth requires a number as argument");i=new pA({scenario:{case:"subscriberBandwidth",value:wt(A)}});break;case"leave-full-reconnect":i=new pA({scenario:{case:"leaveRequestFullReconnect",value:!0}})}i&&(yield this.engine.client.sendSimulateScenario(i),yield n())})}get canPlaybackAudio(){return this.audioEnabled}get canPlaybackVideo(){return!this.isVideoPlaybackBlocked}getActiveDevice(e){return this.localParticipant.activeDeviceMap.get(e)}switchActiveDevice(e,A){return m(this,arguments,void 0,function(n,i){var r=this;let s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return function*(){var o,a,c,l,u,d,h,g;let f=!0,p=!1;const B=s?{exact:i}:i;if(n==="audioinput"){p=r.localParticipant.audioTrackPublications.size===0;const y=(o=r.getActiveDevice(n))!==null&&o!==void 0?o:r.options.audioCaptureDefaults.deviceId;r.options.audioCaptureDefaults.deviceId=B;const b=Array.from(r.localParticipant.audioTrackPublications.values()).filter(v=>v.source===E.Source.Microphone);try{f=(yield Promise.all(b.map(v=>{var C;return(C=v.audioTrack)===null||C===void 0?void 0:C.setDeviceId(B)}))).every(v=>v===!0)}catch(v){throw r.options.audioCaptureDefaults.deviceId=y,v}}else if(n==="videoinput"){p=r.localParticipant.videoTrackPublications.size===0;const y=(a=r.getActiveDevice(n))!==null&&a!==void 0?a:r.options.videoCaptureDefaults.deviceId;r.options.videoCaptureDefaults.deviceId=B;const b=Array.from(r.localParticipant.videoTrackPublications.values()).filter(v=>v.source===E.Source.Camera);try{f=(yield Promise.all(b.map(v=>{var C;return(C=v.videoTrack)===null||C===void 0?void 0:C.setDeviceId(B)}))).every(v=>v===!0)}catch(v){throw r.options.videoCaptureDefaults.deviceId=y,v}}else if(n==="audiooutput"){if(!_s()&&!r.options.webAudioMix||r.options.webAudioMix&&r.audioContext&&!("setSinkId"in r.audioContext))throw new Error("cannot switch audio output, setSinkId not supported");r.options.webAudioMix&&(i=(c=yield Ce.getInstance().normalizeDeviceId("audiooutput",i))!==null&&c!==void 0?c:""),(l=(g=r.options).audioOutput)!==null&&l!==void 0||(g.audioOutput={});const y=(u=r.getActiveDevice(n))!==null&&u!==void 0?u:r.options.audioOutput.deviceId;r.options.audioOutput.deviceId=i;try{r.options.webAudioMix&&((d=r.audioContext)===null||d===void 0||d.setSinkId(i)),yield Promise.all(Array.from(r.remoteParticipants.values()).map(b=>b.setAudioOutput({deviceId:i})))}catch(b){throw r.options.audioOutput.deviceId=y,b}}return(p||n==="audiooutput")&&(r.localParticipant.activeDeviceMap.set(n,n==="audiooutput"&&((h=r.options.audioOutput)===null||h===void 0?void 0:h.deviceId)||i),r.emit(T.ActiveDeviceChanged,n,i)),f}()})}setupLocalParticipantEvents(){this.localParticipant.on(x.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(x.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(x.AttributesChanged,this.onLocalAttributesChanged).on(x.TrackMuted,this.onLocalTrackMuted).on(x.TrackUnmuted,this.onLocalTrackUnmuted).on(x.LocalTrackPublished,this.onLocalTrackPublished).on(x.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(x.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(x.MediaDevicesError,this.onMediaDevicesError).on(x.AudioStreamAcquired,this.startAudio).on(x.ChatMessage,this.onLocalChatMessageSent).on(x.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged)}recreateEngine(){var e;(e=this.engine)===null||e===void 0||e.close(),this.engine=void 0,this.isResuming=!1,this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.bufferedEvents=[],this.maybeCreateEngine()}onTrackAdded(e,A,n){if(this.state===J.Connecting||this.state===J.Reconnecting){const l=()=>{this.onTrackAdded(e,A,n),u()},u=()=>{this.off(T.Reconnected,l),this.off(T.Connected,l),this.off(T.Disconnected,u)};this.once(T.Reconnected,l),this.once(T.Connected,l),this.once(T.Disconnected,u);return}if(this.state===J.Disconnected){this.log.warn("skipping incoming track after Room disconnected",this.logContext);return}if(e.readyState==="ended"){this.log.info("skipping incoming track as it already ended",this.logContext);return}const i=ap(A.id),r=i[0];let s=i[1],o=e.id;if(s&&s.startsWith("TR")&&(o=s),r===this.localParticipant.sid){this.log.warn("tried to create RemoteParticipant for local participant",this.logContext);return}const a=Array.from(this.remoteParticipants.values()).find(l=>l.sid===r);if(!a){this.log.error("Tried to add a track for a participant, that's not present. Sid: ".concat(r),this.logContext);return}let c;this.options.adaptiveStream&&(typeof this.options.adaptiveStream=="object"?c=this.options.adaptiveStream:c={}),a.addSubscribedMediaTrack(e,o,A,n,c)}handleDisconnect(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,A=arguments.length>1?arguments[1]:void 0;var n;if(this.clearConnectionReconcile(),this.isResuming=!1,this.bufferedEvents=[],this.transcriptionReceivedTimes.clear(),this.state!==J.Disconnected){this.regionUrl=void 0;try{this.remoteParticipants.forEach(i=>{i.trackPublications.forEach(r=>{i.unpublishTrack(r.trackSid)})}),this.localParticipant.trackPublications.forEach(i=>{var r,s,o;i.track&&this.localParticipant.unpublishTrack(i.track,e),e?((r=i.track)===null||r===void 0||r.detach(),(s=i.track)===null||s===void 0||s.stop()):(o=i.track)===null||o===void 0||o.stopMonitor()}),this.localParticipant.off(x.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(x.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(x.AttributesChanged,this.onLocalAttributesChanged).off(x.TrackMuted,this.onLocalTrackMuted).off(x.TrackUnmuted,this.onLocalTrackUnmuted).off(x.LocalTrackPublished,this.onLocalTrackPublished).off(x.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(x.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(x.MediaDevicesError,this.onMediaDevicesError).off(x.AudioStreamAcquired,this.startAudio).off(x.ChatMessage,this.onLocalChatMessageSent).off(x.ParticipantPermissionsChanged,this.onLocalParticipantPermissionsChanged),this.localParticipant.trackPublications.clear(),this.localParticipant.videoTrackPublications.clear(),this.localParticipant.audioTrackPublications.clear(),this.remoteParticipants.clear(),this.sidToIdentity.clear(),this.activeSpeakers=[],this.audioContext&&typeof this.options.webAudioMix=="boolean"&&(this.audioContext.close(),this.audioContext=void 0),Me()&&(window.removeEventListener("beforeunload",this.onPageLeave),window.removeEventListener("pagehide",this.onPageLeave),window.removeEventListener("freeze",this.onPageLeave),(n=navigator.mediaDevices)===null||n===void 0||n.removeEventListener("devicechange",this.handleDeviceChange))}finally{this.setAndEmitConnectionState(J.Disconnected),this.emit(T.Disconnected,A)}}}handleParticipantDisconnected(e,A){var n;this.remoteParticipants.delete(e),A&&(A.trackPublications.forEach(i=>{A.unpublishTrack(i.trackSid,!0)}),this.emit(T.ParticipantDisconnected,A),A.setDisconnected(),(n=this.localParticipant)===null||n===void 0||n.handleParticipantDisconnected(A.identity))}handleStreamHeader(e,A){return m(this,void 0,void 0,function*(){var n;if(e.contentHeader.case==="byteHeader"){const i=this.byteStreamHandlers.get(e.topic);if(!i){this.log.debug("ignoring incoming byte stream due to no handler for topic",e.topic);return}let r;const s={id:e.streamId,name:(n=e.contentHeader.value.name)!==null&&n!==void 0?n:"unknown",mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Ii(e.timestamp),attributes:e.attributes},o=new ReadableStream({start:a=>{r=a,this.byteStreamControllers.set(e.streamId,{info:s,controller:r,startTime:Date.now()})}});i(new um(s,o,Ii(e.totalLength)),{identity:A})}else if(e.contentHeader.case==="textHeader"){const i=this.textStreamHandlers.get(e.topic);if(!i){this.log.debug("ignoring incoming text stream due to no handler for topic",e.topic);return}let r;const s={id:e.streamId,mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Number(e.timestamp),attributes:e.attributes},o=new ReadableStream({start:a=>{r=a,this.textStreamControllers.set(e.streamId,{info:s,controller:r,startTime:Date.now()})}});i(new dm(s,o,Ii(e.totalLength)),{identity:A})}})}handleStreamChunk(e){const A=this.byteStreamControllers.get(e.streamId);A&&e.content.length>0&&A.controller.enqueue(e);const n=this.textStreamControllers.get(e.streamId);n&&e.content.length>0&&n.controller.enqueue(e)}handleStreamTrailer(e){const A=this.textStreamControllers.get(e.streamId);A&&(A.info.attributes=Object.assign(Object.assign({},A.info.attributes),e.attributes),A.controller.close(),this.textStreamControllers.delete(e.streamId));const n=this.byteStreamControllers.get(e.streamId);n&&(n.info.attributes=Object.assign(Object.assign({},n.info.attributes),e.attributes),n.controller.close(),this.byteStreamControllers.delete(e.streamId))}acquireAudioContext(){return m(this,void 0,void 0,function*(){var e,A;if(typeof this.options.webAudioMix!="boolean"&&this.options.webAudioMix.audioContext?this.audioContext=this.options.webAudioMix.audioContext:(!this.audioContext||this.audioContext.state==="closed")&&(this.audioContext=(e=Kl())!==null&&e!==void 0?e:void 0),this.options.webAudioMix&&this.remoteParticipants.forEach(i=>i.setAudioContext(this.audioContext)),this.localParticipant.setAudioContext(this.audioContext),this.audioContext&&this.audioContext.state==="suspended")try{yield Promise.race([this.audioContext.resume(),Oe(200)])}catch(i){this.log.warn("Could not resume audio context",Object.assign(Object.assign({},this.logContext),{error:i}))}const n=((A=this.audioContext)===null||A===void 0?void 0:A.state)==="running";n!==this.canPlaybackAudio&&(this.audioEnabled=n,this.emit(T.AudioPlaybackStatusChanged,n))})}createParticipant(e,A){var n;let i;return A?i=Oi.fromParticipantInfo(this.engine.client,A,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}):i=new Oi(this.engine.client,"",e,void 0,void 0,void 0,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}),this.options.webAudioMix&&i.setAudioContext(this.audioContext),!((n=this.options.audioOutput)===null||n===void 0)&&n.deviceId&&i.setAudioOutput(this.options.audioOutput).catch(r=>this.log.warn("Could not set audio output: ".concat(r.message),this.logContext)),i}getOrCreateParticipant(e,A){if(this.remoteParticipants.has(e)){const i=this.remoteParticipants.get(e);return A&&i.updateInfo(A)&&this.sidToIdentity.set(A.sid,A.identity),i}const n=this.createParticipant(e,A);return this.remoteParticipants.set(e,n),this.sidToIdentity.set(A.sid,A.identity),this.emitWhenConnected(T.ParticipantConnected,n),n.on(x.TrackPublished,i=>{this.emitWhenConnected(T.TrackPublished,i,n)}).on(x.TrackSubscribed,(i,r)=>{i.kind===E.Kind.Audio?(i.on(k.AudioPlaybackStarted,this.handleAudioPlaybackStarted),i.on(k.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):i.kind===E.Kind.Video&&(i.on(k.VideoPlaybackFailed,this.handleVideoPlaybackFailed),i.on(k.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emit(T.TrackSubscribed,i,r,n)}).on(x.TrackUnpublished,i=>{this.emit(T.TrackUnpublished,i,n)}).on(x.TrackUnsubscribed,(i,r)=>{this.emit(T.TrackUnsubscribed,i,r,n)}).on(x.TrackMuted,i=>{this.emitWhenConnected(T.TrackMuted,i,n)}).on(x.TrackUnmuted,i=>{this.emitWhenConnected(T.TrackUnmuted,i,n)}).on(x.ParticipantMetadataChanged,i=>{this.emitWhenConnected(T.ParticipantMetadataChanged,i,n)}).on(x.ParticipantNameChanged,i=>{this.emitWhenConnected(T.ParticipantNameChanged,i,n)}).on(x.AttributesChanged,i=>{this.emitWhenConnected(T.ParticipantAttributesChanged,i,n)}).on(x.ConnectionQualityChanged,i=>{this.emitWhenConnected(T.ConnectionQualityChanged,i,n)}).on(x.ParticipantPermissionsChanged,i=>{this.emitWhenConnected(T.ParticipantPermissionsChanged,i,n)}).on(x.TrackSubscriptionStatusChanged,(i,r)=>{this.emitWhenConnected(T.TrackSubscriptionStatusChanged,i,r,n)}).on(x.TrackSubscriptionFailed,(i,r)=>{this.emit(T.TrackSubscriptionFailed,i,n,r)}).on(x.TrackSubscriptionPermissionChanged,(i,r)=>{this.emitWhenConnected(T.TrackSubscriptionPermissionChanged,i,r,n)}).on(x.Active,()=>{this.emitWhenConnected(T.ParticipantActive,n)}),A&&n.updateInfo(A),n}sendSyncState(){const e=Array.from(this.remoteParticipants.values()).reduce((n,i)=>(n.push(...i.getTrackPublications()),n),[]),A=this.localParticipant.getTrackPublications();this.engine.sendSyncState(e,A)}updateSubscriptions(){for(const e of this.remoteParticipants.values())for(const A of e.videoTrackPublications.values())A.isSubscribed&&wp(A)&&A.emitTrackUpdate()}getRemoteParticipantBySid(e){const A=this.sidToIdentity.get(e);if(A)return this.remoteParticipants.get(A)}registerConnectionReconcile(){this.clearConnectionReconcile();let e=0;this.connectionReconcileInterval=ye.setInterval(()=>{!this.engine||this.engine.isClosed||!this.engine.verifyTransport()?(e++,this.log.warn("detected connection state mismatch",Object.assign(Object.assign({},this.logContext),{numFailures:e,engine:this.engine?{closed:this.engine.isClosed,transportsConnected:this.engine.verifyTransport()}:void 0})),e>=3&&(this.recreateEngine(),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,nA.STATE_MISMATCH))):e=0},Um)}clearConnectionReconcile(){this.connectionReconcileInterval&&ye.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(e){return e===this.state?!1:(this.state=e,this.emit(T.ConnectionStateChanged,this.state),!0)}emitBufferedEvents(){this.bufferedEvents.forEach(e=>{let[A,n]=e;this.emit(A,...n)}),this.bufferedEvents=[]}emitWhenConnected(e){for(var A=arguments.length,n=new Array(A>1?A-1:0),i=1;i<A;i++)n[i-1]=arguments[i];if(this.state===J.Reconnecting||this.isResuming||!this.engine||this.engine.pendingReconnect)this.bufferedEvents.push([e,n]);else if(this.state===J.Connected)return this.emit(e,...n);return!1}simulateParticipants(e){return m(this,void 0,void 0,function*(){var A,n;const i=Object.assign({audio:!0,video:!0,useRealTracks:!1},e.publish),r=Object.assign({count:9,audio:!1,video:!0,aspectRatios:[1.66,1.7,1.3]},e.participants);if(this.handleDisconnect(),this.roomInfo=new fi({sid:"RM_SIMULATED",name:"simulated-room",emptyTimeout:0,maxParticipants:0,creationTime:re.parse(new Date().getTime()),metadata:"",numParticipants:1,numPublishers:1,turnPassword:"",enabledCodecs:[],activeRecording:!1}),this.localParticipant.updateInfo(new pt({identity:"simulated-local",name:"local-name"})),this.setupLocalParticipantEvents(),this.emit(T.SignalConnected),this.emit(T.Connected),this.setAndEmitConnectionState(J.Connected),i.video){const s=new ho(E.Kind.Video,new Nt({source:ge.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:tA.AUDIO,name:"video-dummy"}),new _i(i.useRealTracks?(yield window.navigator.mediaDevices.getUserMedia({video:!0})).getVideoTracks()[0]:Hl(160*((A=r.aspectRatios[0])!==null&&A!==void 0?A:1),160,!0,!0),void 0,!1,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(s),this.localParticipant.emit(x.LocalTrackPublished,s)}if(i.audio){const s=new ho(E.Kind.Audio,new Nt({source:ge.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:tA.AUDIO}),new Li(i.useRealTracks?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:Ns(),void 0,!1,this.audioContext,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(s),this.localParticipant.emit(x.LocalTrackPublished,s)}for(let s=0;s<r.count-1;s+=1){let o=new pt({sid:Math.floor(Math.random()*1e4).toString(),identity:"simulated-".concat(s),state:Mt.ACTIVE,tracks:[],joinedAt:re.parse(Date.now())});const a=this.getOrCreateParticipant(o.identity,o);if(r.video){const c=Hl(160*((n=r.aspectRatios[s%r.aspectRatios.length])!==null&&n!==void 0?n:1),160,!1,!0),l=new Nt({source:ge.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:tA.AUDIO});a.addSubscribedMediaTrack(c,l.sid,new MediaStream([c]),new RTCRtpReceiver),o.tracks=[...o.tracks,l]}if(r.audio){const c=Ns(),l=new Nt({source:ge.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:tA.AUDIO});a.addSubscribedMediaTrack(c,l.sid,new MediaStream([c]),new RTCRtpReceiver),o.tracks=[...o.tracks,l]}a.updateInfo(o)}})}emit(e){for(var A=arguments.length,n=new Array(A>1?A-1:0),i=1;i<A;i++)n[i-1]=arguments[i];if(e!==T.ActiveSpeakersChanged&&e!==T.TranscriptionReceived){const r=mu(n).filter(s=>s!==void 0);this.log.debug("room event ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:r}))}return super.emit(e,...n)}}bt.cleanupRegistry=typeof FinalizationRegistry<"u"&&new FinalizationRegistry(t=>{t()});function mu(t){return t.map(e=>{if(e)return Array.isArray(e)?mu(e):typeof e=="object"?"logContext"in e?e.logContext:void 0:e})}var lA;(function(t){t[t.IDLE=0]="IDLE",t[t.RUNNING=1]="RUNNING",t[t.SKIPPED=2]="SKIPPED",t[t.SUCCESS=3]="SUCCESS",t[t.FAILED=4]="FAILED"})(lA||(lA={}));class YA extends mA.EventEmitter{constructor(e,A){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.status=lA.IDLE,this.logs=[],this.options={},this.url=e,this.token=A,this.name=this.constructor.name,this.room=new bt(n.roomOptions),this.connectOptions=n.connectOptions,this.options=n}run(e){return m(this,void 0,void 0,function*(){if(this.status!==lA.IDLE)throw Error("check is running already");this.setStatus(lA.RUNNING);try{yield this.perform()}catch(A){A instanceof Error&&(this.options.errorsAsWarnings?this.appendWarning(A.message):this.appendError(A.message))}return yield this.disconnect(),yield new Promise(A=>setTimeout(A,500)),this.status!==lA.SKIPPED&&this.setStatus(this.isSuccess()?lA.SUCCESS:lA.FAILED),e&&e(),this.getInfo()})}isSuccess(){return!this.logs.some(e=>e.level==="error")}connect(e){return m(this,void 0,void 0,function*(){return this.room.state===J.Connected?this.room:(e||(e=this.url),yield this.room.connect(e,this.token,this.connectOptions),this.room)})}disconnect(){return m(this,void 0,void 0,function*(){this.room&&this.room.state!==J.Disconnected&&(yield this.room.disconnect(),yield new Promise(e=>setTimeout(e,500)))})}skip(){this.setStatus(lA.SKIPPED)}switchProtocol(e){return m(this,void 0,void 0,function*(){let A=!1,n=!1;if(this.room.on(T.Reconnecting,()=>{A=!0}),this.room.once(T.Reconnected,()=>{n=!0}),this.room.simulateScenario("force-".concat(e)),yield new Promise(r=>setTimeout(r,1e3)),!A)return;const i=Date.now()+1e4;for(;Date.now()<i;){if(n)return;yield Oe(100)}throw new Error("Could not reconnect using ".concat(e," protocol after 10 seconds"))})}appendMessage(e){this.logs.push({level:"info",message:e}),this.emit("update",this.getInfo())}appendWarning(e){this.logs.push({level:"warning",message:e}),this.emit("update",this.getInfo())}appendError(e){this.logs.push({level:"error",message:e}),this.emit("update",this.getInfo())}setStatus(e){this.status=e,this.emit("update",this.getInfo())}get engine(){var e;return(e=this.room)===null||e===void 0?void 0:e.engine}getInfo(){return{logs:this.logs,name:this.name,status:this.status,description:this.description}}}class Qm extends YA{get description(){return"Cloud regions"}perform(){return m(this,void 0,void 0,function*(){const e=new co(this.url,this.token);if(!e.isCloud()){this.skip();return}const A=[],n=new Set;for(let r=0;r<3;r++){const s=yield e.getNextBestRegionUrl();if(!s)break;if(n.has(s))continue;n.add(s);const o=yield this.checkCloudRegion(s);this.appendMessage("".concat(o.region," RTT: ").concat(o.rtt,"ms, duration: ").concat(o.duration,"ms")),A.push(o)}A.sort((r,s)=>(r.duration-s.duration)*.5+(r.rtt-s.rtt)*.5);const i=A[0];this.bestStats=i,this.appendMessage("best Cloud region: ".concat(i.region))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkCloudRegion(e){return m(this,void 0,void 0,function*(){var A,n;yield this.connect(e),this.options.protocol==="tcp"&&(yield this.switchProtocol("tcp"));const i=(A=this.room.serverInfo)===null||A===void 0?void 0:A.region;if(!i)throw new Error("Region not found");const r=yield this.room.localParticipant.streamText({topic:"test"}),s=1e3,a=1e6/s,c="A".repeat(s),l=Date.now();for(let g=0;g<a;g++)yield r.write(c);yield r.close();const u=Date.now(),d=yield(n=this.room.engine.pcManager)===null||n===void 0?void 0:n.publisher.getStats(),h={region:i,rtt:1e4,duration:u-l};return d==null||d.forEach(g=>{g.type==="candidate-pair"&&g.nominated&&(h.rtt=g.currentRoundTripTime*1e3)}),yield this.disconnect(),h})}}const fo=1e4;class Em extends YA{get description(){return"Connection via UDP vs TCP"}perform(){return m(this,void 0,void 0,function*(){const e=yield this.checkConnectionProtocol("udp"),A=yield this.checkConnectionProtocol("tcp");this.bestStats=e,e.qualityLimitationDurations.bandwidth-A.qualityLimitationDurations.bandwidth>.5||(e.packetsLost-A.packetsLost)/e.packetsSent>.01?(this.appendMessage("best connection quality via tcp"),this.bestStats=A):this.appendMessage("best connection quality via udp");const n=this.bestStats;this.appendMessage("upstream bitrate: ".concat((n.bitrateTotal/n.count/1e3/1e3).toFixed(2)," mbps")),this.appendMessage("RTT: ".concat((n.rttTotal/n.count*1e3).toFixed(2)," ms")),this.appendMessage("jitter: ".concat((n.jitterTotal/n.count*1e3).toFixed(2)," ms")),n.packetsLost>0&&this.appendWarning("packets lost: ".concat((n.packetsLost/n.packetsSent*100).toFixed(2),"%")),n.qualityLimitationDurations.bandwidth>1&&this.appendWarning("bandwidth limited ".concat((n.qualityLimitationDurations.bandwidth/(fo/1e3)*100).toFixed(2),"%")),n.qualityLimitationDurations.cpu>0&&this.appendWarning("cpu limited ".concat((n.qualityLimitationDurations.cpu/(fo/1e3)*100).toFixed(2),"%"))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkConnectionProtocol(e){return m(this,void 0,void 0,function*(){yield this.connect(),e==="tcp"?yield this.switchProtocol("tcp"):yield this.switchProtocol("udp");const A=document.createElement("canvas");A.width=1280,A.height=720;const n=A.getContext("2d");if(!n)throw new Error("Could not get canvas context");let i=0;const r=()=>{i=(i+1)%360,n.fillStyle="hsl(".concat(i,", 100%, 50%)"),n.fillRect(0,0,A.width,A.height),requestAnimationFrame(r)};r();const o=A.captureStream(30).getVideoTracks()[0],c=(yield this.room.localParticipant.publishTrack(o,{simulcast:!1,degradationPreference:"maintain-resolution",videoEncoding:{maxBitrate:2e6}})).track,l={protocol:e,packetsLost:0,packetsSent:0,qualityLimitationDurations:{},rttTotal:0,jitterTotal:0,bitrateTotal:0,count:0},u=setInterval(()=>m(this,void 0,void 0,function*(){const d=yield c.getRTCStatsReport();d==null||d.forEach(h=>{h.type==="outbound-rtp"?(l.packetsSent=h.packetsSent,l.qualityLimitationDurations=h.qualityLimitationDurations,l.bitrateTotal+=h.targetBitrate,l.count++):h.type==="remote-inbound-rtp"&&(l.packetsLost=h.packetsLost,l.rttTotal+=h.roundTripTime,l.jitterTotal+=h.jitter)})}),1e3);return yield new Promise(d=>setTimeout(d,fo)),clearInterval(u),o.stop(),A.remove(),yield this.disconnect(),l})}}class Sm extends YA{get description(){return"Can publish audio"}perform(){return m(this,void 0,void 0,function*(){var e;const A=yield this.connect(),n=yield vm();if(yield Nl(n,1e3))throw new Error("unable to detect audio from microphone");this.appendMessage("detected audio from microphone"),A.localParticipant.publishTrack(n),yield new Promise(o=>setTimeout(o,3e3));const r=yield(e=n.sender)===null||e===void 0?void 0:e.getStats();if(!r)throw new Error("Could not get RTCStats");let s=0;if(r.forEach(o=>{o.type==="outbound-rtp"&&(o.kind==="audio"||!o.kind&&o.mediaType==="audio")&&(s=o.packetsSent)}),s===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(s," audio packets"))})}}class Tm extends YA{get description(){return"Can publish video"}perform(){return m(this,void 0,void 0,function*(){var e;const A=yield this.connect(),n=yield Bm();yield this.checkForVideo(n.mediaStreamTrack),A.localParticipant.publishTrack(n),yield new Promise(s=>setTimeout(s,5e3));const i=yield(e=n.sender)===null||e===void 0?void 0:e.getStats();if(!i)throw new Error("Could not get RTCStats");let r=0;if(i.forEach(s=>{s.type==="outbound-rtp"&&(s.kind==="video"||!s.kind&&s.mediaType==="video")&&(r+=s.packetsSent)}),r===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(r," video packets"))})}checkForVideo(e){return m(this,void 0,void 0,function*(){const A=new MediaStream;A.addTrack(e.clone());const n=document.createElement("video");n.srcObject=A,n.muted=!0,yield new Promise(i=>{n.onplay=()=>{setTimeout(()=>{var r,s,o,a;const c=document.createElement("canvas"),l=e.getSettings(),u=(s=(r=l.width)!==null&&r!==void 0?r:n.videoWidth)!==null&&s!==void 0?s:1280,d=(a=(o=l.height)!==null&&o!==void 0?o:n.videoHeight)!==null&&a!==void 0?a:720;c.width=u,c.height=d;const h=c.getContext("2d");h.drawImage(n,0,0);const f=h.getImageData(0,0,c.width,c.height).data;let p=!0;for(let B=0;B<f.length;B+=4)if(f[B]!==0||f[B+1]!==0||f[B+2]!==0){p=!1;break}p?this.appendError("camera appears to be producing only black frames"):this.appendMessage("received video frames"),i()},1e3)},n.play()}),n.remove()})}}class Fm extends YA{get description(){return"Resuming connection after interruption"}perform(){return m(this,void 0,void 0,function*(){var e;const A=yield this.connect();let n=!1,i=!1,r;const s=new Promise(c=>{setTimeout(c,5e3),r=c}),o=()=>{n=!0};A.on(T.SignalReconnecting,o).on(T.Reconnecting,o).on(T.Reconnected,()=>{i=!0,r(!0)}),(e=A.engine.client.ws)===null||e===void 0||e.close();const a=A.engine.client.onClose;if(a&&a(""),yield s,n){if(!i||A.state!==J.Connected)throw this.appendWarning("reconnection is only possible in Redis-based configurations"),new Error("Not able to reconnect")}else throw new Error("Did not attempt to reconnect")})}}class km extends YA{get description(){return"Can connect via TURN"}perform(){return m(this,void 0,void 0,function*(){var e,A;const n=new $s,i=yield n.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});let r=!1,s=!1,o=!1;for(let a of i.iceServers)for(let c of a.urls)c.startsWith("turn:")?(s=!0,o=!0):c.startsWith("turns:")&&(s=!0,o=!0,r=!0),c.startsWith("stun:")&&(o=!0);o?s&&!r&&this.appendWarning("TURN is configured server side, but TURN/TLS is unavailable."):this.appendWarning("No STUN servers configured on server side."),yield n.close(),!((A=(e=this.connectOptions)===null||e===void 0?void 0:e.rtcConfig)===null||A===void 0)&&A.iceServers||s?yield this.room.connect(this.url,this.token,{rtcConfig:{iceTransportPolicy:"relay"}}):(this.appendWarning("No TURN servers configured."),this.skip(),yield new Promise(a=>setTimeout(a,0)))})}}class Im extends YA{get description(){return"Establishing WebRTC connection"}perform(){return m(this,void 0,void 0,function*(){let e=!1,A=!1;this.room.on(T.SignalConnected,()=>{const n=this.room.engine.client.onTrickle;this.room.engine.client.onTrickle=(i,r)=>{if(i.candidate){const s=new RTCIceCandidate(i);let o="".concat(s.protocol," ").concat(s.address,":").concat(s.port," ").concat(s.type);s.address&&(Rm(s.address)?o+=" (private)":s.protocol==="tcp"&&s.tcpType==="passive"?(e=!0,o+=" (passive)"):s.protocol==="udp"&&(A=!0)),this.appendMessage(o)}n&&n(i,r)},this.room.engine.pcManager&&(this.room.engine.pcManager.subscriber.onIceCandidateError=i=>{i instanceof RTCPeerConnectionIceErrorEvent&&this.appendWarning("error with ICE candidate: ".concat(i.errorCode," ").concat(i.errorText," ").concat(i.url))})});try{yield this.connect(),K.info("now the room is connected")}catch(n){throw this.appendWarning("ports need to be open on firewall in order to connect."),n}e||this.appendWarning("Server is not configured for ICE/TCP"),A||this.appendWarning("No public IPv4 UDP candidates were found. Your server is likely not configured correctly")})}}function Rm(t){const e=t.split(".");if(e.length===4){if(e[0]==="10")return!0;if(e[0]==="192"&&e[1]==="168")return!0;if(e[0]==="172"){const A=parseInt(e[1],10);if(A>=16&&A<=31)return!0}}return!1}class xm extends YA{get description(){return"Connecting to signal connection via WebSocket"}perform(){return m(this,void 0,void 0,function*(){var e,A,n;(this.url.startsWith("ws:")||this.url.startsWith("http:"))&&this.appendWarning("Server is insecure, clients may block connections to it");let i=new $s;const r=yield i.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});this.appendMessage("Connected to server, version ".concat(r.serverVersion,".")),((e=r.serverInfo)===null||e===void 0?void 0:e.edition)===Cc.Cloud&&(!((A=r.serverInfo)===null||A===void 0)&&A.region)&&this.appendMessage("LiveKit Cloud: ".concat((n=r.serverInfo)===null||n===void 0?void 0:n.region)),yield i.close()})}}class wU extends mA.EventEmitter{constructor(e,A){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.options={},this.checkResults=new Map,this.url=e,this.token=A,this.options=n}getNextCheckId(){const e=this.checkResults.size;return this.checkResults.set(e,{logs:[],status:lA.IDLE,name:"",description:""}),e}updateCheck(e,A){this.checkResults.set(e,A),this.emit("checkUpdate",e,A)}isSuccess(){return Array.from(this.checkResults.values()).every(e=>e.status!==lA.FAILED)}getResults(){return Array.from(this.checkResults.values())}createAndRunCheck(e){return m(this,void 0,void 0,function*(){const A=this.getNextCheckId(),n=new e(this.url,this.token,this.options),i=s=>{this.updateCheck(A,s)};n.on("update",i);const r=yield n.run();return n.off("update",i),r})}checkWebsocket(){return m(this,void 0,void 0,function*(){return this.createAndRunCheck(xm)})}checkWebRTC(){return m(this,void 0,void 0,function*(){return this.createAndRunCheck(Im)})}checkTURN(){return m(this,void 0,void 0,function*(){return this.createAndRunCheck(km)})}checkReconnect(){return m(this,void 0,void 0,function*(){return this.createAndRunCheck(Fm)})}checkPublishAudio(){return m(this,void 0,void 0,function*(){return this.createAndRunCheck(Sm)})}checkPublishVideo(){return m(this,void 0,void 0,function*(){return this.createAndRunCheck(Tm)})}checkConnectionProtocol(){return m(this,void 0,void 0,function*(){const e=yield this.createAndRunCheck(Em);if(e.data&&"protocol"in e.data){const A=e.data;this.options.protocol=A.protocol}return e})}checkCloudRegion(){return m(this,void 0,void 0,function*(){return this.createAndRunCheck(Qm)})}}const Ne=Symbol.for("@ts-pattern/matcher"),Bu=Symbol.for("@ts-pattern/isVariadic"),Mi="@ts-pattern/anonymous-select-key",go=t=>!!(t&&typeof t=="object"),Ni=t=>t&&!!t[Ne],be=(t,e,A)=>{if(Ni(t)){const n=t[Ne](),{matched:i,selections:r}=n.match(e);return i&&r&&Object.keys(r).forEach(s=>A(s,r[s])),i}if(go(t)){if(!go(e))return!1;if(Array.isArray(t)){if(!Array.isArray(e))return!1;let n=[],i=[],r=[];for(const s of t.keys()){const o=t[s];Ni(o)&&o[Bu]?r.push(o):r.length?i.push(o):n.push(o)}if(r.length){if(r.length>1)throw new Error("Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.");if(e.length<n.length+i.length)return!1;const s=e.slice(0,n.length),o=i.length===0?[]:e.slice(-i.length),a=e.slice(n.length,i.length===0?1/0:-i.length);return n.every((c,l)=>be(c,s[l],A))&&i.every((c,l)=>be(c,o[l],A))&&(r.length===0||be(r[0],a,A))}return t.length===e.length&&t.every((s,o)=>be(s,e[o],A))}return Reflect.ownKeys(t).every(n=>{const i=t[n];return(n in e||Ni(r=i)&&r[Ne]().matcherType==="optional")&&be(i,e[n],A);var r})}return Object.is(e,t)},We=t=>{var e,A,n;return go(t)?Ni(t)?(e=(A=(n=t[Ne]()).getSelectionKeys)==null?void 0:A.call(n))!=null?e:[]:Array.isArray(t)?Sn(t,We):Sn(Object.values(t),We):[]},Sn=(t,e)=>t.reduce((A,n)=>A.concat(e(n)),[]);function Pm(...t){if(t.length===1){const[e]=t;return A=>be(e,A,()=>{})}if(t.length===2){const[e,A]=t;return be(e,A,()=>{})}throw new Error(`isMatching wasn't given the right number of arguments: expected 1 or 2, received ${t.length}.`)}function Ue(t){return Object.assign(t,{optional:()=>mo(t),and:e=>te(t,e),or:e=>vu(t,e),select:e=>e===void 0?Tn(t):Tn(e,t)})}function po(t){return Object.assign((e=>Object.assign(e,{[Symbol.iterator](){let A=0;const n=[{value:Object.assign(e,{[Bu]:!0}),done:!1},{done:!0,value:void 0}];return{next:()=>{var i;return(i=n[A++])!=null?i:n.at(-1)}}}}))(t),{optional:()=>po(mo(t)),select:e=>po(e===void 0?Tn(t):Tn(e,t))})}function mo(t){return Ue({[Ne]:()=>({match:e=>{let A={};const n=(i,r)=>{A[i]=r};return e===void 0?(We(t).forEach(i=>n(i,void 0)),{matched:!0,selections:A}):{matched:be(t,e,n),selections:A}},getSelectionKeys:()=>We(t),matcherType:"optional"})})}const Lm=(t,e)=>{for(const A of t)if(!e(A))return!1;return!0},Dm=(t,e)=>{for(const[A,n]of t.entries())if(!e(n,A))return!1;return!0};function te(...t){return Ue({[Ne]:()=>({match:e=>{let A={};const n=(i,r)=>{A[i]=r};return{matched:t.every(i=>be(i,e,n)),selections:A}},getSelectionKeys:()=>Sn(t,We),matcherType:"and"})})}function vu(...t){return Ue({[Ne]:()=>({match:e=>{let A={};const n=(i,r)=>{A[i]=r};return Sn(t,We).forEach(i=>n(i,void 0)),{matched:t.some(i=>be(i,e,n)),selections:A}},getSelectionKeys:()=>Sn(t,We),matcherType:"or"})})}function j(t){return{[Ne]:()=>({match:e=>({matched:!!t(e)})})}}function Tn(...t){const e=typeof t[0]=="string"?t[0]:void 0,A=t.length===2?t[1]:typeof t[0]=="string"?void 0:t[0];return Ue({[Ne]:()=>({match:n=>{let i={[e??Mi]:n};return{matched:A===void 0||be(A,n,(r,s)=>{i[r]=s}),selections:i}},getSelectionKeys:()=>[e??Mi].concat(A===void 0?[]:We(A))})})}function vA(t){return typeof t=="number"}function qA(t){return typeof t=="string"}function zA(t){return typeof t=="bigint"}const Cu=Ue(j(function(t){return!0})),_m=Cu,ZA=t=>Object.assign(Ue(t),{startsWith:e=>{return ZA(te(t,(A=e,j(n=>qA(n)&&n.startsWith(A)))));var A},endsWith:e=>{return ZA(te(t,(A=e,j(n=>qA(n)&&n.endsWith(A)))));var A},minLength:e=>ZA(te(t,(A=>j(n=>qA(n)&&n.length>=A))(e))),length:e=>ZA(te(t,(A=>j(n=>qA(n)&&n.length===A))(e))),maxLength:e=>ZA(te(t,(A=>j(n=>qA(n)&&n.length<=A))(e))),includes:e=>{return ZA(te(t,(A=e,j(n=>qA(n)&&n.includes(A)))));var A},regex:e=>{return ZA(te(t,(A=e,j(n=>qA(n)&&!!n.match(A)))));var A}}),Hm=ZA(j(qA)),CA=t=>Object.assign(Ue(t),{between:(e,A)=>CA(te(t,((n,i)=>j(r=>vA(r)&&n<=r&&i>=r))(e,A))),lt:e=>CA(te(t,(A=>j(n=>vA(n)&&n<A))(e))),gt:e=>CA(te(t,(A=>j(n=>vA(n)&&n>A))(e))),lte:e=>CA(te(t,(A=>j(n=>vA(n)&&n<=A))(e))),gte:e=>CA(te(t,(A=>j(n=>vA(n)&&n>=A))(e))),int:()=>CA(te(t,j(e=>vA(e)&&Number.isInteger(e)))),finite:()=>CA(te(t,j(e=>vA(e)&&Number.isFinite(e)))),positive:()=>CA(te(t,j(e=>vA(e)&&e>0))),negative:()=>CA(te(t,j(e=>vA(e)&&e<0)))}),Om=CA(j(vA)),et=t=>Object.assign(Ue(t),{between:(e,A)=>et(te(t,((n,i)=>j(r=>zA(r)&&n<=r&&i>=r))(e,A))),lt:e=>et(te(t,(A=>j(n=>zA(n)&&n<A))(e))),gt:e=>et(te(t,(A=>j(n=>zA(n)&&n>A))(e))),lte:e=>et(te(t,(A=>j(n=>zA(n)&&n<=A))(e))),gte:e=>et(te(t,(A=>j(n=>zA(n)&&n>=A))(e))),positive:()=>et(te(t,j(e=>zA(e)&&e>0))),negative:()=>et(te(t,j(e=>zA(e)&&e<0)))}),Mm=et(j(zA)),Nm=Ue(j(function(t){return typeof t=="boolean"})),Km=Ue(j(function(t){return typeof t=="symbol"})),Vm=Ue(j(function(t){return t==null})),Gm=Ue(j(function(t){return t!=null}));var jm={__proto__:null,matcher:Ne,optional:mo,array:function(...t){return po({[Ne]:()=>({match:e=>{if(!Array.isArray(e))return{matched:!1};if(t.length===0)return{matched:!0};const A=t[0];let n={};if(e.length===0)return We(A).forEach(r=>{n[r]=[]}),{matched:!0,selections:n};const i=(r,s)=>{n[r]=(n[r]||[]).concat([s])};return{matched:e.every(r=>be(A,r,i)),selections:n}},getSelectionKeys:()=>t.length===0?[]:We(t[0])})})},set:function(...t){return Ue({[Ne]:()=>({match:e=>{if(!(e instanceof Set))return{matched:!1};let A={};if(e.size===0)return{matched:!0,selections:A};if(t.length===0)return{matched:!0};const n=(r,s)=>{A[r]=(A[r]||[]).concat([s])},i=t[0];return{matched:Lm(e,r=>be(i,r,n)),selections:A}},getSelectionKeys:()=>t.length===0?[]:We(t[0])})})},map:function(...t){return Ue({[Ne]:()=>({match:e=>{if(!(e instanceof Map))return{matched:!1};let A={};if(e.size===0)return{matched:!0,selections:A};const n=(o,a)=>{A[o]=(A[o]||[]).concat([a])};if(t.length===0)return{matched:!0};var i;if(t.length===1)throw new Error(`\`P.map\` wasn't given enough arguments. Expected (key, value), received ${(i=t[0])==null?void 0:i.toString()}`);const[r,s]=t;return{matched:Dm(e,(o,a)=>{const c=be(r,a,n),l=be(s,o,n);return c&&l}),selections:A}},getSelectionKeys:()=>t.length===0?[]:[...We(t[0]),...We(t[1])]})})},intersection:te,union:vu,not:function(t){return Ue({[Ne]:()=>({match:e=>({matched:!be(t,e,()=>{})}),getSelectionKeys:()=>[],matcherType:"not"})})},when:j,select:Tn,any:Cu,_:_m,string:Hm,number:Om,bigint:Mm,boolean:Nm,symbol:Km,nullish:Vm,nonNullable:Gm,instanceOf:function(t){return Ue(j(function(e){return A=>A instanceof e}(t)))},shape:function(t){return Ue(j(Pm(t)))}};class Wm extends Error{constructor(e){let A;try{A=JSON.stringify(e)}catch{A=e}super(`Pattern matching error: no pattern matches value ${A}`),this.input=void 0,this.input=e}}const Bo={matched:!1,value:void 0};function Ki(t){return new Jm(t,Bo)}let Jm=class Ia{constructor(e,A){this.input=void 0,this.state=void 0,this.input=e,this.state=A}with(...e){if(this.state.matched)return this;const A=e[e.length-1],n=[e[0]];let i;e.length===3&&typeof e[1]=="function"?i=e[1]:e.length>2&&n.push(...e.slice(1,e.length-1));let r=!1,s={};const o=(c,l)=>{r=!0,s[c]=l},a=!n.some(c=>be(c,this.input,o))||i&&!i(this.input)?Bo:{matched:!0,value:A(r?Mi in s?s[Mi]:s:this.input,this.input)};return new Ia(this.input,a)}when(e,A){if(this.state.matched)return this;const n=!!e(this.input);return new Ia(this.input,n?{matched:!0,value:A(this.input,this.input)}:Bo)}otherwise(e){return this.state.matched?this.state.value:e(this.input)}exhaustive(e=Xm){return this.state.matched?this.state.value:e(this.input)}run(){return this.exhaustive()}returnType(){return this}};function Xm(t){throw new Wm(t)}const $m="https://obi.getcor.io/api";var O;(function(t){t.READY="ready",t.ERROR="error",t.PAUSED="paused",t.LOADING="loading",t.THINKING="thinking",t.RESEARCHING="researching",t.AGENT_SPEAKING="agent_speaking",t.USER_SPEAKING="user_speaking",t.AWAITING_USER_INPUT="awaiting_user_input"})(O||(O={}));class wu{constructor({sessionId:e,apiBaseUrl:A}){this.currentState=O.READY,this.assistantAudioContext=null,this.userAudioContext=null,this._assistantAudioTimer=null,this._userAudioTimer=null,this.sessionId=e,this.apiBaseUrl=A||$m,this.emitter=new Zh}emit(e,A){this.emitter.emit(e,A)}on(e,A){this.emitter.on(e,A)}off(e,A){this.emitter.off(e,A)}setupRoomEventListeners(){this.room&&(this.room.on(T.LocalTrackUnpublished,e=>{e.source===E.Source.ScreenShare&&(this.screenStream=void 0)}),this.room.on(T.Disconnected,()=>{this.disconnect()}),this.room.on(T.ParticipantDisconnected,()=>{this.disconnect()}),this.room.on(T.TrackSubscribed,(e,A,n)=>{if(e.kind==="audio"&&e.attach(),e.source===E.Source.Microphone&&n.identity.includes("agent-")){const i=e.mediaStream;if(!i){console.error("No media stream available for assistant track");return}const r=new AudioContext,s=r.createAnalyser();r.createMediaStreamSource(i).connect(s),s.fftSize=2048;const a=new Uint8Array(s.frequencyBinCount);this.analyzeAudio(s,a,"ASSISTANT"),this.assistantAudioContext=r}}),this.room.on(T.ParticipantAttributesChanged,e=>{if(!e["lk.agent.state"]||this.currentState===O.RESEARCHING||this.currentState===O.PAUSED)return;const A=e["lk.agent.state"],n=Ki(A).with("listening",()=>O.USER_SPEAKING).with("speaking",()=>O.AGENT_SPEAKING).with("thinking",()=>O.AGENT_SPEAKING).otherwise(()=>{});n&&this.setState(n)}),this.room.on(T.DataReceived,async e=>{try{const A=JSON.parse(new TextDecoder().decode(e)),n=A.status||A.request;Ki(n).with("using_tool",()=>{this.currentState=O.RESEARCHING,this.emitter.emit("stateChanged",O.RESEARCHING)}).with("using_tool_ended",()=>{this.currentState=O.AGENT_SPEAKING,this.emitter.emit("stateChanged",O.AGENT_SPEAKING)}).with("share_screen",()=>{this.shareScreen()}).with("prompt_user",()=>{this.promptContinue()}).with("capture_page_html",()=>{this.emitter.emit("capturePageHTML")}).with("fill",()=>{this.emitter.emit("fill",A.value)}).otherwise(()=>{console.warn("Unknown data received:",A)})}catch(A){console.error("Error parsing data:",A)}}),this.room.localParticipant.registerRpcMethod("screen_capture",async e=>(this.emitter.emit("screenCaptureRequested"),new Promise(A=>{this.emitter.once("screenCaptureComplete",async n=>{if(n==="error"){A("error");return}try{await this.room.localParticipant.sendFile(new File([n],"screen_capture.png",{type:"image/png"}),{mimeType:"image/png",topic:"screen_capture"}),A("ok")}catch{A("error")}})}))))}async connect(){if(!this.sessionId){console.error("No session ID found"),this.emitter.emit("error",new Error("No session ID provided"));return}try{await this.requestMicrophone(),this.room=new bt({adaptiveStream:!0,dynacast:!0}),this.setupRoomEventListeners();const e=new URLSearchParams({token:this.sessionId,skip_intro:"true"}),A=`${this.apiBaseUrl}/join-token?${e.toString()}`,n=await fetch(A).then(i=>i.json());if(await this.room.connect(n.url,n.token),this.microphoneStream){const i=this.microphoneStream.getAudioTracks()[0];await this.room.localParticipant.publishTrack(i,{name:"microphone",source:E.Source.Microphone})}return{url:n.url,token:n.token}}catch(e){throw console.error("Failed to connect to LiveKit:",e),this.disconnect(),this.emitter.emit("error",e instanceof Error?e:new Error(String(e))),e}}async disconnect(){var e,A,n;this.room&&(this.room.disconnect(!0),this.room.removeAllListeners(),this.room=void 0),(e=this.screenStream)!=null&&e.track&&this.screenStream.track.stop(),this.microphoneStream&&this.microphoneStream.getTracks().forEach(i=>i.stop()),this._userAudioTimer&&(window.clearTimeout(this._userAudioTimer),this._userAudioTimer=null),this._assistantAudioTimer&&(window.clearTimeout(this._assistantAudioTimer),this._assistantAudioTimer=null),await((A=this.userAudioContext)==null?void 0:A.close().catch(()=>{})),this.userAudioContext=null,await((n=this.assistantAudioContext)==null?void 0:n.close().catch(()=>{})),this.assistantAudioContext=null,this.setState(O.READY),this.emitter.emit("disconnected")}setState(e){e!==this.currentState&&(this.currentState=e,this.emitter.emit("stateChanged",e))}async requestMicrophone(){try{const e=await navigator.mediaDevices.getUserMedia({audio:!0});this.microphoneStream=e;const A=new AudioContext;this.userAudioContext=A;const n=A.createAnalyser(),i=A.createMediaStreamSource(e),r=A.createGain();r.gain.value=1.5,i.connect(r),r.connect(n),n.fftSize=2048;const s=new Uint8Array(n.frequencyBinCount);this.analyzeAudio(n,s,"USER")}catch(e){throw console.error("Microphone permission denied:",e),new Error("Microphone permission denied")}}async shareScreen(){if(!this.room){console.warn("[obi] shareScreen called while not connected");return}this.emitter.emit("preScreenShare");try{if(this.screenStream=await this.room.localParticipant.setScreenShareEnabled(!0,{video:{displaySurface:"window"}}),!this.screenStream){console.warn("Failed to share screen");return}await this.room.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({request:"share_screen",success:!0})),{reliable:!0})}catch(e){console.error("Error sharing screen:",e),this.emitter.emit("error",e instanceof Error?e:new Error(String(e)))}}pauseRecording(){var e,A,n;this.room&&(this.setState(O.PAUSED),this.room.localParticipant.getTrackPublications().forEach(i=>{var r,s;i.handleMuted(),(s=(r=i.track)==null?void 0:r.mediaStream)==null||s.getTracks().forEach(o=>o.enabled=!1)}),(e=this.microphoneStream)==null||e.getTracks().forEach(i=>i.enabled=!1),(n=(A=this.screenStream)==null?void 0:A.track)==null||n.mute())}resumeRecording(){var e,A,n;this.room&&(this.setState(O.USER_SPEAKING),this.room.localParticipant.getTrackPublications().forEach(i=>{var r,s;i.handleUnmuted(),(s=(r=i.track)==null?void 0:r.mediaStream)==null||s.getTracks().forEach(o=>o.enabled=!0)}),(e=this.microphoneStream)==null||e.getTracks().forEach(i=>i.enabled=!0),(n=(A=this.screenStream)==null?void 0:A.track)==null||n.unmute())}async promptContinue(){await this.room.localParticipant.publishData(new TextEncoder().encode(JSON.stringify({request:"prompt_user",success:!0})),{reliable:!0})}async analyzeAudio(e,A,n){if(n==="USER"&&this.currentState===O.USER_SPEAKING||n==="ASSISTANT"&&this.currentState===O.AGENT_SPEAKING){e.getByteFrequencyData(A);const i=A.reduce((o,a)=>o+a,0)/A.length,r=Math.max(.01,Math.min(1,i/128));let s;n==="USER"&&this.currentState===O.USER_SPEAKING?s="USER":n==="ASSISTANT"&&this.currentState===O.AGENT_SPEAKING&&(s="ASSISTANT"),s&&this.emitter.emit("volume",{speaker:s,spectrum:Array.from(A),volume:r})}n==="USER"?this._userAudioTimer=window.setTimeout(()=>this.analyzeAudio(e,A,n),200):this._assistantAudioTimer=window.setTimeout(()=>this.analyzeAudio(e,A,n),200)}async sendHTML(e){if(!this.room){console.log("Cannot send HTML: Not connected to room");return}try{const A={type:"page_content",html:e,timestamp:new Date().toISOString()},n=JSON.stringify(A),r=new TextEncoder().encode(n);await this.room.localParticipant.publishData(r,{reliable:!0})}catch(A){console.error("Error sending HTML to LiveKit:",A),this.emitter.emit("error",A instanceof Error?A:new Error(String(A)))}}async reconnect(e,A,n){try{if(!e||!A)return console.error("Missing room URL or token for reconnection"),this.emitter.emit("error",new Error("Missing room URL or token for reconnection")),!1;if(await this.requestMicrophone(),this.room=new bt({adaptiveStream:!0,dynacast:!0}),this.setupRoomEventListeners(),await this.room.connect(e,A),this.microphoneStream){const i=this.microphoneStream.getAudioTracks()[0];await this.room.localParticipant.publishTrack(i,{name:"microphone",source:E.Source.Microphone})}return this.setState(n),n===O.PAUSED&&this.pauseRecording(),!0}catch(i){return console.error("Failed to reconnect to room:",i),this.disconnect(),this.emitter.emit("error",i instanceof Error?i:new Error(String(i))),!1}}}/*!
|
|
39
39
|
* html2canvas-pro 1.5.11 <https://yorickshan.github.io/html2canvas-pro/>
|
|
40
40
|
* Copyright (c) 2024-present yorickshan and html2canvas-pro contributors
|
|
41
41
|
* Released under MIT License
|