hx-live-client-plus 1.1.2 → 1.1.3
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.
|
@@ -305,7 +305,7 @@ a=extmap-allow-mixed`)!==-1){const r=s.sdp.split(`
|
|
|
305
305
|
`).filter(a=>a.trim()!=="a=extmap-allow-mixed").join(`
|
|
306
306
|
`);n.RTCSessionDescription&&s instanceof n.RTCSessionDescription?arguments[0]=new n.RTCSessionDescription({type:s.type,sdp:r}):s.sdp=r}return t.apply(this,arguments)}}function Rd(n,e){if(!(n.RTCPeerConnection&&n.RTCPeerConnection.prototype))return;const t=n.RTCPeerConnection.prototype.addIceCandidate;!t||t.length===0||(n.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():t.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function Md(n,e){if(!(n.RTCPeerConnection&&n.RTCPeerConnection.prototype))return;const t=n.RTCPeerConnection.prototype.setLocalDescription;!t||t.length===0||(n.RTCPeerConnection.prototype.setLocalDescription=function(){let s=arguments[0]||{};if(typeof s!="object"||s.type&&s.sdp)return t.apply(this,arguments);if(s={type:s.type,sdp:s.sdp},!s.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":s.type="offer";break;default:s.type="answer";break}return s.sdp||s.type!=="offer"&&s.type!=="answer"?t.apply(this,[s]):(s.type==="offer"?this.createOffer:this.createAnswer).apply(this).then(a=>t.apply(this,[a]))})}var DU=Object.freeze({__proto__:null,removeExtmapAllowMixed:Om,shimAddIceCandidateNullOrEmpty:Rd,shimConnectionState:Mm,shimMaxMessageSize:Id,shimParameterlessSetLocalDescription:Md,shimRTCIceCandidate:Pd,shimRTCIceCandidateRelayProtocol:Rm,shimSendThrowTypeError:Nd});function AU(){let{window:n}=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 t=_k,i=kU(n),s={browserDetails:i,commonShim:DU,extractVersion:ec,disableLog:_U,disableWarnings:CU,sdp:xU};switch(i.browser){case"chrome":if(!Ok||!Pm||!e.shimChrome)return t("Chrome shim is not included in this adapter release."),s;if(i.version===null)return t("Chrome shim can not determine version, not shimming."),s;t("adapter.js shimming chrome."),s.browserShim=Ok,Rd(n,i),Md(n),xk(n,i),Dk(n),Pm(n,i),Ak(n),Rk(n,i),Pk(n),Ik(n),Mk(n,i),Pd(n),Rm(n),Mm(n),Id(n,i),Nd(n),Om(n,i);break;case"firefox":if(!Gk||!Im||!e.shimFirefox)return t("Firefox shim is not included in this adapter release."),s;t("adapter.js shimming firefox."),s.browserShim=Gk,Rd(n,i),Md(n),Lk(n,i),Im(n,i),Bk(n),Vk(n),Uk(n),Fk(n),jk(n),qk(n),$k(n),Hk(n),zk(n),Pd(n),Mm(n),Id(n,i),Nd(n);break;case"safari":if(!iE||!e.shimSafari)return t("Safari shim is not included in this adapter release."),s;t("adapter.js shimming safari."),s.browserShim=iE,Rd(n,i),Md(n),Qk(n),eE(n),Yk(n),Wk(n),Kk(n),Zk(n),Xk(n),tE(n),Pd(n),Rm(n),Id(n,i),Nd(n),Om(n,i);break;default:t("Unsupported browser!");break}return s}AU({window:typeof window>"u"?void 0:window});const PU=10,Od="lk_e2ee",IU={sharedKey:!1,ratchetSalt:"LKFrameEncryptionKey",ratchetWindowSize:8,failureTolerance:PU,keyringSize:16};var gr;(function(n){n.SetKey="setKey",n.RatchetRequest="ratchetRequest",n.KeyRatcheted="keyRatcheted"})(gr||(gr={}));var rE;(function(n){n.KeyRatcheted="keyRatcheted"})(rE||(rE={}));var yr;(function(n){n.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",n.EncryptionError="encryptionError"})(yr||(yr={}));var aE;(function(n){n.Error="cryptorError"})(aE||(aE={}));function NU(){return RU()||Lm()}function Lm(){return typeof window.RTCRtpScriptTransform<"u"}function RU(){return typeof window.RTCRtpSender<"u"&&typeof window.RTCRtpSender.prototype.createEncodedStreams<"u"}class Jj extends ks.EventEmitter{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(),this.onKeyRatcheted=(t,i,s)=>{At.debug("key ratcheted event received",{ratchetResult:t,participantId:i,keyIndex:s})},this.keyInfoMap=new Map,this.options=Object.assign(Object.assign({},IU),e),this.on(gr.KeyRatcheted,this.onKeyRatcheted)}onSetEncryptionKey(e,t,i){const s={key:e,participantIdentity:t,keyIndex:i};if(!this.options.sharedKey&&!t)throw new Error("participant identity needs to be passed for encryption key if sharedKey option is false");this.keyInfoMap.set("".concat(t??"shared","-").concat(i??0),s),this.emit(gr.SetKey,s)}getKeys(){return Array.from(this.keyInfoMap.values())}getOptions(){return this.options}ratchetKey(e,t){this.emit(gr.RatchetRequest,e,t)}}class vr extends Error{constructor(e,t){super(t||"an error has occured"),this.name="LiveKitError",this.code=e}}var Nt;(function(n){n[n.NotAllowed=0]="NotAllowed",n[n.ServerUnreachable=1]="ServerUnreachable",n[n.InternalError=2]="InternalError",n[n.Cancelled=3]="Cancelled",n[n.LeaveRequest=4]="LeaveRequest",n[n.Timeout=5]="Timeout"})(Nt||(Nt={}));class Gt extends vr{constructor(e,t,i,s){super(1,e),this.name="ConnectionError",this.status=i,this.reason=t,this.context=s,this.reasonName=Nt[t]}}class Bm extends vr{constructor(e){super(21,e??"device is unsupported"),this.name="DeviceUnsupportedError"}}class $s extends vr{constructor(e){super(20,e??"track is invalid"),this.name="TrackInvalidError"}}class MU extends vr{constructor(e){super(10,e??"unsupported server"),this.name="UnsupportedServer"}}class Ei extends vr{constructor(e){super(12,e??"unexpected connection state"),this.name="UnexpectedConnectionState"}}class Um extends vr{constructor(e){super(13,e??"unable to negotiate"),this.name="NegotiationError"}}class oE extends vr{constructor(e,t){super(15,e),this.name="PublishTrackError",this.status=t}}class lE extends vr{constructor(e,t){super(15,e),this.reason=t,this.reasonName=typeof t=="string"?t:wm[t]}}var Ld;(function(n){n.PermissionDenied="PermissionDenied",n.NotFound="NotFound",n.DeviceInUse="DeviceInUse",n.Other="Other"})(Ld||(Ld={})),(function(n){function e(t){if(t&&"name"in t)return t.name==="NotFoundError"||t.name==="DevicesNotFoundError"?n.NotFound:t.name==="NotAllowedError"||t.name==="PermissionDeniedError"?n.PermissionDenied:t.name==="NotReadableError"||t.name==="TrackStartError"?n.DeviceInUse:n.Other}n.getFailure=e})(Ld||(Ld={}));var cE;(function(n){n[n.InvalidKey=0]="InvalidKey",n[n.MissingKey=1]="MissingKey",n[n.InternalError=2]="InternalError"})(cE||(cE={}));var Oe;(function(n){n.Connected="connected",n.Reconnecting="reconnecting",n.SignalReconnecting="signalReconnecting",n.Reconnected="reconnected",n.Disconnected="disconnected",n.ConnectionStateChanged="connectionStateChanged",n.Moved="moved",n.MediaDevicesChanged="mediaDevicesChanged",n.ParticipantConnected="participantConnected",n.ParticipantDisconnected="participantDisconnected",n.TrackPublished="trackPublished",n.TrackSubscribed="trackSubscribed",n.TrackSubscriptionFailed="trackSubscriptionFailed",n.TrackUnpublished="trackUnpublished",n.TrackUnsubscribed="trackUnsubscribed",n.TrackMuted="trackMuted",n.TrackUnmuted="trackUnmuted",n.LocalTrackPublished="localTrackPublished",n.LocalTrackUnpublished="localTrackUnpublished",n.LocalAudioSilenceDetected="localAudioSilenceDetected",n.ActiveSpeakersChanged="activeSpeakersChanged",n.ParticipantMetadataChanged="participantMetadataChanged",n.ParticipantNameChanged="participantNameChanged",n.ParticipantAttributesChanged="participantAttributesChanged",n.ParticipantActive="participantActive",n.RoomMetadataChanged="roomMetadataChanged",n.DataReceived="dataReceived",n.SipDTMFReceived="sipDTMFReceived",n.TranscriptionReceived="transcriptionReceived",n.ConnectionQualityChanged="connectionQualityChanged",n.TrackStreamStateChanged="trackStreamStateChanged",n.TrackSubscriptionPermissionChanged="trackSubscriptionPermissionChanged",n.TrackSubscriptionStatusChanged="trackSubscriptionStatusChanged",n.AudioPlaybackStatusChanged="audioPlaybackChanged",n.VideoPlaybackStatusChanged="videoPlaybackChanged",n.MediaDevicesError="mediaDevicesError",n.ParticipantPermissionsChanged="participantPermissionsChanged",n.SignalConnected="signalConnected",n.RecordingStatusChanged="recordingStatusChanged",n.ParticipantEncryptionStatusChanged="participantEncryptionStatusChanged",n.EncryptionError="encryptionError",n.DCBufferStatusChanged="dcBufferStatusChanged",n.ActiveDeviceChanged="activeDeviceChanged",n.ChatMessage="chatMessage",n.LocalTrackSubscribed="localTrackSubscribed",n.MetricsReceived="metricsReceived"})(Oe||(Oe={}));var ze;(function(n){n.TrackPublished="trackPublished",n.TrackSubscribed="trackSubscribed",n.TrackSubscriptionFailed="trackSubscriptionFailed",n.TrackUnpublished="trackUnpublished",n.TrackUnsubscribed="trackUnsubscribed",n.TrackMuted="trackMuted",n.TrackUnmuted="trackUnmuted",n.LocalTrackPublished="localTrackPublished",n.LocalTrackUnpublished="localTrackUnpublished",n.ParticipantMetadataChanged="participantMetadataChanged",n.ParticipantNameChanged="participantNameChanged",n.DataReceived="dataReceived",n.SipDTMFReceived="sipDTMFReceived",n.TranscriptionReceived="transcriptionReceived",n.IsSpeakingChanged="isSpeakingChanged",n.ConnectionQualityChanged="connectionQualityChanged",n.TrackStreamStateChanged="trackStreamStateChanged",n.TrackSubscriptionPermissionChanged="trackSubscriptionPermissionChanged",n.TrackSubscriptionStatusChanged="trackSubscriptionStatusChanged",n.MediaDevicesError="mediaDevicesError",n.AudioStreamAcquired="audioStreamAcquired",n.ParticipantPermissionsChanged="participantPermissionsChanged",n.PCTrackAdded="pcTrackAdded",n.AttributesChanged="attributesChanged",n.LocalTrackSubscribed="localTrackSubscribed",n.ChatMessage="chatMessage",n.Active="active"})(ze||(ze={}));var Ge;(function(n){n.TransportsCreated="transportsCreated",n.Connected="connected",n.Disconnected="disconnected",n.Resuming="resuming",n.Resumed="resumed",n.Restarting="restarting",n.Restarted="restarted",n.SignalResumed="signalResumed",n.SignalRestarted="signalRestarted",n.Closing="closing",n.MediaTrackAdded="mediaTrackAdded",n.ActiveSpeakersUpdate="activeSpeakersUpdate",n.DataPacketReceived="dataPacketReceived",n.RTPVideoMapUpdate="rtpVideoMapUpdate",n.DCBufferStatusChanged="dcBufferStatusChanged",n.ParticipantUpdate="participantUpdate",n.RoomUpdate="roomUpdate",n.SpeakersChanged="speakersChanged",n.StreamStateChanged="streamStateChanged",n.ConnectionQualityUpdate="connectionQualityUpdate",n.SubscriptionError="subscriptionError",n.SubscriptionPermissionUpdate="subscriptionPermissionUpdate",n.RemoteMute="remoteMute",n.SubscribedQualityUpdate="subscribedQualityUpdate",n.LocalTrackUnpublished="localTrackUnpublished",n.LocalTrackSubscribed="localTrackSubscribed",n.Offline="offline",n.SignalRequestResponse="signalRequestResponse",n.SignalConnected="signalConnected",n.RoomMoved="roomMoved"})(Ge||(Ge={}));var He;(function(n){n.Message="message",n.Muted="muted",n.Unmuted="unmuted",n.Restarted="restarted",n.Ended="ended",n.Subscribed="subscribed",n.Unsubscribed="unsubscribed",n.UpdateSettings="updateSettings",n.UpdateSubscription="updateSubscription",n.AudioPlaybackStarted="audioPlaybackStarted",n.AudioPlaybackFailed="audioPlaybackFailed",n.AudioSilenceDetected="audioSilenceDetected",n.VisibilityChanged="visibilityChanged",n.VideoDimensionsChanged="videoDimensionsChanged",n.VideoPlaybackStarted="videoPlaybackStarted",n.VideoPlaybackFailed="videoPlaybackFailed",n.ElementAttached="elementAttached",n.ElementDetached="elementDetached",n.UpstreamPaused="upstreamPaused",n.UpstreamResumed="upstreamResumed",n.SubscriptionPermissionChanged="subscriptionPermissionChanged",n.SubscriptionStatusChanged="subscriptionStatusChanged",n.SubscriptionFailed="subscriptionFailed",n.TrackProcessorUpdate="trackProcessorUpdate",n.AudioTrackFeatureUpdate="audioTrackFeatureUpdate",n.TranscriptionReceived="transcriptionReceived",n.TimeSyncUpdate="timeSyncUpdate",n.PreConnectBufferFlushed="preConnectBufferFlushed"})(He||(He={}));function OU(n){return typeof n>"u"?n:typeof structuredClone=="function"?structuredClone(n):JSON.parse(JSON.stringify(n))}const LU=/version\/(\d+(\.?_?\d+)+)/i;let Fm;function bn(n){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(typeof navigator>"u")return;const t=navigator.userAgent.toLowerCase();if(Fm===void 0||e){const i=BU.find(s=>{let{test:r}=s;return r.test(t)});Fm=i==null?void 0:i.describe(t)}return Fm}const BU=[{test:/firefox|iceweasel|fxios/i,describe(n){return{name:"Firefox",version:Bd(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,n),os:n.toLowerCase().includes("fxios")?"iOS":void 0,osVersion:Vm(n)}}},{test:/chrom|crios|crmo/i,describe(n){return{name:"Chrome",version:Bd(/(?:chrome|chromium|crios|crmo)\/(\d+(\.?_?\d+)+)/i,n),os:n.toLowerCase().includes("crios")?"iOS":void 0,osVersion:Vm(n)}}},{test:/safari|applewebkit/i,describe(n){return{name:"Safari",version:Bd(LU,n),os:n.includes("mobile/")?"iOS":"macOS",osVersion:Vm(n)}}}];function Bd(n,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1;const i=e.match(n);return i&&i.length>=t&&i[t]||""}function Vm(n){return n.includes("mac os")?Bd(/\(.+?(\d+_\d+(:?_\d+)?)/,n,1).replace(/_/g,"."):void 0}var UU="2.13.3";const FU=UU,VU=16;class Ui{}Ui.setTimeout=function(){return setTimeout(...arguments)},Ui.setInterval=function(){return setInterval(...arguments)},Ui.clearTimeout=function(){return clearTimeout(...arguments)},Ui.clearInterval=function(){return clearInterval(...arguments)};const jU=5e3,tc=[];var Vn;(function(n){n[n.LOW=0]="LOW",n[n.MEDIUM=1]="MEDIUM",n[n.HIGH=2]="HIGH"})(Vn||(Vn={}));class Ae extends ks.EventEmitter{constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};var s;super(),this.attachedElements=[],this.isMuted=!1,this.streamState=Ae.StreamState.Active,this.isInBackground=!1,this._currentBitrate=0,this.log=At,this.appVisibilityChangedListener=()=>{this.backgroundTimeout&&clearTimeout(this.backgroundTimeout),document.visibilityState==="hidden"?this.backgroundTimeout=setTimeout(()=>this.handleAppVisibilityChanged(),jU):this.handleAppVisibilityChanged()},this.log=js((s=i.loggerName)!==null&&s!==void 0?s:es.Track),this.loggerContextCb=i.loggerContextCb,this.setMaxListeners(100),this.kind=t,this._mediaStreamTrack=e,this._mediaStreamID=e.id,this.source=Ae.Source.Unknown}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),wt(this))}get currentBitrate(){return this._currentBitrate}get mediaStreamTrack(){return this._mediaStreamTrack}get mediaStreamID(){return this._mediaStreamID}attach(e){let t="audio";this.kind===Ae.Kind.Video&&(t="video"),this.attachedElements.length===0&&this.kind===Ae.Kind.Video&&this.addAppVisibilityListener(),e||(t==="audio"&&(tc.forEach(r=>{r.parentElement===null&&!e&&(e=r)}),e&&tc.splice(tc.indexOf(e),1)),e||(e=document.createElement(t))),this.attachedElements.includes(e)||this.attachedElements.push(e),Eo(this.mediaStreamTrack,e);const i=e.srcObject.getTracks(),s=i.some(r=>r.kind==="audio");return e.play().then(()=>{this.emit(s?He.AudioPlaybackStarted:He.VideoPlaybackStarted)}).catch(r=>{r.name==="NotAllowedError"?this.emit(s?He.AudioPlaybackFailed:He.VideoPlaybackFailed,r):r.name==="AbortError"?At.debug("".concat(s?"audio":"video"," playback aborted, likely due to new play request")):At.warn("could not playback ".concat(s?"audio":"video"),r),s&&e&&i.some(a=>a.kind==="video")&&r.name==="NotAllowedError"&&(e.muted=!0,e.play().catch(()=>{}))}),this.emit(He.ElementAttached,e),e}detach(e){try{if(e){wo(this.mediaStreamTrack,e);const i=this.attachedElements.indexOf(e);return i>=0&&(this.attachedElements.splice(i,1),this.recycleElement(e),this.emit(He.ElementDetached,e)),e}const t=[];return this.attachedElements.forEach(i=>{wo(this.mediaStreamTrack,i),t.push(i),this.recycleElement(i),this.emit(He.ElementDetached,i)}),this.attachedElements=[],t}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=js(e.loggerName)),e.loggerContextCb&&(this.loggerContextCb=e.loggerContextCb)}recycleElement(e){if(e instanceof HTMLAudioElement){let t=!0;e.pause(),tc.forEach(i=>{i.parentElement||(t=!1)}),t&&tc.push(e)}}handleAppVisibilityChanged(){return ie(this,void 0,void 0,function*(){this.isInBackground=document.visibilityState==="hidden",!this.isInBackground&&this.kind===Ae.Kind.Video&&setTimeout(()=>this.attachedElements.forEach(e=>e.play().catch(()=>{})),0)})}addAppVisibilityListener(){Sn()?(this.isInBackground=document.visibilityState==="hidden",document.addEventListener("visibilitychange",this.appVisibilityChangedListener)):this.isInBackground=!1}removeAppVisibilityListener(){Sn()&&document.removeEventListener("visibilitychange",this.appVisibilityChangedListener)}}function Eo(n,e){let t;e.srcObject instanceof MediaStream?t=e.srcObject:t=new MediaStream;let i;n.kind==="audio"?i=t.getAudioTracks():i=t.getVideoTracks(),i.includes(n)||(i.forEach(s=>{t.removeTrack(s)}),t.addTrack(n)),(!ua()||!(e instanceof HTMLVideoElement))&&(e.autoplay=!0),e.muted=t.getAudioTracks().length===0,e instanceof HTMLVideoElement&&(e.playsInline=!0),e.srcObject!==t&&(e.srcObject=t,(ua()||xo())&&e instanceof HTMLVideoElement&&setTimeout(()=>{e.srcObject=t,e.play().catch(()=>{})},0))}function wo(n,e){if(e.srcObject instanceof MediaStream){const t=e.srcObject;t.removeTrack(n),t.getTracks().length>0?e.srcObject=t:e.srcObject=null}}(function(n){let e;(function(u){u.Audio="audio",u.Video="video",u.Unknown="unknown"})(e=n.Kind||(n.Kind={}));let t;(function(u){u.Camera="camera",u.Microphone="microphone",u.ScreenShare="screen_share",u.ScreenShareAudio="screen_share_audio",u.Unknown="unknown"})(t=n.Source||(n.Source={}));let i;(function(u){u.Active="active",u.Paused="paused",u.Unknown="unknown"})(i=n.StreamState||(n.StreamState={}));function s(u){switch(u){case e.Audio:return Jn.AUDIO;case e.Video:return Jn.VIDEO;default:return Jn.DATA}}n.kindToProto=s;function r(u){switch(u){case Jn.AUDIO:return e.Audio;case Jn.VIDEO:return e.Video;default:return e.Unknown}}n.kindFromProto=r;function a(u){switch(u){case t.Camera:return _i.CAMERA;case t.Microphone:return _i.MICROPHONE;case t.ScreenShare:return _i.SCREEN_SHARE;case t.ScreenShareAudio:return _i.SCREEN_SHARE_AUDIO;default:return _i.UNKNOWN}}n.sourceToProto=a;function l(u){switch(u){case _i.CAMERA:return t.Camera;case _i.MICROPHONE:return t.Microphone;case _i.SCREEN_SHARE:return t.ScreenShare;case _i.SCREEN_SHARE_AUDIO:return t.ScreenShareAudio;default:return t.Unknown}}n.sourceFromProto=l;function c(u){switch(u){case bm.ACTIVE:return i.Active;case bm.PAUSED:return i.Paused;default:return i.Unknown}}n.streamStateFromProto=c})(Ae||(Ae={}));class Ht{constructor(e,t,i,s,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(t!==void 0&&i!==void 0)this.width=e,this.height=t,this.aspectRatio=e/t,this.encoding={maxBitrate:i,maxFramerate:s,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 qU=["vp8","h264"],$U=["vp8","h264","vp9","av1"];function HU(n){return!!qU.find(e=>e===n)}var uE;(function(n){n[n.PREFER_REGRESSION=0]="PREFER_REGRESSION",n[n.SIMULCAST=1]="SIMULCAST",n[n.REGRESSION=2]="REGRESSION"})(uE||(uE={}));var jm;(function(n){n.telephone={maxBitrate:12e3},n.speech={maxBitrate:24e3},n.music={maxBitrate:48e3},n.musicStereo={maxBitrate:64e3},n.musicHighQuality={maxBitrate:96e3},n.musicHighQualityStereo={maxBitrate:128e3}})(jm||(jm={}));const ic={h90:new Ht(160,90,9e4,20),h180:new Ht(320,180,16e4,20),h216:new Ht(384,216,18e4,20),h360:new Ht(640,360,45e4,20),h540:new Ht(960,540,8e5,25),h720:new Ht(1280,720,17e5,30),h1080:new Ht(1920,1080,3e6,30),h1440:new Ht(2560,1440,5e6,30),h2160:new Ht(3840,2160,8e6,30)},qm={h120:new Ht(160,120,7e4,20),h180:new Ht(240,180,125e3,20),h240:new Ht(320,240,14e4,20),h360:new Ht(480,360,33e4,20),h480:new Ht(640,480,5e5,20),h540:new Ht(720,540,6e5,25),h720:new Ht(960,720,13e5,30),h1080:new Ht(1440,1080,23e5,30),h1440:new Ht(1920,1440,38e5,30)},$m={h360fps3:new Ht(640,360,2e5,3,"medium"),h360fps15:new Ht(640,360,4e5,15,"medium"),h720fps5:new Ht(1280,720,8e5,5,"medium"),h720fps15:new Ht(1280,720,15e5,15,"medium"),h720fps30:new Ht(1280,720,2e6,30,"medium"),h1080fps15:new Ht(1920,1080,25e5,15,"medium"),h1080fps30:new Ht(1920,1080,5e6,30,"medium"),original:new Ht(0,0,7e6,30,"medium")},zU="|",dE="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension";function GU(n){const e=n.split(zU);return e.length>1?[e[0],n.substr(e[0].length+1)]:[n,""]}function Tn(n){return ie(this,void 0,void 0,function*(){return new Promise(e=>Ui.setTimeout(e,n))})}function Hm(){return"addTransceiver"in RTCPeerConnection.prototype}function zm(){return"addTrack"in RTCPeerConnection.prototype}function WU(){if(!("getCapabilities"in RTCRtpSender)||ua())return!1;const n=RTCRtpSender.getCapabilities("video");let e=!1;if(n){for(const t of n.codecs)if(t.mimeType==="video/AV1"){e=!0;break}}return e}function KU(){if(!("getCapabilities"in RTCRtpSender)||xo())return!1;if(ua()){const t=bn();if(t!=null&&t.version&&br(t.version,"16")<0)return!1}const n=RTCRtpSender.getCapabilities("video");let e=!1;if(n){for(const t of n.codecs)if(t.mimeType==="video/VP9"){e=!0;break}}return e}function Hs(n){return n==="av1"||n==="vp9"}function Gm(n){return document?(n||(n=document.createElement("audio")),"setSinkId"in n):!1}function YU(){return typeof RTCPeerConnection>"u"?!1:Hm()||zm()}function xo(){var n;return((n=bn())===null||n===void 0?void 0:n.name)==="Firefox"}function ua(){var n;return((n=bn())===null||n===void 0?void 0:n.name)==="Safari"}function hE(){const n=bn();return(n==null?void 0:n.name)==="Safari"||(n==null?void 0:n.os)==="iOS"}function XU(){const n=bn();return(n==null?void 0:n.name)==="Safari"&&n.version.startsWith("17.")}function JU(n){return n||(n=bn()),(n==null?void 0:n.name)==="Safari"&&br(n.version,"18.3")>0}function fE(){var n,e;return Sn()?(e=(n=navigator.userAgentData)===null||n===void 0?void 0:n.mobile)!==null&&e!==void 0?e:/Tablet|iPad|Mobile|Android|BlackBerry/.test(navigator.userAgent):!1}function QU(){const n=bn(),e="17.2";if(n)return n.name!=="Safari"&&n.os!=="iOS"||n.os==="iOS"&&n.osVersion&&br(e,n.osVersion)>=0?!0:n.name==="Safari"&&br(e,n.version)>=0}function Sn(){return typeof document<"u"}function Es(){return navigator.product=="ReactNative"}function Wm(n){return n.hostname.endsWith(".livekit.cloud")||n.hostname.endsWith(".livekit.run")}function pE(){if(global&&global.LiveKitReactNativeGlobal)return global.LiveKitReactNativeGlobal}function mE(){if(!Es())return;let n=pE();if(n)return n.platform}function gE(){if(Sn())return window.devicePixelRatio;if(Es()){let n=pE();if(n)return n.devicePixelRatio}return 1}function br(n,e){const t=n.split("."),i=e.split("."),s=Math.min(t.length,i.length);for(let r=0;r<s;++r){const a=parseInt(t[r],10),l=parseInt(i[r],10);if(a>l)return 1;if(a<l)return-1;if(r===s-1&&a===l)return 0}return n===""&&e!==""?-1:e===""?1:t.length==i.length?0:t.length<i.length?-1:1}function ZU(n){for(const e of n)e.target.handleResize(e)}function e8(n){for(const e of n)e.target.handleVisibilityChanged(e)}let Km=null;const yE=()=>(Km||(Km=new ResizeObserver(ZU)),Km);let Ym=null;const vE=()=>(Ym||(Ym=new IntersectionObserver(e8,{root:null,rootMargin:"0px"})),Ym);function t8(){var n;const e=new $3({sdk:ek.JS,protocol:VU,version:FU});return Es()&&(e.os=(n=mE())!==null&&n!==void 0?n:""),e}function bE(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:16,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:16,t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;const s=document.createElement("canvas");s.width=n,s.height=e;const r=s.getContext("2d");r==null||r.fillRect(0,0,s.width,s.height),i&&r&&(r.beginPath(),r.arc(n/2,e/2,50,0,Math.PI*2,!0),r.closePath(),r.fillStyle="grey",r.fill());const a=s.captureStream(),[l]=a.getTracks();if(!l)throw Error("Could not get empty media stream video track");return l.enabled=t,l}let nc;function Xm(){if(!nc){const n=new AudioContext,e=n.createOscillator(),t=n.createGain();t.gain.setValueAtTime(0,0);const i=n.createMediaStreamDestination();if(e.connect(t),t.connect(i),e.start(),[nc]=i.stream.getAudioTracks(),!nc)throw Error("Could not get empty media stream audio track");nc.enabled=!1}return nc.clone()}class Do{constructor(e,t){this.onFinally=t,this.promise=new Promise((i,s)=>ie(this,void 0,void 0,function*(){this.resolve=i,this.reject=s,e&&(yield e(i,s))})).finally(()=>{var i;return(i=this.onFinally)===null||i===void 0?void 0:i.call(this)})}}function i8(n){return $U.includes(n)}function Tr(n){if(typeof n=="string"||typeof n=="number")return n;if(Array.isArray(n))return n[0];if(n.exact)return Array.isArray(n.exact)?n.exact[0]:n.exact;if(n.ideal)return Array.isArray(n.ideal)?n.ideal[0]:n.ideal;throw Error("could not unwrap constraint")}function n8(n){return n.startsWith("http")?n.replace(/^(http)/,"ws"):n}function Jm(n){return n.startsWith("ws")?n.replace(/^(ws)/,"http"):n}function s8(n,e){return n.segments.map(t=>{let{id:i,text:s,language:r,startTime:a,endTime:l,final:c}=t;var u;const d=(u=e.get(i))!==null&&u!==void 0?u:Date.now(),f=Date.now();return c?e.delete(i):e.set(i,d),{id:i,text:s,startTime:Number.parseInt(a.toString()),endTime:Number.parseInt(l.toString()),final:c,language:r,firstReceivedTime:d,lastReceivedTime:f}})}function r8(n){const{id:e,timestamp:t,message:i,editTimestamp:s}=n;return{id:e,timestamp:Number.parseInt(t.toString()),editTimestamp:s?Number.parseInt(s.toString()):void 0,message:i}}function TE(n){switch(n.reason){case Nt.LeaveRequest:return n.context;case Nt.Cancelled:return Qn.CLIENT_INITIATED;case Nt.NotAllowed:return Qn.USER_REJECTED;case Nt.ServerUnreachable:return Qn.JOIN_FAILURE;default:return Qn.UNKNOWN_REASON}}function Ud(n){return n!==void 0?Number(n):void 0}function da(n){return n!==void 0?BigInt(n):void 0}function Ao(n){return!!n&&!(n instanceof MediaStreamTrack)&&n.isLocal}function ws(n){return!!n&&n.kind==Ae.Kind.Audio}function Po(n){return!!n&&n.kind==Ae.Kind.Video}function Sr(n){return Ao(n)&&Po(n)}function zs(n){return Ao(n)&&ws(n)}function Qm(n){return!!n&&!n.isLocal}function a8(n){return!!n&&!n.isLocal}function Zm(n){return Qm(n)&&Po(n)}function o8(n){return n.isLocal}function l8(n,e){const t=[];let i=new TextEncoder().encode(n);for(;i.length>e;){let s=e;for(;s>0;){const r=i[s];if(r!==void 0&&(r&192)!==128)break;s--}t.push(i.slice(0,s)),i=i.slice(s)}return i.length>0&&t.push(i),t}function SE(n,e,t){var i,s,r,a;const{optionsWithoutProcessor:l,audioProcessor:c,videoProcessor:u}=kE(n??{}),d=e==null?void 0:e.processor,f=t==null?void 0:t.processor,g=l??{};return g.audio===!0&&(g.audio={}),g.video===!0&&(g.video={}),g.audio&&(eg(g.audio,e),(i=(r=g.audio).deviceId)!==null&&i!==void 0||(r.deviceId={ideal:"default"}),(c||d)&&(g.audio.processor=c??d)),g.video&&(eg(g.video,t),(s=(a=g.video).deviceId)!==null&&s!==void 0||(a.deviceId={ideal:"default"}),(u||f)&&(g.video.processor=u??f)),g}function eg(n,e){return Object.keys(e).forEach(t=>{n[t]===void 0&&(n[t]=e[t])}),n}function tg(n){var e,t,i,s;const r={};if(n.video)if(typeof n.video=="object"){const a={},l=a,c=n.video;Object.keys(c).forEach(u=>{switch(u){case"resolution":eg(l,c.resolution);break;default:l[u]=c[u]}}),r.video=a,(e=(i=r.video).deviceId)!==null&&e!==void 0||(i.deviceId={ideal:"default"})}else r.video=n.video?{deviceId:{ideal:"default"}}:!1;else r.video=!1;return n.audio?typeof n.audio=="object"?(r.audio=n.audio,(t=(s=r.audio).deviceId)!==null&&t!==void 0||(s.deviceId={ideal:"default"})):r.audio={deviceId:{ideal:"default"}}:r.audio=!1,r}function _E(n){return ie(this,arguments,void 0,function(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:200;return(function*(){const i=CE();if(i){const s=i.createAnalyser();s.fftSize=2048;const r=s.frequencyBinCount,a=new Uint8Array(r);i.createMediaStreamSource(new MediaStream([e.mediaStreamTrack])).connect(s),yield Tn(t),s.getByteTimeDomainData(a);const c=a.some(u=>u!==128&&u!==0);return i.close(),!c}return!1})()})}function CE(){var n;const e=typeof window<"u"&&(window.AudioContext||window.webkitAudioContext);if(e){const t=new e({latencyHint:"interactive"});if(t.state==="suspended"&&typeof window<"u"&&(!((n=window.document)===null||n===void 0)&&n.body)){const i=()=>ie(this,void 0,void 0,function*(){var s;try{t.state==="suspended"&&(yield t.resume())}catch(r){console.warn("Error trying to auto-resume audio context",r)}(s=window.document.body)===null||s===void 0||s.removeEventListener("click",i)});window.document.body.addEventListener("click",i)}return t}}function c8(n){return n==="audioinput"?Ae.Source.Microphone:n==="videoinput"?Ae.Source.Camera:Ae.Source.Unknown}function ig(n){return n===Ae.Source.Microphone?"audioinput":n===Ae.Source.Camera?"videoinput":void 0}function u8(n){var e,t;let i=(e=n.video)!==null&&e!==void 0?e:!0;return n.resolution&&n.resolution.width>0&&n.resolution.height>0&&(i=typeof i=="boolean"?{}:i,ua()?i=Object.assign(Object.assign({},i),{width:{max:n.resolution.width},height:{max:n.resolution.height},frameRate:n.resolution.frameRate}):i=Object.assign(Object.assign({},i),{width:{ideal:n.resolution.width},height:{ideal:n.resolution.height},frameRate:n.resolution.frameRate})),{audio:(t=n.audio)!==null&&t!==void 0?t:!1,video:i,controller:n.controller,selfBrowserSurface:n.selfBrowserSurface,surfaceSwitching:n.surfaceSwitching,systemAudio:n.systemAudio,preferCurrentTab:n.preferCurrentTab}}function Fd(n){return n.split("/")[1].toLowerCase()}function d8(n){const e=[];return n.forEach(t=>{t.track!==void 0&&e.push(new km({cid:t.track.mediaStreamID,track:t.trackInfo}))}),e}function wt(n){return"mediaStreamTrack"in n?{trackID:n.sid,source:n.source,muted:n.isMuted,enabled:n.mediaStreamTrack.enabled,kind:n.kind,streamID:n.mediaStreamID,streamTrackID:n.mediaStreamTrack.id}:{trackID:n.trackSid,enabled:n.isEnabled,muted:n.isMuted,trackInfo:Object.assign({mimeType:n.mimeType,name:n.trackName,encrypted:n.isEncrypted,kind:n.kind,source:n.source},n.track?wt(n.track):{})}}function h8(){return typeof RTCRtpReceiver<"u"&&"getSynchronizationSources"in RTCRtpReceiver}function f8(n,e){var t;n===void 0&&(n={}),e===void 0&&(e={});const i=[...Object.keys(e),...Object.keys(n)],s={};for(const r of i)n[r]!==e[r]&&(s[r]=(t=e[r])!==null&&t!==void 0?t:"");return s}function kE(n){const e=Object.assign({},n);let t,i;return typeof e.audio=="object"&&e.audio.processor&&(t=e.audio.processor,e.audio=Object.assign(Object.assign({},e.audio),{processor:void 0})),typeof e.video=="object"&&e.video.processor&&(i=e.video.processor,e.video=Object.assign(Object.assign({},e.video),{processor:void 0})),{audioProcessor:t,videoProcessor:i,optionsWithoutProcessor:OU(e)}}function p8(n){switch(n){case _i.CAMERA:return Ae.Source.Camera;case _i.MICROPHONE:return Ae.Source.Microphone;case _i.SCREEN_SHARE:return Ae.Source.ScreenShare;case _i.SCREEN_SHARE_AUDIO:return Ae.Source.ScreenShareAudio;default:return Ae.Source.Unknown}}class m8 extends ks.EventEmitter{constructor(e){super(),this.onWorkerMessage=t=>{var i,s;const{kind:r,data:a}=t.data;switch(r){case"error":At.error(a.error.message),this.emit(yr.EncryptionError,a.error);break;case"initAck":a.enabled&&this.keyProvider.getKeys().forEach(l=>{this.postKey(l)});break;case"enable":if(a.enabled&&this.keyProvider.getKeys().forEach(l=>{this.postKey(l)}),this.encryptionEnabled!==a.enabled&&a.participantIdentity===((i=this.room)===null||i===void 0?void 0:i.localParticipant.identity))this.emit(yr.ParticipantEncryptionStatusChanged,a.enabled,this.room.localParticipant),this.encryptionEnabled=a.enabled;else if(a.participantIdentity){const l=(s=this.room)===null||s===void 0?void 0:s.getParticipantByIdentity(a.participantIdentity);if(!l)throw TypeError("couldn't set encryption status, participant not found".concat(a.participantIdentity));this.emit(yr.ParticipantEncryptionStatusChanged,a.enabled,l)}break;case"ratchetKey":this.keyProvider.emit(gr.KeyRatcheted,a.ratchetResult,a.participantIdentity,a.keyIndex);break}},this.onWorkerError=t=>{At.error("e2ee worker encountered an error:",{error:t.error}),this.emit(yr.EncryptionError,t.error)},this.keyProvider=e.keyProvider,this.worker=e.worker,this.encryptionEnabled=!1}setup(e){if(!NU())throw new Bm("tried to setup end-to-end encryption on an unsupported browser");if(At.info("setting up e2ee"),e!==this.room){this.room=e,this.setupEventListeners(e,this.keyProvider);const t={kind:"init",data:{keyProviderOptions:this.keyProvider.getOptions(),loglevel:yU.getLevel()}};this.worker&&(At.info("initializing worker",{worker:this.worker}),this.worker.onmessage=this.onWorkerMessage,this.worker.onerror=this.onWorkerError,this.worker.postMessage(t))}}setParticipantCryptorEnabled(e,t){At.debug("set e2ee to ".concat(e," for participant ").concat(t)),this.postEnable(e,t)}setSifTrailer(e){!e||e.length===0?At.warn("ignoring server sent trailer as it's empty"):this.postSifTrailer(e)}setupEngine(e){e.on(Ge.RTPVideoMapUpdate,t=>{this.postRTPMap(t)})}setupEventListeners(e,t){e.on(Oe.TrackPublished,(i,s)=>this.setParticipantCryptorEnabled(i.trackInfo.encryption!==An.NONE,s.identity)),e.on(Oe.ConnectionStateChanged,i=>{i===Ot.Connected&&e.remoteParticipants.forEach(s=>{s.trackPublications.forEach(r=>{this.setParticipantCryptorEnabled(r.trackInfo.encryption!==An.NONE,s.identity)})})}).on(Oe.TrackUnsubscribed,(i,s,r)=>{var a;const l={kind:"removeTransform",data:{participantIdentity:r.identity,trackId:i.mediaStreamID}};(a=this.worker)===null||a===void 0||a.postMessage(l)}).on(Oe.TrackSubscribed,(i,s,r)=>{this.setupE2EEReceiver(i,r.identity,s.trackInfo)}).on(Oe.SignalConnected,()=>{if(!this.room)throw new TypeError("expected room to be present on signal connect");t.getKeys().forEach(i=>{this.postKey(i)}),this.setParticipantCryptorEnabled(this.room.localParticipant.isE2EEEnabled,this.room.localParticipant.identity)}),e.localParticipant.on(ze.LocalTrackPublished,i=>ie(this,void 0,void 0,function*(){this.setupE2EESender(i.track,i.track.sender)})),t.on(gr.SetKey,i=>this.postKey(i)).on(gr.RatchetRequest,(i,s)=>this.postRatchetRequest(i,s))}postRatchetRequest(e,t){if(!this.worker)throw Error("could not ratchet key, worker is missing");const i={kind:"ratchetRequest",data:{participantIdentity:e,keyIndex:t}};this.worker.postMessage(i)}postKey(e){let{key:t,participantIdentity:i,keyIndex:s}=e;var r;if(!this.worker)throw Error("could not set key, worker is missing");const a={kind:"setKey",data:{participantIdentity:i,isPublisher:i===((r=this.room)===null||r===void 0?void 0:r.localParticipant.identity),key:t,keyIndex:s}};this.worker.postMessage(a)}postEnable(e,t){if(this.worker){const i={kind:"enable",data:{enabled:e,participantIdentity:t}};this.worker.postMessage(i)}else throw new ReferenceError("failed to enable e2ee, worker is not ready")}postRTPMap(e){var t;if(!this.worker)throw TypeError("could not post rtp map, worker is missing");if(!(!((t=this.room)===null||t===void 0)&&t.localParticipant.identity))throw TypeError("could not post rtp map, local participant identity is missing");const i={kind:"setRTPMap",data:{map:e,participantIdentity:this.room.localParticipant.identity}};this.worker.postMessage(i)}postSifTrailer(e){if(!this.worker)throw Error("could not post SIF trailer, worker is missing");const t={kind:"setSifTrailer",data:{trailer:e}};this.worker.postMessage(t)}setupE2EEReceiver(e,t,i){if(e.receiver){if(!(i!=null&&i.mimeType)||i.mimeType==="")throw new TypeError("MimeType missing from trackInfo, cannot set up E2EE cryptor");this.handleReceiver(e.receiver,e.mediaStreamID,t,e.kind==="video"?Fd(i.mimeType):void 0)}}setupE2EESender(e,t){if(!Ao(e)||!t){t||At.warn("early return because sender is not ready");return}this.handleSender(t,e.mediaStreamID,void 0)}handleReceiver(e,t,i,s){return ie(this,void 0,void 0,function*(){if(this.worker){if(Lm()){const r={kind:"decode",participantIdentity:i,trackId:t,codec:s};e.transform=new RTCRtpScriptTransform(this.worker,r)}else{if(Od in e&&s){const c={kind:"updateCodec",data:{trackId:t,codec:s,participantIdentity:i}};this.worker.postMessage(c);return}let r=e.writableStream,a=e.readableStream;if(!r||!a){const c=e.createEncodedStreams();e.writableStream=c.writable,r=c.writable,e.readableStream=c.readable,a=c.readable}const l={kind:"decode",data:{readableStream:a,writableStream:r,trackId:t,codec:s,participantIdentity:i}};this.worker.postMessage(l,[a,r])}e[Od]=!0}})}handleSender(e,t,i){var s;if(!(Od in e||!this.worker)){if(!(!((s=this.room)===null||s===void 0)&&s.localParticipant.identity)||this.room.localParticipant.identity==="")throw TypeError("local identity needs to be known in order to set up encrypted sender");if(Lm()){At.info("initialize script transform");const r={kind:"encode",participantIdentity:this.room.localParticipant.identity,trackId:t,codec:i};e.transform=new RTCRtpScriptTransform(this.worker,r)}else{At.info("initialize encoded streams");const r=e.createEncodedStreams(),a={kind:"encode",data:{readableStream:r.readable,writableStream:r.writable,codec:i,trackId:t,participantIdentity:this.room.localParticipant.identity}};this.worker.postMessage(a,[r.readable,r.writable])}e[Od]=!0}}}const ng="default";class Ri{constructor(){this._previousDevices=[]}static getInstance(){return this.instance===void 0&&(this.instance=new Ri),this.instance}get previousDevices(){return this._previousDevices}getDevices(e){return ie(this,arguments,void 0,function(t){var i=this;let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return(function*(){var r;if(((r=Ri.userMediaPromiseMap)===null||r===void 0?void 0:r.size)>0){At.debug("awaiting getUserMedia promise");try{t?yield Ri.userMediaPromiseMap.get(t):yield Promise.all(Ri.userMediaPromiseMap.values())}catch{At.warn("error waiting for media permissons")}}let a=yield navigator.mediaDevices.enumerateDevices();if(s&&!(ua()&&i.hasDeviceInUse(t))&&(a.filter(c=>c.kind===t).length===0||a.some(c=>{const u=c.label==="",d=t?c.kind===t:!0;return u&&d}))){const c={video:t!=="audioinput"&&t!=="audiooutput",audio:t!=="videoinput"&&{deviceId:{ideal:"default"}}},u=yield navigator.mediaDevices.getUserMedia(c);a=yield navigator.mediaDevices.enumerateDevices(),u.getTracks().forEach(d=>{d.stop()})}return i._previousDevices=a,t&&(a=a.filter(l=>l.kind===t)),a})()})}normalizeDeviceId(e,t,i){return ie(this,void 0,void 0,function*(){if(t!==ng)return t;const s=yield this.getDevices(e),r=s.find(l=>l.deviceId===ng);if(!r){At.warn("could not reliably determine default device");return}const a=s.find(l=>l.deviceId!==ng&&l.groupId===(i??r.groupId));if(!a){At.warn("could not reliably determine default device");return}return a==null?void 0:a.deviceId})}hasDeviceInUse(e){return e?Ri.userMediaPromiseMap.has(e):Ri.userMediaPromiseMap.size>0}}Ri.mediaDeviceKinds=["audioinput","audiooutput","videoinput"],Ri.userMediaPromiseMap=new Map;var sc;(function(n){n[n.WAITING=0]="WAITING",n[n.RUNNING=1]="RUNNING",n[n.COMPLETED=2]="COMPLETED"})(sc||(sc={}));class g8{constructor(){this.pendingTasks=new Map,this.taskMutex=new gn,this.nextTaskIndex=0}run(e){return ie(this,void 0,void 0,function*(){const t={id:this.nextTaskIndex++,enqueuedAt:Date.now(),status:sc.WAITING};this.pendingTasks.set(t.id,t);const i=yield this.taskMutex.lock();try{return t.executedAt=Date.now(),t.status=sc.RUNNING,yield e()}finally{t.status=sc.COMPLETED,this.pendingTasks.delete(t.id),i()}})}flush(){return ie(this,void 0,void 0,function*(){return this.run(()=>ie(this,void 0,void 0,function*(){}))})}snapshot(){return Array.from(this.pendingTasks.values())}}function y8(n,e){const t=new URL(n8(n));return e.forEach((i,s)=>{t.searchParams.set(s,i)}),EE(t,"rtc")}function v8(n){const e=new URL(Jm(n));return EE(e,"validate")}function b8(n){return n.endsWith("/")?n:"".concat(n,"/")}function EE(n,e){return n.pathname="".concat(b8(n.pathname)).concat(e),n.toString()}const T8=["syncState","trickle","offer","answer","simulate","leave"];function S8(n){const e=T8.indexOf(n.case)>=0;return At.trace("request allowed to bypass queue:",{canPass:e,req:n}),e}var Jt;(function(n){n[n.CONNECTING=0]="CONNECTING",n[n.CONNECTED=1]="CONNECTED",n[n.RECONNECTING=2]="RECONNECTING",n[n.DISCONNECTING=3]="DISCONNECTING",n[n.DISCONNECTED=4]="DISCONNECTED"})(Jt||(Jt={}));class sg{get currentState(){return this.state}get isDisconnected(){return this.state===Jt.DISCONNECTING||this.state===Jt.DISCONNECTED}get isEstablishingConnection(){return this.state===Jt.CONNECTING||this.state===Jt.RECONNECTING}getNextRequestId(){return this._requestId+=1,this._requestId}constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var i;this.rtt=0,this.state=Jt.DISCONNECTED,this.log=At,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=js((i=t.loggerName)!==null&&i!==void 0?i:es.Signal),this.loggerContextCb=t.loggerContextCb,this.useJSON=e,this.requestQueue=new g8,this.queuedRequests=[],this.closingLock=new gn,this.connectionLock=new gn,this.state=Jt.DISCONNECTED}get logContext(){var e,t;return(t=(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this))!==null&&t!==void 0?t:{}}join(e,t,i,s){return ie(this,void 0,void 0,function*(){return this.state=Jt.CONNECTING,this.options=i,yield this.connect(e,t,i,s)})}reconnect(e,t,i,s){return ie(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=Jt.RECONNECTING,this.clearPingInterval(),yield this.connect(e,t,Object.assign(Object.assign({},this.options),{reconnect:!0,sid:i,reconnectReason:s}))})}connect(e,t,i,s){this.connectOptions=i;const r=t8(),a=_8(t,r,i),l=y8(e,a),c=v8(l);return new Promise((u,d)=>ie(this,void 0,void 0,function*(){const f=yield this.connectionLock.lock();try{const g=()=>ie(this,void 0,void 0,function*(){this.close(),clearTimeout(T),d(new Gt("room connection has been cancelled (signal)",Nt.Cancelled))}),T=setTimeout(()=>{this.close(),d(new Gt("room connection has timed out (signal)",Nt.ServerUnreachable))},i.websocketTimeout);s!=null&&s.aborted&&g(),s==null||s.addEventListener("abort",g);const S=new URL(l);S.searchParams.has("access_token")&&S.searchParams.set("access_token","<redacted>"),this.log.debug("connecting to ".concat(S),Object.assign({reconnect:i.reconnect,reconnectReason:i.reconnectReason},this.logContext)),this.ws&&(yield this.close(!1)),this.ws=new WebSocket(l),this.ws.binaryType="arraybuffer",this.ws.onopen=()=>{clearTimeout(T)},this.ws.onerror=m=>ie(this,void 0,void 0,function*(){if(this.state!==Jt.CONNECTED){this.state=Jt.DISCONNECTED,clearTimeout(T);try{const _=yield fetch(c);if(_.status.toFixed(0).startsWith("4")){const k=yield _.text();d(new Gt(k,Nt.NotAllowed,_.status))}else d(new Gt("Encountered unknown websocket error during connection: ".concat(m.toString()),Nt.InternalError,_.status))}catch(_){d(new Gt(_ instanceof Error?_.message:"server was not reachable",Nt.ServerUnreachable))}return}this.handleWSError(m)}),this.ws.onmessage=m=>ie(this,void 0,void 0,function*(){var _,k,R;let D;if(typeof m.data=="string"){const F=JSON.parse(m.data);D=ak.fromJson(F,{ignoreUnknownFields:!0})}else if(m.data instanceof ArrayBuffer)D=ak.fromBinary(new Uint8Array(m.data));else{this.log.error("could not decode websocket message: ".concat(typeof m.data),this.logContext);return}if(this.state!==Jt.CONNECTED){let F=!1;if(((_=D.message)===null||_===void 0?void 0:_.case)==="join"?(this.state=Jt.CONNECTED,s==null||s.removeEventListener("abort",g),this.pingTimeoutDuration=D.message.value.pingTimeout,this.pingIntervalDuration=D.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()),u(D.message.value)):this.state===Jt.RECONNECTING&&D.message.case!=="leave"?(this.state=Jt.CONNECTED,s==null||s.removeEventListener("abort",g),this.startPingInterval(),((k=D.message)===null||k===void 0?void 0:k.case)==="reconnect"?u(D.message.value):(this.log.debug("declaring signal reconnected without reconnect response received",this.logContext),u(void 0),F=!0)):this.isEstablishingConnection&&D.message.case==="leave"?d(new Gt("Received leave request while trying to (re)connect",Nt.LeaveRequest,void 0,D.message.value.reason)):i.reconnect||d(new Gt("did not receive join response, got ".concat((R=D.message)===null||R===void 0?void 0:R.case," instead"),Nt.InternalError)),!F)return}this.signalLatency&&(yield Tn(this.signalLatency)),this.handleSignalResponse(D)}),this.ws.onclose=m=>{this.isEstablishingConnection&&d(new Gt("Websocket got closed during a (re)connection attempt",Nt.InternalError)),this.log.warn("websocket closed",Object.assign(Object.assign({},this.logContext),{reason:m.reason,code:m.code,wasClean:m.wasClean,state:this.state})),this.handleOnClose(m.reason)}}finally{f()}}))}close(){return ie(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return(function*(){const i=yield e.closingLock.lock();try{if(e.clearPingInterval(),t&&(e.state=Jt.DISCONNECTING),e.ws){e.ws.onmessage=null,e.ws.onopen=null,e.ws.onclose=null;const s=new Promise(r=>{e.ws?e.ws.onclose=()=>{r()}:r()});e.ws.readyState<e.ws.CLOSING&&(e.ws.close(),yield Promise.race([s,Tn(250)])),e.ws=void 0}}finally{t&&(e.state=Jt.DISCONNECTED),i()}})()})}sendOffer(e){this.log.debug("sending offer",Object.assign(Object.assign({},this.logContext),{offerSdp:e.sdp})),this.sendRequest({case:"offer",value:Vd(e)})}sendAnswer(e){return this.log.debug("sending answer",Object.assign(Object.assign({},this.logContext),{answerSdp:e.sdp})),this.sendRequest({case:"answer",value:Vd(e)})}sendIceCandidate(e,t){return this.log.debug("sending ice candidate",Object.assign(Object.assign({},this.logContext),{candidate:e})),this.sendRequest({case:"trickle",value:new _m({candidateInit:JSON.stringify(e),target:t})})}sendMuteTrack(e,t){return this.sendRequest({case:"mute",value:new Cm({sid:e,muted:t})})}sendAddTrack(e){return this.sendRequest({case:"addTrack",value:e})}sendUpdateLocalMetadata(e,t){return ie(this,arguments,void 0,function(i,s){var r=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return(function*(){const l=r.getNextRequestId();return yield r.sendRequest({case:"updateMetadata",value:new uk({requestId:l,metadata:i,name:s,attributes:a})}),l})()})}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,t){return this.sendRequest({case:"updateLayers",value:new ck({trackSid:e,layers:t})})}sendUpdateSubscriptionPermissions(e,t){return this.sendRequest({case:"subscriptionPermission",value:new fk({allParticipants:e,trackPermissions:t})})}sendSimulateScenario(e){return this.sendRequest({case:"simulate",value:e})}sendPing(){return Promise.all([this.sendRequest({case:"ping",value:ii.parse(Date.now())}),this.sendRequest({case:"pingReq",value:new gk({timestamp:ii.parse(Date.now()),rtt:ii.parse(this.rtt)})})])}sendUpdateLocalAudioTrack(e,t){return this.sendRequest({case:"updateAudioTrack",value:new lk({trackSid:e,features:t})})}sendLeave(){return this.sendRequest({case:"leave",value:new wd({reason:Qn.CLIENT_INITIATED,action:Co.DISCONNECT})})}sendRequest(e){return ie(this,arguments,void 0,function(t){var i=this;let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return(function*(){if(!s&&!S8(t)&&i.state===Jt.RECONNECTING){i.queuedRequests.push(()=>ie(i,void 0,void 0,function*(){yield this.sendRequest(t,!0)}));return}if(s||(yield i.requestQueue.flush()),i.signalLatency&&(yield Tn(i.signalLatency)),!i.ws||i.ws.readyState!==i.ws.OPEN){i.log.error("cannot send signal request before connected, type: ".concat(t==null?void 0:t.case),i.logContext);return}const a=new G3({message:t});try{i.useJSON?i.ws.send(a.toJsonString()):i.ws.send(a.toBinary())}catch(l){i.log.error("error sending signal message",Object.assign(Object.assign({},i.logContext),{error:l}))}})()})}handleSignalResponse(e){var t,i;const s=e.message;if(s==null){this.log.debug("received unsupported message",this.logContext);return}let r=!1;if(s.case==="answer"){const a=wE(s.value);this.onAnswer&&this.onAnswer(a)}else if(s.case==="offer"){const a=wE(s.value);this.onOffer&&this.onOffer(a)}else if(s.case==="trickle"){const a=JSON.parse(s.value.candidateInit);this.onTrickle&&this.onTrickle(a,s.value.target)}else s.case==="update"?this.onParticipantUpdate&&this.onParticipantUpdate((t=s.value.participants)!==null&&t!==void 0?t:[]):s.case==="trackPublished"?this.onLocalTrackPublished&&this.onLocalTrackPublished(s.value):s.case==="speakersChanged"?this.onSpeakersChanged&&this.onSpeakersChanged((i=s.value.speakers)!==null&&i!==void 0?i:[]):s.case==="leave"?this.onLeave&&this.onLeave(s.value):s.case==="mute"?this.onRemoteMuteChanged&&this.onRemoteMuteChanged(s.value.sid,s.value.muted):s.case==="roomUpdate"?this.onRoomUpdate&&s.value.room&&this.onRoomUpdate(s.value.room):s.case==="connectionQuality"?this.onConnectionQuality&&this.onConnectionQuality(s.value):s.case==="streamStateUpdate"?this.onStreamStateUpdate&&this.onStreamStateUpdate(s.value):s.case==="subscribedQualityUpdate"?this.onSubscribedQualityUpdate&&this.onSubscribedQualityUpdate(s.value):s.case==="subscriptionPermissionUpdate"?this.onSubscriptionPermissionUpdate&&this.onSubscriptionPermissionUpdate(s.value):s.case==="refreshToken"?this.onTokenRefresh&&this.onTokenRefresh(s.value):s.case==="trackUnpublished"?this.onLocalTrackUnpublished&&this.onLocalTrackUnpublished(s.value):s.case==="subscriptionResponse"?this.onSubscriptionError&&this.onSubscriptionError(s.value):s.case==="pong"||(s.case==="pongResp"?(this.rtt=Date.now()-Number.parseInt(s.value.lastPingTimestamp.toString()),this.resetPingTimeout(),r=!0):s.case==="requestResponse"?this.onRequestResponse&&this.onRequestResponse(s.value):s.case==="trackSubscribed"?this.onLocalTrackSubscribed&&this.onLocalTrackSubscribed(s.value.trackSid):s.case==="roomMoved"?(this.onTokenRefresh&&this.onTokenRefresh(s.value.token),this.onRoomMoved&&this.onRoomMoved(s.value)):this.log.debug("unsupported message",Object.assign(Object.assign({},this.logContext),{msgCase:s.case})));r||this.resetPingTimeout()}setReconnected(){for(;this.queuedRequests.length>0;){const e=this.queuedRequests.shift();e&&this.requestQueue.run(e)}}handleOnClose(e){return ie(this,void 0,void 0,function*(){if(this.state===Jt.DISCONNECTED)return;const t=this.onClose;yield this.close(),this.log.debug("websocket connection closed: ".concat(e),Object.assign(Object.assign({},this.logContext),{reason:e})),t&&t(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=Ui.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&&Ui.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=Ui.setInterval(()=>{this.sendPing()},this.pingIntervalDuration*1e3)}clearPingInterval(){this.log.debug("clearing ping interval",this.logContext),this.clearPingTimeout(),this.pingInterval&&Ui.clearInterval(this.pingInterval)}}function wE(n){const e={type:"offer",sdp:n.sdp};switch(n.type){case"answer":case"offer":case"pranswer":case"rollback":e.type=n.type;break}return e}function Vd(n){return new la({sdp:n.sdp,type:n.type})}function _8(n,e,t){var i;const s=new URLSearchParams;return s.set("access_token",n),t.reconnect&&(s.set("reconnect","1"),t.sid&&s.set("sid",t.sid)),s.set("auto_subscribe",t.autoSubscribe?"1":"0"),s.set("sdk",Es()?"reactnative":"js"),s.set("version",e.version),s.set("protocol",e.protocol.toString()),e.deviceModel&&s.set("device_model",e.deviceModel),e.os&&s.set("os",e.os),e.osVersion&&s.set("os_version",e.osVersion),e.browser&&s.set("browser",e.browser),e.browserVersion&&s.set("browser_version",e.browserVersion),t.adaptiveStream&&s.set("adaptive_stream","1"),t.reconnectReason&&s.set("reconnect_reason",t.reconnectReason.toString()),!((i=navigator.connection)===null||i===void 0)&&i.type&&s.set("network",navigator.connection.type),s}var ts={},rg={},ag={exports:{}},xE;function og(){if(xE)return ag.exports;xE=1;var n=ag.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 t="candidate:%s %d %s %d %s %d typ %s";return t+=e.raddr!=null?" raddr %s rport %d":"%v%v",t+=e.tcptype!=null?" tcptype %s":"%v",e.generation!=null&&(t+=" generation %d"),t+=e["network-id"]!=null?" network-id %d":"%v",t+=e["network-cost"]!=null?" network-cost %d":"%v",t}},{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 t="ssrc:%d";return e.attribute!=null&&(t+=" %s",e.value!=null&&(t+=":%s")),t}},{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 t="mediaclk:";return t+=e.id!=null?"id=%s %s":"%v%s",t+=e.mediaClockValue!=null?"=%s":"",t+=e.rateNumerator!=null?" rate=%s":"",t+=e.rateDenominator!=null?"/%s":"",t}},{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(n).forEach(function(e){var t=n[e];t.forEach(function(i){i.reg||(i.reg=/(.*)/),i.format||(i.format="%s")})}),ag.exports}var DE;function C8(){return DE||(DE=1,(function(n){var e=function(l){return String(Number(l))===l?Number(l):l},t=function(l,c,u,d){if(d&&!u)c[d]=e(l[1]);else for(var f=0;f<u.length;f+=1)l[f+1]!=null&&(c[u[f]]=e(l[f+1]))},i=function(l,c,u){var d=l.name&&l.names;l.push&&!c[l.push]?c[l.push]=[]:d&&!c[l.name]&&(c[l.name]={});var f=l.push?{}:d?c[l.name]:c;t(u.match(l.reg),f,l.names,l.name),l.push&&c[l.push].push(f)},s=og(),r=RegExp.prototype.test.bind(/^([a-z])=(.*)/);n.parse=function(l){var c={},u=[],d=c;return l.split(/(\r\n|\r|\n)/).filter(r).forEach(function(f){var g=f[0],T=f.slice(2);g==="m"&&(u.push({rtp:[],fmtp:[]}),d=u[u.length-1]);for(var S=0;S<(s[g]||[]).length;S+=1){var m=s[g][S];if(m.reg.test(T))return i(m,d,T)}}),c.media=u,c};var a=function(l,c){var u=c.split(/=(.+)/,2);return u.length===2?l[u[0]]=e(u[1]):u.length===1&&c.length>1&&(l[u[0]]=void 0),l};n.parseParams=function(l){return l.split(/;\s?/).reduce(a,{})},n.parseFmtpConfig=n.parseParams,n.parsePayloads=function(l){return l.toString().split(" ").map(Number)},n.parseRemoteCandidates=function(l){for(var c=[],u=l.split(" ").map(e),d=0;d<u.length;d+=3)c.push({component:u[d],ip:u[d+1],port:u[d+2]});return c},n.parseImageAttributes=function(l){return l.split(" ").map(function(c){return c.substring(1,c.length-1).split(",").reduce(a,{})})},n.parseSimulcastStreamList=function(l){return l.split(";").map(function(c){return c.split(",").map(function(u){var d,f=!1;return u[0]!=="~"?d=e(u):(d=e(u.substring(1,u.length)),f=!0),{scid:d,paused:f}})})}})(rg)),rg}var lg,AE;function k8(){if(AE)return lg;AE=1;var n=og(),e=/%[sdv%]/g,t=function(a){var l=1,c=arguments,u=c.length;return a.replace(e,function(d){if(l>=u)return d;var f=c[l];switch(l+=1,d){case"%%":return"%";case"%s":return String(f);case"%d":return Number(f);case"%v":return""}})},i=function(a,l,c){var u=l.format instanceof Function?l.format(l.push?c:c[l.name]):l.format,d=[a+"="+u];if(l.names)for(var f=0;f<l.names.length;f+=1){var g=l.names[f];l.name?d.push(c[l.name][g]):d.push(c[l.names[f]])}else d.push(c[l.name]);return t.apply(null,d)},s=["v","o","s","i","u","e","p","c","b","t","r","z","a"],r=["i","c","b","a"];return lg=function(a,l){l=l||{},a.version==null&&(a.version=0),a.name==null&&(a.name=" "),a.media.forEach(function(f){f.payloads==null&&(f.payloads="")});var c=l.outerOrder||s,u=l.innerOrder||r,d=[];return c.forEach(function(f){n[f].forEach(function(g){g.name in a&&a[g.name]!=null?d.push(i(f,g,a)):g.push in a&&a[g.push]!=null&&a[g.push].forEach(function(T){d.push(i(f,g,T))})})}),a.media.forEach(function(f){d.push(i("m",n.m[0],f)),u.forEach(function(g){n[g].forEach(function(T){T.name in f&&f[T.name]!=null?d.push(i(g,T,f)):T.push in f&&f[T.push]!=null&&f[T.push].forEach(function(S){d.push(i(g,T,S))})})})}),d.join(`\r
|
|
307
307
|
`)+`\r
|
|
308
|
-
`},lg}var PE;function E8(){if(PE)return ts;PE=1;var n=C8(),e=k8(),t=og();return ts.grammar=t,ts.write=e,ts.parse=n.parse,ts.parseParams=n.parseParams,ts.parseFmtpConfig=n.parseFmtpConfig,ts.parsePayloads=n.parsePayloads,ts.parseRemoteCandidates=n.parseRemoteCandidates,ts.parseImageAttributes=n.parseImageAttributes,ts.parseSimulcastStreamList=n.parseSimulcastStreamList,ts}var _r=E8();function cg(n,e,t){var i,s,r;e===void 0&&(e=50),t===void 0&&(t={});var a=(i=t.isImmediate)!=null&&i,l=(s=t.callback)!=null&&s,c=t.maxWait,u=Date.now(),d=[];function f(){if(c!==void 0){var T=Date.now()-u;if(T+e>=c)return c-T}return e}var g=function(){var T=[].slice.call(arguments),S=this;return new Promise(function(m,_){var k=a&&r===void 0;if(r!==void 0&&clearTimeout(r),r=setTimeout(function(){if(r=void 0,u=Date.now(),!a){var D=n.apply(S,T);l&&l(D),d.forEach(function(F){return(0,F.resolve)(D)}),d=[]}},f()),k){var R=n.apply(S,T);return l&&l(R),m(R)}d.push({resolve:m,reject:_})})};return g.cancel=function(T){r!==void 0&&clearTimeout(r),d.forEach(function(S){return(0,S.reject)(T)}),d=[]},g}const w8=.7,x8=20,Io={NegotiationStarted:"negotiationStarted",NegotiationComplete:"negotiationComplete",RTPVideoPayloadTypes:"rtpVideoPayloadTypes"};class IE extends ks.EventEmitter{get pc(){return this._pc||(this._pc=this.createPC()),this._pc}constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var i;super(),this.log=At,this.ddExtID=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=cg(s=>ie(this,void 0,void 0,function*(){this.emit(Io.NegotiationStarted);try{yield this.createAndSendOffer()}catch(r){if(s)s(r);else throw r}}),x8),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=js((i=t.loggerName)!==null&&i!==void 0?i:es.PCTransport),this.loggerOptions=t,this.config=e,this._pc=this.createPC()}createPC(){const e=new RTCPeerConnection(this.config);return e.onicecandidate=t=>{var i;t.candidate&&((i=this.onIceCandidate)===null||i===void 0||i.call(this,t.candidate))},e.onicecandidateerror=t=>{var i;(i=this.onIceCandidateError)===null||i===void 0||i.call(this,t)},e.oniceconnectionstatechange=()=>{var t;(t=this.onIceConnectionStateChange)===null||t===void 0||t.call(this,e.iceConnectionState)},e.onsignalingstatechange=()=>{var t;(t=this.onSignalingStatechange)===null||t===void 0||t.call(this,e.signalingState)},e.onconnectionstatechange=()=>{var t;(t=this.onConnectionStateChange)===null||t===void 0||t.call(this,e.connectionState)},e.ondatachannel=t=>{var i;(i=this.onDataChannel)===null||i===void 0||i.call(this,t)},e.ontrack=t=>{var i;(i=this.onTrack)===null||i===void 0||i.call(this,t)},e}get logContext(){var e,t;return Object.assign({},(t=(e=this.loggerOptions).loggerContextCb)===null||t===void 0?void 0:t.call(e))}get isICEConnected(){return this._pc!==null&&(this.pc.iceConnectionState==="connected"||this.pc.iceConnectionState==="completed")}addIceCandidate(e){return ie(this,void 0,void 0,function*(){if(this.pc.remoteDescription&&!this.restartingIce)return this.pc.addIceCandidate(e);this.pendingCandidates.push(e)})}setRemoteDescription(e){return ie(this,void 0,void 0,function*(){var t;let i;if(e.type==="offer"){let{stereoMids:s,nackMids:r}=D8(e);this.remoteStereoMids=s,this.remoteNackMids=r}else if(e.type==="answer"){const s=_r.parse((t=e.sdp)!==null&&t!==void 0?t:"");s.media.forEach(r=>{r.type==="audio"&&this.trackBitrates.some(a=>{if(!a.transceiver||r.mid!=a.transceiver.mid)return!1;let l=0;if(r.rtp.some(u=>u.codec.toUpperCase()===a.codec.toUpperCase()?(l=u.payload,!0):!1),l===0)return!0;let c=!1;for(const u of r.fmtp)if(u.payload===l){u.config=u.config.split(";").filter(d=>!d.includes("maxaveragebitrate")).join(";"),a.maxbr>0&&(u.config+=";maxaveragebitrate=".concat(a.maxbr*1e3)),c=!0;break}return c||a.maxbr>0&&r.fmtp.push({payload:l,config:"maxaveragebitrate=".concat(a.maxbr*1e3)}),!0})}),i=_r.write(s)}yield this.setMungedSDP(e,i,!0),this.pendingCandidates.forEach(s=>{this.pc.addIceCandidate(s)}),this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate?(this.renegotiate=!1,yield this.createAndSendOffer()):e.type==="answer"&&(this.emit(Io.NegotiationComplete),e.sdp&&_r.parse(e.sdp).media.forEach(r=>{r.type==="video"&&this.emit(Io.RTPVideoPayloadTypes,r.rtp)}))})}createAndSendOffer(e){return ie(this,void 0,void 0,function*(){var t;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 i=yield this.pc.createOffer(e);this.log.debug("original offer",Object.assign({sdp:i.sdp},this.logContext));const s=_r.parse((t=i.sdp)!==null&&t!==void 0?t:"");s.media.forEach(r=>{RE(r),r.type==="audio"?NE(r,[],[]):r.type==="video"&&this.trackBitrates.some(a=>{if(!r.msid||!a.cid||!r.msid.includes(a.cid))return!1;let l=0;if(r.rtp.some(u=>u.codec.toUpperCase()===a.codec.toUpperCase()?(l=u.payload,!0):!1),l===0||(Hs(a.codec)&&this.ensureVideoDDExtensionForSVC(r,s),a.codec!=="av1"))return!0;const c=Math.round(a.maxbr*w8);for(const u of r.fmtp)if(u.payload===l){u.config.includes("x-google-start-bitrate")||(u.config+=";x-google-start-bitrate=".concat(c));break}return!0})}),yield this.setMungedSDP(i,_r.write(s)),this.onOffer(i)})}createAndSetAnswer(){return ie(this,void 0,void 0,function*(){var e;const t=yield this.pc.createAnswer(),i=_r.parse((e=t.sdp)!==null&&e!==void 0?e:"");return i.media.forEach(s=>{RE(s),s.type==="audio"&&NE(s,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(t,_r.write(i)),t})}createDataChannel(e,t){return this.pc.createDataChannel(e,t)}addTransceiver(e,t){return this.pc.addTransceiver(e,t)}addTrack(e){if(!this._pc)throw new Ei("PC closed, cannot add track");return this._pc.addTrack(e)}setTrackCodecBitrate(e){this.trackBitrates.push(e)}setConfiguration(e){var t;if(!this._pc)throw new Ei("PC closed, cannot configure");return(t=this._pc)===null||t===void 0?void 0:t.setConfiguration(e)}canRemoveTrack(){var e;return!!(!((e=this._pc)===null||e===void 0)&&e.removeTrack)}removeTrack(e){var t;return(t=this._pc)===null||t===void 0?void 0:t.removeTrack(e)}getConnectionState(){var e,t;return(t=(e=this._pc)===null||e===void 0?void 0:e.connectionState)!==null&&t!==void 0?t:"closed"}getICEConnectionState(){var e,t;return(t=(e=this._pc)===null||e===void 0?void 0:e.iceConnectionState)!==null&&t!==void 0?t:"closed"}getSignallingState(){var e,t;return(t=(e=this._pc)===null||e===void 0?void 0:e.signalingState)!==null&&t!==void 0?t:"closed"}getTransceivers(){var e,t;return(t=(e=this._pc)===null||e===void 0?void 0:e.getTransceivers())!==null&&t!==void 0?t:[]}getSenders(){var e,t;return(t=(e=this._pc)===null||e===void 0?void 0:e.getSenders())!==null&&t!==void 0?t:[]}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 ie(this,void 0,void 0,function*(){var e;if(!this._pc)return;let t="";const i=new Map,s=new Map;if((yield this._pc.getStats()).forEach(l=>{switch(l.type){case"transport":t=l.selectedCandidatePairId;break;case"candidate-pair":t===""&&l.selected&&(t=l.id),i.set(l.id,l);break;case"remote-candidate":s.set(l.id,"".concat(l.address,":").concat(l.port));break}}),t==="")return;const a=(e=i.get(t))===null||e===void 0?void 0:e.remoteCandidateId;if(a!==void 0)return s.get(a)})}setMungedSDP(e,t,i){return ie(this,void 0,void 0,function*(){if(t){const s=e.sdp;e.sdp=t;try{this.log.debug("setting munged ".concat(i?"remote":"local"," description"),this.logContext),i?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:t})),e.sdp=s}}try{i?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e)}catch(s){let r="unknown error";s instanceof Error?r=s.message:typeof s=="string"&&(r=s);const a={error:r,sdp:e.sdp};throw!i&&this.pc.remoteDescription&&(a.remoteSdp=this.pc.remoteDescription),this.log.error("unable to set ".concat(e.type),Object.assign(Object.assign({},this.logContext),{fields:a})),new Um(r)}})}ensureVideoDDExtensionForSVC(e,t){var i,s;if(!((i=e.ext)===null||i===void 0?void 0:i.some(a=>a.uri===dE))){if(this.ddExtID===0){let a=0;t.media.forEach(l=>{var c;l.type==="video"&&((c=l.ext)===null||c===void 0||c.forEach(u=>{u.value>a&&(a=u.value)}))}),this.ddExtID=a+1}(s=e.ext)===null||s===void 0||s.push({value:this.ddExtID,uri:dE})}}}function NE(n,e,t){let i=0;n.rtp.some(s=>s.codec==="opus"?(i=s.payload,!0):!1),i>0&&(n.rtcpFb||(n.rtcpFb=[]),t.includes(n.mid)&&!n.rtcpFb.some(s=>s.payload===i&&s.type==="nack")&&n.rtcpFb.push({payload:i,type:"nack"}),e.includes(n.mid)&&n.fmtp.some(s=>s.payload===i?(s.config.includes("stereo=1")||(s.config+=";stereo=1"),!0):!1))}function D8(n){var e;const t=[],i=[],s=_r.parse((e=n.sdp)!==null&&e!==void 0?e:"");let r=0;return s.media.forEach(a=>{var l;a.type==="audio"&&(a.rtp.some(c=>c.codec==="opus"?(r=c.payload,!0):!1),!((l=a.rtcpFb)===null||l===void 0)&&l.some(c=>c.payload===r&&c.type==="nack")&&i.push(a.mid),a.fmtp.some(c=>c.payload===r?(c.config.includes("sprop-stereo=1")&&t.push(a.mid),!0):!1))}),{stereoMids:t,nackMids:i}}function RE(n){if(n.connection){const e=n.connection.ip.indexOf(":")>=0;(n.connection.version===4&&e||n.connection.version===6&&!e)&&(n.connection.ip="0.0.0.0",n.connection.version=4)}}const ug="vp8",A8={audioPreset:jm.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:$m.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:ug,backupCodec:!0,preConnectBuffer:!1},ME={deviceId:{ideal:"default"},autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},OE={deviceId:{ideal:"default"},resolution:ic.h720.resolution},P8={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new bU,disconnectOnPageLeave:!0,webAudioMix:!1},dg={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};var ui;(function(n){n[n.NEW=0]="NEW",n[n.CONNECTING=1]="CONNECTING",n[n.CONNECTED=2]="CONNECTED",n[n.FAILED=3]="FAILED",n[n.CLOSING=4]="CLOSING",n[n.CLOSED=5]="CLOSED"})(ui||(ui={}));class I8{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}constructor(e,t,i){var s;this.peerConnectionTimeout=dg.peerConnectionTimeout,this.log=At,this.updateState=()=>{var r;const a=this.state,l=this.requiredTransports.map(c=>c.getConnectionState());l.every(c=>c==="connected")?this.state=ui.CONNECTED:l.some(c=>c==="failed")?this.state=ui.FAILED:l.some(c=>c==="connecting")?this.state=ui.CONNECTING:l.every(c=>c==="closed")?this.state=ui.CLOSED:l.some(c=>c==="closed")?this.state=ui.CLOSING:l.every(c=>c==="new")&&(this.state=ui.NEW),a!==this.state&&(this.log.debug("pc state change: from ".concat(ui[a]," to ").concat(ui[this.state]),this.logContext),(r=this.onStateChange)===null||r===void 0||r.call(this,this.state,this.publisher.getConnectionState(),this.subscriber.getConnectionState()))},this.log=js((s=i.loggerName)!==null&&s!==void 0?s:es.PCManager),this.loggerOptions=i,this.isPublisherConnectionRequired=!t,this.isSubscriberConnectionRequired=t,this.publisher=new IE(e,i),this.subscriber=new IE(e,i),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 a;(a=this.onIceCandidate)===null||a===void 0||a.call(this,r,Zn.PUBLISHER)},this.subscriber.onIceCandidate=r=>{var a;(a=this.onIceCandidate)===null||a===void 0||a.call(this,r,Zn.SUBSCRIBER)},this.subscriber.onDataChannel=r=>{var a;(a=this.onDataChannel)===null||a===void 0||a.call(this,r)},this.subscriber.onTrack=r=>{var a;(a=this.onTrack)===null||a===void 0||a.call(this,r)},this.publisher.onOffer=r=>{var a;(a=this.onPublisherOffer)===null||a===void 0||a.call(this,r)},this.state=ui.NEW,this.connectionLock=new gn,this.remoteOfferLock=new gn}get logContext(){var e,t;return Object.assign({},(t=(e=this.loggerOptions).loggerContextCb)===null||t===void 0?void 0:t.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 ie(this,void 0,void 0,function*(){if(this.publisher&&this.publisher.getSignallingState()!=="closed"){const e=this.publisher;for(const t of e.getSenders())try{e.canRemoveTrack()&&e.removeTrack(t)}catch(i){this.log.warn("could not removeTrack",Object.assign(Object.assign({},this.logContext),{error:i}))}}yield Promise.all([this.publisher.close(),this.subscriber.close()]),this.updateState()})}triggerIceRestart(){return ie(this,void 0,void 0,function*(){this.subscriber.restartingIce=!0,this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))})}addIceCandidate(e,t){return ie(this,void 0,void 0,function*(){t===Zn.PUBLISHER?yield this.publisher.addIceCandidate(e):yield this.subscriber.addIceCandidate(e)})}createSubscriberAnswerFromOffer(e){return ie(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 t=yield this.remoteOfferLock.lock();try{return yield this.subscriber.setRemoteDescription(e),yield this.subscriber.createAndSetAnswer()}finally{t()}})}updateConfiguration(e,t){this.publisher.setConfiguration(e),this.subscriber.setConfiguration(e),t&&this.triggerIceRestart()}ensurePCTransportConnection(e,t){return ie(this,void 0,void 0,function*(){var i;const s=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((i=this.requiredTransports)===null||i===void 0?void 0:i.map(r=>this.ensureTransportConnected(r,e,t)))}finally{s()}})}negotiate(e){return ie(this,void 0,void 0,function*(){return new Promise((t,i)=>ie(this,void 0,void 0,function*(){const s=setTimeout(()=>{i("negotiation timed out")},this.peerConnectionTimeout),r=()=>{clearTimeout(s),i("negotiation aborted")};e.signal.addEventListener("abort",r),this.publisher.once(Io.NegotiationStarted,()=>{e.signal.aborted||this.publisher.once(Io.NegotiationComplete,()=>{clearTimeout(s),t()})}),yield this.publisher.negotiate(a=>{clearTimeout(s),i(a)})}))})}addPublisherTransceiver(e,t){return this.publisher.addTransceiver(e,t)}addPublisherTrack(e){return this.publisher.addTrack(e)}createPublisherDataChannel(e,t){return this.publisher.createDataChannel(e,t)}getConnectedAddress(e){return e===Zn.PUBLISHER?this.publisher.getConnectedAddress():e===Zn.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,t){return ie(this,arguments,void 0,function(i,s){var r=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.peerConnectionTimeout;return(function*(){if(i.getConnectionState()!=="connected")return new Promise((c,u)=>ie(r,void 0,void 0,function*(){const d=()=>{this.log.warn("abort transport connection",this.logContext),Ui.clearTimeout(f),u(new Gt("room connection has been cancelled",Nt.Cancelled))};s!=null&&s.signal.aborted&&d(),s==null||s.signal.addEventListener("abort",d);const f=Ui.setTimeout(()=>{s==null||s.signal.removeEventListener("abort",d),u(new Gt("could not establish pc connection",Nt.InternalError))},a);for(;this.state!==ui.CONNECTED;)if(yield Tn(50),s!=null&&s.signal.aborted){u(new Gt("room connection has been cancelled",Nt.Cancelled));return}Ui.clearTimeout(f),s==null||s.signal.removeEventListener("abort",d),c()}))})()})}}class di extends Error{constructor(e,t,i){super(t),this.code=e,this.message=BE(t,di.MAX_MESSAGE_BYTES),this.data=i?BE(i,di.MAX_DATA_BYTES):void 0}static fromProto(e){return new di(e.code,e.message,e.data)}toProto(){return new JC({code:this.code,message:this.message,data:this.data})}static builtIn(e,t){return new di(di.ErrorCode[e],di.ErrorMessage[e],t)}}di.MAX_MESSAGE_BYTES=256,di.MAX_DATA_BYTES=15360,di.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},di.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 LE=15360;function hg(n){return new TextEncoder().encode(n).length}function BE(n,e){if(hg(n)<=e)return n;let t=0,i=n.length;const s=new TextEncoder;for(;t<i;){const r=Math.floor((t+i+1)/2);s.encode(n.slice(0,r)).length<=e?t=r:i=r-1}return n.slice(0,t)}const fg=2e3;function jd(n,e){if(!e)return 0;let t,i;return"bytesReceived"in n?(t=n.bytesReceived,i=e.bytesReceived):"bytesSent"in n&&(t=n.bytesSent,i=e.bytesSent),t===void 0||i===void 0||n.timestamp===void 0||e.timestamp===void 0?0:(t-i)*8*1e3/(n.timestamp-e.timestamp)}const pg=typeof MediaRecorder<"u";class N8{constructor(){throw new Error("MediaRecorder is not available in this environment")}}const R8=pg?MediaRecorder:N8;class M8 extends R8{constructor(e,t){if(!pg)throw new Error("MediaRecorder is not available in this environment");super(new MediaStream([e.mediaStreamTrack]),t);let i,s;const r=()=>s===void 0,a=()=>{this.removeEventListener("dataavailable",i),this.removeEventListener("stop",a),this.removeEventListener("error",l),s==null||s.close(),s=void 0},l=c=>{s==null||s.error(c),this.removeEventListener("dataavailable",i),this.removeEventListener("stop",a),this.removeEventListener("error",l),s=void 0};this.byteStream=new ReadableStream({start:c=>{s=c,i=u=>ie(this,void 0,void 0,function*(){const d=yield u.data.arrayBuffer();r()||c.enqueue(new Uint8Array(d))}),this.addEventListener("dataavailable",i)},cancel:()=>{a()}}),this.addEventListener("stop",a),this.addEventListener("error",l)}}function O8(){return pg}const L8=1e3,B8=1e4;class UE extends Ae{get sender(){return this._sender}set sender(e){this._sender=e}get constraints(){return this._constraints}get hasPreConnectBuffer(){return!!this.localTrackRecorder}constructor(e,t,i){let s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,r=arguments.length>4?arguments[4]:void 0;super(e,t,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=cg(()=>ie(this,void 0,void 0,function*(){yield this.pauseUpstream()}),5e3),this.handleTrackUnmuteEvent=()=>ie(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(He.Ended,this)},this.reacquireTrack=!1,this.providedByUser=s,this.muteLock=new gn,this.pauseUpstreamLock=new gn,this.processorLock=new gn,this.restartLock=new gn,this.setMediaStreamTrack(e,!0),this._constraints=e.getConstraints(),i&&(this._constraints=i)}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==Ae.Kind.Video)return;const{width:e,height:t}=this._mediaStreamTrack.getSettings();if(e&&t)return{width:e,height:t}}get isUpstreamPaused(){return this._isUpstreamPaused}get isUserProvided(){return this.providedByUser}get mediaStreamTrack(){var e,t;return(t=(e=this.processor)===null||e===void 0?void 0:e.processedTrack)!==null&&t!==void 0?t:this._mediaStreamTrack}get isLocal(){return!0}getSourceTrackSettings(){return this._mediaStreamTrack.getSettings()}setMediaStreamTrack(e,t){return ie(this,void 0,void 0,function*(){var i;if(e===this._mediaStreamTrack&&!t)return;this._mediaStreamTrack&&(this.attachedElements.forEach(r=>{wo(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 s;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&&(Eo(e,this.processorElement),this.processorElement.muted=!0),yield this.processor.restart({track:e,kind:this.kind,element:this.processorElement}),s=this.processor.processedTrack}finally{r()}}this.sender&&((i=this.sender.transport)===null||i===void 0?void 0:i.state)!=="closed"&&(yield this.sender.replaceTrack(s??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=>{Eo(s??e,r)}))})}waitForDimensions(){return ie(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:L8;return(function*(){var i;if(e.kind===Ae.Kind.Audio)throw new Error("cannot get dimensions for audio tracks");((i=bn())===null||i===void 0?void 0:i.os)==="iOS"&&(yield Tn(10));const s=Date.now();for(;Date.now()-s<t;){const r=e.dimensions;if(r)return r;yield Tn(50)}throw new $s("unable to get track dimensions after timeout")})()})}setDeviceId(e){return ie(this,void 0,void 0,function*(){return this._constraints.deviceId===e&&this._mediaStreamTrack.getSettings().deviceId===Tr(e)||(this._constraints.deviceId=e,this.isMuted)?!0:(yield this.restartTrack(),Tr(e)===this._mediaStreamTrack.getSettings().deviceId)})}getDeviceId(){return ie(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return(function*(){if(e.source===Ae.Source.ScreenShare)return;const{deviceId:i,groupId:s}=e._mediaStreamTrack.getSettings(),r=e.kind===Ae.Kind.Audio?"audioinput":"videoinput";return t?Ri.getInstance().normalizeDeviceId(r,i,s):i})()})}mute(){return ie(this,void 0,void 0,function*(){return this.setTrackMuted(!0),this})}unmute(){return ie(this,void 0,void 0,function*(){return this.setTrackMuted(!1),this})}replaceTrack(e,t){return ie(this,void 0,void 0,function*(){if(!this.sender)throw new $s("unable to replace an unpublished track");let i,s;return typeof t=="boolean"?i=t:t!==void 0&&(i=t.userProvidedTrack,s=t.stopProcessor),this.providedByUser=i??!0,this.log.debug("replace MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(e),s&&this.processor&&(yield this.stopProcessor()),this})}restart(e){return ie(this,void 0,void 0,function*(){this.manuallyStopped=!1;const t=yield this.restartLock.lock();try{e||(e=this._constraints);const{deviceId:i,facingMode:s}=e,r=TU(e,["deviceId","facingMode"]);this.log.debug("restarting track with constraints",Object.assign(Object.assign({},this.logContext),{constraints:e}));const a={audio:!1,video:!1};this.kind===Ae.Kind.Video?a.video=i||s?{deviceId:i,facingMode:s}:!0:a.audio=i?{deviceId:i}:!0,this.attachedElements.forEach(u=>{wo(this.mediaStreamTrack,u)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();const c=(yield navigator.mediaDevices.getUserMedia(a)).getTracks()[0];return yield c.applyConstraints(r),c.addEventListener("ended",this.handleEnded),this.log.debug("re-acquired MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(c),this._constraints=e,this.emit(He.Restarted,this),this.manuallyStopped&&(this.log.warn("track was stopped during a restart, stopping restarted track",this.logContext),this.stop()),this}finally{t()}})}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?He.Muted:He.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 ie(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),fE()&&(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 ie(this,void 0,void 0,function*(){var e;const t=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(He.UpstreamPaused,this);const i=bn();if((i==null?void 0:i.name)==="Safari"&&br(i.version,"12.0")<0)throw new Bm("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{t()}})}resumeUpstream(){return ie(this,void 0,void 0,function*(){var e;const t=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(He.UpstreamResumed,this),((e=this.sender.transport)===null||e===void 0?void 0:e.state)!=="closed"&&(yield this.sender.replaceTrack(this.mediaStreamTrack))}finally{t()}})}getRTCStatsReport(){return ie(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 ie(this,arguments,void 0,function(t){var i=this;let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return(function*(){var r;const a=yield i.processorLock.lock();try{i.log.debug("setting up processor",i.logContext);const l=document.createElement(i.kind),c={kind:i.kind,track:i._mediaStreamTrack,element:l,audioContext:i.audioContext};if(yield t.init(c),i.log.debug("processor initialized",i.logContext),i.processor&&(yield i.stopProcessor()),i.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");if(Eo(i._mediaStreamTrack,l),l.muted=!0,l.play().catch(u=>i.log.error("failed to play processor element",Object.assign(Object.assign({},i.logContext),{error:u}))),i.processor=t,i.processorElement=l,i.processor.processedTrack){for(const u of i.attachedElements)u!==i.processorElement&&s&&(wo(i._mediaStreamTrack,u),Eo(i.processor.processedTrack,u));yield(r=i.sender)===null||r===void 0?void 0:r.replaceTrack(i.processor.processedTrack)}i.emit(He.TrackProcessorUpdate,i.processor)}finally{a()}})()})}getProcessor(){return this.processor}stopProcessor(){return ie(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return(function*(){var i,s;e.processor&&(e.log.debug("stopping processor",e.logContext),(i=e.processor.processedTrack)===null||i===void 0||i.stop(),yield e.processor.destroy(),e.processor=void 0,t||((s=e.processorElement)===null||s===void 0||s.remove(),e.processorElement=void 0),yield e._mediaStreamTrack.applyConstraints(e._constraints),yield e.setMediaStreamTrack(e._mediaStreamTrack,!0),e.emit(He.TrackProcessorUpdate))})()})}startPreConnectBuffer(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:100;if(!O8()){this.log.warn("MediaRecorder is not available, cannot start preconnect buffer",this.logContext);return}if(!this.localTrackRecorder)this.localTrackRecorder=new M8(this,{mimeType:"audio/webm;codecs=opus"});else{this.log.warn("preconnect buffer already started");return}this.localTrackRecorder.start(e),this.autoStopPreConnectBuffer=setTimeout(()=>{this.log.warn("preconnect buffer timed out, stopping recording automatically",this.logContext),this.stopPreConnectBuffer()},B8)}stopPreConnectBuffer(){clearTimeout(this.autoStopPreConnectBuffer),this.localTrackRecorder&&(this.localTrackRecorder.stop(),this.localTrackRecorder=void 0)}getPreConnectBuffer(){var e;return(e=this.localTrackRecorder)===null||e===void 0?void 0:e.byteStream}}class qd extends UE{get enhancedNoiseCancellation(){return this.isKrispNoiseFilterEnabled}constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;super(e,Ae.Kind.Audio,t,i,r),this.stopOnMute=!1,this.isKrispNoiseFilterEnabled=!1,this.monitorSender=()=>ie(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let a;try{a=yield this.getSenderStats()}catch(l){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:l}));return}a&&this.prevStats&&(this._currentBitrate=jd(a,this.prevStats)),this.prevStats=a}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(He.AudioTrackFeatureUpdate,this,Ni.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(He.AudioTrackFeatureUpdate,this,Ni.TF_ENHANCED_NOISE_CANCELLATION,!1)},this.audioContext=s,this.checkForSilence()}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return ie(this,void 0,void 0,function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===Ae.Source.Microphone&&this.stopOnMute&&!this.isUserProvided&&(this.log.debug("stopping mic track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{t()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return ie(this,void 0,void 0,function*(){const t=yield this.muteLock.lock();try{if(!this.isMuted)return this.log.debug("Track already unmuted",this.logContext),this;const i=this._constraints.deviceId&&this._mediaStreamTrack.getSettings().deviceId!==Tr(this._constraints.deviceId);return this.source===Ae.Source.Microphone&&(this.stopOnMute||this._mediaStreamTrack.readyState==="ended"||i)&&!this.isUserProvided&&(this.log.debug("reacquiring mic track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this}finally{t()}})}restartTrack(e){return ie(this,void 0,void 0,function*(){let t;if(e){const i=tg({audio:e});typeof i.audio!="boolean"&&(t=i.audio)}yield this.restart(t)})}restart(e){const t=Object.create(null,{restart:{get:()=>super.restart}});return ie(this,void 0,void 0,function*(){const i=yield t.restart.call(this,e);return this.checkForSilence(),i})}startMonitor(){Sn()&&(this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},fg)))}setProcessor(e){return ie(this,void 0,void 0,function*(){var t;const i=yield this.processorLock.lock();try{if(!Es()&&!this.audioContext)throw Error("Audio context needs to be set on LocalAudioTrack in order to enable processors");this.processor&&(yield this.stopProcessor());const s={kind:this.kind,track:this._mediaStreamTrack,audioContext:this.audioContext};this.log.debug("setting up audio processor ".concat(e.name),this.logContext),yield e.init(s),this.processor=e,this.processor.processedTrack&&(yield(t=this.sender)===null||t===void 0?void 0:t.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(He.TrackProcessorUpdate,this.processor)}finally{i()}})}setAudioContext(e){this.audioContext=e}getSenderStats(){return ie(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return;const t=yield this.sender.getStats();let i;return t.forEach(s=>{s.type==="outbound-rtp"&&(i={type:"audio",streamId:s.id,packetsSent:s.packetsSent,packetsLost:s.packetsLost,bytesSent:s.bytesSent,timestamp:s.timestamp,roundTripTime:s.roundTripTime,jitter:s.jitter})}),i})}checkForSilence(){return ie(this,void 0,void 0,function*(){const e=yield _E(this);return e&&(this.isMuted||this.log.warn("silence detected on local audio track",this.logContext),this.emit(He.AudioSilenceDetected)),e})}}function U8(n,e,t){switch(n.kind){case"audio":return new qd(n,e,!1,void 0,t);case"video":return new Hd(n,e,!1,t);default:throw new $s("unsupported track type: ".concat(n.kind))}}const F8=Object.values(ic),V8=Object.values(qm),j8=Object.values($m),q8=[ic.h180,ic.h360],$8=[qm.h180,qm.h360],H8=n=>[{scaleResolutionDownBy:2,fps:n.encoding.maxFramerate}].map(t=>{var i,s;return new Ht(Math.floor(n.width/t.scaleResolutionDownBy),Math.floor(n.height/t.scaleResolutionDownBy),Math.max(15e4,Math.floor(n.encoding.maxBitrate/(Math.pow(t.scaleResolutionDownBy,2)*(((i=n.encoding.maxFramerate)!==null&&i!==void 0?i:30)/((s=t.fps)!==null&&s!==void 0?s:30))))),t.fps,n.encoding.priority)}),mg=["q","h","f"];function gg(n,e,t,i){var s,r;let a=i==null?void 0:i.videoEncoding;n&&(a=i==null?void 0:i.screenShareEncoding);const l=i==null?void 0:i.simulcast,c=i==null?void 0:i.scalabilityMode,u=i==null?void 0:i.videoCodec;if(!a&&!l&&!c||!e||!t)return[{}];a||(a=G8(n,e,t,u),At.debug("using video encoding",a));const d=a.maxFramerate,f=new Ht(e,t,a.maxBitrate,a.maxFramerate,a.priority);if(c&&Hs(u)){const S=new $d(c),m=[];if(S.spatial>3)throw new Error("unsupported scalabilityMode: ".concat(c));const _=bn();if(ua()||Es()||(_==null?void 0:_.name)==="Chrome"&&br(_==null?void 0:_.version,"113")<0){const k=S.suffix=="h"?2:3,R=JU(_);for(let D=0;D<S.spatial;D+=1)m.push({rid:mg[2-D],maxBitrate:a.maxBitrate/Math.pow(k,D),maxFramerate:f.encoding.maxFramerate,scaleResolutionDownBy:R?Math.pow(2,D):void 0});m[0].scalabilityMode=c}else m.push({maxBitrate:a.maxBitrate,maxFramerate:f.encoding.maxFramerate,scalabilityMode:c});return f.encoding.priority&&(m[0].priority=f.encoding.priority,m[0].networkPriority=f.encoding.priority),At.debug("using svc encoding",{encodings:m}),m}if(!l)return[a];let g=[];n?g=(s=VE(i==null?void 0:i.screenShareSimulcastLayers))!==null&&s!==void 0?s:FE(n,f):g=(r=VE(i==null?void 0:i.videoSimulcastLayers))!==null&&r!==void 0?r:FE(n,f);let T;if(g.length>0){const S=g[0];g.length>1&&([,T]=g);const m=Math.max(e,t);if(m>=960&&T)return yg(e,t,[S,T,f],d);if(m>=480)return yg(e,t,[S,f],d)}return yg(e,t,[f])}function z8(n,e,t){var i,s,r,a;if(!t.backupCodec||t.backupCodec===!0||t.backupCodec.codec===t.videoCodec)return;e!==t.backupCodec.codec&&At.warn("requested a different codec than specified as backup",{serverRequested:e,backup:t.backupCodec.codec}),t.videoCodec=e,t.videoEncoding=t.backupCodec.encoding;const l=n.mediaStreamTrack.getSettings(),c=(i=l.width)!==null&&i!==void 0?i:(s=n.dimensions)===null||s===void 0?void 0:s.width,u=(r=l.height)!==null&&r!==void 0?r:(a=n.dimensions)===null||a===void 0?void 0:a.height;return n.source===Ae.Source.ScreenShare&&t.simulcast&&(t.simulcast=!1),gg(n.source===Ae.Source.ScreenShare,c,u,t)}function G8(n,e,t,i){const s=W8(n,e,t);let{encoding:r}=s[0];const a=Math.max(e,t);for(let l=0;l<s.length;l+=1){const c=s[l];if(r=c.encoding,c.width>=a)break}if(i)switch(i){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 W8(n,e,t){if(n)return j8;const i=e>t?e/t:t/e;return Math.abs(i-16/9)<Math.abs(i-4/3)?F8:V8}function FE(n,e){if(n)return H8(e);const{width:t,height:i}=e,s=t>i?t/i:i/t;return Math.abs(s-16/9)<Math.abs(s-4/3)?q8:$8}function yg(n,e,t,i){const s=[];if(t.forEach((r,a)=>{if(a>=mg.length)return;const l=Math.min(n,e),u={rid:mg[a],scaleResolutionDownBy:Math.max(1,l/Math.min(r.width,r.height)),maxBitrate:r.encoding.maxBitrate},d=i&&r.encoding.maxFramerate?Math.min(i,r.encoding.maxFramerate):r.encoding.maxFramerate;d&&(u.maxFramerate=d);const f=xo()||a===0;r.encoding.priority&&f&&(u.priority=r.encoding.priority,u.networkPriority=r.encoding.priority),s.push(u)}),Es()&&mE()==="ios"){let r;s.forEach(l=>{r?l.maxFramerate&&l.maxFramerate>r&&(r=l.maxFramerate):r=l.maxFramerate});let a=!0;s.forEach(l=>{var c;l.maxFramerate!=r&&(a&&(a=!1,At.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),At.info('Setting framerate of encoding "'.concat((c=l.rid)!==null&&c!==void 0?c:"",'" to ').concat(r)),l.maxFramerate=r)})}return s}function VE(n){if(n)return n.sort((e,t)=>{const{encoding:i}=e,{encoding:s}=t;return i.maxBitrate>s.maxBitrate?1:i.maxBitrate<s.maxBitrate?-1:i.maxBitrate===s.maxBitrate&&i.maxFramerate&&s.maxFramerate?i.maxFramerate>s.maxFramerate?1:-1:0})}class $d{constructor(e){const t=e.match(/^L(\d)T(\d)(h|_KEY|_KEY_SHIFT){0,1}$/);if(!t)throw new Error("invalid scalability mode");if(this.spatial=parseInt(t[1]),this.temporal=parseInt(t[2]),t.length>3)switch(t[3]){case"h":case"_KEY":case"_KEY_SHIFT":this.suffix=t[3]}}toString(){var e;return"L".concat(this.spatial,"T").concat(this.temporal).concat((e=this.suffix)!==null&&e!==void 0?e:"")}}function K8(n){return n.source===Ae.Source.ScreenShare||n.constraints.height&&Tr(n.constraints.height)>=1080?"maintain-resolution":"balanced"}const Y8=5e3;class Hd extends UE{get sender(){return this._sender}set sender(e){this._sender=e,this.degradationPreference&&this.setDegradationPreference(this.degradationPreference)}constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3?arguments[3]:void 0;super(e,Ae.Kind.Video,t,i,s),this.simulcastCodecs=new Map,this.degradationPreference="balanced",this.monitorSender=()=>ie(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let r;try{r=yield this.getSenderStats()}catch(l){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:l}));return}const a=new Map(r.map(l=>[l.rid,l]));if(this.prevStats){let l=0;a.forEach((c,u)=>{var d;const f=(d=this.prevStats)===null||d===void 0?void 0:d.get(u);l+=jd(c,f)}),this._currentBitrate=l}this.prevStats=a}),this.senderLock=new gn}get isSimulcast(){return!!(this.sender&&this.sender.getParameters().encodings.length>1)}startMonitor(e){var t;if(this.signalClient=e,!Sn())return;const i=(t=this.sender)===null||t===void 0?void 0:t.getParameters();i&&(this.encodings=i.encodings),!this.monitorInterval&&(this.monitorInterval=setInterval(()=>{this.monitorSender()},fg))}stop(){this._mediaStreamTrack.getConstraints(),this.simulcastCodecs.forEach(e=>{e.mediaStreamTrack.stop()}),super.stop()}pauseUpstream(){const e=Object.create(null,{pauseUpstream:{get:()=>super.pauseUpstream}});return ie(this,void 0,void 0,function*(){var t,i,s,r,a;yield e.pauseUpstream.call(this);try{for(var l=!0,c=qs(this.simulcastCodecs.values()),u;u=yield c.next(),t=u.done,!t;l=!0)r=u.value,l=!1,yield(a=r.sender)===null||a===void 0?void 0:a.replaceTrack(null)}catch(d){i={error:d}}finally{try{!l&&!t&&(s=c.return)&&(yield s.call(c))}finally{if(i)throw i.error}}})}resumeUpstream(){const e=Object.create(null,{resumeUpstream:{get:()=>super.resumeUpstream}});return ie(this,void 0,void 0,function*(){var t,i,s,r,a;yield e.resumeUpstream.call(this);try{for(var l=!0,c=qs(this.simulcastCodecs.values()),u;u=yield c.next(),t=u.done,!t;l=!0){r=u.value,l=!1;const d=r;yield(a=d.sender)===null||a===void 0?void 0:a.replaceTrack(d.mediaStreamTrack)}}catch(d){i={error:d}}finally{try{!l&&!t&&(s=c.return)&&(yield s.call(c))}finally{if(i)throw i.error}}})}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return ie(this,void 0,void 0,function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===Ae.Source.Camera&&!this.isUserProvided&&(this.log.debug("stopping camera track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{t()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return ie(this,void 0,void 0,function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.source===Ae.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{t()}})}setTrackMuted(e){super.setTrackMuted(e);for(const t of this.simulcastCodecs.values())t.mediaStreamTrack.enabled=!e}getSenderStats(){return ie(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return[];const t=[],i=yield this.sender.getStats();return i.forEach(s=>{var r;if(s.type==="outbound-rtp"){const a={type:"video",streamId:s.id,frameHeight:s.frameHeight,frameWidth:s.frameWidth,framesPerSecond:s.framesPerSecond,framesSent:s.framesSent,firCount:s.firCount,pliCount:s.pliCount,nackCount:s.nackCount,packetsSent:s.packetsSent,bytesSent:s.bytesSent,qualityLimitationReason:s.qualityLimitationReason,qualityLimitationDurations:s.qualityLimitationDurations,qualityLimitationResolutionChanges:s.qualityLimitationResolutionChanges,rid:(r=s.rid)!==null&&r!==void 0?r:s.id,retransmittedPacketsSent:s.retransmittedPacketsSent,targetBitrate:s.targetBitrate,timestamp:s.timestamp},l=i.get(s.remoteId);l&&(a.jitter=l.jitter,a.packetsLost=l.packetsLost,a.roundTripTime=l.roundTripTime),t.push(a)}}),t.sort((s,r)=>{var a,l;return((a=r.frameWidth)!==null&&a!==void 0?a:0)-((l=s.frameWidth)!==null&&l!==void 0?l:0)}),t})}setPublishingQuality(e){const t=[];for(let i=Vn.LOW;i<=Vn.HIGH;i+=1)t.push(new Em({quality:i,enabled:i<=e}));this.log.debug("setting publishing quality. max quality ".concat(e),this.logContext),this.setPublishingLayers(Hs(this.codec),t)}restartTrack(e){return ie(this,void 0,void 0,function*(){var t,i,s,r,a;let l;if(e){const f=tg({video:e});typeof f.video!="boolean"&&(l=f.video)}yield this.restart(l);try{for(var c=!0,u=qs(this.simulcastCodecs.values()),d;d=yield u.next(),t=d.done,!t;c=!0){r=d.value,c=!1;const f=r;f.sender&&((a=f.sender.transport)===null||a===void 0?void 0:a.state)!=="closed"&&(f.mediaStreamTrack=this.mediaStreamTrack.clone(),yield f.sender.replaceTrack(f.mediaStreamTrack))}}catch(f){i={error:f}}finally{try{!c&&!t&&(s=u.return)&&(yield s.call(u))}finally{if(i)throw i.error}}})}setProcessor(e){const t=Object.create(null,{setProcessor:{get:()=>super.setProcessor}});return ie(this,arguments,void 0,function(i){var s=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return(function*(){var a,l,c,u,d,f;if(yield t.setProcessor.call(s,i,r),!((d=s.processor)===null||d===void 0)&&d.processedTrack)try{for(var g=!0,T=qs(s.simulcastCodecs.values()),S;S=yield T.next(),a=S.done,!a;g=!0)u=S.value,g=!1,yield(f=u.sender)===null||f===void 0?void 0:f.replaceTrack(s.processor.processedTrack)}catch(m){l={error:m}}finally{try{!g&&!a&&(c=T.return)&&(yield c.call(T))}finally{if(l)throw l.error}}})()})}setDegradationPreference(e){return ie(this,void 0,void 0,function*(){if(this.degradationPreference=e,this.sender)try{this.log.debug("setting degradationPreference to ".concat(e),this.logContext);const t=this.sender.getParameters();t.degradationPreference=e,this.sender.setParameters(t)}catch(t){this.log.warn("failed to set degradationPreference",Object.assign({error:t},this.logContext))}})}addSimulcastTrack(e,t){if(this.simulcastCodecs.has(e)){this.log.error("".concat(e," already added, skipping adding simulcast codec"),this.logContext);return}const i={codec:e,mediaStreamTrack:this.mediaStreamTrack.clone(),sender:void 0,encodings:t};return this.simulcastCodecs.set(e,i),i}setSimulcastTrackSender(e,t){const i=this.simulcastCodecs.get(e);i&&(i.sender=t,setTimeout(()=>{this.subscribedCodecs&&this.setPublishingCodecs(this.subscribedCodecs)},Y8))}setPublishingCodecs(e){return ie(this,void 0,void 0,function*(){var t,i,s,r,a,l,c;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(Hs(e[0].codec),e[0].qualities),[];this.subscribedCodecs=e;const u=[];try{for(t=!0,i=qs(e);s=yield i.next(),r=s.done,!r;t=!0){c=s.value,t=!1;const d=c;if(!this.codec||this.codec===d.codec)yield this.setPublishingLayers(Hs(d.codec),d.qualities);else{const f=this.simulcastCodecs.get(d.codec);if(this.log.debug("try setPublishingCodec for ".concat(d.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:f})),!f||!f.sender){for(const g of d.qualities)if(g.enabled){u.push(d.codec);break}}else f.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(d.codec),this.logContext),yield jE(f.sender,f.encodings,d.qualities,this.senderLock,Hs(d.codec),this.log,this.logContext))}}}catch(d){a={error:d}}finally{try{!t&&!r&&(l=i.return)&&(yield l.call(i))}finally{if(a)throw a.error}}return u})}setPublishingLayers(e,t){return ie(this,void 0,void 0,function*(){this.log.debug("setting publishing layers",Object.assign(Object.assign({},this.logContext),{qualities:t})),!(!this.sender||!this.encodings)&&(yield jE(this.sender,this.encodings,t,this.senderLock,e,this.log,this.logContext))})}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return ie(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),fE()&&this.isInBackground&&this.source===Ae.Source.Camera&&(this._mediaStreamTrack.enabled=!1)})}}function jE(n,e,t,i,s,r,a){return ie(this,void 0,void 0,function*(){const l=yield i.lock();r.debug("setPublishingLayersForSender",Object.assign(Object.assign({},a),{sender:n,qualities:t,senderEncodings:e}));try{const c=n.getParameters(),{encodings:u}=c;if(!u)return;if(u.length!==e.length){r.warn("cannot set publishing layers, encodings mismatch",Object.assign(Object.assign({},a),{encodings:u,senderEncodings:e}));return}let d=!1;const f=bn();if((f==null?void 0:f.name)==="Chrome"&&br(f==null?void 0:f.version,"133")>0&&u[0].scalabilityMode){const T=u[0],S=new $d(T.scalabilityMode);let m=bo.OFF;if(t.forEach(_=>{_.enabled&&(m===bo.OFF||_.quality>m)&&(m=_.quality)}),m===bo.OFF)T.active&&(T.active=!1,d=!0);else if(!T.active||S.spatial!==m+1){d=!0,T.active=!0;const _=new $d(e[0].scalabilityMode);S.spatial=m+1,S.suffix=_.suffix,S.spatial===1&&(S.suffix=void 0),T.scalabilityMode=S.toString(),T.scaleResolutionDownBy=Math.pow(2,2-m),e[0].maxBitrate&&(T.maxBitrate=e[0].maxBitrate/(T.scaleResolutionDownBy*T.scaleResolutionDownBy))}}else s&&t.some(S=>S.enabled)&&t.forEach(S=>S.enabled=!0),u.forEach((T,S)=>{var m;let _=(m=T.rid)!==null&&m!==void 0?m:"";_===""&&(_="q");const k=qE(_),R=t.find(D=>D.quality===k);R&&T.active!==R.enabled&&(d=!0,T.active=R.enabled,r.debug("setting layer ".concat(R.quality," to ").concat(T.active?"enabled":"disabled"),a),xo()&&(R.enabled?(T.scaleResolutionDownBy=e[S].scaleResolutionDownBy,T.maxBitrate=e[S].maxBitrate,T.maxFrameRate=e[S].maxFrameRate):(T.scaleResolutionDownBy=4,T.maxBitrate=10,T.maxFrameRate=2)))});d&&(c.encodings=u,r.debug("setting encodings",Object.assign(Object.assign({},a),{encodings:c.encodings})),yield n.setParameters(c))}finally{l()}})}function qE(n){switch(n){case"f":return Vn.HIGH;case"h":return Vn.MEDIUM;case"q":return Vn.LOW;default:return Vn.HIGH}}function $E(n,e,t,i){if(!t)return[new oa({quality:Vn.HIGH,width:n,height:e,bitrate:0,ssrc:0})];if(i){const s=t[0].scalabilityMode,r=new $d(s),a=[],l=r.suffix=="h"?1.5:2,c=r.suffix=="h"?2:3;for(let u=0;u<r.spatial;u+=1)a.push(new oa({quality:Math.min(Vn.HIGH,r.spatial-1)-u,width:Math.ceil(n/Math.pow(l,u)),height:Math.ceil(e/Math.pow(l,u)),bitrate:t[0].maxBitrate?Math.ceil(t[0].maxBitrate/Math.pow(c,u)):0,ssrc:0}));return a}return t.map(s=>{var r,a,l;const c=(r=s.scaleResolutionDownBy)!==null&&r!==void 0?r:1;let u=qE((a=s.rid)!==null&&a!==void 0?a:"");return new oa({quality:u,width:Math.ceil(n/c),height:Math.ceil(e/c),bitrate:(l=s.maxBitrate)!==null&&l!==void 0?l:0,ssrc:0})})}const HE="_lossy",zE="_reliable",X8=2*1e3,vg="leave-reconnect";var is;(function(n){n[n.New=0]="New",n[n.Connected=1]="Connected",n[n.Disconnected=2]="Disconnected",n[n.Reconnecting=3]="Reconnecting",n[n.Closed=4]="Closed"})(is||(is={}));class J8 extends ks.EventEmitter{get isClosed(){return this._isClosed}get pendingReconnect(){return!!this.reconnectTimeout}constructor(e){var t;super(),this.options=e,this.rtcConfig={},this.peerConnectionTimeout=dg.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.subscriberPrimary=!1,this.pcState=is.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=At,this.handleDataChannel=i=>ie(this,[i],void 0,function(s){var r=this;let{channel:a}=s;return(function*(){if(a){if(a.label===zE)r.reliableDCSub=a;else if(a.label===HE)r.lossyDCSub=a;else return;r.log.debug("on data channel ".concat(a.id,", ").concat(a.label),r.logContext),a.onmessage=r.handleDataMessage}})()}),this.handleDataMessage=i=>ie(this,void 0,void 0,function*(){var s,r;const a=yield this.dataProcessLock.lock();try{let l;if(i.data instanceof ArrayBuffer)l=i.data;else if(i.data instanceof Blob)l=yield i.data.arrayBuffer();else{this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:i.data}));return}const c=vn.fromBinary(new Uint8Array(l));((s=c.value)===null||s===void 0?void 0:s.case)==="speaker"?this.emit(Ge.ActiveSpeakersUpdate,c.value.value.speakers):(((r=c.value)===null||r===void 0?void 0:r.case)==="user"&&Z8(c,c.value.value),this.emit(Ge.DataPacketReceived,c))}finally{a()}}),this.handleDataError=i=>{const r=i.currentTarget.maxRetransmits===0?"lossy":"reliable";if(i instanceof ErrorEvent&&i.error){const{error:a}=i.error;this.log.error("DataChannel error on ".concat(r,": ").concat(i.message),Object.assign(Object.assign({},this.logContext),{error:a}))}else this.log.error("Unknown DataChannel error on ".concat(r),Object.assign(Object.assign({},this.logContext),{event:i}))},this.handleBufferedAmountLow=i=>{const r=i.currentTarget.maxRetransmits===0?It.LOSSY:It.RELIABLE;this.updateAndEmitDCBufferStatus(r)},this.handleDisconnect=(i,s)=>{if(this._isClosed)return;this.log.warn("".concat(i," disconnected"),this.logContext),this.reconnectAttempts===0&&(this.reconnectStart=Date.now());const r=c=>{this.log.warn("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(c,"ms. giving up"),this.logContext),this.emit(Ge.Disconnected),this.close()},a=Date.now()-this.reconnectStart;let l=this.getNextRetryDelay({elapsedMs:a,retryCount:this.reconnectAttempts});if(l===null){r(a);return}i===vg&&(l=0),this.log.debug("reconnecting in ".concat(l,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider&&this.regionUrlProvider.updateToken(this.token),this.reconnectTimeout=Ui.setTimeout(()=>this.attemptReconnect(s).finally(()=>this.reconnectTimeout=void 0),l)},this.waitForRestarted=()=>new Promise((i,s)=>{this.pcState===is.Connected&&i();const r=()=>{this.off(Ge.Disconnected,a),i()},a=()=>{this.off(Ge.Restarted,r),s()};this.once(Ge.Restarted,r),this.once(Ge.Disconnected,a)}),this.updateAndEmitDCBufferStatus=i=>{const s=this.isBufferStatusLow(i);typeof s<"u"&&s!==this.dcBufferStatus.get(i)&&(this.dcBufferStatus.set(i,s),this.emit(Ge.DCBufferStatusChanged,s,i))},this.isBufferStatusLow=i=>{const s=this.dataChannelForKind(i);if(s)return s.bufferedAmount<=s.bufferedAmountLowThreshold},this.handleBrowserOnLine=()=>{this.client.currentState===Jt.RECONNECTING&&(this.clearReconnectTimeout(),this.attemptReconnect(To.RR_SIGNAL_DISCONNECTED))},this.log=js((t=e.loggerName)!==null&&t!==void 0?t:es.Engine),this.loggerOptions={loggerName:e.loggerName,loggerContextCb:()=>this.logContext},this.client=new sg(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.registerOnLineListener(),this.closingLock=new gn,this.dataProcessLock=new gn,this.dcBufferStatus=new Map([[It.LOSSY,!0],[It.RELIABLE,!0]]),this.client.onParticipantUpdate=i=>this.emit(Ge.ParticipantUpdate,i),this.client.onConnectionQuality=i=>this.emit(Ge.ConnectionQualityUpdate,i),this.client.onRoomUpdate=i=>this.emit(Ge.RoomUpdate,i),this.client.onSubscriptionError=i=>this.emit(Ge.SubscriptionError,i),this.client.onSubscriptionPermissionUpdate=i=>this.emit(Ge.SubscriptionPermissionUpdate,i),this.client.onSpeakersChanged=i=>this.emit(Ge.SpeakersChanged,i),this.client.onStreamStateUpdate=i=>this.emit(Ge.StreamStateChanged,i),this.client.onRequestResponse=i=>this.emit(Ge.SignalRequestResponse,i)}get logContext(){var e,t,i,s,r,a;return{room:(t=(e=this.latestJoinResponse)===null||e===void 0?void 0:e.room)===null||t===void 0?void 0:t.name,roomID:(s=(i=this.latestJoinResponse)===null||i===void 0?void 0:i.room)===null||s===void 0?void 0:s.sid,participant:(a=(r=this.latestJoinResponse)===null||r===void 0?void 0:r.participant)===null||a===void 0?void 0:a.identity,pID:this.participantSid}}join(e,t,i,s){return ie(this,void 0,void 0,function*(){this.url=e,this.token=t,this.signalOpts=i,this.maxJoinAttempts=i.maxRetries;try{this.joinAttempts+=1,this.setupSignalClientCallbacks();const r=yield this.client.join(e,t,i,s);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,this.emit(Ge.SignalConnected,r),r}catch(r){if(r instanceof Gt&&r.reason===Nt.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,t,i,s);throw r}})}close(){return ie(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(Ge.Closing),this.removeAllListeners(),this.deregisterOnLineListener(),this.clearPendingReconnect(),yield this.cleanupPeerConnections(),yield this.cleanupClient()}finally{e()}})}cleanupPeerConnections(){return ie(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 t=i=>{i&&(i.close(),i.onbufferedamountlow=null,i.onclose=null,i.onclosing=null,i.onerror=null,i.onmessage=null,i.onopen=null)};t(this.lossyDC),t(this.lossyDCSub),t(this.reliableDC),t(this.reliableDCSub),this.lossyDC=void 0,this.lossyDCSub=void 0,this.reliableDC=void 0,this.reliableDCSub=void 0})}cleanupClient(){return ie(this,void 0,void 0,function*(){yield this.client.close(),this.client.resetCallbacks()})}addTrack(e){if(this.pendingTrackResolvers[e.cid])throw new $s("a track with the same ID has already been published");return new Promise((t,i)=>{const s=setTimeout(()=>{delete this.pendingTrackResolvers[e.cid],i(new Gt("publication of local track timed out, no response from server",Nt.Timeout))},1e4);this.pendingTrackResolvers[e.cid]={resolve:r=>{clearTimeout(s),t(r)},reject:()=>{clearTimeout(s),i(new Error("Cancelled publication by calling unpublish"))}},this.client.sendAddTrack(e)})}removeTrack(e){if(e.track&&this.pendingTrackResolvers[e.track.id]){const{reject:t}=this.pendingTrackResolvers[e.track.id];t&&t(),delete this.pendingTrackResolvers[e.track.id]}try{return this.pcManager.removeTrack(e),!0}catch(t){this.log.warn("failed to remove track",Object.assign(Object.assign({},this.logContext),{error:t}))}return!1}updateMuteStatus(e,t){this.client.sendMuteTrack(e,t)}get dataSubscriberReadyState(){var e;return(e=this.reliableDCSub)===null||e===void 0?void 0:e.readyState}getConnectedServerAddress(){return ie(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 ie(this,void 0,void 0,function*(){var t,i;if(this.pcManager&&this.pcManager.currentState!==ui.NEW)return;this.participantSid=(t=e.participant)===null||t===void 0?void 0:t.sid;const s=this.makeRTCConfiguration(e);this.pcManager=new I8(s,e.subscriberPrimary,this.loggerOptions),this.emit(Ge.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(r,a)=>{this.client.sendIceCandidate(r,a)},this.pcManager.onPublisherOffer=r=>{this.client.sendOffer(r)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(r,a,l)=>ie(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(r),this.logContext),["closed","disconnected","failed"].includes(a)&&(this.publisherConnectionPromise=void 0),r===ui.CONNECTED){const d=this.pcState===is.New;this.pcState=is.Connected,d&&this.emit(Ge.Connected,e)}else r===ui.FAILED&&this.pcState===is.Connected&&(this.pcState=is.Disconnected,this.handleDisconnect("peerconnection failed",l==="failed"?To.RR_SUBSCRIBER_FAILED:To.RR_PUBLISHER_FAILED));const c=this.client.isDisconnected||this.client.currentState===Jt.RECONNECTING,u=[ui.FAILED,ui.CLOSING,ui.CLOSED].includes(r);c&&u&&!this._isClosed&&this.emit(Ge.Offline)}),this.pcManager.onTrack=r=>{this.emit(Ge.MediaTrackAdded,r.track,r.streams[0],r.receiver)},Q8((i=e.serverInfo)===null||i===void 0?void 0:i.protocol)||this.createDataChannels()})}setupSignalClientCallbacks(){this.client.onAnswer=e=>ie(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,t)=>{this.pcManager&&(this.log.debug("got ICE candidate from peer",Object.assign(Object.assign({},this.logContext),{candidate:e,target:t})),this.pcManager.addIceCandidate(e,t))},this.client.onOffer=e=>ie(this,void 0,void 0,function*(){if(!this.pcManager)return;const t=yield this.pcManager.createSubscriberAnswerFromOffer(e);this.client.sendAnswer(t)}),this.client.onLocalTrackPublished=e=>{var t;if(this.log.debug("received trackPublishedResponse",Object.assign(Object.assign({},this.logContext),{cid:e.cid,track:(t=e.track)===null||t===void 0?void 0:t.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:i}=this.pendingTrackResolvers[e.cid];delete this.pendingTrackResolvers[e.cid],i(e.track)},this.client.onLocalTrackUnpublished=e=>{this.emit(Ge.LocalTrackUnpublished,e)},this.client.onLocalTrackSubscribed=e=>{this.emit(Ge.LocalTrackSubscribed,e)},this.client.onTokenRefresh=e=>{this.token=e},this.client.onRemoteMuteChanged=(e,t)=>{this.emit(Ge.RemoteMute,e,t)},this.client.onSubscribedQualityUpdate=e=>{this.emit(Ge.SubscribedQualityUpdate,e)},this.client.onRoomMoved=e=>{var t;this.participantSid=(t=e.participant)===null||t===void 0?void 0:t.sid,this.latestJoinResponse&&(this.latestJoinResponse.room=e.room),this.emit(Ge.RoomMoved,e)},this.client.onClose=()=>{this.handleDisconnect("signal",To.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 Co.DISCONNECT:this.emit(Ge.Disconnected,e==null?void 0:e.reason),this.close();break;case Co.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(vg);break;case Co.RESUME:this.handleDisconnect(vg)}}}makeRTCConfiguration(e){var t;const i=Object.assign({},this.rtcConfig);if(!((t=this.signalOpts)===null||t===void 0)&&t.e2eeEnabled&&(this.log.debug("E2EE - setting up transports with insertable streams",this.logContext),i.encodedInsertableStreams=!0),e.iceServers&&!i.iceServers){const s=[];e.iceServers.forEach(r=>{const a={urls:r.urls};r.username&&(a.username=r.username),r.credential&&(a.credential=r.credential),s.push(a)}),i.iceServers=s}return e.clientConfiguration&&e.clientConfiguration.forceRelay===Jl.ENABLED&&(i.iceTransportPolicy="relay"),i.sdpSemantics="unified-plan",i.continualGatheringPolicy="gather_continually",i}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(HE,{ordered:!1,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel(zE,{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,t,i){return ie(this,void 0,void 0,function*(){if(Hm())return yield this.createTransceiverRTCRtpSender(e,t,i);if(zm())return this.log.warn("using add-track fallback",this.logContext),yield this.createRTCRtpSender(e.mediaStreamTrack);throw new Ei("Required webRTC APIs not supported on this device")})}createSimulcastSender(e,t,i,s){return ie(this,void 0,void 0,function*(){if(Hm())return this.createSimulcastTransceiverSender(e,t,i,s);if(zm())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(e.mediaStreamTrack);throw new Ei("Cannot stream on this device")})}createTransceiverRTCRtpSender(e,t,i){return ie(this,void 0,void 0,function*(){if(!this.pcManager)throw new Ei("publisher is closed");const s=[];e.mediaStream&&s.push(e.mediaStream),Po(e)&&(e.codec=t.videoCodec);const r={direction:"sendonly",streams:s};return i&&(r.sendEncodings=i),(yield this.pcManager.addPublisherTransceiver(e.mediaStreamTrack,r)).sender})}createSimulcastTransceiverSender(e,t,i,s){return ie(this,void 0,void 0,function*(){if(!this.pcManager)throw new Ei("publisher is closed");const r={direction:"sendonly"};s&&(r.sendEncodings=s);const a=yield this.pcManager.addPublisherTransceiver(t.mediaStreamTrack,r);if(i.videoCodec)return e.setSimulcastTrackSender(i.videoCodec,a.sender),a.sender})}createRTCRtpSender(e){return ie(this,void 0,void 0,function*(){if(!this.pcManager)throw new Ei("publisher is closed");return this.pcManager.addPublisherTrack(e)})}attemptReconnect(e){return ie(this,void 0,void 0,function*(){var t,i,s;if(!this._isClosed){if(this.attemptingReconnect){At.warn("already attempting reconnect, returning early",this.logContext);return}(((t=this.clientConfiguration)===null||t===void 0?void 0:t.resumeConnection)===Jl.DISABLED||((s=(i=this.pcManager)===null||i===void 0?void 0:i.currentState)!==null&&s!==void 0?s:ui.NEW)===ui.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 a=!0;r instanceof Ei?(this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:r})),a=!1):r instanceof No||(this.fullReconnectOnNext=!0),a?this.handleDisconnect("reconnect",To.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(Ge.Disconnected),yield this.close())}finally{this.attemptingReconnect=!1}}})}getNextRetryDelay(e){try{return this.reconnectPolicy.nextRetryDelayInMs(e)}catch(t){this.log.warn("encountered error in reconnect policy",Object.assign(Object.assign({},this.logContext),{error:t}))}return null}restartConnection(e){return ie(this,void 0,void 0,function*(){var t,i,s;try{if(!this.url||!this.token)throw new Ei("could not reconnect, url or token not saved");this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(Ge.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 No;r=yield this.join(e??this.url,this.token,this.signalOpts)}catch(a){throw a instanceof Gt&&a.reason===Nt.NotAllowed?new Ei("could not reconnect, token might be expired"):new No}if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(this.client.setReconnected(),this.emit(Ge.SignalRestarted,r),yield this.waitForPCReconnected(),this.client.currentState!==Jt.CONNECTED)throw new No("Signal connection got severed during reconnect");(t=this.regionUrlProvider)===null||t===void 0||t.resetAttempts(),this.emit(Ge.Restarted)}catch(r){const a=yield(i=this.regionUrlProvider)===null||i===void 0?void 0:i.getNextBestRegionUrl();if(a){yield this.restartConnection(a);return}else throw(s=this.regionUrlProvider)===null||s===void 0||s.resetAttempts(),r}})}resumeConnection(e){return ie(this,void 0,void 0,function*(){var t;if(!this.url||!this.token)throw new Ei("could not reconnect, url or token not saved");if(!this.pcManager)throw new Ei("publisher and subscriber connections unset");this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(Ge.Resuming);let i;try{this.setupSignalClientCallbacks(),i=yield this.client.reconnect(this.url,this.token,this.participantSid,e)}catch(s){let r="";throw s instanceof Error&&(r=s.message,this.log.error(s.message,Object.assign(Object.assign({},this.logContext),{error:s}))),s instanceof Gt&&s.reason===Nt.NotAllowed?new Ei("could not reconnect, token might be expired"):s instanceof Gt&&s.reason===Nt.LeaveRequest?s:new No(r)}if(this.emit(Ge.SignalResumed),i){const s=this.makeRTCConfiguration(i);this.pcManager.updateConfiguration(s)}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!==Jt.CONNECTED)throw new No("Signal connection got severed during reconnect");this.client.setReconnected(),((t=this.reliableDC)===null||t===void 0?void 0:t.readyState)==="open"&&this.reliableDC.id===null&&this.createDataChannels(),this.emit(Ge.Resumed)})}waitForPCInitialConnection(e,t){return ie(this,void 0,void 0,function*(){if(!this.pcManager)throw new Ei("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(t,e)})}waitForPCReconnected(){return ie(this,void 0,void 0,function*(){this.pcState=is.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield Tn(X8),!this.pcManager)throw new Ei("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=is.Connected}catch(e){throw this.pcState=is.Disconnected,new Gt("could not establish PC connection, ".concat(e.message),Nt.InternalError)}})}publishRpcResponse(e,t,i,s){return ie(this,void 0,void 0,function*(){const r=new vn({destinationIdentities:[e],kind:It.RELIABLE,value:{case:"rpcResponse",value:new XC({requestId:t,value:s?{case:"error",value:s.toProto()}:{case:"payload",value:i??""}})}});yield this.sendDataPacket(r,It.RELIABLE)})}publishRpcAck(e,t){return ie(this,void 0,void 0,function*(){const i=new vn({destinationIdentities:[e],kind:It.RELIABLE,value:{case:"rpcAck",value:new YC({requestId:t})}});yield this.sendDataPacket(i,It.RELIABLE)})}sendDataPacket(e,t){return ie(this,void 0,void 0,function*(){const i=e.toBinary();yield this.ensurePublisherConnected(t);const s=this.dataChannelForKind(t);s&&s.send(i),this.updateAndEmitDCBufferStatus(t)})}waitForBufferStatusLow(e){return new Promise((t,i)=>ie(this,void 0,void 0,function*(){if(this.isBufferStatusLow(e))t();else{const s=()=>i("Engine closed");for(this.once(Ge.Closing,s);!this.dcBufferStatus.get(e);)yield Tn(10);this.off(Ge.Closing,s),t()}}))}ensureDataTransportConnected(e){return ie(this,arguments,void 0,function(t){var i=this;let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscriberPrimary;return(function*(){var r;if(!i.pcManager)throw new Ei("PC manager is closed");const a=s?i.pcManager.subscriber:i.pcManager.publisher,l=s?"Subscriber":"Publisher";if(!a)throw new Gt("".concat(l," connection not set"),Nt.InternalError);let c=!1;!s&&!i.dataChannelForKind(t,s)&&(i.createDataChannels(),c=!0),!c&&!s&&!i.pcManager.publisher.isICEConnected&&i.pcManager.publisher.getICEConnectionState()!=="checking"&&(c=!0),c&&i.negotiate();const u=i.dataChannelForKind(t,s);if((u==null?void 0:u.readyState)==="open")return;const d=new Date().getTime()+i.peerConnectionTimeout;for(;new Date().getTime()<d;){if(a.isICEConnected&&((r=i.dataChannelForKind(t,s))===null||r===void 0?void 0:r.readyState)==="open")return;yield Tn(50)}throw new Gt("could not establish ".concat(l," connection, state: ").concat(a.getICEConnectionState()),Nt.InternalError)})()})}ensurePublisherConnected(e){return ie(this,void 0,void 0,function*(){this.publisherConnectionPromise||(this.publisherConnectionPromise=this.ensureDataTransportConnected(e,!1)),yield this.publisherConnectionPromise})}verifyTransport(){return!(!this.pcManager||this.pcManager.currentState!==ui.CONNECTED||!this.client.ws||this.client.ws.readyState===WebSocket.CLOSED)}negotiate(){return ie(this,void 0,void 0,function*(){return new Promise((e,t)=>ie(this,void 0,void 0,function*(){if(!this.pcManager){t(new Um("PC manager is closed"));return}this.pcManager.requirePublisher(),this.pcManager.publisher.getTransceivers().length==0&&!this.lossyDC&&!this.reliableDC&&this.createDataChannels();const i=new AbortController,s=()=>{i.abort(),this.log.debug("engine disconnected while negotiation was ongoing",this.logContext),e()};this.isClosed&&t("cannot negotiate on closed engine"),this.on(Ge.Closing,s),this.pcManager.publisher.once(Io.RTPVideoPayloadTypes,r=>{const a=new Map;r.forEach(l=>{const c=l.codec.toLowerCase();i8(c)&&a.set(l.payload,c)}),this.emit(Ge.RTPVideoMapUpdate,a)});try{yield this.pcManager.negotiate(i),e()}catch(r){r instanceof Um&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",To.RR_UNKNOWN),t(r)}finally{this.off(Ge.Closing,s)}}))})}dataChannelForKind(e,t){if(t){if(e===It.LOSSY)return this.lossyDCSub;if(e===It.RELIABLE)return this.reliableDCSub}else{if(e===It.LOSSY)return this.lossyDC;if(e===It.RELIABLE)return this.reliableDC}}sendSyncState(e,t){var i,s;if(!this.pcManager){this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);return}const r=this.pcManager.subscriber.getLocalDescription(),a=this.pcManager.subscriber.getRemoteDescription(),l=(s=(i=this.signalOpts)===null||i===void 0?void 0:i.autoSubscribe)!==null&&s!==void 0?s:!0,c=new Array,u=new Array;e.forEach(d=>{d.isDesired!==l&&c.push(d.trackSid),d.isEnabled||u.push(d.trackSid)}),this.client.sendSyncState(new pk({answer:r?Vd({sdp:r.sdp,type:r.type}):void 0,offer:a?Vd({sdp:a.sdp,type:a.type}):void 0,subscription:new Ed({trackSids:c,subscribe:!l,participantTracks:[]}),publishTracks:d8(t),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:u}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){const e=[],t=(i,s)=>{(i==null?void 0:i.id)!==void 0&&i.id!==null&&e.push(new mk({label:i.label,id:i.id,target:s}))};return t(this.dataChannelForKind(It.LOSSY),Zn.PUBLISHER),t(this.dataChannelForKind(It.RELIABLE),Zn.PUBLISHER),t(this.dataChannelForKind(It.LOSSY,!0),Zn.SUBSCRIBER),t(this.dataChannelForKind(It.RELIABLE,!0),Zn.SUBSCRIBER),e}clearReconnectTimeout(){this.reconnectTimeout&&Ui.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){Sn()&&window.addEventListener("online",this.handleBrowserOnLine)}deregisterOnLineListener(){Sn()&&window.removeEventListener("online",this.handleBrowserOnLine)}}class No extends Error{}function Q8(n){return n!==void 0&&n>13}function Z8(n,e){const t=n.participantIdentity?n.participantIdentity:e.participantIdentity;n.participantIdentity=t,e.participantIdentity=t;const i=n.destinationIdentities.length!==0?n.destinationIdentities:e.destinationIdentities;n.destinationIdentities=i,e.destinationIdentities=i}class bg{constructor(e,t){this.lastUpdateAt=0,this.settingsCacheTime=3e3,this.attemptedRegions=[],this.serverUrl=new URL(e),this.token=t}updateToken(e){this.token=e}isCloud(){return Wm(this.serverUrl)}getServerUrl(){return this.serverUrl}getNextBestRegionUrl(e){return ie(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 t=this.regionSettings.regions.filter(i=>!this.attemptedRegions.find(s=>s.url===i.url));if(t.length>0){const i=t[0];return this.attemptedRegions.push(i),At.debug("next region: ".concat(i.region)),i.url}else return null})}resetAttempts(){this.attemptedRegions=[]}fetchRegionSettings(e){return ie(this,void 0,void 0,function*(){const t=yield fetch("".concat(e5(this.serverUrl),"/regions"),{headers:{authorization:"Bearer ".concat(this.token)},signal:e});if(t.ok){const i=yield t.json();return this.lastUpdateAt=Date.now(),i}else throw new Gt("Could not fetch region settings: ".concat(t.statusText),t.status===401?Nt.NotAllowed:Nt.InternalError,t.status)})}setServerReportedRegions(e){this.regionSettings=e,this.lastUpdateAt=Date.now()}}function e5(n){return"".concat(n.protocol.replace("ws","http"),"//").concat(n.host,"/settings")}class GE{get info(){return this._info}constructor(e,t,i){this.reader=t,this.totalByteSize=i,this._info=e,this.bytesReceived=0}}class t5 extends GE{handleChunkReceived(e){var t;this.bytesReceived+=e.content.byteLength;const i=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(t=this.onProgress)===null||t===void 0||t.call(this,i)}[Symbol.asyncIterator](){const e=this.reader.getReader();return{next:()=>ie(this,void 0,void 0,function*(){try{const{done:t,value:i}=yield e.read();return t?{done:!0,value:void 0}:(this.handleChunkReceived(i),{done:!1,value:i.content})}catch{return{done:!0,value:void 0}}}),return(){return ie(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return ie(this,void 0,void 0,function*(){var e,t,i,s;let r=new Set;try{for(var a=!0,l=qs(this),c;c=yield l.next(),e=c.done,!e;a=!0){s=c.value,a=!1;const u=s;r.add(u)}}catch(u){t={error:u}}finally{try{!a&&!e&&(i=l.return)&&(yield i.call(l))}finally{if(t)throw t.error}}return Array.from(r)})}}class i5 extends GE{constructor(e,t,i){super(e,t,i),this.receivedChunks=new Map}handleChunkReceived(e){var t;const i=Ud(e.chunkIndex),s=this.receivedChunks.get(i);if(s&&s.version>e.version)return;this.receivedChunks.set(i,e),this.bytesReceived+=e.content.byteLength;const r=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(t=this.onProgress)===null||t===void 0||t.call(this,r)}[Symbol.asyncIterator](){const e=this.reader.getReader(),t=new TextDecoder;return{next:()=>ie(this,void 0,void 0,function*(){try{const{done:i,value:s}=yield e.read();return i?{done:!0,value:void 0}:(this.handleChunkReceived(s),{done:!1,value:t.decode(s.content)})}catch{return{done:!0,value:void 0}}}),return(){return ie(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return ie(this,void 0,void 0,function*(){var e,t,i,s;let r="";try{for(var a=!0,l=qs(this),c;c=yield l.next(),e=c.done,!e;a=!0)s=c.value,a=!1,r+=s}catch(u){t={error:u}}finally{try{!a&&!e&&(i=l.return)&&(yield i.call(l))}finally{if(t)throw t.error}}return r})}}class WE{constructor(e,t,i){this.writableStream=e,this.defaultWriter=e.getWriter(),this.onClose=i,this.info=t}write(e){return this.defaultWriter.write(e)}close(){return ie(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 n5 extends WE{}class s5 extends WE{}class KE extends Ae{constructor(e,t,i,s,r){super(e,i,r),this.sid=t,this.receiver=s}get isLocal(){return!1}setMuted(e){this.isMuted!==e&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?He.Muted:He.Unmuted,this))}setMediaStream(e){this.mediaStream=e;const t=i=>{i.track===this._mediaStreamTrack&&(e.removeEventListener("removetrack",t),this.receiver&&"playoutDelayHint"in this.receiver&&(this.receiver.playoutDelayHint=void 0),this.receiver=void 0,this._currentBitrate=0,this.emit(He.Ended,this))};e.addEventListener("removetrack",t)}start(){this.startMonitor(),super.enable()}stop(){this.stopMonitor(),super.disable()}getRTCStatsReport(){return ie(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(),fg)),h8()&&this.registerTimeSyncUpdate()}registerTimeSyncUpdate(){const e=()=>{var t;this.timeSyncHandle=requestAnimationFrame(()=>e());const i=(t=this.receiver)===null||t===void 0?void 0:t.getSynchronizationSources()[0];if(i){const{timestamp:s,rtpTimestamp:r}=i;r&&this.rtpTimestamp!==r&&(this.emit(He.TimeSyncUpdate,{timestamp:s,rtpTimestamp:r}),this.rtpTimestamp=r)}};e()}}class r5 extends KE{constructor(e,t,i,s,r,a){super(e,t,Ae.Kind.Audio,i,a),this.monitorReceiver=()=>ie(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const l=yield this.getReceiverStats();l&&this.prevStats&&this.receiver&&(this._currentBitrate=jd(l,this.prevStats)),this.prevStats=l}),this.audioContext=s,this.webAudioPluginNodes=[],r&&(this.sinkId=r.deviceId)}setVolume(e){var t;for(const i of this.attachedElements)this.audioContext?(t=this.gainNode)===null||t===void 0||t.gain.setTargetAtTime(e,0,.1):i.volume=e;Es()&&this._mediaStreamTrack._setVolume(e),this.elementVolume=e}getVolume(){if(this.elementVolume)return this.elementVolume;if(Es())return 1;let e=0;return this.attachedElements.forEach(t=>{t.volume>e&&(e=t.volume)}),e}setSinkId(e){return ie(this,void 0,void 0,function*(){this.sinkId=e,yield Promise.all(this.attachedElements.map(t=>{if(Gm(t))return t.setSinkId(e)}))})}attach(e){const t=this.attachedElements.length===0;return e?super.attach(e):e=super.attach(),this.sinkId&&Gm(e)&&e.setSinkId(this.sinkId).catch(i=>{this.log.error("Failed to set sink id on remote audio track",i,this.logContext)}),this.audioContext&&t&&(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 t;return e?(t=super.detach(e),this.audioContext&&(this.attachedElements.length>0?this.connectWebAudio(this.audioContext,this.attachedElements[0]):this.disconnectWebAudio())):(t=super.detach(),this.disconnectWebAudio()),t}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,t){this.disconnectWebAudio(),this.sourceNode=e.createMediaStreamSource(t.srcObject);let i=this.sourceNode;this.webAudioPluginNodes.forEach(s=>{i.connect(s),i=s}),this.gainNode=e.createGain(),i.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(He.AudioPlaybackFailed,new Error("Audio Context couldn't be started automatically"))}).catch(s=>{this.emit(He.AudioPlaybackFailed,s)})}disconnectWebAudio(){var e,t;(e=this.gainNode)===null||e===void 0||e.disconnect(),(t=this.sourceNode)===null||t===void 0||t.disconnect(),this.gainNode=void 0,this.sourceNode=void 0}getReceiverStats(){return ie(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let t;return e.forEach(i=>{i.type==="inbound-rtp"&&(t={type:"audio",streamId:i.id,timestamp:i.timestamp,jitter:i.jitter,bytesReceived:i.bytesReceived,concealedSamples:i.concealedSamples,concealmentEvents:i.concealmentEvents,silentConcealedSamples:i.silentConcealedSamples,silentConcealmentEvents:i.silentConcealmentEvents,totalAudioEnergy:i.totalAudioEnergy,totalSamplesDuration:i.totalSamplesDuration})}),t})}}const Tg=100;class a5 extends KE{constructor(e,t,i,s,r){super(e,t,Ae.Kind.Video,i,r),this.elementInfos=[],this.monitorReceiver=()=>ie(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const a=yield this.getReceiverStats();a&&this.prevStats&&this.receiver&&(this._currentBitrate=jd(a,this.prevStats)),this.prevStats=a}),this.debouncedHandleResize=cg(()=>{this.updateDimensions()},Tg),this.adaptiveStreamSettings=s}get isAdaptiveStream(){return this.adaptiveStreamSettings!==void 0}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(e){super.setMuted(e),this.attachedElements.forEach(t=>{e?wo(this._mediaStreamTrack,t):Eo(this._mediaStreamTrack,t)})}attach(e){if(e?super.attach(e):e=super.attach(),this.adaptiveStreamSettings&&this.elementInfos.find(t=>t.element===e)===void 0){const t=new o5(e);this.observeElementInfo(t)}return e}observeElementInfo(e){this.adaptiveStreamSettings&&this.elementInfos.find(t=>t===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 t=this.elementInfos.filter(i=>i===e);for(const i of t)i.stopObserving();this.elementInfos=this.elementInfos.filter(i=>i!==e),this.updateVisibility(),this.debouncedHandleResize()}detach(e){let t=[];if(e)return this.stopObservingElement(e),super.detach(e);t=super.detach();for(const i of t)this.stopObservingElement(i);return t}getDecoderImplementation(){var e;return(e=this.prevStats)===null||e===void 0?void 0:e.decoderImplementation}getReceiverStats(){return ie(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let t,i="",s=new Map;return e.forEach(r=>{r.type==="inbound-rtp"?(i=r.codecId,t={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"&&s.set(r.id,r)}),t&&i!==""&&s.get(i)&&(t.mimeType=s.get(i).mimeType),t})}stopObservingElement(e){const t=this.elementInfos.filter(i=>i.element===e);for(const i of t)this.stopObservingElementInfo(i)}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return ie(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),this.isAdaptiveStream&&this.updateVisibility()})}updateVisibility(){var e,t;const i=this.elementInfos.reduce((l,c)=>Math.max(l,c.visibilityChangedAt||0),0),s=!((t=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pauseVideoInBackground)!==null&&t!==void 0)||t?this.isInBackground:!1,r=this.elementInfos.some(l=>l.pictureInPicture),a=this.elementInfos.some(l=>l.visible)&&!s||r;if(this.lastVisible!==a){if(!a&&Date.now()-i<Tg){Ui.setTimeout(()=>{this.updateVisibility()},Tg);return}this.lastVisible=a,this.emit(He.VisibilityChanged,a,this)}}updateDimensions(){var e,t;let i=0,s=0;const r=this.getPixelDensity();for(const a of this.elementInfos){const l=a.width()*r,c=a.height()*r;l+c>i+s&&(i=l,s=c)}((e=this.lastDimensions)===null||e===void 0?void 0:e.width)===i&&((t=this.lastDimensions)===null||t===void 0?void 0:t.height)===s||(this.lastDimensions={width:i,height:s},this.emit(He.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var e;const t=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pixelDensity;return t==="screen"?gE():t||(gE()>2?2:1)}}class o5{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(e,t){this.onVisibilityChanged=i=>{var s;const{target:r,isIntersecting:a}=i;r===this.element&&(this.isIntersecting=a,this.isPiP=rc(this.element),this.visibilityChangedAt=Date.now(),(s=this.handleVisibilityChanged)===null||s===void 0||s.call(this))},this.onEnterPiP=()=>{var i,s,r;(s=(i=window.documentPictureInPicture)===null||i===void 0?void 0:i.window)===null||s===void 0||s.addEventListener("pagehide",this.onLeavePiP),this.isPiP=rc(this.element),(r=this.handleVisibilityChanged)===null||r===void 0||r.call(this)},this.onLeavePiP=()=>{var i;this.isPiP=rc(this.element),(i=this.handleVisibilityChanged)===null||i===void 0||i.call(this)},this.element=e,this.isIntersecting=t??Sg(e),this.isPiP=Sn()&&rc(e),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var e,t,i;this.isIntersecting=Sg(this.element),this.isPiP=rc(this.element),this.element.handleResize=()=>{var s;(s=this.handleResize)===null||s===void 0||s.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,vE().observe(this.element),yE().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),(i=(t=window.documentPictureInPicture)===null||t===void 0?void 0:t.window)===null||i===void 0||i.addEventListener("pagehide",this.onLeavePiP)}stopObserving(){var e,t,i,s,r;(e=vE())===null||e===void 0||e.unobserve(this.element),(t=yE())===null||t===void 0||t.unobserve(this.element),this.element.removeEventListener("enterpictureinpicture",this.onEnterPiP),this.element.removeEventListener("leavepictureinpicture",this.onLeavePiP),(i=window.documentPictureInPicture)===null||i===void 0||i.removeEventListener("enter",this.onEnterPiP),(r=(s=window.documentPictureInPicture)===null||s===void 0?void 0:s.window)===null||r===void 0||r.removeEventListener("pagehide",this.onLeavePiP)}}function rc(n){var e,t;return document.pictureInPictureElement===n?!0:!((e=window.documentPictureInPicture)===null||e===void 0)&&e.window?Sg(n,(t=window.documentPictureInPicture)===null||t===void 0?void 0:t.window):!1}function Sg(n,e){const t=e||window;let i=n.offsetTop,s=n.offsetLeft;const r=n.offsetWidth,a=n.offsetHeight,{hidden:l}=n,{display:c}=getComputedStyle(n);for(;n.offsetParent;)n=n.offsetParent,i+=n.offsetTop,s+=n.offsetLeft;return i<t.pageYOffset+t.innerHeight&&s<t.pageXOffset+t.innerWidth&&i+a>t.pageYOffset&&s+r>t.pageXOffset&&!l&&c!=="none"}class Gs extends ks.EventEmitter{constructor(e,t,i,s){var r;super(),this.metadataMuted=!1,this.encryption=An.NONE,this.log=At,this.handleMuted=()=>{this.emit(He.Muted)},this.handleUnmuted=()=>{this.emit(He.Unmuted)},this.log=js((r=s==null?void 0:s.loggerName)!==null&&r!==void 0?r:es.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=e,this.trackSid=t,this.trackName=i,this.source=Ae.Source.Unknown}setTrack(e){this.track&&(this.track.off(He.Muted,this.handleMuted),this.track.off(He.Unmuted,this.handleUnmuted)),this.track=e,e&&(e.on(He.Muted,this.handleMuted),e.on(He.Unmuted,this.handleUnmuted))}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),wt(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return this.track!==void 0}get isEncrypted(){return this.encryption!==An.NONE}get audioTrack(){if(ws(this.track))return this.track}get videoTrack(){if(Po(this.track))return this.track}updateInfo(e){this.trackSid=e.sid,this.trackName=e.name,this.source=Ae.sourceFromProto(e.source),this.mimeType=e.mimeType,this.kind===Ae.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(n){(function(e){e.Desired="desired",e.Subscribed="subscribed",e.Unsubscribed="unsubscribed"})(n.SubscriptionStatus||(n.SubscriptionStatus={})),(function(e){e.Allowed="allowed",e.NotAllowed="not_allowed"})(n.PermissionStatus||(n.PermissionStatus={}))})(Gs||(Gs={}));class _g extends Gs{get isUpstreamPaused(){var e;return(e=this.track)===null||e===void 0?void 0:e.isUpstreamPaused}constructor(e,t,i,s){super(e,t.sid,t.name,s),this.track=void 0,this.handleTrackEnded=()=>{this.emit(He.Ended)},this.updateInfo(t),this.setTrack(i)}setTrack(e){this.track&&this.track.off(He.Ended,this.handleTrackEnded),super.setTrack(e),e&&e.on(He.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 ie(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.mute()})}unmute(){return ie(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.unmute()})}pauseUpstream(){return ie(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.pauseUpstream()})}resumeUpstream(){return ie(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.resumeUpstream()})}getTrackFeatures(){var e;if(ws(this.track)){const t=this.track.getSourceTrackSettings(),i=new Set;return t.autoGainControl&&i.add(Ni.TF_AUTO_GAIN_CONTROL),t.echoCancellation&&i.add(Ni.TF_ECHO_CANCELLATION),t.noiseSuppression&&i.add(Ni.TF_NOISE_SUPPRESSION),t.channelCount&&t.channelCount>1&&i.add(Ni.TF_STEREO),!((e=this.options)===null||e===void 0)&&e.dtx||i.add(Ni.TF_NO_DTX),this.track.enhancedNoiseCancellation&&i.add(Ni.TF_ENHANCED_NOISE_CANCELLATION),Array.from(i.values())}else return[]}}function ac(n,e){return ie(this,void 0,void 0,function*(){n??(n={});let t=!1;const{audioProcessor:i,videoProcessor:s,optionsWithoutProcessor:r}=kE(n);let a=r.audio,l=r.video;if(i&&typeof r.audio=="object"&&(r.audio.processor=i),s&&typeof r.video=="object"&&(r.video.processor=s),n.audio&&typeof r.audio=="object"&&typeof r.audio.deviceId=="string"){const f=r.audio.deviceId;r.audio.deviceId={exact:f},t=!0,a=Object.assign(Object.assign({},r.audio),{deviceId:{ideal:f}})}if(r.video&&typeof r.video=="object"&&typeof r.video.deviceId=="string"){const f=r.video.deviceId;r.video.deviceId={exact:f},t=!0,l=Object.assign(Object.assign({},r.video),{deviceId:{ideal:f}})}(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 c=SE(r,ME,OE),u=tg(c),d=navigator.mediaDevices.getUserMedia(u);r.audio&&(Ri.userMediaPromiseMap.set("audioinput",d),d.catch(()=>Ri.userMediaPromiseMap.delete("audioinput"))),r.video&&(Ri.userMediaPromiseMap.set("videoinput",d),d.catch(()=>Ri.userMediaPromiseMap.delete("videoinput")));try{const f=yield d;return yield Promise.all(f.getTracks().map(g=>ie(this,void 0,void 0,function*(){const T=g.kind==="audio";let S=T?c.audio:c.video;(typeof S=="boolean"||!S)&&(S={});let m;const _=T?u.audio:u.video;typeof _!="boolean"&&(m=_);const k=g.getSettings().deviceId;m!=null&&m.deviceId&&Tr(m.deviceId)!==k?m.deviceId=k:m||(m={deviceId:k});const R=U8(g,m,e);return R.kind===Ae.Kind.Video?R.source=Ae.Source.Camera:R.kind===Ae.Kind.Audio&&(R.source=Ae.Source.Microphone),R.mediaStream=f,ws(R)&&i?yield R.setProcessor(i):Po(R)&&s&&(yield R.setProcessor(s)),R})))}catch(f){if(!t)throw f;return ac(Object.assign(Object.assign({},n),{audio:a,video:l}),e)}})}function l5(n){return ie(this,void 0,void 0,function*(){return(yield ac({audio:!1,video:!0}))[0]})}function c5(n){return ie(this,void 0,void 0,function*(){return(yield ac({audio:!0,video:!1}))[0]})}var Cr;(function(n){n.Excellent="excellent",n.Good="good",n.Poor="poor",n.Lost="lost",n.Unknown="unknown"})(Cr||(Cr={}));function u5(n){switch(n){case Xl.EXCELLENT:return Cr.Excellent;case Xl.GOOD:return Cr.Good;case Xl.POOR:return Cr.Poor;case Xl.LOST:return Cr.Lost;default:return Cr.Unknown}}class YE extends ks.EventEmitter{get logContext(){var e,t;return Object.assign({},(t=(e=this.loggerOptions)===null||e===void 0?void 0:e.loggerContextCb)===null||t===void 0?void 0:t.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===Ql.AGENT}get isActive(){var e;return((e=this.participantInfo)===null||e===void 0?void 0:e.state)===So.ACTIVE}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(e,t,i,s,r,a){let l=arguments.length>6&&arguments[6]!==void 0?arguments[6]:Ql.STANDARD;var c;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=Cr.Unknown,this.log=At,this.log=js((c=a==null?void 0:a.loggerName)!==null&&c!==void 0?c:es.Participant),this.loggerOptions=a,this.setMaxListeners(100),this.sid=e,this.identity=t,this.name=i,this.metadata=s,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this._kind=l,this._attributes=r??{}}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(e){for(const[,t]of this.trackPublications)if(t.source===e)return t}getTrackPublicationByName(e){for(const[,t]of this.trackPublications)if(t.trackName===e)return t}waitUntilActive(){return this.isActive?Promise.resolve():this.activeFuture?this.activeFuture.promise:(this.activeFuture=new Do,this.once(ze.Active,()=>{var e,t;(t=(e=this.activeFuture)===null||e===void 0?void 0:e.resolve)===null||t===void 0||t.call(e),this.activeFuture=void 0}),this.activeFuture.promise)}get connectionQuality(){return this._connectionQuality}get isCameraEnabled(){var e;const t=this.getTrackPublication(Ae.Source.Camera);return!(!((e=t==null?void 0:t.isMuted)!==null&&e!==void 0)||e)}get isMicrophoneEnabled(){var e;const t=this.getTrackPublication(Ae.Source.Microphone);return!(!((e=t==null?void 0:t.isMuted)!==null&&e!==void 0)||e)}get isScreenShareEnabled(){return!!this.getTrackPublication(Ae.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 t;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===So.ACTIVE&&((t=this.participantInfo)===null||t===void 0?void 0:t.state)!==So.ACTIVE&&this.emit(ze.Active),e.permission&&this.setPermissions(e.permission),this.participantInfo=e,!0)}_setMetadata(e){const t=this.metadata!==e,i=this.metadata;this.metadata=e,t&&this.emit(ze.ParticipantMetadataChanged,i)}_setName(e){const t=this.name!==e;this.name=e,t&&this.emit(ze.ParticipantNameChanged,e)}_setAttributes(e){const t=f8(this.attributes,e);this._attributes=e,Object.keys(t).length>0&&this.emit(ze.AttributesChanged,t)}setPermissions(e){var t,i,s,r,a,l;const c=this.permissions,u=e.canPublish!==((t=this.permissions)===null||t===void 0?void 0:t.canPublish)||e.canSubscribe!==((i=this.permissions)===null||i===void 0?void 0:i.canSubscribe)||e.canPublishData!==((s=this.permissions)===null||s===void 0?void 0:s.canPublishData)||e.hidden!==((r=this.permissions)===null||r===void 0?void 0:r.hidden)||e.recorder!==((a=this.permissions)===null||a===void 0?void 0:a.recorder)||e.canPublishSources.length!==this.permissions.canPublishSources.length||e.canPublishSources.some((d,f)=>{var g;return d!==((g=this.permissions)===null||g===void 0?void 0:g.canPublishSources[f])})||e.canSubscribeMetrics!==((l=this.permissions)===null||l===void 0?void 0:l.canSubscribeMetrics);return this.permissions=e,u&&this.emit(ze.ParticipantPermissionsChanged,c),u}setIsSpeaking(e){e!==this.isSpeaking&&(this.isSpeaking=e,e&&(this.lastSpokeAt=new Date),this.emit(ze.IsSpeakingChanged,e))}setConnectionQuality(e){const t=this._connectionQuality;this._connectionQuality=u5(e),t!==this._connectionQuality&&this.emit(ze.ConnectionQualityChanged,this._connectionQuality)}setDisconnected(){var e,t;this.activeFuture&&((t=(e=this.activeFuture).reject)===null||t===void 0||t.call(e,new Error("Participant disconnected")),this.activeFuture=void 0)}setAudioContext(e){this.audioContext=e,this.audioTrackPublications.forEach(t=>ws(t.track)&&t.track.setAudioContext(e))}addTrackPublication(e){e.on(He.Muted,()=>{this.emit(ze.TrackMuted,e)}),e.on(He.Unmuted,()=>{this.emit(ze.TrackUnmuted,e)});const t=e;switch(t.track&&(t.track.sid=e.trackSid),this.trackPublications.set(e.trackSid,e),e.kind){case Ae.Kind.Audio:this.audioTrackPublications.set(e.trackSid,e);break;case Ae.Kind.Video:this.videoTrackPublications.set(e.trackSid,e);break}}}function d5(n){var e,t,i;if(!n.participantSid&&!n.participantIdentity)throw new Error("Invalid track permission, must provide at least one of participantIdentity and participantSid");return new hk({participantIdentity:(e=n.participantIdentity)!==null&&e!==void 0?e:"",participantSid:(t=n.participantSid)!==null&&t!==void 0?t:"",allTracks:(i=n.allowAll)!==null&&i!==void 0?i:!1,trackSids:n.allowedTrackSids||[]})}const XE=15e3;class h5 extends YE{constructor(e,t,i,s,r){super(e,t,void 0,void 0,void 0,{loggerName:s.loggerName,loggerContextCb:()=>this.engine.logContext}),this.pendingPublishing=new Set,this.pendingPublishPromises=new Map,this.participantTrackPermissions=[],this.allParticipantsAllowedToSubscribe=!0,this.encryptionType=An.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new Do)},this.handleReconnected=()=>{var a,l;(l=(a=this.reconnectFuture)===null||a===void 0?void 0:a.resolve)===null||l===void 0||l.call(a),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleDisconnected=()=>{var a,l,c,u,d,f;this.reconnectFuture&&(this.reconnectFuture.promise.catch(g=>this.log.warn(g.message,this.logContext)),(l=(a=this.reconnectFuture)===null||a===void 0?void 0:a.reject)===null||l===void 0||l.call(a,"Got disconnected during reconnection attempt"),this.reconnectFuture=void 0),this.signalConnectedFuture&&((u=(c=this.signalConnectedFuture).reject)===null||u===void 0||u.call(c,"Got disconnected without signal connected"),this.signalConnectedFuture=void 0),(f=(d=this.activeAgentFuture)===null||d===void 0?void 0:d.reject)===null||f===void 0||f.call(d,"Got disconnected without active agent present"),this.activeAgentFuture=void 0,this.firstActiveAgent=void 0},this.handleSignalConnected=a=>{var l,c;a.participant&&this.updateInfo(a.participant),this.signalConnectedFuture||(this.signalConnectedFuture=new Do),(c=(l=this.signalConnectedFuture).resolve)===null||c===void 0||c.call(l)},this.handleSignalRequestResponse=a=>{const{requestId:l,reason:c,message:u}=a,d=this.pendingSignalRequests.get(l);d&&(c!==wm.OK&&d.reject(new lE(u,c)),this.pendingSignalRequests.delete(l))},this.handleDataPacket=a=>{switch(a.value.case){case"rpcResponse":let l=a.value.value,c=null,u=null;l.value.case==="payload"?c=l.value.value:l.value.case==="error"&&(u=di.fromProto(l.value.value)),this.handleIncomingRpcResponse(l.requestId,c,u);break;case"rpcAck":let d=a.value.value;this.handleIncomingRpcAck(d.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(a=>d5(a)))},this.onTrackUnmuted=a=>{this.onTrackMuted(a,a.isUpstreamPaused)},this.onTrackMuted=(a,l)=>{if(l===void 0&&(l=!0),!a.sid){this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),wt(a)));return}this.engine.updateMuteStatus(a.sid,l)},this.onTrackUpstreamPaused=a=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),wt(a))),this.onTrackMuted(a,!0)},this.onTrackUpstreamResumed=a=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),wt(a))),this.onTrackMuted(a,a.isMuted)},this.onTrackFeatureUpdate=a=>{const l=this.audioTrackPublications.get(a.sid);if(!l){this.log.warn("Could not update local audio track settings, missing publication for track ".concat(a.sid),this.logContext);return}this.engine.client.sendUpdateLocalAudioTrack(l.trackSid,l.getTrackFeatures())},this.handleSubscribedQualityUpdate=a=>ie(this,void 0,void 0,function*(){var l,c,u,d,f;if(!(!((f=this.roomOptions)===null||f===void 0)&&f.dynacast))return;const g=this.videoTrackPublications.get(a.trackSid);if(!g){this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:a.trackSid}));return}if(!g.videoTrack)return;const T=yield g.videoTrack.setPublishingCodecs(a.subscribedCodecs);try{for(var S=!0,m=qs(T),_;_=yield m.next(),l=_.done,!l;S=!0){d=_.value,S=!1;const k=d;HU(k)&&(this.log.debug("publish ".concat(k," for ").concat(g.videoTrack.sid),Object.assign(Object.assign({},this.logContext),wt(g))),yield this.publishAdditionalCodecForTrack(g.videoTrack,k,g.options))}}catch(k){c={error:k}}finally{try{!S&&!l&&(u=m.return)&&(yield u.call(m))}finally{if(c)throw c.error}}}),this.handleLocalTrackUnpublished=a=>{const l=this.trackPublications.get(a.trackSid);if(!l){this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:a.trackSid}));return}this.unpublishTrack(l.track)},this.handleTrackEnded=a=>ie(this,void 0,void 0,function*(){if(a.source===Ae.Source.ScreenShare||a.source===Ae.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),wt(a))),this.unpublishTrack(a);else if(a.isUserProvided)yield a.mute();else if(zs(a)||Sr(a))try{if(Sn())try{const l=yield navigator==null?void 0:navigator.permissions.query({name:a.source===Ae.Source.Camera?"camera":"microphone"});if(l&&l.state==="denied")throw this.log.warn("user has revoked access to ".concat(a.source),Object.assign(Object.assign({},this.logContext),wt(a))),l.onchange=()=>{l.state!=="denied"&&(a.isMuted||a.restartTrack(),l.onchange=null)},new Error("GetUserMedia Permission denied")}catch{}a.isMuted||(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),wt(a))),zs(a)?yield a.restartTrack({deviceId:"default"}):yield a.restartTrack())}catch{this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),wt(a))),yield a.mute()}}),this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this.engine=i,this.roomOptions=s,this.setupEngine(i),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!==An.NONE}getTrackPublication(e){const t=super.getTrackPublication(e);if(t)return t}getTrackPublicationByName(e){const t=super.getTrackPublicationByName(e);if(t)return t}setupEngine(e){this.engine=e,this.engine.on(Ge.RemoteMute,(t,i)=>{const s=this.trackPublications.get(t);!s||!s.track||(i?s.mute():s.unmute())}),this.engine.on(Ge.Connected,this.handleReconnected).on(Ge.SignalConnected,this.handleSignalConnected).on(Ge.SignalRestarted,this.handleReconnected).on(Ge.SignalResumed,this.handleReconnected).on(Ge.Restarting,this.handleReconnecting).on(Ge.Resuming,this.handleReconnecting).on(Ge.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(Ge.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(Ge.Disconnected,this.handleDisconnected).on(Ge.SignalRequestResponse,this.handleSignalRequestResponse).on(Ge.DataPacketReceived,this.handleDataPacket),this.signalConnectedFuture=void 0}setMetadata(e){return ie(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({metadata:e})})}setName(e){return ie(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({name:e})})}setAttributes(e){return ie(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({attributes:e})})}requestMetadataUpdate(e){return ie(this,arguments,void 0,function(t){var i=this;let{metadata:s,name:r,attributes:a}=t;return(function*(){return new Promise((l,c)=>ie(i,void 0,void 0,function*(){var u,d;try{let f=!1;const g=yield this.engine.client.sendUpdateLocalMetadata((u=s??this.metadata)!==null&&u!==void 0?u:"",(d=r??this.name)!==null&&d!==void 0?d:"",a),T=performance.now();for(this.pendingSignalRequests.set(g,{resolve:l,reject:S=>{c(S),f=!0},values:{name:r,metadata:s,attributes:a}});performance.now()-T<5e3&&!f;){if((!r||this.name===r)&&(!s||this.metadata===s)&&(!a||Object.entries(a).every(S=>{let[m,_]=S;return this.attributes[m]===_||_===""&&!this.attributes[m]}))){this.pendingSignalRequests.delete(g),l();return}yield Tn(50)}c(new lE("Request to update local metadata timed out","TimeoutError"))}catch(f){f instanceof Error&&c(f)}}))})()})}setCameraEnabled(e,t,i){return this.setTrackEnabled(Ae.Source.Camera,e,t,i)}setMicrophoneEnabled(e,t,i){return this.setTrackEnabled(Ae.Source.Microphone,e,t,i)}setScreenShareEnabled(e,t,i){return this.setTrackEnabled(Ae.Source.ScreenShare,e,t,i)}setPermissions(e){const t=this.permissions,i=super.setPermissions(e);return i&&t&&this.emit(ze.ParticipantPermissionsChanged,t),i}setE2EEEnabled(e){return ie(this,void 0,void 0,function*(){this.encryptionType=e?An.GCM:An.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(e,t,i,s){return ie(this,void 0,void 0,function*(){var r,a;this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:e,enabled:t})),this.republishPromise&&(yield this.republishPromise);let l=this.getTrackPublication(e);if(t)if(l)yield l.unmute();else{let c;if(this.pendingPublishing.has(e)){const u=yield this.waitForPendingPublicationOfSource(e);return u||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e})),yield u==null?void 0:u.unmute(),u}this.pendingPublishing.add(e);try{switch(e){case Ae.Source.Camera:c=yield this.createTracks({video:(r=i)!==null&&r!==void 0?r:!0});break;case Ae.Source.Microphone:c=yield this.createTracks({audio:(a=i)!==null&&a!==void 0?a:!0});break;case Ae.Source.ScreenShare:c=yield this.createScreenTracks(Object.assign({},i));break;default:throw new $s(e)}}catch(u){throw c==null||c.forEach(d=>{d.stop()}),u instanceof Error&&this.emit(ze.MediaDevicesError,u,ig(e)),this.pendingPublishing.delete(e),u}for(const u of c)e===Ae.Source.Microphone&&ws(u)&&(s!=null&&s.preConnectBuffer)&&(this.log.info("starting preconnect buffer for microphone",Object.assign({},this.logContext)),u.startPreConnectBuffer());try{const u=[];for(const f of c)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),wt(f))),u.push(this.publishTrack(f,s));[l]=yield Promise.all(u)}catch(u){throw c==null||c.forEach(d=>{d.stop()}),u}finally{this.pendingPublishing.delete(e)}}else if(!(l!=null&&l.track)&&this.pendingPublishing.has(e)&&(l=yield this.waitForPendingPublicationOfSource(e),l||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e}))),l&&l.track)if(e===Ae.Source.ScreenShare){l=yield this.unpublishTrack(l.track);const c=this.getTrackPublication(Ae.Source.ScreenShareAudio);c&&c.track&&this.unpublishTrack(c.track)}else yield l.mute();return l})}enableCameraAndMicrophone(){return ie(this,void 0,void 0,function*(){if(!(this.pendingPublishing.has(Ae.Source.Camera)||this.pendingPublishing.has(Ae.Source.Microphone))){this.pendingPublishing.add(Ae.Source.Camera),this.pendingPublishing.add(Ae.Source.Microphone);try{const e=yield this.createTracks({audio:!0,video:!0});yield Promise.all(e.map(t=>this.publishTrack(t)))}finally{this.pendingPublishing.delete(Ae.Source.Camera),this.pendingPublishing.delete(Ae.Source.Microphone)}}})}createTracks(e){return ie(this,void 0,void 0,function*(){var t,i;e??(e={});const s=SE(e,(t=this.roomOptions)===null||t===void 0?void 0:t.audioCaptureDefaults,(i=this.roomOptions)===null||i===void 0?void 0:i.videoCaptureDefaults);try{return(yield ac(s,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext})).map(l=>(ws(l)&&(this.microphoneError=void 0,l.setAudioContext(this.audioContext),l.source=Ae.Source.Microphone,this.emit(ze.AudioStreamAcquired)),Po(l)&&(this.cameraError=void 0,l.source=Ae.Source.Camera),l))}catch(r){throw r instanceof Error&&(e.audio&&(this.microphoneError=r),e.video&&(this.cameraError=r)),r}})}createScreenTracks(e){return ie(this,void 0,void 0,function*(){if(e===void 0&&(e={}),navigator.mediaDevices.getDisplayMedia===void 0)throw new Bm("getDisplayMedia not supported");e.resolution===void 0&&!XU()&&(e.resolution=$m.h1080fps30.resolution);const t=u8(e),i=yield navigator.mediaDevices.getDisplayMedia(t),s=i.getVideoTracks();if(s.length===0)throw new $s("no video track found");const r=new Hd(s[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});r.source=Ae.Source.ScreenShare,e.contentHint&&(r.mediaStreamTrack.contentHint=e.contentHint);const a=[r];if(i.getAudioTracks().length>0){this.emit(ze.AudioStreamAcquired);const l=new qd(i.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});l.source=Ae.Source.ScreenShareAudio,a.push(l)}return a})}publishTrack(e,t){return ie(this,void 0,void 0,function*(){return this.publishOrRepublishTrack(e,t)})}publishOrRepublishTrack(e,t){return ie(this,arguments,void 0,function(i,s){var r=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return(function*(){var l,c,u,d;zs(i)&&i.setAudioContext(r.audioContext),yield(l=r.reconnectFuture)===null||l===void 0?void 0:l.promise,r.republishPromise&&!a&&(yield r.republishPromise),Ao(i)&&r.pendingPublishPromises.has(i)&&(yield r.pendingPublishPromises.get(i));let f;if(i instanceof MediaStreamTrack)f=i.getConstraints();else{f=i.constraints;let k;switch(i.source){case Ae.Source.Microphone:k="audioinput";break;case Ae.Source.Camera:k="videoinput"}k&&r.activeDeviceMap.has(k)&&(f=Object.assign(Object.assign({},f),{deviceId:r.activeDeviceMap.get(k)}))}if(i instanceof MediaStreamTrack)switch(i.kind){case"audio":i=new qd(i,f,!0,r.audioContext,{loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});break;case"video":i=new Hd(i,f,!0,{loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});break;default:throw new $s("unsupported MediaStreamTrack kind ".concat(i.kind))}else i.updateLoggerOptions({loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});let g;if(r.trackPublications.forEach(k=>{k.track&&k.track===i&&(g=k)}),g)return r.log.warn("track has already been published, skipping",Object.assign(Object.assign({},r.logContext),wt(g))),g;const T="channelCount"in i.mediaStreamTrack.getSettings()&&i.mediaStreamTrack.getSettings().channelCount===2||i.mediaStreamTrack.getConstraints().channelCount===2,S=(c=s==null?void 0:s.forceStereo)!==null&&c!==void 0?c:T;S&&(s||(s={}),s.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),wt(i))),s.red===void 0&&r.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),(u=s.dtx)!==null&&u!==void 0||(s.dtx=!1),(d=s.red)!==null&&d!==void 0||(s.red=!1));const m=Object.assign(Object.assign({},r.roomOptions.publishDefaults),s);!QU()&&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)),m.simulcast=!1),m.source&&(i.source=m.source);const _=new Promise((k,R)=>ie(r,void 0,void 0,function*(){try{if(this.engine.client.currentState!==Jt.CONNECTED){this.log.debug("deferring track publication until signal is connected",Object.assign(Object.assign({},this.logContext),{track:wt(i)}));const D=setTimeout(()=>{R(new oE("publishing rejected as engine not connected within timeout",408))},15e3);yield this.waitUntilEngineConnected(),clearTimeout(D);const F=yield this.publish(i,m,S);k(F)}else try{const D=yield this.publish(i,m,S);k(D)}catch(D){R(D)}}catch(D){R(D)}}));r.pendingPublishPromises.set(i,_);try{return yield _}catch(k){throw k}finally{r.pendingPublishPromises.delete(i)}})()})}waitUntilEngineConnected(){return this.signalConnectedFuture||(this.signalConnectedFuture=new Do),this.signalConnectedFuture.promise}hasPermissionsToPublish(e){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),wt(e))),!1;const{canPublish:t,canPublishSources:i}=this.permissions;return t&&(i.length===0||i.map(s=>p8(s)).includes(e.source))?!0:(this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),wt(e))),!1)}publish(e,t,i){return ie(this,void 0,void 0,function*(){var s,r,a,l,c,u,d,f,g,T;if(!this.hasPermissionsToPublish(e))throw new oE("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find(x=>Ao(e)&&x.source===e.source)&&e.source!==Ae.Source.Unknown&&this.log.info("publishing a second track with the same source: ".concat(e.source),Object.assign(Object.assign({},this.logContext),wt(e))),t.stopMicTrackOnMute&&ws(e)&&(e.stopOnMute=!0),e.source===Ae.Source.ScreenShare&&xo()&&(t.simulcast=!1),t.videoCodec==="av1"&&!WU()&&(t.videoCodec=void 0),t.videoCodec==="vp9"&&!KU()&&(t.videoCodec=void 0),t.videoCodec===void 0&&(t.videoCodec=ug),this.enabledPublishVideoCodecs.length>0&&(this.enabledPublishVideoCodecs.some(x=>t.videoCodec===Fd(x.mime))||(t.videoCodec=Fd(this.enabledPublishVideoCodecs[0].mime)));const m=t.videoCodec;e.on(He.Muted,this.onTrackMuted),e.on(He.Unmuted,this.onTrackUnmuted),e.on(He.Ended,this.handleTrackEnded),e.on(He.UpstreamPaused,this.onTrackUpstreamPaused),e.on(He.UpstreamResumed,this.onTrackUpstreamResumed),e.on(He.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);const _=[],k=!(!((s=t.dtx)!==null&&s!==void 0)||s),R=e.getSourceTrackSettings();R.autoGainControl&&_.push(Ni.TF_AUTO_GAIN_CONTROL),R.echoCancellation&&_.push(Ni.TF_ECHO_CANCELLATION),R.noiseSuppression&&_.push(Ni.TF_NOISE_SUPPRESSION),R.channelCount&&R.channelCount>1&&_.push(Ni.TF_STEREO),k&&_.push(Ni.TF_NO_DTX),zs(e)&&e.hasPreConnectBuffer&&_.push(Ni.TF_PRECONNECT_BUFFER);const D=new Sm({cid:e.mediaStreamTrack.id,name:t.name,type:Ae.kindToProto(e.kind),muted:e.isMuted,source:Ae.sourceToProto(e.source),disableDtx:k,encryption:this.encryptionType,stereo:i,disableRed:this.isE2EEEnabled||!(!((r=t.red)!==null&&r!==void 0)||r),stream:t==null?void 0:t.stream,backupCodecPolicy:t==null?void 0:t.backupCodecPolicy,audioFeatures:_});let F;if(e.kind===Ae.Kind.Video){let x={width:0,height:0};try{x=yield e.waitForDimensions()}catch{const M=(l=(a=this.roomOptions.videoCaptureDefaults)===null||a===void 0?void 0:a.resolution)!==null&&l!==void 0?l:ic.h720.resolution;x={width:M.width,height:M.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),wt(e)),{dims:x}))}D.width=x.width,D.height=x.height,Sr(e)&&(Hs(m)&&(e.source===Ae.Source.ScreenShare&&(t.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),wt(e))))),t.scalabilityMode=(c=t.scalabilityMode)!==null&&c!==void 0?c:"L3T3_KEY"),D.simulcastCodecs=[new Tm({codec:m,cid:e.mediaStreamTrack.id})],t.backupCodec===!0&&(t.backupCodec={codec:ug}),t.backupCodec&&m!==t.backupCodec.codec&&D.encryption===An.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),D.simulcastCodecs.push(new Tm({codec:t.backupCodec.codec,cid:""})))),F=gg(e.source===Ae.Source.ScreenShare,D.width,D.height,t),D.layers=$E(D.width,D.height,F,Hs(t.videoCodec))}else e.kind===Ae.Kind.Audio&&(F=[{maxBitrate:(u=t.audioPreset)===null||u===void 0?void 0:u.maxBitrate,priority:(f=(d=t.audioPreset)===null||d===void 0?void 0:d.priority)!==null&&f!==void 0?f:"high",networkPriority:(T=(g=t.audioPreset)===null||g===void 0?void 0:g.priority)!==null&&T!==void 0?T:"high"}]);if(!this.engine||this.engine.isClosed)throw new Ei("cannot publish track when not connected");const L=()=>ie(this,void 0,void 0,function*(){var x,A,M;if(!this.engine.pcManager)throw new Ei("pcManager is not ready");if(e.sender=yield this.engine.createSender(e,t,F),Sr(e)&&((x=t.degradationPreference)!==null&&x!==void 0||(t.degradationPreference=K8(e)),e.setDegradationPreference(t.degradationPreference)),F)if(xo()&&e.kind===Ae.Kind.Audio){let V;for(const G of this.engine.pcManager.publisher.getTransceivers())if(G.sender===e.sender){V=G;break}V&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:V,codec:"opus",maxbr:!((A=F[0])===null||A===void 0)&&A.maxBitrate?F[0].maxBitrate/1e3:0})}else e.codec&&Hs(e.codec)&&(!((M=F[0])===null||M===void 0)&&M.maxBitrate)&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:D.cid,codec:e.codec,maxbr:F[0].maxBitrate/1e3});yield this.engine.negotiate()});let $;const U=new Promise((x,A)=>ie(this,void 0,void 0,function*(){var M;try{$=yield this.engine.addTrack(D),x($)}catch(V){e.sender&&(!((M=this.engine.pcManager)===null||M===void 0)&&M.publisher)&&(this.engine.pcManager.publisher.removeTrack(e.sender),yield this.engine.negotiate().catch(G=>{this.log.error("failed to negotiate after removing track due to failed add track request",Object.assign(Object.assign(Object.assign({},this.logContext),wt(e)),{error:G}))})),A(V)}}));if(this.enabledPublishVideoCodecs.length>0)$=(yield Promise.all([U,L()]))[0];else{$=yield U;let x;if($.codecs.forEach(A=>{x===void 0&&(x=A.mimeType)}),x&&e.kind===Ae.Kind.Video){const A=Fd(x);A!==m&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),wt(e)),{codec:A})),t.videoCodec=A,F=gg(e.source===Ae.Source.ScreenShare,D.width,D.height,t))}yield L()}const O=new _g(e.kind,$,e,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});if(O.options=t,e.sid=$.sid,this.log.debug("publishing ".concat(e.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:F,trackInfo:$})),Sr(e)?e.startMonitor(this.engine.client):zs(e)&&e.startMonitor(),this.addTrackPublication(O),this.emit(ze.LocalTrackPublished,O),zs(e)&&$.audioFeatures.includes(Ni.TF_PRECONNECT_BUFFER)){const x=e.getPreConnectBuffer();this.on(ze.LocalTrackSubscribed,A=>{if(A.trackSid===$.sid){if(!e.hasPreConnectBuffer){this.log.warn("subscribe event came to late, buffer already closed",this.logContext);return}this.log.debug("finished recording preconnect buffer",Object.assign(Object.assign({},this.logContext),wt(e))),e.stopPreConnectBuffer()}}),x&&new Promise((M,V)=>ie(this,void 0,void 0,function*(){var G,ae,se,oe,q,K;try{this.log.debug("waiting for agent",Object.assign(Object.assign({},this.logContext),wt(e)));const Ne=setTimeout(()=>{V(new Error("agent not active within 10 seconds"))},1e4),Le=yield this.waitUntilActiveAgentPresent();clearTimeout(Ne),this.log.debug("sending preconnect buffer",Object.assign(Object.assign({},this.logContext),wt(e)));const xe=yield this.streamBytes({name:"preconnect-buffer",mimeType:"audio/opus",topic:"lk.agent.pre-connect-audio-buffer",destinationIdentities:[Le.identity],attributes:{trackId:O.trackSid,sampleRate:String((q=R.sampleRate)!==null&&q!==void 0?q:"48000"),channels:String((K=R.channelCount)!==null&&K!==void 0?K:"1")}});try{for(var te=!0,ne=qs(x),de;de=yield ne.next(),G=de.done,!G;te=!0){oe=de.value,te=!1;const me=oe;yield xe.write(me)}}catch(me){ae={error:me}}finally{try{!te&&!G&&(se=ne.return)&&(yield se.call(ne))}finally{if(ae)throw ae.error}}yield xe.close(),M()}catch(Ne){V(Ne)}})).then(()=>{this.log.debug("preconnect buffer sent successfully",Object.assign(Object.assign({},this.logContext),wt(e)))}).catch(M=>{this.log.error("error sending preconnect buffer",Object.assign(Object.assign(Object.assign({},this.logContext),wt(e)),{error:M}))})}return O})}get isLocal(){return!0}publishAdditionalCodecForTrack(e,t,i){return ie(this,void 0,void 0,function*(){var s;if(this.encryptionType!==An.NONE)return;let r;if(this.trackPublications.forEach(T=>{T.track&&T.track===e&&(r=T)}),!r)throw new $s("track is not published");if(!Sr(e))throw new $s("track is not a video track");const a=Object.assign(Object.assign({},(s=this.roomOptions)===null||s===void 0?void 0:s.publishDefaults),i),l=z8(e,t,a);if(!l){this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),wt(e)));return}const c=e.addSimulcastTrack(t,l);if(!c)return;const u=new Sm({cid:c.mediaStreamTrack.id,type:Ae.kindToProto(e.kind),muted:e.isMuted,source:Ae.sourceToProto(e.source),sid:e.sid,simulcastCodecs:[{codec:a.videoCodec,cid:c.mediaStreamTrack.id}]});if(u.layers=$E(u.width,u.height,l),!this.engine||this.engine.isClosed)throw new Ei("cannot publish track when not connected");const d=()=>ie(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(e,c,a,l),yield this.engine.negotiate()}),g=(yield Promise.all([this.engine.addTrack(u),d()]))[0];this.log.debug("published ".concat(t," for track ").concat(e.sid),Object.assign(Object.assign({},this.logContext),{encodings:l,trackInfo:g}))})}unpublishTrack(e,t){return ie(this,void 0,void 0,function*(){var i,s;if(Ao(e)){const u=this.pendingPublishPromises.get(e);u&&(this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),wt(e))),yield u)}const r=this.getPublicationForTrack(e),a=r?wt(r):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),a)),!r||!r.track){this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),a));return}e=r.track,e.off(He.Muted,this.onTrackMuted),e.off(He.Unmuted,this.onTrackUnmuted),e.off(He.Ended,this.handleTrackEnded),e.off(He.UpstreamPaused,this.onTrackUpstreamPaused),e.off(He.UpstreamResumed,this.onTrackUpstreamResumed),e.off(He.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate),t===void 0&&(t=(s=(i=this.roomOptions)===null||i===void 0?void 0:i.stopLocalTrackOnUnpublish)!==null&&s!==void 0?s:!0),t?e.stop():e.stopMonitor();let l=!1;const c=e.sender;if(e.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentState<ui.FAILED&&c)try{for(const u of this.engine.pcManager.publisher.getTransceivers())u.sender===c&&(u.direction="inactive",l=!0);if(this.engine.removeTrack(c)&&(l=!0),Sr(e)){for(const[,u]of e.simulcastCodecs)u.sender&&(this.engine.removeTrack(u.sender)&&(l=!0),u.sender=void 0);e.simulcastCodecs.clear()}}catch(u){this.log.warn("failed to unpublish track",Object.assign(Object.assign(Object.assign({},this.logContext),a),{error:u}))}switch(this.trackPublications.delete(r.trackSid),r.kind){case Ae.Kind.Audio:this.audioTrackPublications.delete(r.trackSid);break;case Ae.Kind.Video:this.videoTrackPublications.delete(r.trackSid);break}return this.emit(ze.LocalTrackUnpublished,r),r.setTrack(void 0),l&&(yield this.engine.negotiate()),r})}unpublishTracks(e){return ie(this,void 0,void 0,function*(){return(yield Promise.all(e.map(i=>this.unpublishTrack(i)))).filter(i=>!!i)})}republishAllTracks(e){return ie(this,arguments,void 0,function(t){var i=this;let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return(function*(){i.republishPromise&&(yield i.republishPromise),i.republishPromise=new Promise((r,a)=>ie(i,void 0,void 0,function*(){try{const l=[];this.trackPublications.forEach(c=>{c.track&&(t&&(c.options=Object.assign(Object.assign({},c.options),t)),l.push(c))}),yield Promise.all(l.map(c=>ie(this,void 0,void 0,function*(){const u=c.track;yield this.unpublishTrack(u,!1),s&&!u.isMuted&&u.source!==Ae.Source.ScreenShare&&u.source!==Ae.Source.ScreenShareAudio&&(zs(u)||Sr(u))&&!u.isUserProvided&&(this.log.debug("restarting existing track",Object.assign(Object.assign({},this.logContext),{track:c.trackSid})),yield u.restartTrack()),yield this.publishOrRepublishTrack(u,c.options,!0)}))),r()}catch(l){a(l)}finally{this.republishPromise=void 0}})),yield i.republishPromise})()})}publishData(e){return ie(this,arguments,void 0,function(t){var i=this;let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return(function*(){const r=s.reliable?It.RELIABLE:It.LOSSY,a=s.destinationIdentities,l=s.topic,c=new vn({kind:r,value:{case:"user",value:new GC({participantIdentity:i.identity,payload:t,destinationIdentities:a,topic:l})}});yield i.engine.sendDataPacket(c,r)})()})}publishDtmf(e,t){return ie(this,void 0,void 0,function*(){const i=new vn({kind:It.RELIABLE,value:{case:"sipDtmf",value:new WC({code:e,digit:t})}});yield this.engine.sendDataPacket(i,It.RELIABLE)})}sendChatMessage(e,t){return ie(this,void 0,void 0,function*(){const i={id:crypto.randomUUID(),message:e,timestamp:Date.now(),attachedFiles:t==null?void 0:t.attachments},s=new vn({value:{case:"chatMessage",value:new pm(Object.assign(Object.assign({},i),{timestamp:ii.parse(i.timestamp)}))}});return yield this.engine.sendDataPacket(s,It.RELIABLE),this.emit(ze.ChatMessage,i),i})}editChatMessage(e,t){return ie(this,void 0,void 0,function*(){const i=Object.assign(Object.assign({},t),{message:e,editTimestamp:Date.now()}),s=new vn({value:{case:"chatMessage",value:new pm(Object.assign(Object.assign({},i),{timestamp:ii.parse(i.timestamp),editTimestamp:ii.parse(i.editTimestamp)}))}});return yield this.engine.sendDataPacket(s,It.RELIABLE),this.emit(ze.ChatMessage,i),i})}sendText(e,t){return ie(this,void 0,void 0,function*(){var i;const s=crypto.randomUUID(),a=new TextEncoder().encode(e).byteLength,l=(i=t==null?void 0:t.attachments)===null||i===void 0?void 0:i.map(()=>crypto.randomUUID()),c=new Array(l?l.length+1:1).fill(0),u=(f,g)=>{var T;c[g]=f;const S=c.reduce((m,_)=>m+_,0);(T=t==null?void 0:t.onProgress)===null||T===void 0||T.call(t,S)},d=yield this.streamText({streamId:s,totalSize:a,destinationIdentities:t==null?void 0:t.destinationIdentities,topic:t==null?void 0:t.topic,attachedStreamIds:l,attributes:t==null?void 0:t.attributes});return yield d.write(e),u(1,0),yield d.close(),t!=null&&t.attachments&&l&&(yield Promise.all(t.attachments.map((f,g)=>ie(this,void 0,void 0,function*(){return this._sendFile(l[g],f,{topic:t.topic,mimeType:f.type,onProgress:T=>{u(T,g+1)}})})))),d.info})}streamText(e){return ie(this,void 0,void 0,function*(){var t,i;const s=(t=e==null?void 0:e.streamId)!==null&&t!==void 0?t:crypto.randomUUID(),r={id:s,mimeType:"text/plain",timestamp:Date.now(),topic:(i=e==null?void 0:e.topic)!==null&&i!==void 0?i:"",size:e==null?void 0:e.totalSize,attributes:e==null?void 0:e.attributes},a=new gm({streamId:s,mimeType:r.mimeType,topic:r.topic,timestamp:da(r.timestamp),totalLength:da(e==null?void 0:e.totalSize),attributes:r.attributes,contentHeader:{case:"textHeader",value:new sk({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"?mm.UPDATE:mm.CREATE})}}),l=e==null?void 0:e.destinationIdentities,c=new vn({destinationIdentities:l,value:{case:"streamHeader",value:a}});yield this.engine.sendDataPacket(c,It.RELIABLE);let u=0;const d=this,f=new WritableStream({write(S){return ie(this,void 0,void 0,function*(){for(const m of l8(S,XE)){yield d.engine.waitForBufferStatusLow(It.RELIABLE);const _=new ym({content:m,streamId:s,chunkIndex:da(u)}),k=new vn({destinationIdentities:l,value:{case:"streamChunk",value:_}});yield d.engine.sendDataPacket(k,It.RELIABLE),u+=1}})},close(){return ie(this,void 0,void 0,function*(){const S=new vm({streamId:s}),m=new vn({destinationIdentities:l,value:{case:"streamTrailer",value:S}});yield d.engine.sendDataPacket(m,It.RELIABLE)})},abort(S){console.log("Sink error:",S)}});let g=()=>ie(this,void 0,void 0,function*(){yield T.close()});d.engine.once(Ge.Closing,g);const T=new n5(f,r,()=>this.engine.off(Ge.Closing,g));return T})}sendFile(e,t){return ie(this,void 0,void 0,function*(){const i=crypto.randomUUID();return yield this._sendFile(i,e,t),{id:i}})}_sendFile(e,t,i){return ie(this,void 0,void 0,function*(){var s;const r=yield this.streamBytes({streamId:e,totalSize:t.size,name:t.name,mimeType:(s=i==null?void 0:i.mimeType)!==null&&s!==void 0?s:t.type,topic:i==null?void 0:i.topic,destinationIdentities:i==null?void 0:i.destinationIdentities}),a=t.stream().getReader();for(;;){const{done:l,value:c}=yield a.read();if(l)break;yield r.write(c)}return yield r.close(),r.info})}streamBytes(e){return ie(this,void 0,void 0,function*(){var t,i,s,r,a;const l=(t=e==null?void 0:e.streamId)!==null&&t!==void 0?t:crypto.randomUUID(),c=e==null?void 0:e.destinationIdentities,u={id:l,mimeType:(i=e==null?void 0:e.mimeType)!==null&&i!==void 0?i:"application/octet-stream",topic:(s=e==null?void 0:e.topic)!==null&&s!==void 0?s:"",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"},d=new gm({totalLength:da((a=u.size)!==null&&a!==void 0?a:0),mimeType:u.mimeType,streamId:l,topic:u.topic,timestamp:da(Date.now()),attributes:u.attributes,contentHeader:{case:"byteHeader",value:new rk({name:u.name})}}),f=new vn({destinationIdentities:c,value:{case:"streamHeader",value:d}});yield this.engine.sendDataPacket(f,It.RELIABLE);let g=0;const T=new gn,S=this.engine,m=this.log,_=new WritableStream({write(R){return ie(this,void 0,void 0,function*(){const D=yield T.lock();let F=0;try{for(;F<R.byteLength;){const L=R.slice(F,F+XE);yield S.waitForBufferStatusLow(It.RELIABLE);const $=new vn({destinationIdentities:c,value:{case:"streamChunk",value:new ym({content:L,streamId:l,chunkIndex:da(g)})}});yield S.sendDataPacket($,It.RELIABLE),g+=1,F+=L.byteLength}}finally{D()}})},close(){return ie(this,void 0,void 0,function*(){const R=new vm({streamId:l}),D=new vn({destinationIdentities:c,value:{case:"streamTrailer",value:R}});yield S.sendDataPacket(D,It.RELIABLE)})},abort(R){m.error("Sink error:",R)}});return new s5(_,u)})}performRpc(e){return ie(this,arguments,void 0,function(t){var i=this;let{destinationIdentity:s,method:r,payload:a,responseTimeout:l=1e4}=t;return(function*(){return new Promise((u,d)=>ie(i,void 0,void 0,function*(){var f,g,T,S;if(hg(a)>LE){d(di.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));return}if(!((g=(f=this.engine.latestJoinResponse)===null||f===void 0?void 0:f.serverInfo)===null||g===void 0)&&g.version&&br((S=(T=this.engine.latestJoinResponse)===null||T===void 0?void 0:T.serverInfo)===null||S===void 0?void 0:S.version,"1.8.0")<0){d(di.builtIn("UNSUPPORTED_SERVER"));return}const m=crypto.randomUUID();yield this.publishRpcRequest(s,m,r,a,l-2e3);const _=setTimeout(()=>{this.pendingAcks.delete(m),d(di.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(m),clearTimeout(k)},2e3);this.pendingAcks.set(m,{resolve:()=>{clearTimeout(_)},participantIdentity:s});const k=setTimeout(()=>{this.pendingResponses.delete(m),d(di.builtIn("RESPONSE_TIMEOUT"))},l);this.pendingResponses.set(m,{resolve:(R,D)=>{clearTimeout(k),this.pendingAcks.has(m)&&(console.warn("RPC response received before ack",m),this.pendingAcks.delete(m),clearTimeout(_)),D?d(D):u(R??"")},participantIdentity:s})}))})()})}registerRpcMethod(e,t){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,t)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}setTrackSubscriptionPermissions(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];this.participantTrackPermissions=t,this.allParticipantsAllowedToSubscribe=e,this.engine.client.isDisconnected||this.updateTrackSubscriptionPermissions()}handleIncomingRpcAck(e){const t=this.pendingAcks.get(e);t?(t.resolve(),this.pendingAcks.delete(e)):console.error("Ack received for unexpected RPC request",e)}handleIncomingRpcResponse(e,t,i){const s=this.pendingResponses.get(e);s?(s.resolve(t,i),this.pendingResponses.delete(e)):console.error("Response received for unexpected RPC request",e)}publishRpcRequest(e,t,i,s,r){return ie(this,void 0,void 0,function*(){const a=new vn({destinationIdentities:[e],kind:It.RELIABLE,value:{case:"rpcRequest",value:new KC({id:t,method:i,payload:s,responseTimeoutMs:r,version:1})}});yield this.engine.sendDataPacket(a,It.RELIABLE)})}handleParticipantDisconnected(e){for(const[t,{participantIdentity:i}]of this.pendingAcks)i===e&&this.pendingAcks.delete(t);for(const[t,{participantIdentity:i,resolve:s}]of this.pendingResponses)i===e&&(s(null,di.builtIn("RECIPIENT_DISCONNECTED")),this.pendingResponses.delete(t))}setEnabledPublishCodecs(e){this.enabledPublishVideoCodecs=e.filter(t=>t.mime.split("/")[0].toLowerCase()==="video")}updateInfo(e){return super.updateInfo(e)?(e.tracks.forEach(t=>{var i,s;const r=this.trackPublications.get(t.sid);if(r){const a=r.isMuted||((s=(i=r.track)===null||i===void 0?void 0:i.isUpstreamPaused)!==null&&s!==void 0?s:!1);a!==t.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),wt(r)),{mutedOnServer:a})),this.engine.client.sendMuteTrack(t.sid,a))}}),!0):!1}setActiveAgent(e){var t,i,s,r;this.firstActiveAgent=e,e&&!this.firstActiveAgent&&(this.firstActiveAgent=e),e?(i=(t=this.activeAgentFuture)===null||t===void 0?void 0:t.resolve)===null||i===void 0||i.call(t,e):(r=(s=this.activeAgentFuture)===null||s===void 0?void 0:s.reject)===null||r===void 0||r.call(s,"Agent disconnected"),this.activeAgentFuture=void 0}waitUntilActiveAgentPresent(){return this.firstActiveAgent?Promise.resolve(this.firstActiveAgent):(this.activeAgentFuture||(this.activeAgentFuture=new Do),this.activeAgentFuture.promise)}getPublicationForTrack(e){let t;return this.trackPublications.forEach(i=>{const s=i.track;s&&(e instanceof MediaStreamTrack?(zs(s)||Sr(s))&&s.mediaStreamTrack===e&&(t=i):e===s&&(t=i))}),t}waitForPendingPublicationOfSource(e){return ie(this,void 0,void 0,function*(){const i=Date.now();for(;Date.now()<i+1e4;){const s=Array.from(this.pendingPublishPromises.entries()).find(r=>{let[a]=r;return a.source===e});if(s)return s[1];yield Tn(20)}})}}class f5 extends Gs{constructor(e,t,i,s){super(e,t.sid,t.name,s),this.track=void 0,this.allowed=!0,this.disabled=!1,this.currentVideoQuality=Vn.HIGH,this.handleEnded=r=>{this.setTrack(void 0),this.emit(He.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=i,this.updateInfo(t)}setSubscribed(e){const t=this.subscriptionStatus,i=this.permissionStatus;this.subscribed=e,e&&(this.allowed=!0);const s=new Ed({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new QC({participantSid:"",trackSids:[this.trackSid]})]});this.emit(He.UpdateSubscription,s),this.emitSubscriptionUpdateIfChanged(t),this.emitPermissionUpdateIfChanged(i)}get subscriptionStatus(){return this.subscribed===!1?Gs.SubscriptionStatus.Unsubscribed:super.isSubscribed?Gs.SubscriptionStatus.Subscribed:Gs.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?Gs.PermissionStatus.Allowed:Gs.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 t,i;this.isManualOperationAllowed()&&(((t=this.videoDimensions)===null||t===void 0?void 0:t.width)===e.width&&((i=this.videoDimensions)===null||i===void 0?void 0:i.height)===e.height||(Zm(this.track)&&(this.videoDimensions=e),this.currentVideoQuality=void 0,this.emitTrackUpdate()))}setVideoFPS(e){this.isManualOperationAllowed()&&Zm(this.track)&&this.fps!==e&&(this.fps=e,this.emitTrackUpdate())}get videoQuality(){return this.currentVideoQuality}setTrack(e){const t=this.subscriptionStatus,i=this.permissionStatus,s=this.track;s!==e&&(s&&(s.off(He.VideoDimensionsChanged,this.handleVideoDimensionsChange),s.off(He.VisibilityChanged,this.handleVisibilityChange),s.off(He.Ended,this.handleEnded),s.detach(),s.stopMonitor(),this.emit(He.Unsubscribed,s)),super.setTrack(e),e&&(e.sid=this.trackSid,e.on(He.VideoDimensionsChanged,this.handleVideoDimensionsChange),e.on(He.VisibilityChanged,this.handleVisibilityChange),e.on(He.Ended,this.handleEnded),this.emit(He.Subscribed,e)),this.emitPermissionUpdateIfChanged(i),this.emitSubscriptionUpdateIfChanged(t))}setAllowed(e){const t=this.subscriptionStatus,i=this.permissionStatus;this.allowed=e,this.emitPermissionUpdateIfChanged(i),this.emitSubscriptionUpdateIfChanged(t)}setSubscriptionError(e){this.emit(He.SubscriptionFailed,e)}updateInfo(e){super.updateInfo(e);const t=this.metadataMuted;this.metadataMuted=e.muted,this.track?this.track.setMuted(e.muted):t!==e.muted&&this.emit(e.muted?He.Muted:He.Unmuted)}emitSubscriptionUpdateIfChanged(e){const t=this.subscriptionStatus;e!==t&&this.emit(He.SubscriptionStatusChanged,t,e)}emitPermissionUpdateIfChanged(e){this.permissionStatus!==e&&this.emit(He.SubscriptionPermissionChanged,this.permissionStatus,e)}isManualOperationAllowed(){return this.kind===Ae.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 Zm(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){const e=new ok({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=Vn.HIGH,this.emit(He.UpdateSettings,e)}}class zd extends YE{static fromParticipantInfo(e,t,i){return new zd(e,t.sid,t.identity,t.name,t.metadata,t.attributes,i,t.kind)}get logContext(){return Object.assign(Object.assign({},super.logContext),{rpID:this.sid,remoteParticipant:this.identity})}constructor(e,t,i,s,r,a,l){let c=arguments.length>7&&arguments[7]!==void 0?arguments[7]:Ql.STANDARD;super(t,i||"",s,r,a,l,c),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(He.UpdateSettings,t=>{this.log.debug("send update settings",Object.assign(Object.assign({},this.logContext),wt(e))),this.signalClient.sendUpdateTrackSettings(t)}),e.on(He.UpdateSubscription,t=>{t.participantTracks.forEach(i=>{i.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(t)}),e.on(He.SubscriptionPermissionChanged,t=>{this.emit(ze.TrackSubscriptionPermissionChanged,e,t)}),e.on(He.SubscriptionStatusChanged,t=>{this.emit(ze.TrackSubscriptionStatusChanged,e,t)}),e.on(He.Subscribed,t=>{this.emit(ze.TrackSubscribed,t,e)}),e.on(He.Unsubscribed,t=>{this.emit(ze.TrackUnsubscribed,t,e)}),e.on(He.SubscriptionFailed,t=>{this.emit(ze.TrackSubscriptionFailed,e.trackSid,t)})}getTrackPublication(e){const t=super.getTrackPublication(e);if(t)return t}getTrackPublicationByName(e){const t=super.getTrackPublicationByName(e);if(t)return t}setVolume(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ae.Source.Microphone;this.volumeMap.set(t,e);const i=this.getTrackPublication(t);i&&i.track&&i.track.setVolume(e)}getVolume(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Ae.Source.Microphone;const t=this.getTrackPublication(e);return t&&t.track?t.track.getVolume():this.volumeMap.get(e)}addSubscribedMediaTrack(e,t,i,s,r,a){let l=this.getTrackPublicationBySid(t);if(l||t.startsWith("TR")||this.trackPublications.forEach(d=>{!l&&e.kind===d.kind.toString()&&(l=d)}),!l){if(a===0){this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:t})),this.emit(ze.TrackSubscriptionFailed,t);return}a===void 0&&(a=20),setTimeout(()=>{this.addSubscribedMediaTrack(e,t,i,s,r,a-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),wt(l))),this.emit(ze.TrackSubscriptionFailed,t);return}const c=e.kind==="video";let u;return c?u=new a5(e,t,s,r):u=new r5(e,t,s,this.audioContext,this.audioOutput),u.source=l.source,u.isMuted=l.isMuted,u.setMediaStream(i),u.start(),l.setTrack(u),this.volumeMap.has(l.source)&&Qm(u)&&ws(u)&&u.setVolume(this.volumeMap.get(l.source)),l}get hasMetadata(){return!!this.participantInfo}getTrackPublicationBySid(e){return this.trackPublications.get(e)}updateInfo(e){if(!super.updateInfo(e))return!1;const t=new Map,i=new Map;return e.tracks.forEach(s=>{var r,a;let l=this.getTrackPublicationBySid(s.sid);if(l)l.updateInfo(s);else{const c=Ae.kindFromProto(s.type);if(!c)return;l=new f5(c,s,(r=this.signalClient.connectOptions)===null||r===void 0?void 0:r.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:(a=this.loggerOptions)===null||a===void 0?void 0:a.loggerName}),l.updateInfo(s),i.set(s.sid,l);const u=Array.from(this.trackPublications.values()).find(d=>d.source===(l==null?void 0:l.source));u&&l.source!==Ae.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(l.source),Object.assign(Object.assign({},this.logContext),{oldTrack:wt(u),newTrack:wt(l)})),this.addTrackPublication(l)}t.set(s.sid,l)}),this.trackPublications.forEach(s=>{t.has(s.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),wt(s))),this.unpublishTrack(s.trackSid,!0))}),i.forEach(s=>{this.emit(ze.TrackPublished,s)}),!0}unpublishTrack(e,t){const i=this.trackPublications.get(e);if(!i)return;const{track:s}=i;switch(s&&(s.stop(),i.setTrack(void 0)),this.trackPublications.delete(e),i.kind){case Ae.Kind.Audio:this.audioTrackPublications.delete(e);break;case Ae.Kind.Video:this.videoTrackPublications.delete(e);break}t&&this.emit(ze.TrackUnpublished,i)}setAudioOutput(e){return ie(this,void 0,void 0,function*(){this.audioOutput=e;const t=[];this.audioTrackPublications.forEach(i=>{var s;ws(i.track)&&Qm(i.track)&&t.push(i.track.setSinkId((s=e.deviceId)!==null&&s!==void 0?s:"default"))}),yield Promise.all(t)})}emit(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),s=1;s<t;s++)i[s-1]=arguments[s];return this.log.trace("participant event",Object.assign(Object.assign({},this.logContext),{event:e,args:i})),super.emit(e,...i)}}var Ot;(function(n){n.Disconnected="disconnected",n.Connecting="connecting",n.Connected="connected",n.Reconnecting="reconnecting",n.SignalReconnecting="signalReconnecting"})(Ot||(Ot={}));const p5=4*1e3;class Ws extends ks.EventEmitter{constructor(e){var t,i,s,r;if(super(),t=this,this.state=Ot.Disconnected,this.activeSpeakers=[],this.isE2EEEnabled=!1,this.audioEnabled=!0,this.isVideoPlaybackBlocked=!1,this.log=At,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=(a,l,c)=>ie(this,void 0,void 0,function*(){var u;if(!YU())throw Es()?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 d=yield this.disconnectLock.lock();if(this.state===Ot.Connected)return this.log.info("already connected to room ".concat(this.name),this.logContext),d(),Promise.resolve();if(this.connectFuture)return d(),this.connectFuture.promise;this.setAndEmitConnectionState(Ot.Connecting),((u=this.regionUrlProvider)===null||u===void 0?void 0:u.getServerUrl().toString())!==a&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),Wm(new URL(a))&&(this.regionUrlProvider===void 0?this.regionUrlProvider=new bg(a,l):this.regionUrlProvider.updateToken(l),this.regionUrlProvider.fetchRegionSettings().then(T=>{var S;(S=this.regionUrlProvider)===null||S===void 0||S.setServerReportedRegions(T)}).catch(T=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:T}))}));const f=(T,S,m)=>ie(this,void 0,void 0,function*(){var _,k;this.abortController&&this.abortController.abort();const R=new AbortController;this.abortController=R,d==null||d();try{yield this.attemptConnection(m??a,l,c,R),this.abortController=void 0,T()}catch(D){if(this.regionUrlProvider&&D instanceof Gt&&D.reason!==Nt.Cancelled&&D.reason!==Nt.NotAllowed){let F=null;try{F=yield this.regionUrlProvider.getNextBestRegionUrl((_=this.abortController)===null||_===void 0?void 0:_.signal)}catch(L){if(L instanceof Gt&&(L.status===401||L.reason===Nt.Cancelled)){this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),S(L);return}}F&&!(!((k=this.abortController)===null||k===void 0)&&k.signal.aborted)?(this.log.info("Initial connection failed with ConnectionError: ".concat(D.message,". Retrying with another region: ").concat(F),this.logContext),this.recreateEngine(),yield f(T,S,F)):(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,TE(D)),S(D))}else{let F=Qn.UNKNOWN_REASON;D instanceof Gt&&(F=TE(D)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,F),S(D)}}}),g=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new Do((T,S)=>{f(T,S,g)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(a,l,c,u,d,f)=>ie(this,void 0,void 0,function*(){var g,T,S;const m=yield c.join(a,l,{autoSubscribe:u.autoSubscribe,adaptiveStream:typeof d.adaptiveStream=="object"?!0:d.adaptiveStream,maxRetries:u.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:u.websocketTimeout},f.signal);let _=m.serverInfo;if(_||(_={version:m.serverVersion,region:m.serverRegion}),this.serverInfo=_,this.log.debug("connected to Livekit Server ".concat(Object.entries(_).map(k=>{let[R,D]=k;return"".concat(R,": ").concat(D)}).join(", ")),{room:(g=m.room)===null||g===void 0?void 0:g.name,roomSid:(T=m.room)===null||T===void 0?void 0:T.sid,identity:(S=m.participant)===null||S===void 0?void 0:S.identity}),!_.version)throw new MU("unknown server version");return _.version==="0.15.1"&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version",this.logContext),d.dynacast=!1),m}),this.applyJoinResponse=a=>{const l=a.participant;if(this.localParticipant.sid=l.sid,this.localParticipant.identity=l.identity,this.localParticipant.setEnabledPublishCodecs(a.enabledPublishCodecs),this.options.e2ee&&this.e2eeManager)try{this.e2eeManager.setSifTrailer(a.sifTrailer)}catch(c){this.log.error(c instanceof Error?c.message:"Could not set SifTrailer",Object.assign(Object.assign({},this.logContext),{error:c}))}this.handleParticipantUpdates([l,...a.otherParticipants]),a.room&&this.handleRoomUpdate(a.room)},this.attemptConnection=(a,l,c,u)=>ie(this,void 0,void 0,function*(){var d,f;this.state===Ot.Reconnecting||this.isResuming||!((d=this.engine)===null||d===void 0)&&d.pendingReconnect?(this.log.info("Reconnection attempt replaced by new connection attempt",this.logContext),this.recreateEngine()):this.maybeCreateEngine(),!((f=this.regionUrlProvider)===null||f===void 0)&&f.isCloud()&&this.engine.setRegionUrlProvider(this.regionUrlProvider),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},dg),c),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{const g=yield this.connectSignal(a,l,this.engine,this.connOptions,this.options,u);this.applyJoinResponse(g),this.setupLocalParticipantEvents(),this.emit(Oe.SignalConnected)}catch(g){yield this.engine.close(),this.recreateEngine();const T=new Gt("could not establish signal connection",Nt.ServerUnreachable);throw g instanceof Error&&(T.message="".concat(T.message,": ").concat(g.message)),g instanceof Gt&&(T.reason=g.reason,T.status=g.status),this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:g})),T}if(u.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),new Gt("Connection attempt aborted",Nt.Cancelled);try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,u)}catch(g){throw yield this.engine.close(),this.recreateEngine(),g}Sn()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),Sn()&&document.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState(Ot.Connected),this.emit(Oe.Connected),this.registerConnectionReconcile()}),this.disconnect=function(){for(var a=arguments.length,l=new Array(a),c=0;c<a;c++)l[c]=arguments[c];return ie(t,[...l],void 0,function(){var u=this;let d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return(function*(){var f,g,T,S;const m=yield u.disconnectLock.lock();try{if(u.state===Ot.Disconnected){u.log.debug("already disconnected",u.logContext);return}u.log.info("disconnect from room",Object.assign({},u.logContext)),(u.state===Ot.Connecting||u.state===Ot.Reconnecting||u.isResuming)&&(u.log.warn("abort connection attempt",u.logContext),(f=u.abortController)===null||f===void 0||f.abort(),(T=(g=u.connectFuture)===null||g===void 0?void 0:g.reject)===null||T===void 0||T.call(g,new Gt("Client initiated disconnect",Nt.Cancelled)),u.connectFuture=void 0),!((S=u.engine)===null||S===void 0)&&S.client.isDisconnected||(yield u.engine.client.sendLeave()),u.engine&&(yield u.engine.close()),u.handleDisconnect(d,Qn.CLIENT_INITIATED),u.engine=void 0}finally{m()}})()})},this.onPageLeave=()=>ie(this,void 0,void 0,function*(){this.log.info("Page leave detected, disconnecting",this.logContext),yield this.disconnect()}),this.startAudio=()=>ie(this,void 0,void 0,function*(){const a=[],l=bn();if(l&&l.os==="iOS"){const c="livekit-dummy-audio-el";let u=document.getElementById(c);if(!u){u=document.createElement("audio"),u.id=c,u.autoplay=!0,u.hidden=!0;const d=Xm();d.enabled=!0;const f=new MediaStream([d]);u.srcObject=f,document.addEventListener("visibilitychange",()=>{u&&(u.srcObject=document.hidden?null:f,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()))}),document.body.append(u),this.once(Oe.Disconnected,()=>{u==null||u.remove(),u=null})}a.push(u)}this.remoteParticipants.forEach(c=>{c.audioTrackPublications.forEach(u=>{u.track&&u.track.attachedElements.forEach(d=>{a.push(d)})})});try{yield Promise.all([this.acquireAudioContext(),...a.map(c=>(c.muted=!1,c.play()))]),this.handleAudioPlaybackStarted()}catch(c){throw this.handleAudioPlaybackFailed(c),c}}),this.startVideo=()=>ie(this,void 0,void 0,function*(){const a=[];for(const l of this.remoteParticipants.values())l.videoTrackPublications.forEach(c=>{var u;(u=c.track)===null||u===void 0||u.attachedElements.forEach(d=>{a.includes(d)||a.push(d)})});yield Promise.all(a.map(l=>l.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch(l=>{l.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 a of this.remoteParticipants.values())this.handleParticipantDisconnected(a.identity,a);this.setAndEmitConnectionState(Ot.Reconnecting)&&this.emit(Oe.Reconnecting)},this.handleSignalRestarted=a=>ie(this,void 0,void 0,function*(){this.log.debug("signal reconnected to server, region ".concat(a.serverRegion),Object.assign(Object.assign({},this.logContext),{region:a.serverRegion})),this.bufferedEvents=[],this.applyJoinResponse(a);try{yield this.localParticipant.republishAllTracks(void 0,!0)}catch(l){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:l}))}try{yield this.engine.waitForRestarted(),this.log.debug("fully reconnected to server",Object.assign(Object.assign({},this.logContext),{region:a.serverRegion}))}catch{return}this.setAndEmitConnectionState(Ot.Connected),this.emit(Oe.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=a=>{a.forEach(l=>{var c;if(l.identity===this.localParticipant.identity){this.localParticipant.updateInfo(l);return}l.identity===""&&(l.identity=(c=this.sidToIdentity.get(l.sid))!==null&&c!==void 0?c:"");let u=this.remoteParticipants.get(l.identity);l.state===So.DISCONNECTED?this.handleParticipantDisconnected(l.identity,u):u=this.getOrCreateParticipant(l.identity,l)})},this.handleActiveSpeakersUpdate=a=>{const l=[],c={};a.forEach(u=>{if(c[u.sid]=!0,u.sid===this.localParticipant.sid)this.localParticipant.audioLevel=u.level,this.localParticipant.setIsSpeaking(!0),l.push(this.localParticipant);else{const d=this.getRemoteParticipantBySid(u.sid);d&&(d.audioLevel=u.level,d.setIsSpeaking(!0),l.push(d))}}),c[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach(u=>{c[u.sid]||(u.audioLevel=0,u.setIsSpeaking(!1))}),this.activeSpeakers=l,this.emitWhenConnected(Oe.ActiveSpeakersChanged,l)},this.handleSpeakersChanged=a=>{const l=new Map;this.activeSpeakers.forEach(u=>{const d=this.remoteParticipants.get(u.identity);d&&d.sid!==u.sid||l.set(u.sid,u)}),a.forEach(u=>{let d=this.getRemoteParticipantBySid(u.sid);u.sid===this.localParticipant.sid&&(d=this.localParticipant),d&&(d.audioLevel=u.level,d.setIsSpeaking(u.active),u.active?l.set(u.sid,d):l.delete(u.sid))});const c=Array.from(l.values());c.sort((u,d)=>d.audioLevel-u.audioLevel),this.activeSpeakers=c,this.emitWhenConnected(Oe.ActiveSpeakersChanged,c)},this.handleStreamStateUpdate=a=>{a.streamStates.forEach(l=>{const c=this.getRemoteParticipantBySid(l.participantSid);if(!c)return;const u=c.getTrackPublicationBySid(l.trackSid);if(!u||!u.track)return;const d=Ae.streamStateFromProto(l.state);d!==u.track.streamState&&(u.track.streamState=d,c.emit(ze.TrackStreamStateChanged,u,u.track.streamState),this.emitWhenConnected(Oe.TrackStreamStateChanged,u,u.track.streamState,c))})},this.handleSubscriptionPermissionUpdate=a=>{const l=this.getRemoteParticipantBySid(a.participantSid);if(!l)return;const c=l.getTrackPublicationBySid(a.trackSid);c&&c.setAllowed(a.allowed)},this.handleSubscriptionError=a=>{const l=Array.from(this.remoteParticipants.values()).find(u=>u.trackPublications.has(a.trackSid));if(!l)return;const c=l.getTrackPublicationBySid(a.trackSid);c&&c.setSubscriptionError(a.err)},this.handleDataPacket=a=>{const l=this.remoteParticipants.get(a.participantIdentity);if(a.value.case==="user")this.handleUserPacket(l,a.value.value,a.kind);else if(a.value.case==="transcription")this.handleTranscription(l,a.value.value);else if(a.value.case==="sipDtmf")this.handleSipDtmf(l,a.value.value);else if(a.value.case==="chatMessage")this.handleChatMessage(l,a.value.value);else if(a.value.case==="metrics")this.handleMetrics(a.value.value,l);else if(a.value.case==="streamHeader")this.handleStreamHeader(a.value.value,a.participantIdentity);else if(a.value.case==="streamChunk")this.handleStreamChunk(a.value.value);else if(a.value.case==="streamTrailer")this.handleStreamTrailer(a.value.value);else if(a.value.case==="rpcRequest"){const c=a.value.value;this.handleIncomingRpcRequest(a.participantIdentity,c.id,c.method,c.payload,c.responseTimeoutMs,c.version)}},this.handleUserPacket=(a,l,c)=>{this.emit(Oe.DataReceived,l.payload,a,c,l.topic),a==null||a.emit(ze.DataReceived,l.payload,c)},this.handleSipDtmf=(a,l)=>{this.emit(Oe.SipDTMFReceived,l,a),a==null||a.emit(ze.SipDTMFReceived,l)},this.bufferedSegments=new Map,this.handleTranscription=(a,l)=>{const c=l.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(l.transcribedParticipantIdentity),u=c==null?void 0:c.trackPublications.get(l.trackId),d=s8(l,this.transcriptionReceivedTimes);u==null||u.emit(He.TranscriptionReceived,d),c==null||c.emit(ze.TranscriptionReceived,d,u),this.emit(Oe.TranscriptionReceived,d,c,u)},this.handleChatMessage=(a,l)=>{const c=r8(l);this.emit(Oe.ChatMessage,c,a)},this.handleMetrics=(a,l)=>{this.emit(Oe.MetricsReceived,a,l)},this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(Oe.AudioPlaybackStatusChanged,!0))},this.handleAudioPlaybackFailed=a=>{this.log.warn("could not playback audio",Object.assign(Object.assign({},this.logContext),{error:a})),this.canPlaybackAudio&&(this.audioEnabled=!1,this.emit(Oe.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(Oe.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(Oe.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>ie(this,void 0,void 0,function*(){var a;((a=bn())===null||a===void 0?void 0:a.os)!=="iOS"&&(yield this.selectDefaultDevices()),this.emit(Oe.MediaDevicesChanged)}),this.handleRoomUpdate=a=>{const l=this.roomInfo;this.roomInfo=a,l&&l.metadata!==a.metadata&&this.emitWhenConnected(Oe.RoomMetadataChanged,a.metadata),(l==null?void 0:l.activeRecording)!==a.activeRecording&&this.emitWhenConnected(Oe.RecordingStatusChanged,a.activeRecording)},this.handleConnectionQualityUpdate=a=>{a.updates.forEach(l=>{if(l.participantSid===this.localParticipant.sid){this.localParticipant.setConnectionQuality(l.quality);return}const c=this.getRemoteParticipantBySid(l.participantSid);c&&c.setConnectionQuality(l.quality)})},this.onLocalParticipantMetadataChanged=a=>{this.emit(Oe.ParticipantMetadataChanged,a,this.localParticipant)},this.onLocalParticipantNameChanged=a=>{this.emit(Oe.ParticipantNameChanged,a,this.localParticipant)},this.onLocalAttributesChanged=a=>{this.emit(Oe.ParticipantAttributesChanged,a,this.localParticipant)},this.onLocalTrackMuted=a=>{this.emit(Oe.TrackMuted,a,this.localParticipant)},this.onLocalTrackUnmuted=a=>{this.emit(Oe.TrackUnmuted,a,this.localParticipant)},this.onTrackProcessorUpdate=a=>{var l;(l=a==null?void 0:a.onPublish)===null||l===void 0||l.call(a,this)},this.onLocalTrackPublished=a=>ie(this,void 0,void 0,function*(){var l,c,u,d,f,g;(l=a.track)===null||l===void 0||l.on(He.TrackProcessorUpdate,this.onTrackProcessorUpdate),(c=a.track)===null||c===void 0||c.on(He.Restarted,this.onLocalTrackRestarted),(f=(d=(u=a.track)===null||u===void 0?void 0:u.getProcessor())===null||d===void 0?void 0:d.onPublish)===null||f===void 0||f.call(d,this),this.emit(Oe.LocalTrackPublished,a,this.localParticipant),zs(a.track)&&(yield a.track.checkForSilence())&&this.emit(Oe.LocalAudioSilenceDetected,a);const T=yield(g=a.track)===null||g===void 0?void 0:g.getDeviceId(!1),S=ig(a.source);S&&T&&T!==this.localParticipant.activeDeviceMap.get(S)&&(this.localParticipant.activeDeviceMap.set(S,T),this.emit(Oe.ActiveDeviceChanged,S,T))}),this.onLocalTrackUnpublished=a=>{var l,c;(l=a.track)===null||l===void 0||l.off(He.TrackProcessorUpdate,this.onTrackProcessorUpdate),(c=a.track)===null||c===void 0||c.off(He.Restarted,this.onLocalTrackRestarted),this.emit(Oe.LocalTrackUnpublished,a,this.localParticipant)},this.onLocalTrackRestarted=a=>ie(this,void 0,void 0,function*(){const l=yield a.getDeviceId(!1),c=ig(a.source);c&&l&&l!==this.localParticipant.activeDeviceMap.get(c)&&(this.log.debug("local track restarted, setting ".concat(c," ").concat(l," active"),this.logContext),this.localParticipant.activeDeviceMap.set(c,l),this.emit(Oe.ActiveDeviceChanged,c,l))}),this.onLocalConnectionQualityChanged=a=>{this.emit(Oe.ConnectionQualityChanged,a,this.localParticipant)},this.onMediaDevicesError=(a,l)=>{this.emit(Oe.MediaDevicesError,a,l)},this.onLocalParticipantPermissionsChanged=a=>{this.emit(Oe.ParticipantPermissionsChanged,a,this.localParticipant)},this.onLocalChatMessageSent=a=>{this.emit(Oe.ChatMessage,a,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},P8),e),this.log=js((i=this.options.loggerName)!==null&&i!==void 0?i:es.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},ME),e==null?void 0:e.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},OE),e==null?void 0:e.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},A8),e==null?void 0:e.publishDefaults),this.maybeCreateEngine(),this.disconnectLock=new gn,this.localParticipant=new h5("","",this.engine,this.options,this.rpcHandlers),this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",Tr(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",Tr(this.options.audioCaptureDefaults.deviceId)),!((s=this.options.audioOutput)===null||s===void 0)&&s.deviceId&&this.switchActiveDevice("audiooutput",Tr(this.options.audioOutput.deviceId)).catch(a=>this.log.warn("Could not set audio output: ".concat(a.message),this.logContext)),this.options.e2ee&&this.setupE2EE(),Sn()){const a=new AbortController;(r=navigator.mediaDevices)===null||r===void 0||r.addEventListener("devicechange",this.handleDeviceChange,{signal:a.signal}),Ws.cleanupRegistry&&Ws.cleanupRegistry.register(this,()=>{a.abort()})}}registerTextStreamHandler(e,t){if(this.textStreamHandlers.has(e))throw new TypeError('A text stream handler for topic "'.concat(e,'" has already been set.'));this.textStreamHandlers.set(e,t)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}registerByteStreamHandler(e,t){if(this.byteStreamHandlers.has(e))throw new TypeError('A byte stream handler for topic "'.concat(e,'" has already been set.'));this.byteStreamHandlers.set(e,t)}unregisterByteStreamHandler(e){this.byteStreamHandlers.delete(e)}registerRpcMethod(e,t){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,t)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}handleIncomingRpcRequest(e,t,i,s,r,a){return ie(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(e,t),a!==1){yield this.engine.publishRpcResponse(e,t,null,di.builtIn("UNSUPPORTED_VERSION"));return}const l=this.rpcHandlers.get(i);if(!l){yield this.engine.publishRpcResponse(e,t,null,di.builtIn("UNSUPPORTED_METHOD"));return}let c=null,u=null;try{const d=yield l({requestId:t,callerIdentity:e,payload:s,responseTimeout:r});hg(d)>LE?(c=di.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),console.warn("RPC Response payload too large for ".concat(i))):u=d}catch(d){d instanceof di?c=d:(console.warn("Uncaught error returned by RPC handler for ".concat(i,". Returning APPLICATION_ERROR instead."),d),c=di.builtIn("APPLICATION_ERROR"))}yield this.engine.publishRpcResponse(e,t,u,c)})}setE2EEEnabled(e){return ie(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 m8(this.options.e2ee),this.e2eeManager.on(yr.ParticipantEncryptionStatusChanged,(t,i)=>{o8(i)&&(this.isE2EEEnabled=t),this.emit(Oe.ParticipantEncryptionStatusChanged,t,i)}),this.e2eeManager.on(yr.EncryptionError,t=>this.emit(Oe.EncryptionError,t)),(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,t;return(t=(e=this.roomInfo)===null||e===void 0?void 0:e.activeRecording)!==null&&t!==void 0?t:!1}getSid(){return ie(this,void 0,void 0,function*(){return this.state===Ot.Disconnected?"":this.roomInfo&&this.roomInfo.sid!==""?this.roomInfo.sid:new Promise((e,t)=>{const i=s=>{s.sid!==""&&(this.engine.off(Ge.RoomUpdate,i),e(s.sid))};this.engine.on(Ge.RoomUpdate,i),this.once(Oe.Disconnected,()=>{this.engine.off(Ge.RoomUpdate,i),t("Room disconnected before room server id was available")})})})}get name(){var e,t;return(t=(e=this.roomInfo)===null||e===void 0?void 0:e.name)!==null&&t!==void 0?t:""}get metadata(){var e;return(e=this.roomInfo)===null||e===void 0?void 0:e.metadata}get numParticipants(){var e,t;return(t=(e=this.roomInfo)===null||e===void 0?void 0:e.numParticipants)!==null&&t!==void 0?t:0}get numPublishers(){var e,t;return(t=(e=this.roomInfo)===null||e===void 0?void 0:e.numPublishers)!==null&&t!==void 0?t:0}maybeCreateEngine(){this.engine&&!this.engine.isClosed||(this.engine=new J8(this.options),this.engine.on(Ge.ParticipantUpdate,this.handleParticipantUpdates).on(Ge.RoomUpdate,this.handleRoomUpdate).on(Ge.SpeakersChanged,this.handleSpeakersChanged).on(Ge.StreamStateChanged,this.handleStreamStateUpdate).on(Ge.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(Ge.SubscriptionError,this.handleSubscriptionError).on(Ge.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(Ge.MediaTrackAdded,(e,t,i)=>{this.onTrackAdded(e,t,i)}).on(Ge.Disconnected,e=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e)}).on(Ge.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(Ge.DataPacketReceived,this.handleDataPacket).on(Ge.Resuming,()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState(Ot.SignalReconnecting)&&this.emit(Oe.SignalReconnecting)}).on(Ge.Resumed,()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState(Ot.Connected)&&this.emit(Oe.Reconnected)}).on(Ge.SignalResumed,()=>{this.bufferedEvents=[],(this.state===Ot.Reconnecting||this.isResuming)&&this.sendSyncState()}).on(Ge.Restarting,this.handleRestarting).on(Ge.SignalRestarted,this.handleSignalRestarted).on(Ge.Offline,()=>{this.setAndEmitConnectionState(Ot.Reconnecting)&&this.emit(Oe.Reconnecting)}).on(Ge.DCBufferStatusChanged,(e,t)=>{this.emit(Oe.DCBufferStatusChanged,e,t)}).on(Ge.LocalTrackSubscribed,e=>{const t=this.localParticipant.getTrackPublications().find(i=>{let{trackSid:s}=i;return s===e});if(!t){this.log.warn("could not find local track subscription for subscribed event",this.logContext);return}this.localParticipant.emit(ze.LocalTrackSubscribed,t),this.emitWhenConnected(Oe.LocalTrackSubscribed,t,this.localParticipant)}).on(Ge.RoomMoved,e=>{this.log.debug("room moved",e),e.room&&this.handleRoomUpdate(e.room),this.remoteParticipants.forEach((t,i)=>{this.handleParticipantDisconnected(i,t)}),this.emit(Oe.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 t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return Ri.getInstance().getDevices(e,t)}prepareConnection(e,t){return ie(this,void 0,void 0,function*(){if(this.state===Ot.Disconnected){this.log.debug("prepareConnection to ".concat(e),this.logContext);try{if(Wm(new URL(e))&&t){this.regionUrlProvider=new bg(e,t);const i=yield this.regionUrlProvider.getNextBestRegionUrl();i&&this.state===Ot.Disconnected&&(this.regionUrl=i,yield fetch(Jm(i),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(i),this.logContext))}else yield fetch(Jm(e),{method:"HEAD"})}catch(i){this.log.warn("could not prepare connection",Object.assign(Object.assign({},this.logContext),{error:i}))}}})}getParticipantByIdentity(e){return this.localParticipant.identity===e?this.localParticipant:this.remoteParticipants.get(e)}clearConnectionFutures(){this.connectFuture=void 0}simulateScenario(e,t){return ie(this,void 0,void 0,function*(){let i=()=>{},s;switch(e){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":s=new Cs({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":s=new Cs({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":s=new Cs({scenario:{case:"serverLeave",value:!0}});break;case"migration":s=new Cs({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":i=()=>ie(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),s=new Cs({scenario:{case:"disconnectSignalOnResume",value:!0}});break;case"disconnect-signal-on-resume-no-messages":i=()=>ie(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),s=new Cs({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":s=new Cs({scenario:{case:"switchCandidateProtocol",value:e==="force-tls"?2:1}}),i=()=>ie(this,void 0,void 0,function*(){const r=this.engine.client.onLeave;r&&r(new wd({reason:Qn.CLIENT_INITIATED,action:Co.RECONNECT}))});break;case"subscriber-bandwidth":if(t===void 0||typeof t!="number")throw new Error("subscriber-bandwidth requires a number as argument");s=new Cs({scenario:{case:"subscriberBandwidth",value:da(t)}});break;case"leave-full-reconnect":s=new Cs({scenario:{case:"leaveRequestFullReconnect",value:!0}})}s&&(yield this.engine.client.sendSimulateScenario(s),yield i())})}get canPlaybackAudio(){return this.audioEnabled}get canPlaybackVideo(){return!this.isVideoPlaybackBlocked}getActiveDevice(e){return this.localParticipant.activeDeviceMap.get(e)}switchActiveDevice(e,t){return ie(this,arguments,void 0,function(i,s){var r=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return(function*(){var l,c,u,d,f,g,T,S;let m=!0,_=!1;const k=a?{exact:s}:s;if(i==="audioinput"){_=r.localParticipant.audioTrackPublications.size===0;const R=(l=r.getActiveDevice(i))!==null&&l!==void 0?l:r.options.audioCaptureDefaults.deviceId;r.options.audioCaptureDefaults.deviceId=k;const D=Array.from(r.localParticipant.audioTrackPublications.values()).filter(F=>F.source===Ae.Source.Microphone);try{m=(yield Promise.all(D.map(F=>{var L;return(L=F.audioTrack)===null||L===void 0?void 0:L.setDeviceId(k)}))).every(F=>F===!0)}catch(F){throw r.options.audioCaptureDefaults.deviceId=R,F}}else if(i==="videoinput"){_=r.localParticipant.videoTrackPublications.size===0;const R=(c=r.getActiveDevice(i))!==null&&c!==void 0?c:r.options.videoCaptureDefaults.deviceId;r.options.videoCaptureDefaults.deviceId=k;const D=Array.from(r.localParticipant.videoTrackPublications.values()).filter(F=>F.source===Ae.Source.Camera);try{m=(yield Promise.all(D.map(F=>{var L;return(L=F.videoTrack)===null||L===void 0?void 0:L.setDeviceId(k)}))).every(F=>F===!0)}catch(F){throw r.options.videoCaptureDefaults.deviceId=R,F}}else if(i==="audiooutput"){if(!Gm()&&!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&&(s=(u=yield Ri.getInstance().normalizeDeviceId("audiooutput",s))!==null&&u!==void 0?u:""),(d=(S=r.options).audioOutput)!==null&&d!==void 0||(S.audioOutput={});const R=(f=r.getActiveDevice(i))!==null&&f!==void 0?f:r.options.audioOutput.deviceId;r.options.audioOutput.deviceId=s;try{r.options.webAudioMix&&((g=r.audioContext)===null||g===void 0||g.setSinkId(s)),yield Promise.all(Array.from(r.remoteParticipants.values()).map(D=>D.setAudioOutput({deviceId:s})))}catch(D){throw r.options.audioOutput.deviceId=R,D}}return(_||i==="audiooutput")&&(r.localParticipant.activeDeviceMap.set(i,i==="audiooutput"&&((T=r.options.audioOutput)===null||T===void 0?void 0:T.deviceId)||s),r.emit(Oe.ActiveDeviceChanged,i,s)),m})()})}setupLocalParticipantEvents(){this.localParticipant.on(ze.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(ze.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(ze.AttributesChanged,this.onLocalAttributesChanged).on(ze.TrackMuted,this.onLocalTrackMuted).on(ze.TrackUnmuted,this.onLocalTrackUnmuted).on(ze.LocalTrackPublished,this.onLocalTrackPublished).on(ze.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(ze.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(ze.MediaDevicesError,this.onMediaDevicesError).on(ze.AudioStreamAcquired,this.startAudio).on(ze.ChatMessage,this.onLocalChatMessageSent).on(ze.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,t,i){if(this.state===Ot.Connecting||this.state===Ot.Reconnecting){const d=()=>{this.onTrackAdded(e,t,i),f()},f=()=>{this.off(Oe.Reconnected,d),this.off(Oe.Connected,d),this.off(Oe.Disconnected,f)};this.once(Oe.Reconnected,d),this.once(Oe.Connected,d),this.once(Oe.Disconnected,f);return}if(this.state===Ot.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 s=GU(t.id),r=s[0];let a=s[1],l=e.id;if(a&&a.startsWith("TR")&&(l=a),r===this.localParticipant.sid){this.log.warn("tried to create RemoteParticipant for local participant",this.logContext);return}const c=Array.from(this.remoteParticipants.values()).find(d=>d.sid===r);if(!c){this.log.error("Tried to add a track for a participant, that's not present. Sid: ".concat(r),this.logContext);return}let u;this.options.adaptiveStream&&(typeof this.options.adaptiveStream=="object"?u=this.options.adaptiveStream:u={}),c.addSubscribedMediaTrack(e,l,t,i,u)}handleDisconnect(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,t=arguments.length>1?arguments[1]:void 0;var i;if(this.clearConnectionReconcile(),this.isResuming=!1,this.bufferedEvents=[],this.transcriptionReceivedTimes.clear(),this.state!==Ot.Disconnected){this.regionUrl=void 0;try{this.remoteParticipants.forEach(s=>{s.trackPublications.forEach(r=>{s.unpublishTrack(r.trackSid)})}),this.localParticipant.trackPublications.forEach(s=>{var r,a,l;s.track&&this.localParticipant.unpublishTrack(s.track,e),e?((r=s.track)===null||r===void 0||r.detach(),(a=s.track)===null||a===void 0||a.stop()):(l=s.track)===null||l===void 0||l.stopMonitor()}),this.localParticipant.off(ze.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(ze.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(ze.AttributesChanged,this.onLocalAttributesChanged).off(ze.TrackMuted,this.onLocalTrackMuted).off(ze.TrackUnmuted,this.onLocalTrackUnmuted).off(ze.LocalTrackPublished,this.onLocalTrackPublished).off(ze.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(ze.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(ze.MediaDevicesError,this.onMediaDevicesError).off(ze.AudioStreamAcquired,this.startAudio).off(ze.ChatMessage,this.onLocalChatMessageSent).off(ze.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),Sn()&&(window.removeEventListener("beforeunload",this.onPageLeave),window.removeEventListener("pagehide",this.onPageLeave),window.removeEventListener("freeze",this.onPageLeave),(i=navigator.mediaDevices)===null||i===void 0||i.removeEventListener("devicechange",this.handleDeviceChange))}finally{this.setAndEmitConnectionState(Ot.Disconnected),this.emit(Oe.Disconnected,t)}}}handleParticipantDisconnected(e,t){var i;this.remoteParticipants.delete(e),t&&(t.trackPublications.forEach(s=>{t.unpublishTrack(s.trackSid,!0)}),this.emit(Oe.ParticipantDisconnected,t),t.setDisconnected(),(i=this.localParticipant)===null||i===void 0||i.handleParticipantDisconnected(t.identity))}handleStreamHeader(e,t){return ie(this,void 0,void 0,function*(){var i;if(e.contentHeader.case==="byteHeader"){const s=this.byteStreamHandlers.get(e.topic);if(!s){this.log.debug("ignoring incoming byte stream due to no handler for topic",e.topic);return}let r;const a={id:e.streamId,name:(i=e.contentHeader.value.name)!==null&&i!==void 0?i:"unknown",mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Ud(e.timestamp),attributes:e.attributes},l=new ReadableStream({start:c=>{r=c,this.byteStreamControllers.set(e.streamId,{info:a,controller:r,startTime:Date.now()})}});s(new t5(a,l,Ud(e.totalLength)),{identity:t})}else if(e.contentHeader.case==="textHeader"){const s=this.textStreamHandlers.get(e.topic);if(!s){this.log.debug("ignoring incoming text stream due to no handler for topic",e.topic);return}let r;const a={id:e.streamId,mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Number(e.timestamp),attributes:e.attributes},l=new ReadableStream({start:c=>{r=c,this.textStreamControllers.set(e.streamId,{info:a,controller:r,startTime:Date.now()})}});s(new i5(a,l,Ud(e.totalLength)),{identity:t})}})}handleStreamChunk(e){const t=this.byteStreamControllers.get(e.streamId);t&&e.content.length>0&&t.controller.enqueue(e);const i=this.textStreamControllers.get(e.streamId);i&&e.content.length>0&&i.controller.enqueue(e)}handleStreamTrailer(e){const t=this.textStreamControllers.get(e.streamId);t&&(t.info.attributes=Object.assign(Object.assign({},t.info.attributes),e.attributes),t.controller.close(),this.textStreamControllers.delete(e.streamId));const i=this.byteStreamControllers.get(e.streamId);i&&(i.info.attributes=Object.assign(Object.assign({},i.info.attributes),e.attributes),i.controller.close(),this.byteStreamControllers.delete(e.streamId))}selectDefaultDevices(){return ie(this,void 0,void 0,function*(){var e,t,i;const s=Ri.getInstance().previousDevices,r=yield Ri.getInstance().getDevices(void 0,!1),a=bn();if((a==null?void 0:a.name)==="Chrome"&&a.os!=="iOS")for(let c of r){const u=s.find(d=>d.deviceId===c.deviceId);u&&u.label!==""&&u.kind===c.kind&&u.label!==c.label&&this.getActiveDevice(c.kind)==="default"&&this.emit(Oe.ActiveDeviceChanged,c.kind,c.deviceId)}const l=["audiooutput","audioinput","videoinput"];for(let c of l){const u=c8(c),d=this.localParticipant.getTrackPublication(u);if(d&&(!((e=d.track)===null||e===void 0)&&e.isUserProvided))continue;const f=r.filter(T=>T.kind===c),g=this.getActiveDevice(c);if(g===((t=s.filter(T=>T.kind===c)[0])===null||t===void 0?void 0:t.deviceId)&&f.length>0&&((i=f[0])===null||i===void 0?void 0:i.deviceId)!==g){yield this.switchActiveDevice(c,f[0].deviceId);continue}c==="audioinput"&&!hE()||c==="videoinput"||f.length>0&&!f.find(T=>T.deviceId===this.getActiveDevice(c))&&(c!=="audiooutput"||!hE())&&(yield this.switchActiveDevice(c,f[0].deviceId))}})}acquireAudioContext(){return ie(this,void 0,void 0,function*(){var e,t;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=CE())!==null&&e!==void 0?e:void 0),this.options.webAudioMix&&this.remoteParticipants.forEach(s=>s.setAudioContext(this.audioContext)),this.localParticipant.setAudioContext(this.audioContext),this.audioContext&&this.audioContext.state==="suspended")try{yield Promise.race([this.audioContext.resume(),Tn(200)])}catch(s){this.log.warn("Could not resume audio context",Object.assign(Object.assign({},this.logContext),{error:s}))}const i=((t=this.audioContext)===null||t===void 0?void 0:t.state)==="running";i!==this.canPlaybackAudio&&(this.audioEnabled=i,this.emit(Oe.AudioPlaybackStatusChanged,i))})}createParticipant(e,t){var i;let s;return t?s=zd.fromParticipantInfo(this.engine.client,t,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}):s=new zd(this.engine.client,"",e,void 0,void 0,void 0,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}),this.options.webAudioMix&&s.setAudioContext(this.audioContext),!((i=this.options.audioOutput)===null||i===void 0)&&i.deviceId&&s.setAudioOutput(this.options.audioOutput).catch(r=>this.log.warn("Could not set audio output: ".concat(r.message),this.logContext)),s}getOrCreateParticipant(e,t){if(this.remoteParticipants.has(e)){const s=this.remoteParticipants.get(e);return t&&s.updateInfo(t)&&this.sidToIdentity.set(t.sid,t.identity),s}const i=this.createParticipant(e,t);return this.remoteParticipants.set(e,i),this.sidToIdentity.set(t.sid,t.identity),this.emitWhenConnected(Oe.ParticipantConnected,i),i.on(ze.TrackPublished,s=>{this.emitWhenConnected(Oe.TrackPublished,s,i)}).on(ze.TrackSubscribed,(s,r)=>{s.kind===Ae.Kind.Audio?(s.on(He.AudioPlaybackStarted,this.handleAudioPlaybackStarted),s.on(He.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):s.kind===Ae.Kind.Video&&(s.on(He.VideoPlaybackFailed,this.handleVideoPlaybackFailed),s.on(He.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emit(Oe.TrackSubscribed,s,r,i)}).on(ze.TrackUnpublished,s=>{this.emit(Oe.TrackUnpublished,s,i)}).on(ze.TrackUnsubscribed,(s,r)=>{this.emit(Oe.TrackUnsubscribed,s,r,i)}).on(ze.TrackMuted,s=>{this.emitWhenConnected(Oe.TrackMuted,s,i)}).on(ze.TrackUnmuted,s=>{this.emitWhenConnected(Oe.TrackUnmuted,s,i)}).on(ze.ParticipantMetadataChanged,s=>{this.emitWhenConnected(Oe.ParticipantMetadataChanged,s,i)}).on(ze.ParticipantNameChanged,s=>{this.emitWhenConnected(Oe.ParticipantNameChanged,s,i)}).on(ze.AttributesChanged,s=>{this.emitWhenConnected(Oe.ParticipantAttributesChanged,s,i)}).on(ze.ConnectionQualityChanged,s=>{this.emitWhenConnected(Oe.ConnectionQualityChanged,s,i)}).on(ze.ParticipantPermissionsChanged,s=>{this.emitWhenConnected(Oe.ParticipantPermissionsChanged,s,i)}).on(ze.TrackSubscriptionStatusChanged,(s,r)=>{this.emitWhenConnected(Oe.TrackSubscriptionStatusChanged,s,r,i)}).on(ze.TrackSubscriptionFailed,(s,r)=>{this.emit(Oe.TrackSubscriptionFailed,s,i,r)}).on(ze.TrackSubscriptionPermissionChanged,(s,r)=>{this.emitWhenConnected(Oe.TrackSubscriptionPermissionChanged,s,r,i)}).on(ze.Active,()=>{this.emitWhenConnected(Oe.ParticipantActive,i),i.kind===Ql.AGENT&&this.localParticipant.setActiveAgent(i)}),t&&i.updateInfo(t),i}sendSyncState(){const e=Array.from(this.remoteParticipants.values()).reduce((i,s)=>(i.push(...s.getTrackPublications()),i),[]),t=this.localParticipant.getTrackPublications();this.engine.sendSyncState(e,t)}updateSubscriptions(){for(const e of this.remoteParticipants.values())for(const t of e.videoTrackPublications.values())t.isSubscribed&&a8(t)&&t.emitTrackUpdate()}getRemoteParticipantBySid(e){const t=this.sidToIdentity.get(e);if(t)return this.remoteParticipants.get(t)}registerConnectionReconcile(){this.clearConnectionReconcile();let e=0;this.connectionReconcileInterval=Ui.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,Qn.STATE_MISMATCH))):e=0},p5)}clearConnectionReconcile(){this.connectionReconcileInterval&&Ui.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(e){return e===this.state?!1:(this.state=e,this.emit(Oe.ConnectionStateChanged,this.state),!0)}emitBufferedEvents(){this.bufferedEvents.forEach(e=>{let[t,i]=e;this.emit(t,...i)}),this.bufferedEvents=[]}emitWhenConnected(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),s=1;s<t;s++)i[s-1]=arguments[s];if(this.state===Ot.Reconnecting||this.isResuming||!this.engine||this.engine.pendingReconnect)this.bufferedEvents.push([e,i]);else if(this.state===Ot.Connected)return this.emit(e,...i);return!1}simulateParticipants(e){return ie(this,void 0,void 0,function*(){var t,i;const s=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 Cd({sid:"RM_SIMULATED",name:"simulated-room",emptyTimeout:0,maxParticipants:0,creationTime:ii.parse(new Date().getTime()),metadata:"",numParticipants:1,numPublishers:1,turnPassword:"",enabledCodecs:[],activeRecording:!1}),this.localParticipant.updateInfo(new aa({identity:"simulated-local",name:"local-name"})),this.setupLocalParticipantEvents(),this.emit(Oe.SignalConnected),this.emit(Oe.Connected),this.setAndEmitConnectionState(Ot.Connected),s.video){const a=new _g(Ae.Kind.Video,new _o({source:_i.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:Jn.AUDIO,name:"video-dummy"}),new Hd(s.useRealTracks?(yield window.navigator.mediaDevices.getUserMedia({video:!0})).getVideoTracks()[0]:bE(160*((t=r.aspectRatios[0])!==null&&t!==void 0?t:1),160,!0,!0),void 0,!1,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(a),this.localParticipant.emit(ze.LocalTrackPublished,a)}if(s.audio){const a=new _g(Ae.Kind.Audio,new _o({source:_i.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:Jn.AUDIO}),new qd(s.useRealTracks?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:Xm(),void 0,!1,this.audioContext,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(a),this.localParticipant.emit(ze.LocalTrackPublished,a)}for(let a=0;a<r.count-1;a+=1){let l=new aa({sid:Math.floor(Math.random()*1e4).toString(),identity:"simulated-".concat(a),state:So.ACTIVE,tracks:[],joinedAt:ii.parse(Date.now())});const c=this.getOrCreateParticipant(l.identity,l);if(r.video){const u=bE(160*((i=r.aspectRatios[a%r.aspectRatios.length])!==null&&i!==void 0?i:1),160,!1,!0),d=new _o({source:_i.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:Jn.AUDIO});c.addSubscribedMediaTrack(u,d.sid,new MediaStream([u]),new RTCRtpReceiver),l.tracks=[...l.tracks,d]}if(r.audio){const u=Xm(),d=new _o({source:_i.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:Jn.AUDIO});c.addSubscribedMediaTrack(u,d.sid,new MediaStream([u]),new RTCRtpReceiver),l.tracks=[...l.tracks,d]}c.updateInfo(l)}})}emit(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),s=1;s<t;s++)i[s-1]=arguments[s];if(e!==Oe.ActiveSpeakersChanged&&e!==Oe.TranscriptionReceived){const r=JE(i).filter(a=>a!==void 0);this.log.debug("room event ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:r}))}return super.emit(e,...i)}}Ws.cleanupRegistry=typeof FinalizationRegistry<"u"&&new FinalizationRegistry(n=>{n()});function JE(n){return n.map(e=>{if(e)return Array.isArray(e)?JE(e):typeof e=="object"?"logContext"in e?e.logContext:void 0:e})}var ns;(function(n){n[n.IDLE=0]="IDLE",n[n.RUNNING=1]="RUNNING",n[n.SKIPPED=2]="SKIPPED",n[n.SUCCESS=3]="SUCCESS",n[n.FAILED=4]="FAILED"})(ns||(ns={}));class kr extends ks.EventEmitter{constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.status=ns.IDLE,this.logs=[],this.options={},this.url=e,this.token=t,this.name=this.constructor.name,this.room=new Ws(i.roomOptions),this.connectOptions=i.connectOptions,this.options=i}run(e){return ie(this,void 0,void 0,function*(){if(this.status!==ns.IDLE)throw Error("check is running already");this.setStatus(ns.RUNNING);try{yield this.perform()}catch(t){t instanceof Error&&(this.options.errorsAsWarnings?this.appendWarning(t.message):this.appendError(t.message))}return yield this.disconnect(),yield new Promise(t=>setTimeout(t,500)),this.status!==ns.SKIPPED&&this.setStatus(this.isSuccess()?ns.SUCCESS:ns.FAILED),e&&e(),this.getInfo()})}isSuccess(){return!this.logs.some(e=>e.level==="error")}connect(e){return ie(this,void 0,void 0,function*(){return this.room.state===Ot.Connected?this.room:(e||(e=this.url),yield this.room.connect(e,this.token,this.connectOptions),this.room)})}disconnect(){return ie(this,void 0,void 0,function*(){this.room&&this.room.state!==Ot.Disconnected&&(yield this.room.disconnect(),yield new Promise(e=>setTimeout(e,500)))})}skip(){this.setStatus(ns.SKIPPED)}switchProtocol(e){return ie(this,void 0,void 0,function*(){let t=!1,i=!1;if(this.room.on(Oe.Reconnecting,()=>{t=!0}),this.room.once(Oe.Reconnected,()=>{i=!0}),this.room.simulateScenario("force-".concat(e)),yield new Promise(r=>setTimeout(r,1e3)),!t)return;const s=Date.now()+1e4;for(;Date.now()<s;){if(i)return;yield Tn(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 m5 extends kr{get description(){return"Cloud regions"}perform(){return ie(this,void 0,void 0,function*(){const e=new bg(this.url,this.token);if(!e.isCloud()){this.skip();return}const t=[],i=new Set;for(let r=0;r<3;r++){const a=yield e.getNextBestRegionUrl();if(!a)break;if(i.has(a))continue;i.add(a);const l=yield this.checkCloudRegion(a);this.appendMessage("".concat(l.region," RTT: ").concat(l.rtt,"ms, duration: ").concat(l.duration,"ms")),t.push(l)}t.sort((r,a)=>(r.duration-a.duration)*.5+(r.rtt-a.rtt)*.5);const s=t[0];this.bestStats=s,this.appendMessage("best Cloud region: ".concat(s.region))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkCloudRegion(e){return ie(this,void 0,void 0,function*(){var t,i;yield this.connect(e),this.options.protocol==="tcp"&&(yield this.switchProtocol("tcp"));const s=(t=this.room.serverInfo)===null||t===void 0?void 0:t.region;if(!s)throw new Error("Region not found");const r=yield this.room.localParticipant.streamText({topic:"test"}),a=1e3,c=1e6/a,u="A".repeat(a),d=Date.now();for(let S=0;S<c;S++)yield r.write(u);yield r.close();const f=Date.now(),g=yield(i=this.room.engine.pcManager)===null||i===void 0?void 0:i.publisher.getStats(),T={region:s,rtt:1e4,duration:f-d};return g==null||g.forEach(S=>{S.type==="candidate-pair"&&S.nominated&&(T.rtt=S.currentRoundTripTime*1e3)}),yield this.disconnect(),T})}}const Cg=1e4;class g5 extends kr{get description(){return"Connection via UDP vs TCP"}perform(){return ie(this,void 0,void 0,function*(){const e=yield this.checkConnectionProtocol("udp"),t=yield this.checkConnectionProtocol("tcp");this.bestStats=e,e.qualityLimitationDurations.bandwidth-t.qualityLimitationDurations.bandwidth>.5||(e.packetsLost-t.packetsLost)/e.packetsSent>.01?(this.appendMessage("best connection quality via tcp"),this.bestStats=t):this.appendMessage("best connection quality via udp");const i=this.bestStats;this.appendMessage("upstream bitrate: ".concat((i.bitrateTotal/i.count/1e3/1e3).toFixed(2)," mbps")),this.appendMessage("RTT: ".concat((i.rttTotal/i.count*1e3).toFixed(2)," ms")),this.appendMessage("jitter: ".concat((i.jitterTotal/i.count*1e3).toFixed(2)," ms")),i.packetsLost>0&&this.appendWarning("packets lost: ".concat((i.packetsLost/i.packetsSent*100).toFixed(2),"%")),i.qualityLimitationDurations.bandwidth>1&&this.appendWarning("bandwidth limited ".concat((i.qualityLimitationDurations.bandwidth/(Cg/1e3)*100).toFixed(2),"%")),i.qualityLimitationDurations.cpu>0&&this.appendWarning("cpu limited ".concat((i.qualityLimitationDurations.cpu/(Cg/1e3)*100).toFixed(2),"%"))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkConnectionProtocol(e){return ie(this,void 0,void 0,function*(){yield this.connect(),e==="tcp"?yield this.switchProtocol("tcp"):yield this.switchProtocol("udp");const t=document.createElement("canvas");t.width=1280,t.height=720;const i=t.getContext("2d");if(!i)throw new Error("Could not get canvas context");let s=0;const r=()=>{s=(s+1)%360,i.fillStyle="hsl(".concat(s,", 100%, 50%)"),i.fillRect(0,0,t.width,t.height),requestAnimationFrame(r)};r();const l=t.captureStream(30).getVideoTracks()[0],u=(yield this.room.localParticipant.publishTrack(l,{simulcast:!1,degradationPreference:"maintain-resolution",videoEncoding:{maxBitrate:2e6}})).track,d={protocol:e,packetsLost:0,packetsSent:0,qualityLimitationDurations:{},rttTotal:0,jitterTotal:0,bitrateTotal:0,count:0},f=setInterval(()=>ie(this,void 0,void 0,function*(){const g=yield u.getRTCStatsReport();g==null||g.forEach(T=>{T.type==="outbound-rtp"?(d.packetsSent=T.packetsSent,d.qualityLimitationDurations=T.qualityLimitationDurations,d.bitrateTotal+=T.targetBitrate,d.count++):T.type==="remote-inbound-rtp"&&(d.packetsLost=T.packetsLost,d.rttTotal+=T.roundTripTime,d.jitterTotal+=T.jitter)})}),1e3);return yield new Promise(g=>setTimeout(g,Cg)),clearInterval(f),l.stop(),t.remove(),yield this.disconnect(),d})}}class y5 extends kr{get description(){return"Can publish audio"}perform(){return ie(this,void 0,void 0,function*(){var e;const t=yield this.connect(),i=yield c5();if(yield _E(i,1e3))throw new Error("unable to detect audio from microphone");this.appendMessage("detected audio from microphone"),t.localParticipant.publishTrack(i),yield new Promise(l=>setTimeout(l,3e3));const r=yield(e=i.sender)===null||e===void 0?void 0:e.getStats();if(!r)throw new Error("Could not get RTCStats");let a=0;if(r.forEach(l=>{l.type==="outbound-rtp"&&(l.kind==="audio"||!l.kind&&l.mediaType==="audio")&&(a=l.packetsSent)}),a===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(a," audio packets"))})}}class v5 extends kr{get description(){return"Can publish video"}perform(){return ie(this,void 0,void 0,function*(){var e;const t=yield this.connect(),i=yield l5();yield this.checkForVideo(i.mediaStreamTrack),t.localParticipant.publishTrack(i),yield new Promise(a=>setTimeout(a,5e3));const s=yield(e=i.sender)===null||e===void 0?void 0:e.getStats();if(!s)throw new Error("Could not get RTCStats");let r=0;if(s.forEach(a=>{a.type==="outbound-rtp"&&(a.kind==="video"||!a.kind&&a.mediaType==="video")&&(r+=a.packetsSent)}),r===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(r," video packets"))})}checkForVideo(e){return ie(this,void 0,void 0,function*(){const t=new MediaStream;t.addTrack(e.clone());const i=document.createElement("video");i.srcObject=t,i.muted=!0,yield new Promise(s=>{i.onplay=()=>{setTimeout(()=>{var r,a,l,c;const u=document.createElement("canvas"),d=e.getSettings(),f=(a=(r=d.width)!==null&&r!==void 0?r:i.videoWidth)!==null&&a!==void 0?a:1280,g=(c=(l=d.height)!==null&&l!==void 0?l:i.videoHeight)!==null&&c!==void 0?c:720;u.width=f,u.height=g;const T=u.getContext("2d");T.drawImage(i,0,0);const m=T.getImageData(0,0,u.width,u.height).data;let _=!0;for(let k=0;k<m.length;k+=4)if(m[k]!==0||m[k+1]!==0||m[k+2]!==0){_=!1;break}_?this.appendError("camera appears to be producing only black frames"):this.appendMessage("received video frames"),s()},1e3)},i.play()}),i.remove()})}}class b5 extends kr{get description(){return"Resuming connection after interruption"}perform(){return ie(this,void 0,void 0,function*(){var e;const t=yield this.connect();let i=!1,s=!1,r;const a=new Promise(u=>{setTimeout(u,5e3),r=u}),l=()=>{i=!0};t.on(Oe.SignalReconnecting,l).on(Oe.Reconnecting,l).on(Oe.Reconnected,()=>{s=!0,r(!0)}),(e=t.engine.client.ws)===null||e===void 0||e.close();const c=t.engine.client.onClose;if(c&&c(""),yield a,i){if(!s||t.state!==Ot.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 T5 extends kr{get description(){return"Can connect via TURN"}perform(){return ie(this,void 0,void 0,function*(){var e,t;const i=new sg,s=yield i.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});let r=!1,a=!1,l=!1;for(let c of s.iceServers)for(let u of c.urls)u.startsWith("turn:")?(a=!0,l=!0):u.startsWith("turns:")&&(a=!0,l=!0,r=!0),u.startsWith("stun:")&&(l=!0);l?a&&!r&&this.appendWarning("TURN is configured server side, but TURN/TLS is unavailable."):this.appendWarning("No STUN servers configured on server side."),yield i.close(),!((t=(e=this.connectOptions)===null||e===void 0?void 0:e.rtcConfig)===null||t===void 0)&&t.iceServers||a?yield this.room.connect(this.url,this.token,{rtcConfig:{iceTransportPolicy:"relay"}}):(this.appendWarning("No TURN servers configured."),this.skip(),yield new Promise(c=>setTimeout(c,0)))})}}class S5 extends kr{get description(){return"Establishing WebRTC connection"}perform(){return ie(this,void 0,void 0,function*(){let e=!1,t=!1;this.room.on(Oe.SignalConnected,()=>{const i=this.room.engine.client.onTrickle;this.room.engine.client.onTrickle=(s,r)=>{if(s.candidate){const a=new RTCIceCandidate(s);let l="".concat(a.protocol," ").concat(a.address,":").concat(a.port," ").concat(a.type);a.address&&(_5(a.address)?l+=" (private)":a.protocol==="tcp"&&a.tcpType==="passive"?(e=!0,l+=" (passive)"):a.protocol==="udp"&&(t=!0)),this.appendMessage(l)}i&&i(s,r)},this.room.engine.pcManager&&(this.room.engine.pcManager.subscriber.onIceCandidateError=s=>{s instanceof RTCPeerConnectionIceErrorEvent&&this.appendWarning("error with ICE candidate: ".concat(s.errorCode," ").concat(s.errorText," ").concat(s.url))})});try{yield this.connect(),At.info("now the room is connected")}catch(i){throw this.appendWarning("ports need to be open on firewall in order to connect."),i}e||this.appendWarning("Server is not configured for ICE/TCP"),t||this.appendWarning("No public IPv4 UDP candidates were found. Your server is likely not configured correctly")})}}function _5(n){const e=n.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 t=parseInt(e[1],10);if(t>=16&&t<=31)return!0}}return!1}class C5 extends kr{get description(){return"Connecting to signal connection via WebSocket"}perform(){return ie(this,void 0,void 0,function*(){var e,t,i;(this.url.startsWith("ws:")||this.url.startsWith("http:"))&&this.appendWarning("Server is insecure, clients may block connections to it");let s=new sg;const r=yield s.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)===ZC.Cloud&&(!((t=r.serverInfo)===null||t===void 0)&&t.region)&&this.appendMessage("LiveKit Cloud: ".concat((i=r.serverInfo)===null||i===void 0?void 0:i.region)),yield s.close()})}}class Qj extends ks.EventEmitter{constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.options={},this.checkResults=new Map,this.url=e,this.token=t,this.options=i}getNextCheckId(){const e=this.checkResults.size;return this.checkResults.set(e,{logs:[],status:ns.IDLE,name:"",description:""}),e}updateCheck(e,t){this.checkResults.set(e,t),this.emit("checkUpdate",e,t)}isSuccess(){return Array.from(this.checkResults.values()).every(e=>e.status!==ns.FAILED)}getResults(){return Array.from(this.checkResults.values())}createAndRunCheck(e){return ie(this,void 0,void 0,function*(){const t=this.getNextCheckId(),i=new e(this.url,this.token,this.options),s=a=>{this.updateCheck(t,a)};i.on("update",s);const r=yield i.run();return i.off("update",s),r})}checkWebsocket(){return ie(this,void 0,void 0,function*(){return this.createAndRunCheck(C5)})}checkWebRTC(){return ie(this,void 0,void 0,function*(){return this.createAndRunCheck(S5)})}checkTURN(){return ie(this,void 0,void 0,function*(){return this.createAndRunCheck(T5)})}checkReconnect(){return ie(this,void 0,void 0,function*(){return this.createAndRunCheck(b5)})}checkPublishAudio(){return ie(this,void 0,void 0,function*(){return this.createAndRunCheck(y5)})}checkPublishVideo(){return ie(this,void 0,void 0,function*(){return this.createAndRunCheck(v5)})}checkConnectionProtocol(){return ie(this,void 0,void 0,function*(){const e=yield this.createAndRunCheck(g5);if(e.data&&"protocol"in e.data){const t=e.data;this.options.protocol=t.protocol}return e})}checkCloudRegion(){return ie(this,void 0,void 0,function*(){return this.createAndRunCheck(m5)})}}class k5{constructor(e){Aa(this,Ds,null);this.url=e,this.socket=null,this.isOpen=!1,this.messageHandlers=new Map,this.openHandlers=new Map,this.closeHandlers=[],this.errorHandlers=[]}connect(){this.socket=new WebSocket(this.url),this.socket.onopen=e=>{this.isOpen=!0,this.openHandlers.size>0&&this.openHandlers.forEach(t=>t()),Ki(this,Ds)&&(clearInterval(Ki(this,Ds)),Lr(this,Ds,null)),Lr(this,Ds,setInterval(()=>{this.send({cmd:"HeartBreak"})},1e4))},this.socket.onmessage=e=>{this.messageHandlers.size>0&&this.messageHandlers.forEach(t=>t(e.data))},this.socket.onclose=e=>{this.closeHandlers.forEach(t=>t(e))},this.socket.onerror=e=>{this.errorHandlers.forEach(t=>t(e))}}send(e){this.socket.readyState===WebSocket.OPEN?this.socket.send(JSON.stringify(e)):this.socket.readyState===WebSocket.CLOSED?this.isOpen?(console.error("WebSocket链接异常关闭"),this.connect(),this.clearOpenHandler(),this.addOpenHandler("MsgSend",()=>{this.socket.send(JSON.stringify(e))})):console.log("websocket链接已关闭"):(this.clearOpenHandler(),this.addOpenHandler("MsgSend",()=>{this.socket.send(JSON.stringify(e))}))}addMessageHandler(e,t){this.messageHandlers.has(e)?(this.messageHandlers.delete(e),this.messageHandlers.set(e,t)):this.messageHandlers.set(e,t)}addOpenHandler(e,t){this.openHandlers.has(e)?(this.openHandlers.delete(e),this.openHandlers.set(e,t)):this.openHandlers.set(e,t)}addCloseHandler(e){this.closeHandlers.push(e)}addErrorHandler(e){this.errorHandlers.push(e)}clearMessageHandler(){this.messageHandlers.clear()}clearOpenHandler(){this.openHandlers.clear()}clearCloseHandler(){this.closeHandlers=[]}clearErrorHandler(){this.errorHandlers=[]}close(){this.socket.close(),this.isOpen=!1,Ki(this,Ds)&&(clearInterval(Ki(this,Ds)),Lr(this,Ds,null))}}Ds=new WeakMap;class E5{constructor(){Aa(this,Ks);Lr(this,Ks,Qy())}on(e,t){Ki(this,Ks).on(e,t)}off(e,t=null){t&&typeof t=="function"?Ki(this,Ks).off(e,t):Ki(this,Ks).off(e)}emit(e,t){Ki(this,Ks).emit(e,t)}removeAllListeners(){Ki(this,Ks).all.clear()}}Ks=new WeakMap;class kg extends E5{constructor({userId:t,org:i,roomName:s="",roomMode:r="auto",baseUrl:a,baseUrlFy:l}={}){super();Aa(this,Kt);Aa(this,Mo,"");Aa(this,Oo,"");Aa(this,Lo,null);this.userId=t,this.org=i,this.roomName=s,this.roomNum,this.counter=0,this.room=null,this.roomMode=r,this.baseUrl=a,this.baseUrlFy=l,this.encoder=new TextEncoder,this.decoder=new TextDecoder,this.wshead=this.baseUrl.split("//")[0]=="http:"?"ws://":"wss://",this.websocketUrl=`${this.wshead}${this.baseUrl.split("//")[1]}/socket?org=${this.org}&identity=${this.userId}`,this.socket=new k5(this.websocketUrl),this.socket.addOpenHandler("SocketOpen",()=>{this.emit("socketOpen")}),this.socket.connect(),an(this,Kt,y1).call(this)}get isShareEnable(){return this.room&&this.room.localParticipant?this.room.localParticipant.isScreenShareEnabled:!1}get isCameraEnable(){return this.room&&this.room.localParticipant?this.room.localParticipant.isCameraEnabled:!1}get isMicrophoneEnable(){return this.room&&this.room.localParticipant?this.room.localParticipant.isMicrophoneEnabled:!1}static async getDeviceList(){const t=await Ws.getLocalDevices("audioinput"),i=await Ws.getLocalDevices("videoinput"),s=await Ws.getLocalDevices("audiooutput");return{audioDevices:t,videoDevices:i,outputDevices:s}}sendMessage(t,i){const s={cmd:"SendText",data:{room:this.roomNum,identity:this.userId,name:i,text:t}};this.socket.send(s)}screenShot(t,i={}){let s=an(this,Kt,v1).call(this,t);if(!s){this.emit("errorPush",{type:"screenShot",message:"DOM元素不存在"});return}let r=document.createElement("canvas"),a=null,l=null;return r.width=i.width,r.height=i.height,a=r.getContext("2d"),a.drawImage(s,0,0,i.width,i.height),l=r.toDataURL("image/png",i.quality),l}async uploadScreenShot(t,i={}){let s,r=this.screenShot(t,i),a=r.indexOf(",");a>-1&&(s=r.substring(a+1));let l=await fetch(this.baseUrl+"/api/FileFind/upload/image/sample",{method:"POST",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify({base64:s,org:this.org,owner:this.userId})});try{let c=await l.json();(c==null?void 0:c.code)===200?this.emit("imageUploadSuccess",r):this.emit("imageUploadFail",c)}catch(c){this.emit("imageUploadFail",c)}}judgeUserInMeeting(t=""){return new Promise((i,s)=>{fetch(this.baseUrl+"/api/v1/IsParticipantExist",{method:"POST",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify({room:t,identity:this.userId})}).then(r=>r.json()).then(r=>{(r==null?void 0:r.code)===200?i(r==null?void 0:r.data):s()}).catch(r=>{s(r)})})}judgeRoomExist(t=""){return new Promise((i,s)=>{fetch(this.baseUrl+"/api/v1/isRoomExist",{method:"POST",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify({room:t})}).then(r=>r.json()).then(r=>{i(r)}).catch(r=>{s(r)})})}setParticipantDeafness(t){return new Promise((i,s)=>{t||(this.emit("errorPush",{type:"setParticipantDeafness",message:"identity不能为空"}),s());const r={cmd:"DoDeafness",data:{room:this.roomNum,identity:t}};this.socket.send(r),this.socket.addMessageHandler("SetParticipantDeafness",a=>{let l=JSON.parse(a);l.cmd==="DoDeafness"&&((l==null?void 0:l.data.code)=="200"?i():(this.emit("errorPush",{type:"setParticipantDeafness",message:l.data.msg??"与会者置聋失败"}),s()))})})}cancelParticipantDeafness(t){return new Promise((i,s)=>{t||(this.emit("errorPush",{type:"cancelParticipantDeafness",message:"identity不能为空"}),s());const r={cmd:"UnDoDeafness",data:{room:this.roomNum,identity:t}};this.socket.send(r),this.socket.addMessageHandler("CancelParticipantDeafness",a=>{const l=JSON.parse(a);l.cmd==="UnDoDeafness"&&((l==null?void 0:l.data.code)=="200"?i():(this.emit("errorPush",{type:"cancelParticipantDeafness",message:l.data.msg??"与会者取消置聋失败"}),s()))})})}addCoHost(t,i){return new Promise((s,r)=>{(!t||!i)&&(this.emit("errorPush",{type:"addCoHost",message:"关键参数缺失"}),r(new Error("关键参数缺失")));const a={cmd:"AddCoHost",data:{room:this.roomNum,identity:this.userId,coHostId:t,coHostName:i}};this.socket.send(a),this.socket.addMessageHandler("AddCoHost",l=>{const c=JSON.parse(l);c.cmd==="AddCoHost"&&((c==null?void 0:c.data.code)=="200"?s():(this.emit("errorPush",{type:"addCoHost",message:c.data.msg??"联席主持人设置失败"}),r(new Error(c.data.msg??"联席主持人设置失败"))))})})}removeCoHost(t,i){return new Promise((s,r)=>{(!t||!i)&&(this.emit("errorPush",{type:"removeCoHost",message:"关键参数缺失"}),r(new Error("关键参数缺失")));const a={cmd:"RemoveCoHost",data:{room:this.roomNum,identity:this.userId,coHostId:t,coHostName:i}};this.socket.send(a),this.socket.addMessageHandler("RemoveCoHost",l=>{const c=JSON.parse(l);c.cmd==="RemoveCoHost"&&((c==null?void 0:c.data.code)=="200"?s():(this.emit("errorPush",{type:"removeCoHost",message:c.data.msg??"移除联席主持人失败"}),r(new Error(c.data.msg??"联席主持人设置失败"))))})})}modifyPermission(t,i){return new Promise((s,r)=>{(!t||!i)&&(this.emit("errorPush",{type:"modifyPermission",message:"关键参数缺失"}),r(new Error("关键参数缺失")));const a={cmd:"ModifyPermission",data:{room:this.roomNum,identity:this.userId,permission:t,input:i}};this.socket.send(a),this.socket.addMessageHandler("ModifyPermission",l=>{const c=JSON.parse(l);c.cmd==="ModifyPermission"&&((c==null?void 0:c.data.code)=="200"?s():(this.emit("errorPush",{type:"modifyPermission",message:c.data.msg??"修改与会者权限失败"}),r(new Error(c.data.msg??"修改与会者权限失败"))))})})}async createRoom(){if(!this.baseUrl){this.emit("errorPush",{type:"createRoom",message:"请输入baseUrl"});return}if(!this.roomName){this.emit("errorPush",{type:"createRoom",message:"房间名不能为空"});return}if(!this.org||!this.userId){this.emit("errorPush",{type:"createRoom",message:"创建房间前请先登录"});return}let t,i,s="";try{let r=await fetch(this.baseUrl+"/api/v1/creatRoom",{method:"POST",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify({roomAlias:this.roomName,org:this.org,owner:this.userId,roomLevel:Number(localStorage.getItem("priority"))||0})});if(!r.ok){const a=await r.text();return console.error("创建房间接口请求失败:",r.status,a),this.emit("roomCreatedFail",`HTTP ${r.status}: ${a||"请求失败"}`),""}if(t=await r.json(),t.code==200){s=t.data;let a=await fetch(this.baseUrl+"/api/v1/createDispatcher",{method:"POST",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify({org:this.org,room:s,called:s})});if(!a.ok){const l=await a.text();return console.error("创建调度器接口请求失败:",a.status,l),this.emit("roomCreatedFail",`创建调度器失败: HTTP ${a.status}: ${l||"请求失败"}`),""}if(i=await a.json(),i.code==200)this.emit("roomCreatedSuccess",s),Lr(this,Lo,i.data);else return console.error("创建调度器失败:",i),this.emit("roomCreatedFail",i.msg||i.message||"创建调度器失败"),""}else return console.error("创建房间失败:",t),this.emit("roomCreatedFail",t.msg||t.message||"创建房间失败"),""}catch(r){console.error("创建房间异常:",r);const a=(r==null?void 0:r.message)||(r==null?void 0:r.toString())||"未知错误";this.emit("roomCreatedFail",a)}return s}async joinRoom({audioDeviceId:t="",videoDeviceId:i="",outputDeviceId:s="",facingMode:r="user",autoGainControl:a,echoCancellation:l,noiseSuppression:c,roomNum:u,cameraStatus:d=!0,microphoneStatus:f=!0,origin:g="0",videoCodec:T}={}){if(!u){this.emit("errorPush",{type:"joinRoom",message:"请输入房间号"});return}let S={audioCaptureDefaults:{deviceId:t||"default",autoGainControl:a??!1,echoCancellation:l??!1,noiseSuppression:c??!1},videoCaptureDefaults:{},stopLocalTrackOnUnpublish:!0,adaptiveStream:!0};s&&(S.audioOutput={deviceId:s});let m={autoSubscribe:!0};if(i?S.videoCaptureDefaults.deviceId=i:S.videoCaptureDefaults.facingMode=r,T&&typeof T=="string"){const D={videoCodec:T};S.publishDefaults=D}this.roomNum=u;try{let D=await an(this,Kt,T1).call(this,this.roomNum,g);const L=this.baseUrl.split("//")[1].split("/ylapi")[0];Lr(this,Mo,`${this.wshead}${L}`),Lr(this,Oo,D.token),this.room=new Ws(S),await this.room.prepareConnection(Ki(this,Mo),Ki(this,Oo)),an(this,Kt,S1).call(this),await this.room.connect(Ki(this,Mo),Ki(this,Oo),m)}catch(D){this.emit("joinRoomError",D);return}try{if(console.log("[麦克风Track调试] 开始设置麦克风状态:",{roomMode:this.roomMode,microphoneStatus:f,cameraStatus:d,localParticipant:this.room.localParticipant}),this.roomMode==="auto"){await this.room.localParticipant.setCameraEnabled(d),console.log(`[麦克风Track调试] 设置麦克风状态: ${f}`);const D=await this.room.localParticipant.setMicrophoneEnabled(f);console.log("[麦克风Track调试] 麦克风设置结果:",D),an(this,Kt,v0).call(this,"video")}else{console.log(`[麦克风Track调试] Audio模式设置麦克风状态: ${f}`);const D=await this.room.localParticipant.setMicrophoneEnabled(f);console.log("[麦克风Track调试] Audio模式麦克风设置结果:",D),await this.room.localParticipant.setCameraEnabled(!1),an(this,Kt,v0).call(this,"audio")}setTimeout(async()=>{const D=this.room.localParticipant.getTrackPublication(Ae.Source.Microphone);console.log("[麦克风Track调试] 延迟检查麦克风track:",{micPub:D,hasAudioTrack:!!(D!=null&&D.audioTrack),audioTrack:D==null?void 0:D.audioTrack,isMicrophoneEnabled:this.room.localParticipant.isMicrophoneEnabled});try{const L=(await navigator.mediaDevices.enumerateDevices()).filter(U=>U.kind==="audioinput");console.log("[麦克风Track调试] 音频输入设备:",L);const $=await navigator.mediaDevices.getUserMedia({audio:!0});console.log("[麦克风Track调试] 麦克风权限检查成功:",$),$.getTracks().forEach(U=>U.stop())}catch(F){console.error("[麦克风Track调试] 麦克风权限检查失败:",F)}},1e3)}catch(D){console.error("变更设备状态失败",D)}const _=this.room.getActiveDevice("audioinput")??"default",k=this.room.getActiveDevice("videoinput")??"default",R=this.room.getActiveDevice("audiooutput")??"default";return this.room.remoteParticipants.forEach(D=>{an(this,Kt,_h).call(this,D)}),an(this,Kt,_h).call(this,this.room.localParticipant),{audioInputDevice:_,videoInputDevice:k,audioOutputDevice:R}}makeCall(t,i,s){return new Promise((r,a)=>{let l=null;this.roomNum||(this.emit("errorPush",{type:"makeCall",message:"请先加入房间"}),a()),this.baseUrl||(this.emit("errorPush",{type:"makeCall",message:"baseUrl为空"}),a()),s?l={name:t,org:this.org,room:this.roomNum,dnis:i,type:s,mute:!0}:l={name:t,org:this.org,room:this.roomNum,dnis:i,mute:!0},fetch(this.baseUrl+"/api/v1/makeCall",{method:"POST",body:JSON.stringify(l)}).then(c=>c.json()).then(c=>{c.code==200?(this.emit("makeCallSuccess"),r()):(this.emit("errorPush",{type:"makeCall",message:c.msg??"呼出失败"}),a())}).catch(c=>{this.emit("errorPush",{type:"makeCall",message:c}),a()})})}makeCallCustom(t={}){let i=t;return new Promise((s,r)=>{let a=null;this.roomNum||(this.emit("errorPush",{type:"makeCall",message:"请先加入房间"}),r()),this.baseUrl||(this.emit("errorPush",{type:"makeCall",message:"baseUrl为空"}),r()),a={name:t.name,org:this.org,room:this.roomNum,dnis:t.phone,mute:!0,...t},fetch(this.baseUrl+"/api/v1/makeCall",{method:"POST",body:JSON.stringify(a)}).then(l=>l.json()).then(l=>{l.code==200?(t.proxy&&(this.counter=0),this.emit("makeCallSuccess"),s()):(t.proxy&&l.code==500&&(this.counter<1&&this.makeCallCustom(i),this.counter++),this.emit("errorPush",{type:"makeCallCustom1",message:l.msg??"呼出失败"}),r())}).catch(l=>{this.emit("errorPush",{type:"makeCallCustom2",message:l}),r()})})}pushVideoStream(){if(!this.roomNum){this.emit("errorPush",{type:"pushVideoStream",message:"请先加入房间"});return}return new Promise((t,i)=>{let s={cmd:"StartOutputStream",data:{room:this.roomNum,url:"rtmp://10.2.14.199/live/"}};this.socket.send(s),this.socket.addMessageHandler("StartOutputStream",r=>{var l;let a=JSON.parse(r);a.cmd==="StartOutputStream"&&((a==null?void 0:a.data.code)=="200"?(this.emit("startPushing",a.data),t(a.data.result)):(this.emit("errorPush",{type:"pushVideoStream",message:((l=a.data)==null?void 0:l.msg)??"推流失败"}),i()))})})}stopPushVideoStream(){if(!this.roomNum){this.emit("errorPush",{type:"stopPushVideoStream",message:"请先加入房间"});return}return new Promise((t,i)=>{let s={cmd:"StopOutputStream",data:{room:this.roomNum}};this.socket.send(s),this.socket.addMessageHandler("StopOutputStream",r=>{var l;let a=JSON.parse(r);a.cmd==="StopOutputStream"&&((a==null?void 0:a.data.code)=="200"?(this.emit("stopPushing",a.data),t()):(this.emit("errorPush",{type:"stopPushVideoStream",message:((l=a.data)==null?void 0:l.msg)??"停止推流失败"}),i()))})})}moveoutParticipant(t){if(!this.roomNum){this.emit("errorPush",{type:"moveoutParticipant",message:"请先加入房间"});return}return new Promise((i,s)=>{let r={cmd:"RemoveParticipant",data:{room:this.roomNum,identity:t}};this.socket.send(r),this.socket.addMessageHandler("RemoveParticipant",a=>{let l=JSON.parse(a);l.cmd==="RemoveParticipant"&&((l==null?void 0:l.data.code)=="200"?i():(this.emit("errorPush",{type:"moveoutParticipant",message:l.data.msg??"移出房间失败"}),s()))})})}updateParticipantName(t,i,s="0"){if(!this.roomNum){this.emit("errorPush",{type:"updateParticipantName",message:"请先加入房间"});return}return new Promise((r,a)=>{let l={cmd:"UpdateParticipant",data:{room:this.roomNum,identity:t,name:i,isPermission:s}};this.socket.send(l),this.socket.addMessageHandler("UpdateParticipant",c=>{let u=JSON.parse(c);u.cmd==="UpdateParticipant"&&((u==null?void 0:u.data.code)=="200"?r():(this.emit("errorPush",{type:"updateParticipantName",message:u.data.msg??"修改与会者名称失败"}),a()))})})}setParticipantToHost(t,i){return new Promise((s,r)=>{(!this.roomNum||!t||!i||!this.userId)&&(this.emit("errorPush",{type:"setParticipantToHost",message:"关键参数缺失"}),r("关键参数缺失"));const a={cmd:"AddHost",data:{room:this.roomNum,identity:this.userId,hostId:t,hostName:i}};this.socket.addMessageHandler("SetParticipantToHost",l=>{const c=JSON.parse(l);c.cmd==="AddHost"&&((c==null?void 0:c.data.code)=="200"?s():(this.emit("errorPush",{type:"setParticipantToHost",message:c.data.msg??"添加为主持人失败"}),r(c.data.msg??"添加为主持人失败")))}),this.socket.send(a)})}startRecord(){if(!this.roomNum){this.emit("errorPush",{type:"startRecord",message:"请先加入房间"});return}return new Promise((t,i)=>{let s={cmd:"StartRecording",data:{room:this.roomNum}};this.socket.send(s),this.socket.addMessageHandler("StartRecording",r=>{let a=JSON.parse(r);a.cmd==="StartRecording"&&((a==null?void 0:a.data.code)=="200"?(this.emit("startRecording",a.data.result),t(a.data.result)):(this.emit("errorPush",{type:"startRecord",message:a.data.msg??"录制失败"}),i()))})})}stopRecord(){if(!this.roomNum){this.emit("errorPush",{type:"stopRecord",message:"请先加入房间"});return}return new Promise((t,i)=>{let s={cmd:"StopRecording",data:{room:this.roomNum}};this.socket.send(s),this.socket.addMessageHandler("StopRecording",r=>{var l;let a=JSON.parse(r);a.cmd==="StopRecording"&&((a==null?void 0:a.data.code)=="200"?(this.emit("stopRecording",a.data),t()):(this.emit("errorPush",{type:"stopRecord",message:((l=a.data)==null?void 0:l.msg)??"停止录制失败"}),i()))})})}pullStream(t,i){return new Promise((s,r)=>{i||r("streamIdentity不能为空");let a={cmd:"StartInputStream",data:{room:this.roomNum,identity:i,url:t}};this.socket.send(a),this.socket.addMessageHandler("StartInputStream",l=>{var u;let c=JSON.parse(l);c.cmd==="StartInputStream"&&((c==null?void 0:c.data.code)=="200"?(this.emit("startPulling",c.data.result),s(c.data.result)):(this.emit("errorPush",{type:"pullStream",message:((u=c.data)==null?void 0:u.msg)??"拉流失败"}),r()))})})}stopPullStream(){return new Promise((t,i)=>{let s={cmd:"StopInputStream",data:{room:this.roomNum,identity:"liuang3a5gdf"}};this.socket.send(s),this.socket.addMessageHandler("StopInputStream",r=>{var l;let a=JSON.parse(r);a.cmd==="StopInputStream"&&((a==null?void 0:a.data.code)=="200"?(this.emit("stopPulling",a.data),t()):(this.emit("errorPush",{type:"stopPullStream",message:((l=a.data)==null?void 0:l.msg)??"停止拉流失败"}),i()))})})}inviteThirdParty(t,i="1478649882954985474",s=""){return new Promise((r,a)=>{t||(this.emit("errorPush",{type:"inviteThirdParty",message:"被邀请人姓名不能为空"}),a());let l={cmd:"Invite",data:{room:this.roomNum,identity:this.userId,inviteOrg:i,inviteIdentity:t,metadata:s}};this.socket.addMessageHandler("inviteThirdParty",c=>{var d;let u=JSON.parse(c);u.cmd==="Invite"&&(((d=u.data)==null?void 0:d.code)==="200"?(this.emit("inviteThirdSuccess"),r()):(this.emit("inviteThirdFail"),a()))}),this.socket.send(l)})}acceptInvite(t,i,s){return new Promise((r,a)=>{(!t||!i||!s)&&(this.emit("errorPush",{type:"acceptInvite",message:"关键参数缺失"}),a());let l={cmd:"Accept",data:{room:t,identity:this.userId,toOrg:s,toIdentity:i}};this.socket.addMessageHandler("inviteAccept",c=>{var d;let u=JSON.parse(c);u.cmd==="Accept"&&(((d=u.data)==null?void 0:d.code)==="200"?(this.emit("acceptInviteSuccess"),r()):(this.emit("acceptInviteFail"),a()))}),this.socket.send(l)})}refuseInvite(t,i,s){return new Promise((r,a)=>{(!t||!i||!s)&&(this.emit("errorPush",{type:"refuseInvite",message:"关键参数缺失"}),a());let l={cmd:"Refuse",data:{room:t,identity:this.userId,toOrg:s,toIdentity:i}};this.socket.addMessageHandler("inviteRefuse",c=>{var d;let u=JSON.parse(c);u.cmd==="Refuse"&&(((d=u.data)==null?void 0:d.code)==="200"?(this.emit("refuseInviteSuccess"),r()):(this.emit("refuseInviteFail"),a()))}),this.socket.send(l)})}enterText(t){if(this.room&&this.room.localParticipant){const i=this.room.localParticipant,s=this.encoder.encode(t);i.publishData(s,It.RELIABLE)}else this.emit("errorPush",{type:"enterText",message:"请先加入房间"})}async leaveRoom(){if(this.room){await this.room.disconnect();const t=localStorage.getItem("token")||"",i=await fetch(this.baseUrlFy+`/api/smc/delScheduleConf?roomName=${this.roomNum}`,{method:"POST",headers:{satoken:t,"Content-type":"application/json;charset=utf-8"}});console.log(i,"res"),this.room=null}}deleteRoom(t){return new Promise((i,s)=>{const r={cmd:"DeleteRoom",data:{room:this.roomNum,identity:t}};this.socket.send(r),this.socket.addMessageHandler("DeleteRoom",a=>{const l=JSON.parse(a);l.cmd==="DeleteRoom"&&((l==null?void 0:l.data.code)=="200"?i():s(l==null?void 0:l.data.msg))})})}closeSocket(){this.socket.close()}async publishLocalParticipant(){const t=await ac({audio:!0,video:!0});this.room.localParticipant&&t.forEach(i=>{this.room.localParticipant.publishTrack(t)})}async changeAudioDevice(t){this.room&&await this.room.switchActiveDevice("audioinput",t)}async changeVideoDevice(t){if(this.room)try{let i=await this.room.switchActiveDevice("videoinput",t)}catch(i){throw new Error("sdkError",i)}}async changeOutputDevice(t){this.room&&await this.room.switchActiveDevice("audiooutput",t)}flipCamera(){var r,a,l;const t=(r=this.room)==null?void 0:r.localParticipant.getTrackPublication(Ae.Source.Camera);if(!t){this.emit("errorPush",{type:"flipCamera",message:"请先加入房间"});return}let s={facingMode:((a=t.videoTrack)==null?void 0:a.constraints).facingMode==="user"?"environment":"user"};return(l=t.videoTrack)==null||l.restartTrack(s),s.facingMode}async changeCameraStatus(){try{let t=this.room.localParticipant;const i=t.isCameraEnabled;console.log(`🔄 ${i?"关闭":"启动"}摄像头`),i?await t.setCameraEnabled(!1):await t.setCameraEnabled(!0),console.log(`✅ 摄像头${t.isCameraEnabled?"已启动":"已关闭"}`),this.emit("localCameraChange",t.isCameraEnabled)}catch{}}async changeMicrophoneStatus(){try{let t=this.room.localParticipant;const i=t.isMicrophoneEnabled;console.log(`🔄 ${i?"关闭":"启动"}麦克风`),i?await t.setMicrophoneEnabled(!1):await t.setMicrophoneEnabled(!0),console.log(`✅ 麦克风${t.isMicrophoneEnabled?"已启动":"已关闭"}`),this.emit("localMicrophoneChange",t.isMicrophoneEnabled)}catch{}}async changeScreenShareStatus(){try{let t=this.room.localParticipant;const i=t.isScreenShareEnabled;console.log(`🔄 ${i?"停止":"开始"}屏幕共享`),await t.setScreenShareEnabled(!i),console.log(`✅ 屏幕共享${t.isScreenShareEnabled?"已开始":"已停止"}`),this.emit("localScreenShareChange",t.isScreenShareEnabled)}catch{}}async changeParticipantMicrophoneStatus(t,i){if(!t){this.emit("errorPush",{type:"changeParticipantMicrophoneStatus",message:"请输入要查询的identity"});return}let s=this.room.getParticipantByIdentity(t);if(!s){this.emit("errorPush",{type:"changeParticipantMicrophoneStatus",message:"该参与者不存在"});return}if(s.isLocal)await s.setMicrophoneEnabled(!i),this.emit("localMicrophoneChange",this.room.localParticipant.isMicrophoneEnabled);else{let r=s.getTrackPublication(Ae.Source.Microphone),a=r?r.trackSid:void 0;if(i){const l={org:this.org,room:this.roomNum,input:"1",identity:t};a&&(l.trackId=a);let c={cmd:"Mute",data:l};const u="MuteMic_"+t,d=f=>{var T;let g=JSON.parse(f);g.cmd==="Mute"&&(this.socket.messageHandlers.delete(u),(g==null?void 0:g.data.code)=="200"?console.log("LiveClient - 静音命令执行成功"):this.emit("errorPush",{type:"changeParticipantMicrophoneStatus",message:((T=g.data)==null?void 0:T.msg)??"关闭指定参与者麦克风失败"}))};this.socket.addMessageHandler(u,d),this.socket.send(c)}else{const l={org:this.org,room:this.roomNum,input:"1",identity:t};a&&(l.trackId=a);let c={cmd:"UnMute",data:l};const u="UnMuteMic_"+t,d=f=>{var T,S;let g=JSON.parse(f);g.cmd==="UnMute"&&(this.socket.messageHandlers.delete(u),(g==null?void 0:g.data.code)=="200"?console.log("LiveClient - 取消静音命令执行成功"):(T=g.data)!=null&&T.msg&&this.emit("errorPush",{type:"changeParticipantMicrophoneStatus",message:((S=g.data)==null?void 0:S.msg)??"请求开启指定参与者麦克风失败"}))};this.socket.addMessageHandler(u,d),this.socket.send(c)}}}async changeParticipantCameraStatus(t,i){if(!t){this.emit("errorPush",{type:"changeParticipantCameraStatus",message:"请输入要查询的identity"});return}let s=this.room.getParticipantByIdentity(t);if(!s){this.emit("errorPush",{type:"changeParticipantCameraStatus",message:"该参与者不存在"});return}if(s.isLocal)await s.setCameraEnabled(!i),this.emit("localCameraChange",this.room.localParticipant.isCameraEnabled);else{let r=s.getTrackPublication(Ae.Source.Camera),a=r?r.trackSid:void 0;if(!a&&!i&&(await new Promise(l=>setTimeout(l,100)),r=s.getTrackPublication(Ae.Source.Camera),a=r?r.trackSid:void 0),!a){console.warn("trackId仍然不存在,跳过摄像头操作");return}if(i){let l={cmd:"Mute",data:{org:this.org,room:this.roomNum,identity:t,trackId:a,input:"2"}};const c="MuteCamera_"+t,u=d=>{var g,T;let f=JSON.parse(d);if(f.cmd==="Mute")if(this.socket.messageHandlers.delete(c),(f==null?void 0:f.data.code)=="200"){const S=this.room.getParticipantByIdentity(t);if(S){let m=S.getTrackPublication(Ae.Source.Camera);m&&(m.metadataMuted=!0,m.track&&m.track.setMuted(!0)),this.renderParticipant(S)}}else console.error("远程参与者摄像头关闭失败:",t,(g=f.data)==null?void 0:g.msg),this.emit("errorPush",{type:"changeParticipantCameraStatus",message:((T=f.data)==null?void 0:T.msg)??"关闭指定参与者摄像头失败"})};this.socket.addMessageHandler(c,u),this.socket.send(l)}else{let l={cmd:"UnMute",data:{org:this.org,room:this.roomNum,identity:t,trackId:a,input:"2"}};const c="UnMuteCamera_"+t,u=d=>{var g,T,S;let f=JSON.parse(d);if(f.cmd==="UnMute")if(this.socket.messageHandlers.delete(c),(f==null?void 0:f.data.code)=="200"){const m=this.room.getParticipantByIdentity(t);if(m){let _=m.getTrackPublication(Ae.Source.Camera);_&&(_.metadataMuted=!1,_.track&&_.track.setMuted(!1)),this.renderParticipant(m)}}else console.error("远程参与者摄像头开启失败:",t,(g=f.data)==null?void 0:g.msg),(T=f.data)!=null&&T.msg&&this.emit("errorPush",{type:"changeParticipantCameraStatus",message:((S=f.data)==null?void 0:S.msg)??"请求打开指定参与者摄像头失败"})};this.socket.addMessageHandler(c,u),this.socket.send(l)}}}startTrackAttach(t){const i={};i.name=t.name?t.name:t.identity,i.roomMode=this.roomMode,i.identity=t.identity,i.audioLevel=t.audioLevel,i.isSpeaking=t.isSpeaking,i.metadata=t.metadata,i.sid=t.sid,i.isLocal=t.isLocal,i.isMicrophoneEnabled=t.isMicrophoneEnabled;const s=t.getTrackPublication(Ae.Source.Camera),r=an(this,Kt,b0).call(this,t),a=t.getTrackPublication(Ae.Source.ScreenShare),l=a?a.videoTrack:null;l?(i.videoTrack=l,i.isScreenShareEnabled=!0):(i.videoTrack=s?s.videoTrack:void 0,i.isScreenShareEnabled=t.isScreenShareEnabled),i.audioTrack=r?r.audioTrack:void 0,this.roomMode==="auto"?(i.isCameraEnabled=t.isCameraEnabled,this.emit("trackAttach",i)):(i.isCameraEnabled=t.isCameraEnabled,this.emit("trackAttach",i))}renderParticipant(t,i=!1){this.roomMode==="auto"?this.renderToVideo(t,i):this.roomMode==="audio"&&this.renderToAudio(t,i)}renderToVideo(t,i){var F,L,$;let s={};const{name:r,identity:a,audioLevel:l,isSpeaking:c,metadata:u,sid:d,isCameraEnabled:f,isLocal:g,isMicrophoneEnabled:T,isScreenShareEnabled:S,connectionQuality:m}=t;s.remove=i,s.name=r||a,s.roomMode=this.roomMode,s.identity=a,s.audioLevel=l,s.isSpeaking=c,s.metadata=u,s.sid=d,s.isCameraEnabled=f,s.isLocal=g,s.isMicrophoneEnabled=T,s.connectionQuality=m;const _=t.getTrackPublication(Ae.Source.Camera),k=an(this,Kt,b0).call(this,t),R=t.getTrackPublication(Ae.Source.ScreenShare),D=R?R.videoTrack:null;D?(s.videoTrack=D,s.isScreenShareEnabled=!0):(s.videoTrack=_?_.videoTrack:void 0,s.isScreenShareEnabled=S),s.audioTrack=k?k.audioTrack:void 0,typeof localStorage<"u"&&localStorage.getItem("debugScreenShare")==="1"&&(((F=s.videoTrack)==null?void 0:F.source)??(($=(L=s.videoTrack)==null?void 0:L.mediaStreamTrack)!=null&&$.id)),this.emit("videoCallRender",s)}renderToAudio(t,i){let s={};const{name:r,identity:a,audioLevel:l,isSpeaking:c,metadata:u,sid:d,isLocal:f,isMicrophoneEnabled:g,connectionQuality:T}=t;s.remove=i,s.name=r||a,s.roomMode=this.roomMode,s.identity=a,s.audioLevel=l,s.isSpeaking=c,s.metadata=u,s.sid=d,s.isLocal=f,s.isMicrophoneEnabled=g,s.connectionQuality=T;const S=t.getTrackPublication(Ae.Source.Microphone);s.audioTrack=S?S.audioTrack:void 0,this.emit("audioCallRender",s)}updateVideoSize(t,i){i.innerHTML=`(${t.videoWidth}x${t.videoHeight})`}sendInviteNotice(t,i,s){return new Promise((r,a)=>{s||a("缺少roomNum参数"),fetch(this.baseUrl+"/api/v1/noticeMakeCall",{method:"POST",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify({name:t,dnis:i,room:s})}).then(l=>l.json()).then(l=>{(l==null?void 0:l.code)==200?r():a((l==null?void 0:l.msg)??"语音播报接口出错")}).catch(l=>{a(l)})})}}Mo=new WeakMap,Oo=new WeakMap,Lo=new WeakMap,Kt=new WeakSet,y1=function(){this.socket.addMessageHandler("ResUnMute",t=>{const i=JSON.parse(t);i.cmd==="ResUnMute"&&((i==null?void 0:i.data.code)=="200"?this.emit("requestDeviceOpen",i.data):this.emit("errorPush",{type:"requestDeviceOpen",message:(i==null?void 0:i.data.msg)??"更改用户设备失败"}))}),this.socket.addMessageHandler("Mute",t=>{var a,l,c,u,d;const i=JSON.parse(t),s=(a=i.data)==null?void 0:a.identity,r=(c=(l=this.room)==null?void 0:l.localParticipant)==null?void 0:c.identity;s&&r&&s===r&&(i.cmd==="Mute"&&((u=i.data)==null?void 0:u.input)==="1"?this.room&&this.room.localParticipant&&(this.room.localParticipant.setMicrophoneEnabled(!1),this.emit("localMicrophoneChange",!1)):i.cmd==="Mute"&&((d=i.data)==null?void 0:d.input)==="2"&&this.room&&this.room.localParticipant&&(this.room.localParticipant.setCameraEnabled(!1),this.emit("localCameraChange",!1)))}),this.socket.addMessageHandler("UnMute",t=>{var a,l,c,u,d;const i=JSON.parse(t),s=(a=i.data)==null?void 0:a.identity,r=(c=(l=this.room)==null?void 0:l.localParticipant)==null?void 0:c.identity;s&&r&&s===r&&(i.cmd==="UnMute"&&((u=i.data)==null?void 0:u.input)==="1"?this.room&&this.room.localParticipant&&(this.room.localParticipant.setMicrophoneEnabled(!0),this.emit("localMicrophoneChange",!0)):i.cmd==="UnMute"&&((d=i.data)==null?void 0:d.input)==="2"&&this.room&&this.room.localParticipant&&(this.room.localParticipant.setCameraEnabled(!0),this.emit("localCameraChange",!0)))}),this.socket.addMessageHandler("ResThirdInvite",t=>{var s;const i=JSON.parse(t);i.cmd==="ResInvite"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("receiveInviteSuccess",{roomNum:i.data.room,fromIdentity:i.data.fromIdentity,fromOrg:i.data.fromOrg,metadata:i.data.metadata})}),this.socket.addMessageHandler("ResAccept",t=>{var s;const i=JSON.parse(t);i.cmd==="ResAccept"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("receiveInviteAccept",{roomNum:i.data.room,fromIdentity:i.data.fromIdentity,fromOrg:i.data.fromOrg})}),this.socket.addMessageHandler("ResRefuse",t=>{var s;const i=JSON.parse(t);i.cmd==="ResRefuse"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("receiveInviteRefuse",{roomNum:i.data.room,fromIdentity:i.data.fromIdentity,fromOrg:i.data.fromOrg})}),this.socket.addMessageHandler("SendText",t=>{var s;const i=JSON.parse(t);i.cmd==="SendText"&&(((s=i.data)==null?void 0:s.code)=="200"?this.emit("sendTextSuccess",i.data.msg):this.emit("sendTextFailed",i.data.msg))}),this.socket.addMessageHandler("ResReceiveMsg",t=>{var s;const i=JSON.parse(t);i.cmd==="ResReceiveMsg"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("messageReceived",{origin:i==null?void 0:i.data.fromIdentity,content:i==null?void 0:i.data.text,fromName:i==null?void 0:i.data.fromName,fromOrg:i==null?void 0:i.data.fromOrg,room:i==null?void 0:i.data.room})}),this.socket.addMessageHandler("DebugAllMessages",t=>{try{const i=JSON.parse(t);i.cmd&&(i.cmd.includes("Camera")||i.cmd.includes("Video")||i.data&&(i.data.input==="2"||i.data.camera))}catch{console.log("[WebSocket] 消息解析失败:",t)}}),this.socket.addMessageHandler("ResAddHost",t=>{var s;const i=JSON.parse(t);i.cmd==="ResAddHost"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("setHostSuccess",{hostId:i==null?void 0:i.data.hostId,hostName:i==null?void 0:i.data.hostName})}),this.socket.addMessageHandler("ResAddCoHost",t=>{var s;const i=JSON.parse(t);i.cmd==="ResAddCoHost"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("addCoHostSuccess",{coHostId:i==null?void 0:i.data.coHostId,coHostName:i==null?void 0:i.data.coHostName})}),this.socket.addMessageHandler("ResRemoveCoHost",t=>{var s;const i=JSON.parse(t);i.cmd==="ResRemoveCoHost"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("removeCoHostSuccess",{coHostId:i==null?void 0:i.data.coHostId,coHostName:i==null?void 0:i.data.coHostName})}),this.socket.addMessageHandler("ResModifyPermission",t=>{var s,r,a;const i=JSON.parse(t);i.cmd==="ResModifyPermission"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("roomPermissionChange",{permission:(r=i.data)==null?void 0:r.permission,input:(a=i.data)==null?void 0:a.input})})},v0=function(t){if(!this.roomNum){this.emit("errorPush",{type:"getSdkCallNum",message:"请先加入房间"});return}const i={cmd:"SdkCall",data:{room:this.roomNum,sdkType:t}};this.socket.send(i)},v1=function(t){return document.getElementById(t)},b1=async function(){if(!Ki(this,Lo)||!this.baseUrl)return;let t;try{t=await(await fetch(this.baseUrl+"/api/v1/deleteDispatcher",{method:"POST",body:JSON.stringify({ruleId:Ki(this,Lo)})})).json(),t.code!==200&&this.emit("errorPush",{type:"dispatchInCall",message:"解除呼入绑定失败"})}catch{this.emit("errorPush",{type:"dispatchInCall",message:"解除呼入绑定失败"})}},T1=function(t,i="0"){if(!t){this.emit("errorPush",{type:"getToken",message:"未获取到房间号"});return}return new Promise((s,r)=>{const a={cmd:"GetToken",data:{org:this.org,room:t,identity:this.userId,origin:i}};this.socket.send(a),this.socket.addMessageHandler("GetToken",l=>{var u;let c=JSON.parse(l);c.cmd==="GetToken"&&((c==null?void 0:c.data.code)=="200"?s({roomUrl:c.data.url,token:c.data.token}):(this.emit("errorPush",{type:"getToken",message:((u=c.data)==null?void 0:u.msg)??"获取会议token失败"}),r()))})})},S1=function(){this.room.on(Oe.Connected,()=>{this.emit("roomConnected")}),this.room.on(Oe.Disconnected,async t=>{await an(this,Kt,C1).call(this),this.emit("roomDisconnected",t)}),this.room.on(Oe.ParticipantConnected,t=>{this.emit("participantConnected",t),an(this,Kt,_h).call(this,t)}),this.room.on(Oe.ParticipantDisconnected,t=>{this.emit("participantDisconnected",t),an(this,Kt,_1).call(this,t)}),this.room.on(Oe.ActiveDeviceChanged,(t,i)=>{this.emit("mediaDeviceChange",{kind:t,deviceId:i})}),this.room.on(Oe.ActiveSpeakersChanged,t=>{let i=[];i=t.map(s=>({identity:s.identity,isLocal:s.isLocal,audioLevel:s.audioLevel,name:s.name??s.identity})),this.emit("activeSpeakerChange",i)}),this.room.on(Oe.LocalTrackPublished,t=>{this.renderParticipant(this.room.localParticipant),this.startTrackAttach(this.room.localParticipant)}),this.room.on(Oe.LocalTrackUnpublished,()=>{this.renderParticipant(this.room.localParticipant),this.startTrackAttach(this.room.localParticipant)}),this.room.on(Oe.TrackPublished,(t,i)=>{this.renderParticipant(i),this.startTrackAttach(i)}),this.room.on(Oe.TrackUnpublished,(t,i)=>{this.renderParticipant(i),this.startTrackAttach(i)}),this.room.on(Oe.TrackSubscribed,(t,i,s)=>{this.renderParticipant(s),this.startTrackAttach(s)}),this.room.on(Oe.TrackUnsubscribed,(t,i,s)=>{this.renderParticipant(s),this.startTrackAttach(s)}),this.room.on(Oe.RoomMetadataChanged,t=>{this.emit("roomMetadataChanged",t)})},_h=function(t){t.on(ze.ParticipantMetadataChanged,()=>{this.renderParticipant(t)}),t.on(ze.TrackMuted,i=>{this.renderParticipant(t),this.startTrackAttach(t)}),t.on(ze.TrackUnmuted,i=>{this.renderParticipant(t),this.startTrackAttach(t)}),t.on(ze.IsSpeakingChanged,()=>{this.renderParticipant(t)}),t.on(ze.ConnectionQualityChanged,()=>{this.renderParticipant(t)}),t.on(ze.ParticipantNameChanged,i=>{this.renderParticipant(t)})},_1=function(t){this.renderParticipant(t,!0)},C1=async function(t){this.room&&(this.renderParticipant(this.room.localParticipant,!0),this.room.remoteParticipants.forEach(i=>{this.renderParticipant(i,!0)}),await an(this,Kt,b1).call(this))},b0=function(t){const i=t.getTrackPublication(Ae.Source.Microphone);if(i!=null&&i.audioTrack)return i;const s=t.getTrackPublication(Ae.Source.ScreenShareAudio);return s!=null&&s.audioTrack?s:i||s};const w5={class:"check-dialog-inner"},x5={class:"control-list",style:{border:"none"}},D5=["onClick"],A5={class:"control-list-item-value"},P5={class:"control-list"},I5=["onClick"],N5={class:"control-list-item-value"},R5={key:1,class:"control-list"},M5=["onClick"],O5={class:"control-list-item-value"},L5={key:2,class:"control-list"},B5=["onClick"],U5={class:"control-list-item-value"},oc=Ft({__name:"SelectDialog",props:{position:{type:Object,default:()=>({left:"0px",bottom:"40px"})},dialogType:{type:String,default:"audio"},otherOptionList:{type:Array,default:()=>[{label:"会议模式",value:"normal"},{label:"点调模式",value:"pointTurn"}]},audioDevices:{type:Array,default:()=>[]},outputDevices:{type:Array,default:()=>[]},videoDevices:{type:Array,default:()=>[]},activeDevice:{type:Object,default:()=>({})},currentRoomMode:{type:String,default:"normal"}},emits:["chooseAudioInputDevice","chooseAudioOutputDevice","chooseVideoDevice","chooseOtherItem","close"],setup(n,{emit:e}){const t=e;function i(l){t("chooseAudioInputDevice",l.value),t("close")}function s(l){t("chooseAudioOutputDevice",l.value),t("close")}function r(l){t("chooseVideoDevice",l.value),t("close")}function a(l){t("chooseOtherItem",l.value),t("close")}return(l,c)=>(o.openBlock(),o.createElementBlock("div",{class:"check-dialog",style:o.normalizeStyle(n.position)},[o.createElementVNode("div",w5,[n.dialogType==="audio"?(o.openBlock(),o.createElementBlock(o.Fragment,{key:0},[o.createElementVNode("div",x5,[c[0]||(c[0]=o.createElementVNode("div",{class:"control-list-title"},"麦克风",-1)),(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(n.audioDevices,u=>{var d,f,g,T;return o.openBlock(),o.createElementBlock("div",{class:o.normalizeClass(["control-list-item",{"control-list-item-checked":((d=n.activeDevice)==null?void 0:d.audioInputDevice)&&u.value==((f=n.activeDevice)==null?void 0:f.audioInputDevice)}]),key:u.value,onClick:S=>i(u)},[o.createElementVNode("div",A5,o.toDisplayString(u.label),1),o.createElementVNode("div",{class:o.normalizeClass(["check",{"is-checked":((g=n.activeDevice)==null?void 0:g.audioInputDevice)&&u.value==((T=n.activeDevice)==null?void 0:T.audioInputDevice)}])},null,2)],10,D5)}),128))]),o.createElementVNode("div",P5,[c[1]||(c[1]=o.createElementVNode("div",{class:"control-list-title"},"扬声器",-1)),(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(n.outputDevices,u=>{var d,f,g,T;return o.openBlock(),o.createElementBlock("div",{class:o.normalizeClass(["control-list-item",{"control-list-item-checked":((d=n.activeDevice)==null?void 0:d.audioOutputDevice)&&u.value==((f=n.activeDevice)==null?void 0:f.audioOutputDevice)}]),key:u.value,onClick:S=>s(u)},[o.createElementVNode("div",N5,o.toDisplayString(u.label),1),o.createElementVNode("div",{class:o.normalizeClass(["check",{"is-checked":((g=n.activeDevice)==null?void 0:g.audioOutputDevice)&&u.value==((T=n.activeDevice)==null?void 0:T.audioOutputDevice)}])},null,2)],10,I5)}),128))])],64)):n.dialogType==="video"?(o.openBlock(),o.createElementBlock("div",R5,[c[2]||(c[2]=o.createElementVNode("div",{class:"control-list-title"},"摄像头",-1)),(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(n.videoDevices,u=>{var d,f,g,T;return o.openBlock(),o.createElementBlock("div",{class:o.normalizeClass(["control-list-item",{"control-list-item-checked":((d=n.activeDevice)==null?void 0:d.videoDevice)&&u.value==((f=n.activeDevice)==null?void 0:f.videoDevice)}]),key:u.value,onClick:S=>r(u)},[o.createElementVNode("div",O5,o.toDisplayString(u.label),1),o.createElementVNode("div",{class:o.normalizeClass(["check",{"is-checked":((g=n.activeDevice)==null?void 0:g.videoDevice)&&u.value==((T=n.activeDevice)==null?void 0:T.videoDevice)}])},null,2)],10,M5)}),128))])):n.dialogType==="other"?(o.openBlock(),o.createElementBlock("div",L5,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(n.otherOptionList,u=>(o.openBlock(),o.createElementBlock("div",{class:o.normalizeClass(["control-list-item",{"control-list-item-checked":n.currentRoomMode===u.value}]),key:u.value,onClick:d=>a(u)},[o.createElementVNode("div",U5,o.toDisplayString(u.label),1),o.createElementVNode("div",{class:o.normalizeClass(["check",{"is-checked":n.currentRoomMode===u.value}])},null,2)],10,B5))),128))])):o.createCommentVNode("",!0)])],4))}},[["__scopeId","data-v-c12bddcb"]]),Ro="/assets/img/index/tx.png",Eg=new ki;function F5(){const n=o.ref(null),e=o.ref(null),t=o.ref(null),i=o.ref(!1),s=o.ref(0),r=u=>new Promise((d,f)=>{var g;(g=n.value)!=null&&g.setSinkId?n.value.setSinkId(u).then(d).catch(f):(Eg.message("error","当前浏览器不支持指定扬声器设备"),f())});return{startmicroVolumnCheck:async(u,d,f,g,T)=>{let S=u;if(n.value||(n.value=d||new AudioContext),!g){Eg.message("error","请先选择音频输出扬声器");return}r(g).then(async()=>{i.value=!0;const m={audio:f&&f!=="default"?{deviceId:f}:"default"};if(!S){const D=await navigator.mediaDevices.getUserMedia(m);S=n.value.createMediaStreamSource(D)}e.value=n.value.createAnalyser(),t.value=n.value.createGain(),t.value.gain.value=T,e.value.fftSize=32,S.connect(e.value),e.value.connect(t.value),t.value.connect(n.value.destination);const _=e.value.frequencyBinCount,k=new Uint8Array(_);function R(){e.value.getByteFrequencyData(k);let D=0;for(let F=0;F<_;F++)D+=k[F];s.value=Math.floor(D/_/255*100),i.value?requestAnimationFrame(R):s.value=0}R()}).catch(m=>{console.error(m),Eg.message("error",`设置${g}扬声器失败`)})},stopmicroVolumnCheck:()=>{var u,d;i.value=!1,(u=t.value)==null||u.disconnect(),(d=e.value)==null||d.disconnect()},setMicroOutputVolumn:u=>{i.value&&(t.value.gain.value=u)},isMicroDetectStart:i,microVolumn:s}}const V5="/assets/audio/moon_light.ogg",wg=new ki;function j5(){const n=o.ref(null),e=o.ref(!1),t=o.ref(null),i=o.ref(null),s=o.ref(0),r=u=>new Promise((d,f)=>{var g;(g=n.value)!=null&&g.setSinkId?n.value.setSinkId(u).then(d).catch(f):(wg.message("error","当前浏览器不支持指定扬声器设备"),f())});return{startOutputVolumeCheck:async(u,d,f="audio-detect-player",g,T)=>{let S=u;if(n.value||(n.value=d||new AudioContext),!g){wg.message("error","请先选择要检测的扬声器");return}r(g).then(()=>{if(e.value=!0,!S){let R=document.getElementById(f);R||(R=document.createElement("audio"),R.id=f,R.src=V5,R.autoplay=!0,document.body.appendChild(R),R.onloadeddata=function(){R.play()}),S=n.value.createMediaElementSource(R)}t.value=n.value.createAnalyser(),i.value=n.value.createGain(),i.value.gain.value=T,t.value.fftSize=32,S.connect(t.value),t.value.connect(i.value),i.value.connect(n.value.destination);const m=t.value.frequencyBinCount,_=new Uint8Array(m);function k(){t.value.getByteFrequencyData(_);let R=0;for(let D=0;D<m;D++)R+=_[D];s.value=Math.floor(R/m/255*100),e.value?requestAnimationFrame(k):s.value=0}k()}).catch(m=>{console.error(m),wg.message("error",`设置${g}扬声器失败`)})},stopOutputVolumeCheck:(u="audio-detect-player")=>{var f,g;const d=document.getElementById(u);d&&d.remove(),e.value=!1,(f=i.value)==null||f.disconnect(),(g=t.value)==null||g.disconnect()},setOutputVolumn:u=>{e.value&&(i.value.gain.value=u)},isOutputDetectStart:e,outputVolumn:s}}const q5={class:"addressbox"},$5={class:"CustomHeader"},H5={class:"tabs"},z5=["onClick"],G5={key:0,class:"setter-content"},W5={class:"setter-item",style:{"margin-bottom":"19px"}},K5={class:"setter-item-content"},Y5={class:"setter-item-tool"},X5={class:"setter-item-show"},J5={class:"setter-item-show-outter"},Q5={class:"setter-item-show-split-layer"},Z5={class:"setter-item-control"},eF={class:"setter-item"},tF={class:"setter-item-content"},iF={class:"setter-item-tool"},nF={class:"setter-item-show"},sF={class:"setter-item-show-outter"},rF={class:"setter-item-show-split-layer"},aF={class:"setter-item-control"},oF={key:1,class:"setter-content"},lF={class:"meeting-ordinary-setter"},cF={style:{display:"flex","align-items":"center",height:"32px",width:"100%"}},uF={key:0,style:{display:"flex","align-items":"center","margin-top":"10px"}},dF={key:1,style:{"margin-left":"5px"}},hF={key:2,class:"setter-content",style:{padding:"6px 12px 24px"}},fF={class:"camera-setter-foot"},QE="hx_device_setter_settings",xg=Ft({__name:"DeviceSetter",setup(n){const e=new ki,t=()=>{l.value=!1},i=o.ref(!1),s=()=>{i.value=!!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)},r=()=>{["fullscreenchange","webkitfullscreenchange","mozfullscreenchange","MSFullscreenChange"].forEach(H=>{document.addEventListener(H,s)})},a=()=>{["fullscreenchange","webkitfullscreenchange","mozfullscreenchange","MSFullscreenChange"].forEach(H=>{document.removeEventListener(H,s)})},l=o.ref(!1),c=o.ref(0),u=o.ref(""),d=o.ref("0%"),f=o.ref(100),g=o.ref(""),T=o.ref("0%"),S=o.ref(100),m=o.ref([]),_=o.ref(""),k=[{id:0,name:"音频设置"},{id:1,name:"视频设置"},{id:2,name:"通用设置"}],R=o.ref([]),D=o.ref([]),F=o.ref([]),L=o.ref(!1),$=o.ref(!1),U=o.ref(!1),O=o.ref(5),x=o.ref(5),A=[{value:5,label:"5秒"},{value:10,label:"10秒"},{value:15,label:"15秒"},{value:"custom",label:"自定义"}],M=async()=>{var P,H,ve;try{const{audioDevices:be,videoDevices:Me,outputDevices:Be}=await kg.getDeviceList(),et=Be&&((P=Be[0])!=null&&P.label)?Be[0].label:"扬声器",tt=be&&((H=be[0])!=null&&H.label)?be[0].label:"麦克风",ft=Me&&((ve=Me[0])!=null&&ve.label)?Me[0].label:"摄像头";D.value=[{label:`默认 - ${et}`,value:"default"}].concat(Be.map(we=>({label:we.label,value:we.deviceId}))),R.value=[{label:`默认 - ${tt}`,value:"default"}].concat(be.map(we=>({label:we.label,value:we.deviceId}))),F.value=[{label:`默认 - ${ft}`,value:"default"}].concat(Me.map(we=>({label:we.label,value:we.deviceId})))}catch(be){console.error(be)}};function V(){try{const P=localStorage.getItem(QE);if(!P)return;const H=JSON.parse(P);if(typeof H.isVoiceMotivationOpen=="boolean"&&(L.value=H.isVoiceMotivationOpen),typeof H.isAutoPolling=="boolean"&&($.value=H.isAutoPolling),typeof H.isAutoAnswer=="boolean"&&(U.value=H.isAutoAnswer),typeof H.pollingIntervalMs=="number"){const ve=H.pollingIntervalMs/1e3;O.value=ve,x.value=[5,10,15].includes(ve)?ve:"custom"}}catch(P){console.warn("loadPersistedSettings err",P)}}function G(){try{const P={isVoiceMotivationOpen:L.value,isAutoPolling:$.value,isAutoAnswer:U.value,pollingIntervalMs:(x.value==="custom"?O.value:x.value)*1e3};localStorage.setItem(QE,JSON.stringify(P))}catch(P){console.warn("persistSettings err",P)}}const ae=()=>{L.value=!L.value,Ze.emit("voiceMotivationChange",L.value)},se=()=>{U.value=!U.value,Ze.emit("autoAnswerChange",U.value)},oe=()=>{$.value=!$.value,Ze.emit("autoPollingToggle",$.value)},q=P=>{P!=="custom"&&(O.value=P,Ze.emit("pollingIntervalChange",P*1e3))},K=P=>{Ze.emit("pollingIntervalChange",Number(P)*1e3)},te=()=>{let P=parseInt(O.value);(isNaN(P)||P<5)&&(P=5),P>300&&(P=300),O.value=P,Ze.emit("pollingIntervalChange",P*1e3)},{microVolumn:ne,isMicroDetectStart:de,startmicroVolumnCheck:Ne,stopmicroVolumnCheck:Le,setMicroOutputVolumn:xe}=F5(),{outputVolumn:me,isOutputDetectStart:Ke,startOutputVolumeCheck:Je,stopOutputVolumeCheck:rt,setOutputVolumn:ht}=j5(),st=()=>{Ke.value&&rt(),de.value?Le():g.value?Ne(void 0,void 0,g.value,u.value,S.value/100):e.message("error","请先选择要检测的麦克风")},dt=()=>{de.value&&Le(),Ke.value?rt():Je(void 0,void 0,"audio-detect-player",u.value,f.value/100)};o.watch([L,$,U,x,O],()=>{G()});const ye=async()=>{try{let P=null;if(!_.value||_.value==="default"){P=await navigator.mediaDevices.getUserMedia({video:!0});const H=document.getElementById("camera-setter-video-ele");m.value=P.getTracks(),H&&(H.srcObject=P);return}try{P=await navigator.mediaDevices.getUserMedia({video:{deviceId:_.value}});const H=document.getElementById("camera-setter-video-ele");m.value=P.getTracks(),H&&(H.srcObject=P);return}catch(H){console.warn("指定视频设备启动失败,回退默认摄像头",H),P=await navigator.mediaDevices.getUserMedia({video:!0});const ve=document.getElementById("camera-setter-video-ele");m.value=P.getTracks(),ve&&(ve.srcObject=P);return}}catch(P){console.error("初始化视频流失败:",P);try{const H=await navigator.mediaDevices.getUserMedia({video:!0}),ve=document.getElementById("camera-setter-video-ele");m.value=H.getTracks(),ve&&(ve.srcObject=H)}catch(H){console.error("使用默认设备也失败:",H)}}},Ve=()=>{m.value.length>0&&m.value.forEach(P=>{P.stop()})},he=()=>{let P=document.querySelector("#camera-setter-video-ele");P&&(P.pause(),P.srcObject=null,P.src=""),Ve()};return Ze.on("getDeviceSetter",async P=>{var be,Me,Be;l.value=!0,c.value=P.type,await M(),V();const H=window.liveClient||{},ve=(P==null?void 0:P.tempActive)||(H==null?void 0:H.activeDevice)||{};if(u.value=(ve==null?void 0:ve.audioOutputDevice)||((be=H==null?void 0:H.activeDevice)==null?void 0:be.audioOutputDevice)||u.value||"default",g.value=(ve==null?void 0:ve.audioInputDevice)||((Me=H==null?void 0:H.activeDevice)==null?void 0:Me.audioInputDevice)||g.value||"default",_.value=(ve==null?void 0:ve.videoDevice)||((Be=H==null?void 0:H.activeDevice)==null?void 0:Be.videoInputDevice)||_.value||"default",_.value)try{if((await navigator.mediaDevices.enumerateDevices()).filter(we=>we.kind==="videoinput").some(we=>we.deviceId===_.value))ye();else{_.value="";try{await ye()}catch(we){console.warn("回退默认视频流失败",we)}}}catch{_.value=""}}),o.watch(()=>g.value,P=>{P&&g.value&&Le()}),o.watch(()=>S.value,P=>{xe(P/100)}),o.watch(()=>ne.value,P=>{T.value=P>50?"100%":(P/50).toFixed(2)*100+"%"}),o.watch(()=>f.value,P=>{ht(P/100)}),o.watch(()=>me.value,P=>{d.value=P>24?"100%":(P/24).toFixed(2)*100+"%"}),o.watch(()=>u.value,P=>{Ke.value&&rt()}),o.watch(()=>c.value,async()=>{if(de.value&&Le(),Ke.value&&rt(),he(),_.value)try{(await navigator.mediaDevices.enumerateDevices()).filter(be=>be.kind==="videoinput").some(be=>be.deviceId===_.value)?ye():_.value=""}catch{_.value=""}}),o.watch(()=>_.value,P=>{Ze.emit("setterVideoDeviceChange",P)}),o.watch(()=>l.value,async P=>{P||(await o.nextTick(),he())}),o.onMounted(()=>{s(),r()}),o.onUnmounted(()=>{a()}),(P,H)=>{const ve=o.resolveComponent("el-icon"),be=o.resolveComponent("el-option"),Me=o.resolveComponent("el-select"),Be=o.resolveComponent("el-slider"),et=o.resolveComponent("el-radio"),tt=o.resolveComponent("el-radio-group"),ft=o.resolveComponent("el-input"),we=o.resolveComponent("el-dialog");return o.openBlock(),o.createElementBlock("div",q5,[o.createVNode(we,{modelValue:l.value,"onUpdate:modelValue":H[8]||(H[8]=Ie=>l.value=Ie),"show-close":!1,class:"addresslogClass2",width:"588px","append-to-body":!i.value,style:{background:"#252e3d",height:"560px"}},{header:o.withCtx(()=>[o.createElementVNode("div",$5,[o.createElementVNode("div",H5,[(o.openBlock(),o.createElementBlock(o.Fragment,null,o.renderList(k,Ie=>o.createElementVNode("div",{key:Ie.id,class:o.normalizeClass(["tabItem",c.value==Ie.id?"activeBorder":""]),onClick:Vt=>c.value=Ie.id},o.toDisplayString(Ie.name),11,z5)),64))]),o.createElementVNode("div",{onClick:o.withModifiers(t,["stop"]),style:{cursor:"pointer",padding:"4px"}},[o.createVNode(ve,{size:24,style:{color:"#fff"}},{default:o.withCtx(()=>[o.createVNode(o.unref(Uh))]),_:1})])])]),default:o.withCtx(()=>[H[20]||(H[20]=o.createElementVNode("div",{class:"fgx"},null,-1)),c.value===0?(o.openBlock(),o.createElementBlock("div",G5,[o.createElementVNode("div",W5,[H[11]||(H[11]=o.createElementVNode("div",{class:"setter-item-title"},"扬声器",-1)),o.createElementVNode("div",K5,[o.createElementVNode("div",Y5,[o.createVNode(Me,{modelValue:u.value,"onUpdate:modelValue":H[0]||(H[0]=Ie=>u.value=Ie)},{default:o.withCtx(()=>[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(D.value,Ie=>(o.openBlock(),o.createBlock(be,{key:Ie.value,label:Ie.label,value:Ie.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),o.createElementVNode("div",{class:"detect-btn",onClick:dt},o.toDisplayString(o.unref(Ke)?"停止监测":"扬声器监测"),1)]),o.createElementVNode("div",X5,[H[9]||(H[9]=o.createElementVNode("div",{class:"setter-item-show-title"},[o.createElementVNode("span",null,"输出等级"),o.createElementVNode("img",{class:"icon",src:Ro,alt:""})],-1)),o.createElementVNode("div",J5,[o.createElementVNode("div",Q5,[(o.openBlock(),o.createElementBlock(o.Fragment,null,o.renderList(9,Ie=>o.createElementVNode("div",{class:"setter-item-show-split",key:Ie})),64))]),o.createElementVNode("div",{class:"setter-item-show-inner",style:o.normalizeStyle({width:d.value})},null,4)])]),o.createElementVNode("div",Z5,[H[10]||(H[10]=o.createElementVNode("div",{class:"setter-item-show-title"},[o.createElementVNode("span",null,"输出等级"),o.createElementVNode("img",{class:"icon",src:Ro,alt:""})],-1)),o.createVNode(Be,{modelValue:f.value,"onUpdate:modelValue":H[1]||(H[1]=Ie=>f.value=Ie)},null,8,["modelValue"])])])]),o.createElementVNode("div",eF,[H[14]||(H[14]=o.createElementVNode("div",{class:"setter-item-title"},"麦克风",-1)),o.createElementVNode("div",tF,[o.createElementVNode("div",iF,[o.createVNode(Me,{modelValue:g.value,"onUpdate:modelValue":H[2]||(H[2]=Ie=>g.value=Ie)},{default:o.withCtx(()=>[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(R.value,Ie=>(o.openBlock(),o.createBlock(be,{key:Ie.value,label:Ie.label,value:Ie.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),o.createElementVNode("div",{class:"detect-btn",onClick:st},o.toDisplayString(o.unref(de)?"停止监测":"开始监测"),1)]),o.createElementVNode("div",nF,[H[12]||(H[12]=o.createElementVNode("div",{class:"setter-item-show-title"},[o.createElementVNode("span",null,"输出等级"),o.createElementVNode("img",{class:"icon",src:Ro,alt:""})],-1)),o.createElementVNode("div",sF,[o.createElementVNode("div",rF,[(o.openBlock(),o.createElementBlock(o.Fragment,null,o.renderList(9,Ie=>o.createElementVNode("div",{class:"setter-item-show-split",key:Ie})),64))]),o.createElementVNode("div",{class:"setter-item-show-inner",style:o.normalizeStyle({width:T.value})},null,4)])]),o.createElementVNode("div",aF,[H[13]||(H[13]=o.createElementVNode("div",{class:"setter-item-show-title"},[o.createElementVNode("span",null,"输出等级"),o.createElementVNode("img",{class:"icon",src:Ro,alt:""})],-1)),o.createVNode(Be,{modelValue:S.value,"onUpdate:modelValue":H[3]||(H[3]=Ie=>S.value=Ie)},null,8,["modelValue"])])])])])):c.value===2?(o.openBlock(),o.createElementBlock("div",oF,[o.createElementVNode("div",lF,[o.createElementVNode("div",{class:o.normalizeClass(["meeting-ordinary-setter-item",{"meeting-ordinary-setter-item-checked":L.value}]),onClick:ae},[...H[15]||(H[15]=[o.createElementVNode("div",{class:"meeting-ordinary-setter-item-check"},null,-1),o.createElementVNode("span",{class:"meeting-ordinary-setter-item-name"},"语音激励",-1)])],2),o.createElementVNode("div",{class:o.normalizeClass(["meeting-ordinary-setter-item",{"meeting-ordinary-setter-item-checked":U.value}]),onClick:se},[...H[16]||(H[16]=[o.createElementVNode("div",{class:"meeting-ordinary-setter-item-check"},null,-1),o.createElementVNode("span",{class:"meeting-ordinary-setter-item-name"},"自动接听",-1)])],2),o.createElementVNode("div",{class:o.normalizeClass(["meeting-ordinary-setter-item",{"meeting-ordinary-setter-item-checked":$.value}]),style:{"flex-direction":"column","align-items":"start",height:"auto"},onClick:H[6]||(H[6]=o.withModifiers(()=>{},["stop"]))},[o.createElementVNode("div",cF,[o.createElementVNode("div",{class:"meeting-ordinary-setter-item-check",onClick:o.withModifiers(oe,["stop"])}),H[17]||(H[17]=o.createElementVNode("span",{class:"meeting-ordinary-setter-item-name"},"画面轮询",-1))]),$.value?(o.openBlock(),o.createElementBlock("div",uF,[H[18]||(H[18]=o.createElementVNode("span",{style:{"white-space":"nowrap","margin-right":"15px"}},"轮询间隔:",-1)),o.createVNode(tt,{modelValue:x.value,"onUpdate:modelValue":H[4]||(H[4]=Ie=>x.value=Ie),onChange:q},{default:o.withCtx(()=>[(o.openBlock(),o.createElementBlock(o.Fragment,null,o.renderList(A,Ie=>o.createVNode(et,{key:Ie.value,value:Ie.value},{default:o.withCtx(()=>[o.createTextVNode(o.toDisplayString(Ie.label),1)]),_:2},1032,["value"])),64))]),_:1},8,["modelValue"]),x.value==="custom"?(o.openBlock(),o.createBlock(ft,{key:0,modelValue:O.value,"onUpdate:modelValue":H[5]||(H[5]=Ie=>O.value=Ie),type:"number",min:5,max:300,style:{width:"80px","margin-left":"10px"},onChange:K,onBlur:te},null,8,["modelValue"])):o.createCommentVNode("",!0),x.value==="custom"?(o.openBlock(),o.createElementBlock("span",dF,"秒")):o.createCommentVNode("",!0)])):o.createCommentVNode("",!0)],2)])])):c.value===1?(o.openBlock(),o.createElementBlock("div",hF,[H[19]||(H[19]=o.createElementVNode("div",{class:"camera-setter"},[o.createElementVNode("video",{id:"camera-setter-video-ele",class:"camera-setter-video",muted:"",autoplay:""})],-1)),o.createElementVNode("div",fF,[o.createVNode(Me,{style:{width:"100%"},modelValue:_.value,"onUpdate:modelValue":H[7]||(H[7]=Ie=>_.value=Ie)},{default:o.withCtx(()=>[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(F.value,Ie=>(o.openBlock(),o.createBlock(be,{key:Ie.value,label:Ie.label,value:Ie.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])])):o.createCommentVNode("",!0)]),_:1},8,["modelValue","append-to-body"])])}}},[["__scopeId","data-v-d605daab"]]),pF={class:"dialog"},mF={class:"dialog-head"},gF={class:"dialog-contain"},yF={class:"video-contain"},vF={id:"video-ele",class:"video-ele",muted:"",autoplay:""},bF={class:"tool-bar"},TF={class:"tool-bar-group"},SF={class:"imgsf"},_F={class:"imgsf"},CF={class:"imgsf"},ZE=Ft({__name:"MeetingReadyDialog",props:{dialogType:{type:String,default:"launch"},tempRoomNum:{type:String,default:""},meetingTitle:{type:String,default:"调度会议"}},emits:["close","launchMeeting","joinMeeting"],setup(n,{emit:e}){const t=new ki,i=e,s=n,r=o.ref(""),a=o.ref(""),l=o.ref(!0),c=o.ref(!0),u=o.ref(null),d=o.ref(!1),f=o.ref(!1),g=o.ref([]),T=o.ref(!1),S=o.ref([]),m=o.ref([]),_=o.ref([]),k=o.reactive({audioInputDevice:"",audioOutputDevice:"",videoDevice:""}),R=o.ref(!1);o.watch(()=>l.value,async q=>{let K=null;q?K={audio:k!=null&&k.audioInputDevice?{deviceId:k.audioInputDevice}:!0,video:k!=null&&k.videoDevice?{deviceId:k.videoDevice}:{facingMode:u}}:K={audio:k!=null&&k.audioInputDevice?{deviceId:k.audioInputDevice}:!0,video:!1},await x(K)});function D(){if(r.value==""){t.message("error","会议名称不能为空");return}else if(r.value.length>10){t.message("error","会议名称不能超过10个字符");return}i("launchMeeting",{roomName:r.value,cameraStatus:l.value,microphoneStatus:c.value,audioInputDevice:k.audioInputDevice,audioOutputDevice:k.audioOutputDevice,videoDevice:k.videoDevice}),i("close")}function F(){if(a.value==""){t.message("error","会议名称不能为空");return}i("joinMeeting",{roomNum:a.value,cameraStatus:l.value,microphoneStatus:c.value,audioInputDevice:k.audioInputDevice,audioOutputDevice:k.audioOutputDevice,videoDevice:k.videoDevice}),i("close")}async function L(){try{if(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices){console.warn("浏览器不支持 enumerateDevices 或 mediaDevices 为 undefined"),t.message("warning","浏览器不支持设备枚举或未授权访问,请检查浏览器或使用兼容的浏览器"),S.value=[],_.value=[],m.value=[];return}const{audioDevices:q,videoDevices:K,outputDevices:te}=await kg.getDeviceList();S.value=q.map(ne=>({label:ne.label,value:ne.deviceId})),_.value=K.map(ne=>({label:ne.label,value:ne.deviceId})),m.value=te.map(ne=>({label:ne.label,value:ne.deviceId}))}catch(q){console.error(q),t.message("error","获取设备列表失败")}}function $(){c.value=!c.value}function U(){l.value=!l.value}function O(){g.value.length>0&&g.value.forEach(q=>{q.stop()})}async function x(q){try{if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)throw new Error("当前环境不支持媒体设备访问 (getUserMedia 不可用)");const K=await navigator.mediaDevices.getUserMedia(q);let te=document.querySelector("#video-ele");te&&(te.srcObject=K,O(),g.value=K.getTracks(),te.onloadedmetadata=function(ne){te.play()})}catch(K){throw new Error(K)}}function A(){let q=document.querySelector("#video-ele");q&&(q.pause(),q.srcObject=null,q.src=""),O()}async function M(){u.value="user";const q={audio:c.value,video:l.value?{facingMode:u.value}:l.value};if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia){console.warn("跳过视频流初始化:getUserMedia 不可用");return}await x(q)}async function V(q){if(q&&q!==(k==null?void 0:k.audioInputDevice)){if(k.audioInputDevice=q,!c.value)return;try{const K=await navigator.mediaDevices.getUserMedia({audio:{deviceId:q}}),te=document.querySelector("#video-ele"),ne=te==null?void 0:te.srcObject;if(ne&&te)ne.getAudioTracks().forEach(Le=>Le.stop()),K.getAudioTracks().forEach(Le=>{ne.addTrack(Le)}),g.value=ne.getTracks(),te.srcObject=ne;else{let de={audio:c.value?{deviceId:q}:!0,video:l.value?k!=null&&k.videoDevice?{deviceId:k.videoDevice}:{facingMode:u.value}:l.value};const Ne=await navigator.mediaDevices.getUserMedia(de);let Le=document.querySelector("#video-ele");Le&&(Le.srcObject=Ne,g.value=Ne.getTracks())}K.getTracks().forEach(de=>de.stop())}catch(K){console.error("切换音频设备失败:",K);let te={audio:c.value?{deviceId:q}:!0,video:l.value?k!=null&&k.videoDevice?{deviceId:k.videoDevice}:{facingMode:u.value}:l.value};const ne=await navigator.mediaDevices.getUserMedia(te);let de=document.querySelector("#video-ele");de&&(de.srcObject=ne,g.value=ne.getTracks())}}}function G(q){q&&q!==k.audioOutputDevice&&(k.audioOutputDevice=q)}async function ae(q){if(q&&q!==k.videoDevice){k.videoDevice=q;let K={audio:k!=null&&k.audioInputDevice?{deviceId:k.audioInputDevice}:!0,video:l.value?{deviceId:q}:l.value};await x(K)}}async function se(){T.value=!T.value,await o.nextTick();let q=document.getElementById("video-ele");q&&(T.value?q.style.transform="rotateY(180deg)":q.style.transform="rotateY(0deg)")}o.onMounted(async()=>{await L(),await M(),s.dialogType==="join"&&(a.value=s.tempRoomNum),r.value=s.meetingTitle}),o.onBeforeUnmount(()=>{A()});async function oe(){R.value||(R.value=!0,await o.nextTick()),Ze.emit("getDeviceSetter",{type:0,tempActive:k})}return(q,K)=>{const te=o.resolveComponent("el-input");return o.openBlock(),o.createElementBlock("div",{class:"mask",onClick:K[7]||(K[7]=o.withModifiers(ne=>i("close"),["self"]))},[o.createElementVNode("div",pF,[o.createElementVNode("div",mF,[n.dialogType==="launch"?(o.openBlock(),o.createBlock(te,{key:0,class:"search-input",modelValue:r.value,"onUpdate:modelValue":K[0]||(K[0]=ne=>r.value=ne),placeholder:"请输入会议名称"},null,8,["modelValue"])):(o.openBlock(),o.createBlock(te,{key:1,class:"search-input",modelValue:a.value,"onUpdate:modelValue":K[1]||(K[1]=ne=>a.value=ne),placeholder:"请输入会议ID"},null,8,["modelValue"])),o.createElementVNode("div",{class:"close-icon",onClick:K[2]||(K[2]=ne=>i("close"))})]),o.createElementVNode("div",gF,[o.createElementVNode("div",yF,[K[9]||(K[9]=o.createElementVNode("div",{class:"avatar"},null,-1)),o.withDirectives(o.createElementVNode("video",vF,null,512),[[o.vShow,l.value]]),o.createElementVNode("div",{class:"mirror-switch",onClick:se},[...K[8]||(K[8]=[o.createElementVNode("img",{class:"mirror-switch-icon",src:U4},null,-1),o.createElementVNode("span",null,"镜像",-1)])])]),o.createElementVNode("div",bF,[o.createElementVNode("div",TF,[o.createElementVNode("div",SF,[o.createElementVNode("div",{class:o.normalizeClass(["img-icon",c.value?"img-icon-mic-on":"img-icon-mic-off"]),onClick:$},null,2),K[11]||(K[11]=o.createElementVNode("div",{class:"xian"},null,-1)),o.createElementVNode("div",{style:{width:"20px",height:"20px",display:"flex","align-items":"center","justify-content":"center"},onClick:K[3]||(K[3]=ne=>d.value=!d.value)},[...K[10]||(K[10]=[o.createElementVNode("img",{src:uC,alt:""},null,-1)])]),d.value?(o.openBlock(),o.createBlock(oc,{key:0,dialogType:"audio",audioDevices:S.value,outputDevices:m.value,activeDevice:k,onClose:K[4]||(K[4]=ne=>d.value=!1),onChooseAudioInputDevice:V,onChooseAudioOutputDevice:G},null,8,["audioDevices","outputDevices","activeDevice"])):o.createCommentVNode("",!0)]),o.createElementVNode("div",_F,[o.createElementVNode("div",{class:o.normalizeClass(["img-icon",l.value?"img-icon-cam-on":"img-icon-cam-off"]),onClick:U},null,2),K[13]||(K[13]=o.createElementVNode("div",{class:"xian"},null,-1)),o.createElementVNode("div",{style:{width:"20px",height:"20px",display:"flex","justify-content":"center","align-items":"center"},onClick:K[5]||(K[5]=ne=>f.value=!f.value)},[...K[12]||(K[12]=[o.createElementVNode("img",{src:uC,alt:""},null,-1)])]),f.value?(o.openBlock(),o.createBlock(oc,{key:0,dialogType:"video",videoDevices:_.value,activeDevice:k,onClose:K[6]||(K[6]=ne=>f.value=!1),onChooseVideoDevice:ae},null,8,["videoDevices","activeDevice"])):o.createCommentVNode("",!0)]),o.createElementVNode("div",CF,[o.createElementVNode("img",{src:dC,alt:"",onClick:oe,class:"set"}),R.value?(o.openBlock(),o.createBlock(xg,{key:0,tempActiveDevice:k},null,8,["tempActiveDevice"])):o.createCommentVNode("",!0)])]),n.dialogType==="launch"?(o.openBlock(),o.createElementBlock("div",{key:0,class:"tool-bar-btn",onClick:D}," 发起会议 ")):(o.openBlock(),o.createElementBlock("div",{key:1,class:"tool-bar-btn",onClick:F},"加入会议"))])])])])}}},[["__scopeId","data-v-c50f10e9"]]),e1="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAUCAYAAABiS3YzAAAAAXNSR0IArs4c6QAAAqBJREFUOE+lU0FoE0EUfX+TaFrjwZKDBxXMqZBDxVu9tEgVsYqCGujBg6dCS5VikaCklCCKYlEsVkF62ChSNiii5lKkQQXFU/FUsFLSi1KMklJEaZr5dnZ3NrPNBg/OZXZmZ968/977BG2MFTm88AUjYJwAIaL/AwMgd4eRMQilGuN8lZHO99OKflYds/f6HnIfCVxU9+UsB9XBJDYbhFGjilItgkcQWIbA0JMBWlTAftAHbAlGwscwYBEOIUNVLFQNTNuPAqv4g3PTw1Ry1/VbqUm2gH+DgvHKGqSxM5M8bgAxiSCAQn6AXjSAnr5XB9UqdiQAbFntiUFCIB3aiWI+RbXNxfjKPzXBFuvlGwAxmMmzyH9fADA888xnQzTRwPTkXbaIkbCNUtQIYHbWcg4cZLPPPb8QBHqHLZCjaU8S8R0tiCiOzM4XSQB3fFxEZamM3+6+GQh6/Laj6e42RPu7Ofl9tc5L10lFblcb8eWnmFtbtx8yXw4HMO0dZ2ujjEQsitBgD9q3hjnqwWpOqeyWyvQj9x4ldrQ1C0GgR29tipS/i2RslC9SjDp5BhMhVxgJYHrkJlus5dQXDc04O1fSPG+y42bOXAoAPXzDKV/S2b8H8W1RRGQmocxR3+78+RsqyyuOUVLTmXQA6KHrbDFhbzyGlt4OJH+tuYnX9JTuqyRsb4V4/A6f1gUEC5ivrwSAHrzmMI1GEDq2D+1bIogqEIMAoeVUvvO1gnJxHktun5mzQaDdV9naEDwhHfE8Uh2jd4/b7E7PAiQ7T8CczQQw7cryFIAOFaNmXaT2fSkjTL3J0P2GNu3Kcqdg2P3bMCSC0EzbdIAMnH2bofkGULlxIMudIYEUA61NOt3TRmpsEH7WDFgfRmnOq7Dpxf/48RdZkAok9Jke3QAAAABJRU5ErkJggg==",kF="data:image/png;base64,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",EF={class:"custom-video-player"},wF=["id","controls","data-setup","width","height"],xF=["src","type"],DF={key:0,class:"error-overlay"},AF={class:"error-message"},PF={class:"error-detail"},IF={key:1,class:"loading-overlay"},NF=Ft({__name:"CustomVideoPlayer",props:{videoUrl:{type:String,default:""},controls:{type:Boolean,default:!0},showCustomButton:{type:Boolean,default:!1},hideSnapshotButton:{type:Boolean,default:!1},live:{type:Boolean,default:!1},hasvideo:{type:Boolean,default:!0},width:{type:[String,Number],default:"100%"},height:{type:[String,Number],default:"auto"},lang:{type:String,default:"zh-CN"}},emits:["closeVideo","play","pause","ended","error","loadeddata"],setup(n,{expose:e,emit:t}){const i=n,s=t;e({pause:()=>{a.value&&a.value.pause()},play:()=>{a.value&&a.value.play()},dispose:()=>{a.value&&(a.value.dispose(),a.value=null)}});const r=o.ref(null),a=o.ref(null),l=o.ref(`video-player-${Date.now()}`),c=o.ref(!1),u=o.ref(""),d=o.ref(!1),f=JSON.stringify({fluid:!0,responsive:!0,playbackRates:[.5,1,1.25,1.5,2],language:i.lang,techOrder:["html5"],html5:{vhs:{overrideNative:!0}}}),g=L=>{if(!L)return"video/mp4";const $=L.split(".").pop().toLowerCase();return{mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",mov:"video/quicktime",avi:"video/x-msvideo",m3u8:"application/x-mpegURL",flv:"video/x-flv"}[$]||"video/mp4"},T=async()=>{if(!(!r.value||!i.videoUrl))try{d.value=!0,c.value=!1,a.value&&(a.value.dispose(),a.value=null),await o.nextTick(),a.value=fe(r.value,{controls:i.controls,fluid:!0,responsive:!0,playbackRates:[.5,1,1.25,1.5,2],language:i.lang,techOrder:["html5"],sources:[{src:i.videoUrl,type:g(i.videoUrl)}],html5:{vhs:{overrideNative:!0}}}),a.value.ready(()=>{d.value=!1}),a.value.on("error",L=>{console.error("Video.js error:",L),S(L)}),a.value.on("play",()=>{s("play")}),a.value.on("pause",()=>{s("pause")}),a.value.on("ended",()=>{s("ended")}),a.value.on("loadeddata",()=>{s("loadeddata"),d.value=!1})}catch(L){console.error("Failed to initialize player:",L),S(L)}},S=L=>{c.value=!0,d.value=!1,u.value=(L==null?void 0:L.message)||"视频加载失败,请检查视频地址是否正确",s("error",L),kn.error("视频加载失败")},m=()=>{d.value=!0,c.value=!1},_=()=>{d.value=!1,s("loadeddata")},k=()=>{s("play")},R=()=>{s("pause")},D=()=>{s("ended")},F=()=>{c.value=!1,u.value="",T()};return o.watch(()=>i.videoUrl,L=>{L&&T()},{immediate:!0}),o.onMounted(()=>{i.videoUrl&&T()}),o.onUnmounted(()=>{a.value&&(a.value.dispose(),a.value=null)}),(L,$)=>(o.openBlock(),o.createElementBlock("div",EF,[o.createElementVNode("div",{class:o.normalizeClass(["video-container",{"has-error":c.value}])},[o.createElementVNode("video",{ref_key:"videoElement",ref:r,id:l.value,class:"video-js vjs-default-skin",controls:n.controls,"data-setup":o.unref(f),width:n.width,height:n.height,preload:"metadata",onError:S,onLoadstart:m,onLoadeddata:_,onPlay:k,onPause:R,onEnded:D},[o.createElementVNode("source",{src:n.videoUrl,type:g(n.videoUrl)},null,8,xF),$[0]||($[0]=o.createElementVNode("p",{class:"vjs-no-js"},[o.createTextVNode(" To view this video please enable JavaScript, and consider upgrading to a "),o.createElementVNode("a",{href:"https://videojs.com/html5-video-support/",target:"_blank"},[o.createTextVNode(" web browser that "),o.createElementVNode("span",null,"supports HTML5 video")])],-1))],40,wF),c.value?(o.openBlock(),o.createElementBlock("div",DF,[o.createElementVNode("div",AF,[$[2]||($[2]=o.createElementVNode("i",{class:"el-icon-warning"},null,-1)),$[3]||($[3]=o.createElementVNode("p",null,"视频加载失败",-1)),o.createElementVNode("p",PF,o.toDisplayString(u.value),1),o.createVNode(o.unref(zy),{onClick:F,size:"small",type:"primary"},{default:o.withCtx(()=>[...$[1]||($[1]=[o.createTextVNode("重试",-1)])]),_:1})])])):o.createCommentVNode("",!0),d.value?(o.openBlock(),o.createElementBlock("div",IF,[...$[4]||($[4]=[o.createElementVNode("div",{class:"loading-spinner"},[o.createElementVNode("i",{class:"el-icon-loading"}),o.createElementVNode("p",null,"视频加载中...")],-1)])])):o.createCommentVNode("",!0)],2)]))}},[["__scopeId","data-v-130b6096"]]),RF=(n={},{baseUrl:e,token:t}={})=>Tt.post("/api/conferenceRecord/getConferenceRecordByPage",n,{baseURL:e,headers:{satoken:t}}),MF=(n={},{baseUrl:e,token:t}={})=>Tt.post("/api/conferenceRecord/deleteConferenceRecord",n,{baseURL:e,headers:{satoken:t}}),OF=(n={},{baseUrl:e,token:t}={})=>Tt.post("/api/conferenceRecord/updateConferenceRecord",n,{baseURL:e,headers:{satoken:t}}),LF=(n="",{baseUrl:e,token:t}={})=>Tt.post(`/api/asr/getMessageByBytes?fileUrl=${n}`,null,{baseURL:e,headers:{satoken:t}}),ha=(n={},{baseUrl:e,token:t}={})=>Tt.post("/api/v1/displayUsers",n,{baseURL:e,headers:{satoken:t}}),xs=(n={},{baseUrl:e,token:t}={})=>Tt.post("api/v1/muteParticipant",n,{baseURL:e,headers:{satoken:t}}),BF=(n={},{baseUrl:e,token:t}={})=>Tt.post("/api/ddhy/sendMsg",n,{baseURL:e,headers:{satoken:t}}),UF=(n={},{baseUrl:e,token:t}={})=>Tt.get("/api/ddhy/getMsg",{params:n,baseURL:e,headers:{satoken:t}}),FF=(n="",e={},{baseUrl:t,token:i}={})=>Tt.post(`/api/conferenceRoom/addConferenceMeetingByRoomName?roomName=${n}`,e,{baseURL:t,headers:{satoken:i}}),VF={class:"manage-container"},jF={class:"main-box"},qF={class:"main-top-box"},$F={class:"searchArea"},HF={class:"main-list-box"},zF={class:"video-header"},GF={class:"video-title"},WF={class:"el-dialog__title"},KF={class:"video-close"},YF={class:"video-dialog-body"},XF={class:"video-player-box"},JF={key:0,class:"video-transcribe-box"},QF={key:1,class:"video-transcribe-box"},ZF={class:"transcribe-content"},eV={class:"message-list"},tV={style:{width:"100%",display:"flex","align-items":"center","justify-content":"center"}},iV=Ft({__name:"HistoryVideoDialog",props:{baseUrl:{type:String,default:""},token:{type:String,default:""}},setup(n){const e=n;o.ref("0");const t=o.ref(0),i=o.ref(1),s=o.ref(10),r=o.ref([]),a=o.reactive({fileName:"",ownerName:"",createdAt:[],roomMode:"0"}),l=o.ref([]),c=o.ref(!1),u=o.ref(""),d=o.ref("http://10.227.1.34:18080/mp3"),f=o.ref("http://10.227.1.31:7101/recordings"),g=o.ref(""),T=o.ref(!1),S=o.reactive({}),m=o.reactive({fileName:[{required:!0,message:"请输入文件名称",trigger:"blur"}]});o.ref("");const _=o.ref(!0),k=o.ref(""),R=o.ref(""),D=o.ref(!1),F=o.ref(null),L=o.ref(null),$=async()=>{let xe="",me="";if(a.createdAt[0]){let Je=new Date(a.createdAt[0]);Je.setUTCHours(Je.getUTCHours()+8),xe=Je.toISOString().replace(/T/," ").replace(/\..+/,"")}if(a.createdAt[1]){let Je=new Date(a.createdAt[1]);Je.setUTCHours(Je.getUTCHours()+8),me=Je.toISOString().replace(/T/," ").replace(/\..+/,"")}let Ke={fileName:a.fileName,ownerName:a.ownerName,roomMode:a.roomMode,start:xe,end:me,page:{current:i.value,size:s.value}};try{const Je=await RF(Ke,{baseUrl:e.baseUrl,token:e.token});Je.status==200?(l.value=Je.data?Je.data.data:[],t.value=Je.data?Je.data.recordsTotal:0):(l.value=[],t.value=0)}catch(Je){l.value=[],t.value=0,console.log(Je)}},U=()=>{a.fileName="",a.ownerName="",a.createdAt=[],t.value=0,i.value=1,s.value=10,r.value=[],$()},O=xe=>{r.value=xe},x=async xe=>{try{await ef.confirm("确定删除这条录像文件?","警告",{type:"warning"});const me={id:xe.id},Ke=await MF(me,{baseUrl:e.baseUrl,token:e.token});Ke.data.code===0?(kn.success("删除成功"),$()):kn.error(Ke.data.msg)}catch(me){me==="cancel"?kn.info("已取消删除"):console.error("删除失败:",me)}},A=async xe=>{c.value=!0,u.value=f.value+xe.filePath,g.value=xe.fileName||"夏小明的直播间",_.value=!0;try{let me=d.value+xe.filePath.replace(/4$/,"3");const Ke=await LF(me,{baseUrl:e.baseUrl,token:e.token});Ke.data&&Ke.data.code==0?k.value=Ke.data.msg:k.value=""}catch(me){console.log(me)}setTimeout(()=>{_.value=!1},1e3)},M=()=>{L.value&&L.value.dispose(),c.value=!1,setTimeout(()=>{u.value=""},100)},V=xe=>{L.value&&L.value.dispose(),c.value=!1,setTimeout(()=>{u.value=""},100),typeof xe=="function"&&xe()},G=()=>{console.log("视频开始播放")},ae=()=>{console.log("视频暂停")},se=()=>{console.log("视频播放结束")},oe=xe=>{console.error("视频播放错误:",xe),kn.error("视频播放出现错误")},q=xe=>{let me=f.value+xe.filePath;de(me,xe.fileName)},K=xe=>{T.value=!0,Object.assign(S,xe)},te=async()=>{var me;if(await((me=F.value)==null?void 0:me.validate()))try{const Ke={id:S.id,fileName:S.fileName},Je=await OF(Ke,{baseUrl:e.baseUrl,token:e.token});Je.data.code===0?(kn.success("重命名成功"),T.value=!1,$()):kn.error(Je.data.msg)}catch(Ke){console.error("重命名失败:",Ke),kn.error("重命名失败")}},ne=()=>{var xe;T.value=!1,(xe=F.value)==null||xe.resetFields(),Object.assign(S,{})},de=async(xe,me)=>{const Je=await(await fetch(xe)).blob();let rt=document.createElement("a");rt.style.display="none",rt.download=`${me}.mp4`,rt.href=URL.createObjectURL(Je),document.body.appendChild(rt),rt.click(),document.body.removeChild(rt)},Ne=xe=>{i.value=xe,$()},Le=xe=>{s.value=xe,i.value=t.value/s.value<i.value?Math.ceil(t.value/s.value):i.value,$()};return o.onMounted(()=>{$()}),(xe,me)=>{const Ke=o.resolveComponent("el-input"),Je=o.resolveComponent("el-form-item"),rt=o.resolveComponent("el-col"),ht=o.resolveComponent("el-date-picker"),st=o.resolveComponent("el-button"),dt=o.resolveComponent("el-row"),ye=o.resolveComponent("el-form"),Ve=o.resolveComponent("el-table-column"),he=o.resolveComponent("el-table"),P=o.resolveComponent("el-pagination"),H=o.resolveComponent("el-icon"),ve=o.resolveComponent("el-dialog");return o.openBlock(),o.createElementBlock("div",VF,[o.createElementVNode("div",jF,[o.createElementVNode("div",qF,[o.createElementVNode("div",$F,[o.createVNode(ye,{ref:"queryFormRef",model:a,"label-width":"90px","label-position":"right",size:"small"},{default:o.withCtx(()=>[o.createVNode(dt,null,{default:o.withCtx(()=>[o.createVNode(rt,{span:6},{default:o.withCtx(()=>[o.createVNode(Je,{label:"文件名称"},{default:o.withCtx(()=>[o.createVNode(Ke,{modelValue:a.fileName,"onUpdate:modelValue":me[0]||(me[0]=be=>a.fileName=be),maxlength:100,placeholder:"请输入文件名称"},null,8,["modelValue"])]),_:1})]),_:1}),o.createVNode(rt,{span:6},{default:o.withCtx(()=>[o.createVNode(Je,{label:"创建者"},{default:o.withCtx(()=>[o.createVNode(Ke,{modelValue:a.ownerName,"onUpdate:modelValue":me[1]||(me[1]=be=>a.ownerName=be),maxlength:100,placeholder:"请输入创建者"},null,8,["modelValue"])]),_:1})]),_:1}),o.createVNode(rt,{span:8},{default:o.withCtx(()=>[o.createVNode(Je,{label:"创建时间"},{default:o.withCtx(()=>[o.createVNode(ht,{modelValue:a.createdAt,"onUpdate:modelValue":me[2]||(me[2]=be=>a.createdAt=be),type:"datetimerange","start-placeholder":"开始时间","end-placeholder":"结束时间","popper-class":"popperClass"},null,8,["modelValue"])]),_:1})]),_:1}),o.createVNode(rt,{span:4,style:{"padding-left":"20px","text-align":"right"}},{default:o.withCtx(()=>[o.createVNode(st,{onClick:me[3]||(me[3]=be=>$()),class:"query-btn"},{default:o.withCtx(()=>[...me[11]||(me[11]=[o.createTextVNode("查询",-1)])]),_:1}),o.createVNode(st,{onClick:me[4]||(me[4]=be=>U()),class:"reset"},{default:o.withCtx(()=>[...me[12]||(me[12]=[o.createTextVNode("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])])]),o.createElementVNode("div",HF,[o.createElementVNode("div",null,[o.createVNode(he,{data:l.value,height:"500px","row-key":"id",onSelectionChange:O,style:{background:"#252e3d"},"header-cell-style":{background:"rgba(129,144,166,0.2)",color:"#fff"}},{default:o.withCtx(()=>[o.createVNode(Ve,{type:"index",label:"序号",width:"80"}),o.createVNode(Ve,{prop:"fileName",label:"文件名称",width:"300"}),o.createVNode(Ve,{prop:"createdAt",label:"创建时间",width:"300"}),o.createVNode(Ve,{prop:"size",label:"文件大小"}),o.createVNode(Ve,{prop:"ownerName",label:"文件创建者"}),o.createVNode(Ve,{prop:"action",label:"操作",width:"240"},{default:o.withCtx(({row:be})=>[o.createVNode(st,{class:"editBtn",text:"",onClick:Me=>A(be)},{default:o.withCtx(()=>[...me[13]||(me[13]=[o.createTextVNode("播放",-1)])]),_:1},8,["onClick"]),o.createVNode(st,{class:"editBtn",text:"",onClick:Me=>q(be)},{default:o.withCtx(()=>[...me[14]||(me[14]=[o.createTextVNode("下载",-1)])]),_:1},8,["onClick"]),o.createVNode(st,{class:"editBtn",text:"",onClick:Me=>K(be)},{default:o.withCtx(()=>[...me[15]||(me[15]=[o.createTextVNode("重命名",-1)])]),_:1},8,["onClick"]),o.createVNode(st,{class:"delBtn",text:"",onClick:Me=>x(be)},{default:o.withCtx(()=>[...me[16]||(me[16]=[o.createTextVNode("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])]),o.createVNode(P,{"current-page":i.value,"page-size":s.value,"page-sizes":[10,20,30,40],layout:"total, sizes, prev, pager, next, jumper",total:t.value,onSizeChange:Le,onCurrentChange:Ne,background:""},null,8,["current-page","page-size","total"])])]),o.createVNode(ve,{modelValue:c.value,"onUpdate:modelValue":me[6]||(me[6]=be=>c.value=be),width:"68%",center:"","show-close":!1,fullscreen:D.value,class:o.normalizeClass(["video-dialog",{"is-fullscreen":D.value}]),"destroy-on-close":!0,"before-close":V},{title:o.withCtx(()=>[o.createElementVNode("div",zF,[o.createElementVNode("div",GF,[me[17]||(me[17]=o.createElementVNode("span",null,null,-1)),o.createElementVNode("div",WF,o.toDisplayString(g.value),1)]),o.createElementVNode("div",KF,[o.createVNode(H,{class:"el-dialog__close",onClick:M,style:{"font-size":"20px"}},{default:o.withCtx(()=>[o.createVNode(o.unref(Uh))]),_:1})])])]),default:o.withCtx(()=>[o.createElementVNode("div",YF,[o.createElementVNode("div",XF,[o.createVNode(NF,{ref_key:"playerRef",ref:L,lang:"zh-CN",videoUrl:u.value,controls:!0,"show-custom-button":!0,"hide-snapshot-button":!0,live:!1,hasvideo:!0,onCloseVideo:M,onPlay:G,onPause:ae,onEnded:se,onError:oe},null,8,["videoUrl"])]),_.value?(o.openBlock(),o.createElementBlock("div",JF,[...me[18]||(me[18]=[o.createElementVNode("div",{class:"transcribe-title"},[o.createElementVNode("img",{src:e1,alt:""}),o.createElementVNode("div",null,"文字记录")],-1),o.createElementVNode("div",{class:"transcribe-loading"},[o.createElementVNode("img",{src:kF,alt:""}),o.createElementVNode("div",{class:"transcribe-loading-text"},"智能生成中...")],-1)])])):(o.openBlock(),o.createElementBlock("div",QF,[me[20]||(me[20]=o.createElementVNode("div",{class:"transcribe-title"},[o.createElementVNode("img",{src:e1,alt:""}),o.createElementVNode("div",null,"文字记录")],-1)),o.createElementVNode("div",ZF,[o.createVNode(Ke,{modelValue:R.value,"onUpdate:modelValue":me[5]||(me[5]=be=>R.value=be),style:{height:"36px"},placeholder:"请输入名称进行查询"},null,8,["modelValue"]),o.createElementVNode("div",eV,o.toDisplayString(k.value),1),me[19]||(me[19]=o.createElementVNode("div",{class:"message-footer"},"机器识别仅供参考",-1))])]))])]),_:1},8,["modelValue","fullscreen","class"]),o.createVNode(ve,{modelValue:T.value,"onUpdate:modelValue":me[10]||(me[10]=be=>T.value=be),title:"录像重命名",width:"30%",height:"30%",class:"reactName"},{default:o.withCtx(()=>[o.createVNode(ye,{ref_key:"detailFormRef",ref:F,model:S,"label-width":"100px",rules:m,style:{"margin-top":"20px"}},{default:o.withCtx(()=>[o.createVNode(Je,{label:"文件名称",prop:"fileName"},{default:o.withCtx(()=>[o.createVNode(Ke,{type:"text",maxlength:50,modelValue:S.fileName,"onUpdate:modelValue":me[7]||(me[7]=be=>S.fileName=be),placeholder:"请输入文件名称"},null,8,["modelValue"])]),_:1})]),_:1},8,["model","rules"]),o.createElementVNode("div",tV,[o.createVNode(st,{onClick:me[8]||(me[8]=be=>te()),class:"query-btn"},{default:o.withCtx(()=>[...me[21]||(me[21]=[o.createTextVNode("确定",-1)])]),_:1}),o.createVNode(st,{onClick:me[9]||(me[9]=be=>ne()),class:"reset"},{default:o.withCtx(()=>[...me[22]||(me[22]=[o.createTextVNode("取消",-1)])]),_:1})])]),_:1},8,["modelValue"])])}}},[["__scopeId","data-v-2d221a15"]]),nV={class:"live-address-book-head"},sV={class:"live-address-book-head-title"},rV={class:"live-address-book-content"},aV={class:"content-left-side"},oV={class:"left-item"},lV={class:"left-item-content"},cV={class:"search-bar"},uV={class:"custom-tree-node"},dV={key:0,class:"custom-tree-node-user"},hV={key:0,class:"custom-tree-node-prefix-icon",src:kB,alt:""},fV={key:1,class:"custom-tree-node-prefix-icon",src:EB,alt:""},pV=["title"],mV={key:1,class:"custom-tree-node-user",style:{"margin-left":"-20px"}},gV=["title"],yV={class:"chosen"},vV={class:"chosen-title"},bV={class:"chosen-title-num"},TV={class:"content-right-side"},SV={class:"meeting-entry-right-head"},_V={style:{display:"flex","align-items":"center","justify-content":"space-between",width:"100%"}},CV={class:"preview-meeting-list-left"},kV={class:"preview-meeting-list-left-primary"},EV={class:"preview-meeting-name"},wV={class:"preview-meeting-list-left-sub"},xV={class:"meeting-message-item"},DV={class:"meeting-message-item-value"},AV={class:"meeting-message-item"},PV={class:"meeting-message-item-value"},IV={class:"meeting-message-item"},NV={class:"meeting-message-item-value"},RV={class:"preview-meeting-list-right"},MV=["onClick"],OV=["onClick"],LV={key:1,class:"empty-box"},BV={class:"watermark-text"},UV={class:"watermark-text"},FV={class:"watermark-text"},t1="1.0.90",VV="meetingSystemVersion",lc=Ft({__name:"LiveAddressBook",props:{title:{type:String,default:"视频会商"},baseUrl:{type:String,default:""},meetingVideo:{type:Boolean,default:!1},userData:{type:Object,default:()=>({})},org:{type:String,default:"default"},token:{type:String,default:""},meetingTitle:{type:String,default:"调度会议"}},emits:["enterDialogClose","quickLaunch","launchMeeting","joinMeeting"],setup(n,{expose:e,emit:t}){let i=null;const s=new ki,r=()=>{try{localStorage.setItem(VV,t1),console.log(`版本号已保存到 localStorage: ${t1}`)}catch(Fe){console.error("保存版本号到 localStorage 失败:",Fe)}},a=n,l=t,c=o.ref(!1),u=o.ref(),d=o.ref(),f=o.ref(),g=o.ref(""),T=o.ref([]),S=o.ref([]),m=o.ref([]),_=o.ref([]),k=o.ref(null),R=o.ref({}),D=o.ref("add"),F=o.ref(!1),L=o.ref(!1),$=o.reactive({left:"0px",top:"0px"}),U=o.ref(""),O=o.ref(!1),x=o.ref("launch"),A=o.ref(!1),M=o.ref([]),V=o.reactive({systemName:"视频会议",visible:!0,opacity:.08,fontSize:14,color:"#ffffff",gap:300}),G=o.computed(()=>m.value.length),ae=o.computed(()=>m.value.length>0?m.value.map(Fe=>Fe.userId):[]),se=o.computed(()=>cn().format("MM月DD日")),oe=o.computed(()=>_.value.length),q=o.computed(()=>({position:"absolute",top:0,left:0,width:"100%",height:"100%",pointerEvents:"none",zIndex:9999,overflow:"hidden"}));o.watch(()=>g.value,async Fe=>{await o.nextTick(),u.value.filter(Fe)}),o.watch(()=>S.value,(Fe,Pe)=>{Fe.length>0&&Fe.forEach(_t=>{de(_t)}),Pe.forEach(_t=>{Fe.length>0?Fe.findIndex(Ci=>Ci.userId===_t.userId)<0&&Ne(_t.mobile):(u.value.setChecked(_t.userId,!1,!1),Ne(_t.mobile))})},{deep:!0});function K(){c.value=!0}function te(Fe){return new Promise((Pe,_t)=>{Vv({},{baseUrl:a.baseUrl,token:Fe||a.token}).then(lt=>{var Ci,pt;((Ci=lt.data)==null?void 0:Ci.code)===0?(pt=lt.data)!=null&&pt.data&&(T.value=lt.data.data,Pe()):(s.message("error","获取通讯录组织数据失败"),_t())})})}function ne(Fe){return G.value>0?m.value.findIndex(_t=>_t.mobile===Fe):-1}function de(Fe){if(G.value<=0)m.value.push(Fe);else{if(ne(Fe.mobile)!==-1)return;m.value.push(Fe)}}function Ne(Fe){if(G.value>0){const Pe=ne(Fe);Pe!==-1&&m.value.splice(Pe,1)}}function Le(){Ze.emit("getaddressBookUserForAddressBook")}async function xe(Fe){S.value=Fe,await o.nextTick(),u.value.setCheckedKeys(ae.value,!1)}async function me(Fe){var Pe;document.fullscreenElement||document.msFullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement?document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen():(await o.nextTick(),(Pe=d.value)!=null&&Pe.requestFullscreen&&d.value.requestFullscreen())}function Ke(){l("enterDialogClose")}function Je(){O.value=!1}function rt(Fe,Pe){return Fe?Pe.label.includes(Fe):!0}async function ht(){await o.nextTick();const Fe=u.value.getCheckedNodes(!0,!1);S.value=Fe.filter(Pe=>!Pe.children).map(Pe=>st(Pe))}function st(Fe){if(Fe!=null&&Fe.classify&&Fe.classify==="设备"){const Pe={userId:Fe.id,userName:Fe.label,mobile:Fe.equipmentCode,...Fe};return Pe.mobile=Fe.equipmentCode,Pe}else return{userId:Fe.id,userName:Fe.label,mobile:Fe.phone,...Fe}}function dt(Fe){KP({},{baseUrl:a.baseUrl,token:Fe||a.token}).then(Pe=>{var _t;((_t=Pe.data)==null?void 0:_t.code)==0?(_.value=[],Pe.data.data.length>0&&(_.value=Pe.data.data.map(lt=>{var Ci,pt;return{roomName:lt.roomAlias,roomNum:lt.roomName,status:lt.status,beginTime:cn(lt.reserveStart).format("HH:mm"),endTime:cn(lt.reserveEnd).format("HH:mm"),beginFullTime:lt.reserveStart,endFullTime:lt.reserveEnd,creator:lt.ownerName,realNumParticipants:lt.realNumParticipants,owner:lt.owner,org:lt.org,preMeetingNotify:lt.preMeetingNotify,joinBefore:lt.joinBefore!==0,joinMute:lt.joinMute!==0,autoRecord:lt.autoRecord!==0,inviteOthers:lt.inviteOthers!==0,venueName:lt!=null&<.metadata&<.metadata!=="null"?(Ci=JSON.parse(lt.metadata))==null?void 0:Ci.venueName:"",meetingCompany:lt!=null&<.metadata&<.metadata!=="null"?(pt=JSON.parse(lt.metadata))==null?void 0:pt.meetingCompany:"",zone:lt.zone}}))):_.value=[]})}function ye(Fe){R.value=Fe,D.value="edit",F.value=!0}function Ve(Fe){R.value=Fe,D.value="detail",F.value=!0}function he(Fe){const Pe={identity:Fe.owner,room:Fe.roomNum,org:Fe.org};Uv(Pe,{baseUrl:window.liveClient.baseUrl,token:a.token}).then(_t=>{(_t==null?void 0:_t.data.code)===200?(mf(Fe.roomNum,{baseUrl:a.baseUrl,token:a.token}),s.message("success","成功取消会议"),dt()):s.message("error","取消会议失败")})}function P(Fe){const Pe={identity:Fe.owner,room:Fe.roomNum,org:Fe.org};Uv(Pe,{baseUrl:window.liveClient.baseUrl,token:a.token}).then(_t=>{(_t==null?void 0:_t.data.code)===200?(mf(Fe.roomNum,{baseUrl:a.baseUrl,token:a.token}),dt()):s.message("error","结束会议失败")})}function H(){l("quickLaunch",{roomName:a.userData.username+"的视频会议",cameraStatus:!0,microphoneStatus:!0,audioInputDevice:"",audioOutputDevice:"",videoDevice:"",inviteList:m.value}),Ke()}function ve(Fe){const Pe={...Fe,inviteList:m.value};l("launchMeeting",Pe),Ke()}function be(Fe){const Pe={...Fe,inviteList:[]};l("joinMeeting",Pe),Ke()}function Me(){S.value=[]}function Be(){Me()}function et(Fe){m.value=Array.isArray(Fe)?Fe:[],S.value=Array.isArray(Fe)?Fe:[]}function tt(){x.value="launch",O.value=!0}function ft(){U.value="",x.value="join",O.value=!0}function we(){D.value="add",F.value=!0}function Ie(Fe){U.value=Fe.roomNum,x.value="join",O.value=!0}function Vt(Fe,Pe){var _t;L.value?((_t=k.value)==null?void 0:_t.roomNum)===Fe.roomNum?L.value=!1:(L.value=!1,k.value=Fe,$.left=Pe.target.offsetLeft-60+"px",$.top=Pe.target.offsetTop+24+"px",L.value=!0):(k.value=Fe,$.left=Pe.target.offsetLeft-60+"px",$.top=Pe.target.offsetTop+24+"px",L.value=!0)}const kt=Fe=>({position:"absolute",left:`${Fe.x}px`,top:`${Fe.y}px`,color:V.color,fontSize:`${V.fontSize}px`,opacity:V.opacity,transform:"rotate(-45deg)",pointerEvents:"none",userSelect:"none",fontFamily:"PingFang SC, Microsoft YaHei, sans-serif",fontWeight:"bold",letterSpacing:"1px",lineHeight:"1.2"}),hi=()=>{const Fe=V.systemName;let Pe="admin";try{const lt=localStorage.getItem("rhtxUser");lt&&(Pe=JSON.parse(lt).username||"admin")}catch(lt){console.error("获取用户信息失败:",lt)}const _t=new Date().toLocaleDateString();return{systemName:Fe,loginAccount:Pe,date:_t}},ni=()=>{if(!V.visible){A.value=!1;return}const Fe=hi(),Pe=[],_t=window.innerWidth,lt=window.innerHeight,Ci=Math.ceil(_t/V.gap)+1,pt=Math.ceil(lt/V.gap)+1;for(let Ct=0;Ct<pt;Ct++)for(let Mi=0;Mi<Ci;Mi++){const pi=Mi*V.gap,tn=Ct*V.gap;pi<_t&&tn<lt&&Pe.push({...Fe,x:pi,y:tn})}M.value=Pe,A.value=!0},fi=()=>{ni()};return o.onMounted(()=>{i=setInterval(()=>{dt()},5e3),ni(),window.addEventListener("resize",fi),r()}),o.onBeforeUnmount(()=>{i&&(clearInterval(i),i=null),window.removeEventListener("resize",fi)}),e({getUserAndOrgTreeData:te,getPreviewMeetingList:dt}),(Fe,Pe)=>{const _t=o.resolveComponent("el-input"),lt=o.resolveComponent("el-tree"),Ci=o.resolveComponent("el-dialog");return o.openBlock(),o.createElementBlock("div",{class:"live-address-book",ref_key:"rootElm",ref:d},[o.createElementVNode("div",nV,[o.createElementVNode("div",sV,o.toDisplayString(n.title),1),o.createElementVNode("div",{class:"head-btn-group"},[o.createElementVNode("div",{class:"head-btn head-btn-screen",onClick:me}),o.createElementVNode("div",{class:"head-btn head-btn-close",onClick:Ke})])]),o.createElementVNode("div",rV,[o.createElementVNode("div",aV,[o.createElementVNode("div",{class:"enter-list"},[o.createElementVNode("div",{class:"enter-list-item",onClick:H},[...Pe[5]||(Pe[5]=[o.createElementVNode("div",{class:"enter-item-icon enter-item-icon-quick"},null,-1),o.createElementVNode("div",{class:"enter-item-title"},"快速会议",-1)])]),o.createElementVNode("div",{class:"enter-list-item",onClick:ft},[...Pe[6]||(Pe[6]=[o.createElementVNode("div",{class:"enter-item-icon enter-item-icon-join"},null,-1),o.createElementVNode("div",{class:"enter-item-title"},"加入会议",-1)])]),o.createElementVNode("div",{class:"enter-list-item",onClick:we},[...Pe[7]||(Pe[7]=[o.createElementVNode("div",{class:"enter-item-icon enter-item-icon-preview"},null,-1),o.createElementVNode("div",{class:"enter-item-title"},"预约会议",-1)])])]),o.createElementVNode("div",oV,[Pe[13]||(Pe[13]=o.createElementVNode("div",{class:"left-item-title"},[o.createElementVNode("div",{class:"label"},"通讯录")],-1)),o.createElementVNode("div",lV,[o.createElementVNode("div",cV,[o.createVNode(_t,{class:"search-input",modelValue:g.value,"onUpdate:modelValue":Pe[0]||(Pe[0]=pt=>g.value=pt),placeholder:"请输入名称进行搜索"},{suffix:o.withCtx(()=>[...Pe[8]||(Pe[8]=[o.createElementVNode("i",{class:"el-input__icon el-icon-search"},null,-1)])]),_:1},8,["modelValue"])]),o.createVNode(lt,{class:"tree-content",data:T.value,"default-expand-all":!1,"node-key":"id","show-checkbox":"","filter-node-method":rt,ref_key:"tree",ref:u,onCheck:ht},{default:o.withCtx(({node:pt,data:Ct})=>[o.createElementVNode("span",uV,[Ct.children?(o.openBlock(),o.createElementBlock("span",dV,[Ct.children.length<=0?(o.openBlock(),o.createElementBlock(o.Fragment,{key:0},[pt.expanded?(o.openBlock(),o.createElementBlock("img",hV)):(o.openBlock(),o.createElementBlock("img",fV))],64)):o.createCommentVNode("",!0),o.createElementVNode("span",{class:"custom-tree-node-label",title:pt.label},o.toDisplayString(pt.label),9,pV)])):(o.openBlock(),o.createElementBlock("span",mV,[Pe[9]||(Pe[9]=o.createElementVNode("span",{class:o.normalizeClass(["custom-tree-node-icon"])},null,-1)),o.createElementVNode("span",{class:"custom-tree-node-label",title:pt.label},o.toDisplayString(pt.label),9,gV)]))])]),_:1},8,["data"]),o.createElementVNode("div",yV,[o.createElementVNode("div",vV,[Pe[10]||(Pe[10]=o.createElementVNode("div",{class:"chosen-title-label"},"已选",-1)),o.createElementVNode("div",bV,o.toDisplayString(G.value),1),o.createElementVNode("div",{class:"chosen-title-icon",onClick:Le})])]),o.createElementVNode("div",{class:"options"},[o.createElementVNode("div",{class:"option option-reset",onClick:Me},[...Pe[11]||(Pe[11]=[o.createElementVNode("span",null,"重置",-1)])]),o.createElementVNode("div",{class:"option option-launch",onClick:tt},[...Pe[12]||(Pe[12]=[o.createElementVNode("img",{class:"option-icon",src:wB,alt:""},null,-1),o.createElementVNode("span",null,"发起会议",-1)])])])])])]),o.createElementVNode("div",TV,[o.createElementVNode("div",SV,[Pe[15]||(Pe[15]=o.createElementVNode("img",{class:"logo",src:xB,alt:""},null,-1)),o.createElementVNode("div",_V,[o.createElementVNode("div",null,[Pe[14]||(Pe[14]=o.createElementVNode("span",{style:{"margin-right":"30px"}},"今天",-1)),o.createElementVNode("span",null,o.toDisplayString(se.value),1)]),n.meetingVideo?(o.openBlock(),o.createElementBlock("div",{key:0,style:{cursor:"pointer"},onClick:K}," 会议录像 ")):o.createCommentVNode("",!0)])]),o.createElementVNode("div",{class:o.normalizeClass(["meeting-entry-right-content",{"meeting-entry-right-content-empty":oe.value<=0}])},[oe.value>0?(o.openBlock(!0),o.createElementBlock(o.Fragment,{key:0},o.renderList(_.value,(pt,Ct)=>(o.openBlock(),o.createElementBlock("div",{class:"preview-meeting-list",key:"p"+Ct},[o.createElementVNode("div",CV,[o.createElementVNode("div",kV,[Pe[16]||(Pe[16]=o.createElementVNode("div",{class:"preview-logo"},null,-1)),o.createElementVNode("div",EV,o.toDisplayString(pt.roomName),1),o.createElementVNode("div",{class:o.normalizeClass(["preview-meeting-status",pt.status==0?"preview-meeting-status-unstart":"preview-meeting-status-start"])},o.toDisplayString(pt.status==0?"待开始":"已开始"),3)]),o.createElementVNode("div",wV,[o.createElementVNode("div",xV,[Pe[17]||(Pe[17]=o.createElementVNode("div",{class:"meeting-message-item-title"},"发起人:",-1)),o.createElementVNode("div",DV,o.toDisplayString(pt.creator),1)]),o.createElementVNode("div",AV,[Pe[18]||(Pe[18]=o.createElementVNode("div",{class:"meeting-message-item-title"},"时间:",-1)),o.createElementVNode("div",PV,o.toDisplayString(pt.beginTime)+"~"+o.toDisplayString(pt.endTime),1)]),o.createElementVNode("div",IV,[Pe[19]||(Pe[19]=o.createElementVNode("div",{class:"meeting-message-item-title"},"会议ID:",-1)),o.createElementVNode("div",NV,o.toDisplayString(pt.roomNum),1)])])]),o.createElementVNode("div",RV,[o.createElementVNode("div",{class:"enter-btn",onClick:Mi=>Ie(pt)}," 进入会议 ",8,MV),o.createElementVNode("div",{class:"more-btn",onClick:Mi=>Vt(pt,Mi)},null,8,OV)])]))),128)):(o.openBlock(),o.createElementBlock("div",LV,[...Pe[20]||(Pe[20]=[o.createElementVNode("div",{class:"empty-logo"},null,-1),o.createElementVNode("div",{class:"empty-text"},"今日暂无会议",-1)])]))],2)])]),o.createVNode(fd,{inviteList:m.value,baseUrl:n.baseUrl,token:n.token,componentType:"addressBook",onInviteListUpdate:xe,ref_key:"addressBook",ref:f},null,8,["inviteList","baseUrl","token"]),L.value?(o.openBlock(),o.createBlock(v4,{key:0,previewMeetingData:k.value,optionDialogOffset:$,mobile:n.userData.mobile,onUpdateMeetingDetail:ye,onCheckMeetingDetail:Ve,onCancelMeeting:he,onEndMeeting:P,onClose:Pe[1]||(Pe[1]=pt=>L.value=!1)},null,8,["previewMeetingData","optionDialogOffset","mobile"])):o.createCommentVNode("",!0),F.value?(o.openBlock(),o.createBlock(B4,{key:1,width:"540px",title:"预约会议",previewType:D.value,previewMeetingData:R.value,baseUrl:n.baseUrl,inviteList:m.value,userData:n.userData,org:n.org,token:n.token,onClose:Pe[2]||(Pe[2]=pt=>F.value=!1),onPreviewSuccess:dt,onUpdateSuccess:dt,onPreviewResetInviteList:Be,onPreviewUpdateInviteList:et},null,8,["previewType","previewMeetingData","baseUrl","inviteList","userData","org","token"])):o.createCommentVNode("",!0),O.value?(o.openBlock(),o.createBlock(ZE,{key:2,dialogType:x.value,tempRoomNum:U.value,onClose:Je,onLaunchMeeting:ve,onJoinMeeting:be,meetingTitle:n.meetingTitle},null,8,["dialogType","tempRoomNum","meetingTitle"])):o.createCommentVNode("",!0),o.createVNode(Ci,{modelValue:c.value,"onUpdate:modelValue":Pe[3]||(Pe[3]=pt=>c.value=pt),width:"68%",onClose:Pe[4]||(Pe[4]=pt=>c.value=!1),style:{background:"rgba(37,46,61,0.95)"},class:"history-video-dialog",title:"会议录像"},{default:o.withCtx(()=>[o.createVNode(iV,{baseUrl:n.baseUrl,token:n.token},null,8,["baseUrl","token"])]),_:1},8,["modelValue"]),A.value?(o.openBlock(),o.createElementBlock("div",{key:3,class:"watermark-container",style:o.normalizeStyle(q.value)},[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(M.value,(pt,Ct)=>(o.openBlock(),o.createElementBlock("div",{key:Ct,class:"watermark-item",style:o.normalizeStyle(kt(pt))},[o.createElementVNode("div",BV,o.toDisplayString(pt.systemName),1),o.createElementVNode("div",UV,o.toDisplayString(pt.loginAccount),1),o.createElementVNode("div",FV,o.toDisplayString(pt.date),1)],4))),128))],4)):o.createCommentVNode("",!0)],512)}}},[["__scopeId","data-v-8a8b5169"]]);lc.install=function(n){n.component("LiveAddressBook",lc)};const Dg="/assets/img/meeting/share.png",jV="/assets/img/meeting/chat.png",i1="/assets/img/meeting/record.png",qV="/assets/img/meeting/member.png",$V="/assets/img/meeting/invite.png",HV="/assets/img/meeting/copy-icon.png",zV={class:"dialog-inner"},GV={class:"mark-list"},WV={class:"mark-list-value"},KV={class:"mark-list"},YV={class:"mark-list-value"},XV={id:"meeting-num"},JV={class:"mark-icon"},QV={class:"mark-list"},ZV={class:"mark-list-value"},e6=Ft({__name:"ThemeDialog",props:{position:{type:Object,default:()=>({left:"0px",top:"36px"})},meetingName:{type:String},meetingNum:{type:String},meetingH5Link:{type:String},meetingWXLink:{type:String},meetingCreator:{type:String}},setup(n){const e=n,t=new ki,i=async r=>{await o.nextTick();let a=document.getElementById(r);if(a){if(navigator.clipboard){const l=a.innerText;navigator.clipboard.writeText(l).then(()=>{t.message("success","已复制到剪贴板")}).catch(c=>{t.message("error","复制失败,请重试")})}else t.message("warning","当前浏览器不支持复制内容");a=null}},s=async()=>{if(await o.nextTick(),navigator.clipboard){const r=`会议主题:${e.meetingName}
|
|
308
|
+
`},lg}var PE;function E8(){if(PE)return ts;PE=1;var n=C8(),e=k8(),t=og();return ts.grammar=t,ts.write=e,ts.parse=n.parse,ts.parseParams=n.parseParams,ts.parseFmtpConfig=n.parseFmtpConfig,ts.parsePayloads=n.parsePayloads,ts.parseRemoteCandidates=n.parseRemoteCandidates,ts.parseImageAttributes=n.parseImageAttributes,ts.parseSimulcastStreamList=n.parseSimulcastStreamList,ts}var _r=E8();function cg(n,e,t){var i,s,r;e===void 0&&(e=50),t===void 0&&(t={});var a=(i=t.isImmediate)!=null&&i,l=(s=t.callback)!=null&&s,c=t.maxWait,u=Date.now(),d=[];function f(){if(c!==void 0){var T=Date.now()-u;if(T+e>=c)return c-T}return e}var g=function(){var T=[].slice.call(arguments),S=this;return new Promise(function(m,_){var k=a&&r===void 0;if(r!==void 0&&clearTimeout(r),r=setTimeout(function(){if(r=void 0,u=Date.now(),!a){var D=n.apply(S,T);l&&l(D),d.forEach(function(F){return(0,F.resolve)(D)}),d=[]}},f()),k){var R=n.apply(S,T);return l&&l(R),m(R)}d.push({resolve:m,reject:_})})};return g.cancel=function(T){r!==void 0&&clearTimeout(r),d.forEach(function(S){return(0,S.reject)(T)}),d=[]},g}const w8=.7,x8=20,Io={NegotiationStarted:"negotiationStarted",NegotiationComplete:"negotiationComplete",RTPVideoPayloadTypes:"rtpVideoPayloadTypes"};class IE extends ks.EventEmitter{get pc(){return this._pc||(this._pc=this.createPC()),this._pc}constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var i;super(),this.log=At,this.ddExtID=0,this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate=!1,this.trackBitrates=[],this.remoteStereoMids=[],this.remoteNackMids=[],this.negotiate=cg(s=>ie(this,void 0,void 0,function*(){this.emit(Io.NegotiationStarted);try{yield this.createAndSendOffer()}catch(r){if(s)s(r);else throw r}}),x8),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=js((i=t.loggerName)!==null&&i!==void 0?i:es.PCTransport),this.loggerOptions=t,this.config=e,this._pc=this.createPC()}createPC(){const e=new RTCPeerConnection(this.config);return e.onicecandidate=t=>{var i;t.candidate&&((i=this.onIceCandidate)===null||i===void 0||i.call(this,t.candidate))},e.onicecandidateerror=t=>{var i;(i=this.onIceCandidateError)===null||i===void 0||i.call(this,t)},e.oniceconnectionstatechange=()=>{var t;(t=this.onIceConnectionStateChange)===null||t===void 0||t.call(this,e.iceConnectionState)},e.onsignalingstatechange=()=>{var t;(t=this.onSignalingStatechange)===null||t===void 0||t.call(this,e.signalingState)},e.onconnectionstatechange=()=>{var t;(t=this.onConnectionStateChange)===null||t===void 0||t.call(this,e.connectionState)},e.ondatachannel=t=>{var i;(i=this.onDataChannel)===null||i===void 0||i.call(this,t)},e.ontrack=t=>{var i;(i=this.onTrack)===null||i===void 0||i.call(this,t)},e}get logContext(){var e,t;return Object.assign({},(t=(e=this.loggerOptions).loggerContextCb)===null||t===void 0?void 0:t.call(e))}get isICEConnected(){return this._pc!==null&&(this.pc.iceConnectionState==="connected"||this.pc.iceConnectionState==="completed")}addIceCandidate(e){return ie(this,void 0,void 0,function*(){if(this.pc.remoteDescription&&!this.restartingIce)return this.pc.addIceCandidate(e);this.pendingCandidates.push(e)})}setRemoteDescription(e){return ie(this,void 0,void 0,function*(){var t;let i;if(e.type==="offer"){let{stereoMids:s,nackMids:r}=D8(e);this.remoteStereoMids=s,this.remoteNackMids=r}else if(e.type==="answer"){const s=_r.parse((t=e.sdp)!==null&&t!==void 0?t:"");s.media.forEach(r=>{r.type==="audio"&&this.trackBitrates.some(a=>{if(!a.transceiver||r.mid!=a.transceiver.mid)return!1;let l=0;if(r.rtp.some(u=>u.codec.toUpperCase()===a.codec.toUpperCase()?(l=u.payload,!0):!1),l===0)return!0;let c=!1;for(const u of r.fmtp)if(u.payload===l){u.config=u.config.split(";").filter(d=>!d.includes("maxaveragebitrate")).join(";"),a.maxbr>0&&(u.config+=";maxaveragebitrate=".concat(a.maxbr*1e3)),c=!0;break}return c||a.maxbr>0&&r.fmtp.push({payload:l,config:"maxaveragebitrate=".concat(a.maxbr*1e3)}),!0})}),i=_r.write(s)}yield this.setMungedSDP(e,i,!0),this.pendingCandidates.forEach(s=>{this.pc.addIceCandidate(s)}),this.pendingCandidates=[],this.restartingIce=!1,this.renegotiate?(this.renegotiate=!1,yield this.createAndSendOffer()):e.type==="answer"&&(this.emit(Io.NegotiationComplete),e.sdp&&_r.parse(e.sdp).media.forEach(r=>{r.type==="video"&&this.emit(Io.RTPVideoPayloadTypes,r.rtp)}))})}createAndSendOffer(e){return ie(this,void 0,void 0,function*(){var t;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 i=yield this.pc.createOffer(e);this.log.debug("original offer",Object.assign({sdp:i.sdp},this.logContext));const s=_r.parse((t=i.sdp)!==null&&t!==void 0?t:"");s.media.forEach(r=>{RE(r),r.type==="audio"?NE(r,[],[]):r.type==="video"&&this.trackBitrates.some(a=>{if(!r.msid||!a.cid||!r.msid.includes(a.cid))return!1;let l=0;if(r.rtp.some(u=>u.codec.toUpperCase()===a.codec.toUpperCase()?(l=u.payload,!0):!1),l===0||(Hs(a.codec)&&this.ensureVideoDDExtensionForSVC(r,s),a.codec!=="av1"))return!0;const c=Math.round(a.maxbr*w8);for(const u of r.fmtp)if(u.payload===l){u.config.includes("x-google-start-bitrate")||(u.config+=";x-google-start-bitrate=".concat(c));break}return!0})}),yield this.setMungedSDP(i,_r.write(s)),this.onOffer(i)})}createAndSetAnswer(){return ie(this,void 0,void 0,function*(){var e;const t=yield this.pc.createAnswer(),i=_r.parse((e=t.sdp)!==null&&e!==void 0?e:"");return i.media.forEach(s=>{RE(s),s.type==="audio"&&NE(s,this.remoteStereoMids,this.remoteNackMids)}),yield this.setMungedSDP(t,_r.write(i)),t})}createDataChannel(e,t){return this.pc.createDataChannel(e,t)}addTransceiver(e,t){return this.pc.addTransceiver(e,t)}addTrack(e){if(!this._pc)throw new Ei("PC closed, cannot add track");return this._pc.addTrack(e)}setTrackCodecBitrate(e){this.trackBitrates.push(e)}setConfiguration(e){var t;if(!this._pc)throw new Ei("PC closed, cannot configure");return(t=this._pc)===null||t===void 0?void 0:t.setConfiguration(e)}canRemoveTrack(){var e;return!!(!((e=this._pc)===null||e===void 0)&&e.removeTrack)}removeTrack(e){var t;return(t=this._pc)===null||t===void 0?void 0:t.removeTrack(e)}getConnectionState(){var e,t;return(t=(e=this._pc)===null||e===void 0?void 0:e.connectionState)!==null&&t!==void 0?t:"closed"}getICEConnectionState(){var e,t;return(t=(e=this._pc)===null||e===void 0?void 0:e.iceConnectionState)!==null&&t!==void 0?t:"closed"}getSignallingState(){var e,t;return(t=(e=this._pc)===null||e===void 0?void 0:e.signalingState)!==null&&t!==void 0?t:"closed"}getTransceivers(){var e,t;return(t=(e=this._pc)===null||e===void 0?void 0:e.getTransceivers())!==null&&t!==void 0?t:[]}getSenders(){var e,t;return(t=(e=this._pc)===null||e===void 0?void 0:e.getSenders())!==null&&t!==void 0?t:[]}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 ie(this,void 0,void 0,function*(){var e;if(!this._pc)return;let t="";const i=new Map,s=new Map;if((yield this._pc.getStats()).forEach(l=>{switch(l.type){case"transport":t=l.selectedCandidatePairId;break;case"candidate-pair":t===""&&l.selected&&(t=l.id),i.set(l.id,l);break;case"remote-candidate":s.set(l.id,"".concat(l.address,":").concat(l.port));break}}),t==="")return;const a=(e=i.get(t))===null||e===void 0?void 0:e.remoteCandidateId;if(a!==void 0)return s.get(a)})}setMungedSDP(e,t,i){return ie(this,void 0,void 0,function*(){if(t){const s=e.sdp;e.sdp=t;try{this.log.debug("setting munged ".concat(i?"remote":"local"," description"),this.logContext),i?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:t})),e.sdp=s}}try{i?yield this.pc.setRemoteDescription(e):yield this.pc.setLocalDescription(e)}catch(s){let r="unknown error";s instanceof Error?r=s.message:typeof s=="string"&&(r=s);const a={error:r,sdp:e.sdp};throw!i&&this.pc.remoteDescription&&(a.remoteSdp=this.pc.remoteDescription),this.log.error("unable to set ".concat(e.type),Object.assign(Object.assign({},this.logContext),{fields:a})),new Um(r)}})}ensureVideoDDExtensionForSVC(e,t){var i,s;if(!((i=e.ext)===null||i===void 0?void 0:i.some(a=>a.uri===dE))){if(this.ddExtID===0){let a=0;t.media.forEach(l=>{var c;l.type==="video"&&((c=l.ext)===null||c===void 0||c.forEach(u=>{u.value>a&&(a=u.value)}))}),this.ddExtID=a+1}(s=e.ext)===null||s===void 0||s.push({value:this.ddExtID,uri:dE})}}}function NE(n,e,t){let i=0;n.rtp.some(s=>s.codec==="opus"?(i=s.payload,!0):!1),i>0&&(n.rtcpFb||(n.rtcpFb=[]),t.includes(n.mid)&&!n.rtcpFb.some(s=>s.payload===i&&s.type==="nack")&&n.rtcpFb.push({payload:i,type:"nack"}),e.includes(n.mid)&&n.fmtp.some(s=>s.payload===i?(s.config.includes("stereo=1")||(s.config+=";stereo=1"),!0):!1))}function D8(n){var e;const t=[],i=[],s=_r.parse((e=n.sdp)!==null&&e!==void 0?e:"");let r=0;return s.media.forEach(a=>{var l;a.type==="audio"&&(a.rtp.some(c=>c.codec==="opus"?(r=c.payload,!0):!1),!((l=a.rtcpFb)===null||l===void 0)&&l.some(c=>c.payload===r&&c.type==="nack")&&i.push(a.mid),a.fmtp.some(c=>c.payload===r?(c.config.includes("sprop-stereo=1")&&t.push(a.mid),!0):!1))}),{stereoMids:t,nackMids:i}}function RE(n){if(n.connection){const e=n.connection.ip.indexOf(":")>=0;(n.connection.version===4&&e||n.connection.version===6&&!e)&&(n.connection.ip="0.0.0.0",n.connection.version=4)}}const ug="vp8",A8={audioPreset:jm.music,dtx:!0,red:!0,forceStereo:!1,simulcast:!0,screenShareEncoding:$m.h1080fps15.encoding,stopMicTrackOnMute:!1,videoCodec:ug,backupCodec:!0,preConnectBuffer:!1},ME={deviceId:{ideal:"default"},autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0,voiceIsolation:!0},OE={deviceId:{ideal:"default"},resolution:ic.h720.resolution},P8={adaptiveStream:!1,dynacast:!1,stopLocalTrackOnUnpublish:!0,reconnectPolicy:new bU,disconnectOnPageLeave:!0,webAudioMix:!1},dg={autoSubscribe:!0,maxRetries:1,peerConnectionTimeout:15e3,websocketTimeout:15e3};var ui;(function(n){n[n.NEW=0]="NEW",n[n.CONNECTING=1]="CONNECTING",n[n.CONNECTED=2]="CONNECTED",n[n.FAILED=3]="FAILED",n[n.CLOSING=4]="CLOSING",n[n.CLOSED=5]="CLOSED"})(ui||(ui={}));class I8{get needsPublisher(){return this.isPublisherConnectionRequired}get needsSubscriber(){return this.isSubscriberConnectionRequired}get currentState(){return this.state}constructor(e,t,i){var s;this.peerConnectionTimeout=dg.peerConnectionTimeout,this.log=At,this.updateState=()=>{var r;const a=this.state,l=this.requiredTransports.map(c=>c.getConnectionState());l.every(c=>c==="connected")?this.state=ui.CONNECTED:l.some(c=>c==="failed")?this.state=ui.FAILED:l.some(c=>c==="connecting")?this.state=ui.CONNECTING:l.every(c=>c==="closed")?this.state=ui.CLOSED:l.some(c=>c==="closed")?this.state=ui.CLOSING:l.every(c=>c==="new")&&(this.state=ui.NEW),a!==this.state&&(this.log.debug("pc state change: from ".concat(ui[a]," to ").concat(ui[this.state]),this.logContext),(r=this.onStateChange)===null||r===void 0||r.call(this,this.state,this.publisher.getConnectionState(),this.subscriber.getConnectionState()))},this.log=js((s=i.loggerName)!==null&&s!==void 0?s:es.PCManager),this.loggerOptions=i,this.isPublisherConnectionRequired=!t,this.isSubscriberConnectionRequired=t,this.publisher=new IE(e,i),this.subscriber=new IE(e,i),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 a;(a=this.onIceCandidate)===null||a===void 0||a.call(this,r,Zn.PUBLISHER)},this.subscriber.onIceCandidate=r=>{var a;(a=this.onIceCandidate)===null||a===void 0||a.call(this,r,Zn.SUBSCRIBER)},this.subscriber.onDataChannel=r=>{var a;(a=this.onDataChannel)===null||a===void 0||a.call(this,r)},this.subscriber.onTrack=r=>{var a;(a=this.onTrack)===null||a===void 0||a.call(this,r)},this.publisher.onOffer=r=>{var a;(a=this.onPublisherOffer)===null||a===void 0||a.call(this,r)},this.state=ui.NEW,this.connectionLock=new gn,this.remoteOfferLock=new gn}get logContext(){var e,t;return Object.assign({},(t=(e=this.loggerOptions).loggerContextCb)===null||t===void 0?void 0:t.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 ie(this,void 0,void 0,function*(){if(this.publisher&&this.publisher.getSignallingState()!=="closed"){const e=this.publisher;for(const t of e.getSenders())try{e.canRemoveTrack()&&e.removeTrack(t)}catch(i){this.log.warn("could not removeTrack",Object.assign(Object.assign({},this.logContext),{error:i}))}}yield Promise.all([this.publisher.close(),this.subscriber.close()]),this.updateState()})}triggerIceRestart(){return ie(this,void 0,void 0,function*(){this.subscriber.restartingIce=!0,this.needsPublisher&&(yield this.createAndSendPublisherOffer({iceRestart:!0}))})}addIceCandidate(e,t){return ie(this,void 0,void 0,function*(){t===Zn.PUBLISHER?yield this.publisher.addIceCandidate(e):yield this.subscriber.addIceCandidate(e)})}createSubscriberAnswerFromOffer(e){return ie(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 t=yield this.remoteOfferLock.lock();try{return yield this.subscriber.setRemoteDescription(e),yield this.subscriber.createAndSetAnswer()}finally{t()}})}updateConfiguration(e,t){this.publisher.setConfiguration(e),this.subscriber.setConfiguration(e),t&&this.triggerIceRestart()}ensurePCTransportConnection(e,t){return ie(this,void 0,void 0,function*(){var i;const s=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((i=this.requiredTransports)===null||i===void 0?void 0:i.map(r=>this.ensureTransportConnected(r,e,t)))}finally{s()}})}negotiate(e){return ie(this,void 0,void 0,function*(){return new Promise((t,i)=>ie(this,void 0,void 0,function*(){const s=setTimeout(()=>{i("negotiation timed out")},this.peerConnectionTimeout),r=()=>{clearTimeout(s),i("negotiation aborted")};e.signal.addEventListener("abort",r),this.publisher.once(Io.NegotiationStarted,()=>{e.signal.aborted||this.publisher.once(Io.NegotiationComplete,()=>{clearTimeout(s),t()})}),yield this.publisher.negotiate(a=>{clearTimeout(s),i(a)})}))})}addPublisherTransceiver(e,t){return this.publisher.addTransceiver(e,t)}addPublisherTrack(e){return this.publisher.addTrack(e)}createPublisherDataChannel(e,t){return this.publisher.createDataChannel(e,t)}getConnectedAddress(e){return e===Zn.PUBLISHER?this.publisher.getConnectedAddress():e===Zn.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,t){return ie(this,arguments,void 0,function(i,s){var r=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.peerConnectionTimeout;return(function*(){if(i.getConnectionState()!=="connected")return new Promise((c,u)=>ie(r,void 0,void 0,function*(){const d=()=>{this.log.warn("abort transport connection",this.logContext),Ui.clearTimeout(f),u(new Gt("room connection has been cancelled",Nt.Cancelled))};s!=null&&s.signal.aborted&&d(),s==null||s.signal.addEventListener("abort",d);const f=Ui.setTimeout(()=>{s==null||s.signal.removeEventListener("abort",d),u(new Gt("could not establish pc connection",Nt.InternalError))},a);for(;this.state!==ui.CONNECTED;)if(yield Tn(50),s!=null&&s.signal.aborted){u(new Gt("room connection has been cancelled",Nt.Cancelled));return}Ui.clearTimeout(f),s==null||s.signal.removeEventListener("abort",d),c()}))})()})}}class di extends Error{constructor(e,t,i){super(t),this.code=e,this.message=BE(t,di.MAX_MESSAGE_BYTES),this.data=i?BE(i,di.MAX_DATA_BYTES):void 0}static fromProto(e){return new di(e.code,e.message,e.data)}toProto(){return new JC({code:this.code,message:this.message,data:this.data})}static builtIn(e,t){return new di(di.ErrorCode[e],di.ErrorMessage[e],t)}}di.MAX_MESSAGE_BYTES=256,di.MAX_DATA_BYTES=15360,di.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},di.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 LE=15360;function hg(n){return new TextEncoder().encode(n).length}function BE(n,e){if(hg(n)<=e)return n;let t=0,i=n.length;const s=new TextEncoder;for(;t<i;){const r=Math.floor((t+i+1)/2);s.encode(n.slice(0,r)).length<=e?t=r:i=r-1}return n.slice(0,t)}const fg=2e3;function jd(n,e){if(!e)return 0;let t,i;return"bytesReceived"in n?(t=n.bytesReceived,i=e.bytesReceived):"bytesSent"in n&&(t=n.bytesSent,i=e.bytesSent),t===void 0||i===void 0||n.timestamp===void 0||e.timestamp===void 0?0:(t-i)*8*1e3/(n.timestamp-e.timestamp)}const pg=typeof MediaRecorder<"u";class N8{constructor(){throw new Error("MediaRecorder is not available in this environment")}}const R8=pg?MediaRecorder:N8;class M8 extends R8{constructor(e,t){if(!pg)throw new Error("MediaRecorder is not available in this environment");super(new MediaStream([e.mediaStreamTrack]),t);let i,s;const r=()=>s===void 0,a=()=>{this.removeEventListener("dataavailable",i),this.removeEventListener("stop",a),this.removeEventListener("error",l),s==null||s.close(),s=void 0},l=c=>{s==null||s.error(c),this.removeEventListener("dataavailable",i),this.removeEventListener("stop",a),this.removeEventListener("error",l),s=void 0};this.byteStream=new ReadableStream({start:c=>{s=c,i=u=>ie(this,void 0,void 0,function*(){const d=yield u.data.arrayBuffer();r()||c.enqueue(new Uint8Array(d))}),this.addEventListener("dataavailable",i)},cancel:()=>{a()}}),this.addEventListener("stop",a),this.addEventListener("error",l)}}function O8(){return pg}const L8=1e3,B8=1e4;class UE extends Ae{get sender(){return this._sender}set sender(e){this._sender=e}get constraints(){return this._constraints}get hasPreConnectBuffer(){return!!this.localTrackRecorder}constructor(e,t,i){let s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,r=arguments.length>4?arguments[4]:void 0;super(e,t,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=cg(()=>ie(this,void 0,void 0,function*(){yield this.pauseUpstream()}),5e3),this.handleTrackUnmuteEvent=()=>ie(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(He.Ended,this)},this.reacquireTrack=!1,this.providedByUser=s,this.muteLock=new gn,this.pauseUpstreamLock=new gn,this.processorLock=new gn,this.restartLock=new gn,this.setMediaStreamTrack(e,!0),this._constraints=e.getConstraints(),i&&(this._constraints=i)}get id(){return this._mediaStreamTrack.id}get dimensions(){if(this.kind!==Ae.Kind.Video)return;const{width:e,height:t}=this._mediaStreamTrack.getSettings();if(e&&t)return{width:e,height:t}}get isUpstreamPaused(){return this._isUpstreamPaused}get isUserProvided(){return this.providedByUser}get mediaStreamTrack(){var e,t;return(t=(e=this.processor)===null||e===void 0?void 0:e.processedTrack)!==null&&t!==void 0?t:this._mediaStreamTrack}get isLocal(){return!0}getSourceTrackSettings(){return this._mediaStreamTrack.getSettings()}setMediaStreamTrack(e,t){return ie(this,void 0,void 0,function*(){var i;if(e===this._mediaStreamTrack&&!t)return;this._mediaStreamTrack&&(this.attachedElements.forEach(r=>{wo(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 s;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&&(Eo(e,this.processorElement),this.processorElement.muted=!0),yield this.processor.restart({track:e,kind:this.kind,element:this.processorElement}),s=this.processor.processedTrack}finally{r()}}this.sender&&((i=this.sender.transport)===null||i===void 0?void 0:i.state)!=="closed"&&(yield this.sender.replaceTrack(s??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=>{Eo(s??e,r)}))})}waitForDimensions(){return ie(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:L8;return(function*(){var i;if(e.kind===Ae.Kind.Audio)throw new Error("cannot get dimensions for audio tracks");((i=bn())===null||i===void 0?void 0:i.os)==="iOS"&&(yield Tn(10));const s=Date.now();for(;Date.now()-s<t;){const r=e.dimensions;if(r)return r;yield Tn(50)}throw new $s("unable to get track dimensions after timeout")})()})}setDeviceId(e){return ie(this,void 0,void 0,function*(){return this._constraints.deviceId===e&&this._mediaStreamTrack.getSettings().deviceId===Tr(e)||(this._constraints.deviceId=e,this.isMuted)?!0:(yield this.restartTrack(),Tr(e)===this._mediaStreamTrack.getSettings().deviceId)})}getDeviceId(){return ie(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return(function*(){if(e.source===Ae.Source.ScreenShare)return;const{deviceId:i,groupId:s}=e._mediaStreamTrack.getSettings(),r=e.kind===Ae.Kind.Audio?"audioinput":"videoinput";return t?Ri.getInstance().normalizeDeviceId(r,i,s):i})()})}mute(){return ie(this,void 0,void 0,function*(){return this.setTrackMuted(!0),this})}unmute(){return ie(this,void 0,void 0,function*(){return this.setTrackMuted(!1),this})}replaceTrack(e,t){return ie(this,void 0,void 0,function*(){if(!this.sender)throw new $s("unable to replace an unpublished track");let i,s;return typeof t=="boolean"?i=t:t!==void 0&&(i=t.userProvidedTrack,s=t.stopProcessor),this.providedByUser=i??!0,this.log.debug("replace MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(e),s&&this.processor&&(yield this.stopProcessor()),this})}restart(e){return ie(this,void 0,void 0,function*(){this.manuallyStopped=!1;const t=yield this.restartLock.lock();try{e||(e=this._constraints);const{deviceId:i,facingMode:s}=e,r=TU(e,["deviceId","facingMode"]);this.log.debug("restarting track with constraints",Object.assign(Object.assign({},this.logContext),{constraints:e}));const a={audio:!1,video:!1};this.kind===Ae.Kind.Video?a.video=i||s?{deviceId:i,facingMode:s}:!0:a.audio=i?{deviceId:i}:!0,this.attachedElements.forEach(u=>{wo(this.mediaStreamTrack,u)}),this._mediaStreamTrack.removeEventListener("ended",this.handleEnded),this._mediaStreamTrack.stop();const c=(yield navigator.mediaDevices.getUserMedia(a)).getTracks()[0];return yield c.applyConstraints(r),c.addEventListener("ended",this.handleEnded),this.log.debug("re-acquired MediaStreamTrack",this.logContext),yield this.setMediaStreamTrack(c),this._constraints=e,this.emit(He.Restarted,this),this.manuallyStopped&&(this.log.warn("track was stopped during a restart, stopping restarted track",this.logContext),this.stop()),this}finally{t()}})}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?He.Muted:He.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 ie(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),fE()&&(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 ie(this,void 0,void 0,function*(){var e;const t=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(He.UpstreamPaused,this);const i=bn();if((i==null?void 0:i.name)==="Safari"&&br(i.version,"12.0")<0)throw new Bm("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{t()}})}resumeUpstream(){return ie(this,void 0,void 0,function*(){var e;const t=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(He.UpstreamResumed,this),((e=this.sender.transport)===null||e===void 0?void 0:e.state)!=="closed"&&(yield this.sender.replaceTrack(this.mediaStreamTrack))}finally{t()}})}getRTCStatsReport(){return ie(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 ie(this,arguments,void 0,function(t){var i=this;let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return(function*(){var r;const a=yield i.processorLock.lock();try{i.log.debug("setting up processor",i.logContext);const l=document.createElement(i.kind),c={kind:i.kind,track:i._mediaStreamTrack,element:l,audioContext:i.audioContext};if(yield t.init(c),i.log.debug("processor initialized",i.logContext),i.processor&&(yield i.stopProcessor()),i.kind==="unknown")throw TypeError("cannot set processor on track of unknown kind");if(Eo(i._mediaStreamTrack,l),l.muted=!0,l.play().catch(u=>i.log.error("failed to play processor element",Object.assign(Object.assign({},i.logContext),{error:u}))),i.processor=t,i.processorElement=l,i.processor.processedTrack){for(const u of i.attachedElements)u!==i.processorElement&&s&&(wo(i._mediaStreamTrack,u),Eo(i.processor.processedTrack,u));yield(r=i.sender)===null||r===void 0?void 0:r.replaceTrack(i.processor.processedTrack)}i.emit(He.TrackProcessorUpdate,i.processor)}finally{a()}})()})}getProcessor(){return this.processor}stopProcessor(){return ie(this,arguments,void 0,function(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return(function*(){var i,s;e.processor&&(e.log.debug("stopping processor",e.logContext),(i=e.processor.processedTrack)===null||i===void 0||i.stop(),yield e.processor.destroy(),e.processor=void 0,t||((s=e.processorElement)===null||s===void 0||s.remove(),e.processorElement=void 0),yield e._mediaStreamTrack.applyConstraints(e._constraints),yield e.setMediaStreamTrack(e._mediaStreamTrack,!0),e.emit(He.TrackProcessorUpdate))})()})}startPreConnectBuffer(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:100;if(!O8()){this.log.warn("MediaRecorder is not available, cannot start preconnect buffer",this.logContext);return}if(!this.localTrackRecorder)this.localTrackRecorder=new M8(this,{mimeType:"audio/webm;codecs=opus"});else{this.log.warn("preconnect buffer already started");return}this.localTrackRecorder.start(e),this.autoStopPreConnectBuffer=setTimeout(()=>{this.log.warn("preconnect buffer timed out, stopping recording automatically",this.logContext),this.stopPreConnectBuffer()},B8)}stopPreConnectBuffer(){clearTimeout(this.autoStopPreConnectBuffer),this.localTrackRecorder&&(this.localTrackRecorder.stop(),this.localTrackRecorder=void 0)}getPreConnectBuffer(){var e;return(e=this.localTrackRecorder)===null||e===void 0?void 0:e.byteStream}}class qd extends UE{get enhancedNoiseCancellation(){return this.isKrispNoiseFilterEnabled}constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;super(e,Ae.Kind.Audio,t,i,r),this.stopOnMute=!1,this.isKrispNoiseFilterEnabled=!1,this.monitorSender=()=>ie(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let a;try{a=yield this.getSenderStats()}catch(l){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:l}));return}a&&this.prevStats&&(this._currentBitrate=jd(a,this.prevStats)),this.prevStats=a}),this.handleKrispNoiseFilterEnable=()=>{this.isKrispNoiseFilterEnabled=!0,this.log.debug("Krisp noise filter enabled",this.logContext),this.emit(He.AudioTrackFeatureUpdate,this,Ni.TF_ENHANCED_NOISE_CANCELLATION,!0)},this.handleKrispNoiseFilterDisable=()=>{this.isKrispNoiseFilterEnabled=!1,this.log.debug("Krisp noise filter disabled",this.logContext),this.emit(He.AudioTrackFeatureUpdate,this,Ni.TF_ENHANCED_NOISE_CANCELLATION,!1)},this.audioContext=s,this.checkForSilence()}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return ie(this,void 0,void 0,function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===Ae.Source.Microphone&&this.stopOnMute&&!this.isUserProvided&&(this.log.debug("stopping mic track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{t()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return ie(this,void 0,void 0,function*(){const t=yield this.muteLock.lock();try{if(!this.isMuted)return this.log.debug("Track already unmuted",this.logContext),this;const i=this._constraints.deviceId&&this._mediaStreamTrack.getSettings().deviceId!==Tr(this._constraints.deviceId);return this.source===Ae.Source.Microphone&&(this.stopOnMute||this._mediaStreamTrack.readyState==="ended"||i)&&!this.isUserProvided&&(this.log.debug("reacquiring mic track",this.logContext),yield this.restartTrack()),yield e.unmute.call(this),this}finally{t()}})}restartTrack(e){return ie(this,void 0,void 0,function*(){let t;if(e){const i=tg({audio:e});typeof i.audio!="boolean"&&(t=i.audio)}yield this.restart(t)})}restart(e){const t=Object.create(null,{restart:{get:()=>super.restart}});return ie(this,void 0,void 0,function*(){const i=yield t.restart.call(this,e);return this.checkForSilence(),i})}startMonitor(){Sn()&&(this.monitorInterval||(this.monitorInterval=setInterval(()=>{this.monitorSender()},fg)))}setProcessor(e){return ie(this,void 0,void 0,function*(){var t;const i=yield this.processorLock.lock();try{if(!Es()&&!this.audioContext)throw Error("Audio context needs to be set on LocalAudioTrack in order to enable processors");this.processor&&(yield this.stopProcessor());const s={kind:this.kind,track:this._mediaStreamTrack,audioContext:this.audioContext};this.log.debug("setting up audio processor ".concat(e.name),this.logContext),yield e.init(s),this.processor=e,this.processor.processedTrack&&(yield(t=this.sender)===null||t===void 0?void 0:t.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(He.TrackProcessorUpdate,this.processor)}finally{i()}})}setAudioContext(e){this.audioContext=e}getSenderStats(){return ie(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return;const t=yield this.sender.getStats();let i;return t.forEach(s=>{s.type==="outbound-rtp"&&(i={type:"audio",streamId:s.id,packetsSent:s.packetsSent,packetsLost:s.packetsLost,bytesSent:s.bytesSent,timestamp:s.timestamp,roundTripTime:s.roundTripTime,jitter:s.jitter})}),i})}checkForSilence(){return ie(this,void 0,void 0,function*(){const e=yield _E(this);return e&&(this.isMuted||this.log.warn("silence detected on local audio track",this.logContext),this.emit(He.AudioSilenceDetected)),e})}}function U8(n,e,t){switch(n.kind){case"audio":return new qd(n,e,!1,void 0,t);case"video":return new Hd(n,e,!1,t);default:throw new $s("unsupported track type: ".concat(n.kind))}}const F8=Object.values(ic),V8=Object.values(qm),j8=Object.values($m),q8=[ic.h180,ic.h360],$8=[qm.h180,qm.h360],H8=n=>[{scaleResolutionDownBy:2,fps:n.encoding.maxFramerate}].map(t=>{var i,s;return new Ht(Math.floor(n.width/t.scaleResolutionDownBy),Math.floor(n.height/t.scaleResolutionDownBy),Math.max(15e4,Math.floor(n.encoding.maxBitrate/(Math.pow(t.scaleResolutionDownBy,2)*(((i=n.encoding.maxFramerate)!==null&&i!==void 0?i:30)/((s=t.fps)!==null&&s!==void 0?s:30))))),t.fps,n.encoding.priority)}),mg=["q","h","f"];function gg(n,e,t,i){var s,r;let a=i==null?void 0:i.videoEncoding;n&&(a=i==null?void 0:i.screenShareEncoding);const l=i==null?void 0:i.simulcast,c=i==null?void 0:i.scalabilityMode,u=i==null?void 0:i.videoCodec;if(!a&&!l&&!c||!e||!t)return[{}];a||(a=G8(n,e,t,u),At.debug("using video encoding",a));const d=a.maxFramerate,f=new Ht(e,t,a.maxBitrate,a.maxFramerate,a.priority);if(c&&Hs(u)){const S=new $d(c),m=[];if(S.spatial>3)throw new Error("unsupported scalabilityMode: ".concat(c));const _=bn();if(ua()||Es()||(_==null?void 0:_.name)==="Chrome"&&br(_==null?void 0:_.version,"113")<0){const k=S.suffix=="h"?2:3,R=JU(_);for(let D=0;D<S.spatial;D+=1)m.push({rid:mg[2-D],maxBitrate:a.maxBitrate/Math.pow(k,D),maxFramerate:f.encoding.maxFramerate,scaleResolutionDownBy:R?Math.pow(2,D):void 0});m[0].scalabilityMode=c}else m.push({maxBitrate:a.maxBitrate,maxFramerate:f.encoding.maxFramerate,scalabilityMode:c});return f.encoding.priority&&(m[0].priority=f.encoding.priority,m[0].networkPriority=f.encoding.priority),At.debug("using svc encoding",{encodings:m}),m}if(!l)return[a];let g=[];n?g=(s=VE(i==null?void 0:i.screenShareSimulcastLayers))!==null&&s!==void 0?s:FE(n,f):g=(r=VE(i==null?void 0:i.videoSimulcastLayers))!==null&&r!==void 0?r:FE(n,f);let T;if(g.length>0){const S=g[0];g.length>1&&([,T]=g);const m=Math.max(e,t);if(m>=960&&T)return yg(e,t,[S,T,f],d);if(m>=480)return yg(e,t,[S,f],d)}return yg(e,t,[f])}function z8(n,e,t){var i,s,r,a;if(!t.backupCodec||t.backupCodec===!0||t.backupCodec.codec===t.videoCodec)return;e!==t.backupCodec.codec&&At.warn("requested a different codec than specified as backup",{serverRequested:e,backup:t.backupCodec.codec}),t.videoCodec=e,t.videoEncoding=t.backupCodec.encoding;const l=n.mediaStreamTrack.getSettings(),c=(i=l.width)!==null&&i!==void 0?i:(s=n.dimensions)===null||s===void 0?void 0:s.width,u=(r=l.height)!==null&&r!==void 0?r:(a=n.dimensions)===null||a===void 0?void 0:a.height;return n.source===Ae.Source.ScreenShare&&t.simulcast&&(t.simulcast=!1),gg(n.source===Ae.Source.ScreenShare,c,u,t)}function G8(n,e,t,i){const s=W8(n,e,t);let{encoding:r}=s[0];const a=Math.max(e,t);for(let l=0;l<s.length;l+=1){const c=s[l];if(r=c.encoding,c.width>=a)break}if(i)switch(i){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 W8(n,e,t){if(n)return j8;const i=e>t?e/t:t/e;return Math.abs(i-16/9)<Math.abs(i-4/3)?F8:V8}function FE(n,e){if(n)return H8(e);const{width:t,height:i}=e,s=t>i?t/i:i/t;return Math.abs(s-16/9)<Math.abs(s-4/3)?q8:$8}function yg(n,e,t,i){const s=[];if(t.forEach((r,a)=>{if(a>=mg.length)return;const l=Math.min(n,e),u={rid:mg[a],scaleResolutionDownBy:Math.max(1,l/Math.min(r.width,r.height)),maxBitrate:r.encoding.maxBitrate},d=i&&r.encoding.maxFramerate?Math.min(i,r.encoding.maxFramerate):r.encoding.maxFramerate;d&&(u.maxFramerate=d);const f=xo()||a===0;r.encoding.priority&&f&&(u.priority=r.encoding.priority,u.networkPriority=r.encoding.priority),s.push(u)}),Es()&&mE()==="ios"){let r;s.forEach(l=>{r?l.maxFramerate&&l.maxFramerate>r&&(r=l.maxFramerate):r=l.maxFramerate});let a=!0;s.forEach(l=>{var c;l.maxFramerate!=r&&(a&&(a=!1,At.info("Simulcast on iOS React-Native requires all encodings to share the same framerate.")),At.info('Setting framerate of encoding "'.concat((c=l.rid)!==null&&c!==void 0?c:"",'" to ').concat(r)),l.maxFramerate=r)})}return s}function VE(n){if(n)return n.sort((e,t)=>{const{encoding:i}=e,{encoding:s}=t;return i.maxBitrate>s.maxBitrate?1:i.maxBitrate<s.maxBitrate?-1:i.maxBitrate===s.maxBitrate&&i.maxFramerate&&s.maxFramerate?i.maxFramerate>s.maxFramerate?1:-1:0})}class $d{constructor(e){const t=e.match(/^L(\d)T(\d)(h|_KEY|_KEY_SHIFT){0,1}$/);if(!t)throw new Error("invalid scalability mode");if(this.spatial=parseInt(t[1]),this.temporal=parseInt(t[2]),t.length>3)switch(t[3]){case"h":case"_KEY":case"_KEY_SHIFT":this.suffix=t[3]}}toString(){var e;return"L".concat(this.spatial,"T").concat(this.temporal).concat((e=this.suffix)!==null&&e!==void 0?e:"")}}function K8(n){return n.source===Ae.Source.ScreenShare||n.constraints.height&&Tr(n.constraints.height)>=1080?"maintain-resolution":"balanced"}const Y8=5e3;class Hd extends UE{get sender(){return this._sender}set sender(e){this._sender=e,this.degradationPreference&&this.setDegradationPreference(this.degradationPreference)}constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3?arguments[3]:void 0;super(e,Ae.Kind.Video,t,i,s),this.simulcastCodecs=new Map,this.degradationPreference="balanced",this.monitorSender=()=>ie(this,void 0,void 0,function*(){if(!this.sender){this._currentBitrate=0;return}let r;try{r=yield this.getSenderStats()}catch(l){this.log.error("could not get audio sender stats",Object.assign(Object.assign({},this.logContext),{error:l}));return}const a=new Map(r.map(l=>[l.rid,l]));if(this.prevStats){let l=0;a.forEach((c,u)=>{var d;const f=(d=this.prevStats)===null||d===void 0?void 0:d.get(u);l+=jd(c,f)}),this._currentBitrate=l}this.prevStats=a}),this.senderLock=new gn}get isSimulcast(){return!!(this.sender&&this.sender.getParameters().encodings.length>1)}startMonitor(e){var t;if(this.signalClient=e,!Sn())return;const i=(t=this.sender)===null||t===void 0?void 0:t.getParameters();i&&(this.encodings=i.encodings),!this.monitorInterval&&(this.monitorInterval=setInterval(()=>{this.monitorSender()},fg))}stop(){this._mediaStreamTrack.getConstraints(),this.simulcastCodecs.forEach(e=>{e.mediaStreamTrack.stop()}),super.stop()}pauseUpstream(){const e=Object.create(null,{pauseUpstream:{get:()=>super.pauseUpstream}});return ie(this,void 0,void 0,function*(){var t,i,s,r,a;yield e.pauseUpstream.call(this);try{for(var l=!0,c=qs(this.simulcastCodecs.values()),u;u=yield c.next(),t=u.done,!t;l=!0)r=u.value,l=!1,yield(a=r.sender)===null||a===void 0?void 0:a.replaceTrack(null)}catch(d){i={error:d}}finally{try{!l&&!t&&(s=c.return)&&(yield s.call(c))}finally{if(i)throw i.error}}})}resumeUpstream(){const e=Object.create(null,{resumeUpstream:{get:()=>super.resumeUpstream}});return ie(this,void 0,void 0,function*(){var t,i,s,r,a;yield e.resumeUpstream.call(this);try{for(var l=!0,c=qs(this.simulcastCodecs.values()),u;u=yield c.next(),t=u.done,!t;l=!0){r=u.value,l=!1;const d=r;yield(a=d.sender)===null||a===void 0?void 0:a.replaceTrack(d.mediaStreamTrack)}}catch(d){i={error:d}}finally{try{!l&&!t&&(s=c.return)&&(yield s.call(c))}finally{if(i)throw i.error}}})}mute(){const e=Object.create(null,{mute:{get:()=>super.mute}});return ie(this,void 0,void 0,function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.log.debug("Track already muted",this.logContext),this):(this.source===Ae.Source.Camera&&!this.isUserProvided&&(this.log.debug("stopping camera track",this.logContext),this._mediaStreamTrack.stop()),yield e.mute.call(this),this)}finally{t()}})}unmute(){const e=Object.create(null,{unmute:{get:()=>super.unmute}});return ie(this,void 0,void 0,function*(){const t=yield this.muteLock.lock();try{return this.isMuted?(this.source===Ae.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{t()}})}setTrackMuted(e){super.setTrackMuted(e);for(const t of this.simulcastCodecs.values())t.mediaStreamTrack.enabled=!e}getSenderStats(){return ie(this,void 0,void 0,function*(){var e;if(!(!((e=this.sender)===null||e===void 0)&&e.getStats))return[];const t=[],i=yield this.sender.getStats();return i.forEach(s=>{var r;if(s.type==="outbound-rtp"){const a={type:"video",streamId:s.id,frameHeight:s.frameHeight,frameWidth:s.frameWidth,framesPerSecond:s.framesPerSecond,framesSent:s.framesSent,firCount:s.firCount,pliCount:s.pliCount,nackCount:s.nackCount,packetsSent:s.packetsSent,bytesSent:s.bytesSent,qualityLimitationReason:s.qualityLimitationReason,qualityLimitationDurations:s.qualityLimitationDurations,qualityLimitationResolutionChanges:s.qualityLimitationResolutionChanges,rid:(r=s.rid)!==null&&r!==void 0?r:s.id,retransmittedPacketsSent:s.retransmittedPacketsSent,targetBitrate:s.targetBitrate,timestamp:s.timestamp},l=i.get(s.remoteId);l&&(a.jitter=l.jitter,a.packetsLost=l.packetsLost,a.roundTripTime=l.roundTripTime),t.push(a)}}),t.sort((s,r)=>{var a,l;return((a=r.frameWidth)!==null&&a!==void 0?a:0)-((l=s.frameWidth)!==null&&l!==void 0?l:0)}),t})}setPublishingQuality(e){const t=[];for(let i=Vn.LOW;i<=Vn.HIGH;i+=1)t.push(new Em({quality:i,enabled:i<=e}));this.log.debug("setting publishing quality. max quality ".concat(e),this.logContext),this.setPublishingLayers(Hs(this.codec),t)}restartTrack(e){return ie(this,void 0,void 0,function*(){var t,i,s,r,a;let l;if(e){const f=tg({video:e});typeof f.video!="boolean"&&(l=f.video)}yield this.restart(l);try{for(var c=!0,u=qs(this.simulcastCodecs.values()),d;d=yield u.next(),t=d.done,!t;c=!0){r=d.value,c=!1;const f=r;f.sender&&((a=f.sender.transport)===null||a===void 0?void 0:a.state)!=="closed"&&(f.mediaStreamTrack=this.mediaStreamTrack.clone(),yield f.sender.replaceTrack(f.mediaStreamTrack))}}catch(f){i={error:f}}finally{try{!c&&!t&&(s=u.return)&&(yield s.call(u))}finally{if(i)throw i.error}}})}setProcessor(e){const t=Object.create(null,{setProcessor:{get:()=>super.setProcessor}});return ie(this,arguments,void 0,function(i){var s=this;let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return(function*(){var a,l,c,u,d,f;if(yield t.setProcessor.call(s,i,r),!((d=s.processor)===null||d===void 0)&&d.processedTrack)try{for(var g=!0,T=qs(s.simulcastCodecs.values()),S;S=yield T.next(),a=S.done,!a;g=!0)u=S.value,g=!1,yield(f=u.sender)===null||f===void 0?void 0:f.replaceTrack(s.processor.processedTrack)}catch(m){l={error:m}}finally{try{!g&&!a&&(c=T.return)&&(yield c.call(T))}finally{if(l)throw l.error}}})()})}setDegradationPreference(e){return ie(this,void 0,void 0,function*(){if(this.degradationPreference=e,this.sender)try{this.log.debug("setting degradationPreference to ".concat(e),this.logContext);const t=this.sender.getParameters();t.degradationPreference=e,this.sender.setParameters(t)}catch(t){this.log.warn("failed to set degradationPreference",Object.assign({error:t},this.logContext))}})}addSimulcastTrack(e,t){if(this.simulcastCodecs.has(e)){this.log.error("".concat(e," already added, skipping adding simulcast codec"),this.logContext);return}const i={codec:e,mediaStreamTrack:this.mediaStreamTrack.clone(),sender:void 0,encodings:t};return this.simulcastCodecs.set(e,i),i}setSimulcastTrackSender(e,t){const i=this.simulcastCodecs.get(e);i&&(i.sender=t,setTimeout(()=>{this.subscribedCodecs&&this.setPublishingCodecs(this.subscribedCodecs)},Y8))}setPublishingCodecs(e){return ie(this,void 0,void 0,function*(){var t,i,s,r,a,l,c;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(Hs(e[0].codec),e[0].qualities),[];this.subscribedCodecs=e;const u=[];try{for(t=!0,i=qs(e);s=yield i.next(),r=s.done,!r;t=!0){c=s.value,t=!1;const d=c;if(!this.codec||this.codec===d.codec)yield this.setPublishingLayers(Hs(d.codec),d.qualities);else{const f=this.simulcastCodecs.get(d.codec);if(this.log.debug("try setPublishingCodec for ".concat(d.codec),Object.assign(Object.assign({},this.logContext),{simulcastCodecInfo:f})),!f||!f.sender){for(const g of d.qualities)if(g.enabled){u.push(d.codec);break}}else f.encodings&&(this.log.debug("try setPublishingLayersForSender ".concat(d.codec),this.logContext),yield jE(f.sender,f.encodings,d.qualities,this.senderLock,Hs(d.codec),this.log,this.logContext))}}}catch(d){a={error:d}}finally{try{!t&&!r&&(l=i.return)&&(yield l.call(i))}finally{if(a)throw a.error}}return u})}setPublishingLayers(e,t){return ie(this,void 0,void 0,function*(){this.log.debug("setting publishing layers",Object.assign(Object.assign({},this.logContext),{qualities:t})),!(!this.sender||!this.encodings)&&(yield jE(this.sender,this.encodings,t,this.senderLock,e,this.log,this.logContext))})}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return ie(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),fE()&&this.isInBackground&&this.source===Ae.Source.Camera&&(this._mediaStreamTrack.enabled=!1)})}}function jE(n,e,t,i,s,r,a){return ie(this,void 0,void 0,function*(){const l=yield i.lock();r.debug("setPublishingLayersForSender",Object.assign(Object.assign({},a),{sender:n,qualities:t,senderEncodings:e}));try{const c=n.getParameters(),{encodings:u}=c;if(!u)return;if(u.length!==e.length){r.warn("cannot set publishing layers, encodings mismatch",Object.assign(Object.assign({},a),{encodings:u,senderEncodings:e}));return}let d=!1;const f=bn();if((f==null?void 0:f.name)==="Chrome"&&br(f==null?void 0:f.version,"133")>0&&u[0].scalabilityMode){const T=u[0],S=new $d(T.scalabilityMode);let m=bo.OFF;if(t.forEach(_=>{_.enabled&&(m===bo.OFF||_.quality>m)&&(m=_.quality)}),m===bo.OFF)T.active&&(T.active=!1,d=!0);else if(!T.active||S.spatial!==m+1){d=!0,T.active=!0;const _=new $d(e[0].scalabilityMode);S.spatial=m+1,S.suffix=_.suffix,S.spatial===1&&(S.suffix=void 0),T.scalabilityMode=S.toString(),T.scaleResolutionDownBy=Math.pow(2,2-m),e[0].maxBitrate&&(T.maxBitrate=e[0].maxBitrate/(T.scaleResolutionDownBy*T.scaleResolutionDownBy))}}else s&&t.some(S=>S.enabled)&&t.forEach(S=>S.enabled=!0),u.forEach((T,S)=>{var m;let _=(m=T.rid)!==null&&m!==void 0?m:"";_===""&&(_="q");const k=qE(_),R=t.find(D=>D.quality===k);R&&T.active!==R.enabled&&(d=!0,T.active=R.enabled,r.debug("setting layer ".concat(R.quality," to ").concat(T.active?"enabled":"disabled"),a),xo()&&(R.enabled?(T.scaleResolutionDownBy=e[S].scaleResolutionDownBy,T.maxBitrate=e[S].maxBitrate,T.maxFrameRate=e[S].maxFrameRate):(T.scaleResolutionDownBy=4,T.maxBitrate=10,T.maxFrameRate=2)))});d&&(c.encodings=u,r.debug("setting encodings",Object.assign(Object.assign({},a),{encodings:c.encodings})),yield n.setParameters(c))}finally{l()}})}function qE(n){switch(n){case"f":return Vn.HIGH;case"h":return Vn.MEDIUM;case"q":return Vn.LOW;default:return Vn.HIGH}}function $E(n,e,t,i){if(!t)return[new oa({quality:Vn.HIGH,width:n,height:e,bitrate:0,ssrc:0})];if(i){const s=t[0].scalabilityMode,r=new $d(s),a=[],l=r.suffix=="h"?1.5:2,c=r.suffix=="h"?2:3;for(let u=0;u<r.spatial;u+=1)a.push(new oa({quality:Math.min(Vn.HIGH,r.spatial-1)-u,width:Math.ceil(n/Math.pow(l,u)),height:Math.ceil(e/Math.pow(l,u)),bitrate:t[0].maxBitrate?Math.ceil(t[0].maxBitrate/Math.pow(c,u)):0,ssrc:0}));return a}return t.map(s=>{var r,a,l;const c=(r=s.scaleResolutionDownBy)!==null&&r!==void 0?r:1;let u=qE((a=s.rid)!==null&&a!==void 0?a:"");return new oa({quality:u,width:Math.ceil(n/c),height:Math.ceil(e/c),bitrate:(l=s.maxBitrate)!==null&&l!==void 0?l:0,ssrc:0})})}const HE="_lossy",zE="_reliable",X8=2*1e3,vg="leave-reconnect";var is;(function(n){n[n.New=0]="New",n[n.Connected=1]="Connected",n[n.Disconnected=2]="Disconnected",n[n.Reconnecting=3]="Reconnecting",n[n.Closed=4]="Closed"})(is||(is={}));class J8 extends ks.EventEmitter{get isClosed(){return this._isClosed}get pendingReconnect(){return!!this.reconnectTimeout}constructor(e){var t;super(),this.options=e,this.rtcConfig={},this.peerConnectionTimeout=dg.peerConnectionTimeout,this.fullReconnectOnNext=!1,this.subscriberPrimary=!1,this.pcState=is.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=At,this.handleDataChannel=i=>ie(this,[i],void 0,function(s){var r=this;let{channel:a}=s;return(function*(){if(a){if(a.label===zE)r.reliableDCSub=a;else if(a.label===HE)r.lossyDCSub=a;else return;r.log.debug("on data channel ".concat(a.id,", ").concat(a.label),r.logContext),a.onmessage=r.handleDataMessage}})()}),this.handleDataMessage=i=>ie(this,void 0,void 0,function*(){var s,r;const a=yield this.dataProcessLock.lock();try{let l;if(i.data instanceof ArrayBuffer)l=i.data;else if(i.data instanceof Blob)l=yield i.data.arrayBuffer();else{this.log.error("unsupported data type",Object.assign(Object.assign({},this.logContext),{data:i.data}));return}const c=vn.fromBinary(new Uint8Array(l));((s=c.value)===null||s===void 0?void 0:s.case)==="speaker"?this.emit(Ge.ActiveSpeakersUpdate,c.value.value.speakers):(((r=c.value)===null||r===void 0?void 0:r.case)==="user"&&Z8(c,c.value.value),this.emit(Ge.DataPacketReceived,c))}finally{a()}}),this.handleDataError=i=>{const r=i.currentTarget.maxRetransmits===0?"lossy":"reliable";if(i instanceof ErrorEvent&&i.error){const{error:a}=i.error;this.log.error("DataChannel error on ".concat(r,": ").concat(i.message),Object.assign(Object.assign({},this.logContext),{error:a}))}else this.log.error("Unknown DataChannel error on ".concat(r),Object.assign(Object.assign({},this.logContext),{event:i}))},this.handleBufferedAmountLow=i=>{const r=i.currentTarget.maxRetransmits===0?It.LOSSY:It.RELIABLE;this.updateAndEmitDCBufferStatus(r)},this.handleDisconnect=(i,s)=>{if(this._isClosed)return;this.log.warn("".concat(i," disconnected"),this.logContext),this.reconnectAttempts===0&&(this.reconnectStart=Date.now());const r=c=>{this.log.warn("could not recover connection after ".concat(this.reconnectAttempts," attempts, ").concat(c,"ms. giving up"),this.logContext),this.emit(Ge.Disconnected),this.close()},a=Date.now()-this.reconnectStart;let l=this.getNextRetryDelay({elapsedMs:a,retryCount:this.reconnectAttempts});if(l===null){r(a);return}i===vg&&(l=0),this.log.debug("reconnecting in ".concat(l,"ms"),this.logContext),this.clearReconnectTimeout(),this.token&&this.regionUrlProvider&&this.regionUrlProvider.updateToken(this.token),this.reconnectTimeout=Ui.setTimeout(()=>this.attemptReconnect(s).finally(()=>this.reconnectTimeout=void 0),l)},this.waitForRestarted=()=>new Promise((i,s)=>{this.pcState===is.Connected&&i();const r=()=>{this.off(Ge.Disconnected,a),i()},a=()=>{this.off(Ge.Restarted,r),s()};this.once(Ge.Restarted,r),this.once(Ge.Disconnected,a)}),this.updateAndEmitDCBufferStatus=i=>{const s=this.isBufferStatusLow(i);typeof s<"u"&&s!==this.dcBufferStatus.get(i)&&(this.dcBufferStatus.set(i,s),this.emit(Ge.DCBufferStatusChanged,s,i))},this.isBufferStatusLow=i=>{const s=this.dataChannelForKind(i);if(s)return s.bufferedAmount<=s.bufferedAmountLowThreshold},this.handleBrowserOnLine=()=>{this.client.currentState===Jt.RECONNECTING&&(this.clearReconnectTimeout(),this.attemptReconnect(To.RR_SIGNAL_DISCONNECTED))},this.log=js((t=e.loggerName)!==null&&t!==void 0?t:es.Engine),this.loggerOptions={loggerName:e.loggerName,loggerContextCb:()=>this.logContext},this.client=new sg(void 0,this.loggerOptions),this.client.signalLatency=this.options.expSignalLatency,this.reconnectPolicy=this.options.reconnectPolicy,this.registerOnLineListener(),this.closingLock=new gn,this.dataProcessLock=new gn,this.dcBufferStatus=new Map([[It.LOSSY,!0],[It.RELIABLE,!0]]),this.client.onParticipantUpdate=i=>this.emit(Ge.ParticipantUpdate,i),this.client.onConnectionQuality=i=>this.emit(Ge.ConnectionQualityUpdate,i),this.client.onRoomUpdate=i=>this.emit(Ge.RoomUpdate,i),this.client.onSubscriptionError=i=>this.emit(Ge.SubscriptionError,i),this.client.onSubscriptionPermissionUpdate=i=>this.emit(Ge.SubscriptionPermissionUpdate,i),this.client.onSpeakersChanged=i=>this.emit(Ge.SpeakersChanged,i),this.client.onStreamStateUpdate=i=>this.emit(Ge.StreamStateChanged,i),this.client.onRequestResponse=i=>this.emit(Ge.SignalRequestResponse,i)}get logContext(){var e,t,i,s,r,a;return{room:(t=(e=this.latestJoinResponse)===null||e===void 0?void 0:e.room)===null||t===void 0?void 0:t.name,roomID:(s=(i=this.latestJoinResponse)===null||i===void 0?void 0:i.room)===null||s===void 0?void 0:s.sid,participant:(a=(r=this.latestJoinResponse)===null||r===void 0?void 0:r.participant)===null||a===void 0?void 0:a.identity,pID:this.participantSid}}join(e,t,i,s){return ie(this,void 0,void 0,function*(){this.url=e,this.token=t,this.signalOpts=i,this.maxJoinAttempts=i.maxRetries;try{this.joinAttempts+=1,this.setupSignalClientCallbacks();const r=yield this.client.join(e,t,i,s);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,this.emit(Ge.SignalConnected,r),r}catch(r){if(r instanceof Gt&&r.reason===Nt.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,t,i,s);throw r}})}close(){return ie(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(Ge.Closing),this.removeAllListeners(),this.deregisterOnLineListener(),this.clearPendingReconnect(),yield this.cleanupPeerConnections(),yield this.cleanupClient()}finally{e()}})}cleanupPeerConnections(){return ie(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 t=i=>{i&&(i.close(),i.onbufferedamountlow=null,i.onclose=null,i.onclosing=null,i.onerror=null,i.onmessage=null,i.onopen=null)};t(this.lossyDC),t(this.lossyDCSub),t(this.reliableDC),t(this.reliableDCSub),this.lossyDC=void 0,this.lossyDCSub=void 0,this.reliableDC=void 0,this.reliableDCSub=void 0})}cleanupClient(){return ie(this,void 0,void 0,function*(){yield this.client.close(),this.client.resetCallbacks()})}addTrack(e){if(this.pendingTrackResolvers[e.cid])throw new $s("a track with the same ID has already been published");return new Promise((t,i)=>{const s=setTimeout(()=>{delete this.pendingTrackResolvers[e.cid],i(new Gt("publication of local track timed out, no response from server",Nt.Timeout))},1e4);this.pendingTrackResolvers[e.cid]={resolve:r=>{clearTimeout(s),t(r)},reject:()=>{clearTimeout(s),i(new Error("Cancelled publication by calling unpublish"))}},this.client.sendAddTrack(e)})}removeTrack(e){if(e.track&&this.pendingTrackResolvers[e.track.id]){const{reject:t}=this.pendingTrackResolvers[e.track.id];t&&t(),delete this.pendingTrackResolvers[e.track.id]}try{return this.pcManager.removeTrack(e),!0}catch(t){this.log.warn("failed to remove track",Object.assign(Object.assign({},this.logContext),{error:t}))}return!1}updateMuteStatus(e,t){this.client.sendMuteTrack(e,t)}get dataSubscriberReadyState(){var e;return(e=this.reliableDCSub)===null||e===void 0?void 0:e.readyState}getConnectedServerAddress(){return ie(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 ie(this,void 0,void 0,function*(){var t,i;if(this.pcManager&&this.pcManager.currentState!==ui.NEW)return;this.participantSid=(t=e.participant)===null||t===void 0?void 0:t.sid;const s=this.makeRTCConfiguration(e);this.pcManager=new I8(s,e.subscriberPrimary,this.loggerOptions),this.emit(Ge.TransportsCreated,this.pcManager.publisher,this.pcManager.subscriber),this.pcManager.onIceCandidate=(r,a)=>{this.client.sendIceCandidate(r,a)},this.pcManager.onPublisherOffer=r=>{this.client.sendOffer(r)},this.pcManager.onDataChannel=this.handleDataChannel,this.pcManager.onStateChange=(r,a,l)=>ie(this,void 0,void 0,function*(){if(this.log.debug("primary PC state changed ".concat(r),this.logContext),["closed","disconnected","failed"].includes(a)&&(this.publisherConnectionPromise=void 0),r===ui.CONNECTED){const d=this.pcState===is.New;this.pcState=is.Connected,d&&this.emit(Ge.Connected,e)}else r===ui.FAILED&&this.pcState===is.Connected&&(this.pcState=is.Disconnected,this.handleDisconnect("peerconnection failed",l==="failed"?To.RR_SUBSCRIBER_FAILED:To.RR_PUBLISHER_FAILED));const c=this.client.isDisconnected||this.client.currentState===Jt.RECONNECTING,u=[ui.FAILED,ui.CLOSING,ui.CLOSED].includes(r);c&&u&&!this._isClosed&&this.emit(Ge.Offline)}),this.pcManager.onTrack=r=>{this.emit(Ge.MediaTrackAdded,r.track,r.streams[0],r.receiver)},Q8((i=e.serverInfo)===null||i===void 0?void 0:i.protocol)||this.createDataChannels()})}setupSignalClientCallbacks(){this.client.onAnswer=e=>ie(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,t)=>{this.pcManager&&(this.log.debug("got ICE candidate from peer",Object.assign(Object.assign({},this.logContext),{candidate:e,target:t})),this.pcManager.addIceCandidate(e,t))},this.client.onOffer=e=>ie(this,void 0,void 0,function*(){if(!this.pcManager)return;const t=yield this.pcManager.createSubscriberAnswerFromOffer(e);this.client.sendAnswer(t)}),this.client.onLocalTrackPublished=e=>{var t;if(this.log.debug("received trackPublishedResponse",Object.assign(Object.assign({},this.logContext),{cid:e.cid,track:(t=e.track)===null||t===void 0?void 0:t.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:i}=this.pendingTrackResolvers[e.cid];delete this.pendingTrackResolvers[e.cid],i(e.track)},this.client.onLocalTrackUnpublished=e=>{this.emit(Ge.LocalTrackUnpublished,e)},this.client.onLocalTrackSubscribed=e=>{this.emit(Ge.LocalTrackSubscribed,e)},this.client.onTokenRefresh=e=>{this.token=e},this.client.onRemoteMuteChanged=(e,t)=>{this.emit(Ge.RemoteMute,e,t)},this.client.onSubscribedQualityUpdate=e=>{this.emit(Ge.SubscribedQualityUpdate,e)},this.client.onRoomMoved=e=>{var t;this.participantSid=(t=e.participant)===null||t===void 0?void 0:t.sid,this.latestJoinResponse&&(this.latestJoinResponse.room=e.room),this.emit(Ge.RoomMoved,e)},this.client.onClose=()=>{this.handleDisconnect("signal",To.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 Co.DISCONNECT:this.emit(Ge.Disconnected,e==null?void 0:e.reason),this.close();break;case Co.RECONNECT:this.fullReconnectOnNext=!0,this.handleDisconnect(vg);break;case Co.RESUME:this.handleDisconnect(vg)}}}makeRTCConfiguration(e){var t;const i=Object.assign({},this.rtcConfig);if(!((t=this.signalOpts)===null||t===void 0)&&t.e2eeEnabled&&(this.log.debug("E2EE - setting up transports with insertable streams",this.logContext),i.encodedInsertableStreams=!0),e.iceServers&&!i.iceServers){const s=[];e.iceServers.forEach(r=>{const a={urls:r.urls};r.username&&(a.username=r.username),r.credential&&(a.credential=r.credential),s.push(a)}),i.iceServers=s}return e.clientConfiguration&&e.clientConfiguration.forceRelay===Jl.ENABLED&&(i.iceTransportPolicy="relay"),i.sdpSemantics="unified-plan",i.continualGatheringPolicy="gather_continually",i}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(HE,{ordered:!1,maxRetransmits:0}),this.reliableDC=this.pcManager.createPublisherDataChannel(zE,{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,t,i){return ie(this,void 0,void 0,function*(){if(Hm())return yield this.createTransceiverRTCRtpSender(e,t,i);if(zm())return this.log.warn("using add-track fallback",this.logContext),yield this.createRTCRtpSender(e.mediaStreamTrack);throw new Ei("Required webRTC APIs not supported on this device")})}createSimulcastSender(e,t,i,s){return ie(this,void 0,void 0,function*(){if(Hm())return this.createSimulcastTransceiverSender(e,t,i,s);if(zm())return this.log.debug("using add-track fallback",this.logContext),this.createRTCRtpSender(e.mediaStreamTrack);throw new Ei("Cannot stream on this device")})}createTransceiverRTCRtpSender(e,t,i){return ie(this,void 0,void 0,function*(){if(!this.pcManager)throw new Ei("publisher is closed");const s=[];e.mediaStream&&s.push(e.mediaStream),Po(e)&&(e.codec=t.videoCodec);const r={direction:"sendonly",streams:s};return i&&(r.sendEncodings=i),(yield this.pcManager.addPublisherTransceiver(e.mediaStreamTrack,r)).sender})}createSimulcastTransceiverSender(e,t,i,s){return ie(this,void 0,void 0,function*(){if(!this.pcManager)throw new Ei("publisher is closed");const r={direction:"sendonly"};s&&(r.sendEncodings=s);const a=yield this.pcManager.addPublisherTransceiver(t.mediaStreamTrack,r);if(i.videoCodec)return e.setSimulcastTrackSender(i.videoCodec,a.sender),a.sender})}createRTCRtpSender(e){return ie(this,void 0,void 0,function*(){if(!this.pcManager)throw new Ei("publisher is closed");return this.pcManager.addPublisherTrack(e)})}attemptReconnect(e){return ie(this,void 0,void 0,function*(){var t,i,s;if(!this._isClosed){if(this.attemptingReconnect){At.warn("already attempting reconnect, returning early",this.logContext);return}(((t=this.clientConfiguration)===null||t===void 0?void 0:t.resumeConnection)===Jl.DISABLED||((s=(i=this.pcManager)===null||i===void 0?void 0:i.currentState)!==null&&s!==void 0?s:ui.NEW)===ui.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 a=!0;r instanceof Ei?(this.log.debug("received unrecoverable error",Object.assign(Object.assign({},this.logContext),{error:r})),a=!1):r instanceof No||(this.fullReconnectOnNext=!0),a?this.handleDisconnect("reconnect",To.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(Ge.Disconnected),yield this.close())}finally{this.attemptingReconnect=!1}}})}getNextRetryDelay(e){try{return this.reconnectPolicy.nextRetryDelayInMs(e)}catch(t){this.log.warn("encountered error in reconnect policy",Object.assign(Object.assign({},this.logContext),{error:t}))}return null}restartConnection(e){return ie(this,void 0,void 0,function*(){var t,i,s;try{if(!this.url||!this.token)throw new Ei("could not reconnect, url or token not saved");this.log.info("reconnecting, attempt: ".concat(this.reconnectAttempts),this.logContext),this.emit(Ge.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 No;r=yield this.join(e??this.url,this.token,this.signalOpts)}catch(a){throw a instanceof Gt&&a.reason===Nt.NotAllowed?new Ei("could not reconnect, token might be expired"):new No}if(this.shouldFailNext)throw this.shouldFailNext=!1,new Error("simulated failure");if(this.client.setReconnected(),this.emit(Ge.SignalRestarted,r),yield this.waitForPCReconnected(),this.client.currentState!==Jt.CONNECTED)throw new No("Signal connection got severed during reconnect");(t=this.regionUrlProvider)===null||t===void 0||t.resetAttempts(),this.emit(Ge.Restarted)}catch(r){const a=yield(i=this.regionUrlProvider)===null||i===void 0?void 0:i.getNextBestRegionUrl();if(a){yield this.restartConnection(a);return}else throw(s=this.regionUrlProvider)===null||s===void 0||s.resetAttempts(),r}})}resumeConnection(e){return ie(this,void 0,void 0,function*(){var t;if(!this.url||!this.token)throw new Ei("could not reconnect, url or token not saved");if(!this.pcManager)throw new Ei("publisher and subscriber connections unset");this.log.info("resuming signal connection, attempt ".concat(this.reconnectAttempts),this.logContext),this.emit(Ge.Resuming);let i;try{this.setupSignalClientCallbacks(),i=yield this.client.reconnect(this.url,this.token,this.participantSid,e)}catch(s){let r="";throw s instanceof Error&&(r=s.message,this.log.error(s.message,Object.assign(Object.assign({},this.logContext),{error:s}))),s instanceof Gt&&s.reason===Nt.NotAllowed?new Ei("could not reconnect, token might be expired"):s instanceof Gt&&s.reason===Nt.LeaveRequest?s:new No(r)}if(this.emit(Ge.SignalResumed),i){const s=this.makeRTCConfiguration(i);this.pcManager.updateConfiguration(s)}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!==Jt.CONNECTED)throw new No("Signal connection got severed during reconnect");this.client.setReconnected(),((t=this.reliableDC)===null||t===void 0?void 0:t.readyState)==="open"&&this.reliableDC.id===null&&this.createDataChannels(),this.emit(Ge.Resumed)})}waitForPCInitialConnection(e,t){return ie(this,void 0,void 0,function*(){if(!this.pcManager)throw new Ei("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(t,e)})}waitForPCReconnected(){return ie(this,void 0,void 0,function*(){this.pcState=is.Reconnecting,this.log.debug("waiting for peer connection to reconnect",this.logContext);try{if(yield Tn(X8),!this.pcManager)throw new Ei("PC manager is closed");yield this.pcManager.ensurePCTransportConnection(void 0,this.peerConnectionTimeout),this.pcState=is.Connected}catch(e){throw this.pcState=is.Disconnected,new Gt("could not establish PC connection, ".concat(e.message),Nt.InternalError)}})}publishRpcResponse(e,t,i,s){return ie(this,void 0,void 0,function*(){const r=new vn({destinationIdentities:[e],kind:It.RELIABLE,value:{case:"rpcResponse",value:new XC({requestId:t,value:s?{case:"error",value:s.toProto()}:{case:"payload",value:i??""}})}});yield this.sendDataPacket(r,It.RELIABLE)})}publishRpcAck(e,t){return ie(this,void 0,void 0,function*(){const i=new vn({destinationIdentities:[e],kind:It.RELIABLE,value:{case:"rpcAck",value:new YC({requestId:t})}});yield this.sendDataPacket(i,It.RELIABLE)})}sendDataPacket(e,t){return ie(this,void 0,void 0,function*(){const i=e.toBinary();yield this.ensurePublisherConnected(t);const s=this.dataChannelForKind(t);s&&s.send(i),this.updateAndEmitDCBufferStatus(t)})}waitForBufferStatusLow(e){return new Promise((t,i)=>ie(this,void 0,void 0,function*(){if(this.isBufferStatusLow(e))t();else{const s=()=>i("Engine closed");for(this.once(Ge.Closing,s);!this.dcBufferStatus.get(e);)yield Tn(10);this.off(Ge.Closing,s),t()}}))}ensureDataTransportConnected(e){return ie(this,arguments,void 0,function(t){var i=this;let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.subscriberPrimary;return(function*(){var r;if(!i.pcManager)throw new Ei("PC manager is closed");const a=s?i.pcManager.subscriber:i.pcManager.publisher,l=s?"Subscriber":"Publisher";if(!a)throw new Gt("".concat(l," connection not set"),Nt.InternalError);let c=!1;!s&&!i.dataChannelForKind(t,s)&&(i.createDataChannels(),c=!0),!c&&!s&&!i.pcManager.publisher.isICEConnected&&i.pcManager.publisher.getICEConnectionState()!=="checking"&&(c=!0),c&&i.negotiate();const u=i.dataChannelForKind(t,s);if((u==null?void 0:u.readyState)==="open")return;const d=new Date().getTime()+i.peerConnectionTimeout;for(;new Date().getTime()<d;){if(a.isICEConnected&&((r=i.dataChannelForKind(t,s))===null||r===void 0?void 0:r.readyState)==="open")return;yield Tn(50)}throw new Gt("could not establish ".concat(l," connection, state: ").concat(a.getICEConnectionState()),Nt.InternalError)})()})}ensurePublisherConnected(e){return ie(this,void 0,void 0,function*(){this.publisherConnectionPromise||(this.publisherConnectionPromise=this.ensureDataTransportConnected(e,!1)),yield this.publisherConnectionPromise})}verifyTransport(){return!(!this.pcManager||this.pcManager.currentState!==ui.CONNECTED||!this.client.ws||this.client.ws.readyState===WebSocket.CLOSED)}negotiate(){return ie(this,void 0,void 0,function*(){return new Promise((e,t)=>ie(this,void 0,void 0,function*(){if(!this.pcManager){t(new Um("PC manager is closed"));return}this.pcManager.requirePublisher(),this.pcManager.publisher.getTransceivers().length==0&&!this.lossyDC&&!this.reliableDC&&this.createDataChannels();const i=new AbortController,s=()=>{i.abort(),this.log.debug("engine disconnected while negotiation was ongoing",this.logContext),e()};this.isClosed&&t("cannot negotiate on closed engine"),this.on(Ge.Closing,s),this.pcManager.publisher.once(Io.RTPVideoPayloadTypes,r=>{const a=new Map;r.forEach(l=>{const c=l.codec.toLowerCase();i8(c)&&a.set(l.payload,c)}),this.emit(Ge.RTPVideoMapUpdate,a)});try{yield this.pcManager.negotiate(i),e()}catch(r){r instanceof Um&&(this.fullReconnectOnNext=!0),this.handleDisconnect("negotiation",To.RR_UNKNOWN),t(r)}finally{this.off(Ge.Closing,s)}}))})}dataChannelForKind(e,t){if(t){if(e===It.LOSSY)return this.lossyDCSub;if(e===It.RELIABLE)return this.reliableDCSub}else{if(e===It.LOSSY)return this.lossyDC;if(e===It.RELIABLE)return this.reliableDC}}sendSyncState(e,t){var i,s;if(!this.pcManager){this.log.warn("sync state cannot be sent without peer connection setup",this.logContext);return}const r=this.pcManager.subscriber.getLocalDescription(),a=this.pcManager.subscriber.getRemoteDescription(),l=(s=(i=this.signalOpts)===null||i===void 0?void 0:i.autoSubscribe)!==null&&s!==void 0?s:!0,c=new Array,u=new Array;e.forEach(d=>{d.isDesired!==l&&c.push(d.trackSid),d.isEnabled||u.push(d.trackSid)}),this.client.sendSyncState(new pk({answer:r?Vd({sdp:r.sdp,type:r.type}):void 0,offer:a?Vd({sdp:a.sdp,type:a.type}):void 0,subscription:new Ed({trackSids:c,subscribe:!l,participantTracks:[]}),publishTracks:d8(t),dataChannels:this.dataChannelsInfo(),trackSidsDisabled:u}))}failNext(){this.shouldFailNext=!0}dataChannelsInfo(){const e=[],t=(i,s)=>{(i==null?void 0:i.id)!==void 0&&i.id!==null&&e.push(new mk({label:i.label,id:i.id,target:s}))};return t(this.dataChannelForKind(It.LOSSY),Zn.PUBLISHER),t(this.dataChannelForKind(It.RELIABLE),Zn.PUBLISHER),t(this.dataChannelForKind(It.LOSSY,!0),Zn.SUBSCRIBER),t(this.dataChannelForKind(It.RELIABLE,!0),Zn.SUBSCRIBER),e}clearReconnectTimeout(){this.reconnectTimeout&&Ui.clearTimeout(this.reconnectTimeout)}clearPendingReconnect(){this.clearReconnectTimeout(),this.reconnectAttempts=0}registerOnLineListener(){Sn()&&window.addEventListener("online",this.handleBrowserOnLine)}deregisterOnLineListener(){Sn()&&window.removeEventListener("online",this.handleBrowserOnLine)}}class No extends Error{}function Q8(n){return n!==void 0&&n>13}function Z8(n,e){const t=n.participantIdentity?n.participantIdentity:e.participantIdentity;n.participantIdentity=t,e.participantIdentity=t;const i=n.destinationIdentities.length!==0?n.destinationIdentities:e.destinationIdentities;n.destinationIdentities=i,e.destinationIdentities=i}class bg{constructor(e,t){this.lastUpdateAt=0,this.settingsCacheTime=3e3,this.attemptedRegions=[],this.serverUrl=new URL(e),this.token=t}updateToken(e){this.token=e}isCloud(){return Wm(this.serverUrl)}getServerUrl(){return this.serverUrl}getNextBestRegionUrl(e){return ie(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 t=this.regionSettings.regions.filter(i=>!this.attemptedRegions.find(s=>s.url===i.url));if(t.length>0){const i=t[0];return this.attemptedRegions.push(i),At.debug("next region: ".concat(i.region)),i.url}else return null})}resetAttempts(){this.attemptedRegions=[]}fetchRegionSettings(e){return ie(this,void 0,void 0,function*(){const t=yield fetch("".concat(e5(this.serverUrl),"/regions"),{headers:{authorization:"Bearer ".concat(this.token)},signal:e});if(t.ok){const i=yield t.json();return this.lastUpdateAt=Date.now(),i}else throw new Gt("Could not fetch region settings: ".concat(t.statusText),t.status===401?Nt.NotAllowed:Nt.InternalError,t.status)})}setServerReportedRegions(e){this.regionSettings=e,this.lastUpdateAt=Date.now()}}function e5(n){return"".concat(n.protocol.replace("ws","http"),"//").concat(n.host,"/settings")}class GE{get info(){return this._info}constructor(e,t,i){this.reader=t,this.totalByteSize=i,this._info=e,this.bytesReceived=0}}class t5 extends GE{handleChunkReceived(e){var t;this.bytesReceived+=e.content.byteLength;const i=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(t=this.onProgress)===null||t===void 0||t.call(this,i)}[Symbol.asyncIterator](){const e=this.reader.getReader();return{next:()=>ie(this,void 0,void 0,function*(){try{const{done:t,value:i}=yield e.read();return t?{done:!0,value:void 0}:(this.handleChunkReceived(i),{done:!1,value:i.content})}catch{return{done:!0,value:void 0}}}),return(){return ie(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return ie(this,void 0,void 0,function*(){var e,t,i,s;let r=new Set;try{for(var a=!0,l=qs(this),c;c=yield l.next(),e=c.done,!e;a=!0){s=c.value,a=!1;const u=s;r.add(u)}}catch(u){t={error:u}}finally{try{!a&&!e&&(i=l.return)&&(yield i.call(l))}finally{if(t)throw t.error}}return Array.from(r)})}}class i5 extends GE{constructor(e,t,i){super(e,t,i),this.receivedChunks=new Map}handleChunkReceived(e){var t;const i=Ud(e.chunkIndex),s=this.receivedChunks.get(i);if(s&&s.version>e.version)return;this.receivedChunks.set(i,e),this.bytesReceived+=e.content.byteLength;const r=this.totalByteSize?this.bytesReceived/this.totalByteSize:void 0;(t=this.onProgress)===null||t===void 0||t.call(this,r)}[Symbol.asyncIterator](){const e=this.reader.getReader(),t=new TextDecoder;return{next:()=>ie(this,void 0,void 0,function*(){try{const{done:i,value:s}=yield e.read();return i?{done:!0,value:void 0}:(this.handleChunkReceived(s),{done:!1,value:t.decode(s.content)})}catch{return{done:!0,value:void 0}}}),return(){return ie(this,void 0,void 0,function*(){return e.releaseLock(),{done:!0,value:void 0}})}}}readAll(){return ie(this,void 0,void 0,function*(){var e,t,i,s;let r="";try{for(var a=!0,l=qs(this),c;c=yield l.next(),e=c.done,!e;a=!0)s=c.value,a=!1,r+=s}catch(u){t={error:u}}finally{try{!a&&!e&&(i=l.return)&&(yield i.call(l))}finally{if(t)throw t.error}}return r})}}class WE{constructor(e,t,i){this.writableStream=e,this.defaultWriter=e.getWriter(),this.onClose=i,this.info=t}write(e){return this.defaultWriter.write(e)}close(){return ie(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 n5 extends WE{}class s5 extends WE{}class KE extends Ae{constructor(e,t,i,s,r){super(e,i,r),this.sid=t,this.receiver=s}get isLocal(){return!1}setMuted(e){this.isMuted!==e&&(this.isMuted=e,this._mediaStreamTrack.enabled=!e,this.emit(e?He.Muted:He.Unmuted,this))}setMediaStream(e){this.mediaStream=e;const t=i=>{i.track===this._mediaStreamTrack&&(e.removeEventListener("removetrack",t),this.receiver&&"playoutDelayHint"in this.receiver&&(this.receiver.playoutDelayHint=void 0),this.receiver=void 0,this._currentBitrate=0,this.emit(He.Ended,this))};e.addEventListener("removetrack",t)}start(){this.startMonitor(),super.enable()}stop(){this.stopMonitor(),super.disable()}getRTCStatsReport(){return ie(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(),fg)),h8()&&this.registerTimeSyncUpdate()}registerTimeSyncUpdate(){const e=()=>{var t;this.timeSyncHandle=requestAnimationFrame(()=>e());const i=(t=this.receiver)===null||t===void 0?void 0:t.getSynchronizationSources()[0];if(i){const{timestamp:s,rtpTimestamp:r}=i;r&&this.rtpTimestamp!==r&&(this.emit(He.TimeSyncUpdate,{timestamp:s,rtpTimestamp:r}),this.rtpTimestamp=r)}};e()}}class r5 extends KE{constructor(e,t,i,s,r,a){super(e,t,Ae.Kind.Audio,i,a),this.monitorReceiver=()=>ie(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const l=yield this.getReceiverStats();l&&this.prevStats&&this.receiver&&(this._currentBitrate=jd(l,this.prevStats)),this.prevStats=l}),this.audioContext=s,this.webAudioPluginNodes=[],r&&(this.sinkId=r.deviceId)}setVolume(e){var t;for(const i of this.attachedElements)this.audioContext?(t=this.gainNode)===null||t===void 0||t.gain.setTargetAtTime(e,0,.1):i.volume=e;Es()&&this._mediaStreamTrack._setVolume(e),this.elementVolume=e}getVolume(){if(this.elementVolume)return this.elementVolume;if(Es())return 1;let e=0;return this.attachedElements.forEach(t=>{t.volume>e&&(e=t.volume)}),e}setSinkId(e){return ie(this,void 0,void 0,function*(){this.sinkId=e,yield Promise.all(this.attachedElements.map(t=>{if(Gm(t))return t.setSinkId(e)}))})}attach(e){const t=this.attachedElements.length===0;return e?super.attach(e):e=super.attach(),this.sinkId&&Gm(e)&&e.setSinkId(this.sinkId).catch(i=>{this.log.error("Failed to set sink id on remote audio track",i,this.logContext)}),this.audioContext&&t&&(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 t;return e?(t=super.detach(e),this.audioContext&&(this.attachedElements.length>0?this.connectWebAudio(this.audioContext,this.attachedElements[0]):this.disconnectWebAudio())):(t=super.detach(),this.disconnectWebAudio()),t}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,t){this.disconnectWebAudio(),this.sourceNode=e.createMediaStreamSource(t.srcObject);let i=this.sourceNode;this.webAudioPluginNodes.forEach(s=>{i.connect(s),i=s}),this.gainNode=e.createGain(),i.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(He.AudioPlaybackFailed,new Error("Audio Context couldn't be started automatically"))}).catch(s=>{this.emit(He.AudioPlaybackFailed,s)})}disconnectWebAudio(){var e,t;(e=this.gainNode)===null||e===void 0||e.disconnect(),(t=this.sourceNode)===null||t===void 0||t.disconnect(),this.gainNode=void 0,this.sourceNode=void 0}getReceiverStats(){return ie(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let t;return e.forEach(i=>{i.type==="inbound-rtp"&&(t={type:"audio",streamId:i.id,timestamp:i.timestamp,jitter:i.jitter,bytesReceived:i.bytesReceived,concealedSamples:i.concealedSamples,concealmentEvents:i.concealmentEvents,silentConcealedSamples:i.silentConcealedSamples,silentConcealmentEvents:i.silentConcealmentEvents,totalAudioEnergy:i.totalAudioEnergy,totalSamplesDuration:i.totalSamplesDuration})}),t})}}const Tg=100;class a5 extends KE{constructor(e,t,i,s,r){super(e,t,Ae.Kind.Video,i,r),this.elementInfos=[],this.monitorReceiver=()=>ie(this,void 0,void 0,function*(){if(!this.receiver){this._currentBitrate=0;return}const a=yield this.getReceiverStats();a&&this.prevStats&&this.receiver&&(this._currentBitrate=jd(a,this.prevStats)),this.prevStats=a}),this.debouncedHandleResize=cg(()=>{this.updateDimensions()},Tg),this.adaptiveStreamSettings=s}get isAdaptiveStream(){return this.adaptiveStreamSettings!==void 0}get mediaStreamTrack(){return this._mediaStreamTrack}setMuted(e){super.setMuted(e),this.attachedElements.forEach(t=>{e?wo(this._mediaStreamTrack,t):Eo(this._mediaStreamTrack,t)})}attach(e){if(e?super.attach(e):e=super.attach(),this.adaptiveStreamSettings&&this.elementInfos.find(t=>t.element===e)===void 0){const t=new o5(e);this.observeElementInfo(t)}return e}observeElementInfo(e){this.adaptiveStreamSettings&&this.elementInfos.find(t=>t===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 t=this.elementInfos.filter(i=>i===e);for(const i of t)i.stopObserving();this.elementInfos=this.elementInfos.filter(i=>i!==e),this.updateVisibility(),this.debouncedHandleResize()}detach(e){let t=[];if(e)return this.stopObservingElement(e),super.detach(e);t=super.detach();for(const i of t)this.stopObservingElement(i);return t}getDecoderImplementation(){var e;return(e=this.prevStats)===null||e===void 0?void 0:e.decoderImplementation}getReceiverStats(){return ie(this,void 0,void 0,function*(){if(!this.receiver||!this.receiver.getStats)return;const e=yield this.receiver.getStats();let t,i="",s=new Map;return e.forEach(r=>{r.type==="inbound-rtp"?(i=r.codecId,t={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"&&s.set(r.id,r)}),t&&i!==""&&s.get(i)&&(t.mimeType=s.get(i).mimeType),t})}stopObservingElement(e){const t=this.elementInfos.filter(i=>i.element===e);for(const i of t)this.stopObservingElementInfo(i)}handleAppVisibilityChanged(){const e=Object.create(null,{handleAppVisibilityChanged:{get:()=>super.handleAppVisibilityChanged}});return ie(this,void 0,void 0,function*(){yield e.handleAppVisibilityChanged.call(this),this.isAdaptiveStream&&this.updateVisibility()})}updateVisibility(){var e,t;const i=this.elementInfos.reduce((l,c)=>Math.max(l,c.visibilityChangedAt||0),0),s=!((t=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pauseVideoInBackground)!==null&&t!==void 0)||t?this.isInBackground:!1,r=this.elementInfos.some(l=>l.pictureInPicture),a=this.elementInfos.some(l=>l.visible)&&!s||r;if(this.lastVisible!==a){if(!a&&Date.now()-i<Tg){Ui.setTimeout(()=>{this.updateVisibility()},Tg);return}this.lastVisible=a,this.emit(He.VisibilityChanged,a,this)}}updateDimensions(){var e,t;let i=0,s=0;const r=this.getPixelDensity();for(const a of this.elementInfos){const l=a.width()*r,c=a.height()*r;l+c>i+s&&(i=l,s=c)}((e=this.lastDimensions)===null||e===void 0?void 0:e.width)===i&&((t=this.lastDimensions)===null||t===void 0?void 0:t.height)===s||(this.lastDimensions={width:i,height:s},this.emit(He.VideoDimensionsChanged,this.lastDimensions,this))}getPixelDensity(){var e;const t=(e=this.adaptiveStreamSettings)===null||e===void 0?void 0:e.pixelDensity;return t==="screen"?gE():t||(gE()>2?2:1)}}class o5{get visible(){return this.isPiP||this.isIntersecting}get pictureInPicture(){return this.isPiP}constructor(e,t){this.onVisibilityChanged=i=>{var s;const{target:r,isIntersecting:a}=i;r===this.element&&(this.isIntersecting=a,this.isPiP=rc(this.element),this.visibilityChangedAt=Date.now(),(s=this.handleVisibilityChanged)===null||s===void 0||s.call(this))},this.onEnterPiP=()=>{var i,s,r;(s=(i=window.documentPictureInPicture)===null||i===void 0?void 0:i.window)===null||s===void 0||s.addEventListener("pagehide",this.onLeavePiP),this.isPiP=rc(this.element),(r=this.handleVisibilityChanged)===null||r===void 0||r.call(this)},this.onLeavePiP=()=>{var i;this.isPiP=rc(this.element),(i=this.handleVisibilityChanged)===null||i===void 0||i.call(this)},this.element=e,this.isIntersecting=t??Sg(e),this.isPiP=Sn()&&rc(e),this.visibilityChangedAt=0}width(){return this.element.clientWidth}height(){return this.element.clientHeight}observe(){var e,t,i;this.isIntersecting=Sg(this.element),this.isPiP=rc(this.element),this.element.handleResize=()=>{var s;(s=this.handleResize)===null||s===void 0||s.call(this)},this.element.handleVisibilityChanged=this.onVisibilityChanged,vE().observe(this.element),yE().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),(i=(t=window.documentPictureInPicture)===null||t===void 0?void 0:t.window)===null||i===void 0||i.addEventListener("pagehide",this.onLeavePiP)}stopObserving(){var e,t,i,s,r;(e=vE())===null||e===void 0||e.unobserve(this.element),(t=yE())===null||t===void 0||t.unobserve(this.element),this.element.removeEventListener("enterpictureinpicture",this.onEnterPiP),this.element.removeEventListener("leavepictureinpicture",this.onLeavePiP),(i=window.documentPictureInPicture)===null||i===void 0||i.removeEventListener("enter",this.onEnterPiP),(r=(s=window.documentPictureInPicture)===null||s===void 0?void 0:s.window)===null||r===void 0||r.removeEventListener("pagehide",this.onLeavePiP)}}function rc(n){var e,t;return document.pictureInPictureElement===n?!0:!((e=window.documentPictureInPicture)===null||e===void 0)&&e.window?Sg(n,(t=window.documentPictureInPicture)===null||t===void 0?void 0:t.window):!1}function Sg(n,e){const t=e||window;let i=n.offsetTop,s=n.offsetLeft;const r=n.offsetWidth,a=n.offsetHeight,{hidden:l}=n,{display:c}=getComputedStyle(n);for(;n.offsetParent;)n=n.offsetParent,i+=n.offsetTop,s+=n.offsetLeft;return i<t.pageYOffset+t.innerHeight&&s<t.pageXOffset+t.innerWidth&&i+a>t.pageYOffset&&s+r>t.pageXOffset&&!l&&c!=="none"}class Gs extends ks.EventEmitter{constructor(e,t,i,s){var r;super(),this.metadataMuted=!1,this.encryption=An.NONE,this.log=At,this.handleMuted=()=>{this.emit(He.Muted)},this.handleUnmuted=()=>{this.emit(He.Unmuted)},this.log=js((r=s==null?void 0:s.loggerName)!==null&&r!==void 0?r:es.Publication),this.loggerContextCb=this.loggerContextCb,this.setMaxListeners(100),this.kind=e,this.trackSid=t,this.trackName=i,this.source=Ae.Source.Unknown}setTrack(e){this.track&&(this.track.off(He.Muted,this.handleMuted),this.track.off(He.Unmuted,this.handleUnmuted)),this.track=e,e&&(e.on(He.Muted,this.handleMuted),e.on(He.Unmuted,this.handleUnmuted))}get logContext(){var e;return Object.assign(Object.assign({},(e=this.loggerContextCb)===null||e===void 0?void 0:e.call(this)),wt(this))}get isMuted(){return this.metadataMuted}get isEnabled(){return!0}get isSubscribed(){return this.track!==void 0}get isEncrypted(){return this.encryption!==An.NONE}get audioTrack(){if(ws(this.track))return this.track}get videoTrack(){if(Po(this.track))return this.track}updateInfo(e){this.trackSid=e.sid,this.trackName=e.name,this.source=Ae.sourceFromProto(e.source),this.mimeType=e.mimeType,this.kind===Ae.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(n){(function(e){e.Desired="desired",e.Subscribed="subscribed",e.Unsubscribed="unsubscribed"})(n.SubscriptionStatus||(n.SubscriptionStatus={})),(function(e){e.Allowed="allowed",e.NotAllowed="not_allowed"})(n.PermissionStatus||(n.PermissionStatus={}))})(Gs||(Gs={}));class _g extends Gs{get isUpstreamPaused(){var e;return(e=this.track)===null||e===void 0?void 0:e.isUpstreamPaused}constructor(e,t,i,s){super(e,t.sid,t.name,s),this.track=void 0,this.handleTrackEnded=()=>{this.emit(He.Ended)},this.updateInfo(t),this.setTrack(i)}setTrack(e){this.track&&this.track.off(He.Ended,this.handleTrackEnded),super.setTrack(e),e&&e.on(He.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 ie(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.mute()})}unmute(){return ie(this,void 0,void 0,function*(){var e;return(e=this.track)===null||e===void 0?void 0:e.unmute()})}pauseUpstream(){return ie(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.pauseUpstream()})}resumeUpstream(){return ie(this,void 0,void 0,function*(){var e;yield(e=this.track)===null||e===void 0?void 0:e.resumeUpstream()})}getTrackFeatures(){var e;if(ws(this.track)){const t=this.track.getSourceTrackSettings(),i=new Set;return t.autoGainControl&&i.add(Ni.TF_AUTO_GAIN_CONTROL),t.echoCancellation&&i.add(Ni.TF_ECHO_CANCELLATION),t.noiseSuppression&&i.add(Ni.TF_NOISE_SUPPRESSION),t.channelCount&&t.channelCount>1&&i.add(Ni.TF_STEREO),!((e=this.options)===null||e===void 0)&&e.dtx||i.add(Ni.TF_NO_DTX),this.track.enhancedNoiseCancellation&&i.add(Ni.TF_ENHANCED_NOISE_CANCELLATION),Array.from(i.values())}else return[]}}function ac(n,e){return ie(this,void 0,void 0,function*(){n??(n={});let t=!1;const{audioProcessor:i,videoProcessor:s,optionsWithoutProcessor:r}=kE(n);let a=r.audio,l=r.video;if(i&&typeof r.audio=="object"&&(r.audio.processor=i),s&&typeof r.video=="object"&&(r.video.processor=s),n.audio&&typeof r.audio=="object"&&typeof r.audio.deviceId=="string"){const f=r.audio.deviceId;r.audio.deviceId={exact:f},t=!0,a=Object.assign(Object.assign({},r.audio),{deviceId:{ideal:f}})}if(r.video&&typeof r.video=="object"&&typeof r.video.deviceId=="string"){const f=r.video.deviceId;r.video.deviceId={exact:f},t=!0,l=Object.assign(Object.assign({},r.video),{deviceId:{ideal:f}})}(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 c=SE(r,ME,OE),u=tg(c),d=navigator.mediaDevices.getUserMedia(u);r.audio&&(Ri.userMediaPromiseMap.set("audioinput",d),d.catch(()=>Ri.userMediaPromiseMap.delete("audioinput"))),r.video&&(Ri.userMediaPromiseMap.set("videoinput",d),d.catch(()=>Ri.userMediaPromiseMap.delete("videoinput")));try{const f=yield d;return yield Promise.all(f.getTracks().map(g=>ie(this,void 0,void 0,function*(){const T=g.kind==="audio";let S=T?c.audio:c.video;(typeof S=="boolean"||!S)&&(S={});let m;const _=T?u.audio:u.video;typeof _!="boolean"&&(m=_);const k=g.getSettings().deviceId;m!=null&&m.deviceId&&Tr(m.deviceId)!==k?m.deviceId=k:m||(m={deviceId:k});const R=U8(g,m,e);return R.kind===Ae.Kind.Video?R.source=Ae.Source.Camera:R.kind===Ae.Kind.Audio&&(R.source=Ae.Source.Microphone),R.mediaStream=f,ws(R)&&i?yield R.setProcessor(i):Po(R)&&s&&(yield R.setProcessor(s)),R})))}catch(f){if(!t)throw f;return ac(Object.assign(Object.assign({},n),{audio:a,video:l}),e)}})}function l5(n){return ie(this,void 0,void 0,function*(){return(yield ac({audio:!1,video:!0}))[0]})}function c5(n){return ie(this,void 0,void 0,function*(){return(yield ac({audio:!0,video:!1}))[0]})}var Cr;(function(n){n.Excellent="excellent",n.Good="good",n.Poor="poor",n.Lost="lost",n.Unknown="unknown"})(Cr||(Cr={}));function u5(n){switch(n){case Xl.EXCELLENT:return Cr.Excellent;case Xl.GOOD:return Cr.Good;case Xl.POOR:return Cr.Poor;case Xl.LOST:return Cr.Lost;default:return Cr.Unknown}}class YE extends ks.EventEmitter{get logContext(){var e,t;return Object.assign({},(t=(e=this.loggerOptions)===null||e===void 0?void 0:e.loggerContextCb)===null||t===void 0?void 0:t.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===Ql.AGENT}get isActive(){var e;return((e=this.participantInfo)===null||e===void 0?void 0:e.state)===So.ACTIVE}get kind(){return this._kind}get attributes(){return Object.freeze(Object.assign({},this._attributes))}constructor(e,t,i,s,r,a){let l=arguments.length>6&&arguments[6]!==void 0?arguments[6]:Ql.STANDARD;var c;super(),this.audioLevel=0,this.isSpeaking=!1,this._connectionQuality=Cr.Unknown,this.log=At,this.log=js((c=a==null?void 0:a.loggerName)!==null&&c!==void 0?c:es.Participant),this.loggerOptions=a,this.setMaxListeners(100),this.sid=e,this.identity=t,this.name=i,this.metadata=s,this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this._kind=l,this._attributes=r??{}}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(e){for(const[,t]of this.trackPublications)if(t.source===e)return t}getTrackPublicationByName(e){for(const[,t]of this.trackPublications)if(t.trackName===e)return t}waitUntilActive(){return this.isActive?Promise.resolve():this.activeFuture?this.activeFuture.promise:(this.activeFuture=new Do,this.once(ze.Active,()=>{var e,t;(t=(e=this.activeFuture)===null||e===void 0?void 0:e.resolve)===null||t===void 0||t.call(e),this.activeFuture=void 0}),this.activeFuture.promise)}get connectionQuality(){return this._connectionQuality}get isCameraEnabled(){var e;const t=this.getTrackPublication(Ae.Source.Camera);return!(!((e=t==null?void 0:t.isMuted)!==null&&e!==void 0)||e)}get isMicrophoneEnabled(){var e;const t=this.getTrackPublication(Ae.Source.Microphone);return!(!((e=t==null?void 0:t.isMuted)!==null&&e!==void 0)||e)}get isScreenShareEnabled(){return!!this.getTrackPublication(Ae.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 t;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===So.ACTIVE&&((t=this.participantInfo)===null||t===void 0?void 0:t.state)!==So.ACTIVE&&this.emit(ze.Active),e.permission&&this.setPermissions(e.permission),this.participantInfo=e,!0)}_setMetadata(e){const t=this.metadata!==e,i=this.metadata;this.metadata=e,t&&this.emit(ze.ParticipantMetadataChanged,i)}_setName(e){const t=this.name!==e;this.name=e,t&&this.emit(ze.ParticipantNameChanged,e)}_setAttributes(e){const t=f8(this.attributes,e);this._attributes=e,Object.keys(t).length>0&&this.emit(ze.AttributesChanged,t)}setPermissions(e){var t,i,s,r,a,l;const c=this.permissions,u=e.canPublish!==((t=this.permissions)===null||t===void 0?void 0:t.canPublish)||e.canSubscribe!==((i=this.permissions)===null||i===void 0?void 0:i.canSubscribe)||e.canPublishData!==((s=this.permissions)===null||s===void 0?void 0:s.canPublishData)||e.hidden!==((r=this.permissions)===null||r===void 0?void 0:r.hidden)||e.recorder!==((a=this.permissions)===null||a===void 0?void 0:a.recorder)||e.canPublishSources.length!==this.permissions.canPublishSources.length||e.canPublishSources.some((d,f)=>{var g;return d!==((g=this.permissions)===null||g===void 0?void 0:g.canPublishSources[f])})||e.canSubscribeMetrics!==((l=this.permissions)===null||l===void 0?void 0:l.canSubscribeMetrics);return this.permissions=e,u&&this.emit(ze.ParticipantPermissionsChanged,c),u}setIsSpeaking(e){e!==this.isSpeaking&&(this.isSpeaking=e,e&&(this.lastSpokeAt=new Date),this.emit(ze.IsSpeakingChanged,e))}setConnectionQuality(e){const t=this._connectionQuality;this._connectionQuality=u5(e),t!==this._connectionQuality&&this.emit(ze.ConnectionQualityChanged,this._connectionQuality)}setDisconnected(){var e,t;this.activeFuture&&((t=(e=this.activeFuture).reject)===null||t===void 0||t.call(e,new Error("Participant disconnected")),this.activeFuture=void 0)}setAudioContext(e){this.audioContext=e,this.audioTrackPublications.forEach(t=>ws(t.track)&&t.track.setAudioContext(e))}addTrackPublication(e){e.on(He.Muted,()=>{this.emit(ze.TrackMuted,e)}),e.on(He.Unmuted,()=>{this.emit(ze.TrackUnmuted,e)});const t=e;switch(t.track&&(t.track.sid=e.trackSid),this.trackPublications.set(e.trackSid,e),e.kind){case Ae.Kind.Audio:this.audioTrackPublications.set(e.trackSid,e);break;case Ae.Kind.Video:this.videoTrackPublications.set(e.trackSid,e);break}}}function d5(n){var e,t,i;if(!n.participantSid&&!n.participantIdentity)throw new Error("Invalid track permission, must provide at least one of participantIdentity and participantSid");return new hk({participantIdentity:(e=n.participantIdentity)!==null&&e!==void 0?e:"",participantSid:(t=n.participantSid)!==null&&t!==void 0?t:"",allTracks:(i=n.allowAll)!==null&&i!==void 0?i:!1,trackSids:n.allowedTrackSids||[]})}const XE=15e3;class h5 extends YE{constructor(e,t,i,s,r){super(e,t,void 0,void 0,void 0,{loggerName:s.loggerName,loggerContextCb:()=>this.engine.logContext}),this.pendingPublishing=new Set,this.pendingPublishPromises=new Map,this.participantTrackPermissions=[],this.allParticipantsAllowedToSubscribe=!0,this.encryptionType=An.NONE,this.enabledPublishVideoCodecs=[],this.pendingAcks=new Map,this.pendingResponses=new Map,this.handleReconnecting=()=>{this.reconnectFuture||(this.reconnectFuture=new Do)},this.handleReconnected=()=>{var a,l;(l=(a=this.reconnectFuture)===null||a===void 0?void 0:a.resolve)===null||l===void 0||l.call(a),this.reconnectFuture=void 0,this.updateTrackSubscriptionPermissions()},this.handleDisconnected=()=>{var a,l,c,u,d,f;this.reconnectFuture&&(this.reconnectFuture.promise.catch(g=>this.log.warn(g.message,this.logContext)),(l=(a=this.reconnectFuture)===null||a===void 0?void 0:a.reject)===null||l===void 0||l.call(a,"Got disconnected during reconnection attempt"),this.reconnectFuture=void 0),this.signalConnectedFuture&&((u=(c=this.signalConnectedFuture).reject)===null||u===void 0||u.call(c,"Got disconnected without signal connected"),this.signalConnectedFuture=void 0),(f=(d=this.activeAgentFuture)===null||d===void 0?void 0:d.reject)===null||f===void 0||f.call(d,"Got disconnected without active agent present"),this.activeAgentFuture=void 0,this.firstActiveAgent=void 0},this.handleSignalConnected=a=>{var l,c;a.participant&&this.updateInfo(a.participant),this.signalConnectedFuture||(this.signalConnectedFuture=new Do),(c=(l=this.signalConnectedFuture).resolve)===null||c===void 0||c.call(l)},this.handleSignalRequestResponse=a=>{const{requestId:l,reason:c,message:u}=a,d=this.pendingSignalRequests.get(l);d&&(c!==wm.OK&&d.reject(new lE(u,c)),this.pendingSignalRequests.delete(l))},this.handleDataPacket=a=>{switch(a.value.case){case"rpcResponse":let l=a.value.value,c=null,u=null;l.value.case==="payload"?c=l.value.value:l.value.case==="error"&&(u=di.fromProto(l.value.value)),this.handleIncomingRpcResponse(l.requestId,c,u);break;case"rpcAck":let d=a.value.value;this.handleIncomingRpcAck(d.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(a=>d5(a)))},this.onTrackUnmuted=a=>{this.onTrackMuted(a,a.isUpstreamPaused)},this.onTrackMuted=(a,l)=>{if(l===void 0&&(l=!0),!a.sid){this.log.error("could not update mute status for unpublished track",Object.assign(Object.assign({},this.logContext),wt(a)));return}this.engine.updateMuteStatus(a.sid,l)},this.onTrackUpstreamPaused=a=>{this.log.debug("upstream paused",Object.assign(Object.assign({},this.logContext),wt(a))),this.onTrackMuted(a,!0)},this.onTrackUpstreamResumed=a=>{this.log.debug("upstream resumed",Object.assign(Object.assign({},this.logContext),wt(a))),this.onTrackMuted(a,a.isMuted)},this.onTrackFeatureUpdate=a=>{const l=this.audioTrackPublications.get(a.sid);if(!l){this.log.warn("Could not update local audio track settings, missing publication for track ".concat(a.sid),this.logContext);return}this.engine.client.sendUpdateLocalAudioTrack(l.trackSid,l.getTrackFeatures())},this.handleSubscribedQualityUpdate=a=>ie(this,void 0,void 0,function*(){var l,c,u,d,f;if(!(!((f=this.roomOptions)===null||f===void 0)&&f.dynacast))return;const g=this.videoTrackPublications.get(a.trackSid);if(!g){this.log.warn("received subscribed quality update for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:a.trackSid}));return}if(!g.videoTrack)return;const T=yield g.videoTrack.setPublishingCodecs(a.subscribedCodecs);try{for(var S=!0,m=qs(T),_;_=yield m.next(),l=_.done,!l;S=!0){d=_.value,S=!1;const k=d;HU(k)&&(this.log.debug("publish ".concat(k," for ").concat(g.videoTrack.sid),Object.assign(Object.assign({},this.logContext),wt(g))),yield this.publishAdditionalCodecForTrack(g.videoTrack,k,g.options))}}catch(k){c={error:k}}finally{try{!S&&!l&&(u=m.return)&&(yield u.call(m))}finally{if(c)throw c.error}}}),this.handleLocalTrackUnpublished=a=>{const l=this.trackPublications.get(a.trackSid);if(!l){this.log.warn("received unpublished event for unknown track",Object.assign(Object.assign({},this.logContext),{trackSid:a.trackSid}));return}this.unpublishTrack(l.track)},this.handleTrackEnded=a=>ie(this,void 0,void 0,function*(){if(a.source===Ae.Source.ScreenShare||a.source===Ae.Source.ScreenShareAudio)this.log.debug("unpublishing local track due to TrackEnded",Object.assign(Object.assign({},this.logContext),wt(a))),this.unpublishTrack(a);else if(a.isUserProvided)yield a.mute();else if(zs(a)||Sr(a))try{if(Sn())try{const l=yield navigator==null?void 0:navigator.permissions.query({name:a.source===Ae.Source.Camera?"camera":"microphone"});if(l&&l.state==="denied")throw this.log.warn("user has revoked access to ".concat(a.source),Object.assign(Object.assign({},this.logContext),wt(a))),l.onchange=()=>{l.state!=="denied"&&(a.isMuted||a.restartTrack(),l.onchange=null)},new Error("GetUserMedia Permission denied")}catch{}a.isMuted||(this.log.debug("track ended, attempting to use a different device",Object.assign(Object.assign({},this.logContext),wt(a))),zs(a)?yield a.restartTrack({deviceId:"default"}):yield a.restartTrack())}catch{this.log.warn("could not restart track, muting instead",Object.assign(Object.assign({},this.logContext),wt(a))),yield a.mute()}}),this.audioTrackPublications=new Map,this.videoTrackPublications=new Map,this.trackPublications=new Map,this.engine=i,this.roomOptions=s,this.setupEngine(i),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!==An.NONE}getTrackPublication(e){const t=super.getTrackPublication(e);if(t)return t}getTrackPublicationByName(e){const t=super.getTrackPublicationByName(e);if(t)return t}setupEngine(e){this.engine=e,this.engine.on(Ge.RemoteMute,(t,i)=>{const s=this.trackPublications.get(t);!s||!s.track||(i?s.mute():s.unmute())}),this.engine.on(Ge.Connected,this.handleReconnected).on(Ge.SignalConnected,this.handleSignalConnected).on(Ge.SignalRestarted,this.handleReconnected).on(Ge.SignalResumed,this.handleReconnected).on(Ge.Restarting,this.handleReconnecting).on(Ge.Resuming,this.handleReconnecting).on(Ge.LocalTrackUnpublished,this.handleLocalTrackUnpublished).on(Ge.SubscribedQualityUpdate,this.handleSubscribedQualityUpdate).on(Ge.Disconnected,this.handleDisconnected).on(Ge.SignalRequestResponse,this.handleSignalRequestResponse).on(Ge.DataPacketReceived,this.handleDataPacket),this.signalConnectedFuture=void 0}setMetadata(e){return ie(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({metadata:e})})}setName(e){return ie(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({name:e})})}setAttributes(e){return ie(this,void 0,void 0,function*(){yield this.requestMetadataUpdate({attributes:e})})}requestMetadataUpdate(e){return ie(this,arguments,void 0,function(t){var i=this;let{metadata:s,name:r,attributes:a}=t;return(function*(){return new Promise((l,c)=>ie(i,void 0,void 0,function*(){var u,d;try{let f=!1;const g=yield this.engine.client.sendUpdateLocalMetadata((u=s??this.metadata)!==null&&u!==void 0?u:"",(d=r??this.name)!==null&&d!==void 0?d:"",a),T=performance.now();for(this.pendingSignalRequests.set(g,{resolve:l,reject:S=>{c(S),f=!0},values:{name:r,metadata:s,attributes:a}});performance.now()-T<5e3&&!f;){if((!r||this.name===r)&&(!s||this.metadata===s)&&(!a||Object.entries(a).every(S=>{let[m,_]=S;return this.attributes[m]===_||_===""&&!this.attributes[m]}))){this.pendingSignalRequests.delete(g),l();return}yield Tn(50)}c(new lE("Request to update local metadata timed out","TimeoutError"))}catch(f){f instanceof Error&&c(f)}}))})()})}setCameraEnabled(e,t,i){return this.setTrackEnabled(Ae.Source.Camera,e,t,i)}setMicrophoneEnabled(e,t,i){return this.setTrackEnabled(Ae.Source.Microphone,e,t,i)}setScreenShareEnabled(e,t,i){return this.setTrackEnabled(Ae.Source.ScreenShare,e,t,i)}setPermissions(e){const t=this.permissions,i=super.setPermissions(e);return i&&t&&this.emit(ze.ParticipantPermissionsChanged,t),i}setE2EEEnabled(e){return ie(this,void 0,void 0,function*(){this.encryptionType=e?An.GCM:An.NONE,yield this.republishAllTracks(void 0,!1)})}setTrackEnabled(e,t,i,s){return ie(this,void 0,void 0,function*(){var r,a;this.log.debug("setTrackEnabled",Object.assign(Object.assign({},this.logContext),{source:e,enabled:t})),this.republishPromise&&(yield this.republishPromise);let l=this.getTrackPublication(e);if(t)if(l)yield l.unmute();else{let c;if(this.pendingPublishing.has(e)){const u=yield this.waitForPendingPublicationOfSource(e);return u||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e})),yield u==null?void 0:u.unmute(),u}this.pendingPublishing.add(e);try{switch(e){case Ae.Source.Camera:c=yield this.createTracks({video:(r=i)!==null&&r!==void 0?r:!0});break;case Ae.Source.Microphone:c=yield this.createTracks({audio:(a=i)!==null&&a!==void 0?a:!0});break;case Ae.Source.ScreenShare:c=yield this.createScreenTracks(Object.assign({},i));break;default:throw new $s(e)}}catch(u){throw c==null||c.forEach(d=>{d.stop()}),u instanceof Error&&this.emit(ze.MediaDevicesError,u,ig(e)),this.pendingPublishing.delete(e),u}for(const u of c)e===Ae.Source.Microphone&&ws(u)&&(s!=null&&s.preConnectBuffer)&&(this.log.info("starting preconnect buffer for microphone",Object.assign({},this.logContext)),u.startPreConnectBuffer());try{const u=[];for(const f of c)this.log.info("publishing track",Object.assign(Object.assign({},this.logContext),wt(f))),u.push(this.publishTrack(f,s));[l]=yield Promise.all(u)}catch(u){throw c==null||c.forEach(d=>{d.stop()}),u}finally{this.pendingPublishing.delete(e)}}else if(!(l!=null&&l.track)&&this.pendingPublishing.has(e)&&(l=yield this.waitForPendingPublicationOfSource(e),l||this.log.info("waiting for pending publication promise timed out",Object.assign(Object.assign({},this.logContext),{source:e}))),l&&l.track)if(e===Ae.Source.ScreenShare){l=yield this.unpublishTrack(l.track);const c=this.getTrackPublication(Ae.Source.ScreenShareAudio);c&&c.track&&this.unpublishTrack(c.track)}else yield l.mute();return l})}enableCameraAndMicrophone(){return ie(this,void 0,void 0,function*(){if(!(this.pendingPublishing.has(Ae.Source.Camera)||this.pendingPublishing.has(Ae.Source.Microphone))){this.pendingPublishing.add(Ae.Source.Camera),this.pendingPublishing.add(Ae.Source.Microphone);try{const e=yield this.createTracks({audio:!0,video:!0});yield Promise.all(e.map(t=>this.publishTrack(t)))}finally{this.pendingPublishing.delete(Ae.Source.Camera),this.pendingPublishing.delete(Ae.Source.Microphone)}}})}createTracks(e){return ie(this,void 0,void 0,function*(){var t,i;e??(e={});const s=SE(e,(t=this.roomOptions)===null||t===void 0?void 0:t.audioCaptureDefaults,(i=this.roomOptions)===null||i===void 0?void 0:i.videoCaptureDefaults);try{return(yield ac(s,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext})).map(l=>(ws(l)&&(this.microphoneError=void 0,l.setAudioContext(this.audioContext),l.source=Ae.Source.Microphone,this.emit(ze.AudioStreamAcquired)),Po(l)&&(this.cameraError=void 0,l.source=Ae.Source.Camera),l))}catch(r){throw r instanceof Error&&(e.audio&&(this.microphoneError=r),e.video&&(this.cameraError=r)),r}})}createScreenTracks(e){return ie(this,void 0,void 0,function*(){if(e===void 0&&(e={}),navigator.mediaDevices.getDisplayMedia===void 0)throw new Bm("getDisplayMedia not supported");e.resolution===void 0&&!XU()&&(e.resolution=$m.h1080fps30.resolution);const t=u8(e),i=yield navigator.mediaDevices.getDisplayMedia(t),s=i.getVideoTracks();if(s.length===0)throw new $s("no video track found");const r=new Hd(s[0],void 0,!1,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});r.source=Ae.Source.ScreenShare,e.contentHint&&(r.mediaStreamTrack.contentHint=e.contentHint);const a=[r];if(i.getAudioTracks().length>0){this.emit(ze.AudioStreamAcquired);const l=new qd(i.getAudioTracks()[0],void 0,!1,this.audioContext,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});l.source=Ae.Source.ScreenShareAudio,a.push(l)}return a})}publishTrack(e,t){return ie(this,void 0,void 0,function*(){return this.publishOrRepublishTrack(e,t)})}publishOrRepublishTrack(e,t){return ie(this,arguments,void 0,function(i,s){var r=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return(function*(){var l,c,u,d;zs(i)&&i.setAudioContext(r.audioContext),yield(l=r.reconnectFuture)===null||l===void 0?void 0:l.promise,r.republishPromise&&!a&&(yield r.republishPromise),Ao(i)&&r.pendingPublishPromises.has(i)&&(yield r.pendingPublishPromises.get(i));let f;if(i instanceof MediaStreamTrack)f=i.getConstraints();else{f=i.constraints;let k;switch(i.source){case Ae.Source.Microphone:k="audioinput";break;case Ae.Source.Camera:k="videoinput"}k&&r.activeDeviceMap.has(k)&&(f=Object.assign(Object.assign({},f),{deviceId:r.activeDeviceMap.get(k)}))}if(i instanceof MediaStreamTrack)switch(i.kind){case"audio":i=new qd(i,f,!0,r.audioContext,{loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});break;case"video":i=new Hd(i,f,!0,{loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});break;default:throw new $s("unsupported MediaStreamTrack kind ".concat(i.kind))}else i.updateLoggerOptions({loggerName:r.roomOptions.loggerName,loggerContextCb:()=>r.logContext});let g;if(r.trackPublications.forEach(k=>{k.track&&k.track===i&&(g=k)}),g)return r.log.warn("track has already been published, skipping",Object.assign(Object.assign({},r.logContext),wt(g))),g;const T="channelCount"in i.mediaStreamTrack.getSettings()&&i.mediaStreamTrack.getSettings().channelCount===2||i.mediaStreamTrack.getConstraints().channelCount===2,S=(c=s==null?void 0:s.forceStereo)!==null&&c!==void 0?c:T;S&&(s||(s={}),s.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),wt(i))),s.red===void 0&&r.log.info("Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work."),(u=s.dtx)!==null&&u!==void 0||(s.dtx=!1),(d=s.red)!==null&&d!==void 0||(s.red=!1));const m=Object.assign(Object.assign({},r.roomOptions.publishDefaults),s);!QU()&&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)),m.simulcast=!1),m.source&&(i.source=m.source);const _=new Promise((k,R)=>ie(r,void 0,void 0,function*(){try{if(this.engine.client.currentState!==Jt.CONNECTED){this.log.debug("deferring track publication until signal is connected",Object.assign(Object.assign({},this.logContext),{track:wt(i)}));const D=setTimeout(()=>{R(new oE("publishing rejected as engine not connected within timeout",408))},15e3);yield this.waitUntilEngineConnected(),clearTimeout(D);const F=yield this.publish(i,m,S);k(F)}else try{const D=yield this.publish(i,m,S);k(D)}catch(D){R(D)}}catch(D){R(D)}}));r.pendingPublishPromises.set(i,_);try{return yield _}catch(k){throw k}finally{r.pendingPublishPromises.delete(i)}})()})}waitUntilEngineConnected(){return this.signalConnectedFuture||(this.signalConnectedFuture=new Do),this.signalConnectedFuture.promise}hasPermissionsToPublish(e){if(!this.permissions)return this.log.warn("no permissions present for publishing track",Object.assign(Object.assign({},this.logContext),wt(e))),!1;const{canPublish:t,canPublishSources:i}=this.permissions;return t&&(i.length===0||i.map(s=>p8(s)).includes(e.source))?!0:(this.log.warn("insufficient permissions to publish",Object.assign(Object.assign({},this.logContext),wt(e))),!1)}publish(e,t,i){return ie(this,void 0,void 0,function*(){var s,r,a,l,c,u,d,f,g,T;if(!this.hasPermissionsToPublish(e))throw new oE("failed to publish track, insufficient permissions",403);Array.from(this.trackPublications.values()).find(x=>Ao(e)&&x.source===e.source)&&e.source!==Ae.Source.Unknown&&this.log.info("publishing a second track with the same source: ".concat(e.source),Object.assign(Object.assign({},this.logContext),wt(e))),t.stopMicTrackOnMute&&ws(e)&&(e.stopOnMute=!0),e.source===Ae.Source.ScreenShare&&xo()&&(t.simulcast=!1),t.videoCodec==="av1"&&!WU()&&(t.videoCodec=void 0),t.videoCodec==="vp9"&&!KU()&&(t.videoCodec=void 0),t.videoCodec===void 0&&(t.videoCodec=ug),this.enabledPublishVideoCodecs.length>0&&(this.enabledPublishVideoCodecs.some(x=>t.videoCodec===Fd(x.mime))||(t.videoCodec=Fd(this.enabledPublishVideoCodecs[0].mime)));const m=t.videoCodec;e.on(He.Muted,this.onTrackMuted),e.on(He.Unmuted,this.onTrackUnmuted),e.on(He.Ended,this.handleTrackEnded),e.on(He.UpstreamPaused,this.onTrackUpstreamPaused),e.on(He.UpstreamResumed,this.onTrackUpstreamResumed),e.on(He.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate);const _=[],k=!(!((s=t.dtx)!==null&&s!==void 0)||s),R=e.getSourceTrackSettings();R.autoGainControl&&_.push(Ni.TF_AUTO_GAIN_CONTROL),R.echoCancellation&&_.push(Ni.TF_ECHO_CANCELLATION),R.noiseSuppression&&_.push(Ni.TF_NOISE_SUPPRESSION),R.channelCount&&R.channelCount>1&&_.push(Ni.TF_STEREO),k&&_.push(Ni.TF_NO_DTX),zs(e)&&e.hasPreConnectBuffer&&_.push(Ni.TF_PRECONNECT_BUFFER);const D=new Sm({cid:e.mediaStreamTrack.id,name:t.name,type:Ae.kindToProto(e.kind),muted:e.isMuted,source:Ae.sourceToProto(e.source),disableDtx:k,encryption:this.encryptionType,stereo:i,disableRed:this.isE2EEEnabled||!(!((r=t.red)!==null&&r!==void 0)||r),stream:t==null?void 0:t.stream,backupCodecPolicy:t==null?void 0:t.backupCodecPolicy,audioFeatures:_});let F;if(e.kind===Ae.Kind.Video){let x={width:0,height:0};try{x=yield e.waitForDimensions()}catch{const M=(l=(a=this.roomOptions.videoCaptureDefaults)===null||a===void 0?void 0:a.resolution)!==null&&l!==void 0?l:ic.h720.resolution;x={width:M.width,height:M.height},this.log.error("could not determine track dimensions, using defaults",Object.assign(Object.assign(Object.assign({},this.logContext),wt(e)),{dims:x}))}D.width=x.width,D.height=x.height,Sr(e)&&(Hs(m)&&(e.source===Ae.Source.ScreenShare&&(t.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),wt(e))))),t.scalabilityMode=(c=t.scalabilityMode)!==null&&c!==void 0?c:"L3T3_KEY"),D.simulcastCodecs=[new Tm({codec:m,cid:e.mediaStreamTrack.id})],t.backupCodec===!0&&(t.backupCodec={codec:ug}),t.backupCodec&&m!==t.backupCodec.codec&&D.encryption===An.NONE&&(this.roomOptions.dynacast||(this.roomOptions.dynacast=!0),D.simulcastCodecs.push(new Tm({codec:t.backupCodec.codec,cid:""})))),F=gg(e.source===Ae.Source.ScreenShare,D.width,D.height,t),D.layers=$E(D.width,D.height,F,Hs(t.videoCodec))}else e.kind===Ae.Kind.Audio&&(F=[{maxBitrate:(u=t.audioPreset)===null||u===void 0?void 0:u.maxBitrate,priority:(f=(d=t.audioPreset)===null||d===void 0?void 0:d.priority)!==null&&f!==void 0?f:"high",networkPriority:(T=(g=t.audioPreset)===null||g===void 0?void 0:g.priority)!==null&&T!==void 0?T:"high"}]);if(!this.engine||this.engine.isClosed)throw new Ei("cannot publish track when not connected");const L=()=>ie(this,void 0,void 0,function*(){var x,A,M;if(!this.engine.pcManager)throw new Ei("pcManager is not ready");if(e.sender=yield this.engine.createSender(e,t,F),Sr(e)&&((x=t.degradationPreference)!==null&&x!==void 0||(t.degradationPreference=K8(e)),e.setDegradationPreference(t.degradationPreference)),F)if(xo()&&e.kind===Ae.Kind.Audio){let V;for(const G of this.engine.pcManager.publisher.getTransceivers())if(G.sender===e.sender){V=G;break}V&&this.engine.pcManager.publisher.setTrackCodecBitrate({transceiver:V,codec:"opus",maxbr:!((A=F[0])===null||A===void 0)&&A.maxBitrate?F[0].maxBitrate/1e3:0})}else e.codec&&Hs(e.codec)&&(!((M=F[0])===null||M===void 0)&&M.maxBitrate)&&this.engine.pcManager.publisher.setTrackCodecBitrate({cid:D.cid,codec:e.codec,maxbr:F[0].maxBitrate/1e3});yield this.engine.negotiate()});let $;const U=new Promise((x,A)=>ie(this,void 0,void 0,function*(){var M;try{$=yield this.engine.addTrack(D),x($)}catch(V){e.sender&&(!((M=this.engine.pcManager)===null||M===void 0)&&M.publisher)&&(this.engine.pcManager.publisher.removeTrack(e.sender),yield this.engine.negotiate().catch(G=>{this.log.error("failed to negotiate after removing track due to failed add track request",Object.assign(Object.assign(Object.assign({},this.logContext),wt(e)),{error:G}))})),A(V)}}));if(this.enabledPublishVideoCodecs.length>0)$=(yield Promise.all([U,L()]))[0];else{$=yield U;let x;if($.codecs.forEach(A=>{x===void 0&&(x=A.mimeType)}),x&&e.kind===Ae.Kind.Video){const A=Fd(x);A!==m&&(this.log.debug("falling back to server selected codec",Object.assign(Object.assign(Object.assign({},this.logContext),wt(e)),{codec:A})),t.videoCodec=A,F=gg(e.source===Ae.Source.ScreenShare,D.width,D.height,t))}yield L()}const O=new _g(e.kind,$,e,{loggerName:this.roomOptions.loggerName,loggerContextCb:()=>this.logContext});if(O.options=t,e.sid=$.sid,this.log.debug("publishing ".concat(e.kind," with encodings"),Object.assign(Object.assign({},this.logContext),{encodings:F,trackInfo:$})),Sr(e)?e.startMonitor(this.engine.client):zs(e)&&e.startMonitor(),this.addTrackPublication(O),this.emit(ze.LocalTrackPublished,O),zs(e)&&$.audioFeatures.includes(Ni.TF_PRECONNECT_BUFFER)){const x=e.getPreConnectBuffer();this.on(ze.LocalTrackSubscribed,A=>{if(A.trackSid===$.sid){if(!e.hasPreConnectBuffer){this.log.warn("subscribe event came to late, buffer already closed",this.logContext);return}this.log.debug("finished recording preconnect buffer",Object.assign(Object.assign({},this.logContext),wt(e))),e.stopPreConnectBuffer()}}),x&&new Promise((M,V)=>ie(this,void 0,void 0,function*(){var G,ae,se,oe,q,K;try{this.log.debug("waiting for agent",Object.assign(Object.assign({},this.logContext),wt(e)));const Ne=setTimeout(()=>{V(new Error("agent not active within 10 seconds"))},1e4),Le=yield this.waitUntilActiveAgentPresent();clearTimeout(Ne),this.log.debug("sending preconnect buffer",Object.assign(Object.assign({},this.logContext),wt(e)));const xe=yield this.streamBytes({name:"preconnect-buffer",mimeType:"audio/opus",topic:"lk.agent.pre-connect-audio-buffer",destinationIdentities:[Le.identity],attributes:{trackId:O.trackSid,sampleRate:String((q=R.sampleRate)!==null&&q!==void 0?q:"48000"),channels:String((K=R.channelCount)!==null&&K!==void 0?K:"1")}});try{for(var te=!0,ne=qs(x),de;de=yield ne.next(),G=de.done,!G;te=!0){oe=de.value,te=!1;const me=oe;yield xe.write(me)}}catch(me){ae={error:me}}finally{try{!te&&!G&&(se=ne.return)&&(yield se.call(ne))}finally{if(ae)throw ae.error}}yield xe.close(),M()}catch(Ne){V(Ne)}})).then(()=>{this.log.debug("preconnect buffer sent successfully",Object.assign(Object.assign({},this.logContext),wt(e)))}).catch(M=>{this.log.error("error sending preconnect buffer",Object.assign(Object.assign(Object.assign({},this.logContext),wt(e)),{error:M}))})}return O})}get isLocal(){return!0}publishAdditionalCodecForTrack(e,t,i){return ie(this,void 0,void 0,function*(){var s;if(this.encryptionType!==An.NONE)return;let r;if(this.trackPublications.forEach(T=>{T.track&&T.track===e&&(r=T)}),!r)throw new $s("track is not published");if(!Sr(e))throw new $s("track is not a video track");const a=Object.assign(Object.assign({},(s=this.roomOptions)===null||s===void 0?void 0:s.publishDefaults),i),l=z8(e,t,a);if(!l){this.log.info("backup codec has been disabled, ignoring request to add additional codec for track",Object.assign(Object.assign({},this.logContext),wt(e)));return}const c=e.addSimulcastTrack(t,l);if(!c)return;const u=new Sm({cid:c.mediaStreamTrack.id,type:Ae.kindToProto(e.kind),muted:e.isMuted,source:Ae.sourceToProto(e.source),sid:e.sid,simulcastCodecs:[{codec:a.videoCodec,cid:c.mediaStreamTrack.id}]});if(u.layers=$E(u.width,u.height,l),!this.engine||this.engine.isClosed)throw new Ei("cannot publish track when not connected");const d=()=>ie(this,void 0,void 0,function*(){yield this.engine.createSimulcastSender(e,c,a,l),yield this.engine.negotiate()}),g=(yield Promise.all([this.engine.addTrack(u),d()]))[0];this.log.debug("published ".concat(t," for track ").concat(e.sid),Object.assign(Object.assign({},this.logContext),{encodings:l,trackInfo:g}))})}unpublishTrack(e,t){return ie(this,void 0,void 0,function*(){var i,s;if(Ao(e)){const u=this.pendingPublishPromises.get(e);u&&(this.log.info("awaiting publish promise before attempting to unpublish",Object.assign(Object.assign({},this.logContext),wt(e))),yield u)}const r=this.getPublicationForTrack(e),a=r?wt(r):void 0;if(this.log.debug("unpublishing track",Object.assign(Object.assign({},this.logContext),a)),!r||!r.track){this.log.warn("track was not unpublished because no publication was found",Object.assign(Object.assign({},this.logContext),a));return}e=r.track,e.off(He.Muted,this.onTrackMuted),e.off(He.Unmuted,this.onTrackUnmuted),e.off(He.Ended,this.handleTrackEnded),e.off(He.UpstreamPaused,this.onTrackUpstreamPaused),e.off(He.UpstreamResumed,this.onTrackUpstreamResumed),e.off(He.AudioTrackFeatureUpdate,this.onTrackFeatureUpdate),t===void 0&&(t=(s=(i=this.roomOptions)===null||i===void 0?void 0:i.stopLocalTrackOnUnpublish)!==null&&s!==void 0?s:!0),t?e.stop():e.stopMonitor();let l=!1;const c=e.sender;if(e.sender=void 0,this.engine.pcManager&&this.engine.pcManager.currentState<ui.FAILED&&c)try{for(const u of this.engine.pcManager.publisher.getTransceivers())u.sender===c&&(u.direction="inactive",l=!0);if(this.engine.removeTrack(c)&&(l=!0),Sr(e)){for(const[,u]of e.simulcastCodecs)u.sender&&(this.engine.removeTrack(u.sender)&&(l=!0),u.sender=void 0);e.simulcastCodecs.clear()}}catch(u){this.log.warn("failed to unpublish track",Object.assign(Object.assign(Object.assign({},this.logContext),a),{error:u}))}switch(this.trackPublications.delete(r.trackSid),r.kind){case Ae.Kind.Audio:this.audioTrackPublications.delete(r.trackSid);break;case Ae.Kind.Video:this.videoTrackPublications.delete(r.trackSid);break}return this.emit(ze.LocalTrackUnpublished,r),r.setTrack(void 0),l&&(yield this.engine.negotiate()),r})}unpublishTracks(e){return ie(this,void 0,void 0,function*(){return(yield Promise.all(e.map(i=>this.unpublishTrack(i)))).filter(i=>!!i)})}republishAllTracks(e){return ie(this,arguments,void 0,function(t){var i=this;let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return(function*(){i.republishPromise&&(yield i.republishPromise),i.republishPromise=new Promise((r,a)=>ie(i,void 0,void 0,function*(){try{const l=[];this.trackPublications.forEach(c=>{c.track&&(t&&(c.options=Object.assign(Object.assign({},c.options),t)),l.push(c))}),yield Promise.all(l.map(c=>ie(this,void 0,void 0,function*(){const u=c.track;yield this.unpublishTrack(u,!1),s&&!u.isMuted&&u.source!==Ae.Source.ScreenShare&&u.source!==Ae.Source.ScreenShareAudio&&(zs(u)||Sr(u))&&!u.isUserProvided&&(this.log.debug("restarting existing track",Object.assign(Object.assign({},this.logContext),{track:c.trackSid})),yield u.restartTrack()),yield this.publishOrRepublishTrack(u,c.options,!0)}))),r()}catch(l){a(l)}finally{this.republishPromise=void 0}})),yield i.republishPromise})()})}publishData(e){return ie(this,arguments,void 0,function(t){var i=this;let s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return(function*(){const r=s.reliable?It.RELIABLE:It.LOSSY,a=s.destinationIdentities,l=s.topic,c=new vn({kind:r,value:{case:"user",value:new GC({participantIdentity:i.identity,payload:t,destinationIdentities:a,topic:l})}});yield i.engine.sendDataPacket(c,r)})()})}publishDtmf(e,t){return ie(this,void 0,void 0,function*(){const i=new vn({kind:It.RELIABLE,value:{case:"sipDtmf",value:new WC({code:e,digit:t})}});yield this.engine.sendDataPacket(i,It.RELIABLE)})}sendChatMessage(e,t){return ie(this,void 0,void 0,function*(){const i={id:crypto.randomUUID(),message:e,timestamp:Date.now(),attachedFiles:t==null?void 0:t.attachments},s=new vn({value:{case:"chatMessage",value:new pm(Object.assign(Object.assign({},i),{timestamp:ii.parse(i.timestamp)}))}});return yield this.engine.sendDataPacket(s,It.RELIABLE),this.emit(ze.ChatMessage,i),i})}editChatMessage(e,t){return ie(this,void 0,void 0,function*(){const i=Object.assign(Object.assign({},t),{message:e,editTimestamp:Date.now()}),s=new vn({value:{case:"chatMessage",value:new pm(Object.assign(Object.assign({},i),{timestamp:ii.parse(i.timestamp),editTimestamp:ii.parse(i.editTimestamp)}))}});return yield this.engine.sendDataPacket(s,It.RELIABLE),this.emit(ze.ChatMessage,i),i})}sendText(e,t){return ie(this,void 0,void 0,function*(){var i;const s=crypto.randomUUID(),a=new TextEncoder().encode(e).byteLength,l=(i=t==null?void 0:t.attachments)===null||i===void 0?void 0:i.map(()=>crypto.randomUUID()),c=new Array(l?l.length+1:1).fill(0),u=(f,g)=>{var T;c[g]=f;const S=c.reduce((m,_)=>m+_,0);(T=t==null?void 0:t.onProgress)===null||T===void 0||T.call(t,S)},d=yield this.streamText({streamId:s,totalSize:a,destinationIdentities:t==null?void 0:t.destinationIdentities,topic:t==null?void 0:t.topic,attachedStreamIds:l,attributes:t==null?void 0:t.attributes});return yield d.write(e),u(1,0),yield d.close(),t!=null&&t.attachments&&l&&(yield Promise.all(t.attachments.map((f,g)=>ie(this,void 0,void 0,function*(){return this._sendFile(l[g],f,{topic:t.topic,mimeType:f.type,onProgress:T=>{u(T,g+1)}})})))),d.info})}streamText(e){return ie(this,void 0,void 0,function*(){var t,i;const s=(t=e==null?void 0:e.streamId)!==null&&t!==void 0?t:crypto.randomUUID(),r={id:s,mimeType:"text/plain",timestamp:Date.now(),topic:(i=e==null?void 0:e.topic)!==null&&i!==void 0?i:"",size:e==null?void 0:e.totalSize,attributes:e==null?void 0:e.attributes},a=new gm({streamId:s,mimeType:r.mimeType,topic:r.topic,timestamp:da(r.timestamp),totalLength:da(e==null?void 0:e.totalSize),attributes:r.attributes,contentHeader:{case:"textHeader",value:new sk({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"?mm.UPDATE:mm.CREATE})}}),l=e==null?void 0:e.destinationIdentities,c=new vn({destinationIdentities:l,value:{case:"streamHeader",value:a}});yield this.engine.sendDataPacket(c,It.RELIABLE);let u=0;const d=this,f=new WritableStream({write(S){return ie(this,void 0,void 0,function*(){for(const m of l8(S,XE)){yield d.engine.waitForBufferStatusLow(It.RELIABLE);const _=new ym({content:m,streamId:s,chunkIndex:da(u)}),k=new vn({destinationIdentities:l,value:{case:"streamChunk",value:_}});yield d.engine.sendDataPacket(k,It.RELIABLE),u+=1}})},close(){return ie(this,void 0,void 0,function*(){const S=new vm({streamId:s}),m=new vn({destinationIdentities:l,value:{case:"streamTrailer",value:S}});yield d.engine.sendDataPacket(m,It.RELIABLE)})},abort(S){console.log("Sink error:",S)}});let g=()=>ie(this,void 0,void 0,function*(){yield T.close()});d.engine.once(Ge.Closing,g);const T=new n5(f,r,()=>this.engine.off(Ge.Closing,g));return T})}sendFile(e,t){return ie(this,void 0,void 0,function*(){const i=crypto.randomUUID();return yield this._sendFile(i,e,t),{id:i}})}_sendFile(e,t,i){return ie(this,void 0,void 0,function*(){var s;const r=yield this.streamBytes({streamId:e,totalSize:t.size,name:t.name,mimeType:(s=i==null?void 0:i.mimeType)!==null&&s!==void 0?s:t.type,topic:i==null?void 0:i.topic,destinationIdentities:i==null?void 0:i.destinationIdentities}),a=t.stream().getReader();for(;;){const{done:l,value:c}=yield a.read();if(l)break;yield r.write(c)}return yield r.close(),r.info})}streamBytes(e){return ie(this,void 0,void 0,function*(){var t,i,s,r,a;const l=(t=e==null?void 0:e.streamId)!==null&&t!==void 0?t:crypto.randomUUID(),c=e==null?void 0:e.destinationIdentities,u={id:l,mimeType:(i=e==null?void 0:e.mimeType)!==null&&i!==void 0?i:"application/octet-stream",topic:(s=e==null?void 0:e.topic)!==null&&s!==void 0?s:"",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"},d=new gm({totalLength:da((a=u.size)!==null&&a!==void 0?a:0),mimeType:u.mimeType,streamId:l,topic:u.topic,timestamp:da(Date.now()),attributes:u.attributes,contentHeader:{case:"byteHeader",value:new rk({name:u.name})}}),f=new vn({destinationIdentities:c,value:{case:"streamHeader",value:d}});yield this.engine.sendDataPacket(f,It.RELIABLE);let g=0;const T=new gn,S=this.engine,m=this.log,_=new WritableStream({write(R){return ie(this,void 0,void 0,function*(){const D=yield T.lock();let F=0;try{for(;F<R.byteLength;){const L=R.slice(F,F+XE);yield S.waitForBufferStatusLow(It.RELIABLE);const $=new vn({destinationIdentities:c,value:{case:"streamChunk",value:new ym({content:L,streamId:l,chunkIndex:da(g)})}});yield S.sendDataPacket($,It.RELIABLE),g+=1,F+=L.byteLength}}finally{D()}})},close(){return ie(this,void 0,void 0,function*(){const R=new vm({streamId:l}),D=new vn({destinationIdentities:c,value:{case:"streamTrailer",value:R}});yield S.sendDataPacket(D,It.RELIABLE)})},abort(R){m.error("Sink error:",R)}});return new s5(_,u)})}performRpc(e){return ie(this,arguments,void 0,function(t){var i=this;let{destinationIdentity:s,method:r,payload:a,responseTimeout:l=1e4}=t;return(function*(){return new Promise((u,d)=>ie(i,void 0,void 0,function*(){var f,g,T,S;if(hg(a)>LE){d(di.builtIn("REQUEST_PAYLOAD_TOO_LARGE"));return}if(!((g=(f=this.engine.latestJoinResponse)===null||f===void 0?void 0:f.serverInfo)===null||g===void 0)&&g.version&&br((S=(T=this.engine.latestJoinResponse)===null||T===void 0?void 0:T.serverInfo)===null||S===void 0?void 0:S.version,"1.8.0")<0){d(di.builtIn("UNSUPPORTED_SERVER"));return}const m=crypto.randomUUID();yield this.publishRpcRequest(s,m,r,a,l-2e3);const _=setTimeout(()=>{this.pendingAcks.delete(m),d(di.builtIn("CONNECTION_TIMEOUT")),this.pendingResponses.delete(m),clearTimeout(k)},2e3);this.pendingAcks.set(m,{resolve:()=>{clearTimeout(_)},participantIdentity:s});const k=setTimeout(()=>{this.pendingResponses.delete(m),d(di.builtIn("RESPONSE_TIMEOUT"))},l);this.pendingResponses.set(m,{resolve:(R,D)=>{clearTimeout(k),this.pendingAcks.has(m)&&(console.warn("RPC response received before ack",m),this.pendingAcks.delete(m),clearTimeout(_)),D?d(D):u(R??"")},participantIdentity:s})}))})()})}registerRpcMethod(e,t){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,t)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}setTrackSubscriptionPermissions(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];this.participantTrackPermissions=t,this.allParticipantsAllowedToSubscribe=e,this.engine.client.isDisconnected||this.updateTrackSubscriptionPermissions()}handleIncomingRpcAck(e){const t=this.pendingAcks.get(e);t?(t.resolve(),this.pendingAcks.delete(e)):console.error("Ack received for unexpected RPC request",e)}handleIncomingRpcResponse(e,t,i){const s=this.pendingResponses.get(e);s?(s.resolve(t,i),this.pendingResponses.delete(e)):console.error("Response received for unexpected RPC request",e)}publishRpcRequest(e,t,i,s,r){return ie(this,void 0,void 0,function*(){const a=new vn({destinationIdentities:[e],kind:It.RELIABLE,value:{case:"rpcRequest",value:new KC({id:t,method:i,payload:s,responseTimeoutMs:r,version:1})}});yield this.engine.sendDataPacket(a,It.RELIABLE)})}handleParticipantDisconnected(e){for(const[t,{participantIdentity:i}]of this.pendingAcks)i===e&&this.pendingAcks.delete(t);for(const[t,{participantIdentity:i,resolve:s}]of this.pendingResponses)i===e&&(s(null,di.builtIn("RECIPIENT_DISCONNECTED")),this.pendingResponses.delete(t))}setEnabledPublishCodecs(e){this.enabledPublishVideoCodecs=e.filter(t=>t.mime.split("/")[0].toLowerCase()==="video")}updateInfo(e){return super.updateInfo(e)?(e.tracks.forEach(t=>{var i,s;const r=this.trackPublications.get(t.sid);if(r){const a=r.isMuted||((s=(i=r.track)===null||i===void 0?void 0:i.isUpstreamPaused)!==null&&s!==void 0?s:!1);a!==t.muted&&(this.log.debug("updating server mute state after reconcile",Object.assign(Object.assign(Object.assign({},this.logContext),wt(r)),{mutedOnServer:a})),this.engine.client.sendMuteTrack(t.sid,a))}}),!0):!1}setActiveAgent(e){var t,i,s,r;this.firstActiveAgent=e,e&&!this.firstActiveAgent&&(this.firstActiveAgent=e),e?(i=(t=this.activeAgentFuture)===null||t===void 0?void 0:t.resolve)===null||i===void 0||i.call(t,e):(r=(s=this.activeAgentFuture)===null||s===void 0?void 0:s.reject)===null||r===void 0||r.call(s,"Agent disconnected"),this.activeAgentFuture=void 0}waitUntilActiveAgentPresent(){return this.firstActiveAgent?Promise.resolve(this.firstActiveAgent):(this.activeAgentFuture||(this.activeAgentFuture=new Do),this.activeAgentFuture.promise)}getPublicationForTrack(e){let t;return this.trackPublications.forEach(i=>{const s=i.track;s&&(e instanceof MediaStreamTrack?(zs(s)||Sr(s))&&s.mediaStreamTrack===e&&(t=i):e===s&&(t=i))}),t}waitForPendingPublicationOfSource(e){return ie(this,void 0,void 0,function*(){const i=Date.now();for(;Date.now()<i+1e4;){const s=Array.from(this.pendingPublishPromises.entries()).find(r=>{let[a]=r;return a.source===e});if(s)return s[1];yield Tn(20)}})}}class f5 extends Gs{constructor(e,t,i,s){super(e,t.sid,t.name,s),this.track=void 0,this.allowed=!0,this.disabled=!1,this.currentVideoQuality=Vn.HIGH,this.handleEnded=r=>{this.setTrack(void 0),this.emit(He.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=i,this.updateInfo(t)}setSubscribed(e){const t=this.subscriptionStatus,i=this.permissionStatus;this.subscribed=e,e&&(this.allowed=!0);const s=new Ed({trackSids:[this.trackSid],subscribe:this.subscribed,participantTracks:[new QC({participantSid:"",trackSids:[this.trackSid]})]});this.emit(He.UpdateSubscription,s),this.emitSubscriptionUpdateIfChanged(t),this.emitPermissionUpdateIfChanged(i)}get subscriptionStatus(){return this.subscribed===!1?Gs.SubscriptionStatus.Unsubscribed:super.isSubscribed?Gs.SubscriptionStatus.Subscribed:Gs.SubscriptionStatus.Desired}get permissionStatus(){return this.allowed?Gs.PermissionStatus.Allowed:Gs.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 t,i;this.isManualOperationAllowed()&&(((t=this.videoDimensions)===null||t===void 0?void 0:t.width)===e.width&&((i=this.videoDimensions)===null||i===void 0?void 0:i.height)===e.height||(Zm(this.track)&&(this.videoDimensions=e),this.currentVideoQuality=void 0,this.emitTrackUpdate()))}setVideoFPS(e){this.isManualOperationAllowed()&&Zm(this.track)&&this.fps!==e&&(this.fps=e,this.emitTrackUpdate())}get videoQuality(){return this.currentVideoQuality}setTrack(e){const t=this.subscriptionStatus,i=this.permissionStatus,s=this.track;s!==e&&(s&&(s.off(He.VideoDimensionsChanged,this.handleVideoDimensionsChange),s.off(He.VisibilityChanged,this.handleVisibilityChange),s.off(He.Ended,this.handleEnded),s.detach(),s.stopMonitor(),this.emit(He.Unsubscribed,s)),super.setTrack(e),e&&(e.sid=this.trackSid,e.on(He.VideoDimensionsChanged,this.handleVideoDimensionsChange),e.on(He.VisibilityChanged,this.handleVisibilityChange),e.on(He.Ended,this.handleEnded),this.emit(He.Subscribed,e)),this.emitPermissionUpdateIfChanged(i),this.emitSubscriptionUpdateIfChanged(t))}setAllowed(e){const t=this.subscriptionStatus,i=this.permissionStatus;this.allowed=e,this.emitPermissionUpdateIfChanged(i),this.emitSubscriptionUpdateIfChanged(t)}setSubscriptionError(e){this.emit(He.SubscriptionFailed,e)}updateInfo(e){super.updateInfo(e);const t=this.metadataMuted;this.metadataMuted=e.muted,this.track?this.track.setMuted(e.muted):t!==e.muted&&this.emit(e.muted?He.Muted:He.Unmuted)}emitSubscriptionUpdateIfChanged(e){const t=this.subscriptionStatus;e!==t&&this.emit(He.SubscriptionStatusChanged,t,e)}emitPermissionUpdateIfChanged(e){this.permissionStatus!==e&&this.emit(He.SubscriptionPermissionChanged,this.permissionStatus,e)}isManualOperationAllowed(){return this.kind===Ae.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 Zm(this.track)&&this.track.isAdaptiveStream}emitTrackUpdate(){const e=new ok({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=Vn.HIGH,this.emit(He.UpdateSettings,e)}}class zd extends YE{static fromParticipantInfo(e,t,i){return new zd(e,t.sid,t.identity,t.name,t.metadata,t.attributes,i,t.kind)}get logContext(){return Object.assign(Object.assign({},super.logContext),{rpID:this.sid,remoteParticipant:this.identity})}constructor(e,t,i,s,r,a,l){let c=arguments.length>7&&arguments[7]!==void 0?arguments[7]:Ql.STANDARD;super(t,i||"",s,r,a,l,c),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(He.UpdateSettings,t=>{this.log.debug("send update settings",Object.assign(Object.assign({},this.logContext),wt(e))),this.signalClient.sendUpdateTrackSettings(t)}),e.on(He.UpdateSubscription,t=>{t.participantTracks.forEach(i=>{i.participantSid=this.sid}),this.signalClient.sendUpdateSubscription(t)}),e.on(He.SubscriptionPermissionChanged,t=>{this.emit(ze.TrackSubscriptionPermissionChanged,e,t)}),e.on(He.SubscriptionStatusChanged,t=>{this.emit(ze.TrackSubscriptionStatusChanged,e,t)}),e.on(He.Subscribed,t=>{this.emit(ze.TrackSubscribed,t,e)}),e.on(He.Unsubscribed,t=>{this.emit(ze.TrackUnsubscribed,t,e)}),e.on(He.SubscriptionFailed,t=>{this.emit(ze.TrackSubscriptionFailed,e.trackSid,t)})}getTrackPublication(e){const t=super.getTrackPublication(e);if(t)return t}getTrackPublicationByName(e){const t=super.getTrackPublicationByName(e);if(t)return t}setVolume(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ae.Source.Microphone;this.volumeMap.set(t,e);const i=this.getTrackPublication(t);i&&i.track&&i.track.setVolume(e)}getVolume(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Ae.Source.Microphone;const t=this.getTrackPublication(e);return t&&t.track?t.track.getVolume():this.volumeMap.get(e)}addSubscribedMediaTrack(e,t,i,s,r,a){let l=this.getTrackPublicationBySid(t);if(l||t.startsWith("TR")||this.trackPublications.forEach(d=>{!l&&e.kind===d.kind.toString()&&(l=d)}),!l){if(a===0){this.log.error("could not find published track",Object.assign(Object.assign({},this.logContext),{trackSid:t})),this.emit(ze.TrackSubscriptionFailed,t);return}a===void 0&&(a=20),setTimeout(()=>{this.addSubscribedMediaTrack(e,t,i,s,r,a-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),wt(l))),this.emit(ze.TrackSubscriptionFailed,t);return}const c=e.kind==="video";let u;return c?u=new a5(e,t,s,r):u=new r5(e,t,s,this.audioContext,this.audioOutput),u.source=l.source,u.isMuted=l.isMuted,u.setMediaStream(i),u.start(),l.setTrack(u),this.volumeMap.has(l.source)&&Qm(u)&&ws(u)&&u.setVolume(this.volumeMap.get(l.source)),l}get hasMetadata(){return!!this.participantInfo}getTrackPublicationBySid(e){return this.trackPublications.get(e)}updateInfo(e){if(!super.updateInfo(e))return!1;const t=new Map,i=new Map;return e.tracks.forEach(s=>{var r,a;let l=this.getTrackPublicationBySid(s.sid);if(l)l.updateInfo(s);else{const c=Ae.kindFromProto(s.type);if(!c)return;l=new f5(c,s,(r=this.signalClient.connectOptions)===null||r===void 0?void 0:r.autoSubscribe,{loggerContextCb:()=>this.logContext,loggerName:(a=this.loggerOptions)===null||a===void 0?void 0:a.loggerName}),l.updateInfo(s),i.set(s.sid,l);const u=Array.from(this.trackPublications.values()).find(d=>d.source===(l==null?void 0:l.source));u&&l.source!==Ae.Source.Unknown&&this.log.debug("received a second track publication for ".concat(this.identity," with the same source: ").concat(l.source),Object.assign(Object.assign({},this.logContext),{oldTrack:wt(u),newTrack:wt(l)})),this.addTrackPublication(l)}t.set(s.sid,l)}),this.trackPublications.forEach(s=>{t.has(s.trackSid)||(this.log.trace("detected removed track on remote participant, unpublishing",Object.assign(Object.assign({},this.logContext),wt(s))),this.unpublishTrack(s.trackSid,!0))}),i.forEach(s=>{this.emit(ze.TrackPublished,s)}),!0}unpublishTrack(e,t){const i=this.trackPublications.get(e);if(!i)return;const{track:s}=i;switch(s&&(s.stop(),i.setTrack(void 0)),this.trackPublications.delete(e),i.kind){case Ae.Kind.Audio:this.audioTrackPublications.delete(e);break;case Ae.Kind.Video:this.videoTrackPublications.delete(e);break}t&&this.emit(ze.TrackUnpublished,i)}setAudioOutput(e){return ie(this,void 0,void 0,function*(){this.audioOutput=e;const t=[];this.audioTrackPublications.forEach(i=>{var s;ws(i.track)&&Qm(i.track)&&t.push(i.track.setSinkId((s=e.deviceId)!==null&&s!==void 0?s:"default"))}),yield Promise.all(t)})}emit(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),s=1;s<t;s++)i[s-1]=arguments[s];return this.log.trace("participant event",Object.assign(Object.assign({},this.logContext),{event:e,args:i})),super.emit(e,...i)}}var Ot;(function(n){n.Disconnected="disconnected",n.Connecting="connecting",n.Connected="connected",n.Reconnecting="reconnecting",n.SignalReconnecting="signalReconnecting"})(Ot||(Ot={}));const p5=4*1e3;class Ws extends ks.EventEmitter{constructor(e){var t,i,s,r;if(super(),t=this,this.state=Ot.Disconnected,this.activeSpeakers=[],this.isE2EEEnabled=!1,this.audioEnabled=!0,this.isVideoPlaybackBlocked=!1,this.log=At,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=(a,l,c)=>ie(this,void 0,void 0,function*(){var u;if(!YU())throw Es()?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 d=yield this.disconnectLock.lock();if(this.state===Ot.Connected)return this.log.info("already connected to room ".concat(this.name),this.logContext),d(),Promise.resolve();if(this.connectFuture)return d(),this.connectFuture.promise;this.setAndEmitConnectionState(Ot.Connecting),((u=this.regionUrlProvider)===null||u===void 0?void 0:u.getServerUrl().toString())!==a&&(this.regionUrl=void 0,this.regionUrlProvider=void 0),Wm(new URL(a))&&(this.regionUrlProvider===void 0?this.regionUrlProvider=new bg(a,l):this.regionUrlProvider.updateToken(l),this.regionUrlProvider.fetchRegionSettings().then(T=>{var S;(S=this.regionUrlProvider)===null||S===void 0||S.setServerReportedRegions(T)}).catch(T=>{this.log.warn("could not fetch region settings",Object.assign(Object.assign({},this.logContext),{error:T}))}));const f=(T,S,m)=>ie(this,void 0,void 0,function*(){var _,k;this.abortController&&this.abortController.abort();const R=new AbortController;this.abortController=R,d==null||d();try{yield this.attemptConnection(m??a,l,c,R),this.abortController=void 0,T()}catch(D){if(this.regionUrlProvider&&D instanceof Gt&&D.reason!==Nt.Cancelled&&D.reason!==Nt.NotAllowed){let F=null;try{F=yield this.regionUrlProvider.getNextBestRegionUrl((_=this.abortController)===null||_===void 0?void 0:_.signal)}catch(L){if(L instanceof Gt&&(L.status===401||L.reason===Nt.Cancelled)){this.handleDisconnect(this.options.stopLocalTrackOnUnpublish),S(L);return}}F&&!(!((k=this.abortController)===null||k===void 0)&&k.signal.aborted)?(this.log.info("Initial connection failed with ConnectionError: ".concat(D.message,". Retrying with another region: ").concat(F),this.logContext),this.recreateEngine(),yield f(T,S,F)):(this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,TE(D)),S(D))}else{let F=Qn.UNKNOWN_REASON;D instanceof Gt&&(F=TE(D)),this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,F),S(D)}}}),g=this.regionUrl;return this.regionUrl=void 0,this.connectFuture=new Do((T,S)=>{f(T,S,g)},()=>{this.clearConnectionFutures()}),this.connectFuture.promise}),this.connectSignal=(a,l,c,u,d,f)=>ie(this,void 0,void 0,function*(){var g,T,S;const m=yield c.join(a,l,{autoSubscribe:u.autoSubscribe,adaptiveStream:typeof d.adaptiveStream=="object"?!0:d.adaptiveStream,maxRetries:u.maxRetries,e2eeEnabled:!!this.e2eeManager,websocketTimeout:u.websocketTimeout},f.signal);let _=m.serverInfo;if(_||(_={version:m.serverVersion,region:m.serverRegion}),this.serverInfo=_,this.log.debug("connected to Livekit Server ".concat(Object.entries(_).map(k=>{let[R,D]=k;return"".concat(R,": ").concat(D)}).join(", ")),{room:(g=m.room)===null||g===void 0?void 0:g.name,roomSid:(T=m.room)===null||T===void 0?void 0:T.sid,identity:(S=m.participant)===null||S===void 0?void 0:S.identity}),!_.version)throw new MU("unknown server version");return _.version==="0.15.1"&&this.options.dynacast&&(this.log.debug("disabling dynacast due to server version",this.logContext),d.dynacast=!1),m}),this.applyJoinResponse=a=>{const l=a.participant;if(this.localParticipant.sid=l.sid,this.localParticipant.identity=l.identity,this.localParticipant.setEnabledPublishCodecs(a.enabledPublishCodecs),this.options.e2ee&&this.e2eeManager)try{this.e2eeManager.setSifTrailer(a.sifTrailer)}catch(c){this.log.error(c instanceof Error?c.message:"Could not set SifTrailer",Object.assign(Object.assign({},this.logContext),{error:c}))}this.handleParticipantUpdates([l,...a.otherParticipants]),a.room&&this.handleRoomUpdate(a.room)},this.attemptConnection=(a,l,c,u)=>ie(this,void 0,void 0,function*(){var d,f;this.state===Ot.Reconnecting||this.isResuming||!((d=this.engine)===null||d===void 0)&&d.pendingReconnect?(this.log.info("Reconnection attempt replaced by new connection attempt",this.logContext),this.recreateEngine()):this.maybeCreateEngine(),!((f=this.regionUrlProvider)===null||f===void 0)&&f.isCloud()&&this.engine.setRegionUrlProvider(this.regionUrlProvider),this.acquireAudioContext(),this.connOptions=Object.assign(Object.assign({},dg),c),this.connOptions.rtcConfig&&(this.engine.rtcConfig=this.connOptions.rtcConfig),this.connOptions.peerConnectionTimeout&&(this.engine.peerConnectionTimeout=this.connOptions.peerConnectionTimeout);try{const g=yield this.connectSignal(a,l,this.engine,this.connOptions,this.options,u);this.applyJoinResponse(g),this.setupLocalParticipantEvents(),this.emit(Oe.SignalConnected)}catch(g){yield this.engine.close(),this.recreateEngine();const T=new Gt("could not establish signal connection",Nt.ServerUnreachable);throw g instanceof Error&&(T.message="".concat(T.message,": ").concat(g.message)),g instanceof Gt&&(T.reason=g.reason,T.status=g.status),this.log.debug("error trying to establish signal connection",Object.assign(Object.assign({},this.logContext),{error:g})),T}if(u.signal.aborted)throw yield this.engine.close(),this.recreateEngine(),new Gt("Connection attempt aborted",Nt.Cancelled);try{yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout,u)}catch(g){throw yield this.engine.close(),this.recreateEngine(),g}Sn()&&this.options.disconnectOnPageLeave&&(window.addEventListener("pagehide",this.onPageLeave),window.addEventListener("beforeunload",this.onPageLeave)),Sn()&&document.addEventListener("freeze",this.onPageLeave),this.setAndEmitConnectionState(Ot.Connected),this.emit(Oe.Connected),this.registerConnectionReconcile()}),this.disconnect=function(){for(var a=arguments.length,l=new Array(a),c=0;c<a;c++)l[c]=arguments[c];return ie(t,[...l],void 0,function(){var u=this;let d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return(function*(){var f,g,T,S;const m=yield u.disconnectLock.lock();try{if(u.state===Ot.Disconnected){u.log.debug("already disconnected",u.logContext);return}u.log.info("disconnect from room",Object.assign({},u.logContext)),(u.state===Ot.Connecting||u.state===Ot.Reconnecting||u.isResuming)&&(u.log.warn("abort connection attempt",u.logContext),(f=u.abortController)===null||f===void 0||f.abort(),(T=(g=u.connectFuture)===null||g===void 0?void 0:g.reject)===null||T===void 0||T.call(g,new Gt("Client initiated disconnect",Nt.Cancelled)),u.connectFuture=void 0),!((S=u.engine)===null||S===void 0)&&S.client.isDisconnected||(yield u.engine.client.sendLeave()),u.engine&&(yield u.engine.close()),u.handleDisconnect(d,Qn.CLIENT_INITIATED),u.engine=void 0}finally{m()}})()})},this.onPageLeave=()=>ie(this,void 0,void 0,function*(){this.log.info("Page leave detected, disconnecting",this.logContext),yield this.disconnect()}),this.startAudio=()=>ie(this,void 0,void 0,function*(){const a=[],l=bn();if(l&&l.os==="iOS"){const c="livekit-dummy-audio-el";let u=document.getElementById(c);if(!u){u=document.createElement("audio"),u.id=c,u.autoplay=!0,u.hidden=!0;const d=Xm();d.enabled=!0;const f=new MediaStream([d]);u.srcObject=f,document.addEventListener("visibilitychange",()=>{u&&(u.srcObject=document.hidden?null:f,document.hidden||(this.log.debug("page visible again, triggering startAudio to resume playback and update playback status",this.logContext),this.startAudio()))}),document.body.append(u),this.once(Oe.Disconnected,()=>{u==null||u.remove(),u=null})}a.push(u)}this.remoteParticipants.forEach(c=>{c.audioTrackPublications.forEach(u=>{u.track&&u.track.attachedElements.forEach(d=>{a.push(d)})})});try{yield Promise.all([this.acquireAudioContext(),...a.map(c=>(c.muted=!1,c.play()))]),this.handleAudioPlaybackStarted()}catch(c){throw this.handleAudioPlaybackFailed(c),c}}),this.startVideo=()=>ie(this,void 0,void 0,function*(){const a=[];for(const l of this.remoteParticipants.values())l.videoTrackPublications.forEach(c=>{var u;(u=c.track)===null||u===void 0||u.attachedElements.forEach(d=>{a.includes(d)||a.push(d)})});yield Promise.all(a.map(l=>l.play())).then(()=>{this.handleVideoPlaybackStarted()}).catch(l=>{l.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 a of this.remoteParticipants.values())this.handleParticipantDisconnected(a.identity,a);this.setAndEmitConnectionState(Ot.Reconnecting)&&this.emit(Oe.Reconnecting)},this.handleSignalRestarted=a=>ie(this,void 0,void 0,function*(){this.log.debug("signal reconnected to server, region ".concat(a.serverRegion),Object.assign(Object.assign({},this.logContext),{region:a.serverRegion})),this.bufferedEvents=[],this.applyJoinResponse(a);try{yield this.localParticipant.republishAllTracks(void 0,!0)}catch(l){this.log.error("error trying to re-publish tracks after reconnection",Object.assign(Object.assign({},this.logContext),{error:l}))}try{yield this.engine.waitForRestarted(),this.log.debug("fully reconnected to server",Object.assign(Object.assign({},this.logContext),{region:a.serverRegion}))}catch{return}this.setAndEmitConnectionState(Ot.Connected),this.emit(Oe.Reconnected),this.registerConnectionReconcile(),this.emitBufferedEvents()}),this.handleParticipantUpdates=a=>{a.forEach(l=>{var c;if(l.identity===this.localParticipant.identity){this.localParticipant.updateInfo(l);return}l.identity===""&&(l.identity=(c=this.sidToIdentity.get(l.sid))!==null&&c!==void 0?c:"");let u=this.remoteParticipants.get(l.identity);l.state===So.DISCONNECTED?this.handleParticipantDisconnected(l.identity,u):u=this.getOrCreateParticipant(l.identity,l)})},this.handleActiveSpeakersUpdate=a=>{const l=[],c={};a.forEach(u=>{if(c[u.sid]=!0,u.sid===this.localParticipant.sid)this.localParticipant.audioLevel=u.level,this.localParticipant.setIsSpeaking(!0),l.push(this.localParticipant);else{const d=this.getRemoteParticipantBySid(u.sid);d&&(d.audioLevel=u.level,d.setIsSpeaking(!0),l.push(d))}}),c[this.localParticipant.sid]||(this.localParticipant.audioLevel=0,this.localParticipant.setIsSpeaking(!1)),this.remoteParticipants.forEach(u=>{c[u.sid]||(u.audioLevel=0,u.setIsSpeaking(!1))}),this.activeSpeakers=l,this.emitWhenConnected(Oe.ActiveSpeakersChanged,l)},this.handleSpeakersChanged=a=>{const l=new Map;this.activeSpeakers.forEach(u=>{const d=this.remoteParticipants.get(u.identity);d&&d.sid!==u.sid||l.set(u.sid,u)}),a.forEach(u=>{let d=this.getRemoteParticipantBySid(u.sid);u.sid===this.localParticipant.sid&&(d=this.localParticipant),d&&(d.audioLevel=u.level,d.setIsSpeaking(u.active),u.active?l.set(u.sid,d):l.delete(u.sid))});const c=Array.from(l.values());c.sort((u,d)=>d.audioLevel-u.audioLevel),this.activeSpeakers=c,this.emitWhenConnected(Oe.ActiveSpeakersChanged,c)},this.handleStreamStateUpdate=a=>{a.streamStates.forEach(l=>{const c=this.getRemoteParticipantBySid(l.participantSid);if(!c)return;const u=c.getTrackPublicationBySid(l.trackSid);if(!u||!u.track)return;const d=Ae.streamStateFromProto(l.state);d!==u.track.streamState&&(u.track.streamState=d,c.emit(ze.TrackStreamStateChanged,u,u.track.streamState),this.emitWhenConnected(Oe.TrackStreamStateChanged,u,u.track.streamState,c))})},this.handleSubscriptionPermissionUpdate=a=>{const l=this.getRemoteParticipantBySid(a.participantSid);if(!l)return;const c=l.getTrackPublicationBySid(a.trackSid);c&&c.setAllowed(a.allowed)},this.handleSubscriptionError=a=>{const l=Array.from(this.remoteParticipants.values()).find(u=>u.trackPublications.has(a.trackSid));if(!l)return;const c=l.getTrackPublicationBySid(a.trackSid);c&&c.setSubscriptionError(a.err)},this.handleDataPacket=a=>{const l=this.remoteParticipants.get(a.participantIdentity);if(a.value.case==="user")this.handleUserPacket(l,a.value.value,a.kind);else if(a.value.case==="transcription")this.handleTranscription(l,a.value.value);else if(a.value.case==="sipDtmf")this.handleSipDtmf(l,a.value.value);else if(a.value.case==="chatMessage")this.handleChatMessage(l,a.value.value);else if(a.value.case==="metrics")this.handleMetrics(a.value.value,l);else if(a.value.case==="streamHeader")this.handleStreamHeader(a.value.value,a.participantIdentity);else if(a.value.case==="streamChunk")this.handleStreamChunk(a.value.value);else if(a.value.case==="streamTrailer")this.handleStreamTrailer(a.value.value);else if(a.value.case==="rpcRequest"){const c=a.value.value;this.handleIncomingRpcRequest(a.participantIdentity,c.id,c.method,c.payload,c.responseTimeoutMs,c.version)}},this.handleUserPacket=(a,l,c)=>{this.emit(Oe.DataReceived,l.payload,a,c,l.topic),a==null||a.emit(ze.DataReceived,l.payload,c)},this.handleSipDtmf=(a,l)=>{this.emit(Oe.SipDTMFReceived,l,a),a==null||a.emit(ze.SipDTMFReceived,l)},this.bufferedSegments=new Map,this.handleTranscription=(a,l)=>{const c=l.transcribedParticipantIdentity===this.localParticipant.identity?this.localParticipant:this.getParticipantByIdentity(l.transcribedParticipantIdentity),u=c==null?void 0:c.trackPublications.get(l.trackId),d=s8(l,this.transcriptionReceivedTimes);u==null||u.emit(He.TranscriptionReceived,d),c==null||c.emit(ze.TranscriptionReceived,d,u),this.emit(Oe.TranscriptionReceived,d,c,u)},this.handleChatMessage=(a,l)=>{const c=r8(l);this.emit(Oe.ChatMessage,c,a)},this.handleMetrics=(a,l)=>{this.emit(Oe.MetricsReceived,a,l)},this.handleAudioPlaybackStarted=()=>{this.canPlaybackAudio||(this.audioEnabled=!0,this.emit(Oe.AudioPlaybackStatusChanged,!0))},this.handleAudioPlaybackFailed=a=>{this.log.warn("could not playback audio",Object.assign(Object.assign({},this.logContext),{error:a})),this.canPlaybackAudio&&(this.audioEnabled=!1,this.emit(Oe.AudioPlaybackStatusChanged,!1))},this.handleVideoPlaybackStarted=()=>{this.isVideoPlaybackBlocked&&(this.isVideoPlaybackBlocked=!1,this.emit(Oe.VideoPlaybackStatusChanged,!0))},this.handleVideoPlaybackFailed=()=>{this.isVideoPlaybackBlocked||(this.isVideoPlaybackBlocked=!0,this.emit(Oe.VideoPlaybackStatusChanged,!1))},this.handleDeviceChange=()=>ie(this,void 0,void 0,function*(){var a;((a=bn())===null||a===void 0?void 0:a.os)!=="iOS"&&(yield this.selectDefaultDevices()),this.emit(Oe.MediaDevicesChanged)}),this.handleRoomUpdate=a=>{const l=this.roomInfo;this.roomInfo=a,l&&l.metadata!==a.metadata&&this.emitWhenConnected(Oe.RoomMetadataChanged,a.metadata),(l==null?void 0:l.activeRecording)!==a.activeRecording&&this.emitWhenConnected(Oe.RecordingStatusChanged,a.activeRecording)},this.handleConnectionQualityUpdate=a=>{a.updates.forEach(l=>{if(l.participantSid===this.localParticipant.sid){this.localParticipant.setConnectionQuality(l.quality);return}const c=this.getRemoteParticipantBySid(l.participantSid);c&&c.setConnectionQuality(l.quality)})},this.onLocalParticipantMetadataChanged=a=>{this.emit(Oe.ParticipantMetadataChanged,a,this.localParticipant)},this.onLocalParticipantNameChanged=a=>{this.emit(Oe.ParticipantNameChanged,a,this.localParticipant)},this.onLocalAttributesChanged=a=>{this.emit(Oe.ParticipantAttributesChanged,a,this.localParticipant)},this.onLocalTrackMuted=a=>{this.emit(Oe.TrackMuted,a,this.localParticipant)},this.onLocalTrackUnmuted=a=>{this.emit(Oe.TrackUnmuted,a,this.localParticipant)},this.onTrackProcessorUpdate=a=>{var l;(l=a==null?void 0:a.onPublish)===null||l===void 0||l.call(a,this)},this.onLocalTrackPublished=a=>ie(this,void 0,void 0,function*(){var l,c,u,d,f,g;(l=a.track)===null||l===void 0||l.on(He.TrackProcessorUpdate,this.onTrackProcessorUpdate),(c=a.track)===null||c===void 0||c.on(He.Restarted,this.onLocalTrackRestarted),(f=(d=(u=a.track)===null||u===void 0?void 0:u.getProcessor())===null||d===void 0?void 0:d.onPublish)===null||f===void 0||f.call(d,this),this.emit(Oe.LocalTrackPublished,a,this.localParticipant),zs(a.track)&&(yield a.track.checkForSilence())&&this.emit(Oe.LocalAudioSilenceDetected,a);const T=yield(g=a.track)===null||g===void 0?void 0:g.getDeviceId(!1),S=ig(a.source);S&&T&&T!==this.localParticipant.activeDeviceMap.get(S)&&(this.localParticipant.activeDeviceMap.set(S,T),this.emit(Oe.ActiveDeviceChanged,S,T))}),this.onLocalTrackUnpublished=a=>{var l,c;(l=a.track)===null||l===void 0||l.off(He.TrackProcessorUpdate,this.onTrackProcessorUpdate),(c=a.track)===null||c===void 0||c.off(He.Restarted,this.onLocalTrackRestarted),this.emit(Oe.LocalTrackUnpublished,a,this.localParticipant)},this.onLocalTrackRestarted=a=>ie(this,void 0,void 0,function*(){const l=yield a.getDeviceId(!1),c=ig(a.source);c&&l&&l!==this.localParticipant.activeDeviceMap.get(c)&&(this.log.debug("local track restarted, setting ".concat(c," ").concat(l," active"),this.logContext),this.localParticipant.activeDeviceMap.set(c,l),this.emit(Oe.ActiveDeviceChanged,c,l))}),this.onLocalConnectionQualityChanged=a=>{this.emit(Oe.ConnectionQualityChanged,a,this.localParticipant)},this.onMediaDevicesError=(a,l)=>{this.emit(Oe.MediaDevicesError,a,l)},this.onLocalParticipantPermissionsChanged=a=>{this.emit(Oe.ParticipantPermissionsChanged,a,this.localParticipant)},this.onLocalChatMessageSent=a=>{this.emit(Oe.ChatMessage,a,this.localParticipant)},this.setMaxListeners(100),this.remoteParticipants=new Map,this.sidToIdentity=new Map,this.options=Object.assign(Object.assign({},P8),e),this.log=js((i=this.options.loggerName)!==null&&i!==void 0?i:es.Room),this.transcriptionReceivedTimes=new Map,this.options.audioCaptureDefaults=Object.assign(Object.assign({},ME),e==null?void 0:e.audioCaptureDefaults),this.options.videoCaptureDefaults=Object.assign(Object.assign({},OE),e==null?void 0:e.videoCaptureDefaults),this.options.publishDefaults=Object.assign(Object.assign({},A8),e==null?void 0:e.publishDefaults),this.maybeCreateEngine(),this.disconnectLock=new gn,this.localParticipant=new h5("","",this.engine,this.options,this.rpcHandlers),this.options.videoCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("videoinput",Tr(this.options.videoCaptureDefaults.deviceId)),this.options.audioCaptureDefaults.deviceId&&this.localParticipant.activeDeviceMap.set("audioinput",Tr(this.options.audioCaptureDefaults.deviceId)),!((s=this.options.audioOutput)===null||s===void 0)&&s.deviceId&&this.switchActiveDevice("audiooutput",Tr(this.options.audioOutput.deviceId)).catch(a=>this.log.warn("Could not set audio output: ".concat(a.message),this.logContext)),this.options.e2ee&&this.setupE2EE(),Sn()){const a=new AbortController;(r=navigator.mediaDevices)===null||r===void 0||r.addEventListener("devicechange",this.handleDeviceChange,{signal:a.signal}),Ws.cleanupRegistry&&Ws.cleanupRegistry.register(this,()=>{a.abort()})}}registerTextStreamHandler(e,t){if(this.textStreamHandlers.has(e))throw new TypeError('A text stream handler for topic "'.concat(e,'" has already been set.'));this.textStreamHandlers.set(e,t)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}registerByteStreamHandler(e,t){if(this.byteStreamHandlers.has(e))throw new TypeError('A byte stream handler for topic "'.concat(e,'" has already been set.'));this.byteStreamHandlers.set(e,t)}unregisterByteStreamHandler(e){this.byteStreamHandlers.delete(e)}registerRpcMethod(e,t){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,t)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}handleIncomingRpcRequest(e,t,i,s,r,a){return ie(this,void 0,void 0,function*(){if(yield this.engine.publishRpcAck(e,t),a!==1){yield this.engine.publishRpcResponse(e,t,null,di.builtIn("UNSUPPORTED_VERSION"));return}const l=this.rpcHandlers.get(i);if(!l){yield this.engine.publishRpcResponse(e,t,null,di.builtIn("UNSUPPORTED_METHOD"));return}let c=null,u=null;try{const d=yield l({requestId:t,callerIdentity:e,payload:s,responseTimeout:r});hg(d)>LE?(c=di.builtIn("RESPONSE_PAYLOAD_TOO_LARGE"),console.warn("RPC Response payload too large for ".concat(i))):u=d}catch(d){d instanceof di?c=d:(console.warn("Uncaught error returned by RPC handler for ".concat(i,". Returning APPLICATION_ERROR instead."),d),c=di.builtIn("APPLICATION_ERROR"))}yield this.engine.publishRpcResponse(e,t,u,c)})}setE2EEEnabled(e){return ie(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 m8(this.options.e2ee),this.e2eeManager.on(yr.ParticipantEncryptionStatusChanged,(t,i)=>{o8(i)&&(this.isE2EEEnabled=t),this.emit(Oe.ParticipantEncryptionStatusChanged,t,i)}),this.e2eeManager.on(yr.EncryptionError,t=>this.emit(Oe.EncryptionError,t)),(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,t;return(t=(e=this.roomInfo)===null||e===void 0?void 0:e.activeRecording)!==null&&t!==void 0?t:!1}getSid(){return ie(this,void 0,void 0,function*(){return this.state===Ot.Disconnected?"":this.roomInfo&&this.roomInfo.sid!==""?this.roomInfo.sid:new Promise((e,t)=>{const i=s=>{s.sid!==""&&(this.engine.off(Ge.RoomUpdate,i),e(s.sid))};this.engine.on(Ge.RoomUpdate,i),this.once(Oe.Disconnected,()=>{this.engine.off(Ge.RoomUpdate,i),t("Room disconnected before room server id was available")})})})}get name(){var e,t;return(t=(e=this.roomInfo)===null||e===void 0?void 0:e.name)!==null&&t!==void 0?t:""}get metadata(){var e;return(e=this.roomInfo)===null||e===void 0?void 0:e.metadata}get numParticipants(){var e,t;return(t=(e=this.roomInfo)===null||e===void 0?void 0:e.numParticipants)!==null&&t!==void 0?t:0}get numPublishers(){var e,t;return(t=(e=this.roomInfo)===null||e===void 0?void 0:e.numPublishers)!==null&&t!==void 0?t:0}maybeCreateEngine(){this.engine&&!this.engine.isClosed||(this.engine=new J8(this.options),this.engine.on(Ge.ParticipantUpdate,this.handleParticipantUpdates).on(Ge.RoomUpdate,this.handleRoomUpdate).on(Ge.SpeakersChanged,this.handleSpeakersChanged).on(Ge.StreamStateChanged,this.handleStreamStateUpdate).on(Ge.ConnectionQualityUpdate,this.handleConnectionQualityUpdate).on(Ge.SubscriptionError,this.handleSubscriptionError).on(Ge.SubscriptionPermissionUpdate,this.handleSubscriptionPermissionUpdate).on(Ge.MediaTrackAdded,(e,t,i)=>{this.onTrackAdded(e,t,i)}).on(Ge.Disconnected,e=>{this.handleDisconnect(this.options.stopLocalTrackOnUnpublish,e)}).on(Ge.ActiveSpeakersUpdate,this.handleActiveSpeakersUpdate).on(Ge.DataPacketReceived,this.handleDataPacket).on(Ge.Resuming,()=>{this.clearConnectionReconcile(),this.isResuming=!0,this.log.info("Resuming signal connection",this.logContext),this.setAndEmitConnectionState(Ot.SignalReconnecting)&&this.emit(Oe.SignalReconnecting)}).on(Ge.Resumed,()=>{this.registerConnectionReconcile(),this.isResuming=!1,this.log.info("Resumed signal connection",this.logContext),this.updateSubscriptions(),this.emitBufferedEvents(),this.setAndEmitConnectionState(Ot.Connected)&&this.emit(Oe.Reconnected)}).on(Ge.SignalResumed,()=>{this.bufferedEvents=[],(this.state===Ot.Reconnecting||this.isResuming)&&this.sendSyncState()}).on(Ge.Restarting,this.handleRestarting).on(Ge.SignalRestarted,this.handleSignalRestarted).on(Ge.Offline,()=>{this.setAndEmitConnectionState(Ot.Reconnecting)&&this.emit(Oe.Reconnecting)}).on(Ge.DCBufferStatusChanged,(e,t)=>{this.emit(Oe.DCBufferStatusChanged,e,t)}).on(Ge.LocalTrackSubscribed,e=>{const t=this.localParticipant.getTrackPublications().find(i=>{let{trackSid:s}=i;return s===e});if(!t){this.log.warn("could not find local track subscription for subscribed event",this.logContext);return}this.localParticipant.emit(ze.LocalTrackSubscribed,t),this.emitWhenConnected(Oe.LocalTrackSubscribed,t,this.localParticipant)}).on(Ge.RoomMoved,e=>{this.log.debug("room moved",e),e.room&&this.handleRoomUpdate(e.room),this.remoteParticipants.forEach((t,i)=>{this.handleParticipantDisconnected(i,t)}),this.emit(Oe.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 t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return Ri.getInstance().getDevices(e,t)}prepareConnection(e,t){return ie(this,void 0,void 0,function*(){if(this.state===Ot.Disconnected){this.log.debug("prepareConnection to ".concat(e),this.logContext);try{if(Wm(new URL(e))&&t){this.regionUrlProvider=new bg(e,t);const i=yield this.regionUrlProvider.getNextBestRegionUrl();i&&this.state===Ot.Disconnected&&(this.regionUrl=i,yield fetch(Jm(i),{method:"HEAD"}),this.log.debug("prepared connection to ".concat(i),this.logContext))}else yield fetch(Jm(e),{method:"HEAD"})}catch(i){this.log.warn("could not prepare connection",Object.assign(Object.assign({},this.logContext),{error:i}))}}})}getParticipantByIdentity(e){return this.localParticipant.identity===e?this.localParticipant:this.remoteParticipants.get(e)}clearConnectionFutures(){this.connectFuture=void 0}simulateScenario(e,t){return ie(this,void 0,void 0,function*(){let i=()=>{},s;switch(e){case"signal-reconnect":yield this.engine.client.handleOnClose("simulate disconnect");break;case"speaker":s=new Cs({scenario:{case:"speakerUpdate",value:3}});break;case"node-failure":s=new Cs({scenario:{case:"nodeFailure",value:!0}});break;case"server-leave":s=new Cs({scenario:{case:"serverLeave",value:!0}});break;case"migration":s=new Cs({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":i=()=>ie(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),s=new Cs({scenario:{case:"disconnectSignalOnResume",value:!0}});break;case"disconnect-signal-on-resume-no-messages":i=()=>ie(this,void 0,void 0,function*(){yield this.engine.client.handleOnClose("simulate resume-disconnect")}),s=new Cs({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":s=new Cs({scenario:{case:"switchCandidateProtocol",value:e==="force-tls"?2:1}}),i=()=>ie(this,void 0,void 0,function*(){const r=this.engine.client.onLeave;r&&r(new wd({reason:Qn.CLIENT_INITIATED,action:Co.RECONNECT}))});break;case"subscriber-bandwidth":if(t===void 0||typeof t!="number")throw new Error("subscriber-bandwidth requires a number as argument");s=new Cs({scenario:{case:"subscriberBandwidth",value:da(t)}});break;case"leave-full-reconnect":s=new Cs({scenario:{case:"leaveRequestFullReconnect",value:!0}})}s&&(yield this.engine.client.sendSimulateScenario(s),yield i())})}get canPlaybackAudio(){return this.audioEnabled}get canPlaybackVideo(){return!this.isVideoPlaybackBlocked}getActiveDevice(e){return this.localParticipant.activeDeviceMap.get(e)}switchActiveDevice(e,t){return ie(this,arguments,void 0,function(i,s){var r=this;let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return(function*(){var l,c,u,d,f,g,T,S;let m=!0,_=!1;const k=a?{exact:s}:s;if(i==="audioinput"){_=r.localParticipant.audioTrackPublications.size===0;const R=(l=r.getActiveDevice(i))!==null&&l!==void 0?l:r.options.audioCaptureDefaults.deviceId;r.options.audioCaptureDefaults.deviceId=k;const D=Array.from(r.localParticipant.audioTrackPublications.values()).filter(F=>F.source===Ae.Source.Microphone);try{m=(yield Promise.all(D.map(F=>{var L;return(L=F.audioTrack)===null||L===void 0?void 0:L.setDeviceId(k)}))).every(F=>F===!0)}catch(F){throw r.options.audioCaptureDefaults.deviceId=R,F}}else if(i==="videoinput"){_=r.localParticipant.videoTrackPublications.size===0;const R=(c=r.getActiveDevice(i))!==null&&c!==void 0?c:r.options.videoCaptureDefaults.deviceId;r.options.videoCaptureDefaults.deviceId=k;const D=Array.from(r.localParticipant.videoTrackPublications.values()).filter(F=>F.source===Ae.Source.Camera);try{m=(yield Promise.all(D.map(F=>{var L;return(L=F.videoTrack)===null||L===void 0?void 0:L.setDeviceId(k)}))).every(F=>F===!0)}catch(F){throw r.options.videoCaptureDefaults.deviceId=R,F}}else if(i==="audiooutput"){if(!Gm()&&!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&&(s=(u=yield Ri.getInstance().normalizeDeviceId("audiooutput",s))!==null&&u!==void 0?u:""),(d=(S=r.options).audioOutput)!==null&&d!==void 0||(S.audioOutput={});const R=(f=r.getActiveDevice(i))!==null&&f!==void 0?f:r.options.audioOutput.deviceId;r.options.audioOutput.deviceId=s;try{r.options.webAudioMix&&((g=r.audioContext)===null||g===void 0||g.setSinkId(s)),yield Promise.all(Array.from(r.remoteParticipants.values()).map(D=>D.setAudioOutput({deviceId:s})))}catch(D){throw r.options.audioOutput.deviceId=R,D}}return(_||i==="audiooutput")&&(r.localParticipant.activeDeviceMap.set(i,i==="audiooutput"&&((T=r.options.audioOutput)===null||T===void 0?void 0:T.deviceId)||s),r.emit(Oe.ActiveDeviceChanged,i,s)),m})()})}setupLocalParticipantEvents(){this.localParticipant.on(ze.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).on(ze.ParticipantNameChanged,this.onLocalParticipantNameChanged).on(ze.AttributesChanged,this.onLocalAttributesChanged).on(ze.TrackMuted,this.onLocalTrackMuted).on(ze.TrackUnmuted,this.onLocalTrackUnmuted).on(ze.LocalTrackPublished,this.onLocalTrackPublished).on(ze.LocalTrackUnpublished,this.onLocalTrackUnpublished).on(ze.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).on(ze.MediaDevicesError,this.onMediaDevicesError).on(ze.AudioStreamAcquired,this.startAudio).on(ze.ChatMessage,this.onLocalChatMessageSent).on(ze.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,t,i){if(this.state===Ot.Connecting||this.state===Ot.Reconnecting){const d=()=>{this.onTrackAdded(e,t,i),f()},f=()=>{this.off(Oe.Reconnected,d),this.off(Oe.Connected,d),this.off(Oe.Disconnected,f)};this.once(Oe.Reconnected,d),this.once(Oe.Connected,d),this.once(Oe.Disconnected,f);return}if(this.state===Ot.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 s=GU(t.id),r=s[0];let a=s[1],l=e.id;if(a&&a.startsWith("TR")&&(l=a),r===this.localParticipant.sid){this.log.warn("tried to create RemoteParticipant for local participant",this.logContext);return}const c=Array.from(this.remoteParticipants.values()).find(d=>d.sid===r);if(!c){this.log.error("Tried to add a track for a participant, that's not present. Sid: ".concat(r),this.logContext);return}let u;this.options.adaptiveStream&&(typeof this.options.adaptiveStream=="object"?u=this.options.adaptiveStream:u={}),c.addSubscribedMediaTrack(e,l,t,i,u)}handleDisconnect(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,t=arguments.length>1?arguments[1]:void 0;var i;if(this.clearConnectionReconcile(),this.isResuming=!1,this.bufferedEvents=[],this.transcriptionReceivedTimes.clear(),this.state!==Ot.Disconnected){this.regionUrl=void 0;try{this.remoteParticipants.forEach(s=>{s.trackPublications.forEach(r=>{s.unpublishTrack(r.trackSid)})}),this.localParticipant.trackPublications.forEach(s=>{var r,a,l;s.track&&this.localParticipant.unpublishTrack(s.track,e),e?((r=s.track)===null||r===void 0||r.detach(),(a=s.track)===null||a===void 0||a.stop()):(l=s.track)===null||l===void 0||l.stopMonitor()}),this.localParticipant.off(ze.ParticipantMetadataChanged,this.onLocalParticipantMetadataChanged).off(ze.ParticipantNameChanged,this.onLocalParticipantNameChanged).off(ze.AttributesChanged,this.onLocalAttributesChanged).off(ze.TrackMuted,this.onLocalTrackMuted).off(ze.TrackUnmuted,this.onLocalTrackUnmuted).off(ze.LocalTrackPublished,this.onLocalTrackPublished).off(ze.LocalTrackUnpublished,this.onLocalTrackUnpublished).off(ze.ConnectionQualityChanged,this.onLocalConnectionQualityChanged).off(ze.MediaDevicesError,this.onMediaDevicesError).off(ze.AudioStreamAcquired,this.startAudio).off(ze.ChatMessage,this.onLocalChatMessageSent).off(ze.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),Sn()&&(window.removeEventListener("beforeunload",this.onPageLeave),window.removeEventListener("pagehide",this.onPageLeave),window.removeEventListener("freeze",this.onPageLeave),(i=navigator.mediaDevices)===null||i===void 0||i.removeEventListener("devicechange",this.handleDeviceChange))}finally{this.setAndEmitConnectionState(Ot.Disconnected),this.emit(Oe.Disconnected,t)}}}handleParticipantDisconnected(e,t){var i;this.remoteParticipants.delete(e),t&&(t.trackPublications.forEach(s=>{t.unpublishTrack(s.trackSid,!0)}),this.emit(Oe.ParticipantDisconnected,t),t.setDisconnected(),(i=this.localParticipant)===null||i===void 0||i.handleParticipantDisconnected(t.identity))}handleStreamHeader(e,t){return ie(this,void 0,void 0,function*(){var i;if(e.contentHeader.case==="byteHeader"){const s=this.byteStreamHandlers.get(e.topic);if(!s){this.log.debug("ignoring incoming byte stream due to no handler for topic",e.topic);return}let r;const a={id:e.streamId,name:(i=e.contentHeader.value.name)!==null&&i!==void 0?i:"unknown",mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Ud(e.timestamp),attributes:e.attributes},l=new ReadableStream({start:c=>{r=c,this.byteStreamControllers.set(e.streamId,{info:a,controller:r,startTime:Date.now()})}});s(new t5(a,l,Ud(e.totalLength)),{identity:t})}else if(e.contentHeader.case==="textHeader"){const s=this.textStreamHandlers.get(e.topic);if(!s){this.log.debug("ignoring incoming text stream due to no handler for topic",e.topic);return}let r;const a={id:e.streamId,mimeType:e.mimeType,size:e.totalLength?Number(e.totalLength):void 0,topic:e.topic,timestamp:Number(e.timestamp),attributes:e.attributes},l=new ReadableStream({start:c=>{r=c,this.textStreamControllers.set(e.streamId,{info:a,controller:r,startTime:Date.now()})}});s(new i5(a,l,Ud(e.totalLength)),{identity:t})}})}handleStreamChunk(e){const t=this.byteStreamControllers.get(e.streamId);t&&e.content.length>0&&t.controller.enqueue(e);const i=this.textStreamControllers.get(e.streamId);i&&e.content.length>0&&i.controller.enqueue(e)}handleStreamTrailer(e){const t=this.textStreamControllers.get(e.streamId);t&&(t.info.attributes=Object.assign(Object.assign({},t.info.attributes),e.attributes),t.controller.close(),this.textStreamControllers.delete(e.streamId));const i=this.byteStreamControllers.get(e.streamId);i&&(i.info.attributes=Object.assign(Object.assign({},i.info.attributes),e.attributes),i.controller.close(),this.byteStreamControllers.delete(e.streamId))}selectDefaultDevices(){return ie(this,void 0,void 0,function*(){var e,t,i;const s=Ri.getInstance().previousDevices,r=yield Ri.getInstance().getDevices(void 0,!1),a=bn();if((a==null?void 0:a.name)==="Chrome"&&a.os!=="iOS")for(let c of r){const u=s.find(d=>d.deviceId===c.deviceId);u&&u.label!==""&&u.kind===c.kind&&u.label!==c.label&&this.getActiveDevice(c.kind)==="default"&&this.emit(Oe.ActiveDeviceChanged,c.kind,c.deviceId)}const l=["audiooutput","audioinput","videoinput"];for(let c of l){const u=c8(c),d=this.localParticipant.getTrackPublication(u);if(d&&(!((e=d.track)===null||e===void 0)&&e.isUserProvided))continue;const f=r.filter(T=>T.kind===c),g=this.getActiveDevice(c);if(g===((t=s.filter(T=>T.kind===c)[0])===null||t===void 0?void 0:t.deviceId)&&f.length>0&&((i=f[0])===null||i===void 0?void 0:i.deviceId)!==g){yield this.switchActiveDevice(c,f[0].deviceId);continue}c==="audioinput"&&!hE()||c==="videoinput"||f.length>0&&!f.find(T=>T.deviceId===this.getActiveDevice(c))&&(c!=="audiooutput"||!hE())&&(yield this.switchActiveDevice(c,f[0].deviceId))}})}acquireAudioContext(){return ie(this,void 0,void 0,function*(){var e,t;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=CE())!==null&&e!==void 0?e:void 0),this.options.webAudioMix&&this.remoteParticipants.forEach(s=>s.setAudioContext(this.audioContext)),this.localParticipant.setAudioContext(this.audioContext),this.audioContext&&this.audioContext.state==="suspended")try{yield Promise.race([this.audioContext.resume(),Tn(200)])}catch(s){this.log.warn("Could not resume audio context",Object.assign(Object.assign({},this.logContext),{error:s}))}const i=((t=this.audioContext)===null||t===void 0?void 0:t.state)==="running";i!==this.canPlaybackAudio&&(this.audioEnabled=i,this.emit(Oe.AudioPlaybackStatusChanged,i))})}createParticipant(e,t){var i;let s;return t?s=zd.fromParticipantInfo(this.engine.client,t,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}):s=new zd(this.engine.client,"",e,void 0,void 0,void 0,{loggerContextCb:()=>this.logContext,loggerName:this.options.loggerName}),this.options.webAudioMix&&s.setAudioContext(this.audioContext),!((i=this.options.audioOutput)===null||i===void 0)&&i.deviceId&&s.setAudioOutput(this.options.audioOutput).catch(r=>this.log.warn("Could not set audio output: ".concat(r.message),this.logContext)),s}getOrCreateParticipant(e,t){if(this.remoteParticipants.has(e)){const s=this.remoteParticipants.get(e);return t&&s.updateInfo(t)&&this.sidToIdentity.set(t.sid,t.identity),s}const i=this.createParticipant(e,t);return this.remoteParticipants.set(e,i),this.sidToIdentity.set(t.sid,t.identity),this.emitWhenConnected(Oe.ParticipantConnected,i),i.on(ze.TrackPublished,s=>{this.emitWhenConnected(Oe.TrackPublished,s,i)}).on(ze.TrackSubscribed,(s,r)=>{s.kind===Ae.Kind.Audio?(s.on(He.AudioPlaybackStarted,this.handleAudioPlaybackStarted),s.on(He.AudioPlaybackFailed,this.handleAudioPlaybackFailed)):s.kind===Ae.Kind.Video&&(s.on(He.VideoPlaybackFailed,this.handleVideoPlaybackFailed),s.on(He.VideoPlaybackStarted,this.handleVideoPlaybackStarted)),this.emit(Oe.TrackSubscribed,s,r,i)}).on(ze.TrackUnpublished,s=>{this.emit(Oe.TrackUnpublished,s,i)}).on(ze.TrackUnsubscribed,(s,r)=>{this.emit(Oe.TrackUnsubscribed,s,r,i)}).on(ze.TrackMuted,s=>{this.emitWhenConnected(Oe.TrackMuted,s,i)}).on(ze.TrackUnmuted,s=>{this.emitWhenConnected(Oe.TrackUnmuted,s,i)}).on(ze.ParticipantMetadataChanged,s=>{this.emitWhenConnected(Oe.ParticipantMetadataChanged,s,i)}).on(ze.ParticipantNameChanged,s=>{this.emitWhenConnected(Oe.ParticipantNameChanged,s,i)}).on(ze.AttributesChanged,s=>{this.emitWhenConnected(Oe.ParticipantAttributesChanged,s,i)}).on(ze.ConnectionQualityChanged,s=>{this.emitWhenConnected(Oe.ConnectionQualityChanged,s,i)}).on(ze.ParticipantPermissionsChanged,s=>{this.emitWhenConnected(Oe.ParticipantPermissionsChanged,s,i)}).on(ze.TrackSubscriptionStatusChanged,(s,r)=>{this.emitWhenConnected(Oe.TrackSubscriptionStatusChanged,s,r,i)}).on(ze.TrackSubscriptionFailed,(s,r)=>{this.emit(Oe.TrackSubscriptionFailed,s,i,r)}).on(ze.TrackSubscriptionPermissionChanged,(s,r)=>{this.emitWhenConnected(Oe.TrackSubscriptionPermissionChanged,s,r,i)}).on(ze.Active,()=>{this.emitWhenConnected(Oe.ParticipantActive,i),i.kind===Ql.AGENT&&this.localParticipant.setActiveAgent(i)}),t&&i.updateInfo(t),i}sendSyncState(){const e=Array.from(this.remoteParticipants.values()).reduce((i,s)=>(i.push(...s.getTrackPublications()),i),[]),t=this.localParticipant.getTrackPublications();this.engine.sendSyncState(e,t)}updateSubscriptions(){for(const e of this.remoteParticipants.values())for(const t of e.videoTrackPublications.values())t.isSubscribed&&a8(t)&&t.emitTrackUpdate()}getRemoteParticipantBySid(e){const t=this.sidToIdentity.get(e);if(t)return this.remoteParticipants.get(t)}registerConnectionReconcile(){this.clearConnectionReconcile();let e=0;this.connectionReconcileInterval=Ui.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,Qn.STATE_MISMATCH))):e=0},p5)}clearConnectionReconcile(){this.connectionReconcileInterval&&Ui.clearInterval(this.connectionReconcileInterval)}setAndEmitConnectionState(e){return e===this.state?!1:(this.state=e,this.emit(Oe.ConnectionStateChanged,this.state),!0)}emitBufferedEvents(){this.bufferedEvents.forEach(e=>{let[t,i]=e;this.emit(t,...i)}),this.bufferedEvents=[]}emitWhenConnected(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),s=1;s<t;s++)i[s-1]=arguments[s];if(this.state===Ot.Reconnecting||this.isResuming||!this.engine||this.engine.pendingReconnect)this.bufferedEvents.push([e,i]);else if(this.state===Ot.Connected)return this.emit(e,...i);return!1}simulateParticipants(e){return ie(this,void 0,void 0,function*(){var t,i;const s=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 Cd({sid:"RM_SIMULATED",name:"simulated-room",emptyTimeout:0,maxParticipants:0,creationTime:ii.parse(new Date().getTime()),metadata:"",numParticipants:1,numPublishers:1,turnPassword:"",enabledCodecs:[],activeRecording:!1}),this.localParticipant.updateInfo(new aa({identity:"simulated-local",name:"local-name"})),this.setupLocalParticipantEvents(),this.emit(Oe.SignalConnected),this.emit(Oe.Connected),this.setAndEmitConnectionState(Ot.Connected),s.video){const a=new _g(Ae.Kind.Video,new _o({source:_i.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:Jn.AUDIO,name:"video-dummy"}),new Hd(s.useRealTracks?(yield window.navigator.mediaDevices.getUserMedia({video:!0})).getVideoTracks()[0]:bE(160*((t=r.aspectRatios[0])!==null&&t!==void 0?t:1),160,!0,!0),void 0,!1,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(a),this.localParticipant.emit(ze.LocalTrackPublished,a)}if(s.audio){const a=new _g(Ae.Kind.Audio,new _o({source:_i.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:Jn.AUDIO}),new qd(s.useRealTracks?(yield navigator.mediaDevices.getUserMedia({audio:!0})).getAudioTracks()[0]:Xm(),void 0,!1,this.audioContext,{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext}),{loggerName:this.options.loggerName,loggerContextCb:()=>this.logContext});this.localParticipant.addTrackPublication(a),this.localParticipant.emit(ze.LocalTrackPublished,a)}for(let a=0;a<r.count-1;a+=1){let l=new aa({sid:Math.floor(Math.random()*1e4).toString(),identity:"simulated-".concat(a),state:So.ACTIVE,tracks:[],joinedAt:ii.parse(Date.now())});const c=this.getOrCreateParticipant(l.identity,l);if(r.video){const u=bE(160*((i=r.aspectRatios[a%r.aspectRatios.length])!==null&&i!==void 0?i:1),160,!1,!0),d=new _o({source:_i.CAMERA,sid:Math.floor(Math.random()*1e4).toString(),type:Jn.AUDIO});c.addSubscribedMediaTrack(u,d.sid,new MediaStream([u]),new RTCRtpReceiver),l.tracks=[...l.tracks,d]}if(r.audio){const u=Xm(),d=new _o({source:_i.MICROPHONE,sid:Math.floor(Math.random()*1e4).toString(),type:Jn.AUDIO});c.addSubscribedMediaTrack(u,d.sid,new MediaStream([u]),new RTCRtpReceiver),l.tracks=[...l.tracks,d]}c.updateInfo(l)}})}emit(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),s=1;s<t;s++)i[s-1]=arguments[s];if(e!==Oe.ActiveSpeakersChanged&&e!==Oe.TranscriptionReceived){const r=JE(i).filter(a=>a!==void 0);this.log.debug("room event ".concat(e),Object.assign(Object.assign({},this.logContext),{event:e,args:r}))}return super.emit(e,...i)}}Ws.cleanupRegistry=typeof FinalizationRegistry<"u"&&new FinalizationRegistry(n=>{n()});function JE(n){return n.map(e=>{if(e)return Array.isArray(e)?JE(e):typeof e=="object"?"logContext"in e?e.logContext:void 0:e})}var ns;(function(n){n[n.IDLE=0]="IDLE",n[n.RUNNING=1]="RUNNING",n[n.SKIPPED=2]="SKIPPED",n[n.SUCCESS=3]="SUCCESS",n[n.FAILED=4]="FAILED"})(ns||(ns={}));class kr extends ks.EventEmitter{constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.status=ns.IDLE,this.logs=[],this.options={},this.url=e,this.token=t,this.name=this.constructor.name,this.room=new Ws(i.roomOptions),this.connectOptions=i.connectOptions,this.options=i}run(e){return ie(this,void 0,void 0,function*(){if(this.status!==ns.IDLE)throw Error("check is running already");this.setStatus(ns.RUNNING);try{yield this.perform()}catch(t){t instanceof Error&&(this.options.errorsAsWarnings?this.appendWarning(t.message):this.appendError(t.message))}return yield this.disconnect(),yield new Promise(t=>setTimeout(t,500)),this.status!==ns.SKIPPED&&this.setStatus(this.isSuccess()?ns.SUCCESS:ns.FAILED),e&&e(),this.getInfo()})}isSuccess(){return!this.logs.some(e=>e.level==="error")}connect(e){return ie(this,void 0,void 0,function*(){return this.room.state===Ot.Connected?this.room:(e||(e=this.url),yield this.room.connect(e,this.token,this.connectOptions),this.room)})}disconnect(){return ie(this,void 0,void 0,function*(){this.room&&this.room.state!==Ot.Disconnected&&(yield this.room.disconnect(),yield new Promise(e=>setTimeout(e,500)))})}skip(){this.setStatus(ns.SKIPPED)}switchProtocol(e){return ie(this,void 0,void 0,function*(){let t=!1,i=!1;if(this.room.on(Oe.Reconnecting,()=>{t=!0}),this.room.once(Oe.Reconnected,()=>{i=!0}),this.room.simulateScenario("force-".concat(e)),yield new Promise(r=>setTimeout(r,1e3)),!t)return;const s=Date.now()+1e4;for(;Date.now()<s;){if(i)return;yield Tn(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 m5 extends kr{get description(){return"Cloud regions"}perform(){return ie(this,void 0,void 0,function*(){const e=new bg(this.url,this.token);if(!e.isCloud()){this.skip();return}const t=[],i=new Set;for(let r=0;r<3;r++){const a=yield e.getNextBestRegionUrl();if(!a)break;if(i.has(a))continue;i.add(a);const l=yield this.checkCloudRegion(a);this.appendMessage("".concat(l.region," RTT: ").concat(l.rtt,"ms, duration: ").concat(l.duration,"ms")),t.push(l)}t.sort((r,a)=>(r.duration-a.duration)*.5+(r.rtt-a.rtt)*.5);const s=t[0];this.bestStats=s,this.appendMessage("best Cloud region: ".concat(s.region))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkCloudRegion(e){return ie(this,void 0,void 0,function*(){var t,i;yield this.connect(e),this.options.protocol==="tcp"&&(yield this.switchProtocol("tcp"));const s=(t=this.room.serverInfo)===null||t===void 0?void 0:t.region;if(!s)throw new Error("Region not found");const r=yield this.room.localParticipant.streamText({topic:"test"}),a=1e3,c=1e6/a,u="A".repeat(a),d=Date.now();for(let S=0;S<c;S++)yield r.write(u);yield r.close();const f=Date.now(),g=yield(i=this.room.engine.pcManager)===null||i===void 0?void 0:i.publisher.getStats(),T={region:s,rtt:1e4,duration:f-d};return g==null||g.forEach(S=>{S.type==="candidate-pair"&&S.nominated&&(T.rtt=S.currentRoundTripTime*1e3)}),yield this.disconnect(),T})}}const Cg=1e4;class g5 extends kr{get description(){return"Connection via UDP vs TCP"}perform(){return ie(this,void 0,void 0,function*(){const e=yield this.checkConnectionProtocol("udp"),t=yield this.checkConnectionProtocol("tcp");this.bestStats=e,e.qualityLimitationDurations.bandwidth-t.qualityLimitationDurations.bandwidth>.5||(e.packetsLost-t.packetsLost)/e.packetsSent>.01?(this.appendMessage("best connection quality via tcp"),this.bestStats=t):this.appendMessage("best connection quality via udp");const i=this.bestStats;this.appendMessage("upstream bitrate: ".concat((i.bitrateTotal/i.count/1e3/1e3).toFixed(2)," mbps")),this.appendMessage("RTT: ".concat((i.rttTotal/i.count*1e3).toFixed(2)," ms")),this.appendMessage("jitter: ".concat((i.jitterTotal/i.count*1e3).toFixed(2)," ms")),i.packetsLost>0&&this.appendWarning("packets lost: ".concat((i.packetsLost/i.packetsSent*100).toFixed(2),"%")),i.qualityLimitationDurations.bandwidth>1&&this.appendWarning("bandwidth limited ".concat((i.qualityLimitationDurations.bandwidth/(Cg/1e3)*100).toFixed(2),"%")),i.qualityLimitationDurations.cpu>0&&this.appendWarning("cpu limited ".concat((i.qualityLimitationDurations.cpu/(Cg/1e3)*100).toFixed(2),"%"))})}getInfo(){const e=super.getInfo();return e.data=this.bestStats,e}checkConnectionProtocol(e){return ie(this,void 0,void 0,function*(){yield this.connect(),e==="tcp"?yield this.switchProtocol("tcp"):yield this.switchProtocol("udp");const t=document.createElement("canvas");t.width=1280,t.height=720;const i=t.getContext("2d");if(!i)throw new Error("Could not get canvas context");let s=0;const r=()=>{s=(s+1)%360,i.fillStyle="hsl(".concat(s,", 100%, 50%)"),i.fillRect(0,0,t.width,t.height),requestAnimationFrame(r)};r();const l=t.captureStream(30).getVideoTracks()[0],u=(yield this.room.localParticipant.publishTrack(l,{simulcast:!1,degradationPreference:"maintain-resolution",videoEncoding:{maxBitrate:2e6}})).track,d={protocol:e,packetsLost:0,packetsSent:0,qualityLimitationDurations:{},rttTotal:0,jitterTotal:0,bitrateTotal:0,count:0},f=setInterval(()=>ie(this,void 0,void 0,function*(){const g=yield u.getRTCStatsReport();g==null||g.forEach(T=>{T.type==="outbound-rtp"?(d.packetsSent=T.packetsSent,d.qualityLimitationDurations=T.qualityLimitationDurations,d.bitrateTotal+=T.targetBitrate,d.count++):T.type==="remote-inbound-rtp"&&(d.packetsLost=T.packetsLost,d.rttTotal+=T.roundTripTime,d.jitterTotal+=T.jitter)})}),1e3);return yield new Promise(g=>setTimeout(g,Cg)),clearInterval(f),l.stop(),t.remove(),yield this.disconnect(),d})}}class y5 extends kr{get description(){return"Can publish audio"}perform(){return ie(this,void 0,void 0,function*(){var e;const t=yield this.connect(),i=yield c5();if(yield _E(i,1e3))throw new Error("unable to detect audio from microphone");this.appendMessage("detected audio from microphone"),t.localParticipant.publishTrack(i),yield new Promise(l=>setTimeout(l,3e3));const r=yield(e=i.sender)===null||e===void 0?void 0:e.getStats();if(!r)throw new Error("Could not get RTCStats");let a=0;if(r.forEach(l=>{l.type==="outbound-rtp"&&(l.kind==="audio"||!l.kind&&l.mediaType==="audio")&&(a=l.packetsSent)}),a===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(a," audio packets"))})}}class v5 extends kr{get description(){return"Can publish video"}perform(){return ie(this,void 0,void 0,function*(){var e;const t=yield this.connect(),i=yield l5();yield this.checkForVideo(i.mediaStreamTrack),t.localParticipant.publishTrack(i),yield new Promise(a=>setTimeout(a,5e3));const s=yield(e=i.sender)===null||e===void 0?void 0:e.getStats();if(!s)throw new Error("Could not get RTCStats");let r=0;if(s.forEach(a=>{a.type==="outbound-rtp"&&(a.kind==="video"||!a.kind&&a.mediaType==="video")&&(r+=a.packetsSent)}),r===0)throw new Error("Could not determine packets are sent");this.appendMessage("published ".concat(r," video packets"))})}checkForVideo(e){return ie(this,void 0,void 0,function*(){const t=new MediaStream;t.addTrack(e.clone());const i=document.createElement("video");i.srcObject=t,i.muted=!0,yield new Promise(s=>{i.onplay=()=>{setTimeout(()=>{var r,a,l,c;const u=document.createElement("canvas"),d=e.getSettings(),f=(a=(r=d.width)!==null&&r!==void 0?r:i.videoWidth)!==null&&a!==void 0?a:1280,g=(c=(l=d.height)!==null&&l!==void 0?l:i.videoHeight)!==null&&c!==void 0?c:720;u.width=f,u.height=g;const T=u.getContext("2d");T.drawImage(i,0,0);const m=T.getImageData(0,0,u.width,u.height).data;let _=!0;for(let k=0;k<m.length;k+=4)if(m[k]!==0||m[k+1]!==0||m[k+2]!==0){_=!1;break}_?this.appendError("camera appears to be producing only black frames"):this.appendMessage("received video frames"),s()},1e3)},i.play()}),i.remove()})}}class b5 extends kr{get description(){return"Resuming connection after interruption"}perform(){return ie(this,void 0,void 0,function*(){var e;const t=yield this.connect();let i=!1,s=!1,r;const a=new Promise(u=>{setTimeout(u,5e3),r=u}),l=()=>{i=!0};t.on(Oe.SignalReconnecting,l).on(Oe.Reconnecting,l).on(Oe.Reconnected,()=>{s=!0,r(!0)}),(e=t.engine.client.ws)===null||e===void 0||e.close();const c=t.engine.client.onClose;if(c&&c(""),yield a,i){if(!s||t.state!==Ot.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 T5 extends kr{get description(){return"Can connect via TURN"}perform(){return ie(this,void 0,void 0,function*(){var e,t;const i=new sg,s=yield i.join(this.url,this.token,{autoSubscribe:!0,maxRetries:0,e2eeEnabled:!1,websocketTimeout:15e3});let r=!1,a=!1,l=!1;for(let c of s.iceServers)for(let u of c.urls)u.startsWith("turn:")?(a=!0,l=!0):u.startsWith("turns:")&&(a=!0,l=!0,r=!0),u.startsWith("stun:")&&(l=!0);l?a&&!r&&this.appendWarning("TURN is configured server side, but TURN/TLS is unavailable."):this.appendWarning("No STUN servers configured on server side."),yield i.close(),!((t=(e=this.connectOptions)===null||e===void 0?void 0:e.rtcConfig)===null||t===void 0)&&t.iceServers||a?yield this.room.connect(this.url,this.token,{rtcConfig:{iceTransportPolicy:"relay"}}):(this.appendWarning("No TURN servers configured."),this.skip(),yield new Promise(c=>setTimeout(c,0)))})}}class S5 extends kr{get description(){return"Establishing WebRTC connection"}perform(){return ie(this,void 0,void 0,function*(){let e=!1,t=!1;this.room.on(Oe.SignalConnected,()=>{const i=this.room.engine.client.onTrickle;this.room.engine.client.onTrickle=(s,r)=>{if(s.candidate){const a=new RTCIceCandidate(s);let l="".concat(a.protocol," ").concat(a.address,":").concat(a.port," ").concat(a.type);a.address&&(_5(a.address)?l+=" (private)":a.protocol==="tcp"&&a.tcpType==="passive"?(e=!0,l+=" (passive)"):a.protocol==="udp"&&(t=!0)),this.appendMessage(l)}i&&i(s,r)},this.room.engine.pcManager&&(this.room.engine.pcManager.subscriber.onIceCandidateError=s=>{s instanceof RTCPeerConnectionIceErrorEvent&&this.appendWarning("error with ICE candidate: ".concat(s.errorCode," ").concat(s.errorText," ").concat(s.url))})});try{yield this.connect(),At.info("now the room is connected")}catch(i){throw this.appendWarning("ports need to be open on firewall in order to connect."),i}e||this.appendWarning("Server is not configured for ICE/TCP"),t||this.appendWarning("No public IPv4 UDP candidates were found. Your server is likely not configured correctly")})}}function _5(n){const e=n.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 t=parseInt(e[1],10);if(t>=16&&t<=31)return!0}}return!1}class C5 extends kr{get description(){return"Connecting to signal connection via WebSocket"}perform(){return ie(this,void 0,void 0,function*(){var e,t,i;(this.url.startsWith("ws:")||this.url.startsWith("http:"))&&this.appendWarning("Server is insecure, clients may block connections to it");let s=new sg;const r=yield s.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)===ZC.Cloud&&(!((t=r.serverInfo)===null||t===void 0)&&t.region)&&this.appendMessage("LiveKit Cloud: ".concat((i=r.serverInfo)===null||i===void 0?void 0:i.region)),yield s.close()})}}class Qj extends ks.EventEmitter{constructor(e,t){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};super(),this.options={},this.checkResults=new Map,this.url=e,this.token=t,this.options=i}getNextCheckId(){const e=this.checkResults.size;return this.checkResults.set(e,{logs:[],status:ns.IDLE,name:"",description:""}),e}updateCheck(e,t){this.checkResults.set(e,t),this.emit("checkUpdate",e,t)}isSuccess(){return Array.from(this.checkResults.values()).every(e=>e.status!==ns.FAILED)}getResults(){return Array.from(this.checkResults.values())}createAndRunCheck(e){return ie(this,void 0,void 0,function*(){const t=this.getNextCheckId(),i=new e(this.url,this.token,this.options),s=a=>{this.updateCheck(t,a)};i.on("update",s);const r=yield i.run();return i.off("update",s),r})}checkWebsocket(){return ie(this,void 0,void 0,function*(){return this.createAndRunCheck(C5)})}checkWebRTC(){return ie(this,void 0,void 0,function*(){return this.createAndRunCheck(S5)})}checkTURN(){return ie(this,void 0,void 0,function*(){return this.createAndRunCheck(T5)})}checkReconnect(){return ie(this,void 0,void 0,function*(){return this.createAndRunCheck(b5)})}checkPublishAudio(){return ie(this,void 0,void 0,function*(){return this.createAndRunCheck(y5)})}checkPublishVideo(){return ie(this,void 0,void 0,function*(){return this.createAndRunCheck(v5)})}checkConnectionProtocol(){return ie(this,void 0,void 0,function*(){const e=yield this.createAndRunCheck(g5);if(e.data&&"protocol"in e.data){const t=e.data;this.options.protocol=t.protocol}return e})}checkCloudRegion(){return ie(this,void 0,void 0,function*(){return this.createAndRunCheck(m5)})}}class k5{constructor(e){Aa(this,Ds,null);this.url=e,this.socket=null,this.isOpen=!1,this.messageHandlers=new Map,this.openHandlers=new Map,this.closeHandlers=[],this.errorHandlers=[]}connect(){this.socket=new WebSocket(this.url),this.socket.onopen=e=>{this.isOpen=!0,this.openHandlers.size>0&&this.openHandlers.forEach(t=>t()),Ki(this,Ds)&&(clearInterval(Ki(this,Ds)),Lr(this,Ds,null)),Lr(this,Ds,setInterval(()=>{this.send({cmd:"HeartBreak"})},1e4))},this.socket.onmessage=e=>{this.messageHandlers.size>0&&this.messageHandlers.forEach(t=>t(e.data))},this.socket.onclose=e=>{this.closeHandlers.forEach(t=>t(e))},this.socket.onerror=e=>{this.errorHandlers.forEach(t=>t(e))}}send(e){this.socket.readyState===WebSocket.OPEN?this.socket.send(JSON.stringify(e)):this.socket.readyState===WebSocket.CLOSED?this.isOpen?(console.error("WebSocket链接异常关闭"),this.connect(),this.clearOpenHandler(),this.addOpenHandler("MsgSend",()=>{this.socket.send(JSON.stringify(e))})):console.log("websocket链接已关闭"):(this.clearOpenHandler(),this.addOpenHandler("MsgSend",()=>{this.socket.send(JSON.stringify(e))}))}addMessageHandler(e,t){this.messageHandlers.has(e)?(this.messageHandlers.delete(e),this.messageHandlers.set(e,t)):this.messageHandlers.set(e,t)}addOpenHandler(e,t){this.openHandlers.has(e)?(this.openHandlers.delete(e),this.openHandlers.set(e,t)):this.openHandlers.set(e,t)}addCloseHandler(e){this.closeHandlers.push(e)}addErrorHandler(e){this.errorHandlers.push(e)}clearMessageHandler(){this.messageHandlers.clear()}clearOpenHandler(){this.openHandlers.clear()}clearCloseHandler(){this.closeHandlers=[]}clearErrorHandler(){this.errorHandlers=[]}close(){this.socket.close(),this.isOpen=!1,Ki(this,Ds)&&(clearInterval(Ki(this,Ds)),Lr(this,Ds,null))}}Ds=new WeakMap;class E5{constructor(){Aa(this,Ks);Lr(this,Ks,Qy())}on(e,t){Ki(this,Ks).on(e,t)}off(e,t=null){t&&typeof t=="function"?Ki(this,Ks).off(e,t):Ki(this,Ks).off(e)}emit(e,t){Ki(this,Ks).emit(e,t)}removeAllListeners(){Ki(this,Ks).all.clear()}}Ks=new WeakMap;class kg extends E5{constructor({userId:t,org:i,roomName:s="",roomMode:r="auto",baseUrl:a,baseUrlFy:l}={}){super();Aa(this,Kt);Aa(this,Mo,"");Aa(this,Oo,"");Aa(this,Lo,null);this.userId=t,this.org=i,this.roomName=s,this.roomNum,this.counter=0,this.room=null,this.roomMode=r,this.baseUrl=a,this.baseUrlFy=l,this.encoder=new TextEncoder,this.decoder=new TextDecoder,this.wshead=this.baseUrl.split("//")[0]=="http:"?"ws://":"wss://",this.websocketUrl=`${this.wshead}${this.baseUrl.split("//")[1]}/socket?org=${this.org}&identity=${this.userId}`,this.socket=new k5(this.websocketUrl),this.socket.addOpenHandler("SocketOpen",()=>{this.emit("socketOpen")}),this.socket.connect(),an(this,Kt,y1).call(this)}get isShareEnable(){return this.room&&this.room.localParticipant?this.room.localParticipant.isScreenShareEnabled:!1}get isCameraEnable(){return this.room&&this.room.localParticipant?this.room.localParticipant.isCameraEnabled:!1}get isMicrophoneEnable(){return this.room&&this.room.localParticipant?this.room.localParticipant.isMicrophoneEnabled:!1}static async getDeviceList(){const t=await Ws.getLocalDevices("audioinput"),i=await Ws.getLocalDevices("videoinput"),s=await Ws.getLocalDevices("audiooutput");return{audioDevices:t,videoDevices:i,outputDevices:s}}sendMessage(t,i){const s={cmd:"SendText",data:{room:this.roomNum,identity:this.userId,name:i,text:t}};this.socket.send(s)}screenShot(t,i={}){let s=an(this,Kt,v1).call(this,t);if(!s){this.emit("errorPush",{type:"screenShot",message:"DOM元素不存在"});return}let r=document.createElement("canvas"),a=null,l=null;return r.width=i.width,r.height=i.height,a=r.getContext("2d"),a.drawImage(s,0,0,i.width,i.height),l=r.toDataURL("image/png",i.quality),l}async uploadScreenShot(t,i={}){let s,r=this.screenShot(t,i),a=r.indexOf(",");a>-1&&(s=r.substring(a+1));let l=await fetch(this.baseUrl+"/api/FileFind/upload/image/sample",{method:"POST",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify({base64:s,org:this.org,owner:this.userId})});try{let c=await l.json();(c==null?void 0:c.code)===200?this.emit("imageUploadSuccess",r):this.emit("imageUploadFail",c)}catch(c){this.emit("imageUploadFail",c)}}judgeUserInMeeting(t=""){return new Promise((i,s)=>{fetch(this.baseUrl+"/api/v1/IsParticipantExist",{method:"POST",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify({room:t,identity:this.userId})}).then(r=>r.json()).then(r=>{(r==null?void 0:r.code)===200?i(r==null?void 0:r.data):s()}).catch(r=>{s(r)})})}judgeRoomExist(t=""){return new Promise((i,s)=>{fetch(this.baseUrl+"/api/v1/isRoomExist",{method:"POST",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify({room:t})}).then(r=>r.json()).then(r=>{i(r)}).catch(r=>{s(r)})})}setParticipantDeafness(t){return new Promise((i,s)=>{t||(this.emit("errorPush",{type:"setParticipantDeafness",message:"identity不能为空"}),s());const r={cmd:"DoDeafness",data:{room:this.roomNum,identity:t}};this.socket.send(r),this.socket.addMessageHandler("SetParticipantDeafness",a=>{let l=JSON.parse(a);l.cmd==="DoDeafness"&&((l==null?void 0:l.data.code)=="200"?i():(this.emit("errorPush",{type:"setParticipantDeafness",message:l.data.msg??"与会者置聋失败"}),s()))})})}cancelParticipantDeafness(t){return new Promise((i,s)=>{t||(this.emit("errorPush",{type:"cancelParticipantDeafness",message:"identity不能为空"}),s());const r={cmd:"UnDoDeafness",data:{room:this.roomNum,identity:t}};this.socket.send(r),this.socket.addMessageHandler("CancelParticipantDeafness",a=>{const l=JSON.parse(a);l.cmd==="UnDoDeafness"&&((l==null?void 0:l.data.code)=="200"?i():(this.emit("errorPush",{type:"cancelParticipantDeafness",message:l.data.msg??"与会者取消置聋失败"}),s()))})})}addCoHost(t,i){return new Promise((s,r)=>{(!t||!i)&&(this.emit("errorPush",{type:"addCoHost",message:"关键参数缺失"}),r(new Error("关键参数缺失")));const a={cmd:"AddCoHost",data:{room:this.roomNum,identity:this.userId,coHostId:t,coHostName:i}};this.socket.send(a),this.socket.addMessageHandler("AddCoHost",l=>{const c=JSON.parse(l);c.cmd==="AddCoHost"&&((c==null?void 0:c.data.code)=="200"?s():(this.emit("errorPush",{type:"addCoHost",message:c.data.msg??"联席主持人设置失败"}),r(new Error(c.data.msg??"联席主持人设置失败"))))})})}removeCoHost(t,i){return new Promise((s,r)=>{(!t||!i)&&(this.emit("errorPush",{type:"removeCoHost",message:"关键参数缺失"}),r(new Error("关键参数缺失")));const a={cmd:"RemoveCoHost",data:{room:this.roomNum,identity:this.userId,coHostId:t,coHostName:i}};this.socket.send(a),this.socket.addMessageHandler("RemoveCoHost",l=>{const c=JSON.parse(l);c.cmd==="RemoveCoHost"&&((c==null?void 0:c.data.code)=="200"?s():(this.emit("errorPush",{type:"removeCoHost",message:c.data.msg??"移除联席主持人失败"}),r(new Error(c.data.msg??"联席主持人设置失败"))))})})}modifyPermission(t,i){return new Promise((s,r)=>{(!t||!i)&&(this.emit("errorPush",{type:"modifyPermission",message:"关键参数缺失"}),r(new Error("关键参数缺失")));const a={cmd:"ModifyPermission",data:{room:this.roomNum,identity:this.userId,permission:t,input:i}};this.socket.send(a),this.socket.addMessageHandler("ModifyPermission",l=>{const c=JSON.parse(l);c.cmd==="ModifyPermission"&&((c==null?void 0:c.data.code)=="200"?s():(this.emit("errorPush",{type:"modifyPermission",message:c.data.msg??"修改与会者权限失败"}),r(new Error(c.data.msg??"修改与会者权限失败"))))})})}async createRoom(){if(!this.baseUrl){this.emit("errorPush",{type:"createRoom",message:"请输入baseUrl"});return}if(!this.roomName){this.emit("errorPush",{type:"createRoom",message:"房间名不能为空"});return}if(!this.org||!this.userId){this.emit("errorPush",{type:"createRoom",message:"创建房间前请先登录"});return}let t,i,s="";try{let r=await fetch(this.baseUrl+"/api/v1/creatRoom",{method:"POST",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify({roomAlias:this.roomName,org:this.org,owner:this.userId,roomLevel:Number(localStorage.getItem("priority"))||0})});if(!r.ok){const a=await r.text();return console.error("创建房间接口请求失败:",r.status,a),this.emit("roomCreatedFail",`HTTP ${r.status}: ${a||"请求失败"}`),""}if(t=await r.json(),t.code==200){s=t.data;let a=await fetch(this.baseUrl+"/api/v1/createDispatcher",{method:"POST",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify({org:this.org,room:s,called:s})});if(!a.ok){const l=await a.text();return console.error("创建调度器接口请求失败:",a.status,l),this.emit("roomCreatedFail",`创建调度器失败: HTTP ${a.status}: ${l||"请求失败"}`),""}if(i=await a.json(),i.code==200)this.emit("roomCreatedSuccess",s),Lr(this,Lo,i.data);else return console.error("创建调度器失败:",i),this.emit("roomCreatedFail",i.msg||i.message||"创建调度器失败"),""}else return console.error("创建房间失败:",t),this.emit("roomCreatedFail",t.msg||t.message||"创建房间失败"),""}catch(r){console.error("创建房间异常:",r);const a=(r==null?void 0:r.message)||(r==null?void 0:r.toString())||"未知错误";this.emit("roomCreatedFail",a)}return s}async joinRoom({audioDeviceId:t="",videoDeviceId:i="",outputDeviceId:s="",facingMode:r="user",autoGainControl:a,echoCancellation:l,noiseSuppression:c,roomNum:u,cameraStatus:d=!0,microphoneStatus:f=!0,origin:g="0",videoCodec:T}={}){if(!u){this.emit("errorPush",{type:"joinRoom",message:"请输入房间号"});return}let S={audioCaptureDefaults:{deviceId:t||"default",autoGainControl:a??!1,echoCancellation:l??!1,noiseSuppression:c??!1},videoCaptureDefaults:{},stopLocalTrackOnUnpublish:!0,adaptiveStream:!0};s&&(S.audioOutput={deviceId:s});let m={autoSubscribe:!0};if(i?S.videoCaptureDefaults.deviceId=i:S.videoCaptureDefaults.facingMode=r,T&&typeof T=="string"){const D={videoCodec:T};S.publishDefaults=D}this.roomNum=u;try{let D=await an(this,Kt,T1).call(this,this.roomNum,g);const L=this.baseUrl.split("//")[1].split("/ylapi")[0];Lr(this,Mo,`${this.wshead}${L}`),Lr(this,Oo,D.token),this.room=new Ws(S),await this.room.prepareConnection(Ki(this,Mo),Ki(this,Oo)),an(this,Kt,S1).call(this),await this.room.connect(Ki(this,Mo),Ki(this,Oo),m)}catch(D){this.emit("joinRoomError",D);return}try{if(console.log("[麦克风Track调试] 开始设置麦克风状态:",{roomMode:this.roomMode,microphoneStatus:f,cameraStatus:d,localParticipant:this.room.localParticipant}),this.roomMode==="auto"){await this.room.localParticipant.setCameraEnabled(d),console.log(`[麦克风Track调试] 设置麦克风状态: ${f}`);const D=await this.room.localParticipant.setMicrophoneEnabled(f);console.log("[麦克风Track调试] 麦克风设置结果:",D),an(this,Kt,v0).call(this,"video")}else{console.log(`[麦克风Track调试] Audio模式设置麦克风状态: ${f}`);const D=await this.room.localParticipant.setMicrophoneEnabled(f);console.log("[麦克风Track调试] Audio模式麦克风设置结果:",D),await this.room.localParticipant.setCameraEnabled(!1),an(this,Kt,v0).call(this,"audio")}setTimeout(async()=>{const D=this.room.localParticipant.getTrackPublication(Ae.Source.Microphone);console.log("[麦克风Track调试] 延迟检查麦克风track:",{micPub:D,hasAudioTrack:!!(D!=null&&D.audioTrack),audioTrack:D==null?void 0:D.audioTrack,isMicrophoneEnabled:this.room.localParticipant.isMicrophoneEnabled});try{const L=(await navigator.mediaDevices.enumerateDevices()).filter(U=>U.kind==="audioinput");console.log("[麦克风Track调试] 音频输入设备:",L);const $=await navigator.mediaDevices.getUserMedia({audio:!0});console.log("[麦克风Track调试] 麦克风权限检查成功:",$),$.getTracks().forEach(U=>U.stop())}catch(F){console.error("[麦克风Track调试] 麦克风权限检查失败:",F)}},1e3)}catch(D){console.error("变更设备状态失败",D)}const _=this.room.getActiveDevice("audioinput")??"default",k=this.room.getActiveDevice("videoinput")??"default",R=this.room.getActiveDevice("audiooutput")??"default";return this.room.remoteParticipants.forEach(D=>{an(this,Kt,_h).call(this,D)}),an(this,Kt,_h).call(this,this.room.localParticipant),{audioInputDevice:_,videoInputDevice:k,audioOutputDevice:R}}makeCall(t,i,s){return new Promise((r,a)=>{let l=null;this.roomNum||(this.emit("errorPush",{type:"makeCall",message:"请先加入房间"}),a()),this.baseUrl||(this.emit("errorPush",{type:"makeCall",message:"baseUrl为空"}),a()),s?l={name:t,org:this.org,room:this.roomNum,dnis:i,type:s,mute:!0}:l={name:t,org:this.org,room:this.roomNum,dnis:i,mute:!0},fetch(this.baseUrl+"/api/v1/makeCall",{method:"POST",body:JSON.stringify(l)}).then(c=>c.json()).then(c=>{c.code==200?(this.emit("makeCallSuccess"),r()):(this.emit("errorPush",{type:"makeCall",message:c.msg??"呼出失败"}),a())}).catch(c=>{this.emit("errorPush",{type:"makeCall",message:c}),a()})})}makeCallCustom(t={}){let i=t;return new Promise((s,r)=>{let a=null;this.roomNum||(this.emit("errorPush",{type:"makeCall",message:"请先加入房间"}),r()),this.baseUrl||(this.emit("errorPush",{type:"makeCall",message:"baseUrl为空"}),r()),a={name:t.name,org:this.org,room:this.roomNum,dnis:t.phone,mute:!0,...t},fetch(this.baseUrl+"/api/v1/makeCall",{method:"POST",body:JSON.stringify(a)}).then(l=>l.json()).then(l=>{l.code==200?(t.proxy&&(this.counter=0),this.emit("makeCallSuccess"),s()):(t.proxy&&l.code==500&&(this.counter<1&&this.makeCallCustom(i),this.counter++),this.emit("errorPush",{type:"makeCallCustom1",message:l.msg??"呼出失败"}),r())}).catch(l=>{this.emit("errorPush",{type:"makeCallCustom2",message:l}),r()})})}pushVideoStream(){if(!this.roomNum){this.emit("errorPush",{type:"pushVideoStream",message:"请先加入房间"});return}return new Promise((t,i)=>{let s={cmd:"StartOutputStream",data:{room:this.roomNum,url:"rtmp://10.2.14.199/live/"}};this.socket.send(s),this.socket.addMessageHandler("StartOutputStream",r=>{var l;let a=JSON.parse(r);a.cmd==="StartOutputStream"&&((a==null?void 0:a.data.code)=="200"?(this.emit("startPushing",a.data),t(a.data.result)):(this.emit("errorPush",{type:"pushVideoStream",message:((l=a.data)==null?void 0:l.msg)??"推流失败"}),i()))})})}stopPushVideoStream(){if(!this.roomNum){this.emit("errorPush",{type:"stopPushVideoStream",message:"请先加入房间"});return}return new Promise((t,i)=>{let s={cmd:"StopOutputStream",data:{room:this.roomNum}};this.socket.send(s),this.socket.addMessageHandler("StopOutputStream",r=>{var l;let a=JSON.parse(r);a.cmd==="StopOutputStream"&&((a==null?void 0:a.data.code)=="200"?(this.emit("stopPushing",a.data),t()):(this.emit("errorPush",{type:"stopPushVideoStream",message:((l=a.data)==null?void 0:l.msg)??"停止推流失败"}),i()))})})}moveoutParticipant(t){if(!this.roomNum){this.emit("errorPush",{type:"moveoutParticipant",message:"请先加入房间"});return}return new Promise((i,s)=>{let r={cmd:"RemoveParticipant",data:{room:this.roomNum,identity:t}};this.socket.send(r),this.socket.addMessageHandler("RemoveParticipant",a=>{let l=JSON.parse(a);l.cmd==="RemoveParticipant"&&((l==null?void 0:l.data.code)=="200"?i():(this.emit("errorPush",{type:"moveoutParticipant",message:l.data.msg??"移出房间失败"}),s()))})})}updateParticipantName(t,i,s="0"){if(!this.roomNum){this.emit("errorPush",{type:"updateParticipantName",message:"请先加入房间"});return}return new Promise((r,a)=>{let l={cmd:"UpdateParticipant",data:{room:this.roomNum,identity:t,name:i,isPermission:s}};this.socket.send(l),this.socket.addMessageHandler("UpdateParticipant",c=>{let u=JSON.parse(c);u.cmd==="UpdateParticipant"&&((u==null?void 0:u.data.code)=="200"?r():(this.emit("errorPush",{type:"updateParticipantName",message:u.data.msg??"修改与会者名称失败"}),a()))})})}setParticipantToHost(t,i){return new Promise((s,r)=>{(!this.roomNum||!t||!i||!this.userId)&&(this.emit("errorPush",{type:"setParticipantToHost",message:"关键参数缺失"}),r("关键参数缺失"));const a={cmd:"AddHost",data:{room:this.roomNum,identity:this.userId,hostId:t,hostName:i}};this.socket.addMessageHandler("SetParticipantToHost",l=>{const c=JSON.parse(l);c.cmd==="AddHost"&&((c==null?void 0:c.data.code)=="200"?s():(this.emit("errorPush",{type:"setParticipantToHost",message:c.data.msg??"添加为主持人失败"}),r(c.data.msg??"添加为主持人失败")))}),this.socket.send(a)})}startRecord(){if(!this.roomNum){this.emit("errorPush",{type:"startRecord",message:"请先加入房间"});return}return new Promise((t,i)=>{let s={cmd:"StartRecording",data:{room:this.roomNum}};this.socket.send(s),this.socket.addMessageHandler("StartRecording",r=>{let a=JSON.parse(r);a.cmd==="StartRecording"&&((a==null?void 0:a.data.code)=="200"?(this.emit("startRecording",a.data.result),t(a.data.result)):(this.emit("errorPush",{type:"startRecord",message:a.data.msg??"录制失败"}),i()))})})}stopRecord(){if(!this.roomNum){this.emit("errorPush",{type:"stopRecord",message:"请先加入房间"});return}return new Promise((t,i)=>{let s={cmd:"StopRecording",data:{room:this.roomNum}};this.socket.send(s),this.socket.addMessageHandler("StopRecording",r=>{var l;let a=JSON.parse(r);a.cmd==="StopRecording"&&((a==null?void 0:a.data.code)=="200"?(this.emit("stopRecording",a.data),t()):(this.emit("errorPush",{type:"stopRecord",message:((l=a.data)==null?void 0:l.msg)??"停止录制失败"}),i()))})})}pullStream(t,i){return new Promise((s,r)=>{i||r("streamIdentity不能为空");let a={cmd:"StartInputStream",data:{room:this.roomNum,identity:i,url:t}};this.socket.send(a),this.socket.addMessageHandler("StartInputStream",l=>{var u;let c=JSON.parse(l);c.cmd==="StartInputStream"&&((c==null?void 0:c.data.code)=="200"?(this.emit("startPulling",c.data.result),s(c.data.result)):(this.emit("errorPush",{type:"pullStream",message:((u=c.data)==null?void 0:u.msg)??"拉流失败"}),r()))})})}stopPullStream(){return new Promise((t,i)=>{let s={cmd:"StopInputStream",data:{room:this.roomNum,identity:"liuang3a5gdf"}};this.socket.send(s),this.socket.addMessageHandler("StopInputStream",r=>{var l;let a=JSON.parse(r);a.cmd==="StopInputStream"&&((a==null?void 0:a.data.code)=="200"?(this.emit("stopPulling",a.data),t()):(this.emit("errorPush",{type:"stopPullStream",message:((l=a.data)==null?void 0:l.msg)??"停止拉流失败"}),i()))})})}inviteThirdParty(t,i="1478649882954985474",s=""){return new Promise((r,a)=>{t||(this.emit("errorPush",{type:"inviteThirdParty",message:"被邀请人姓名不能为空"}),a());let l={cmd:"Invite",data:{room:this.roomNum,identity:this.userId,inviteOrg:i,inviteIdentity:t,metadata:s}};this.socket.addMessageHandler("inviteThirdParty",c=>{var d;let u=JSON.parse(c);u.cmd==="Invite"&&(((d=u.data)==null?void 0:d.code)==="200"?(this.emit("inviteThirdSuccess"),r()):(this.emit("inviteThirdFail"),a()))}),this.socket.send(l)})}acceptInvite(t,i,s){return new Promise((r,a)=>{(!t||!i||!s)&&(this.emit("errorPush",{type:"acceptInvite",message:"关键参数缺失"}),a());let l={cmd:"Accept",data:{room:t,identity:this.userId,toOrg:s,toIdentity:i}};this.socket.addMessageHandler("inviteAccept",c=>{var d;let u=JSON.parse(c);u.cmd==="Accept"&&(((d=u.data)==null?void 0:d.code)==="200"?(this.emit("acceptInviteSuccess"),r()):(this.emit("acceptInviteFail"),a()))}),this.socket.send(l)})}refuseInvite(t,i,s){return new Promise((r,a)=>{(!t||!i||!s)&&(this.emit("errorPush",{type:"refuseInvite",message:"关键参数缺失"}),a());let l={cmd:"Refuse",data:{room:t,identity:this.userId,toOrg:s,toIdentity:i}};this.socket.addMessageHandler("inviteRefuse",c=>{var d;let u=JSON.parse(c);u.cmd==="Refuse"&&(((d=u.data)==null?void 0:d.code)==="200"?(this.emit("refuseInviteSuccess"),r()):(this.emit("refuseInviteFail"),a()))}),this.socket.send(l)})}enterText(t){if(this.room&&this.room.localParticipant){const i=this.room.localParticipant,s=this.encoder.encode(t);i.publishData(s,It.RELIABLE)}else this.emit("errorPush",{type:"enterText",message:"请先加入房间"})}async leaveRoom(){if(this.room){await this.room.disconnect();const t=localStorage.getItem("token")||"",i=await fetch(this.baseUrlFy+`/api/smc/delScheduleConf?roomName=${this.roomNum}`,{method:"POST",headers:{satoken:t,"Content-type":"application/json;charset=utf-8"}});console.log(i,"res"),this.room=null}}deleteRoom(t){return new Promise((i,s)=>{const r={cmd:"DeleteRoom",data:{room:this.roomNum,identity:t}};this.socket.send(r),this.socket.addMessageHandler("DeleteRoom",a=>{const l=JSON.parse(a);l.cmd==="DeleteRoom"&&((l==null?void 0:l.data.code)=="200"?i():s(l==null?void 0:l.data.msg))})})}closeSocket(){this.socket.close()}async publishLocalParticipant(){const t=await ac({audio:!0,video:!0});this.room.localParticipant&&t.forEach(i=>{this.room.localParticipant.publishTrack(t)})}async changeAudioDevice(t){this.room&&await this.room.switchActiveDevice("audioinput",t)}async changeVideoDevice(t){if(this.room)try{let i=await this.room.switchActiveDevice("videoinput",t)}catch(i){throw new Error("sdkError",i)}}async changeOutputDevice(t){this.room&&await this.room.switchActiveDevice("audiooutput",t)}flipCamera(){var r,a,l;const t=(r=this.room)==null?void 0:r.localParticipant.getTrackPublication(Ae.Source.Camera);if(!t){this.emit("errorPush",{type:"flipCamera",message:"请先加入房间"});return}let s={facingMode:((a=t.videoTrack)==null?void 0:a.constraints).facingMode==="user"?"environment":"user"};return(l=t.videoTrack)==null||l.restartTrack(s),s.facingMode}async changeCameraStatus(){try{let t=this.room.localParticipant;const i=t.isCameraEnabled;console.log(`🔄 ${i?"关闭":"启动"}摄像头`),i?await t.setCameraEnabled(!1):await t.setCameraEnabled(!0),console.log(`✅ 摄像头${t.isCameraEnabled?"已启动":"已关闭"}`),this.emit("localCameraChange",t.isCameraEnabled)}catch{}}async changeMicrophoneStatus(){try{let t=this.room.localParticipant;const i=t.isMicrophoneEnabled;console.log(`🔄 ${i?"关闭":"启动"}麦克风`),i?await t.setMicrophoneEnabled(!1):await t.setMicrophoneEnabled(!0),console.log(`✅ 麦克风${t.isMicrophoneEnabled?"已启动":"已关闭"}`),this.emit("localMicrophoneChange",t.isMicrophoneEnabled)}catch{}}async changeScreenShareStatus(){try{let t=this.room.localParticipant;const i=t.isScreenShareEnabled;console.log(`🔄 ${i?"停止":"开始"}屏幕共享`),await t.setScreenShareEnabled(!i),console.log(`✅ 屏幕共享${t.isScreenShareEnabled?"已开始":"已停止"}`),this.emit("localScreenShareChange",t.isScreenShareEnabled)}catch{}}async changeParticipantMicrophoneStatus(t,i){if(!t){this.emit("errorPush",{type:"changeParticipantMicrophoneStatus",message:"请输入要查询的identity"});return}let s=this.room.getParticipantByIdentity(t);if(!s){this.emit("errorPush",{type:"changeParticipantMicrophoneStatus",message:"该参与者不存在"});return}if(s.isLocal)await s.setMicrophoneEnabled(!i),this.emit("localMicrophoneChange",this.room.localParticipant.isMicrophoneEnabled);else{let r=s.getTrackPublication(Ae.Source.Microphone),a=r?r.trackSid:void 0;if(i){const l={org:this.org,room:this.roomNum,input:"1",identity:t};a&&(l.trackId=a);let c={cmd:"Mute",data:l};const u="MuteMic_"+t,d=f=>{var T;let g=JSON.parse(f);g.cmd==="Mute"&&(this.socket.messageHandlers.delete(u),(g==null?void 0:g.data.code)=="200"?console.log("LiveClient - 静音命令执行成功"):this.emit("errorPush",{type:"changeParticipantMicrophoneStatus",message:((T=g.data)==null?void 0:T.msg)??"关闭指定参与者麦克风失败"}))};this.socket.addMessageHandler(u,d),this.socket.send(c)}else{const l={org:this.org,room:this.roomNum,input:"1",identity:t};a&&(l.trackId=a);let c={cmd:"UnMute",data:l};const u="UnMuteMic_"+t,d=f=>{var T,S;let g=JSON.parse(f);g.cmd==="UnMute"&&(this.socket.messageHandlers.delete(u),(g==null?void 0:g.data.code)=="200"?console.log("LiveClient - 取消静音命令执行成功"):(T=g.data)!=null&&T.msg&&this.emit("errorPush",{type:"changeParticipantMicrophoneStatus",message:((S=g.data)==null?void 0:S.msg)??"请求开启指定参与者麦克风失败"}))};this.socket.addMessageHandler(u,d),this.socket.send(c)}}}async changeParticipantCameraStatus(t,i){if(!t){this.emit("errorPush",{type:"changeParticipantCameraStatus",message:"请输入要查询的identity"});return}let s=this.room.getParticipantByIdentity(t);if(!s){this.emit("errorPush",{type:"changeParticipantCameraStatus",message:"该参与者不存在"});return}if(s.isLocal)await s.setCameraEnabled(!i),this.emit("localCameraChange",this.room.localParticipant.isCameraEnabled);else{let r=s.getTrackPublication(Ae.Source.Camera),a=r?r.trackSid:void 0;if(!a&&!i&&(await new Promise(l=>setTimeout(l,100)),r=s.getTrackPublication(Ae.Source.Camera),a=r?r.trackSid:void 0),!a){console.warn("trackId仍然不存在,跳过摄像头操作");return}if(i){let l={cmd:"Mute",data:{org:this.org,room:this.roomNum,identity:t,trackId:a,input:"2"}};const c="MuteCamera_"+t,u=d=>{var g,T;let f=JSON.parse(d);if(f.cmd==="Mute")if(this.socket.messageHandlers.delete(c),(f==null?void 0:f.data.code)=="200"){const S=this.room.getParticipantByIdentity(t);if(S){let m=S.getTrackPublication(Ae.Source.Camera);m&&(m.metadataMuted=!0,m.track&&m.track.setMuted(!0)),this.renderParticipant(S)}}else console.error("远程参与者摄像头关闭失败:",t,(g=f.data)==null?void 0:g.msg),this.emit("errorPush",{type:"changeParticipantCameraStatus",message:((T=f.data)==null?void 0:T.msg)??"关闭指定参与者摄像头失败"})};this.socket.addMessageHandler(c,u),this.socket.send(l)}else{let l={cmd:"UnMute",data:{org:this.org,room:this.roomNum,identity:t,trackId:a,input:"2"}};const c="UnMuteCamera_"+t,u=d=>{var g,T,S;let f=JSON.parse(d);if(f.cmd==="UnMute")if(this.socket.messageHandlers.delete(c),(f==null?void 0:f.data.code)=="200"){const m=this.room.getParticipantByIdentity(t);if(m){let _=m.getTrackPublication(Ae.Source.Camera);_&&(_.metadataMuted=!1,_.track&&_.track.setMuted(!1)),this.renderParticipant(m)}}else console.error("远程参与者摄像头开启失败:",t,(g=f.data)==null?void 0:g.msg),(T=f.data)!=null&&T.msg&&this.emit("errorPush",{type:"changeParticipantCameraStatus",message:((S=f.data)==null?void 0:S.msg)??"请求打开指定参与者摄像头失败"})};this.socket.addMessageHandler(c,u),this.socket.send(l)}}}startTrackAttach(t){const i={};i.name=t.name?t.name:t.identity,i.roomMode=this.roomMode,i.identity=t.identity,i.audioLevel=t.audioLevel,i.isSpeaking=t.isSpeaking,i.metadata=t.metadata,i.sid=t.sid,i.isLocal=t.isLocal,i.isMicrophoneEnabled=t.isMicrophoneEnabled;const s=t.getTrackPublication(Ae.Source.Camera),r=an(this,Kt,b0).call(this,t),a=t.getTrackPublication(Ae.Source.ScreenShare),l=a?a.videoTrack:null;l?(i.videoTrack=l,i.isScreenShareEnabled=!0):(i.videoTrack=s?s.videoTrack:void 0,i.isScreenShareEnabled=t.isScreenShareEnabled),i.audioTrack=r?r.audioTrack:void 0,this.roomMode==="auto"?(i.isCameraEnabled=t.isCameraEnabled,this.emit("trackAttach",i)):(i.isCameraEnabled=t.isCameraEnabled,this.emit("trackAttach",i))}renderParticipant(t,i=!1){this.roomMode==="auto"?this.renderToVideo(t,i):this.roomMode==="audio"&&this.renderToAudio(t,i)}renderToVideo(t,i){var F,L,$;let s={};const{name:r,identity:a,audioLevel:l,isSpeaking:c,metadata:u,sid:d,isCameraEnabled:f,isLocal:g,isMicrophoneEnabled:T,isScreenShareEnabled:S,connectionQuality:m}=t;s.remove=i,s.name=r||a,s.roomMode=this.roomMode,s.identity=a,s.audioLevel=l,s.isSpeaking=c,s.metadata=u,s.sid=d,s.isCameraEnabled=f,s.isLocal=g,s.isMicrophoneEnabled=T,s.connectionQuality=m;const _=t.getTrackPublication(Ae.Source.Camera),k=an(this,Kt,b0).call(this,t),R=t.getTrackPublication(Ae.Source.ScreenShare),D=R?R.videoTrack:null;D?(s.videoTrack=D,s.isScreenShareEnabled=!0):(s.videoTrack=_?_.videoTrack:void 0,s.isScreenShareEnabled=S),s.audioTrack=k?k.audioTrack:void 0,typeof localStorage<"u"&&localStorage.getItem("debugScreenShare")==="1"&&(((F=s.videoTrack)==null?void 0:F.source)??(($=(L=s.videoTrack)==null?void 0:L.mediaStreamTrack)!=null&&$.id)),this.emit("videoCallRender",s)}renderToAudio(t,i){let s={};const{name:r,identity:a,audioLevel:l,isSpeaking:c,metadata:u,sid:d,isLocal:f,isMicrophoneEnabled:g,connectionQuality:T}=t;s.remove=i,s.name=r||a,s.roomMode=this.roomMode,s.identity=a,s.audioLevel=l,s.isSpeaking=c,s.metadata=u,s.sid=d,s.isLocal=f,s.isMicrophoneEnabled=g,s.connectionQuality=T;const S=t.getTrackPublication(Ae.Source.Microphone);s.audioTrack=S?S.audioTrack:void 0,this.emit("audioCallRender",s)}updateVideoSize(t,i){i.innerHTML=`(${t.videoWidth}x${t.videoHeight})`}sendInviteNotice(t,i,s){return new Promise((r,a)=>{s||a("缺少roomNum参数"),fetch(this.baseUrl+"/api/v1/noticeMakeCall",{method:"POST",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify({name:t,dnis:i,room:s})}).then(l=>l.json()).then(l=>{(l==null?void 0:l.code)==200?r():a((l==null?void 0:l.msg)??"语音播报接口出错")}).catch(l=>{a(l)})})}}Mo=new WeakMap,Oo=new WeakMap,Lo=new WeakMap,Kt=new WeakSet,y1=function(){this.socket.addMessageHandler("ResUnMute",t=>{const i=JSON.parse(t);i.cmd==="ResUnMute"&&((i==null?void 0:i.data.code)=="200"?this.emit("requestDeviceOpen",i.data):this.emit("errorPush",{type:"requestDeviceOpen",message:(i==null?void 0:i.data.msg)??"更改用户设备失败"}))}),this.socket.addMessageHandler("Mute",t=>{var a,l,c,u,d;const i=JSON.parse(t),s=(a=i.data)==null?void 0:a.identity,r=(c=(l=this.room)==null?void 0:l.localParticipant)==null?void 0:c.identity;s&&r&&s===r&&(i.cmd==="Mute"&&((u=i.data)==null?void 0:u.input)==="1"?this.room&&this.room.localParticipant&&(this.room.localParticipant.setMicrophoneEnabled(!1),this.emit("localMicrophoneChange",!1)):i.cmd==="Mute"&&((d=i.data)==null?void 0:d.input)==="2"&&this.room&&this.room.localParticipant&&(this.room.localParticipant.setCameraEnabled(!1),this.emit("localCameraChange",!1)))}),this.socket.addMessageHandler("UnMute",t=>{var a,l,c,u,d;const i=JSON.parse(t),s=(a=i.data)==null?void 0:a.identity,r=(c=(l=this.room)==null?void 0:l.localParticipant)==null?void 0:c.identity;s&&r&&s===r&&(i.cmd==="UnMute"&&((u=i.data)==null?void 0:u.input)==="1"?this.room&&this.room.localParticipant&&(this.room.localParticipant.setMicrophoneEnabled(!0),this.emit("localMicrophoneChange",!0)):i.cmd==="UnMute"&&((d=i.data)==null?void 0:d.input)==="2"&&this.room&&this.room.localParticipant&&(this.room.localParticipant.setCameraEnabled(!0),this.emit("localCameraChange",!0)))}),this.socket.addMessageHandler("ResThirdInvite",t=>{var s;const i=JSON.parse(t);i.cmd==="ResInvite"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("receiveInviteSuccess",{roomNum:i.data.room,fromIdentity:i.data.fromIdentity,fromOrg:i.data.fromOrg,metadata:i.data.metadata})}),this.socket.addMessageHandler("ResAccept",t=>{var s;const i=JSON.parse(t);i.cmd==="ResAccept"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("receiveInviteAccept",{roomNum:i.data.room,fromIdentity:i.data.fromIdentity,fromOrg:i.data.fromOrg})}),this.socket.addMessageHandler("ResRefuse",t=>{var s;const i=JSON.parse(t);i.cmd==="ResRefuse"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("receiveInviteRefuse",{roomNum:i.data.room,fromIdentity:i.data.fromIdentity,fromOrg:i.data.fromOrg})}),this.socket.addMessageHandler("SendText",t=>{var s;const i=JSON.parse(t);i.cmd==="SendText"&&(((s=i.data)==null?void 0:s.code)=="200"?this.emit("sendTextSuccess",i.data.msg):this.emit("sendTextFailed",i.data.msg))}),this.socket.addMessageHandler("ResReceiveMsg",t=>{var s;const i=JSON.parse(t);i.cmd==="ResReceiveMsg"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("messageReceived",{origin:i==null?void 0:i.data.fromIdentity,content:i==null?void 0:i.data.text,fromName:i==null?void 0:i.data.fromName,fromOrg:i==null?void 0:i.data.fromOrg,room:i==null?void 0:i.data.room})}),this.socket.addMessageHandler("DebugAllMessages",t=>{try{const i=JSON.parse(t);i.cmd&&(i.cmd.includes("Camera")||i.cmd.includes("Video")||i.data&&(i.data.input==="2"||i.data.camera))}catch{console.log("[WebSocket] 消息解析失败:",t)}}),this.socket.addMessageHandler("ResAddHost",t=>{var s;const i=JSON.parse(t);i.cmd==="ResAddHost"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("setHostSuccess",{hostId:i==null?void 0:i.data.hostId,hostName:i==null?void 0:i.data.hostName})}),this.socket.addMessageHandler("ResAddCoHost",t=>{var s;const i=JSON.parse(t);i.cmd==="ResAddCoHost"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("addCoHostSuccess",{coHostId:i==null?void 0:i.data.coHostId,coHostName:i==null?void 0:i.data.coHostName})}),this.socket.addMessageHandler("ResRemoveCoHost",t=>{var s;const i=JSON.parse(t);i.cmd==="ResRemoveCoHost"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("removeCoHostSuccess",{coHostId:i==null?void 0:i.data.coHostId,coHostName:i==null?void 0:i.data.coHostName})}),this.socket.addMessageHandler("ResModifyPermission",t=>{var s,r,a;const i=JSON.parse(t);i.cmd==="ResModifyPermission"&&((s=i.data)==null?void 0:s.code)=="200"&&this.emit("roomPermissionChange",{permission:(r=i.data)==null?void 0:r.permission,input:(a=i.data)==null?void 0:a.input})})},v0=function(t){if(!this.roomNum){this.emit("errorPush",{type:"getSdkCallNum",message:"请先加入房间"});return}const i={cmd:"SdkCall",data:{room:this.roomNum,sdkType:t}};this.socket.send(i)},v1=function(t){return document.getElementById(t)},b1=async function(){if(!Ki(this,Lo)||!this.baseUrl)return;let t;try{t=await(await fetch(this.baseUrl+"/api/v1/deleteDispatcher",{method:"POST",body:JSON.stringify({ruleId:Ki(this,Lo)})})).json(),t.code!==200&&this.emit("errorPush",{type:"dispatchInCall",message:"解除呼入绑定失败"})}catch{this.emit("errorPush",{type:"dispatchInCall",message:"解除呼入绑定失败"})}},T1=function(t,i="0"){if(!t){this.emit("errorPush",{type:"getToken",message:"未获取到房间号"});return}return new Promise((s,r)=>{const a={cmd:"GetToken",data:{org:this.org,room:t,identity:this.userId,origin:i}};this.socket.send(a),this.socket.addMessageHandler("GetToken",l=>{var u;let c=JSON.parse(l);c.cmd==="GetToken"&&((c==null?void 0:c.data.code)=="200"?s({roomUrl:c.data.url,token:c.data.token}):(this.emit("errorPush",{type:"getToken",message:((u=c.data)==null?void 0:u.msg)??"获取会议token失败"}),r()))})})},S1=function(){this.room.on(Oe.Connected,()=>{this.emit("roomConnected")}),this.room.on(Oe.Disconnected,async t=>{await an(this,Kt,C1).call(this),this.emit("roomDisconnected",t)}),this.room.on(Oe.ParticipantConnected,t=>{this.emit("participantConnected",t),an(this,Kt,_h).call(this,t)}),this.room.on(Oe.ParticipantDisconnected,t=>{this.emit("participantDisconnected",t),an(this,Kt,_1).call(this,t)}),this.room.on(Oe.ActiveDeviceChanged,(t,i)=>{this.emit("mediaDeviceChange",{kind:t,deviceId:i})}),this.room.on(Oe.ActiveSpeakersChanged,t=>{let i=[];i=t.map(s=>({identity:s.identity,isLocal:s.isLocal,audioLevel:s.audioLevel,name:s.name??s.identity})),this.emit("activeSpeakerChange",i)}),this.room.on(Oe.LocalTrackPublished,t=>{this.renderParticipant(this.room.localParticipant),this.startTrackAttach(this.room.localParticipant)}),this.room.on(Oe.LocalTrackUnpublished,()=>{this.renderParticipant(this.room.localParticipant),this.startTrackAttach(this.room.localParticipant)}),this.room.on(Oe.TrackPublished,(t,i)=>{this.renderParticipant(i),this.startTrackAttach(i)}),this.room.on(Oe.TrackUnpublished,(t,i)=>{this.renderParticipant(i),this.startTrackAttach(i)}),this.room.on(Oe.TrackSubscribed,(t,i,s)=>{this.renderParticipant(s),this.startTrackAttach(s)}),this.room.on(Oe.TrackUnsubscribed,(t,i,s)=>{this.renderParticipant(s),this.startTrackAttach(s)}),this.room.on(Oe.RoomMetadataChanged,t=>{this.emit("roomMetadataChanged",t)})},_h=function(t){t.on(ze.ParticipantMetadataChanged,()=>{this.renderParticipant(t)}),t.on(ze.TrackMuted,i=>{this.renderParticipant(t),this.startTrackAttach(t)}),t.on(ze.TrackUnmuted,i=>{this.renderParticipant(t),this.startTrackAttach(t)}),t.on(ze.IsSpeakingChanged,()=>{this.renderParticipant(t)}),t.on(ze.ConnectionQualityChanged,()=>{this.renderParticipant(t)}),t.on(ze.ParticipantNameChanged,i=>{this.renderParticipant(t)})},_1=function(t){this.renderParticipant(t,!0)},C1=async function(t){this.room&&(this.renderParticipant(this.room.localParticipant,!0),this.room.remoteParticipants.forEach(i=>{this.renderParticipant(i,!0)}),await an(this,Kt,b1).call(this))},b0=function(t){const i=t.getTrackPublication(Ae.Source.Microphone);if(i!=null&&i.audioTrack)return i;const s=t.getTrackPublication(Ae.Source.ScreenShareAudio);return s!=null&&s.audioTrack?s:i||s};const w5={class:"check-dialog-inner"},x5={class:"control-list",style:{border:"none"}},D5=["onClick"],A5={class:"control-list-item-value"},P5={class:"control-list"},I5=["onClick"],N5={class:"control-list-item-value"},R5={key:1,class:"control-list"},M5=["onClick"],O5={class:"control-list-item-value"},L5={key:2,class:"control-list"},B5=["onClick"],U5={class:"control-list-item-value"},oc=Ft({__name:"SelectDialog",props:{position:{type:Object,default:()=>({left:"0px",bottom:"40px"})},dialogType:{type:String,default:"audio"},otherOptionList:{type:Array,default:()=>[{label:"会议模式",value:"normal"},{label:"点调模式",value:"pointTurn"}]},audioDevices:{type:Array,default:()=>[]},outputDevices:{type:Array,default:()=>[]},videoDevices:{type:Array,default:()=>[]},activeDevice:{type:Object,default:()=>({})},currentRoomMode:{type:String,default:"normal"}},emits:["chooseAudioInputDevice","chooseAudioOutputDevice","chooseVideoDevice","chooseOtherItem","close"],setup(n,{emit:e}){const t=e;function i(l){t("chooseAudioInputDevice",l.value),t("close")}function s(l){t("chooseAudioOutputDevice",l.value),t("close")}function r(l){t("chooseVideoDevice",l.value),t("close")}function a(l){t("chooseOtherItem",l.value),t("close")}return(l,c)=>(o.openBlock(),o.createElementBlock("div",{class:"check-dialog",style:o.normalizeStyle(n.position)},[o.createElementVNode("div",w5,[n.dialogType==="audio"?(o.openBlock(),o.createElementBlock(o.Fragment,{key:0},[o.createElementVNode("div",x5,[c[0]||(c[0]=o.createElementVNode("div",{class:"control-list-title"},"麦克风",-1)),(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(n.audioDevices,u=>{var d,f,g,T;return o.openBlock(),o.createElementBlock("div",{class:o.normalizeClass(["control-list-item",{"control-list-item-checked":((d=n.activeDevice)==null?void 0:d.audioInputDevice)&&u.value==((f=n.activeDevice)==null?void 0:f.audioInputDevice)}]),key:u.value,onClick:S=>i(u)},[o.createElementVNode("div",A5,o.toDisplayString(u.label),1),o.createElementVNode("div",{class:o.normalizeClass(["check",{"is-checked":((g=n.activeDevice)==null?void 0:g.audioInputDevice)&&u.value==((T=n.activeDevice)==null?void 0:T.audioInputDevice)}])},null,2)],10,D5)}),128))]),o.createElementVNode("div",P5,[c[1]||(c[1]=o.createElementVNode("div",{class:"control-list-title"},"扬声器",-1)),(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(n.outputDevices,u=>{var d,f,g,T;return o.openBlock(),o.createElementBlock("div",{class:o.normalizeClass(["control-list-item",{"control-list-item-checked":((d=n.activeDevice)==null?void 0:d.audioOutputDevice)&&u.value==((f=n.activeDevice)==null?void 0:f.audioOutputDevice)}]),key:u.value,onClick:S=>s(u)},[o.createElementVNode("div",N5,o.toDisplayString(u.label),1),o.createElementVNode("div",{class:o.normalizeClass(["check",{"is-checked":((g=n.activeDevice)==null?void 0:g.audioOutputDevice)&&u.value==((T=n.activeDevice)==null?void 0:T.audioOutputDevice)}])},null,2)],10,I5)}),128))])],64)):n.dialogType==="video"?(o.openBlock(),o.createElementBlock("div",R5,[c[2]||(c[2]=o.createElementVNode("div",{class:"control-list-title"},"摄像头",-1)),(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(n.videoDevices,u=>{var d,f,g,T;return o.openBlock(),o.createElementBlock("div",{class:o.normalizeClass(["control-list-item",{"control-list-item-checked":((d=n.activeDevice)==null?void 0:d.videoDevice)&&u.value==((f=n.activeDevice)==null?void 0:f.videoDevice)}]),key:u.value,onClick:S=>r(u)},[o.createElementVNode("div",O5,o.toDisplayString(u.label),1),o.createElementVNode("div",{class:o.normalizeClass(["check",{"is-checked":((g=n.activeDevice)==null?void 0:g.videoDevice)&&u.value==((T=n.activeDevice)==null?void 0:T.videoDevice)}])},null,2)],10,M5)}),128))])):n.dialogType==="other"?(o.openBlock(),o.createElementBlock("div",L5,[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(n.otherOptionList,u=>(o.openBlock(),o.createElementBlock("div",{class:o.normalizeClass(["control-list-item",{"control-list-item-checked":n.currentRoomMode===u.value}]),key:u.value,onClick:d=>a(u)},[o.createElementVNode("div",U5,o.toDisplayString(u.label),1),o.createElementVNode("div",{class:o.normalizeClass(["check",{"is-checked":n.currentRoomMode===u.value}])},null,2)],10,B5))),128))])):o.createCommentVNode("",!0)])],4))}},[["__scopeId","data-v-c12bddcb"]]),Ro="/assets/img/index/tx.png",Eg=new ki;function F5(){const n=o.ref(null),e=o.ref(null),t=o.ref(null),i=o.ref(!1),s=o.ref(0),r=u=>new Promise((d,f)=>{var g;(g=n.value)!=null&&g.setSinkId?n.value.setSinkId(u).then(d).catch(f):(Eg.message("error","当前浏览器不支持指定扬声器设备"),f())});return{startmicroVolumnCheck:async(u,d,f,g,T)=>{let S=u;if(n.value||(n.value=d||new AudioContext),!g){Eg.message("error","请先选择音频输出扬声器");return}r(g).then(async()=>{i.value=!0;const m={audio:f&&f!=="default"?{deviceId:f}:"default"};if(!S){const D=await navigator.mediaDevices.getUserMedia(m);S=n.value.createMediaStreamSource(D)}e.value=n.value.createAnalyser(),t.value=n.value.createGain(),t.value.gain.value=T,e.value.fftSize=32,S.connect(e.value),e.value.connect(t.value),t.value.connect(n.value.destination);const _=e.value.frequencyBinCount,k=new Uint8Array(_);function R(){e.value.getByteFrequencyData(k);let D=0;for(let F=0;F<_;F++)D+=k[F];s.value=Math.floor(D/_/255*100),i.value?requestAnimationFrame(R):s.value=0}R()}).catch(m=>{console.error(m),Eg.message("error",`设置${g}扬声器失败`)})},stopmicroVolumnCheck:()=>{var u,d;i.value=!1,(u=t.value)==null||u.disconnect(),(d=e.value)==null||d.disconnect()},setMicroOutputVolumn:u=>{i.value&&(t.value.gain.value=u)},isMicroDetectStart:i,microVolumn:s}}const V5="/assets/audio/moon_light.ogg",wg=new ki;function j5(){const n=o.ref(null),e=o.ref(!1),t=o.ref(null),i=o.ref(null),s=o.ref(0),r=u=>new Promise((d,f)=>{var g;(g=n.value)!=null&&g.setSinkId?n.value.setSinkId(u).then(d).catch(f):(wg.message("error","当前浏览器不支持指定扬声器设备"),f())});return{startOutputVolumeCheck:async(u,d,f="audio-detect-player",g,T)=>{let S=u;if(n.value||(n.value=d||new AudioContext),!g){wg.message("error","请先选择要检测的扬声器");return}r(g).then(()=>{if(e.value=!0,!S){let R=document.getElementById(f);R||(R=document.createElement("audio"),R.id=f,R.src=V5,R.autoplay=!0,document.body.appendChild(R),R.onloadeddata=function(){R.play()}),S=n.value.createMediaElementSource(R)}t.value=n.value.createAnalyser(),i.value=n.value.createGain(),i.value.gain.value=T,t.value.fftSize=32,S.connect(t.value),t.value.connect(i.value),i.value.connect(n.value.destination);const m=t.value.frequencyBinCount,_=new Uint8Array(m);function k(){t.value.getByteFrequencyData(_);let R=0;for(let D=0;D<m;D++)R+=_[D];s.value=Math.floor(R/m/255*100),e.value?requestAnimationFrame(k):s.value=0}k()}).catch(m=>{console.error(m),wg.message("error",`设置${g}扬声器失败`)})},stopOutputVolumeCheck:(u="audio-detect-player")=>{var f,g;const d=document.getElementById(u);d&&d.remove(),e.value=!1,(f=i.value)==null||f.disconnect(),(g=t.value)==null||g.disconnect()},setOutputVolumn:u=>{e.value&&(i.value.gain.value=u)},isOutputDetectStart:e,outputVolumn:s}}const q5={class:"addressbox"},$5={class:"CustomHeader"},H5={class:"tabs"},z5=["onClick"],G5={key:0,class:"setter-content"},W5={class:"setter-item",style:{"margin-bottom":"19px"}},K5={class:"setter-item-content"},Y5={class:"setter-item-tool"},X5={class:"setter-item-show"},J5={class:"setter-item-show-outter"},Q5={class:"setter-item-show-split-layer"},Z5={class:"setter-item-control"},eF={class:"setter-item"},tF={class:"setter-item-content"},iF={class:"setter-item-tool"},nF={class:"setter-item-show"},sF={class:"setter-item-show-outter"},rF={class:"setter-item-show-split-layer"},aF={class:"setter-item-control"},oF={key:1,class:"setter-content"},lF={class:"meeting-ordinary-setter"},cF={style:{display:"flex","align-items":"center",height:"32px",width:"100%"}},uF={key:0,style:{display:"flex","align-items":"center","margin-top":"10px"}},dF={key:1,style:{"margin-left":"5px"}},hF={key:2,class:"setter-content",style:{padding:"6px 12px 24px"}},fF={class:"camera-setter-foot"},QE="hx_device_setter_settings",xg=Ft({__name:"DeviceSetter",setup(n){const e=new ki,t=()=>{l.value=!1},i=o.ref(!1),s=()=>{i.value=!!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)},r=()=>{["fullscreenchange","webkitfullscreenchange","mozfullscreenchange","MSFullscreenChange"].forEach(H=>{document.addEventListener(H,s)})},a=()=>{["fullscreenchange","webkitfullscreenchange","mozfullscreenchange","MSFullscreenChange"].forEach(H=>{document.removeEventListener(H,s)})},l=o.ref(!1),c=o.ref(0),u=o.ref(""),d=o.ref("0%"),f=o.ref(100),g=o.ref(""),T=o.ref("0%"),S=o.ref(100),m=o.ref([]),_=o.ref(""),k=[{id:0,name:"音频设置"},{id:1,name:"视频设置"},{id:2,name:"通用设置"}],R=o.ref([]),D=o.ref([]),F=o.ref([]),L=o.ref(!1),$=o.ref(!1),U=o.ref(!1),O=o.ref(5),x=o.ref(5),A=[{value:5,label:"5秒"},{value:10,label:"10秒"},{value:15,label:"15秒"},{value:"custom",label:"自定义"}],M=async()=>{var P,H,ve;try{const{audioDevices:be,videoDevices:Me,outputDevices:Be}=await kg.getDeviceList(),et=Be&&((P=Be[0])!=null&&P.label)?Be[0].label:"扬声器",tt=be&&((H=be[0])!=null&&H.label)?be[0].label:"麦克风",ft=Me&&((ve=Me[0])!=null&&ve.label)?Me[0].label:"摄像头";D.value=[{label:`默认 - ${et}`,value:"default"}].concat(Be.map(we=>({label:we.label,value:we.deviceId}))),R.value=[{label:`默认 - ${tt}`,value:"default"}].concat(be.map(we=>({label:we.label,value:we.deviceId}))),F.value=[{label:`默认 - ${ft}`,value:"default"}].concat(Me.map(we=>({label:we.label,value:we.deviceId})))}catch(be){console.error(be)}};function V(){try{const P=localStorage.getItem(QE);if(!P)return;const H=JSON.parse(P);if(typeof H.isVoiceMotivationOpen=="boolean"&&(L.value=H.isVoiceMotivationOpen),typeof H.isAutoPolling=="boolean"&&($.value=H.isAutoPolling),typeof H.isAutoAnswer=="boolean"&&(U.value=H.isAutoAnswer),typeof H.pollingIntervalMs=="number"){const ve=H.pollingIntervalMs/1e3;O.value=ve,x.value=[5,10,15].includes(ve)?ve:"custom"}}catch(P){console.warn("loadPersistedSettings err",P)}}function G(){try{const P={isVoiceMotivationOpen:L.value,isAutoPolling:$.value,isAutoAnswer:U.value,pollingIntervalMs:(x.value==="custom"?O.value:x.value)*1e3};localStorage.setItem(QE,JSON.stringify(P))}catch(P){console.warn("persistSettings err",P)}}const ae=()=>{L.value=!L.value,Ze.emit("voiceMotivationChange",L.value)},se=()=>{U.value=!U.value,Ze.emit("autoAnswerChange",U.value)},oe=()=>{$.value=!$.value,Ze.emit("autoPollingToggle",$.value)},q=P=>{P!=="custom"&&(O.value=P,Ze.emit("pollingIntervalChange",P*1e3))},K=P=>{Ze.emit("pollingIntervalChange",Number(P)*1e3)},te=()=>{let P=parseInt(O.value);(isNaN(P)||P<5)&&(P=5),P>300&&(P=300),O.value=P,Ze.emit("pollingIntervalChange",P*1e3)},{microVolumn:ne,isMicroDetectStart:de,startmicroVolumnCheck:Ne,stopmicroVolumnCheck:Le,setMicroOutputVolumn:xe}=F5(),{outputVolumn:me,isOutputDetectStart:Ke,startOutputVolumeCheck:Je,stopOutputVolumeCheck:rt,setOutputVolumn:ht}=j5(),st=()=>{Ke.value&&rt(),de.value?Le():g.value?Ne(void 0,void 0,g.value,u.value,S.value/100):e.message("error","请先选择要检测的麦克风")},dt=()=>{de.value&&Le(),Ke.value?rt():Je(void 0,void 0,"audio-detect-player",u.value,f.value/100)};o.watch([L,$,U,x,O],()=>{G()});const ye=async()=>{try{let P=null;if(!_.value||_.value==="default"){P=await navigator.mediaDevices.getUserMedia({video:!0});const H=document.getElementById("camera-setter-video-ele");m.value=P.getTracks(),H&&(H.srcObject=P);return}try{P=await navigator.mediaDevices.getUserMedia({video:{deviceId:_.value}});const H=document.getElementById("camera-setter-video-ele");m.value=P.getTracks(),H&&(H.srcObject=P);return}catch(H){console.warn("指定视频设备启动失败,回退默认摄像头",H),P=await navigator.mediaDevices.getUserMedia({video:!0});const ve=document.getElementById("camera-setter-video-ele");m.value=P.getTracks(),ve&&(ve.srcObject=P);return}}catch(P){console.error("初始化视频流失败:",P);try{const H=await navigator.mediaDevices.getUserMedia({video:!0}),ve=document.getElementById("camera-setter-video-ele");m.value=H.getTracks(),ve&&(ve.srcObject=H)}catch(H){console.error("使用默认设备也失败:",H)}}},Ve=()=>{m.value.length>0&&m.value.forEach(P=>{P.stop()})},he=()=>{let P=document.querySelector("#camera-setter-video-ele");P&&(P.pause(),P.srcObject=null,P.src=""),Ve()};return Ze.on("getDeviceSetter",async P=>{var be,Me,Be;l.value=!0,c.value=P.type,await M(),V();const H=window.liveClient||{},ve=(P==null?void 0:P.tempActive)||(H==null?void 0:H.activeDevice)||{};if(u.value=(ve==null?void 0:ve.audioOutputDevice)||((be=H==null?void 0:H.activeDevice)==null?void 0:be.audioOutputDevice)||u.value||"default",g.value=(ve==null?void 0:ve.audioInputDevice)||((Me=H==null?void 0:H.activeDevice)==null?void 0:Me.audioInputDevice)||g.value||"default",_.value=(ve==null?void 0:ve.videoDevice)||((Be=H==null?void 0:H.activeDevice)==null?void 0:Be.videoInputDevice)||_.value||"default",_.value)try{if((await navigator.mediaDevices.enumerateDevices()).filter(we=>we.kind==="videoinput").some(we=>we.deviceId===_.value))ye();else{_.value="";try{await ye()}catch(we){console.warn("回退默认视频流失败",we)}}}catch{_.value=""}}),o.watch(()=>g.value,P=>{P&&g.value&&Le()}),o.watch(()=>S.value,P=>{xe(P/100)}),o.watch(()=>ne.value,P=>{T.value=P>50?"100%":(P/50).toFixed(2)*100+"%"}),o.watch(()=>f.value,P=>{ht(P/100)}),o.watch(()=>me.value,P=>{d.value=P>24?"100%":(P/24).toFixed(2)*100+"%"}),o.watch(()=>u.value,P=>{Ke.value&&rt()}),o.watch(()=>c.value,async()=>{if(de.value&&Le(),Ke.value&&rt(),he(),_.value)try{(await navigator.mediaDevices.enumerateDevices()).filter(be=>be.kind==="videoinput").some(be=>be.deviceId===_.value)?ye():_.value=""}catch{_.value=""}}),o.watch(()=>_.value,P=>{Ze.emit("setterVideoDeviceChange",P)}),o.watch(()=>l.value,async P=>{P||(await o.nextTick(),he())}),o.onMounted(()=>{s(),r()}),o.onUnmounted(()=>{a()}),(P,H)=>{const ve=o.resolveComponent("el-icon"),be=o.resolveComponent("el-option"),Me=o.resolveComponent("el-select"),Be=o.resolveComponent("el-slider"),et=o.resolveComponent("el-radio"),tt=o.resolveComponent("el-radio-group"),ft=o.resolveComponent("el-input"),we=o.resolveComponent("el-dialog");return o.openBlock(),o.createElementBlock("div",q5,[o.createVNode(we,{modelValue:l.value,"onUpdate:modelValue":H[8]||(H[8]=Ie=>l.value=Ie),"show-close":!1,class:"addresslogClass2",width:"588px","append-to-body":!i.value,style:{background:"#252e3d",height:"560px"}},{header:o.withCtx(()=>[o.createElementVNode("div",$5,[o.createElementVNode("div",H5,[(o.openBlock(),o.createElementBlock(o.Fragment,null,o.renderList(k,Ie=>o.createElementVNode("div",{key:Ie.id,class:o.normalizeClass(["tabItem",c.value==Ie.id?"activeBorder":""]),onClick:Vt=>c.value=Ie.id},o.toDisplayString(Ie.name),11,z5)),64))]),o.createElementVNode("div",{onClick:o.withModifiers(t,["stop"]),style:{cursor:"pointer",padding:"4px"}},[o.createVNode(ve,{size:24,style:{color:"#fff"}},{default:o.withCtx(()=>[o.createVNode(o.unref(Uh))]),_:1})])])]),default:o.withCtx(()=>[H[20]||(H[20]=o.createElementVNode("div",{class:"fgx"},null,-1)),c.value===0?(o.openBlock(),o.createElementBlock("div",G5,[o.createElementVNode("div",W5,[H[11]||(H[11]=o.createElementVNode("div",{class:"setter-item-title"},"扬声器",-1)),o.createElementVNode("div",K5,[o.createElementVNode("div",Y5,[o.createVNode(Me,{modelValue:u.value,"onUpdate:modelValue":H[0]||(H[0]=Ie=>u.value=Ie)},{default:o.withCtx(()=>[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(D.value,Ie=>(o.openBlock(),o.createBlock(be,{key:Ie.value,label:Ie.label,value:Ie.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),o.createElementVNode("div",{class:"detect-btn",onClick:dt},o.toDisplayString(o.unref(Ke)?"停止监测":"扬声器监测"),1)]),o.createElementVNode("div",X5,[H[9]||(H[9]=o.createElementVNode("div",{class:"setter-item-show-title"},[o.createElementVNode("span",null,"输出等级"),o.createElementVNode("img",{class:"icon",src:Ro,alt:""})],-1)),o.createElementVNode("div",J5,[o.createElementVNode("div",Q5,[(o.openBlock(),o.createElementBlock(o.Fragment,null,o.renderList(9,Ie=>o.createElementVNode("div",{class:"setter-item-show-split",key:Ie})),64))]),o.createElementVNode("div",{class:"setter-item-show-inner",style:o.normalizeStyle({width:d.value})},null,4)])]),o.createElementVNode("div",Z5,[H[10]||(H[10]=o.createElementVNode("div",{class:"setter-item-show-title"},[o.createElementVNode("span",null,"输出等级"),o.createElementVNode("img",{class:"icon",src:Ro,alt:""})],-1)),o.createVNode(Be,{modelValue:f.value,"onUpdate:modelValue":H[1]||(H[1]=Ie=>f.value=Ie)},null,8,["modelValue"])])])]),o.createElementVNode("div",eF,[H[14]||(H[14]=o.createElementVNode("div",{class:"setter-item-title"},"麦克风",-1)),o.createElementVNode("div",tF,[o.createElementVNode("div",iF,[o.createVNode(Me,{modelValue:g.value,"onUpdate:modelValue":H[2]||(H[2]=Ie=>g.value=Ie)},{default:o.withCtx(()=>[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(R.value,Ie=>(o.openBlock(),o.createBlock(be,{key:Ie.value,label:Ie.label,value:Ie.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),o.createElementVNode("div",{class:"detect-btn",onClick:st},o.toDisplayString(o.unref(de)?"停止监测":"开始监测"),1)]),o.createElementVNode("div",nF,[H[12]||(H[12]=o.createElementVNode("div",{class:"setter-item-show-title"},[o.createElementVNode("span",null,"输出等级"),o.createElementVNode("img",{class:"icon",src:Ro,alt:""})],-1)),o.createElementVNode("div",sF,[o.createElementVNode("div",rF,[(o.openBlock(),o.createElementBlock(o.Fragment,null,o.renderList(9,Ie=>o.createElementVNode("div",{class:"setter-item-show-split",key:Ie})),64))]),o.createElementVNode("div",{class:"setter-item-show-inner",style:o.normalizeStyle({width:T.value})},null,4)])]),o.createElementVNode("div",aF,[H[13]||(H[13]=o.createElementVNode("div",{class:"setter-item-show-title"},[o.createElementVNode("span",null,"输出等级"),o.createElementVNode("img",{class:"icon",src:Ro,alt:""})],-1)),o.createVNode(Be,{modelValue:S.value,"onUpdate:modelValue":H[3]||(H[3]=Ie=>S.value=Ie)},null,8,["modelValue"])])])])])):c.value===2?(o.openBlock(),o.createElementBlock("div",oF,[o.createElementVNode("div",lF,[o.createElementVNode("div",{class:o.normalizeClass(["meeting-ordinary-setter-item",{"meeting-ordinary-setter-item-checked":L.value}]),onClick:ae},[...H[15]||(H[15]=[o.createElementVNode("div",{class:"meeting-ordinary-setter-item-check"},null,-1),o.createElementVNode("span",{class:"meeting-ordinary-setter-item-name"},"语音激励",-1)])],2),o.createElementVNode("div",{class:o.normalizeClass(["meeting-ordinary-setter-item",{"meeting-ordinary-setter-item-checked":U.value}]),onClick:se},[...H[16]||(H[16]=[o.createElementVNode("div",{class:"meeting-ordinary-setter-item-check"},null,-1),o.createElementVNode("span",{class:"meeting-ordinary-setter-item-name"},"自动接听",-1)])],2),o.createElementVNode("div",{class:o.normalizeClass(["meeting-ordinary-setter-item",{"meeting-ordinary-setter-item-checked":$.value}]),style:{"flex-direction":"column","align-items":"start",height:"auto"},onClick:H[6]||(H[6]=o.withModifiers(()=>{},["stop"]))},[o.createElementVNode("div",cF,[o.createElementVNode("div",{class:"meeting-ordinary-setter-item-check",onClick:o.withModifiers(oe,["stop"])}),H[17]||(H[17]=o.createElementVNode("span",{class:"meeting-ordinary-setter-item-name"},"画面轮询",-1))]),$.value?(o.openBlock(),o.createElementBlock("div",uF,[H[18]||(H[18]=o.createElementVNode("span",{style:{"white-space":"nowrap","margin-right":"15px"}},"轮询间隔:",-1)),o.createVNode(tt,{modelValue:x.value,"onUpdate:modelValue":H[4]||(H[4]=Ie=>x.value=Ie),onChange:q},{default:o.withCtx(()=>[(o.openBlock(),o.createElementBlock(o.Fragment,null,o.renderList(A,Ie=>o.createVNode(et,{key:Ie.value,value:Ie.value},{default:o.withCtx(()=>[o.createTextVNode(o.toDisplayString(Ie.label),1)]),_:2},1032,["value"])),64))]),_:1},8,["modelValue"]),x.value==="custom"?(o.openBlock(),o.createBlock(ft,{key:0,modelValue:O.value,"onUpdate:modelValue":H[5]||(H[5]=Ie=>O.value=Ie),type:"number",min:5,max:300,style:{width:"80px","margin-left":"10px"},onChange:K,onBlur:te},null,8,["modelValue"])):o.createCommentVNode("",!0),x.value==="custom"?(o.openBlock(),o.createElementBlock("span",dF,"秒")):o.createCommentVNode("",!0)])):o.createCommentVNode("",!0)],2)])])):c.value===1?(o.openBlock(),o.createElementBlock("div",hF,[H[19]||(H[19]=o.createElementVNode("div",{class:"camera-setter"},[o.createElementVNode("video",{id:"camera-setter-video-ele",class:"camera-setter-video",muted:"",autoplay:""})],-1)),o.createElementVNode("div",fF,[o.createVNode(Me,{style:{width:"100%"},modelValue:_.value,"onUpdate:modelValue":H[7]||(H[7]=Ie=>_.value=Ie)},{default:o.withCtx(()=>[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(F.value,Ie=>(o.openBlock(),o.createBlock(be,{key:Ie.value,label:Ie.label,value:Ie.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])])):o.createCommentVNode("",!0)]),_:1},8,["modelValue","append-to-body"])])}}},[["__scopeId","data-v-d605daab"]]),pF={class:"dialog"},mF={class:"dialog-head"},gF={class:"dialog-contain"},yF={class:"video-contain"},vF={id:"video-ele",class:"video-ele",muted:"",autoplay:""},bF={class:"tool-bar"},TF={class:"tool-bar-group"},SF={class:"imgsf"},_F={class:"imgsf"},CF={class:"imgsf"},ZE=Ft({__name:"MeetingReadyDialog",props:{dialogType:{type:String,default:"launch"},tempRoomNum:{type:String,default:""},meetingTitle:{type:String,default:"调度会议"}},emits:["close","launchMeeting","joinMeeting"],setup(n,{emit:e}){const t=new ki,i=e,s=n,r=o.ref(""),a=o.ref(""),l=o.ref(!0),c=o.ref(!0),u=o.ref(null),d=o.ref(!1),f=o.ref(!1),g=o.ref([]),T=o.ref(!1),S=o.ref([]),m=o.ref([]),_=o.ref([]),k=o.reactive({audioInputDevice:"",audioOutputDevice:"",videoDevice:""}),R=o.ref(!1);o.watch(()=>l.value,async q=>{let K=null;q?K={audio:k!=null&&k.audioInputDevice?{deviceId:k.audioInputDevice}:!0,video:k!=null&&k.videoDevice?{deviceId:k.videoDevice}:{facingMode:u}}:K={audio:k!=null&&k.audioInputDevice?{deviceId:k.audioInputDevice}:!0,video:!1},await x(K)});function D(){if(r.value==""){t.message("error","会议名称不能为空");return}else if(r.value.length>10){t.message("error","会议名称不能超过10个字符");return}i("launchMeeting",{roomName:r.value,cameraStatus:l.value,microphoneStatus:c.value,audioInputDevice:k.audioInputDevice,audioOutputDevice:k.audioOutputDevice,videoDevice:k.videoDevice}),i("close")}function F(){if(a.value==""){t.message("error","会议名称不能为空");return}i("joinMeeting",{roomNum:a.value,cameraStatus:l.value,microphoneStatus:c.value,audioInputDevice:k.audioInputDevice,audioOutputDevice:k.audioOutputDevice,videoDevice:k.videoDevice}),i("close")}async function L(){try{if(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices){console.warn("浏览器不支持 enumerateDevices 或 mediaDevices 为 undefined"),t.message("warning","浏览器不支持设备枚举或未授权访问,请检查浏览器或使用兼容的浏览器"),S.value=[],_.value=[],m.value=[];return}const{audioDevices:q,videoDevices:K,outputDevices:te}=await kg.getDeviceList();S.value=q.map(ne=>({label:ne.label,value:ne.deviceId})),_.value=K.map(ne=>({label:ne.label,value:ne.deviceId})),m.value=te.map(ne=>({label:ne.label,value:ne.deviceId}))}catch(q){console.error(q),t.message("error","获取设备列表失败")}}function $(){c.value=!c.value}function U(){l.value=!l.value}function O(){g.value.length>0&&g.value.forEach(q=>{q.stop()})}async function x(q){try{if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)throw new Error("当前环境不支持媒体设备访问 (getUserMedia 不可用)");const K=await navigator.mediaDevices.getUserMedia(q);let te=document.querySelector("#video-ele");te&&(te.srcObject=K,O(),g.value=K.getTracks(),te.onloadedmetadata=function(ne){te.play()})}catch(K){throw new Error(K)}}function A(){let q=document.querySelector("#video-ele");q&&(q.pause(),q.srcObject=null,q.src=""),O()}async function M(){u.value="user";const q={audio:c.value,video:l.value?{facingMode:u.value}:l.value};if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia){console.warn("跳过视频流初始化:getUserMedia 不可用");return}await x(q)}async function V(q){if(q&&q!==(k==null?void 0:k.audioInputDevice)){if(k.audioInputDevice=q,!c.value)return;try{const K=await navigator.mediaDevices.getUserMedia({audio:{deviceId:q}}),te=document.querySelector("#video-ele"),ne=te==null?void 0:te.srcObject;if(ne&&te)ne.getAudioTracks().forEach(Le=>Le.stop()),K.getAudioTracks().forEach(Le=>{ne.addTrack(Le)}),g.value=ne.getTracks(),te.srcObject=ne;else{let de={audio:c.value?{deviceId:q}:!0,video:l.value?k!=null&&k.videoDevice?{deviceId:k.videoDevice}:{facingMode:u.value}:l.value};const Ne=await navigator.mediaDevices.getUserMedia(de);let Le=document.querySelector("#video-ele");Le&&(Le.srcObject=Ne,g.value=Ne.getTracks())}K.getTracks().forEach(de=>de.stop())}catch(K){console.error("切换音频设备失败:",K);let te={audio:c.value?{deviceId:q}:!0,video:l.value?k!=null&&k.videoDevice?{deviceId:k.videoDevice}:{facingMode:u.value}:l.value};const ne=await navigator.mediaDevices.getUserMedia(te);let de=document.querySelector("#video-ele");de&&(de.srcObject=ne,g.value=ne.getTracks())}}}function G(q){q&&q!==k.audioOutputDevice&&(k.audioOutputDevice=q)}async function ae(q){if(q&&q!==k.videoDevice){k.videoDevice=q;let K={audio:k!=null&&k.audioInputDevice?{deviceId:k.audioInputDevice}:!0,video:l.value?{deviceId:q}:l.value};await x(K)}}async function se(){T.value=!T.value,await o.nextTick();let q=document.getElementById("video-ele");q&&(T.value?q.style.transform="rotateY(180deg)":q.style.transform="rotateY(0deg)")}o.onMounted(async()=>{await L(),await M(),s.dialogType==="join"&&(a.value=s.tempRoomNum),r.value=s.meetingTitle}),o.onBeforeUnmount(()=>{A()});async function oe(){R.value||(R.value=!0,await o.nextTick()),Ze.emit("getDeviceSetter",{type:0,tempActive:k})}return(q,K)=>{const te=o.resolveComponent("el-input");return o.openBlock(),o.createElementBlock("div",{class:"mask",onClick:K[7]||(K[7]=o.withModifiers(ne=>i("close"),["self"]))},[o.createElementVNode("div",pF,[o.createElementVNode("div",mF,[n.dialogType==="launch"?(o.openBlock(),o.createBlock(te,{key:0,class:"search-input",modelValue:r.value,"onUpdate:modelValue":K[0]||(K[0]=ne=>r.value=ne),placeholder:"请输入会议名称"},null,8,["modelValue"])):(o.openBlock(),o.createBlock(te,{key:1,class:"search-input",modelValue:a.value,"onUpdate:modelValue":K[1]||(K[1]=ne=>a.value=ne),placeholder:"请输入会议ID"},null,8,["modelValue"])),o.createElementVNode("div",{class:"close-icon",onClick:K[2]||(K[2]=ne=>i("close"))})]),o.createElementVNode("div",gF,[o.createElementVNode("div",yF,[K[9]||(K[9]=o.createElementVNode("div",{class:"avatar"},null,-1)),o.withDirectives(o.createElementVNode("video",vF,null,512),[[o.vShow,l.value]]),o.createElementVNode("div",{class:"mirror-switch",onClick:se},[...K[8]||(K[8]=[o.createElementVNode("img",{class:"mirror-switch-icon",src:U4},null,-1),o.createElementVNode("span",null,"镜像",-1)])])]),o.createElementVNode("div",bF,[o.createElementVNode("div",TF,[o.createElementVNode("div",SF,[o.createElementVNode("div",{class:o.normalizeClass(["img-icon",c.value?"img-icon-mic-on":"img-icon-mic-off"]),onClick:$},null,2),K[11]||(K[11]=o.createElementVNode("div",{class:"xian"},null,-1)),o.createElementVNode("div",{style:{width:"20px",height:"20px",display:"flex","align-items":"center","justify-content":"center"},onClick:K[3]||(K[3]=ne=>d.value=!d.value)},[...K[10]||(K[10]=[o.createElementVNode("img",{src:uC,alt:""},null,-1)])]),d.value?(o.openBlock(),o.createBlock(oc,{key:0,dialogType:"audio",audioDevices:S.value,outputDevices:m.value,activeDevice:k,onClose:K[4]||(K[4]=ne=>d.value=!1),onChooseAudioInputDevice:V,onChooseAudioOutputDevice:G},null,8,["audioDevices","outputDevices","activeDevice"])):o.createCommentVNode("",!0)]),o.createElementVNode("div",_F,[o.createElementVNode("div",{class:o.normalizeClass(["img-icon",l.value?"img-icon-cam-on":"img-icon-cam-off"]),onClick:U},null,2),K[13]||(K[13]=o.createElementVNode("div",{class:"xian"},null,-1)),o.createElementVNode("div",{style:{width:"20px",height:"20px",display:"flex","justify-content":"center","align-items":"center"},onClick:K[5]||(K[5]=ne=>f.value=!f.value)},[...K[12]||(K[12]=[o.createElementVNode("img",{src:uC,alt:""},null,-1)])]),f.value?(o.openBlock(),o.createBlock(oc,{key:0,dialogType:"video",videoDevices:_.value,activeDevice:k,onClose:K[6]||(K[6]=ne=>f.value=!1),onChooseVideoDevice:ae},null,8,["videoDevices","activeDevice"])):o.createCommentVNode("",!0)]),o.createElementVNode("div",CF,[o.createElementVNode("img",{src:dC,alt:"",onClick:oe,class:"set"}),R.value?(o.openBlock(),o.createBlock(xg,{key:0,tempActiveDevice:k},null,8,["tempActiveDevice"])):o.createCommentVNode("",!0)])]),n.dialogType==="launch"?(o.openBlock(),o.createElementBlock("div",{key:0,class:"tool-bar-btn",onClick:D}," 发起会议 ")):(o.openBlock(),o.createElementBlock("div",{key:1,class:"tool-bar-btn",onClick:F},"加入会议"))])])])])}}},[["__scopeId","data-v-c50f10e9"]]),e1="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAUCAYAAABiS3YzAAAAAXNSR0IArs4c6QAAAqBJREFUOE+lU0FoE0EUfX+TaFrjwZKDBxXMqZBDxVu9tEgVsYqCGujBg6dCS5VikaCklCCKYlEsVkF62ChSNiii5lKkQQXFU/FUsFLSi1KMklJEaZr5dnZ3NrPNBg/OZXZmZ968/977BG2MFTm88AUjYJwAIaL/AwMgd4eRMQilGuN8lZHO99OKflYds/f6HnIfCVxU9+UsB9XBJDYbhFGjilItgkcQWIbA0JMBWlTAftAHbAlGwscwYBEOIUNVLFQNTNuPAqv4g3PTw1Ry1/VbqUm2gH+DgvHKGqSxM5M8bgAxiSCAQn6AXjSAnr5XB9UqdiQAbFntiUFCIB3aiWI+RbXNxfjKPzXBFuvlGwAxmMmzyH9fADA888xnQzTRwPTkXbaIkbCNUtQIYHbWcg4cZLPPPb8QBHqHLZCjaU8S8R0tiCiOzM4XSQB3fFxEZamM3+6+GQh6/Laj6e42RPu7Ofl9tc5L10lFblcb8eWnmFtbtx8yXw4HMO0dZ2ujjEQsitBgD9q3hjnqwWpOqeyWyvQj9x4ldrQ1C0GgR29tipS/i2RslC9SjDp5BhMhVxgJYHrkJlus5dQXDc04O1fSPG+y42bOXAoAPXzDKV/S2b8H8W1RRGQmocxR3+78+RsqyyuOUVLTmXQA6KHrbDFhbzyGlt4OJH+tuYnX9JTuqyRsb4V4/A6f1gUEC5ivrwSAHrzmMI1GEDq2D+1bIogqEIMAoeVUvvO1gnJxHktun5mzQaDdV9naEDwhHfE8Uh2jd4/b7E7PAiQ7T8CczQQw7cryFIAOFaNmXaT2fSkjTL3J0P2GNu3Kcqdg2P3bMCSC0EzbdIAMnH2bofkGULlxIMudIYEUA61NOt3TRmpsEH7WDFgfRmnOq7Dpxf/48RdZkAok9Jke3QAAAABJRU5ErkJggg==",kF="data:image/png;base64,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",EF={class:"custom-video-player"},wF=["id","controls","data-setup","width","height"],xF=["src","type"],DF={key:0,class:"error-overlay"},AF={class:"error-message"},PF={class:"error-detail"},IF={key:1,class:"loading-overlay"},NF=Ft({__name:"CustomVideoPlayer",props:{videoUrl:{type:String,default:""},controls:{type:Boolean,default:!0},showCustomButton:{type:Boolean,default:!1},hideSnapshotButton:{type:Boolean,default:!1},live:{type:Boolean,default:!1},hasvideo:{type:Boolean,default:!0},width:{type:[String,Number],default:"100%"},height:{type:[String,Number],default:"auto"},lang:{type:String,default:"zh-CN"}},emits:["closeVideo","play","pause","ended","error","loadeddata"],setup(n,{expose:e,emit:t}){const i=n,s=t;e({pause:()=>{a.value&&a.value.pause()},play:()=>{a.value&&a.value.play()},dispose:()=>{a.value&&(a.value.dispose(),a.value=null)}});const r=o.ref(null),a=o.ref(null),l=o.ref(`video-player-${Date.now()}`),c=o.ref(!1),u=o.ref(""),d=o.ref(!1),f=JSON.stringify({fluid:!0,responsive:!0,playbackRates:[.5,1,1.25,1.5,2],language:i.lang,techOrder:["html5"],html5:{vhs:{overrideNative:!0}}}),g=L=>{if(!L)return"video/mp4";const $=L.split(".").pop().toLowerCase();return{mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",mov:"video/quicktime",avi:"video/x-msvideo",m3u8:"application/x-mpegURL",flv:"video/x-flv"}[$]||"video/mp4"},T=async()=>{if(!(!r.value||!i.videoUrl))try{d.value=!0,c.value=!1,a.value&&(a.value.dispose(),a.value=null),await o.nextTick(),a.value=fe(r.value,{controls:i.controls,fluid:!0,responsive:!0,playbackRates:[.5,1,1.25,1.5,2],language:i.lang,techOrder:["html5"],sources:[{src:i.videoUrl,type:g(i.videoUrl)}],html5:{vhs:{overrideNative:!0}}}),a.value.ready(()=>{d.value=!1}),a.value.on("error",L=>{console.error("Video.js error:",L),S(L)}),a.value.on("play",()=>{s("play")}),a.value.on("pause",()=>{s("pause")}),a.value.on("ended",()=>{s("ended")}),a.value.on("loadeddata",()=>{s("loadeddata"),d.value=!1})}catch(L){console.error("Failed to initialize player:",L),S(L)}},S=L=>{c.value=!0,d.value=!1,u.value=(L==null?void 0:L.message)||"视频加载失败,请检查视频地址是否正确",s("error",L),kn.error("视频加载失败")},m=()=>{d.value=!0,c.value=!1},_=()=>{d.value=!1,s("loadeddata")},k=()=>{s("play")},R=()=>{s("pause")},D=()=>{s("ended")},F=()=>{c.value=!1,u.value="",T()};return o.watch(()=>i.videoUrl,L=>{L&&T()},{immediate:!0}),o.onMounted(()=>{i.videoUrl&&T()}),o.onUnmounted(()=>{a.value&&(a.value.dispose(),a.value=null)}),(L,$)=>(o.openBlock(),o.createElementBlock("div",EF,[o.createElementVNode("div",{class:o.normalizeClass(["video-container",{"has-error":c.value}])},[o.createElementVNode("video",{ref_key:"videoElement",ref:r,id:l.value,class:"video-js vjs-default-skin",controls:n.controls,"data-setup":o.unref(f),width:n.width,height:n.height,preload:"metadata",onError:S,onLoadstart:m,onLoadeddata:_,onPlay:k,onPause:R,onEnded:D},[o.createElementVNode("source",{src:n.videoUrl,type:g(n.videoUrl)},null,8,xF),$[0]||($[0]=o.createElementVNode("p",{class:"vjs-no-js"},[o.createTextVNode(" To view this video please enable JavaScript, and consider upgrading to a "),o.createElementVNode("a",{href:"https://videojs.com/html5-video-support/",target:"_blank"},[o.createTextVNode(" web browser that "),o.createElementVNode("span",null,"supports HTML5 video")])],-1))],40,wF),c.value?(o.openBlock(),o.createElementBlock("div",DF,[o.createElementVNode("div",AF,[$[2]||($[2]=o.createElementVNode("i",{class:"el-icon-warning"},null,-1)),$[3]||($[3]=o.createElementVNode("p",null,"视频加载失败",-1)),o.createElementVNode("p",PF,o.toDisplayString(u.value),1),o.createVNode(o.unref(zy),{onClick:F,size:"small",type:"primary"},{default:o.withCtx(()=>[...$[1]||($[1]=[o.createTextVNode("重试",-1)])]),_:1})])])):o.createCommentVNode("",!0),d.value?(o.openBlock(),o.createElementBlock("div",IF,[...$[4]||($[4]=[o.createElementVNode("div",{class:"loading-spinner"},[o.createElementVNode("i",{class:"el-icon-loading"}),o.createElementVNode("p",null,"视频加载中...")],-1)])])):o.createCommentVNode("",!0)],2)]))}},[["__scopeId","data-v-130b6096"]]),RF=(n={},{baseUrl:e,token:t}={})=>Tt.post("/api/conferenceRecord/getConferenceRecordByPage",n,{baseURL:e,headers:{satoken:t}}),MF=(n={},{baseUrl:e,token:t}={})=>Tt.post("/api/conferenceRecord/deleteConferenceRecord",n,{baseURL:e,headers:{satoken:t}}),OF=(n={},{baseUrl:e,token:t}={})=>Tt.post("/api/conferenceRecord/updateConferenceRecord",n,{baseURL:e,headers:{satoken:t}}),LF=(n="",{baseUrl:e,token:t}={})=>Tt.post(`/api/asr/getMessageByBytes?fileUrl=${n}`,null,{baseURL:e,headers:{satoken:t}}),ha=(n={},{baseUrl:e,token:t}={})=>Tt.post("/api/v1/displayUsers",n,{baseURL:e,headers:{satoken:t}}),xs=(n={},{baseUrl:e,token:t}={})=>Tt.post("api/v1/muteParticipant",n,{baseURL:e,headers:{satoken:t}}),BF=(n={},{baseUrl:e,token:t}={})=>Tt.post("/api/ddhy/sendMsg",n,{baseURL:e,headers:{satoken:t}}),UF=(n={},{baseUrl:e,token:t}={})=>Tt.get("/api/ddhy/getMsg",{params:n,baseURL:e,headers:{satoken:t}}),FF=(n="",e={},{baseUrl:t,token:i}={})=>Tt.post(`/api/conferenceRoom/addConferenceMeetingByRoomName?roomName=${n}`,e,{baseURL:t,headers:{satoken:i}}),VF={class:"manage-container"},jF={class:"main-box"},qF={class:"main-top-box"},$F={class:"searchArea"},HF={class:"main-list-box"},zF={class:"video-header"},GF={class:"video-title"},WF={class:"el-dialog__title"},KF={class:"video-close"},YF={class:"video-dialog-body"},XF={class:"video-player-box"},JF={key:0,class:"video-transcribe-box"},QF={key:1,class:"video-transcribe-box"},ZF={class:"transcribe-content"},eV={class:"message-list"},tV={style:{width:"100%",display:"flex","align-items":"center","justify-content":"center"}},iV=Ft({__name:"HistoryVideoDialog",props:{baseUrl:{type:String,default:""},token:{type:String,default:""}},setup(n){const e=n;o.ref("0");const t=o.ref(0),i=o.ref(1),s=o.ref(10),r=o.ref([]),a=o.reactive({fileName:"",ownerName:"",createdAt:[],roomMode:"0"}),l=o.ref([]),c=o.ref(!1),u=o.ref(""),d=o.ref("http://10.227.1.34:18080/mp3"),f=o.ref("http://10.227.1.31:7101/recordings"),g=o.ref(""),T=o.ref(!1),S=o.reactive({}),m=o.reactive({fileName:[{required:!0,message:"请输入文件名称",trigger:"blur"}]});o.ref("");const _=o.ref(!0),k=o.ref(""),R=o.ref(""),D=o.ref(!1),F=o.ref(null),L=o.ref(null),$=async()=>{let xe="",me="";if(a.createdAt[0]){let Je=new Date(a.createdAt[0]);Je.setUTCHours(Je.getUTCHours()+8),xe=Je.toISOString().replace(/T/," ").replace(/\..+/,"")}if(a.createdAt[1]){let Je=new Date(a.createdAt[1]);Je.setUTCHours(Je.getUTCHours()+8),me=Je.toISOString().replace(/T/," ").replace(/\..+/,"")}let Ke={fileName:a.fileName,ownerName:a.ownerName,roomMode:a.roomMode,start:xe,end:me,page:{current:i.value,size:s.value}};try{const Je=await RF(Ke,{baseUrl:e.baseUrl,token:e.token});Je.status==200?(l.value=Je.data?Je.data.data:[],t.value=Je.data?Je.data.recordsTotal:0):(l.value=[],t.value=0)}catch(Je){l.value=[],t.value=0,console.log(Je)}},U=()=>{a.fileName="",a.ownerName="",a.createdAt=[],t.value=0,i.value=1,s.value=10,r.value=[],$()},O=xe=>{r.value=xe},x=async xe=>{try{await ef.confirm("确定删除这条录像文件?","警告",{type:"warning"});const me={id:xe.id},Ke=await MF(me,{baseUrl:e.baseUrl,token:e.token});Ke.data.code===0?(kn.success("删除成功"),$()):kn.error(Ke.data.msg)}catch(me){me==="cancel"?kn.info("已取消删除"):console.error("删除失败:",me)}},A=async xe=>{c.value=!0,u.value=f.value+xe.filePath,g.value=xe.fileName||"夏小明的直播间",_.value=!0;try{let me=d.value+xe.filePath.replace(/4$/,"3");const Ke=await LF(me,{baseUrl:e.baseUrl,token:e.token});Ke.data&&Ke.data.code==0?k.value=Ke.data.msg:k.value=""}catch(me){console.log(me)}setTimeout(()=>{_.value=!1},1e3)},M=()=>{L.value&&L.value.dispose(),c.value=!1,setTimeout(()=>{u.value=""},100)},V=xe=>{L.value&&L.value.dispose(),c.value=!1,setTimeout(()=>{u.value=""},100),typeof xe=="function"&&xe()},G=()=>{console.log("视频开始播放")},ae=()=>{console.log("视频暂停")},se=()=>{console.log("视频播放结束")},oe=xe=>{console.error("视频播放错误:",xe),kn.error("视频播放出现错误")},q=xe=>{let me=f.value+xe.filePath;de(me,xe.fileName)},K=xe=>{T.value=!0,Object.assign(S,xe)},te=async()=>{var me;if(await((me=F.value)==null?void 0:me.validate()))try{const Ke={id:S.id,fileName:S.fileName},Je=await OF(Ke,{baseUrl:e.baseUrl,token:e.token});Je.data.code===0?(kn.success("重命名成功"),T.value=!1,$()):kn.error(Je.data.msg)}catch(Ke){console.error("重命名失败:",Ke),kn.error("重命名失败")}},ne=()=>{var xe;T.value=!1,(xe=F.value)==null||xe.resetFields(),Object.assign(S,{})},de=async(xe,me)=>{const Je=await(await fetch(xe)).blob();let rt=document.createElement("a");rt.style.display="none",rt.download=`${me}.mp4`,rt.href=URL.createObjectURL(Je),document.body.appendChild(rt),rt.click(),document.body.removeChild(rt)},Ne=xe=>{i.value=xe,$()},Le=xe=>{s.value=xe,i.value=t.value/s.value<i.value?Math.ceil(t.value/s.value):i.value,$()};return o.onMounted(()=>{$()}),(xe,me)=>{const Ke=o.resolveComponent("el-input"),Je=o.resolveComponent("el-form-item"),rt=o.resolveComponent("el-col"),ht=o.resolveComponent("el-date-picker"),st=o.resolveComponent("el-button"),dt=o.resolveComponent("el-row"),ye=o.resolveComponent("el-form"),Ve=o.resolveComponent("el-table-column"),he=o.resolveComponent("el-table"),P=o.resolveComponent("el-pagination"),H=o.resolveComponent("el-icon"),ve=o.resolveComponent("el-dialog");return o.openBlock(),o.createElementBlock("div",VF,[o.createElementVNode("div",jF,[o.createElementVNode("div",qF,[o.createElementVNode("div",$F,[o.createVNode(ye,{ref:"queryFormRef",model:a,"label-width":"90px","label-position":"right",size:"small"},{default:o.withCtx(()=>[o.createVNode(dt,null,{default:o.withCtx(()=>[o.createVNode(rt,{span:6},{default:o.withCtx(()=>[o.createVNode(Je,{label:"文件名称"},{default:o.withCtx(()=>[o.createVNode(Ke,{modelValue:a.fileName,"onUpdate:modelValue":me[0]||(me[0]=be=>a.fileName=be),maxlength:100,placeholder:"请输入文件名称"},null,8,["modelValue"])]),_:1})]),_:1}),o.createVNode(rt,{span:6},{default:o.withCtx(()=>[o.createVNode(Je,{label:"创建者"},{default:o.withCtx(()=>[o.createVNode(Ke,{modelValue:a.ownerName,"onUpdate:modelValue":me[1]||(me[1]=be=>a.ownerName=be),maxlength:100,placeholder:"请输入创建者"},null,8,["modelValue"])]),_:1})]),_:1}),o.createVNode(rt,{span:8},{default:o.withCtx(()=>[o.createVNode(Je,{label:"创建时间"},{default:o.withCtx(()=>[o.createVNode(ht,{modelValue:a.createdAt,"onUpdate:modelValue":me[2]||(me[2]=be=>a.createdAt=be),type:"datetimerange","start-placeholder":"开始时间","end-placeholder":"结束时间","popper-class":"popperClass"},null,8,["modelValue"])]),_:1})]),_:1}),o.createVNode(rt,{span:4,style:{"padding-left":"20px","text-align":"right"}},{default:o.withCtx(()=>[o.createVNode(st,{onClick:me[3]||(me[3]=be=>$()),class:"query-btn"},{default:o.withCtx(()=>[...me[11]||(me[11]=[o.createTextVNode("查询",-1)])]),_:1}),o.createVNode(st,{onClick:me[4]||(me[4]=be=>U()),class:"reset"},{default:o.withCtx(()=>[...me[12]||(me[12]=[o.createTextVNode("重置",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])])]),o.createElementVNode("div",HF,[o.createElementVNode("div",null,[o.createVNode(he,{data:l.value,height:"500px","row-key":"id",onSelectionChange:O,style:{background:"#252e3d"},"header-cell-style":{background:"rgba(129,144,166,0.2)",color:"#fff"}},{default:o.withCtx(()=>[o.createVNode(Ve,{type:"index",label:"序号",width:"80"}),o.createVNode(Ve,{prop:"fileName",label:"文件名称",width:"300"}),o.createVNode(Ve,{prop:"createdAt",label:"创建时间",width:"300"}),o.createVNode(Ve,{prop:"size",label:"文件大小"}),o.createVNode(Ve,{prop:"ownerName",label:"文件创建者"}),o.createVNode(Ve,{prop:"action",label:"操作",width:"240"},{default:o.withCtx(({row:be})=>[o.createVNode(st,{class:"editBtn",text:"",onClick:Me=>A(be)},{default:o.withCtx(()=>[...me[13]||(me[13]=[o.createTextVNode("播放",-1)])]),_:1},8,["onClick"]),o.createVNode(st,{class:"editBtn",text:"",onClick:Me=>q(be)},{default:o.withCtx(()=>[...me[14]||(me[14]=[o.createTextVNode("下载",-1)])]),_:1},8,["onClick"]),o.createVNode(st,{class:"editBtn",text:"",onClick:Me=>K(be)},{default:o.withCtx(()=>[...me[15]||(me[15]=[o.createTextVNode("重命名",-1)])]),_:1},8,["onClick"]),o.createVNode(st,{class:"delBtn",text:"",onClick:Me=>x(be)},{default:o.withCtx(()=>[...me[16]||(me[16]=[o.createTextVNode("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])]),o.createVNode(P,{"current-page":i.value,"page-size":s.value,"page-sizes":[10,20,30,40],layout:"total, sizes, prev, pager, next, jumper",total:t.value,onSizeChange:Le,onCurrentChange:Ne,background:""},null,8,["current-page","page-size","total"])])]),o.createVNode(ve,{modelValue:c.value,"onUpdate:modelValue":me[6]||(me[6]=be=>c.value=be),width:"68%",center:"","show-close":!1,fullscreen:D.value,class:o.normalizeClass(["video-dialog",{"is-fullscreen":D.value}]),"destroy-on-close":!0,"before-close":V},{title:o.withCtx(()=>[o.createElementVNode("div",zF,[o.createElementVNode("div",GF,[me[17]||(me[17]=o.createElementVNode("span",null,null,-1)),o.createElementVNode("div",WF,o.toDisplayString(g.value),1)]),o.createElementVNode("div",KF,[o.createVNode(H,{class:"el-dialog__close",onClick:M,style:{"font-size":"20px"}},{default:o.withCtx(()=>[o.createVNode(o.unref(Uh))]),_:1})])])]),default:o.withCtx(()=>[o.createElementVNode("div",YF,[o.createElementVNode("div",XF,[o.createVNode(NF,{ref_key:"playerRef",ref:L,lang:"zh-CN",videoUrl:u.value,controls:!0,"show-custom-button":!0,"hide-snapshot-button":!0,live:!1,hasvideo:!0,onCloseVideo:M,onPlay:G,onPause:ae,onEnded:se,onError:oe},null,8,["videoUrl"])]),_.value?(o.openBlock(),o.createElementBlock("div",JF,[...me[18]||(me[18]=[o.createElementVNode("div",{class:"transcribe-title"},[o.createElementVNode("img",{src:e1,alt:""}),o.createElementVNode("div",null,"文字记录")],-1),o.createElementVNode("div",{class:"transcribe-loading"},[o.createElementVNode("img",{src:kF,alt:""}),o.createElementVNode("div",{class:"transcribe-loading-text"},"智能生成中...")],-1)])])):(o.openBlock(),o.createElementBlock("div",QF,[me[20]||(me[20]=o.createElementVNode("div",{class:"transcribe-title"},[o.createElementVNode("img",{src:e1,alt:""}),o.createElementVNode("div",null,"文字记录")],-1)),o.createElementVNode("div",ZF,[o.createVNode(Ke,{modelValue:R.value,"onUpdate:modelValue":me[5]||(me[5]=be=>R.value=be),style:{height:"36px"},placeholder:"请输入名称进行查询"},null,8,["modelValue"]),o.createElementVNode("div",eV,o.toDisplayString(k.value),1),me[19]||(me[19]=o.createElementVNode("div",{class:"message-footer"},"机器识别仅供参考",-1))])]))])]),_:1},8,["modelValue","fullscreen","class"]),o.createVNode(ve,{modelValue:T.value,"onUpdate:modelValue":me[10]||(me[10]=be=>T.value=be),title:"录像重命名",width:"30%",height:"30%",class:"reactName"},{default:o.withCtx(()=>[o.createVNode(ye,{ref_key:"detailFormRef",ref:F,model:S,"label-width":"100px",rules:m,style:{"margin-top":"20px"}},{default:o.withCtx(()=>[o.createVNode(Je,{label:"文件名称",prop:"fileName"},{default:o.withCtx(()=>[o.createVNode(Ke,{type:"text",maxlength:50,modelValue:S.fileName,"onUpdate:modelValue":me[7]||(me[7]=be=>S.fileName=be),placeholder:"请输入文件名称"},null,8,["modelValue"])]),_:1})]),_:1},8,["model","rules"]),o.createElementVNode("div",tV,[o.createVNode(st,{onClick:me[8]||(me[8]=be=>te()),class:"query-btn"},{default:o.withCtx(()=>[...me[21]||(me[21]=[o.createTextVNode("确定",-1)])]),_:1}),o.createVNode(st,{onClick:me[9]||(me[9]=be=>ne()),class:"reset"},{default:o.withCtx(()=>[...me[22]||(me[22]=[o.createTextVNode("取消",-1)])]),_:1})])]),_:1},8,["modelValue"])])}}},[["__scopeId","data-v-2d221a15"]]),nV={class:"live-address-book-head"},sV={class:"live-address-book-head-title"},rV={class:"live-address-book-content"},aV={class:"content-left-side"},oV={class:"left-item"},lV={class:"left-item-content"},cV={class:"search-bar"},uV={class:"custom-tree-node"},dV={key:0,class:"custom-tree-node-user"},hV={key:0,class:"custom-tree-node-prefix-icon",src:kB,alt:""},fV={key:1,class:"custom-tree-node-prefix-icon",src:EB,alt:""},pV=["title"],mV={key:1,class:"custom-tree-node-user",style:{"margin-left":"-20px"}},gV=["title"],yV={class:"chosen"},vV={class:"chosen-title"},bV={class:"chosen-title-num"},TV={class:"content-right-side"},SV={class:"meeting-entry-right-head"},_V={style:{display:"flex","align-items":"center","justify-content":"space-between",width:"100%"}},CV={class:"preview-meeting-list-left"},kV={class:"preview-meeting-list-left-primary"},EV={class:"preview-meeting-name"},wV={class:"preview-meeting-list-left-sub"},xV={class:"meeting-message-item"},DV={class:"meeting-message-item-value"},AV={class:"meeting-message-item"},PV={class:"meeting-message-item-value"},IV={class:"meeting-message-item"},NV={class:"meeting-message-item-value"},RV={class:"preview-meeting-list-right"},MV=["onClick"],OV=["onClick"],LV={key:1,class:"empty-box"},BV={class:"watermark-text"},UV={class:"watermark-text"},FV={class:"watermark-text"},t1="1.1.3",VV="meetingSystemVersion",lc=Ft({__name:"LiveAddressBook",props:{title:{type:String,default:"视频会商"},baseUrl:{type:String,default:""},meetingVideo:{type:Boolean,default:!1},userData:{type:Object,default:()=>({})},org:{type:String,default:"default"},token:{type:String,default:""},meetingTitle:{type:String,default:"调度会议"}},emits:["enterDialogClose","quickLaunch","launchMeeting","joinMeeting"],setup(n,{expose:e,emit:t}){let i=null;const s=new ki,r=()=>{try{localStorage.setItem(VV,t1),console.log(`版本号已保存到 localStorage: ${t1}`)}catch(Fe){console.error("保存版本号到 localStorage 失败:",Fe)}},a=n,l=t,c=o.ref(!1),u=o.ref(),d=o.ref(),f=o.ref(),g=o.ref(""),T=o.ref([]),S=o.ref([]),m=o.ref([]),_=o.ref([]),k=o.ref(null),R=o.ref({}),D=o.ref("add"),F=o.ref(!1),L=o.ref(!1),$=o.reactive({left:"0px",top:"0px"}),U=o.ref(""),O=o.ref(!1),x=o.ref("launch"),A=o.ref(!1),M=o.ref([]),V=o.reactive({systemName:"视频会议",visible:!0,opacity:.08,fontSize:14,color:"#ffffff",gap:300}),G=o.computed(()=>m.value.length),ae=o.computed(()=>m.value.length>0?m.value.map(Fe=>Fe.userId):[]),se=o.computed(()=>cn().format("MM月DD日")),oe=o.computed(()=>_.value.length),q=o.computed(()=>({position:"absolute",top:0,left:0,width:"100%",height:"100%",pointerEvents:"none",zIndex:9999,overflow:"hidden"}));o.watch(()=>g.value,async Fe=>{await o.nextTick(),u.value.filter(Fe)}),o.watch(()=>S.value,(Fe,Pe)=>{Fe.length>0&&Fe.forEach(_t=>{de(_t)}),Pe.forEach(_t=>{Fe.length>0?Fe.findIndex(Ci=>Ci.userId===_t.userId)<0&&Ne(_t.mobile):(u.value.setChecked(_t.userId,!1,!1),Ne(_t.mobile))})},{deep:!0});function K(){c.value=!0}function te(Fe){return new Promise((Pe,_t)=>{Vv({},{baseUrl:a.baseUrl,token:Fe||a.token}).then(lt=>{var Ci,pt;((Ci=lt.data)==null?void 0:Ci.code)===0?(pt=lt.data)!=null&&pt.data&&(T.value=lt.data.data,Pe()):(s.message("error","获取通讯录组织数据失败"),_t())})})}function ne(Fe){return G.value>0?m.value.findIndex(_t=>_t.mobile===Fe):-1}function de(Fe){if(G.value<=0)m.value.push(Fe);else{if(ne(Fe.mobile)!==-1)return;m.value.push(Fe)}}function Ne(Fe){if(G.value>0){const Pe=ne(Fe);Pe!==-1&&m.value.splice(Pe,1)}}function Le(){Ze.emit("getaddressBookUserForAddressBook")}async function xe(Fe){S.value=Fe,await o.nextTick(),u.value.setCheckedKeys(ae.value,!1)}async function me(Fe){var Pe;document.fullscreenElement||document.msFullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement?document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen():(await o.nextTick(),(Pe=d.value)!=null&&Pe.requestFullscreen&&d.value.requestFullscreen())}function Ke(){l("enterDialogClose")}function Je(){O.value=!1}function rt(Fe,Pe){return Fe?Pe.label.includes(Fe):!0}async function ht(){await o.nextTick();const Fe=u.value.getCheckedNodes(!0,!1);S.value=Fe.filter(Pe=>!Pe.children).map(Pe=>st(Pe))}function st(Fe){if(Fe!=null&&Fe.classify&&Fe.classify==="设备"){const Pe={userId:Fe.id,userName:Fe.label,mobile:Fe.equipmentCode,...Fe};return Pe.mobile=Fe.equipmentCode,Pe}else return{userId:Fe.id,userName:Fe.label,mobile:Fe.phone,...Fe}}function dt(Fe){KP({},{baseUrl:a.baseUrl,token:Fe||a.token}).then(Pe=>{var _t;((_t=Pe.data)==null?void 0:_t.code)==0?(_.value=[],Pe.data.data.length>0&&(_.value=Pe.data.data.map(lt=>{var Ci,pt;return{roomName:lt.roomAlias,roomNum:lt.roomName,status:lt.status,beginTime:cn(lt.reserveStart).format("HH:mm"),endTime:cn(lt.reserveEnd).format("HH:mm"),beginFullTime:lt.reserveStart,endFullTime:lt.reserveEnd,creator:lt.ownerName,realNumParticipants:lt.realNumParticipants,owner:lt.owner,org:lt.org,preMeetingNotify:lt.preMeetingNotify,joinBefore:lt.joinBefore!==0,joinMute:lt.joinMute!==0,autoRecord:lt.autoRecord!==0,inviteOthers:lt.inviteOthers!==0,venueName:lt!=null&<.metadata&<.metadata!=="null"?(Ci=JSON.parse(lt.metadata))==null?void 0:Ci.venueName:"",meetingCompany:lt!=null&<.metadata&<.metadata!=="null"?(pt=JSON.parse(lt.metadata))==null?void 0:pt.meetingCompany:"",zone:lt.zone}}))):_.value=[]})}function ye(Fe){R.value=Fe,D.value="edit",F.value=!0}function Ve(Fe){R.value=Fe,D.value="detail",F.value=!0}function he(Fe){const Pe={identity:Fe.owner,room:Fe.roomNum,org:Fe.org};Uv(Pe,{baseUrl:window.liveClient.baseUrl,token:a.token}).then(_t=>{(_t==null?void 0:_t.data.code)===200?(mf(Fe.roomNum,{baseUrl:a.baseUrl,token:a.token}),s.message("success","成功取消会议"),dt()):s.message("error","取消会议失败")})}function P(Fe){const Pe={identity:Fe.owner,room:Fe.roomNum,org:Fe.org};Uv(Pe,{baseUrl:window.liveClient.baseUrl,token:a.token}).then(_t=>{(_t==null?void 0:_t.data.code)===200?(mf(Fe.roomNum,{baseUrl:a.baseUrl,token:a.token}),dt()):s.message("error","结束会议失败")})}function H(){l("quickLaunch",{roomName:a.userData.username+"的视频会议",cameraStatus:!0,microphoneStatus:!0,audioInputDevice:"",audioOutputDevice:"",videoDevice:"",inviteList:m.value}),Ke()}function ve(Fe){const Pe={...Fe,inviteList:m.value};l("launchMeeting",Pe),Ke()}function be(Fe){const Pe={...Fe,inviteList:[]};l("joinMeeting",Pe),Ke()}function Me(){S.value=[]}function Be(){Me()}function et(Fe){m.value=Array.isArray(Fe)?Fe:[],S.value=Array.isArray(Fe)?Fe:[]}function tt(){x.value="launch",O.value=!0}function ft(){U.value="",x.value="join",O.value=!0}function we(){D.value="add",F.value=!0}function Ie(Fe){U.value=Fe.roomNum,x.value="join",O.value=!0}function Vt(Fe,Pe){var _t;L.value?((_t=k.value)==null?void 0:_t.roomNum)===Fe.roomNum?L.value=!1:(L.value=!1,k.value=Fe,$.left=Pe.target.offsetLeft-60+"px",$.top=Pe.target.offsetTop+24+"px",L.value=!0):(k.value=Fe,$.left=Pe.target.offsetLeft-60+"px",$.top=Pe.target.offsetTop+24+"px",L.value=!0)}const kt=Fe=>({position:"absolute",left:`${Fe.x}px`,top:`${Fe.y}px`,color:V.color,fontSize:`${V.fontSize}px`,opacity:V.opacity,transform:"rotate(-45deg)",pointerEvents:"none",userSelect:"none",fontFamily:"PingFang SC, Microsoft YaHei, sans-serif",fontWeight:"bold",letterSpacing:"1px",lineHeight:"1.2"}),hi=()=>{const Fe=V.systemName;let Pe="admin";try{const lt=localStorage.getItem("rhtxUser");lt&&(Pe=JSON.parse(lt).username||"admin")}catch(lt){console.error("获取用户信息失败:",lt)}const _t=new Date().toLocaleDateString();return{systemName:Fe,loginAccount:Pe,date:_t}},ni=()=>{if(!V.visible){A.value=!1;return}const Fe=hi(),Pe=[],_t=window.innerWidth,lt=window.innerHeight,Ci=Math.ceil(_t/V.gap)+1,pt=Math.ceil(lt/V.gap)+1;for(let Ct=0;Ct<pt;Ct++)for(let Mi=0;Mi<Ci;Mi++){const pi=Mi*V.gap,tn=Ct*V.gap;pi<_t&&tn<lt&&Pe.push({...Fe,x:pi,y:tn})}M.value=Pe,A.value=!0},fi=()=>{ni()};return o.onMounted(()=>{i=setInterval(()=>{dt()},5e3),ni(),window.addEventListener("resize",fi),r()}),o.onBeforeUnmount(()=>{i&&(clearInterval(i),i=null),window.removeEventListener("resize",fi)}),e({getUserAndOrgTreeData:te,getPreviewMeetingList:dt}),(Fe,Pe)=>{const _t=o.resolveComponent("el-input"),lt=o.resolveComponent("el-tree"),Ci=o.resolveComponent("el-dialog");return o.openBlock(),o.createElementBlock("div",{class:"live-address-book",ref_key:"rootElm",ref:d},[o.createElementVNode("div",nV,[o.createElementVNode("div",sV,o.toDisplayString(n.title),1),o.createElementVNode("div",{class:"head-btn-group"},[o.createElementVNode("div",{class:"head-btn head-btn-screen",onClick:me}),o.createElementVNode("div",{class:"head-btn head-btn-close",onClick:Ke})])]),o.createElementVNode("div",rV,[o.createElementVNode("div",aV,[o.createElementVNode("div",{class:"enter-list"},[o.createElementVNode("div",{class:"enter-list-item",onClick:H},[...Pe[5]||(Pe[5]=[o.createElementVNode("div",{class:"enter-item-icon enter-item-icon-quick"},null,-1),o.createElementVNode("div",{class:"enter-item-title"},"快速会议",-1)])]),o.createElementVNode("div",{class:"enter-list-item",onClick:ft},[...Pe[6]||(Pe[6]=[o.createElementVNode("div",{class:"enter-item-icon enter-item-icon-join"},null,-1),o.createElementVNode("div",{class:"enter-item-title"},"加入会议",-1)])]),o.createElementVNode("div",{class:"enter-list-item",onClick:we},[...Pe[7]||(Pe[7]=[o.createElementVNode("div",{class:"enter-item-icon enter-item-icon-preview"},null,-1),o.createElementVNode("div",{class:"enter-item-title"},"预约会议",-1)])])]),o.createElementVNode("div",oV,[Pe[13]||(Pe[13]=o.createElementVNode("div",{class:"left-item-title"},[o.createElementVNode("div",{class:"label"},"通讯录")],-1)),o.createElementVNode("div",lV,[o.createElementVNode("div",cV,[o.createVNode(_t,{class:"search-input",modelValue:g.value,"onUpdate:modelValue":Pe[0]||(Pe[0]=pt=>g.value=pt),placeholder:"请输入名称进行搜索"},{suffix:o.withCtx(()=>[...Pe[8]||(Pe[8]=[o.createElementVNode("i",{class:"el-input__icon el-icon-search"},null,-1)])]),_:1},8,["modelValue"])]),o.createVNode(lt,{class:"tree-content",data:T.value,"default-expand-all":!1,"node-key":"id","show-checkbox":"","filter-node-method":rt,ref_key:"tree",ref:u,onCheck:ht},{default:o.withCtx(({node:pt,data:Ct})=>[o.createElementVNode("span",uV,[Ct.children?(o.openBlock(),o.createElementBlock("span",dV,[Ct.children.length<=0?(o.openBlock(),o.createElementBlock(o.Fragment,{key:0},[pt.expanded?(o.openBlock(),o.createElementBlock("img",hV)):(o.openBlock(),o.createElementBlock("img",fV))],64)):o.createCommentVNode("",!0),o.createElementVNode("span",{class:"custom-tree-node-label",title:pt.label},o.toDisplayString(pt.label),9,pV)])):(o.openBlock(),o.createElementBlock("span",mV,[Pe[9]||(Pe[9]=o.createElementVNode("span",{class:o.normalizeClass(["custom-tree-node-icon"])},null,-1)),o.createElementVNode("span",{class:"custom-tree-node-label",title:pt.label},o.toDisplayString(pt.label),9,gV)]))])]),_:1},8,["data"]),o.createElementVNode("div",yV,[o.createElementVNode("div",vV,[Pe[10]||(Pe[10]=o.createElementVNode("div",{class:"chosen-title-label"},"已选",-1)),o.createElementVNode("div",bV,o.toDisplayString(G.value),1),o.createElementVNode("div",{class:"chosen-title-icon",onClick:Le})])]),o.createElementVNode("div",{class:"options"},[o.createElementVNode("div",{class:"option option-reset",onClick:Me},[...Pe[11]||(Pe[11]=[o.createElementVNode("span",null,"重置",-1)])]),o.createElementVNode("div",{class:"option option-launch",onClick:tt},[...Pe[12]||(Pe[12]=[o.createElementVNode("img",{class:"option-icon",src:wB,alt:""},null,-1),o.createElementVNode("span",null,"发起会议",-1)])])])])])]),o.createElementVNode("div",TV,[o.createElementVNode("div",SV,[Pe[15]||(Pe[15]=o.createElementVNode("img",{class:"logo",src:xB,alt:""},null,-1)),o.createElementVNode("div",_V,[o.createElementVNode("div",null,[Pe[14]||(Pe[14]=o.createElementVNode("span",{style:{"margin-right":"30px"}},"今天",-1)),o.createElementVNode("span",null,o.toDisplayString(se.value),1)]),n.meetingVideo?(o.openBlock(),o.createElementBlock("div",{key:0,style:{cursor:"pointer"},onClick:K}," 会议录像 ")):o.createCommentVNode("",!0)])]),o.createElementVNode("div",{class:o.normalizeClass(["meeting-entry-right-content",{"meeting-entry-right-content-empty":oe.value<=0}])},[oe.value>0?(o.openBlock(!0),o.createElementBlock(o.Fragment,{key:0},o.renderList(_.value,(pt,Ct)=>(o.openBlock(),o.createElementBlock("div",{class:"preview-meeting-list",key:"p"+Ct},[o.createElementVNode("div",CV,[o.createElementVNode("div",kV,[Pe[16]||(Pe[16]=o.createElementVNode("div",{class:"preview-logo"},null,-1)),o.createElementVNode("div",EV,o.toDisplayString(pt.roomName),1),o.createElementVNode("div",{class:o.normalizeClass(["preview-meeting-status",pt.status==0?"preview-meeting-status-unstart":"preview-meeting-status-start"])},o.toDisplayString(pt.status==0?"待开始":"已开始"),3)]),o.createElementVNode("div",wV,[o.createElementVNode("div",xV,[Pe[17]||(Pe[17]=o.createElementVNode("div",{class:"meeting-message-item-title"},"发起人:",-1)),o.createElementVNode("div",DV,o.toDisplayString(pt.creator),1)]),o.createElementVNode("div",AV,[Pe[18]||(Pe[18]=o.createElementVNode("div",{class:"meeting-message-item-title"},"时间:",-1)),o.createElementVNode("div",PV,o.toDisplayString(pt.beginTime)+"~"+o.toDisplayString(pt.endTime),1)]),o.createElementVNode("div",IV,[Pe[19]||(Pe[19]=o.createElementVNode("div",{class:"meeting-message-item-title"},"会议ID:",-1)),o.createElementVNode("div",NV,o.toDisplayString(pt.roomNum),1)])])]),o.createElementVNode("div",RV,[o.createElementVNode("div",{class:"enter-btn",onClick:Mi=>Ie(pt)}," 进入会议 ",8,MV),o.createElementVNode("div",{class:"more-btn",onClick:Mi=>Vt(pt,Mi)},null,8,OV)])]))),128)):(o.openBlock(),o.createElementBlock("div",LV,[...Pe[20]||(Pe[20]=[o.createElementVNode("div",{class:"empty-logo"},null,-1),o.createElementVNode("div",{class:"empty-text"},"今日暂无会议",-1)])]))],2)])]),o.createVNode(fd,{inviteList:m.value,baseUrl:n.baseUrl,token:n.token,componentType:"addressBook",onInviteListUpdate:xe,ref_key:"addressBook",ref:f},null,8,["inviteList","baseUrl","token"]),L.value?(o.openBlock(),o.createBlock(v4,{key:0,previewMeetingData:k.value,optionDialogOffset:$,mobile:n.userData.mobile,onUpdateMeetingDetail:ye,onCheckMeetingDetail:Ve,onCancelMeeting:he,onEndMeeting:P,onClose:Pe[1]||(Pe[1]=pt=>L.value=!1)},null,8,["previewMeetingData","optionDialogOffset","mobile"])):o.createCommentVNode("",!0),F.value?(o.openBlock(),o.createBlock(B4,{key:1,width:"540px",title:"预约会议",previewType:D.value,previewMeetingData:R.value,baseUrl:n.baseUrl,inviteList:m.value,userData:n.userData,org:n.org,token:n.token,onClose:Pe[2]||(Pe[2]=pt=>F.value=!1),onPreviewSuccess:dt,onUpdateSuccess:dt,onPreviewResetInviteList:Be,onPreviewUpdateInviteList:et},null,8,["previewType","previewMeetingData","baseUrl","inviteList","userData","org","token"])):o.createCommentVNode("",!0),O.value?(o.openBlock(),o.createBlock(ZE,{key:2,dialogType:x.value,tempRoomNum:U.value,onClose:Je,onLaunchMeeting:ve,onJoinMeeting:be,meetingTitle:n.meetingTitle},null,8,["dialogType","tempRoomNum","meetingTitle"])):o.createCommentVNode("",!0),o.createVNode(Ci,{modelValue:c.value,"onUpdate:modelValue":Pe[3]||(Pe[3]=pt=>c.value=pt),width:"68%",onClose:Pe[4]||(Pe[4]=pt=>c.value=!1),style:{background:"rgba(37,46,61,0.95)"},class:"history-video-dialog",title:"会议录像"},{default:o.withCtx(()=>[o.createVNode(iV,{baseUrl:n.baseUrl,token:n.token},null,8,["baseUrl","token"])]),_:1},8,["modelValue"]),A.value?(o.openBlock(),o.createElementBlock("div",{key:3,class:"watermark-container",style:o.normalizeStyle(q.value)},[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(M.value,(pt,Ct)=>(o.openBlock(),o.createElementBlock("div",{key:Ct,class:"watermark-item",style:o.normalizeStyle(kt(pt))},[o.createElementVNode("div",BV,o.toDisplayString(pt.systemName),1),o.createElementVNode("div",UV,o.toDisplayString(pt.loginAccount),1),o.createElementVNode("div",FV,o.toDisplayString(pt.date),1)],4))),128))],4)):o.createCommentVNode("",!0)],512)}}},[["__scopeId","data-v-84c277c3"]]);lc.install=function(n){n.component("LiveAddressBook",lc)};const Dg="/assets/img/meeting/share.png",jV="/assets/img/meeting/chat.png",i1="/assets/img/meeting/record.png",qV="/assets/img/meeting/member.png",$V="/assets/img/meeting/invite.png",HV="/assets/img/meeting/copy-icon.png",zV={class:"dialog-inner"},GV={class:"mark-list"},WV={class:"mark-list-value"},KV={class:"mark-list"},YV={class:"mark-list-value"},XV={id:"meeting-num"},JV={class:"mark-icon"},QV={class:"mark-list"},ZV={class:"mark-list-value"},e6=Ft({__name:"ThemeDialog",props:{position:{type:Object,default:()=>({left:"0px",top:"36px"})},meetingName:{type:String},meetingNum:{type:String},meetingH5Link:{type:String},meetingWXLink:{type:String},meetingCreator:{type:String}},setup(n){const e=n,t=new ki,i=async r=>{await o.nextTick();let a=document.getElementById(r);if(a){if(navigator.clipboard){const l=a.innerText;navigator.clipboard.writeText(l).then(()=>{t.message("success","已复制到剪贴板")}).catch(c=>{t.message("error","复制失败,请重试")})}else t.message("warning","当前浏览器不支持复制内容");a=null}},s=async()=>{if(await o.nextTick(),navigator.clipboard){const r=`会议主题:${e.meetingName}
|
|
309
309
|
会议ID:${e.meetingNum}
|
|
310
310
|
会议链接:${e.meetingH5Link}
|
|
311
311
|
小程序链接:${e.meetingWXLink}
|